作者cjcat2266 (CJ Cat)
看板GameDesign
标题Re: [请益] 有没有动物毛发的fins & shells技术教学?
时间Fri Sep 8 02:33:46 2017
: 难道是要 同一只动物模型复制三层 然後同时绑同一个骨架骨架
: 外面几层用透明毛发材质吗...?
就我所知的方法有三种
方法一就是土法炼钢
在建模工具理面自己手动作出不同毛发层
优点是每层都可以精确手动控制
缺点就是...费工,而且不方便与动态毛发效果整合
方法二是把方法一的手动部分搬到vertex shader或geometry shader
用vertex shader的话,就是同一个mesh画多次
每次画的时候传入vertex shader的毛发参数逐渐改变
例用毛发长度参数和normal,把vertex往外推出层新的一层
另外搭配毛发粗细参数、密度、乱度在每一层的渐变,调出想要的效果
用geometry shader就是把上数的多次绘制
结合成一步,一次生成所有毛层,再一次绘制
http://www.xbdev.net/directx3dx/specialX/Fur/
http://www.catalinzima.com/xna/tutorials/fur-rendering/
方法三是ray marching
用手动方式或geometry shader把mesh复制一次,往外推到最外层
然後在pixel/fragment shader阶段用ray marching的方式计算每个像素的颜色
原理是从摄影机往每个像素的射线逐步推进取样
搭配mesh的毛发材质代表的参数反推毛发占据的空间
两个射线取样如果从毛发空间中穿过
表示该像素需要绘制毛发,接下来从取样位置和毛发参数推算最终颜色
https://www.shadertoy.com/view/XsfGWN
方法一和二因为是实质上分层的关系
近看会有看得到多层平面的瑕疵
而ray marching的分层瑕疵则是来自於射线取样过疏
解决方是当然就是增加层数或者降低射线取样间距
这就要在效果跟效能之间取平衡了
这也凸显了方法二和三的动态调整优势
方法一就只能手动增减层数,方法二和三可以调整个参数就了事
没有做过效能比较,这个有兴趣就得自己去研究了
以上
--
Web
http://AllenChou.net
Twitter
http://twitter.com/TheAllenChou
LinkedIn
http://linkedin.com/in/MingLunChou
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 160.33.43.15
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/GameDesign/M.1504809233.A.FA1.html
※ 编辑: cjcat2266 (160.33.43.15), 09/08/2017 05:05:41
1F:推 teeheehee: 感谢解惑 09/08 08:18