-
05/07 유니티 쉐이더 Diffuse Warping유니티/쉐이더 2021. 5. 7. 17:11
Diffuse Warping
"Warped diffuse"
빛공식으로 쓰이는 노멀과 라이트 벡터의 내적을 UV로 사용한다Ramp Texture
Ramp Texture 순서
- Ramp Texture를 적용
- 하프램버트 커스텀라이트 작성,
Lighting_Warp(SurfaceOutput s, float3 lightDir, float atten)
float ndotl = dot(s.Normal, lightDir)*0.5 +0.5; - 변수ramp 작성 float4 ramp = tex2D(_RampTex, float2(ndotl, 0.5));
- s.Albedo * ramp.rgb;
추가로 specular 적용
- 빛 벡터와 뷰 벡터를 노멀라이즈, normalize(lightDir + viewDir);
- 노멀과 1. 의 내적을 구하고 saturate
- 변수ramp 작성 float4 ramp = tex2D(_RampTex, float2(ndotl, spec));
- (s.Albedo.rgb * ramp.rgb) + (ramp.rgb * 0.25)
Shader "Custom/DiffuseWarping" { Properties { _MainTex ("Albedo (RGB)", 2D) = "white" {} _RampTex ("Ramp Texture", 2D) = "white" {} _BumpMap ("NormalMap", 2D) = "bump" {} } SubShader { Tags { "RenderType"="Opaque" } LOD 200 CGPROGRAM #pragma surface surf _Warp noambient #pragma target 3.0 sampler2D _MainTex; sampler2D _RampTex; sampler2D _BumpMap; struct Input { float2 uv_MainTex; float2 uv_RampTex; float2 uv_BumpMap; }; void surf (Input IN, inout SurfaceOutput o) { fixed4 c = tex2D (_MainTex, IN.uv_MainTex); o.Normal = UnpackNormal(tex2D (_BumpMap, IN.uv_BumpMap)); o.Albedo = c.rgb; o.Alpha = c.a; } float4 Lighting_Warp(SurfaceOutput s, float3 lightDir, float viewDir, float atten) { float ndotl = dot(s.Normal, lightDir)*0.5 +0.5; float H = normalize(lightDir + viewDir); float spec = saturate(dot(s.Normal, H)); float4 ramp = tex2D(_RampTex, float2(ndotl, spec)); float4 final; final.rgb = (s.Albedo.rgb * ramp.rgb) + (ramp.rgb * 0.25); final.a = s.Alpha; return final; } ENDCG } FallBack "Diffuse" }
'유니티 > 쉐이더' 카테고리의 다른 글
05/06 유니티 쉐이더 라이트 Rim Light (0) 2021.05.06 05/06 유니티 쉐이더 라이트 lambert와 half-lambert 연습 (0) 2021.05.06 05/04 유니티 쉐이더 노멀 맵(범프 매핑) (0) 2021.05.04 05/04 유니티 쉐이더 램버트, 블린퐁, 스탠다드 (0) 2021.05.04 05/04 유니티 쉐이더 Smoothness 연습 (0) 2021.05.04