실시간 전역 조명 시스템과 베이크된 전역 조명 시스템은 모두 라이트맵을 사용하므로 라이트맵 UV가 필요합니다.
Unity는 실시간 전역 조명 시스템과 베이크된 전역 조명 시스템에 별도의 라이트맵 UV 세트를 사용합니다. 여기에는 다음과 같은 두 가지 이유가 있습니다.
베이크된 라이트맵 UV는 메시 단위이며, 동일한 메시의 모든 인스턴스는 동일한 베이크된 라이트맵 UV를 공유합니다. Unity는 모델을 임포트할 때 베이크된 라이트맵에 대한 UV를 계산할 수 있으며 직접 데이터를 제공할 수도 있습니다.
Unity는 베이크된 라이트맵 UV를 Mesh.uv2 채널의 메시에 저장합니다. 이 채널은 TEXCOORD1 셰이더 시맨틱에 매핑되며 일반적으로 ‘UV1’이라고 합니다.
베이크된 전역 조명이 활성화되고 특정 메시 렌더러가 라이트맵에서 해당 전역 조명을 받는 경우 Unity는 Mesh.uv2 채널의 데이터를 사용하여 베이크된 라이트맵을 메시로 올바르게 매핑합니다.
참고: 특정 메시에서 다른 목적으로 Mesh.uv2를 사용하려면 메시를 사용하는 모든 MeshRenderer 컴포넌트가 라이트맵이 아닌 라이트 프로브에서 전역 조명을 받도록 해야 합니다. 이를 변경하려면 Mesh Renderer 컴포넌트 인스펙터 또는 MeshRenderer.receiveGI API를 사용합니다.
자세한 내용은 라이트맵 UV 생성을 참조하십시오.
실시간 라이트맵 UV는 메시 단위 렌더러입니다. 동일한 메시의 모든 인스턴스는 동일한 입력 데이터를 공유하지만, 메시 렌더러의 다른 인스턴스는 런타임 시점에 다른 실시간 라이트맵 UV를 사용할 수 있습니다. Unity는 사전 계산 단계에서 실시간 전역 조명 시스템에 대한 UV를 계산합니다. 이 계산은 메시당 UV를 입력으로 사용하고 해당 데이터를 사용하여 메시당 렌더러 UV를 생성합니다. Unity는 모델을 임포트할 때 메시당 입력 UV를 생성하거나 자체 데이터를 제공할 수 있습니다.
이는 다음과 같이 작동합니다.
Mesh.uv3은 TEXCOORD2 셰이더 시맨틱에 매핑되며 이를 보통 ‘UV2’라고 합니다.Mesh.uv3에 데이터가 없지만 Mesh.uv2에 데이터가 있는 경우 Unity는 Mesh.uv2의 데이터를 실시간 라이트맵 UV 계산에 대한 입력으로 사용합니다. 베이크된 라이트맵 UV에는 Mesh.uv2가 사용됩니다. 베이크된 라이트맵 UV를 실시간 라이트맵 UV의 입력 데이터로 사용하는 것이 일반적입니다.MeshRenderer.enlightenVertexStream의 데이터를 Mesh.uv3의 데이터 대신 셰이더의 TEXCOORD2에 자동으로 전달합니다.참고: 실시간 전역 조명을 사용하는 메시에서 다른 목적으로 Mesh.uv3를 사용하려면 메시를 사용하는 모든 MeshRenderer 컴포넌트가 라이트맵이 아닌 라이트 프로브에서 전역 조명을 받도록 해야 합니다. 이를 변경하려면 Mesh Renderer 컴포넌트 인스펙터 또는 MeshRenderer.receiveGI API를 사용합니다.
자세한 내용은 라이트맵 UV 생성을 참조하십시오.
Unity가 메시별 입력 UV를 가져와 메시별 렌더러 출력 UV로 처리할 때 발생하는 작업입니다.
Unity는 실시간 라이트맵 UV를 리패킹하여 각 차트의 경계가 모든 방향에서 텍셀의 중심에 들어오도록 한 후 각 차트의 경계 주변에 패딩의 하프 텍셀을 추가해야 합니다. 이렇게 하면 모든 차트는 차트 사이에 텍셀 하나의 공간을 갖게 됩니다.
이는 실시간 라이트맵의 해상도를 의도적으로 낮게 설정하여 실시간으로 업데이트할 수 있도록 하기 위함입니다. 저해상도는 라이트맵이 저주파수 간접 조명만 저장하므로 그래픽 품질에는 영향을 주지 않지만 차트가 텍셀을 공유하면 블리딩이 발생할 수 있습니다. 리패킹하면 차트가 텍셀을 공유하지 않습니다. 이 문제를 방지하고, Unity가 차트를 효율적으로 나란히 패킹할 수도 있습니다.
참고: 이 패킹 기법은 계산된 UV가 인스턴스의 스케일과 라이트맵 해상도에 따라 달라지므로 실시간 라이트맵 UV가 메시 렌더러별로 계산됩니다. 그러나 Unity는 가능한 경우 이를 자동으로 최적화하여 동일한 스케일과 라이트맵 해상도로 동일한 메시를 사용하는 메시 렌더러는 동일한 UV를 공유합니다.
필요에 따라 가능한 경우 이 프로세스 중에 UV 차트를 병합하도록 Unity에 지시할 수 있습니다. 이렇게 하면 라이트맵의 크기가 줄어들고 런타임 메모리 사용량과 성능이 향상될 수 있습니다.
Mesh Renderer 컴포넌트가 있는 모든 게임 오브젝트에서 이 최적화를 활성화할 수 있습니다. 메시 렌더러 인스펙터에서 Lightmapping 섹션으로 이동하여 Optimize Realtime UVs를 선택합니다.
참고: 이 기능은 가끔 원래 UV 매핑의 끊어진 부분을 잘못 판단하는 경우가 있습니다. 예를 들어 의도적으로 날카로운 가장자리를 연속된 표면으로 잘못 해석할 수 있습니다. 이 경우 이 기능을 비활성화하십시오.