기본적으로 GPU는 32비트 정밀도를 사용합니다. GPU 계산 시 16비트 정밀도를 대신 사용할 수 있으며, 모바일 플랫폼에서 다음과 같은 이점이 있습니다.
셰이더에서 16비트 정밀도를 사용하려면 스칼라, 벡터 또는 매트릭스를 선언할 때 half를 사용합니다. 예시:
half _Glossiness;
half4 _Color;
half4x4 _Matrix;
텍스처 샘플러에서 16비트 정밀도를 사용하려면 이를 선언할 때 _half를 추가합니다. 예시:
Texture2D<half4> _MainTex;
16비트 정밀도는 일부 셰이더 계산에 충분하지 않을 수 있습니다. 이렇게 하면 컬러 밴딩 현상이나 불안정한 지오메트리와 같이 눈에 띄는 오류가 발생할 수 있습니다. 오류를 확인하려면 half를 지원하는 플랫폼에서 프로젝트를 실행합니다. 오류가 있는 경우 대신 float를 사용합니다.
half 변수는 크기와 정렬이 32비트인 버퍼에 저장됩니다.
기본적으로 half는 MacOS를 사용하는 플랫폼과 같이 Unity의 고성능 플랫폼에 영향을 미치지 않습니다. half 변수는 float가 되고 GPU는 계산에 32비트 값을 사용합니다.
16비트 정밀도를 더 많은 플랫폼에서 사용하려면 Edit > Project Settings > Player로 이동하여 Shader Precision Model을 Uniform으로 설정합니다. 그러면 Unity는 HLSL 코드의 half를 다음과 같이 취급합니다.
min16float
float
Unity가 셰이더를 컴파일할 때 min16float는 지원되는 경우 GPU가 계산에 16비트 정밀도를 사용할 수 있는 플랫폼 데이터 형식이 됩니다. 예시:
min16float로 유지됩니다.mediump가 됩니다.RelaxedPrecision 플로트가 됩니다.float가 되지만 GPU는 계산에 16비트 값을 사용합니다.텍스처에 대한 Shader Precision Model 설정을 오버라이드하려면 텍스처 샘플러를 선언할 때 _half를 추가합니다. 예시: Texture2D<half4> _MainTex.