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


그럼 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 |