跳转至

2.1 3D灯光和阴影

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

光源类型

  • 灯光节点: 可以快速创建的光源,包括定向光源,点光源,聚光灯

  • 天空光和环境光: 通过世界环境(WorldEnvironment)节点编辑,具体参考 2.3-环境与后处理

  • 烘焙光: 通过烘焙得到的光源,具体参考 烘焙

灯光节点

创建

点击**快速创建→光**可以看到三种光源,点击后可在场景中创建对应的光源

基本属性

以下属性是三种光源都具有的属性,每个都有一个特定的功能:

imageCover

灯光

  • 颜色:发射光的基本颜色。

  • 能量:光源的亮度。

  • 镜面反射:影响受此光影响的对象中镜面反射的强度。为零时,光源变为纯漫射光。

阴影 - 已启用:选中此选项可启用阴影贴图。

  • 颜色:可以修改阴影的颜色。

  • 偏差:当光源距离被照射物体较远时,可以调整此参数修正阴影偏差

  • 翻转裁截面: 当勾选此选项时,某些场景效果更好。

定向光

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

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

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

全向光(点光源)

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

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

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

聚光灯

聚光灯是带有方向和范围的灯,可以把它想象成一个圆锥体光源。它可以用来模拟手电筒,汽车车灯,路灯等等灯光。聚光灯的范围主要通过调整圆锥的底面积和高来实现,同理,它的衰减也分为两种。

聚光灯的参数与全向光很像,但新增了角度上的范围和衰减:

- 范围: 光锥的高度

  • 衰减: 光线从顶点到地面的衰减

  • 角度: 聚光灯打开的角度

  • 点角度衰减: 从地面中心到四周的衰减

烘焙

简介

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

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

在ideavr中烘焙是通过BakedLightmap节点实现的,下载项目文件烘焙项目.zip并解压缩,使用IdeaVR运行文件夹内的project.ideavr文件,按以下步骤使用这个节点完成一个烘焙效果

导入素材

在文件的根目录下有我们准备的asset文件夹,里面有烘焙所需的全部素材。打开并选中**Coner'sBox.glob**文件(图中1处),点击右侧的**导入**(图中2处),选择**网格**(图中3处),将光线烘焙的模式修改为**启用并为光照展开第二个UV**(图中4处),最后点击**重新导入**(图中5处)

将glob文件拖入场景并调整相机到模型前方,可以看到类似下图的效果

设置网格实例

右键点击Coner'sBox节点,点击**使用本地**

使用ctrl+左键选中所有**网格实例**(左侧有image-20210804182036687图标的节点,图中1处),点击**属性**(图中2处),在**几何实例**→光照烘焙**中启用**在烘焙光照中参与(图中3处)

创建BakedLightMap节点

烘焙所需的材料已全部准备就绪,现在只需要创建一个烘焙工具即可。Idea VR中的烘焙光照贴图(BakedLightMap)节点就是这一工具。

在根节点下新建节点,然后搜索”烘焙光照贴图“,选中结果并确定,一个BakedLightMap节点将被创建,按键盘C键将其聚焦到相机中央,你将看到一个蓝色的立方区域。

开始烘焙

调整烘焙光照贴图的蓝色区域至完全包含Coner's Box,你可以通过三个小红点调整区域大小

温馨提示

在复杂场景中请尽量将被烘焙物体移至场景空旷处,那会使烘焙区域大小调整更加容易。

最后,选中烘焙光贴图节点,点击**烘焙光照贴图**(图中1处),弹出的窗口中点击**保存**,加载完成后,点击**运行键**(图中2处)运行当前场景

运行界面可以看到如下的效果:

对比效果:

更专业地烘焙

如果你想要烘焙自己的场景并得到更好的效果,请首先打开编辑器的**详细模式**,然后阅读以下内容:

准备mesh

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

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

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

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

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

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

灯光设置

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

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

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

设置烘焙参数

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

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

调整参数:

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

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

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

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

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

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

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

纹理合并:

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

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

环境:

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

捕获:

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

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

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

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

数据:

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

能量:越大,场景越亮