Shader / URP
Intermediate
Unity 2021.3+ / Unity 6 (URP)
램프 텍스처(Ramp Texture)와 1D 룩업을 활용한 URP 카툰 셀 셰이딩(Toon Shading)
Lambert N·L 조명 값을 부드러운 그러데이션 대신 계단식 셀 램프 텍스처로 매핑하여 애니메이션 셀화 느낌을 연출하는 URP 커스텀 라이팅 셰이더.
#Shader #URP #Toon #CellShading #HLSL
핵심 개념전통적인 라이팅은 노멀과 광원 벡터의 내적($N \cdot L$)으로 연속적인 음영을 만듭니다. 이 $N \cdot L$ 값을 1D 텍스처의 U 좌표로 사용하여 음영 단계를 아티스트가 직접 그린 램프 텍스처(Ramp Texture) 색상으로 치환하는 기법입니다.
1. HLSL 램프 조명 계산 로직
Light mainLight = GetMainLight(TransformWorldToShadowCoord(input.positionWS));
float NdotL = dot(normalize(input.normalWS), mainLight.direction);
// -1~1 값을 0~1 UV 좌표로 리매핑
float rampUV = NdotL * 0.5 + 0.5;
// 1D 램프 텍스처 샘플링 (경계면 계단식 색상)
half3 rampColor = SAMPLE_TEXTURE2D(_RampTex, sampler_RampTex, float2(rampUV, 0.5)).rgb;
half3 finalLight = rampColor * mainLight.color * mainLight.distanceAttenuation;