다른 방법으로는 해결할 수 없는 상황을 처리하기 위해 존재한다. 이번 강좌를 통해 이야기 된 것들 중 불가능한 것들은 전부 HLSL로 해결된다. 퍼포먼스 대비 매우 효율적인 해법이면서도 보통은 퍼포먼스보다 그 기능에 더 중점을 둔다.

HLSL을 툴셋에서 직접 사용하는 주된 방법은 두 가지이다.

또한 엔진 그 자체에서 HLSL에 새 머티리얼 표현식을 만들거나 새 머티리얼 셰이더를 만들 수도 있다. 하지만 이건 복잡성 면에서 난이도가 상당히 올라간다.

커스텀 표현식

커스텀 표현식으로는 제한된 양의 HLSL 코드를 표준 머티리얼에 직접 입력할 수 있다. 또한 HLSL 작업을 시작하는 방법 중에 가장 쉽기도 해서 처음 접하는 사람은 우선 커스텀 표현식부터 시작하는게 쉽다. 한 번 써보면서 어떤 현상이 벌어지는지 보고 이해하는 것이 좋다. Custom Expression 머티리얼을 참고할 것.

또 다른 용도로는 가끔식 기능을 얼마나 반복할지 모르는 채로 반복해야할 경우가 있다. 거의 불가능한 작업이다. 적어도 일반 표현식만으로는 불가능하다. 블러 예제를 참고할 것.

여기서 염두에 둘 점은 일반 머티리얼 표현식이 보통 더 최적화된 셰이더 결과물을 낸다는 것인데 그 이유는 여러분이 그래프에서 하는 작업은 기능상 온갖 최적화가 되어 있기 때문이다.

커스텀 표현식은 기존 머티리얼 파이프라인의 특정한 요구를 충족시키기에 아주 좋다. 하지만 가끔은 효과가 충분하지 않을 수 있다. 그 때 HLSL의 두 번째 사용법인 커스텀 셰이더를 사용한다.

커스텀 글로벌 셰이더

커스텀 글로벌 셰이더는 생성 후에 플러그인에 포함시킬 수 있다. 엔진에는 다양한 유형의 셰이더가 있다. 그 중 하나가 글로벌 셰이더고 이게 현재 플러그인을 통해 유일하게 액세스할 수 있는 유형이다. 다른 유형은 엔진 자체에 직접 추가해 주어야 하는데 이 작업은 훨씬 더 복잡하다.

글로벌 셰이더는 단 하나만 존재할 수 있고 일반적인 표면 머티리얼에는 쓸 수 없다. 표면 머티리얼은 많기 때문이다. 하지만 포스트 프로세싱과 관련된 데는 아주 잘 어울리는데 예컨대 열 화상 같은 걸 만드는 작업에서이다. 열 화상이나 야간 투시 화상처럼 특정한 효과를 내야 한다면 말이다. 렌터 타겟에 고급 애니메이션 이펙트를 렌더링하는 것도 또 다른 활용이다. 렌더링 하고 싶은 특별한 이펙트가 있다면 HLSL에 직접 작성된 글로벌 셰이더로 렌더링할 수 있다. 그럼 렌더 타겟에 렌더링이 될 것이고 그럼 렌더 타겟은 모든 일반 머티리얼에서 사용할 수 있게 된다. 예컨대 아주 특별한 물결 애니메이션을 렌더링할 수 있고 그 물결 애니메이션을 바다 표면 머티리얼의 일부로 쓴다고 치자.

글로벌 셰이더 관련 ue document를 참고하자.

머티리얼 셰이더는 더욱 강력한 유형이다. 모델에서 디스플레이 되는 머티리얼에 사용되는데 작동 원리상 머티리얼 셰이더라는 걸 사용한다. 새 머티리얼 셰이더는 새로운 머티리얼 셰이딩 모델 결과물을 낼 수도 있어서 굉장히 강력할 수 있다. 그러니 클리어 코팅은 본질적으로 머티리얼 셰이더이다. 양면 폴리지도 머티리얼 셰이더이다. 하지만 현재로서는 엔진에서의 직접 편집만 가능해서 프로세스가 꽤 길어진다. 새 머티리얼 셰이더가 특히 유용한 경우는 라이트나 셰이딩과의 다양한 상호작용 작업을 할 때이다. 셀 셰이딩 스타일이나 기타 스타일라이즈된 렌더링을 원한다면 그것도 새 머티리얼 셰이더가 될 수 있다.