烘焙光照贴图
简介
烘焙的光影图是为场景添加间接(或烘焙)光照的另一种工作流程.与 Using GIProbe 的方法不同,烘焙光照图在低端PC和移动设备上运行良好,因为运行时几乎不消耗资源.
与 GIProbe
s 不同的是,Baked Lightmaps[烘焙光照贴图]是完全静态的.一旦被烘焙,就不能被修改,也不能为场景提供反射,所以在内部用 反射探针 和它一起使用(或者在外部使用Sky)是获得好质量的要求.
由于它们是烘焙的,所以比 GIProbe
在光线渗出方面的问题要少,如果在高质量设置下使用Raytrace[光线跟踪]模式,间接光看起来会更好(但烘焙可能需要一段时间).
最后,决定哪种间接光照方式更好取决于你的使用案例.一般来说,GIProbe看起来更好,而且更容易设置.但对于移动或低端兼容性,Baked Lightmaps是你唯一的选择.
视觉比较
以下是Baked Lightmaps与GIProbe外观的比较. 请注意,光照贴图更准确,但也受到照明在未打开的纹理上的影响,因此过渡和分辨率可能不那么好. GIProbe看起来不太准确(因为它是近似值),但总体上更加平滑.
设置
首先,在光照贴图可以执行任何操作之前,要烘焙的对象需要UV2图层和纹理大小. UV2图层是一组辅助纹理坐标,可确保对象中的任何面在UV贴图中都有自己的位置. 面不得共享纹理中的像素.
这里有几种方法可以确保您的对象具有唯一的UV2层和纹理大小:
从3D DCC展开
一种选择是从您最喜欢的3D应用程序中进行. 通常不推荐这种方法,但首先要解释它,以便您知道它存在. 主要的优点是,在您可能想要重新导入很多的复杂对象上,纹理生成过程在Godot中可能非常昂贵,因此在导入之前将其解包可以更快.
只需在第二个UV2层上打开包装即可.
并正常导入. 请记住,导入后需要在网格上设置纹理大小.
如果在导入时使用外部网格,则将保留大小. 请注意,3D DCC中的大多数解包器都不是面向质量的,因为它们可以快速工作. 您通常需要使用接缝或其他技术来创建更好的展开.
从Godot内部解开
Godot可以选择打开网格并可视化UV通道. 它可以在Mesh菜单中找到:
这将生成第二组UV2坐标,可用于烘焙,并且还将自动设置纹理大小.
解开场景导入
总体来说,这可能是最好的方法.唯一的缺点是,在大型模型上,导入时解包可能需要一段时间.只要在文件系统栏选择导入的场景,然后进入导入选项卡.在那里,可以修改以下选项:
** Light Baking ** 光照烘焙模式需要设置为 “Gen Lightmaps” . 还必须提供世界单位的纹素大小,因为这将确定光照贴图纹理的最终大小(并因此确定地图中的UV填充).
设置此选项的效果是场景中的所有网格都将正确生成其UV2贴图.
作为警告:当重用场景中的网格时,请记住将为找到的第一个实例生成UV. 如果网格重复使用不同的比例(并且比例大不相同,超过一半或两次),这将导致低效的光照贴图. 如果您计划使用光照贴图,请不要在不同比例下重复使用源网格.
检查UV2
在前面提到的网格菜单中,可以显示UV2纹理坐标. 如果出现问题,请确保检查网格是否具有以下UV2坐标:
设置场景
在做任何事情之前,需要在场景中添加一个**BakedLightmap** 节点.这将使该场景中的所有节点(和子节点),甚至是实例场景中的所有节点都能进行光照烘焙.
子场景可以多次实例化,因为这是由面包师支持的,并且每个子场景都将被分配一个自己的光照贴图(只需确保遵守前面提到的缩放规则):
配置边界
光线贴图(Lightmap)需要一个受影响区域的近似体积,因为它将光线传递给在该体积内部的动态对象(稍后再谈).就像使用 GIProbe
一样,用体积覆盖场景:
设置网格
要使** MeshInstance **节点参与烘焙过程,需要启用``在烘焙灯中使用``属性.
在场景导入时自动生成光照贴图时,会自动启用此功能.
设置灯
默认情况下,灯光采用间接灯光烘焙. 这意味着阴影贴图和光照仍然是动态的并影响移动的物体,但是光线反射的光将被烘焙.
灯可以禁用(不烘焙)或完全烘焙(直接和间接). 这可以通过灯光中的 烘焙模式 菜单进行控制:
模式是:
禁用: 烘焙时忽略灯光. 请记住隐藏灯光对烘焙没有影响,因此必须使用此灯泡.
间接: 这是默认模式. 只会间接照明.
全部: 间接和直接照明都将被烘焙. 如果您不希望灯光出现两次(动态和静态),只需将其隐藏即可.
烘焙质量
为简单起见, 烘焙光照贴图(BakedLightmap)
使用场景的体素化版本来计算光照. 可以使用 烘焙细分(Bake Subdiv) 参数调整体素大小. 更多细分会产生更多细节,但也需要更多时间来烘焙.
通常,默认值足够好. 还有一个 捕捉细分(Capture Subdivision) (必须始终等于或小于主细分),用于捕捉动态对象中的光(稍后会详细介绍). 对于更多情况,它的默认值也足够好.
除捕获大小外,还可以通过设置 烘焙模式 来修改质量. 提供了两种间接捕获模式:
Voxel Cone: Trace:是默认的;它不太精确,但更快.看起来类似于(但比)
GIProbe
稍好.光线追踪(Ray Tracing) :这种方法更精确,但烘焙时间可能要长得多. 如果以低质量或中等质量使用,某些场景可能会产生噪声颗粒.
烘焙
要开始烘焙过程,只需在选择 BakedLightmap
节点时按下顶部的 ** 烘焙光照贴图(Bake Lightmaps )** 大按钮:
这可能需要几秒到几分钟(或几小时),具体取决于场景大小,烘焙方法和所选质量.
配置烘焙
烘焙还有几种选择:
** 烘焙细分(Bake Subdiv)** : 光照贴图机(Godot lightmapper)使用网格来传输光信息. 默认值能很好地适用大多数情况.您希望更好地照亮小细节或您的场景很大,可以增大它.
** Capture Subdiv**: 这是用于实时捕获信息的网格(照明动态对象). 默认值通常是OK,它通常小于Bake Subdiv并且不能大于它.
烘焙质量:提供三种烘焙质量模式,低,中和高. 更高的质量需要更多的时间.
烘焙模式(Bake Mode) :烘焙器可以使用两种不同的技术: 体素圆锥追踪(Voxel Cone Tracing ) (快速但近似),或 光线追踪(RayTracing) (慢但准确).
传播: 用于*Voxel Cone Trace*模式.工作原理与
GIProbe
中一样.HDR : 如果禁用,则光照贴图更小,但不能捕捉到任何超过白色的光线(1.0).
图像路径 : Lightmaps的保存位置.默认情况下,保存在与场景相同的目录下 (“.”),但可以进行调整.
范围:受影响区域的大小(可以直观地编辑)
光数据(Light Data) :包含烘焙后的光烘焙数据. 纹理保存到磁盘,但这也包含动态对象的捕获数据,这些数据可能有点大. 如果您使用.tscn格式(而不是.scn),则可以将其保存到磁盘.
动态对象
在其他引擎或lightmapper实现中,您需要手动在该级别周围放置称为``lightprobes``的小对象以生成* capture *数据. 然后,这用于将光传输到在场景中移动的动态对象.
但是,这种光照贴图的实现使用了不同的方法. 这个过程是自动的,所以您不必做任何事情. 只需移动物体,它们就会相应点亮. 当然,您必须确保相应地设置场景边界,否则它将无法工作.