UDN
Search public documentation:

NormalMapFormatsKR
English Translation
日本語訳
中国翻译

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3 홈 > 머티리얼과 텍스처 > 노멀맵 포맷
UE3 홈 > 텍스처 아티스트 > 노멀맵 포맷

노멀맵 포맷


문서 변경내역: 잭 포터 작성. 홍성진 번역.

개요


QA_APPROVED_BUILD_SEP_2009 버전 이후로 엔진에 여러가지 노멀맵 포맷이 지원되고 있습니다. 여기서는 각 포맷의 장단점과, Normal Parameter 머티리얼 노드 사용법에 대해 알아보겠습니다.

노멀 포맷


이 표는 여러가지 노멀 포맷의 특징을 정리해 놓은 것입니다.

압축 세팅 텍스처 포맷 채널 픽셀당 비트 1024x1024 에 대한 크기 코멘트
TC_Normalmap DXT1 3(*) 4 512 KB * DXT1 의 알파 채널에 1 비트 알파(마스크)를 저장할 수 있습니다.
TC_NormalmapAlpha DXT5 4 8 1024 KB  
TC_NormalmapUncompressed V8U8 2 16 2048 KB DXT1 에 비해 메모리 사용량이 네 배라, 엔진은 DXT1 풋프린트에 맞추기 위해 자동으로 해상도를 1 밉맵 낮춥니다.
TC_NormalmapBC5 BC5 (3Dc / DXN) 2 8 1024 KB DirectX 10 과 Xbox 360 에서, ATI 카드는 DirectX 9 에서도 지원됩니다.

TC_Normalmap / DXT1

Normal_DXT15.png

TC_Normalmap (DXT1) 는 다른 어떤 포맷보다 메모리 사용량이 적으나, DXT 블록 압축은 노멀 데이터를 저장하기에 그리 적합하지 않습니다. 결과는 보통 매우 각지게 됩니다.

TC_NormalmapAlpha / DXT5

TC_NormalmapAlpha (DXT5) 의 시각적 결과는 DXT1 과 같으나, 마스크로 사용하기 위해 압축된 알파 채널 데이터가 픽셀당 4 비트 있기도 합니다. 퍼포먼스를 보자면 다른 텍스처를 샘플링하는 것 보다는 DXT5 텍스처에 필요한 마스크를 넣는 편이 낫습니다. 그러나 마스크를 디퓨즈 텍스처에 넣는다면, 노멀에 또다른 포맷을 사용할 수도 있을 것입니다.

TC_NormalmapUncompressed / V8U8

Normal_Uncompressed.png

미압축 포맷은 노멀의 3 채널 중 둘을 각각 8 비트(, 즉 픽셀당 16 비트)씩으로 저장합니다. 품질은 가장 좋습니다만 두 채널만 저장되기 때문에 Z 는 픽셀 셰이더에서 계산해 줘야 합니다. (머티리얼 에디터에서 이 계산을 자동으로 해 주는데, 위 스크린샷에서 인스트럭션 수가 늘어난 것을 볼 수 있습니다.)

메모리 사용량이 DXT1 의 4배이기 때문에, X Y 해상도를 절반으로 (즉 1 밉레벨) 줄이면 메모리 사용량은 같아집니다. 저희는 반해상도 미압축 노멀이 DXT1 압축 노멀보다 낫다고 믿기에, 텍스처 에디터는 TC_NormalmapUncompressed 포맷을 선택하면 자동으로 해상도를 낮춥니다. 다른 포맷으로 바꾸면 텍스처의 원래 해상도로 돌아갑니다.

(이 기능에 대한 코드는 UTexture2D::Compress() 에 있으니, 이 기능을 지우거나 끄시려면 참고하시기 바랍니다.)

TC_NormalmapBC5 / BC5 (3Dc / DXN)

Normal_BC5.png

BC5, 또는 3Dc 나 DXN 으로 알려진 포맷은 모든 플랫폼에 지원되지는 않습니다. DirectX 10, Xbox360 과 ATI 그래픽 카드의 DirectX 9 에서만 지원됩니다. 노멀의 X Y 벡터에는 DXT5 의 알파 채널과 비슷한 픽셀별 4 비트 블록 압축 스키마를 사용합니다. 즉 각 채널이 서로 독립적이라는 뜻입니다. DXT5 와 같은 메모리 풋프린트로 훨씬 각이 덜지는 결과를 냅니다. 미압축 포맷처럼 Z 는 픽셀 셰이더에서 구합니다.

머티리얼 에디터 사용 참고


일부 포맷은 픽셀 셰이더에서 Z 채널을 재구성해 줘야 하기 때문에, 여러가지 텍스처 포맷을 사용하면 여러가지 픽셀 셰이더 코드를 필요로 하게 됩니다. 이 부분은 머티리얼 에디터가 알아서 해 주는 부분입니다만, 조심해야할 함정이 있습니다.

TextureSample 노드

TextureSample 노드 안에는 어떤 포맷의 노멀을 사용해도 제대로 돌아갑니다. 그러나 노멀 포맷 검사는 머티리얼 셰이더가 리컴파일될 때만 합니다. 그래서 셰이더를 리컴파일하지 않고 노멀 텍스처의 CompressionSettings(압축 세팅)을 바꾸면, 생성되는 픽셀 셰이더 코드가 일치하지 않을 수 있습니다. UnpackMin/Max 의 작동방식과도 비슷한 점이 있습니다.

TextureSampleParameter2D 노드

TextureSampleParameter2D 노드의 디폴트 값 안에서는 어떤 포맷의 노멀을 사용해도 제대로 돌아갑니다. 그러나 디폴트 값을 덮어쓰는 머티리얼 인스턴스는 파라미터의 디폴트 Texture 프로퍼티로 CompressionSettings(압축 세팅)을 똑같이 해야 합니다. TextureSample 과 마찬가지로, 셰이더 리컴파일 없이 디폴트 텍스처의 CompressionSettings(압축 세팅)을 바꿀 때 똑같은 경고가 적용됩니다.

TextureSampleParameterNormal 노드

NormalParam.png

TextureSampleParameterNormal 노드의 디폴트 값 안에서는 어떤 포맷의 노멀을 사용해도 제대로 돌아가며, 또 머티리얼 인스턴스 에디터에서 만든 불변 인스턴스도 노멀 파라미터를 아무 포맷 텍스처로 덮어쓸 수 있습니다. 포맷이 다른 픽셀 셰이더를 필요로 한다면, 그 인스턴스의 새 버전이 리컴파일됩니다.

그러나 TextureSample 과 마찬가지로, 셰이더 리컴파일 없이 디폴트 텍스처의 CompressionSettings(압축 세팅)을 바꿀 때 똑같은 경고가 적용됩니다.

추천사항


  • TC_Normalmap 대신 저해상도 TC_NormalmapUncompressed 를 쓰는 것이 콘텐츠가 나아 보인다면, 그리 하십시오. 메모리 사용량은 같습니다.
  • Xbox 360 게임을 제작중이고, 저해상도 TC_NormalmapUncompressed 에 비해 TC_NormalmapBC5 가 메모리 두 배 가치는 한다면 사용해도 좋습니다.
  • 노멀맵을 파라미터로 쓸 일이 있을 때마다 TextureSampleParameterNormal 머티리얼 노드를 사용해 보십시오.
  • 특정 머티리얼 인스턴스 부모와 함께 사용하는 노멀맵 포맷에 일관성을 유지해야 생성되는 셰이더 수를 줄일 수 있습니다.

외부 링크