祝大家新年快乐~
一、树的模型
因为建模并非我的强项,所以这里我就不献丑了,分享几篇分析比较好的文章
1.https://zhuanlan.zhihu.com/p/552741254
2.https://zhuanlan.zhihu.com/p/360511201
3.https://zhuanlan.zhihu.com/p/438178299
简单总结下建模方面需要注意的点:
树叶建模通过插片的方式实现,和草一样,插片的方式有很多种;
建模时的树叶法线一般通过球体映射平滑后的法线避免出现黑边;
二、树的风格化渲染
先分享一下原神GDC上总结的一些风格化树木草叶渲染上的要点,我觉得很有价值:
1.spherical normal for leaves;上文提到过了,平滑树叶的法线。
2.weaken the specular and the shadow between leaves;降低高光和树叶间的阴影。
3.set a minimum value for min light intensity;给树木一个光照强度的最低值,用来配合天气系统。
4.clip leaf out by dot production of the leaf and cart normal and the view of the direction.对树叶做一个基于视线和法线的裁剪。
- clip
上文提到过对树叶做一个基于视线和法线的裁剪,注意这里的法线是指树叶插片的默认法线,并不是平滑后的法线。
clip(dot(normalize(n),v)-cutThreshold)
- albedo
albedo可以参考原神的思路:利用法线Y轴上下两层颜色混合,混合权重是存在主纹理的R通道中。我这里只是简单给了一个值来混合。
- specular
上文提到过要降低高光对树叶的影响,所以specular这里给一个轻微的值就好。 - rim
基于深度图描边那套做法。实际上就是两次深度图前后做一个基于屏幕空间的偏移再相减。
- scattering 透射
一个叠加在观察空间的一个trick,透射强度可以调节。
- vertex animation
很简单的顶点动画来模拟风场。
最后效果对比下Genshin:
调整一点点细节
另外再谈谈本文没来得及实现的细节,一个是树叶贴图G通道控制Rim程度用来做树叶和树叶间的透光,B通道不仅是单一的alpha裁剪,还能根据给定的阈值来调节裁剪(盲猜是根据相机距离的一个映射,应该就是上文提到的变化裁剪)。
引用&参考
2.https://www.gdcvault.com/play/1027539/-Genshin-Impact-Crafting-an
3.https://zhuanlan.zhihu.com/p/482749051