- 코드를 수정하기 전, 앞장의 셰이더 컴파일 시간을 단축하는 설정을 반드시 참고할 것. 시간을 절약할 수 있음..
- 새로운 셰이딩 모델을 추가하기 위해 수정해야 하는 부분들에는 크게 세 가지 부분이 있음 :
- 머터리얼 에디터
- 머터리얼 자체
- 그리고 셰이더 코드
이 부분은 HLSLMaterialTranslator.h 에서 아래 부분으로 바뀐 것 같음 :
#if MATERIAL_SHADINGMODELID_STYLIZEDSHADOW { else if (ShadingModel == SHADINGMODELID_STYLIZEDSHADOW) { GBuffer.CustomData.x = GetMaterialCustomData0(MaterialParameters); // GetMaterialCustomData0() 함수가 머터리얼에서 입력된 CustomData0 값을 가져온다. } } #endif
#if MATERIAL_SHADINGMODELID_STYLIZEDSHADOW
{
else if (ShadingModel == SHADINGMODELID_STYLIZEDSHADOW)
{
GBuffer.CustomData.x = GetMaterialCustomData0(MaterialParameters);
// GetMaterialCustomData0() 함수가 머터리얼에서 입력된 CustomData0 값을 가져온다.
}
}
#endif
LightColor * (NoL * SurfaceAttenuation)
- 언리얼은 위와 같은 식으로 최종 라이팅 multiplier를 결정
float3 AttenuationColor = 0.f;
BRANCH
if(ShadingModelID == SHADINGMODELID_STYLIZED_SHADOW)
{
float Range = GBuffer.CustomData.x * 0.5f;
AttenuationColor = LightColor * ((DistanceAttenuation * LightRadiusMask * SpotFalloff) * smoothstep(0.5f — Range, 0.5f + Range, SurfaceShadow) * 0.1f);
}
else
{
AttenuationColor = LightColor * (NoL * SurfaceAttenuation);
}
이런식으로 Attenuation을 반영함. 지금 언리얼 버전에서는 각 BxDF 에서 이 계산을 해줘야한다고 함
'Unreal Engine' 카테고리의 다른 글
Unreal에서의 Metallic 표현 (0) | 2022.12.18 |
---|---|
언리얼 엔진에서는 노멀맵을 어떻게 구분할까? (0) | 2022.08.29 |
Part 4 : 디퍼드 셰이딩 파이프라인(The Deferred Shading Pipeline) (0) | 2020.05.05 |
Real Shading in Unreal Engine 4 (언리얼 엔진 4의 실사 셰이딩) (0) | 2019.11.17 |
Background: Physics and Math of Shading (0) | 2018.12.22 |