【游戏开发】卡通风格树叶渲染教程

2021-04-16
4163
0

一直觉得原神的树看起不错,就研究了下制作方案。最初尝试从dxbc逆向原神的Shader,后面觉得太费时间了,于是自己写了个树叶渲染的Shader。

先上个效果,随意调了2种颜色。由于Shader中完全未用到Vertex Color,因此还可以使用Vertex Color制作一些额外的自定义效果,如渐变幅度更大的彩色,树叶的摇动等。

先来看看效果图:

模型制作:

使用SpeedTree即可。模型的树叶法线需要特殊处理成球形或半球形,有3种方案。

 

  • 手动修改所有树叶顶点的法线。
  •  
  • 在Maya内使用球形传递法线至树叶。
  •  
  • 将所有树叶模型合并为一个Mesh,轴心修改至所有树叶的中心,在Shader中使用Object Space下的Vertex Position作为法线。

贴图:

 

唯一需要的RGB通道贴图

 

 

R:树叶纹理 G:用处未知 B:BlueClip

 

着色器:

 

依然只分析重点的片元着色器。

 

//采样贴图
half4 texColor = SAMPLE_TEXTURE2D(_BaseMap, sampler_BaseMap, input.uv);

//将贴图纹理色彩曲线texColor.r翻转至[-1,0],并偏移回[0,1],用于抵消纹理强度。
half texColorReverse = 1 - texColor.r;
//用_TexIntensity控制贴图纹理强度,_TexIntensity为0时完全无纹理,为1时纹理完全显示。
half3 color = saturate(texColorReverse - texColorReverse * _TexIntensity texColor.r) * _Color.rgb;

//用lambert控制色彩渐变,_ColorLambertFactor控制lambert影响强度
half colorLambert = input.lambert * _ColorLambertFactor 1 - _ColorLambertFactor;
//随意计算一下颜色
color.b *= colorLambert;
color.g *= colorLambert;
color *= colorLambert * 1.5;
//雾效
color.rgb = MixFog(color.rgb, input.fogCoord);

 

基本的纹理色彩计算完成,接下来增加一点小细节。

 

//将colorLambert分为4段或任意段数,再次计算使树叶颜色跟随光照出现层次感。
float BandedStep = 4;
float BandedNL = floor(colorLambert * BandedStep) / BandedStep;
color.rgb *= 1.5 * input.lambert * BandedNL * _ShadowColor;

//计算自阴影,增加一点细节。
float shadowAttenuation = MainLightRealtimeShadow(shadowCoord);
color.rgb *= lerp(1, shadowAttenuation, _ShadowIntensity);

 

最后增加深度边缘光,并用菲涅尔公式进行Mask,BlueClip之后完成。

 

//增加深度边缘光DepthRim,并用菲涅尔公式进行Mask,消除中间部分不必要的DepthRim。
DepthRim = smoothstep(_RimMaskValue, 1, fresnel) * DepthRim;
color.rgb = DepthRim;
clip(texColor.b - _ClipValue);

 

需要注意的是由于树叶模型为插片,Depth Pass时必须【Cull Off】,否则会由于叶片背面无深度,出现大面积边缘光

 

 

转载声明:文章来源于网络,不作任何商业用途!

免责声明:本文内部分内容来自网络,所涉绘画作品及文字版权与著作权归原作者,若有侵权或异议请联系我们处理。
收藏

全部评论

您还没登录

暂无留言,赶紧抢占沙发
绘学霸是国内专业的CG数字艺术设计线上线下学习平台,在绘学霸有2D绘画、3D模型、影视后期、动画、特效等数字艺术培训课程,也有学习资源下载,还有行业社区交流。学习、交流,来绘学霸就对了。
绘学霸iOS端二维码

IOS下载

绘学霸安卓端二维码

安卓下载

绘学霸微信小程序二维码

小程序

版权声明
本网站所有产品设计、功能及展示形式,均已受版权或产权保护,任何公司及个人不得以任何方式复制部分或全部,违者将依法追究责任,特此声明。
热线电话
18026259035
咨询时间:9:00~21:00
在线客服
联系网站客服
客服微信:18026259035
公司地址
中国·广州
广州市海珠区晓港中马路130号之19
绘学霸客户端(权限暂无,用于CG资源与教程交流分享)
开发者:广州王氏软件科技有限公司 | 应用版本:Android:6.0,IOS:5.1 | App隐私政策> | 应用权限 | 更新时间:2020.1.6