Light Probes
LightProbes (光照探针,光探测器?) 提供了一种方法用于捕获和使用 穿过场景中空白空间的 光(light)的信息。
和光照贴图相似(lightmaps),Light Probes也存储关于场景中光照(lighting)的"baked"信息。两者的区别在于:lightmaps存储的是光线照射场景表面(surfaces)的光照信息,而light probes存储的是光线穿过场景空白空间的信息。
注:图形学中提到"bake"或"baked"或"烘焙" 一般是指把场景中的光照等信息提前存储到纹理中,将来渲染时,使用这些纹理来达到“光照”效果。
上图显示的是一个只有两个Cubes的场景,在两个Cubes周围旋转了放一些light probes(图中黄色的小球)。
Light Probes有两个主要的用途:
- 首要用途是为场景中运动的对象(moving objects)提供高质量的光照(包括间接反射的光,indirect bounced light)
- 次要用途是为使用了Unity的LOD system的静态场景提供光照信息。
注:LOD即Level of Detail,当场景中的GameObject离Camera很远时,已经无法看到许多细节了,此时可以使用LOD优化渲染,即当GameObject离Camera很远时减少GameObject的Mesh的三角面片数量。
Light Probe Groups
为了把Light Probes放到场景中,必须使用一个带有Light Probe Group组件的GameObject。可以通过菜单:Component >Rendering>Light Probe Group来添加Light Probe Group组件。
但更好的做法是在场景中新建一个empty GameObject(通过菜单:GameObject > Create Empty),然后把Light Probe Group组件添加到其上面。这样可以减少意外删除该组件的可能性。
上图是Light Probe Group组件。
属性 | 功能 |
---|---|
Edit Light Probes | 点击此按钮,可以编辑Light Probe Group。这样使得Unity会只允许移动和编辑LightProbes。故编辑完一点要Distable此按钮。 |
Show Wireframe | 此选项开启后,Unity在场景视图中显示连接Light Probes的线(wireframe)。关闭时,只显示代表Light Probe的点(points) |
Remove Ringing | 此选项开户后,Unity自动去除场景中的Light Probe ringing(见下文) |
Selected Probe Postion | 这是只读项。显示选中的Light Probe的x,y和z坐 |
Add Probe | 点此按钮,添加一个Light Probe到Light Probe Group中 |
Select All | 选中此Light Probe Group中所有的Light Probes |
Delete Selected | 从Light Probe Group中删除选中的Light Probes |
Duplicate Selected | 复制选中的Light Probes |
Ringing
"Ringing"是light probes在某些环境下表现出来的不想要的行为。这经常发生在Light Probe周围光照有显著差异时。例如,若在一个Light Probe的一面有明亮光(bright light),在另一面没有光(no light),则在光强就会在背面“超调”(overshoot),会在背面(本来是没光的)形成“光斑”(light spot)。
下图是一个Light Probe ringing的例子:
有几个方法可以解决"ringing":
- 在Light Probe Group组件中,开启Remove Ringing。Unity会自动移除不想要的光斑。然而,这通常会造成Light Probes准确性下降,减少光的差异(reduces light contrast,应该是降低了不同的光之间的差异)。
- 放置一些游戏障碍物,使得玩家无法到达能看到光斑的位置。
- 避免baking有向光(direct light,或者叫平行光)到Light Probes中。Direct light倾向于有明显的不连续性(sharp discontinuities)(如,阴影边),这使得它不适合用于Light Probes。仅烘焙间接光(indirect light)时,使用Mixed lighting。对于动态(dynamic)GameObjects 应该使用Realtime GI而不是Light Probes。
Placing Light Probes
在编辑一个Light Probe Group时,你可以用类似处理GameObjects的方式处理单个的Light Probes。然而,Light Probes不是GameObjects,它们是Light Probe Group组件中的一组点(points)。
当开始编辑一个新的Light Probe Group时,会有8个默认的light probes,排放在立方体的8个顶点上,如下图所示:
你可以使用 Light Probe Group inspector面板上的Add Probe控件添加 新的Light Probe。Light Probes在场景中呈现为黄色的小球,可以移动它们(就像移动GameObjects一样)。
Choosing Light Probe positions
Lightmaps在对象表面上具有连续的分辨率(resolution)(大概就是分布密度吧?)。与Lightmaps不同,LightProbes的信息分布情况可能是不连续的,这取决于你放置的Light Probes的位置的紧凑程度。
为了优化Light Probes存储的数据量和游戏运行时的计算量,你通常应该尽量减少使用的Light Probes的数量。然而,你又应该放置“足够多”的Light Probes,使得从一个空间到另一个空间的光照变化能够被记录一来,并且达到你要的要求。这意味着你可能需要在光线复杂,光照差异明显的地方多放置点Light Probes(即,在这种光线复杂的环境,应该以更紧凑的方式放置Light Probes)。在光照变化不大的地方,以更分散的方式放置Light probes。
如上图,建筑(房屋等)附近及之间放置的Probes比较密集,而在马路上就比较稀疏。
最简单的放置方式是按均匀三维网格的方式放置Light Probes(如,把它们放在网格的顶点)。这种方式很简、快捷,但是会消耗过多的、没必要的存储空间。如上图中,沿着马路,光照变化很少,许多相邻的Light Probes会存储相同的光照数据(lighting data)。在这种情况下,可以像上图那样,通过对少量、分散开来的light probes的lighting data进行插值处理。
参考:
首发于我的知乎专栏: https://zhuanlan.zhihu.com/p/70298213
Light Probes的更多相关文章
- Unity Lighting - Light Probes 光照探针(十)
Light Probes 光照探针 Only static objects are considered by Unity’s Baked or Precomputed Realtime GI s ...
- unity3d Light Probe Group图解超详细使用方法
原创文章如需转载请注明:转载自http://blog.csdn.net/qq617119142 第一步,创建一个Panel 和 三个 cube,搭建成如下图形状 第二步,创建2个点光源,一个为绿灯,一 ...
- Light Probe Proxy Volume
[Light Probe Proxy Volume] The Light Probe Proxy Volume (LPPV) component allows you to use more ligh ...
- Light Probe
[Light Probe] Light Probes provide a way to capture and use information about light that is passing ...
- Light Explorer
[Light Explorer] The Light Explorer allows you to select and edit light sources. Window> Lighting ...
- 淺談Unity 5.4新功能:Light Probe Proxy Volume
作者:CHRISTOPHER POPE 原文連結 Unity 5.4進入到Beta的階段.当中一個特別的功能是光照探頭代理Light Probe Proxy Volume(LPPV).本篇會向大家介紹 ...
- 【Unity】第13章 光照贴图和光影效果
分类:Unity.C#.VS2015 创建日期:2016-05-19 一.简介 在Unity 5中,Lighting是—种增强场景光照和阴影效果的技术,它可以通过较少的性能消耗使静态场景看上去更真实. ...
- 转 unity 优化
最近研究U3D开发,个人认为,精通一种新的技术,最快最好的方法就是看它的document,而且个人习惯不喜欢看中文的资料,原汁原味的东西是最正确的,一翻译过来很多东西就都不那么准确了.于是通读了uni ...
- Unity 5 中的全局光照技术详解
貌似是某位好人翻译的 https://unity3d.com/cn/learn/tutorials/topics/graphics/unity-5-lighting-and-rendering#rd? ...
随机推荐
- YoyoGo微服务框架入门系列-快速编写WEB API
前言 YoyoGo是一个使用Golang编写的一个简单.轻量.快速.基于依赖注入的微服务框架,目前依然在研发阶段,欢迎Star以及一起参与到框架的研发 GitHub地址:https://github. ...
- PyQt(Python+Qt)学习随笔:QListWidget的currentRow属性
QListWidget的currentRow属性保存当前项的位置,为整型,从0开始计数,在某些选择模式下,当前项可能也是选中项. currentRow属性可以通过方法currentRow().setC ...
- Ubuntu 16.04添加阿里云源
转自:http://www.cnblogs.com/EasonJim/p/7119156.html 添加国内源有个好处,比如下载软件时直接时国内的服务器,速度有保证. 以下是操作方法: 1.备份 su ...
- 项目测试环境自动化部署[jenkins前后端配置、Nginx配置]
持续部署:关注点在于项目功能部署到服务器后可以正常运行,为下一步测试环节或最终用户正式使用做准备.(问题点:一个环节有问题,其他环节跟着有问题) 持续集成:关注点是在于尽早发现项目整体运行问题,尽早解 ...
- Python运算符可不只有加减乘除
数学里面的加减乘除,就是运算符,但是 Python 的运算符更多样,更复杂,分为算术运算符.比较运算符.赋值运算符.位运算符.逻辑运算符.成员运算符.身份运算符.为了更直观的看到运算符的使用,本文采用 ...
- dataframe检查重复值,去重
flag = df.price.duplicated() # flag = df.duplicated() #参考:https://www.cnblogs.com/trotl/p/11876292.h ...
- 使用eslint将项目中的代码修改统一的缩进
背景 继承了组里师兄师姐写的项目的前端代码,但是是两个人写的,有两格缩进的,有四格缩进的,有字符串外用单引号的,有用双引号的. 于是搜索了一下,可以用eslint强制转化. eslint在github ...
- Dell R740 使用U盘安装 CentOS7.4 出现Warning:dracut-initqueue timeout - starting timeout scripts解决办法
使用使用UltraISO软碟通刻录U盘,然后在Dell R740服务器安装CentOS7.4会出现如下错误: 解决办法: 1.使用blkid确认U盘的盘符,截图如下: 2.按F11键重启 3.进入启动 ...
- 题解 洛谷P6853 station
蒟蒻语 还是蒟蒻太菜了,这场 div1 竟然一题都没做出来/kk/kk/kk 蒟蒻解 首先我们把每 5 个点分为一组.然后分组结果大概是这样子: 可以看到首先下面需要有一条边来让整张图有一条支撑的路径 ...
- 03_py
3.1 在编程的语境下,函数 (function) 是指一个有命名的.执行某个计算的语句序列 (se-quence of statements) .在定义一个函数的时候,你需要指定函数的名字和语句序列 ...