Unity에서 다면체(3D 모델)를 구성하는 기본 요소에는 Vertex(정점), Polygon(다각형), Mesh(메시)가 있다.
Vertex(정점)란, 3D 공간상의 한 점으로, (x, y, z) 좌표를 가지며 도형의 가장 기본 단위이다. 모든 도형은 정점들을 기반으로 만들어진다. 예시로는 삼각형은 세 개의 정점, 정육면체는 8개의 정점을 가지게 된다.
Polygon(다각형)이란, 여러 정점(Vertices)을 연결하여 만든 면(Face), Unity 내부적으로는 대부분 삼각형(Tris)로 분할하여 렌더링한다. 예시로는 사각형은 두 개의 삼각형으로 나누어 처리하게 된다.
Mesh(메시)란, 정점(Vertex), 면(Polygon), 그리고 이들을 연결하는 정보로 구성된 3D 모델 데이터이다. 3D 오브젝트의 형상을 정의하며, Unity에서는 MeshFilter와 MeshRenderer로 렌더링된다.
또한 폴리곤은 방향이 있다. 이를 통해 렌더링 되는 곳과 그렇지 않은 곳이 있을 수 있으며, 음영 또한 이를 활용하여 표현된다.
Texture: Texture는 어떤 모델의 표면에 대한 이미지 정보를 가지고 있다. 메시는 데이터로만 존재할 뿐, 외형이 존재하지 않기 때문에 각 폴리곤에 대한 좌표를 미리 맵핑(UV Mapping)하고, 각 좌표에 맞춰 메쉬에 마치 옷을 입히듯 이미지를 덧씌워 주는 것이 폴리곤이다.
Material: 물체의 표면정보를 종합적으로 가지는 속성이다. 표면의 색상, 질감, 빛 반사율, 투명도 등을 결정하며, 실감나는 3D 모델의 연출을 위해 사용된다. 같은 색이더라도 다양한 설정을 통해 모델의 표면을 더 실감나게 표현할 수 있다.
Shader: 3D 컴퓨터 그래픽에서 최종적으로 화면에 출력하는 픽셀의 색 정보를 지정해 주는 함수(프로그램)이다. 그래픽의 빠른 연산을 위해 도입됐으며, 렌더링 파이프라인의 종류에 따라 이 셰이더가 다르게 동작하므로, 렌더링 파이프라인 적용 시 반드시 고려하고 확인해야 할 대상이다.
레이어 마스크는 태그와 비슷하게 오브젝트들을 분류해 관리할 수 있다. 이를 사용한다면 특정 오브젝트 분류에 대한 충돌처리, 그리고 선택적으로 미니맵에 표시되는 오브젝트들을 조정할 수 있다.
레이어마스크는 32개의 비트를 통해 스크립트에서 지정할 수 있으며, 비트 연산을 통해 동적으로 변경할 시에도 성능적으로 이득을 볼 수 있다.
코드 예시
// "Enemy" 레이어만 충돌 감지
int layerMask = 1 << LayerMask.NameToLayer("Enemy");
RaycastHit hit;
if (Physics.Raycast(transform.position, transform.forward, out hit, 100f, layerMask))
{
Debug.Log("Enemy hit!");
}
렌더 텍스쳐란, 카메라의 렌더링 결과를 일반 화면이 아닌, 텍스처 형태로 출력받을 수 있게 해주는 텍스처 자원이다. 이를 통해 카메라가 보는 화면을 실시간으로 UI나 오브젝트 표면에 표시할 수 있다.
이를 활용하여 게임 최적화 요소로도 쓰인다. 대표적인 예시로는 물 등의 자연효과를 연산하지 않고 미리 녹화해둔 영상을 플레이하거나 거울, 그림자, 광원, 화면 캡쳐 등이 있다.
렌더 텍스쳐의 생성 방법은 다음과 같다.
프로젝트에서 Assets > Create > Render Texture 생성
카메라에 할당
camera.targetTexture = renderTexture;UI 또는 Material에 출력