Version: Unity 6.0 (6000.0)
언어 : 한국어
여러 플랫폼용 컴퓨트 셰이더 작성
URP에서 커스텀 셰이더 작성

셰이더 최적화

이 페이지에는 특히 GPU 성능이 제한된 모바일 플랫폼에서 런타임 성능을 위해 셰이더를 최적화하는 방법에 대한 정보가 포함되어 있습니다.

복잡한 계산 피하기

복잡한 계산을 피하려면 다음을 수행하십시오.

  • pow, log, sin 같이 리소스를 많이 소모하는 함수 대신 룩업 텍스처를 사용합니다.
  • 직접 작성하는 대신 normalizedot 같은 Unity HLSL 함수를 사용합니다. 이렇게 하면 드라이버가 더 나은 코드를 생성할 수 있습니다.

반복 계산 피하기

셰이더가 계산을 반복하지 않도록 하려면 다음을 수행하십시오.

  • 프래그먼트 셰이더에서 버텍스 셰이더로 계산을 이동하여 모든 프래그먼트가 아닌 모든 버텍스에 대해서만 실행되도록 합니다.
  • 대신 C# 스크립트로 계산을 수행한 후 셰이더에서 계산된 값을 사용합니다.
  • 불필요한 계산을 피합니다. 예를 들어 항상 동일한 컬러를 사용하는 경우 머티리얼당 여러 컬러를 지원하는 코드를 제거합니다.

낮은 정밀도 데이터 유형 사용

월드 공간 좌표와 텍스처 좌표를 제외한 모든 변수에 float 대신 half를 사용합니다. 자세한 내용은 셰이더에서 16비트 정밀도 사용을 참조하십시오.

접미사 대신 캐스트 사용

Unity는 접미사를 지원하지 않으므로 2.0h 같은 값은 전체 float가 됩니다. 즉, GPU가 계산을 할 때 다른 값을 float로 다시 전환해야 할 수 있습니다. 이렇게 하면 셰이더가 느려질 수 있습니다.

이를 방지하려면 접미사 대신 캐스트를 사용하십시오. 예를 들어 2.0h 대신 half(2.0)를 사용합니다.

픽셀 또는 채널 폐기 방지

셰이더가 느려지지 않도록 다음과 같이 리소스를 많이 소모하는 메서드를 사용하지 마십시오.

  • 프래그먼트 셰이더의 discard 메서드
  • 모바일 플랫폼의 ColorMask

뎁스 버퍼에 작성 방지

모바일 GPU가 초기 뎁스 테스트를 사용하여 렌더링 속도를 높이려면 프래그먼트 셰이더의 뎁스 버퍼에 작성하지 마십시오.

뎁스 테스트에 대한 자세한 내용은 ShaderLab 커맨드: ZTest를 참조하십시오.

추가 리소스

여러 플랫폼용 컴퓨트 셰이더 작성
URP에서 커스텀 셰이더 작성