Unity Lighting -- 使用Light Probes

news2024/9/23 5:21:52

什么是动态物体(dynamic objects)

        到目前为止的例子中,我们场景中的所有东西都是静止的。但在实际的游戏或实时应用中,场景中有移动的物体很正常,比如走动的人或动物,汽车,飞机等,它们需要和灯光产生实时的交互,才会让游戏或实时应用看起来更加真实。

        首先我们来看一个场景中烘焙光照和实时光照对动态物体的影响。

        在场景中增加一个球体,我们拖动球体到烘焙光照方式的光源下:

         然后拖动物体到实时光照方式的光源下:

        可以看到,烘焙光照下的光源,球体并没有被光照影响,如果游戏中出现这张的效果,会让用户感到不失真。为什么会这样?因为当我们烘焙出了光照贴图时,我们存储的是场景中光源所照亮的静态表面的一张快照。这些光线并不会在这些表面上继续发出更多的光线。当一个动态物体进入到烘焙光照的区域时,渲染器需要知道物体所处空间的光源的信息才能计算出光照和阴影。

        在Unity中为了解决这个问题,需要使用一个工具:Light Probes

什么是Light Probes

        Light Probes可以用来测量(meaure or probe)场景中穿过空白区域的光线信息。在运行时,场景中移动的物体所被打到的光线,通过离物体最近的Light Probe的数据来做估计。

        我们可以用Light Probes来让烘焙光照更加真实,并且在实际项目中,相比于real-time的光源,它们也更加高效,当然,前提是需要正确地放置Light Probes。

Light Probes要怎么放置?

        在实践之前,我们首先需要了解一些放置Light Probe的方法。

        Light Probes通过Light Probe Group来组织。在Light Probe Group中的每一个Light Probe会测量空间中自身和其周围的Light Probe的光线。最简单的Light Probe Group的排布方式是让所有Light Probe组成一个网格,这个网格放到你想要测量光线的空间区域里。这个网格至少要有两个垂直的层次,因此它被称为3D volume(3D体积)。

        下图是一个由8个Light Probe组成的Light Probe Group,被组织成了一个立方体形状的3D体积空间:

         当我们创建一个Light Probe Group时,在3D volume中就已经包含了八个独立的Light Probe。我们可以赋值和摆放Light Probe Group来创建3D网格。

        在Light Probe Group的Inspector中,有四个按钮:

         Add Probe:增加Light Probe

        Select All: 全选所有Light Probe

        Delete Selected:删除所选Light Probe

        Duplicate Selected:赋值所选Light Probe

        对于有强烈光照变化或其他要突出的焦点的区域,我们可以将Light Probes排布地更加密集一点。这样做虽然会更复杂,但能将场景的光照优化地更好。

        Light Probes是非常有用的工具,但其最佳的放置位置取决于场景中有什么,以及是如何配置灯光的。在一个项目中,其摆放位置会进过多次迭代验证,以便调整到最佳效果。

在场景中放置Light Probes

        1. 在Hierarchy窗口中,添加一个Light Probe Group(Add(+) -> Light -> Light Probe Group)

        2. 选中新建的Light Probe Group。调整一下缩放比例,放大并将其移动到我们要放置Light Probe的区域。这里要注意确保其最高的一层Light Probes的高度要覆盖到光源的位置。另外还有一点非常重要,一定要确保Light Probes的最下面的一层的高度要在地面以上。如果这一层低于地面,则这些Light Probes无法捕获到来自地面上的光线,会导致错误的结果发生。

         3. 在Inspecotr中,选择Edit Light Probes

        4. 选择Select All然后选择Duplicate Selected

        5. 将复制的Light Probes移动到当前网格的右侧

        6. 用同样的方法,将我们需要覆盖的区域都覆盖上(自由发挥即可)  

         7. 完成Light Probes摆放后,在Lighting窗口中点击Generate Lighting选项(不清楚的朋友请看前面关于烘焙光照的笔记),等完成后,再看看烘焙灯光下的小球有没有变化。

 探索更多定义可定制的lightmap选项

        在Lighting(Window -> Rendering -> Lighting)窗口的Scene标签页中,尝试对Lightmapping Setting下拉菜单中的各种属性进行修改,来看看有什么效果。下面列举几个比较有趣的属性:

        Max Bounces:间接光中的光线最大弹射次数

        Lightmap Resolution:光照贴图的分辨率,这个值会直接影响光照贴图的质量。增加这个值会让光照贴图更加细腻,但同时会增加generate lighting的时间

        Albedo Boost:材质反射率增强系数,可用于加量材质本身的颜色

        Indirect Intensity:控制间接光的亮度

检视场景的Light Probes的工具

        Unity Editor有一系列诊断视图和工具用来检视和评估场景的光照状态。

        在Light Explorer窗口和诊断视图检查Light Probes的方法:

        1. 打开Light Explorer窗口(Window -> Rendering -> Light Explorer)

        2. 选择Light Probes标签页,可以查看场景中的Light Probes的状态

         3. 在Scene窗口的控制栏中,点击Draw Mode下拉菜单(左上角的箭头),选择Contributor/Receivers(在Global Illumination里)

         随后场景中会用不同颜色来表示场景中哪些是光线的贡献者,哪些是接受者。

         简单说一下三种不同颜色表示的意义:

        黄色: GameObject没有被设置为Static,不会在lightmap计算中产生任何贡献(颜色或光线)。它会接收场景中Light Probes的光线数据。

        蓝色:GameObject包含在lightmap计算中,它接收来自场景lightmap的光线数据。这是完全烘焙的游戏物体的标准状态。

        红色:GameObject包含在lightmap计算中,它接收来自场景中Light Probes的光线数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/400893.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MRCP在美团语音交互中的实践和应用

当你和智能语音机器人对话交互时,你是否好奇电话背后的机器人如何“听懂”你的意思,又如何像人一样“回答”你的问题?其中比较重要的技术就是 MRCP。本文主要介绍了 MRCP 在美团语音交互中的实践和应用,基于美团自研的语音识别及语…

动态规划入门经典问题讲解

最近开始接触动态规划问题,以下浅谈(或回顾)一下这些问题的求解过程。解题思路对于动态规划问题,由于最终问题的求解需要以同类子问题作为基础,故需要定义一个dp数组(一维或二维)来记录问题求解…

Vue 3.0 单文件组件 【Vue3 从零开始】

#介绍 在很多 Vue 项目中,我们使用 app.component 来定义全局组件,紧接着用 app.mount(#app) 在每个页面内指定一个容器元素。 这种方式在很多中小规模的项目中运作的很好,在这些项目里 JavaScript 只被用来加强特定的视图。但当在更复杂的…

[Java·算法·中等]LeetCode39. 组合总和

每天一题,防止痴呆题目示例分析思路1题解1分析思路2题解2👉️ 力扣原文 题目 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形…

Golang Map实现原理分析与解读

一、map的结构与设计原理 golang中map是一个kv对集合。底层使用hash table,用链表来解决冲突 ,出现冲突时,不是每一个key都申请一个结构通过链表串起来,而是以bmap为最小粒度挂载,一个bmap可以放8个kv。在哈希函数的选…

配置临时SSL子域名泛化证书

配置临时SSL子域名泛化证书 三个月有效期第一步:访问SSL证书地址第二步:在华为云上/其他服务器上搜索DNS云解析服务类似的功能第三步:将SSL申请的信息添加到服务器的记录集中第四步:添加完信息进行保存获取key / crt第五步&#x…

蓝桥冲刺31天之第七天

目录 A:三角回文数 B:数数 C:数组切分 D:倍数问题 一星陨落,黯淡不了星空灿烂; 一花凋零,荒芜不了整个春天。 如果命运是世界上最烂的编剧, 你就要争取做人生最好的演员。 即使生…

06_02_Spark Streaming

Spark Streaming 课程目标 说出Spark Streaming的特点说出DStreaming的常见操作api能够应用Spark Streaming实现实时数据处理能够应用Spark Streaming的状态操作解决实际问题独立实现foreachRDD向mysql数据库的数据写入独立实现Spark Streaming对接kafka实现实时数据处理 1、…

打怪升级之CFileDialog类介绍

CFileDialog类 CFileDialog封装用于文件打开操作或文件保存操作的常见对话框。信息来源自Windows官方文档:https://learn.microsoft.com/zh-cn/cpp/mfc/reference/cfiledialog-class?viewmsvc-170 这里重点介绍几个常用的函数功能: 构造函数 explic…

当我在ChatGPT上问重建大师,它居然这样回答我

最近,ChatGPT风靡全球,现象级走红至各大社交媒体。作为最快突破1亿月活量的消费者应用,是怎么样理解重建大师的呢? 今天小编与ChatGPT展开对话,它告诉我: 短短不到一分钟时间,ChatGPT已经概括出…

Grafana 监控面板绘制流程

本篇作者:IoTDB 社区 -- 张洪胤本文以 IoTDB V1.0.1 版本为例本文档介绍了 Apache IoTDB 监控指标通过 Prometheus 的方式进行采集,并且使用 Grafana 的方式进行可视化。1监控指标的 Prometheus 格式说明对于 Metric Name 为 name, Tags 为 K1V1, ..., K…

ABB机器人Offs坐标偏移功能的具体使用方法

ABB机器人Offs坐标偏移功能的具体使用方法 Offs功能说明: 在机器人的工件坐标系中添加一个偏移量 举例说明: 参数及数据类型: 在RobotStudio的仿真操作: 如下图所示,在程序中添加一个移动指令,并记录该点位为p10, 如下图所示,复制该指令语句, 如下图所示,选中…

Qt音视频开发22-音频播放QAudioOutput

一、前言 以前一直以为只有Qt5以后才有QAudioOutput播放音频,其实从Qt4.6开始就有,在Qt6中变成了QAudioSink,功能一样。用QAudioOutput播放音频pcm数据极其方便,只需要指定音频播放设备(可能电脑上有多个音频输出设备…

力扣sql简单篇练习(二十六)

力扣sql简单篇练习(二十六) 1 每家商店的产品价格 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 # 多行变成多列,考虑用sum if分组 SELECT product_id,sum(IF(storestore1,price,null)) store1,sum(IF(storestore2,price,null)) store2, sum(IF(st…

mmdetectionV2.x版本 训练自己的VOC数据集

mmdetection目录下创建data文件夹,路劲如图所示,不带yololabels 修改配置文件 mmdet/datasets/voc.py 配置图片格式 mmdet/datasets/xml_style.py 如果图片是jpg则改成jpg,是png格式就改成png,这里我不需要改,本…

C++11:包装器

文章目录1. 介绍2. function包装器2.1 介绍2.2 示例1用法2.3 示例22.4 function包装器的功能统一类型简化代码2.5 意义3. bind包装器3.1 介绍3.2 bind包装器的功能绑定固定参数3.3 意义1. 介绍 C 包装器是一种用于给其他编程接口提供更一致或更合适的接口的技术。它可以包装任…

人工智能书籍——《奇点临近》

当人们看到太多相同的时候,也许我们很无知; 当人们看到太多不同的时候,也许我们视野不够大; 当人们同时看到不同和相同的时候,也许这恰是我们的智慧原点。 物质是静止的能量,能量是运动的物质,生…

04 HiveHBase

Hive 一 Hive基本概念 1 Hive简介 学习目标 了解什么是Hive了解为什么使用Hive 1.1 什么是 Hive Hive 由 Facebook 实现并开源,是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据映射为一张数据库表,并提供 HQL(Hive SQL)查询功能&…

05 Spark_Core

01 spark 入门 课程目标: 了解spark概念知道spark的特点(与hadoop对比)独立实现spark local模式的启动 1.1 spark概述 1、什么是spark 基于内存的计算引擎,它的计算速度非常快。但是仅仅只涉及到数据的计算,并没有涉…

【5】基础语法篇 - VL5 位拆分与运算

VL5 位拆分与运算 1 自己犯的错误 &#xff08;1&#xff09;语法错误 在begin end块 后面加了" ; " case(sel)2b00: begin validout<0; out<0; end;2b01: begin validout<1; out<d0 d1; end;2b10: begin validout<1; out<d0 d2; end;2b11: be…