TheLudGamer 发表于 2021-12-21 20:49

记录一次UE4光照贴图构建出现黑面问题

前言:静态灯光烘焙是大学时期就开始了解的模块,大部分黑面问题都有了解,前几天碰到的黑面问题确实是第一次遇到,再此记录一下翻车过程。涉及到具体项目不便截屏,欢迎大家自行想象
<hr/>


大概是这样一面墙,箭头表示光照区域和方向

可以看到墙壁完全不受光照影响,是一个不好形容的黑面,而墙壁上的不受光照是正常显示的。
1.首先这是一整个光滑的平面,没有多余的废点废线,可以排除是光滑组导致的黑面



2.其它位置正常显示,只有受到光照的这一部分是黑的似乎已经可以确定是光照UV出现了问题
3.打开光照UV,发现相邻的面确实有点紧,


拆一下,分割开来,


问题似乎很明显了,是光照UV太密集导致的采样重叠?
重新烘焙一次,嗯 没有之前黑了,但还是黑。
4.说明确实是之前的光照UV有问题,但并不是全部的问题,再此重新展UV,
不论是手动展还是自动展,
都是黑的。
5.难道问题不是2U而是1U? 因为如果1U是黑色材质,那肯定2u给到4096也是黑的,
但很明显这是一整块墙面,


虽然确实用了两个材质,但是两个材质球都是同一个,方便后期拆分内外墙用的而已。



6.仔细看仅光照模式和无光照模式和细节光照,
发现确实只有光照才有问题,测试一下。
7.果然在旁边打了一盏聚光灯以后重烘焙,聚光灯照到的范围也变黑了,



左上角打了一盏聚光灯

8.陷入思考,有光照的地方应该更亮才对,怎么反而更黑了呢?一个静态网格体与光照发生反应,生成的光照贴图,必然是受到光照和网格体本身的影响,其它网格体都不黑,那只能是这个网格体确实有问题

9.想到可能是采样光照UV的通道选择错了,
在编辑器界面查看,


10.并没有多余的3U,4U,光照贴图的采样通道确实是1,
11.还有一种可能是一开始模型导入的时候勾选了自动生成光照UV,这会导致后面重新导入自己外部软件制作的光照UV失败。


虽然这面墙的UV与我在Max里制作的一样,
但为了验证,在其它目录下新建文件夹导入,不勾选自动创建光照uv这个选项,重新烘焙,黑面依然存在

12.已知,这一定是模型有问题,毕竟无光照模式是没有黑面的,那么是法线吗,
我在max中重置变换,均一化法线,翻转法线,甚至用CGTool自定义法线,问题依然存在。
13.偶然想到,这真的是模型有问题吗,静态网格体并不是只有模型,还有材质,果断替换材质球,重新烘焙,黑面消失
14.是一个怎样的材质球导致的问题,我们知道光照贴图的制作算法,是使用了光源强度方向,以及贴图,贴图包括了漫反射,粗糙度,金属度,法线等等,逐一排查最后发现,是法线出了问题。
<hr/>原因




之前制作的基础像素贴图

一开始为了加快编译速度,我在母材质中只使用了一张1X1像素的纯白贴图,



1X1像素的纯白贴图

用向量表示也就是(1,1,1,1),多加的A通道是方便其它节点做计算,所以只能含泪做成16位贴图了,但是在材质球中连接到各个通道时,我只用了RGB,也就是(1,1,1),
法线通道我当时图省事也用了这张贴图,我当然知道采样类型不一致,但是为了极致的优化,我依然用了这张111纯白贴图,复制一份,在采样类型里改成了NORMAL,


我用吸管吸了一下,可以看到虽然类型转化成了法线贴图,但是RG通道依然是1



事实上这么做没有什么大问题,因为每一个实例材质基本上都会有属于直接的基础贴图以及法线贴图,完全可以覆盖掉这个纯白的贴图。
16.问题也就出在这里,这个墙的材质我没有给法线,可能是忘了,也可能是不给法线看起来挺正确,这就导致了黑面,
17.为什么会黑,这要从法线贴图说起,大部分法线贴图看起来都是蓝色的,这是因为法线表示的是模型的凹凸,也就是把2D平面看起来有立体感变成3D空间,也就是除了XY轴以外的Z轴,Z轴的大小表示了模型的立体程度,



换算成材质里的向量单位,也就是RGB中的B,由于我们只需要B通道,RG必须是0才是正确是法线贴图,真相大白了似乎。
<hr/>18.后续很简单,我很确定并不是所有的模型都需要法线去堆积细节表现体积感,所以最佳的做法是再加一张1X1的纯蓝贴图,也就是(0,0,1,1)。



当然压缩存储格式再改成Normal后亮度会降低,不过已经不影响使用了。

页: [1]
查看完整版本: 记录一次UE4光照贴图构建出现黑面问题