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

셰이더에서 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