这部分的文章知乎上已经比较多了,参考我放到后面,这里只是简单的提一下整个实现思路。
该方法最主要的步骤就是将模型延法线法向挤出,每次挤出一个微小的比例,这样循环多次后便可以得到最初始的效果(可以理解成复制了N次模型,每一次都沿轴心放大一定的比例)。

只进行这一步操作的话其实只是让模型看上去更“臃肿”了,想要得到毛发效果就必须使用一张noise贴图控制每层模型的Alpha


做这个主要是想学习一下Urp RenderFeature的使用,因为Built-in管线中没有办法通过设置每层毛发的偏移系数(FurOffset),因此如果需要做20层毛发的话需要手动复制20层vert与frag,分别给其中的FurOffset赋值。而使用URP配合RenderFeature可以做到for循环输入偏移值,修改层数和偏移值会十分方便。可以通过SRP对多个毛发材质进行合批操作,缺点就是场景中的同一个LightMode的层数都是一样多的。
目前实现的功能:
-
自定义的层数控制
-
自定义的毛发渲染模型
-
FlowMap与Gravity控制
-
根据Pass绘制假AO
-
阴影投射与接受
-
SRP合批
最终效果
代码写的丑,后续会进行完善。
https://github.com/shyaZhou/Demo
参考
https://mp.weixin.qq.com/s?__biz=MzI3MTQzOTY3OQ==&mid=2247488264&idx=1&sn=262a1800172f00553c43001e8b2e0b90&chksm=eac09158ddb7184e913cd9832057d09d7e7a6666c1f158f9822a04ddf2369d7b9d0db4b068a3&mpshare=1&scene=23&srcid=#rd
https://zhuanlan.zhihu.com/p/57897827
https://zhuanlanzhihu.com/p/147988824
Unity URP源码
感谢Colin大佬和草泥马大佬的帮助