TECHARTNOMAD | TECHARTFLOWIO.COM

UNITY3D

Unity 의 Cull Method.

jplee 2024. 12. 3. 02:28

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' 카테고리의 다른 글

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
Unity6 Adaptive Light Probe Debugmode.  (0) 2024.09.24