Front Facing 을 직역하면 ‘전면’ 정도로 해석 된다. 3D 그래픽스에서 Face Culling 이라는 말을 종종 들어봤을것이다. Front Facing 인지 Back Facing 인지 판단 여부는 면의 노말 방향과 카메라 방향을 비교해서 판단한다. Culling 을 하게 되면 렌더링에서 제외 하겠다는 뜻이다.
유니티 엔진에 이미 구현 돼 있는 예약된 상태 키워드를 사용할 것이다. Cull [상태] 는 유니티 엔진 내부 ‘GFXRasterState’ 구조체의 cullmode 에 전달된다. winding-agnostic 상태 여부를 판별하여 그 여부에 따라 전면과 후면을 판별 하며 winding-agnostic 상태일 경우 정점 연결 순서 상관 없이 모든 면을 동일 한 면으로 판별하여 양면렌더링을 수행하도록 하며 Cull Off, Cull Front, Cull Back 형식으로 엔진 코어에 상태를 전달한다.
정리하면,
1. Cull Off : 양쪽면을 모두 렌더링한다.
2. Cull Front : 전면(Front Facing) 에속한 면을 렌더링 하지 않는다.
3. Cull Back : 후면(Back Facing) 에 속한 면을 렌더링 하지 않는다.
Windinig-agnostic 상태는 면의 정점 연결 순서(와인딩 순서)를 고려하지 않는 상태를 의미한다. 시계 방향이든 반시계 방향이든 모든 면을 동일하게 처리하므로서 Cull Off 를 구현한다. 다만 Cull Off 가 정확한 Two-Side 렌더링은 아니다.
void ShaderRasterStateDesc::ToGfxRasterState(const ShaderPropertySheet* localProps, const ShaderPropertySheet* globalProps, GfxRasterState& state) const
{
state.cullMode = (CullMode)clamp<int>(cullMode.ToFloat(localProps, globalProps), kCullOff, kCullCount - 1);
state.depthBias = depthBias.ToFloat(localProps, globalProps);
state.slopeScaledDepthBias = slopeScaledDepthBias.ToFloat(localProps, globalProps);
state.depthClip = clamp<int>(depthClip.ToFloat(localProps, globalProps), 0, 1);
state.conservative = clamp<int>(conservative.ToFloat(localProps, globalProps), 0, 1);
}
'UNITY3D' 카테고리의 다른 글
셰이더에서 FOV 값 계산하기. (0) | 2024.12.09 |
---|---|
SSAO and Kawase Blur (0) | 2024.10.28 |
Adaptive Probe Volume 데이터 스트리밍 (3) | 2024.10.09 |
URP의 Unity 렌더 그래프 시스템 (0) | 2024.09.28 |
Custom Shadow Attenuation Tweak Example (0) | 2024.09.25 |