Shader / URP
Intermediate
Unity 2021.3+ / Unity 6 (URP)
UV 언래핑 없이 월드 좌표 기반으로 텍스처를 투영하는 트라이플래너(Triplanar) 지형 셰이더
동적 지형 변형이나 절벽, 복잡한 동굴 메시에서 UV 왜곡과 늘어남을 방지하기 위해 월드 X, Y, Z 세 축에서 텍스처를 투영하고 노멀 가중치로 합성하는 셰이더.
#Shader #URP #Triplanar #Terrain #HLSL
핵심 개념수직으로 깎아지른 절벽 메시는 윗면 기준으로 펼친 UV에서 텍스처가 심하게 늘어납니다. 월드 좌표의 YZ 평면, XZ 평면, XY 평면에서 텍스처를 각각 샘플링하고, 표면 노멀의 절대값 $|N_x|, |N_y|, |N_z|$ 비율로 부드럽게 섞으면 늘어남 없는 완벽한 매핑이 완성됩니다.
1. 트라이플래너 텍스처 샘플링 HLSL
float3 weights = abs(input.normalWS);
weights = pow(weights, _BlendSharpness);
weights /= (weights.x + weights.y + weights.z); // 가중치 정규화
// 각 축별 월드 투영 샘플링
half4 colX = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, input.positionWS.zy * _Tiling);
half4 colY = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, input.positionWS.xz * _Tiling);
half4 colZ = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, input.positionWS.xy * _Tiling);
half4 finalColor = colX * weights.x + colY * weights.y + colZ * weights.z;