问题发现
今天使用blender洋面修改器制作海洋。制作完毕后,准备使用修改器自带的烘焙功能进行贴图烘焙,以节省后续的渲染性能。
但是却发现,渲染出来的帧数,结果都一样。
并且进一步发现,当前的时间线停留在第几帧,那么渲染出来的所有帧数就都是该帧。
这也太离谱了,总不能上百帧,然后一帧一帧的去点击渲染吧?
排查问题
排查步骤
- 怀疑是时间线问题,重新制作所有关键帧 – 不行,依然存在
- 怀疑是烘焙结果的保存问题,重新指定贴图保存文件 – 不行,依然如此
- 怀疑是内存中存在太多数据发生错误,重新启动blender,甚至重启电脑 – 不行,依然如此
- 怀疑是修改器某项参数的问题,测试之后发现了问题所在。
发现问题点
突然想起来,一开始制作海洋,只使用了洋面修改器的时间功能来做关键帧,这时候的渲染是正常的。
但是后来将缩放也加入了动画关键帧,然后问题貌似就有了?
马上进行验证,发现果真如此:添加了“缩放”关键帧之后,点击烘焙,烘焙出的贴图明度都和当前帧的明度一样。无论你划定了1-100帧还是多少,所有结果都是当前帧的那幅exr贴图的明度,这就好导致如果你停留在第一帧(也就是没有内容初始化全黑的帧),那么剩下的所有帧都会采用这个“全黑”的明度,结果也都全身黑色的了。
删除“缩放”的关键帧后,在此进行烘焙,结果果然正常了。每一帧都是不一样的内容和明度,都是根据海洋实时计算得来的。
在波浪层中单独使用翻滚之后,发现翻滚并没有这样的问题。
那为什么只有“缩放”存在这样的问题呢?
进一步排查详细原因
- 仔细研究贴图,可以发现,贴图的形状及颜色明度,是由洋面修改器各项参数决定的。比如下面几个重点:
- “缩放”值的高低,决定了烘焙出的贴图的明暗,简而言之,缩放值越高那么贴图越明亮,反之越暗直至全黑。
- “时间值”和“翻滚度”决定的是贴图的内容形状。这一点是正常渲染的,每一帧都不一样。
- 然而,神奇的是,blender洋面修改器在进行烘焙时,并非实时计算每一帧“缩放值”对应的明度,并非每一帧都给予它正确的明暗。
- 相反,blender是直接使用当前时间线所在帧的缩放值大小(也就是当前帧明暗大小),直接套用在最终所有烘焙帧上。这就导致最终结果的所有帧明暗都是一样,没有区分。而如果你刚好停留在时间线第1帧,也就是缩放值为0(明度最低,即全黑),那么最终所有结果都是黑的。相反,如果你停留在结束帧,缩放值为动画中最高值(也就是最明亮),那么所有帧都是最亮的。
- 所以说太奇葩了。