[material dynamic branch] X4014 divergent gradient operation error

1495 단어 위 4Shader
어드벤트 캘린더를 위해 조금 머티리얼을 조사하면 동적 분기와 관련된 컴파일 오류가 발생했으므로 메모 해 둡니다.

브랜치 블록 및 그라디언트 가공



동적 분기를 사용한 최적화를 수행하면 X4014의 divergent gradient operation이 어떻게든 어떻게 되는 에러가 나올 수 있습니다.



엄밀히 말하면 샘플러에 전달되는 UV 값을 브랜치 블록 내부에서 처리하면이 오류가 발생합니다.
가공한다는 것은 샘플러가 MIPMAP를 선택할 때 사용하는 그라디언트가 변화하기 때문입니다.

Bias로 UV로 가공 없음 > OK


float4  Local3 = ProcessMaterialColorTextureLookup(
    Texture2DSampleBias(Material_Texture2D_0,Material_Texture2D_0Sampler,Parameters.TexCoords[0].xy,View_MaterialTextureMipBias)
);

Bias로 UV로 가공 있음 > Compile error


float4  Local3 = ProcessMaterialColorTextureLookup(
    Texture2DSampleBias(Material_Texture2D_0,Material_Texture2D_0Sampler,Parameters.TexCoords[0].xy+float2(1.0f,0.5f),View_MaterialTextureMipBias)
);

레벨을 직접 지정하는 것(SampleLevel) > OK


float4  Local7 = ProcessMaterialColorTextureLookup(
    Texture2DSampleLevel(Material_Texture2D_0,Material_Texture2D_0Sampler,Parameters.TexCoords[0].xy+float2(1.0f,0.5f), float (Local6))
);

요약



1. 셰이더 내부에서 동적 분기를 사용하는 경우는, 서페이스에 사용하는 경우는 블록 내부에서 UV를 가공하지 않고 사용
2. 포스트 프로세스 등의 SampleLevel을 사용해 직접 지정하는 것은 신경쓰지 않고 OK

서페이스용의 머티리얼로 동적 분기를 사용하는 경우는 조금 조심해야 한다.

좋은 웹페이지 즐겨찾기