Function Specialization

Untitled

두 가지 다른 대안을 처리해야 하는 Fragment Shader에 문제가 있다.

Untitled

Model의 Texture에 UV 좌표가 있는 경우 Rendering에 Texture 색상을 사용한다.

그렇지 않은 경우 Material 색상을 사용한다.

예시는 단순한 상황이고, 대부분의 Model에는 Bump Map, Ambiens Occlusion 및 Spercularity에 대해 4개 또는 5개의 서로 다른 Texutre가 존재하기도 한다.

Model은 사용 가능한 Texture 중 일부를 사용할 수 있지만 모든 Texture가 동일한 Texture를 사용하지는 않는다.

조건 분기와 GPU Shader 함수는 비용이 크므로 배제한다면, 함수 전문화Function Specialization를 통해 원하는 것을 달성할 수 있다.

Untitled

GPU에서 사용하려는 두 개의 Shader가 포함된 Metal Library로 GPU Pipeline을 설정했다.

vertex_main / fragment_main

Renderer 대신 Submesh에서 Pipeline State를 유지하도록 앱으로 재설정한다면,

Submesh에 Texture가 있는지 여부를 테스트하기 위해 Pipeline State에서 Boolean 특수 상수를 설정할 수 있다.