Choose your operating system:
Windows
macOS
Linux
Custom 은 임의의 입력에 일정한 연산을 하여 그 결과를 출력하는 커스텀 HLSL 셰이더 코드를 작성할 수 있는 표현식입니다.
항목 |
설명 |
|
---|---|---|
프로퍼티 |
||
Code |
표현식이 실행할 셰이더 코드가 들어갑니다. (아래 경고 참고) |
|
Output Type |
표현식의 출력 값 유형을 나타냅니다. |
|
Description |
머티리얼 에디터에서 표현식 제목줄에 표시되는 텍스트를 나타냅니다. |
|
Inputs |
표현식에 사용되는 입력 배열입니다. |
|
Input Name |
입력의 이름을 나타냅니다. 머티리얼 에디터의 표현식 위에 표시되는 용도는 물론 HSLS 코드 안에서 입력 값을 레퍼런스하는 데 사용되기도 하는 이름입니다. |
Inputs 배열에 필요한 만큼 입력을 추가하고 이름을 붙입니다. 그런 다음 Code 프로퍼티에 코드를 작성합니다. 예처럼 return 문이 포함된 함수 본문을 제대로 입력해도 되고, "Input.bgr" 처럼 단순한 표현식을 입력해도 됩니다. OutputType 에 출력 데이터형도 지정해 줘야 합니다.
Custom 노드를 직접 시험해 보실 수 있도록 코드를 제공해 드립니다.
float3 blur = Texture2DSample(Tex, TexSampler, UV);
for (int i = 0; i < r; i++)
{
blur += Texture2DSample(Tex, TexSampler, UV + float2(i * dist, 0));
blur += Texture2DSample(Tex, TexSampler, UV - float2(i * dist, 0));
}
for (int j = 0; j < r; j++)
{
blur += Texture2DSample(Tex, TexSampler, UV + float2(0, j * dist));
blur += Texture2DSample(Tex, TexSampler, UV - float2(0, j * dist));
}
blur /= 2*(2*r)+1;
return blur;
-
커스텀 노드를 사용하면 상수 폴딩을 사용하지 못하게 되어 내장 노드의 동일한 버전보다 인스트럭션 수를 훨씬 많이 사용하게 될 수 있습니다! 상수 폴딩이란 필요한 경우 UE4 내부적으로 셰이더 인스트럭션 수를 줄이는 데 사용되는 최적화입니다. 예를 들어 'Time->Sin->파라미터로 곱(Mul)하고->뭔가에 더(Add)하는' 표현식 체인은 UE4 에서 최종 Add 하나로 압축 가능하고 또 그렇게 됩니다. 이것이 가능한 이유는, 그 표현식에 있는 (Time, 파라미터 등의) 모든 입력이 전체 드로 콜에 있어서 상수이고, 픽셀별로 달라지지 않기 때문입니다. UE4 는 커스텀 노드에 있는 것을 압축할 수 없기에, 기존의 노드로 똑같은 기능을 하도록 만든 버전에 비하면 셰이더 효율이 떨어집니다. 결과적으로 기존 노드로는 할 수 없는 기능이 필요할 때만 커스텀 노드를 사용하는 것이 최선입니다.
-
커스텀 노드에 작성된 셰이더 코드는 유효한 HLSL 코드로 되어있어야 합니다.