简述:在项目中使用到了描边技术,我这里使用的原理是法线+模板测试,在法线这一小部分当中,也是遇到了许多问题
问题①:需要描边技术的模型很多,且模型大小不一,总不可能每个模型的材质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,发布时间今天
标签:法线,UnityObjectToWorldNormal,WorldToObject,注意事项,unity,关于,描边,归一化 From: https://www.cnblogs.com/teriffica/p/17583198.html