본문으로 바로가기

Shader interpolation modifier

category Technical Report/Unity 2025. 8. 29. 13:53
반응형

Unity Live 25년 8월꺼 보다가 재밌어 보여서 정리
링크 : https://www.youtube.com/live/ZOlOnXWYQvk?si=yxGyJsz5zDklL-cl  

Shader Graph Custom Interpolators라는 항목이 새로 들어왔는데 이는 보간기(interpolator)의 보정 설정을 지정할 수 있는 명령이다. 
https://docs.unity3d.com/Packages/com.unity.shadergraph@13.1/manual/Custom-Interpolators.html

이렇게 Shader Graph Block에서 VS 끝에 노드를 생성하는 방식으로 설정
이렇게 Custom interpolator에서 우클릭을 통해 설정할 수 있다. 6.3부터 지원

 

그럼 HLSL에서는 어떻게 컨트롤 하느냐... 
MSDN 문서  : https://learn.microsoft.com/en-us/windows/win32/direct3dhlsl/dx-graphics-hlsl-struct?utm_source=chatgpt.com

총 5가지의 보간기 키워드를 지원한다.

  • linear (기본값) : 원근 보정된 선형 보간 (perspective-correct interpolation)
  • noperspective : 원근 보정 없는 선형 보간
  • centroid : 삼각형의 내부에서만 샘플링 보장
  • nointerpolation : 보간 없이, 가장 가까운 정점 값을 픽셀 셰이더로 전달
  • sample : 멀티샘플링(MSAA) 시 샘플 지점 기준으로 보간. Shader model 4.1 이상에서만 사용 가능. 픽셀 중심이 아닌 샘플 위치에서 보간.

* int/uint 타입을 사용할 때 유일하게 유효한 키워드는 "nointerpolation" 만 가능

 


struct v2f
            {
                float4 pos : SV_POSITION;

                //일반 보간 (기본값, perspective-correct)
                float3 normal : NORMAL;

                // 원근 보정 없는 보간
                noperspective float3 normal : TEXCOORD0;

                //보간 없이 가장 가까운 정점 값 사용
                nointerpolation float3 normal : TEXCOORD1;
            };

 

저런 엣지가 두드러지는 스타일의 아트를 만들때 고려해봄직한 방식.

 

MSAA를 사용할때 centorid와 sample 보간 방식이 유용할 수 있다고 하는데 이는 픽셀 커버리지와 샘플링 위치간의 미묘한 차이 때문이다. 

 

  • 하나의 픽셀 안에 MSAA 샘플이 여러 개 있음
  • 하지만 보간된 데이터는 기본적으로 픽셀 중심에서 계산됨 → 샘플 위치와 보간 위치가 다름

이로 인해 픽셀 가장자리(에지) 근처에서 아티팩트가 생길 수 있고 이를 보간 키워드를 통해 완화할 수 있다.

Modifier 동작방식 언제 유용한가? 특징
centroid 픽셀 내부에서 커버되는(coverage) 유효한 샘플들의 평균 위치를 기준으로 보간 픽셀 경계에 보간 문제가 생길 때 (특히 알파 테스트, 마스크 등 사용 시) 클리핑 오류 방지
sample MSAA 샘플 위치마다 각각 보간된 값을 사용 MSAA가 활성화되어 있고, sample shading이 필요한 고급 효과에서 더 높은 정확도, 성능 부담 증가

 

  • Cutout/AlphaTest 셰이더에서 경계가 깨질 때
  • Deferred Rendering + MSAA 조합 시 (G-buffer 에러 방지)
  • MSAA 환경에서 셰이딩 위치에 민감한 값(normal, UV, tangent 등)을 사용할 때

그외 위 같은 상황에 유용할 수 있다.(하지만 애시당초 고해상도에서 MSAA 사용하는것 자체가 비용이.......)

 

sample 키워드의 경우 SV_SampleIndex와 함께 쓰면, 각 MSAA 샘플마다 다른 보간 값을 받아 정확한 결과를 얻을 수 있지만, 성능이 크게 떨어져서 대부분의 경우 centroid로 충분.

 

 

반응형

'Technical Report > Unity' 카테고리의 다른 글

DXC shader compiler integration  (0) 2025.05.14
Cbuffer padding for proper SRP Batcher capability  (0) 2025.05.13
Cluster simulation by Compute Shader  (0) 2024.12.31
stochastic tiling shader  (0) 2022.05.29
PBR-BRDF-Disney-Unity-1  (0) 2022.03.02