最近翻自己记录的笔记的时候,发现之前学的Unity 灯光lighting设置渲染一块没有总结过,因此特地将笔记内容整理至博客中。

一.常见光源Light

  • 一说到Unity中的Light,大家能回忆起有哪些光源呢?Directional light、Spot light、Point light 和Area light。那么接下来先对每个Light类型进行简单介绍。
(1).Directional light

Directional light 中文翻译就是定向光,directional light发射的光没有距离的限制,就算你放在了无限远的地方,它所直射出来的光也一样会照射出指向方向区域,并且光线不会减弱。
我们经常会在Unity运用directional light来模拟太阳发射出来的光。

默认情况下,每个新的Unity场景都包含一个Directional Light。它与Lighting面板的环境光照部分(Lighting->Scene->Skybox)中定义的天空系统相关联。

(2).Spot light

我的理解就是聚光灯,在Unity中类似一个锥体来投射光线,因此就有了两个重要属性RangeAngle,具体如下图所示,Range限制了Spot light的投射长度,而Angle限制了Spot light照射到的面积大小

聚光灯通常用于人造光源,如手电筒,汽车前灯和探照灯。通过脚本或动画控制方向,移动的聚光灯将照亮场景的一小块区域来达到灯光效果。

(3).Point light

点光源,位于空间位置中的一个点,会向所有方向均匀发光。光照强度与光照射距离的平方成反比,类似于光在现实世界的表现

点光源可用于模拟场景中的灯和其他本地光源。还可以使用它们来制造火花或爆炸照亮周围环境的效果。

(4).Area light

区域光。当你创建区域光的时候,它会呈现出一个矩形的样子。光在所有方向上均匀地穿过它们的表面区域发射,但仅从矩形的一侧发射。对于区域光的范围没有手动控制,但是当距离光源时,强度将在距离的平方反比处减小。由于照明计算是处理器密集型的,因此区域光源在运行时不可用,只能烘焙到光照贴图中。

由于区域光同时从几个不同方向照射物体,因此阴影趋向于比其他光类型更柔和和微妙。可以使用它来创建逼真的路灯。还常常用在室内照明中,代替点光源,因为具有逼真的效果。

如下图 光在区域光的表面上产生漫反射,具有柔和阴影的反射光。

二.灯光烘焙

我们经常熟知的是:在项目完成后,对场景中的灯光进行烘焙,以此产生光照贴图,减少实时光照性能的负担。我们经常的做法就是将所有静态物体在右上角面板处勾选 Lightmap Static

一旦勾选上,你就会发现Unity界面的右下角会一直有个进度条进行所谓的灯光渲染,此时性能差的电脑可以就会…所以一般来说我们会在最终烘焙之前,先在Window->Lighting->Settings中找到Auto Generate,将勾取消掉,这样我们设置完所有的静态物体后,再点击一次Generate Lighting 然后耐心等待渲染即可。

额外知识点:

1.当我们导入物体模型的时候,建议勾选上Generate Lightmap UVs 灯光烘培时的光照贴图要用到 效果会很不错


不勾选如下图所示:

勾选后

2.在Edit->Project Settings->Player 中 ColorSpace改成线性Linear 更加真实

附上Unity官网手册对比图
总结下来就是 Gamma空间暗的地方更加暗 亮的地方更加亮
而使用Linear就比较中规中矩 更加写实性
但在许多情况下,使用哪个颜色空间的会被目标平台的硬件所限制 需要提前确定

三.全局光照

GI 全局光照 在window->lighting->settings中可以勾选上
将光源设置成Baked 同时将需要烘培光照贴图的物体设置成static(Lightmap Static)


可以对比一下 (无全局光照) 物体被遮挡部分全部呈现黑色

打开全局光照(引入了光照反射)

我们在Unity运行的时候移动一下物体 发现烘焙好的光照贴图已经在场景中了

PS:对于光源的烘培模式为“Mixed”时 光源会对设置成静态的物体进行光照贴图烘焙 而对非静态的对象进行实时光源计算(例如房间里的摆设都可以设置成静态,而角色设置成非静态 这个时候房间里的灯光可以设置成混合模式)

四. 全局光照Lighting Mode分析

1.Subtractive 不支持多盏灯光(根据需求更改)


Subtractive性能开销会变小 但是呈现质量会变低
原来默认情况(Shadowmask)

改为Subtractive后 发现阴影变少了(减少了部分性能消耗)

附上官网优缺点

2.Shadowmask

默认时都是Shadowmask 效果比较好
在展示效果之前我们先打开Edit->Project Settings->Quality 发现这里的设置是Distance Shadowmask

与上面的Shadow Distance(150)是有关系的 我们待会来说
我们先来看下当前设置下的两个物体 A是静态已经烘培好光照贴图的 而B是非静态的。如图一 如果是Shadowmask的选择下,结果如图

下图为shadowmask模式下

我们可以明显看到A背部阴影被没有部分投射到B物体上方,因而显得不是那么真实。
当我们需要A的阴影产生在B物体上时 这个时候就需要使用Distance Shadowmask来进行实时计算

但是这样的设置肯定是花费更多性能 (可以发现两张图片中性能中“Shadow casters”的大小)

而Shadow Distance的作用呢?这个150其实就是摄像机离这个物体的距离了 当你把视角往后移到这个距离以外时 就会发现 阴影就木有了 所以调整合适的距离可以有效减少部分性能的开销

还有就是可以通过代码来控制 当我们的非静态物体移动到我们的静态物体阴影的所规划范围(通过触发检测)内进行Shadowmask Mode的更换 如果原本是shadowmask就改成distance shadowmask

附上官网优缺点

3.Baked Indirect

呈现效果最好的

但是当我们摄像机与物体的具体超过物体的shadow distance 则部分阴影就不渲染了…

同样附上官网解释优缺点

四.结尾

基础的灯光与渲染就涉及到这些吧…等我之后有时间了再总结如何使用灯光探针…(有人催的情况下 会抓紧的…)

Unity 灯光与渲染 (一)相关推荐

  1. Unity3D灯光与渲染学习之(一):天空盒、灯光以及色彩空间

    最近在学习Siki学院中的U3D渲染,将学习的笔记进行整理,方便日后查阅,也方便各位交流学习.课程大纲如下: 先介绍灯光渲染的大致内容,灯光效果主要分为实时光照(RealTime) 和烘焙(Baked ...

  2. Unity灯光、烘焙小结(一)Unity灯光烘焙教程

    *****************Unity灯光烘焙教程************* https://space.bilibili.com/26063436/channel/detail?cid=867 ...

  3. 【Unity Shader】渲染纹理实现镜子效果

    1 基本概念 1.1 什么是渲染到纹理? 全称是Render To Texture,<入门精要>好像又把渲染目标纹理,即Render Target Texture也叫做RTT,但我认为&l ...

  4. Unity批次合并渲染

    Unity批次合并渲染 为了减少CPU与GPU交流的成本,减少DrawCall的数量,优化渲染,Unity提供了合并批次进行渲染的方式,其支持动态批次合并.静态批次合并.GPU实例化三种合并批次方式, ...

  5. Unity Shader卡通渲染 · 高清渲染管线·HDRP

    Unity Shader卡通渲染 · 高清渲染管线·HDRP 前言 最近在研究HDRP管线中的卡通渲染,就想着能不能把官方的UCTS移植到HDRP管线里面去,说干就干,到昨天晚上上传了github,今 ...

  6. Unity Shader 卡通渲染 模型描边之退化四边形

    目录 前言 一.基于空间的边缘检测算法 二.退化四边形 三.Unity中的CommandBuffer和ComputeBuffer 四.构成描边的简单实例 五.模型描边的实现 前言 之前写了一篇< ...

  7. Unity Shader 卡通渲染 实时模型动画描边的研究

    前言 卡通渲染也叫非真实感渲染(英文简写:NPR),"描边"在图形学和数字图像里都叫边缘检测.因此你可以在很多文献网站上面找到很多这类文献,但最后我发现基于图形学使用的方式基本都是 ...

  8. 第16章 Unity中的渲染优化技术

    程序优化的第一条准则: 不要优化.程序优化的第二条准则(仅针对专家! 〉: 不要优化. 一一Michael A. Jackson 在进行程序优化的时候,人们经常会引用英国的计算机科学家Michael ...

  9. Unity Shader 布料渲染(丝袜)

    Unity Shader 布料渲染(丝袜) 现实中的丝袜效果 丹尼尔值 纤维的特性 分析 效果截图: Weak: Normal: Strong: 属性值定义: 丹尼尔值与拉伸程度 边缘度的计算 完整S ...

最新文章

  1. ubuntu16.04服务器配置mysql,并开启远程连接
  2. 1、HTML 初步认识
  3. Python argparse模块基本用法
  4. 2021年8月Web服务器排行榜:Nginx牛市上升
  5. 关于WebView加载URL时显示一片空白的问题
  6. IOS中的懒加载lazyLoad
  7. 你有把依赖注入玩坏?
  8. 想让数据分析更简便,怎能少了它!
  9. php5.5 反序列化利用工具_Yii框架反序列化RCE利用链2
  10. java tcp链接慢_jmeter tcp长连接性能测试
  11. MATLAB Tick的方向(刻度标外翻)
  12. mongodb 导出一条数据_将 MongoDB 导出成 csv
  13. 元数据管理在数据仓库的实践应用
  14. 数学建模系列-优化模型(三)---排队论模型
  15. 变步长梯形求积公式C语言_光伏逆变器MPPT算法步长设定李星硕
  16. 嵌入式linux ucgui,成功移植ucGUI到Linux上
  17. python输入学生姓名_python学生信息管理系统实现代码
  18. unity-2D游戏地面检测 三射线检测
  19. DELL 电脑 重装系统出现 no boottable devices found
  20. 基于51单片机简易智能家居

热门文章

  1. nodejs双感叹号用法
  2. Hessian矩阵的几何意义
  3. python if else写在一行_关于python:将if-elif-else语句放在一行上?
  4. 使用pysam读取DNA序列
  5. 光伏辐照和发电功率数据集
  6. seo-移动站优化问题修改针对落地页规范
  7. Xmanager快速连接Linux图形界面教程
  8. java 生成纯色图片_java实现切图并且判断图片是不是纯色/彩色图片
  9. [unknown OJ] 养花
  10. fetch用英语解释_fetch的用法总结大全