起因

项目需要开发一个三维场景展示,在learnopengl花了一段时间学习了OpenGL的相关知识,后面自己写了一点例子。不想自己封装,使用了现有的引擎magnum,加载了模型文件之后发现一个比较大的问题就是自带的Phong着色器不支持阴影和环境遮蔽这些,场景看上去很假。三维场景运行的计算机配置也不高,不支持过多的动态渲染,在使用Blender期间无意中发现Blender支持烘焙贴图,并且把多个通道烘焙的贴图合并到一张图上。这样做的好处就是着色器不需要计算任何光源,而且比较逼真。缺点就是部分需要运动的模型和静态模型之间的动态光影没办法展示出来。

优缺点

优点:

  • 节省实时计算消耗的资源(包括纹理贴图的法线置换等贴图的计算)
  • 非实时光线追踪效果比实时的Phong光照更近逼真

缺点:

  • 静态模型和运动模型需要分开烘焙
  • 静态模型和动态模型之间的光影关系不好表达

前后对比

展示的图片前后有模型上的改动

Phong着色器+平行光源:

烘焙贴图方案:

blender烘焙贴图

可以参考官方文档和网上的其他教程,可以在网上找PBR贴图自己尝试,blender PBR材质连接如下:

贴图可以从一些免费的网站下载,比如:https://www.texturecan.com/

左下角的bg_bake图片是用来存储烘焙结果的图,每种需要烘焙的材质都需要新建一个

使用cycles渲染器,GPU渲染,设置好渲染时的采样率和光照次数(采样率越高,光照次数越大,渲染越慢)

勾选需要烘焙的通道

然后点击烘焙按钮即可进行贴图烘焙,合并结果将会输出多通道合并的纹理

另外,如果烘焙工作比较繁琐,推荐使用插件Bake Wrangler进行批量贴图烘焙,不然每个贴图都要设置渲染对象和贴图大小,可以使用节点进行批量渲染配置