一、草的颜色渐变
实现方式
step1:定义两个渐变色
step2:定义渐变因子
step3:将渐变后的颜色与主颜色进行混合
伪代码如下:
half4 gradientColor1;
half4 gradientColor2;
half gradientTerm;
half4 finalGradientColor = lerp(gradientColor1,gradientColor2,gradientTerm);
half3 finalColor = finalGradientColor.rgb * albedoColor.rgb;
扩展方式
可以使用 noise 贴图或者程序 noise 计算,并把这个值加入的渐变色的混合因子中,来实现颜色的随机变换
二、AO模拟
实现方式
step1:定义一个AO的颜色
step2:AO的Mask计算可以用如下方式:
- 方式一:使用UV的V
- 方式二:使用法线和竖直向上及(0,1,0)的点乘值
- 方式三:使用第四套UV,并通过绘制贴图的 R 通道进行控制,也是本案例中采用方式
step3:将AO的颜色与主颜色进行混合
伪代码如下:
half4 AOColor;
half AOMask = tex2D(_AOMaskTex,uv4);
half4 finalAoColor = lerp(AOColor,half4(1,1,1,1),AOMask);
half3 finalColor = finalAoColor.rgb * albedoColor.rgb;
三、透光实现
实现方式
step1:定义一个透光颜色
step2:观察方向的Mask计算:观察方向和主光源相反的方向越一致,透光的效果就越强烈,通过点乘计算,并将值重新映射到0,1
step3:贴图mask:使用第四套UV,并通过绘制贴图的 G 通道进行控制
step4:将透光的颜色与主贴图颜色进行 叠加
伪代码如下:
half4 subsurfaceColor;
half viewMask = dot(viewDir,-lightDir);
viewMask = viewMask * 0.5 + 0.5;
half texMask = tex2D(_AOMaskTex,uv4);
half4 finalSubsurfaceColor = subsurfaceColor * viewMask * texMask;
half3 finalColor = finalSubsurfaceColor.rgb + albedoColor.rgb;