unity-shader-草grass实现
unity-shader-草grass实现
前篇
Chapter 7. Rendering Countless Blades of Waving Grass - https://developer.nvidia.com/gpugems/GPUGems/gpugems_ch07.html
利用GPU实现无尽草地的实时渲染 (geometry shader) - http://www.cnblogs.com/murongxiaopifu/p/7572703.html
Grass Shader (geometry shader) - https://roystan.net/articles/grass-shader.html , 很好的文章, 对于利用 gs 生成草说明的很详细, 效果也很赞.
草体结构
多个面片组成草体结构
传统的方式,即将模型数据从CPU传递给GPU,GPU再根据这些数据进行渲染的方式在渲染大规模的草体时,往往会忽略单个草体的模型细节。因为单个草体的建模如果过于细致,则渲染大片的草地就需要传递很多多边形,从而造成性能的下降。
因此,一个渲染大片草地的方案往往需要满足以下条件:
- 单个草的多边形不能过多,最好一棵草只用一个quad来表示
- 从不同的角度观察,草都必须显得密集
- 草的排布不能过于规则,否则会不自然
综上,渲染草体时的经典结构——星形就出现了
星型结构可以减小从不同角度看到面片, 防止看到的知识面片的侧面 (观察方向与 面片平行, 也就啥都看不到)
顶点动画
在加上顶点动画, 让看起来有风吹的效果
1 | if (o.uv.y > 0.5) { |
判断草面片的哪些顶底需要做动画, 用的是uv中的 v 值 > 0.5 (opengl, dx是反过来的) , 所以面片顶部顶点的v值要大于0.5