欢迎光临散文网 会员登陆 & 注册

企业级游戏开发笔记3-法线贴图

2023-03-13 00:37 作者:YONCE1999  | 我要投稿

在开始法线贴图之前,先纠正上一节的错误。在Built-In管线里面我们获取环境光可以用UNITY_LIGHTMODEL_AMBIENT.xyz, 直接在URP中使用不会报错但是并没有起作用。查资料之后发现可以用_GlossyEnvironmentColor代替,或者是使用SampleSH(NormalDir)可以起到同样的作用,具体计算方式可以查看SampleSH的定义。

一段时间以内对于法线贴图的理解都存在偏差,这里重新梳理一下,左图是存在模型空间下的法线纹理,很容易观察到模型空间下的纹理颜色有很多种,这是因为模型的法线方向各异,从(0,-1,0)到(0,1,0)经过映射(映射到0-1的范围内)就变成了不同颜色。而切线空间下的法线纹理基本都是蓝色,原因是切线空间下存储的不是绝对法线位置,而是相对偏差,因为存储的法线在各自的切线空间中,如果这个点没有法线变化那么他的默认值就是(0.5,0.5,1)呈现浅蓝色的状态。可想而知,模型空间下的法线纹理只能够用于创造纹理时的模型,否则的话会呈现出错误的状态,而且切线空间下的法线纹理则可以复用,还可以进行uv动画。


对于法线贴图的实际运用,可以采用两种方式,第一种把存储法线转到世界坐标,需要我们自己计算切线空间到世界的转换矩阵,即世界空间下的切线,副切线,法线构成的矩阵。第二种可以把光照方向,视角方向转到切线空间下,在切线空间下计算相应的光照结果。

这里是把切线空间转法线的做法

主要讲一下新的GetVerTexPositionInput和GetVerTexNormalInput方法,前者可以快速得到顶点位置屏幕空间坐标和世界空间坐标,后者可以得到法线,切线,副切线的世界空间坐标,还是比较方便。


企业级游戏开发笔记3-法线贴图的评论 (共 条)

分享到微博请遵守国家法律