关于法线的一些注意事项

简述:在项目中使用到了描边技术,我这里使用的原理是法线+模板测试,在法线这一小部分当中,也是遇到了许多问题

问题①:需要描边技术的模型很多,且模型大小不一,总不可能每个模型的材质shader的描边大小数值都不一样吧,那不得累死,所以“归一化”是解决这个问题的关键——normalize();

问题②:在归一化之后,有可能会碰到另一种情况——这种情况也跟问题①所呈现的效果是一样的,这种情况我不知道如何称呼,解决方法是:

worldNormalLength = length(mul((float3x3)transpose(unity_WorldToObject), normal)); //normal是归一化后的法线,归一化后的法线还需要乘以unity_WorldToObject矩阵的转置的模长,注意unity_WorldToObject矩阵的转置不等于unity_ObjectToWorld,unity_ObjectToWorld是unity_WorldToObject的逆矩阵。

最后将法线乘以worldNormalLength就可以得到真正的统一法线了。其原理我估计和UnityObjectToWorldNormal()函数有关

 UnityObjectToWorldNormal源码(上图,地址:(24条消息) UnityCG.cginc源码之UnityObjectToWorldNormal之模型非等比缩放导致的法线不垂直问题解决分析_傲天鹰的博客-CSDN博客

//总结时间:2023.6.21,发布时间今天

posted @ 2023-07-26 18:01  terrificia  阅读(13)  评论(0编辑  收藏  举报