最近遇到一个比较有意思的需求,需要在一个模型的正反面分别显示不同的材质纹理,但是只有一个材质槽,并且没有提供材质ID。
起初的思考是根据模型表面法线来做,这个对于静态模型而且不会动的Object还可以,自定义一个法线朝向然后跟VertexNormalWS做Dot计算,然后返回值给一个if判断,Dot值为正代表反面,为负代表正面,简单测试一下跟我想的一样
知乎视频www.zhihu.com但是尝试之后发现对模型样式局限性太大,规则物体还好,不规则物体法线完全没有规律可循
刚好这段时间在研究UE4制作三渲二的效果,通过Shader研究从制作模型外轮廓的方法用到了TwoSideSign这个节点。之前一些树木的叶片也用过这么个节点,看了看官方文档好像就是让一个模型正反面的法线都是正的(菜鸟TA非美术出身,说的不对还请大佬纠正)。
然后就用TwoSideSign来判断模型的法线相对朝向来决定正反面,其实也很简单
乘以-1是三渲二的做法,目的貌似为了把模型正反面反转,然后用来剔除模型正面,这里其实也可以不给,后面连接一个ConstantBiasScale是为了把取值范围从-1 ~ 1重新映射为0~1 防止Alpha出现-1的取值导致最终效果出错,因为给美术测试会发现不给ConstantBiasScale会出现很奇怪的效果,给了这个节点就解决了。
然后Maya随便做了个模型做测试,功能很简单,算是一个小技巧吧。
N旧没更新了~~~