URP练习:多Pass毛发shader

这部分的文章知乎上已经比较多了,参考我放到后面,这里只是简单的提一下整个实现思路。

该方法最主要的步骤就是将模型延法线法向挤出,每次挤出一个微小的比例,这样循环多次后便可以得到最初始的效果(可以理解成复制了N次模型,每一次都沿轴心放大一定的比例)。

复制的次数不够的时候很容易造成失真

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

Noise贴图


RenderFeature输入FurOffset要方便许多

做这个主要是想学习一下Urp RenderFeature的使用,因为Built-in管线中没有办法通过设置每层毛发的偏移系数(FurOffset),因此如果需要做20层毛发的话需要手动复制20层vert与frag,分别给其中的FurOffset赋值。而使用URP配合RenderFeature可以做到for循环输入偏移值,修改层数和偏移值会十分方便。可以通过SRP对多个毛发材质进行合批操作,缺点就是场景中的同一个LightMode的层数都是一样多的。

目前实现的功能:

最终效果

代码写的丑,后续会进行完善。

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大佬和草泥马大佬的帮助


本文为我原创

本文禁止转载或摘编

-- --
  • 投诉或建议
评论