跳转至

2.1 3D灯光和阴影

IdeaVR2021 灯光模块拥有便捷的使用方式和不错的效果,但是可能需要先阅读手册。了解灯光的具体使用方式和一些注意事项。

光源类型

  • 自发光: 模型本身的Emission,通过烘焙可以充当光源。
  • 灯光节点: 定向光源,点光源和聚光灯。
  • 环境里面的环境光。
  • 烘焙光: 通过烘焙得到的光源。

灯光节点

共有三种类型的光源节点:定向光源,点光源和聚光灯。让我们看一下灯光的常用参数:

imageCover

每个都有一个特定的功能:

灯光

  • 颜色:发射光的基本颜色。
  • 能源:能源乘数。这对于使光饱和或与高动态范围照明一起使用非常有用。
  • 镜面反射:影响受此光影响的对象中镜面反射斑点的强度。零时,此光变为纯漫射光。

阴影 - 已启用:选中此选项可启用阴影贴图。 - 颜色:遮挡的面积乘以该颜色。默认情况下为黑色,但可以将其更改为着色阴影。 - 偏差:此参数太小时,会发生自阴影。太大时,阴影会与脚轮分开。调整最适合您的方法。 - 翻转裁截面: 当勾选此选项时,某些场景效果更好。

定向光

这是最常见的光类型,代表很远的光源(例如太阳)。它也是相对来说性能最高的光源,如果有光照的需求应尽可能使用它(尽管它的阴影性能不是最高)。

定向光可以模拟覆盖整个场景的无数平行光线。定向光节点由大箭头表示,该大箭头指示光线的方向。另外定向光本身节点的位置完全不影响照明。只有旋转会影响场景中模型的亮面和暗面。

imageCover

被定向光光线照射到的部分为亮面,照射不到的地方为暗面。地面上的阴影要显示的话,需要勾选阴影->已启用选项。

imageCover

全向光(点光源)

全向光其实就是点光源,点光源是3D软件中的常用光源之一,可以想象成是一个球形的光源,从球心往四周放射光线。

imageCover

它的效果主要是由范围和衰减这两个参数来控制。

imageCover

范围是用来控制全向光的灯光影响范围,衰减可以想象成光线从圆心到四周强度的减弱过程。具体可以参考下图:

imageCover

聚光灯

聚光灯是带有方向和范围的灯,可以把它想象成一个圆锥体光源。它可以用来模拟手电筒,汽车车灯,路灯等等灯光。这种类型的光也会朝其指向的相反方向衰减。

imageCover

聚光灯与全向光共享相同的范围和衰减,并添加两个额外的参数:

imageCover - 角度: 聚光灯打开的角度。 - 角度衰减: 圆锥衰减,有助于柔化圆锥边界。

烘焙

简介

如果渲染想达到如现实般逼真的效果往往需要十分昂贵的计算(例如影视里的一些特效),整个场景渲染一帧需要几分钟,甚至几小时,效果越好,计算量就越大,效果越逼真,但只能是离线渲染。对于现今硬件来说实时渲染(至少每秒30帧)不可能做到的,但是我们可以换个思路能不能把先离线渲染出来的结果保存下来,直接当一张纹理往模型上贴,这样根本不需要任何光照计算就能到达离线渲染的效果,这就是烘焙。特别是在手机等移动端上效果显著。

但是缺点也是显而易见,用于烘焙的灯光不能动,所有烘焙通常用于一些固定不动的光源。另一个是会带来一点点的显存开销。

BakedLightmap

在ideavr中烘焙是通过BakedLightmap节点实现的,新建节点,在输入框输入BakedLightmap字样找到BakedLightmap节点,如图:

newLightmap

这个节点有很多属性参数,还有如何使用呢?先不急,在这之前我们还需要做些准备工作。

准备工作

要烘焙正常工作是需要做一些准备工作:

准备mesh

在模型导入时在资源管理器中选中模型,然后在导入面板展开 网格 选项,在光线烘焙中选择 启用并为光照贴图展开第二个UV层 然后点击 重新导入

导入后还需要检测UV2是否正确,在节点树上选中导入的模型mesh节点,在属性面板上的几何实例上找到光照烘焙选项,将 在烘焙光照中参与计算生成光照贴图 都勾上(如果节点较多可以通过节点上方的搜索框输入MeshInstance将所有几何搜索出来然后全选可批量设置):

为了以防万一还需检测UV2和lightmap size是否正常,在选中模型节点后,点击主渲染右上方的 网格 然后点击查看 UV2

如果没什么问题的话可以看到类似这样的图片:

如果您查看到的是个空的图片,那说明UV2有问题,这是请点击 为光照映射/环境光遮蔽展开UV2

还有一步可能需要检查,选中网格,在网格实例中有 光照贴图大小提示 如果都为0,和前面步骤一样点击 为光照映射/环境光遮蔽展开UV2 重新展开即可。

准备灯光

在场景中或节点树上选中灯节点,在其属性面板上灯光设置中有 烘焙模式 选项请选择indirect或者全部,前者只会烘焙间接光,后者所有光照信息都会烘焙上,包括阴影信息等,一般推荐后者。

注意:如果选择了ALL之后灯光就不会参数实时计算,这是为了防止烘焙后的结果和灯光叠加造成场景过亮特意为之,所以请不要惊慌。

同样的如果灯光过多,可在节点树上搜索框按照节点类型搜索(如Light)后全选批量设置。

准备烘焙节点

在节点树上选中您之前创建的BakeLightmap节点,有很多参数,不要慌,我会一一为您讲解:

范围: 参与烘焙计算的最大范围,超过这个范围的mesh和灯光均不会参与烘焙计算,这个范围可以在场景中通过鼠标可视化

调整:

可通过鼠标拖拽这三个红色小球分别在X、Y、Z三个方向上改变范围大小。

调整参数:

质量:每个光源发射的光线数量,默认是Medium,256根光线,质量越高光线越多,烘焙出来的结果越好,但所需的时间越长。这个光线数量可以在 项目设置渲染CPU光照烘焙器 中设置。

反射次数:光线遇到物体表面后反射次数,次数越高计算结果越准确,耗时也越长。

使用降噪:就像字面意思,去掉烘焙出来图片的噪点,看起来更加柔和

使用HDR:是否使用高动态范围格式(exr格式纹理),勾上会是明暗度更加丰富而不只是限制在某个范围

使用所有色彩:是否将所有色彩存储在光照贴图上,如果禁用光照贴图只会保存一个明暗通道。如果场景只包含白光,您可以选择禁用来减小烘焙贴图的大小

偏差:烘焙期间使用射线投射偏移以避免浮点精度问题

每单元默认纹素:如果烘焙的网格没有UV2大小提示,此值将用于计算合适的纹理大小

纹理合并:

生成:如果勾上所有模型烘焙出来的结果都会合成成一张大的层次纹理,GLES2不支持(性能优先模式)

最大尺寸:纹理的最大尺寸

环境:

模式:选择烘焙时要使用的环境

捕获:

启动:启用后,将计算包含场景照明信息的八叉树。然后,此八叉树将用于照亮场景中的动态对象。

单元大小:用于实时捕获动态对象信息的网格的大小。

质量:捕获数据的烘焙质量。

传播:偏差值可减少捕获的八叉树中的光传播量。

数据:

光照数据:烘焙完的结果数据

能量:越大,场景越亮

最后一步

好了,以上就是烘焙前所需的所有准备了,就差最后一步,那就是在选中烘焙节点时点击 烘焙光照贴图 即可:

然后等待完成即可。