Unity3D 中的灯光与渲染

最近仔细研究了Unity3D中的灯光以及渲染,有了全新的认识,在这里整理记录下来。博主所使用的是Unity3D 2017.3.1f1这个版本。

一、Unity3D中的灯光

  1. Directional Light:平行光,用来模拟太阳发射的光。
  2. Point Light:点光源,用于模拟场景中的灯和其他本地光源。
  3. Spot Light:聚光灯,通常用于人造光源,如手电筒,汽车前灯和探照灯。
  4. Area Light:区域光,只能用于烘焙中。
  5. Reflection Group:反射探针,用于准确反射周围环境。
  6. Light Probe Group:灯光探针组,用于记录场景中光照信息,实时影响物体。
  7. Environment Lighting:环境光。场景的整体外观和亮度的主要依靠于环境光,环境光是从各个方面来影响对象的。
  8. Emissive Materials:自发光材质,类似于区域光,只能使用在静态物体中,并且只能照明静态物。

二、Unity3D中虚拟环境的组成

Unity3D中虚拟环境由天空盒、环境光、环境反射以及场景中的光源共同构成。我们按照下面的步骤,可以将场景还原到最原始的状态:

  1、关闭场景中的所有灯光。

  2、进入Window->Lighting->Setting->Scene窗口。

  3、设置Environment->Skybox Material参数为None,取消天空盒。

  4、设置Environment->Environment Lighting->Ambient Color为黑色,将环境光设置为黑色。这里需要注意的是,当我们将天空盒取消后,环境光的来源将会变为颜色,如果我们设置了天空盒,并将环境光的来源设置为天空盒(Environment -> Environment Lighting -> Source -> Skybox),Ambient Color参数将会变为Intensity Multiplier(环境光强度),如果我们将强度调为0,会发现场景明显变暗。

  5、设置Environment->Environment Reflections->Intensity Multiplier为0,将环境反射强度设置为0。环境反射也受来源的影响,当天空盒为空时,反射来源也为空,这时我们调这个参数其实是看不到效果的。如果我们设置一个天空盒,将环境光关闭,打开场景中的光源,我们在调节这个参数,会发现场景中的模型,接受不到光照的地方将会显示纯黑色。

按照上面的步骤做完,我们将会得到一个纯黑的场景,什么也看不到,如果我们反向操作,场景又会慢慢亮起来,这也就证明了Unity3D中虚拟环境由天空盒、环境光、环境反射以及场景中的光源共同构成这一结论。

三、Unity3D中打光与渲染必备知识

  1、Unity3D中的光分为直接光照和间接光照,间接光照就是反射光。

  2、Unity3D中光的渲染模式有三种:

    ① Realtime:实时渲染。每帧都会计算光照,实时光照是不会反射的,所以它的光影显得单调。

    ② Mixed:混合渲染。提供烘焙和实时功能的混合模式,例如对灯光的间接照明进行烘焙,同时对直接照明进行实时计算。

    ③ Baked:烘焙渲染。过烘培光照贴图的方式获得很好的光照效果,无法实时的改变光照。

  3、Unity3D中的阴影类型:

    ① No Shadows:没有阴影。无性能损耗。

    ② Hard Shadows:硬阴影。阴影边缘清晰,效果一般,性能损耗一般。

    ③ Soft Shadow:软阴影。阴影边缘柔和,有过渡效果,效果最好,性能损耗最严重。

  4、Unity3D中分全局设置和局部设置。例如我们对场景中某一盏灯光的参数进行修改,只会影响这一盏灯,如果对全局参数进行修改,将会影响所有的灯光效果。

  5、Unity3D中的物体分为动态物体和静态物体。烘焙技术、自发光材质、预先全局光照技术等只对静态物体生效。

四、效果优化常用全局参数介绍

1、颜色空间(Color Space)

参数设置位置:Edit -> Project Setting -> Player -> Player Settings -> Other Settings -> Rendering -> Color Space

两种模式:Gamma和Linear。Linear效果更好,同时也对性能消耗比较大。下面是两种模式在不同光照强度下效果对比图:

2、最终聚集(Final Gather)

参数设置位置:Window -> Lighting -> Setting -> Scene -> Lightmapping Settings -> Final Gather

作用:一种模拟全局照明的计算技术。反向搜集物体表面特定点的受光照强度来模拟现实照明效果,来使场景更贴近于自然。由于该计算技术计算量很大,建议在场景最后出效果时勾选,并进行烘焙,平时不要开启。

五、没有阴影的原因

1、光源没有开阴影。

2、全局设置中关闭了阴影。(Edit -> Project Setting -> Quality -> QualitySettings -> Shadows -> Shadows)

3、模型。Mesh Renderer组件中的Cast Shadows属性为关。

4、Shader问题,Shader本身不接受阴影。

六、灯光常用参数介绍

Type:灯光类型

Color:灯光颜色

Mode:渲染模式

  Realtime:实时

  Mixed:混合

  Baked:烘焙

Intensity:灯光强度

Indirect Multiplier:间接照明强度

Shadow Type:阴影类型。No Shadows(无阴影)、Hard Shadows(硬阴影)、Soft Shadows(软阴影)

  Baked Shadow Angle:这个设置用来改变间接光的亮度。间接光是指从一个物体反射到另一个物体的光线。Indirect Multiplier定义了GI系统计算的反射光亮度。Indirect Multiplier小于1时,光线每次反射后会变暗。大于1时光线每次反射后会变 亮。 这个功能可以用来调亮阴影中的表面(比如洞穴内部)以清晰地观察细节。或者在使用Realtime Global Illumination时,想让某个real-time光源只有直接光时,可以将Indirect Multiplier设置为0。

  Realtime Shadows:实时阴影

    Strength:阴影浓度,即阴影的黑暗程度。

    Resolution:阴影分辨率,即质量。

    Bias:通过滚动条控制阴影被推离光线的距离,范围为0到2,默认值为0.5。用来避免人工物体自阴影的错误。

    Normal Bias:通过滚动条控制投射阴影的表面相对于周围正常表面的下沉效果,范围为0到3,默认值为0.4。用来避免人工物体自阴影的错误。

    Near Plane:通过滚动条控制渲染阴影时的最近裁切面。范围为0.1到10,默认值时0.2。这个值会从0.1 units和光线的Range的1%中取最小值。

Cookie:为投射的阴影指定一个纹理(替换真实的灰色阴影)。比如制造剪影,或者照明图案。

Cookie Size:阴影纹理尺寸

Draw Halo:绘制光晕

Flare:光斑

Render Mode:渲染优先级。这会影响光照的保真度和渲染性能。

  Auto:渲染方式在运行时根据周围光照的亮度和当前Quality Settings来决定。

  Important:光照总是按照逐像素的质量渲染。一般只对最醒目的视觉效果使用Important模式,比如玩家车辆的车灯。

  Not Important:光照总是以更快的顶点/角色光照模式渲染。

Culling Mask:光照剔除

各种灯光的参数都大致一致,我这里就不一一介绍了,就以平行光为例介绍。

七、Lighting窗口参数介绍

Unity3D 中渲染效果肯定是离不开 Lighting 窗口的参数设置的。Lighting 窗口的参数看着很多,其实只要理解了,也没多少。而且Realtime、Mixed、Baked这三种渲染模式是分别与 Lighting 窗口中的 Realtime Lighting、Mixed Lighting、Lightmapping Settings 三大块一一对应的,只要理解了这个,整个 Lighting 窗口的参数就好理解很多了。

1、Environment(环境设置)

  Skybox Material:天空盒

  Sun Source:当使用程序天空盒时,使用它来指定带有方向光的游戏对象,如果设置为none,场景中最亮的方向光则被指定为太阳光。

  Environment Lighting:环境光

    Source:来源

      Skybox:天空盒

      Gradient:梯度

      Color:颜色

    Intensity Multipl:环境光强度

    Ambient Mode:环境渲染模式

      Realtime:实时渲染

      Baked:烘焙

  Environment Reflections:环境反射

    Source:来源

    Resolution:反射成像的分辨率

    Compression:压缩

    Intensity Multipl:反射强度

    Bounces:弹跳;反射

2、Realtime Lighting(实时灯光)

  Realtime Global Illumination:实时全局光照

3、Mixed Lighting(混合灯光)

  Baked Global Illumination:烘焙全局光照

  Lighting Mode:只在光源模式为 Mixed 时生效。

    Baked Indirect:只烘焙间接光。使用此模式,光影效果最好,并且静态物体和动态物体的光影可以混合,但是很消耗性能。该模式受Shadow Distance(QualitySettings -> Shadows -> Shadowmask Mode ->Shadow Distance)参数的影响,当视野距离超过这个值时,不显示影 子。

    Shadowmask:效果比Subtractive效果要好,缺点就是动态物体无法接受静态物体已经烘焙好的阴影。如果我们想动态物体能够和烘焙好的光影 信息进行混合,我们可以将模式改为Distance Shadowmask,这样就可以实现在一定视野范围内进行混合,但是相对来说会损耗性能。Distance Shadowmask模式受Shadow Distance(QualitySettings -> Shadows -> Shadowmask Mode ->Shadow Distance)参数的影响,这个距离 指的是视野距离,即物体距离相机的距离。Distance Shadowmask模式是在质量设置里面进行设置的(QualitySettings -> Shadows -> Shadowmask Mode -> Distance Shadowmask)。

    Subtractive:效果最差,性能最好。只允许有一个主光源,当动态物体,被两个光源照射时,只会产生一个阴影,静态物体依然会有两个阴影。

4.Lightmapping Settings

  Lightmapper:光线映射器。

  Indirect Resolution:间接光质量。

  Lightmap Resolution:光照贴图质量。

  Lightmap Padding:光照贴图间距。防止光照信息贴错位置。

  Lightmap Size:光照贴图尺寸。

  Compress Lightmaps:是否压缩。

  Ambient Occlusion:环境剔除。可以优化墙角等地方光影效果。环境光遮蔽是一种光照模型,它会计算像素亮度与场景中附近物体之间的关 系。它将确定何时阻止特定像素接收附近的几何光的环境光,这样使其亮度便会降低。当两个均匀明亮的物体相互靠近时,它会产生基本的 变光效果。

    MaxDistance:设置一个值控制射线的射程,以确定对象是否被遮挡。

    Indirect Contribution:控制间接光在lightmap的强度。

    DirectContribution:控制直接光在lightmap的强度。

  Final Gather:最终聚焦。

    RayCount:每个最终聚焦的点发出的射线的数目。默认是256。

    Denoising:是否在最后的聚焦输出应用去噪过滤。

  Directional Mode:是否生成光照方向贴图来辅助计算。

  IndirectIntensity:间接光强度。

  Albedo Boost:反照率增强。可以用来处理曝光现象。将模型材质的Albedo贴图颜色调暗,将反照率加大。

  Lightmap Parameters:光照贴图参数。质量设置。

原文地址:https://www.cnblogs.com/xiaoyulong/p/11549922.html

时间: 2024-10-28 20:11:38

Unity3D 中的灯光与渲染的相关文章

70部MAYA灯光材质渲染教程合集

MAYA灯光材质渲染教程合集 教程格式:MP4和flv 两种格式 使用版本:教程不是一年出的教程,各个版本都有 (教程软件为英文版) 清晰度:可以看清软件上的文字 语言:部分中文字幕,其他英文(通过看操作步骤学习) 教程大小:约120 GB 下载地址 中文字幕: MAYA 2013基础实例教程(中文字幕) maya 2017 基础教程(中文字幕) Maya UV纹理布局视频教程(中文字幕) Maya毛发插件Yeti从入门到精通(中文字幕) Maya与Arnold灯光渲染训练视频教程(中文字幕)

游戏引擎中三大及时光照渲染方法介绍(以unity3d为例)

(转)游戏引擎中三大及时光照渲染方法介绍(以unity3d为例) 重要:在目前市面上常见的游戏引擎中,主要采用以下三种灯光实现方式: 顶点照明渲染路径细节 Vertex Lit Rendering Path Details 正向渲染路径细节 Forward Rendering Path Details 延迟光照渲染路径的细节 Deferred Lighting Rendering Path Details 以unity3d为例,以下将详细讲解三种灯光渲染方式的实现.原理及缺陷. 顶点照明渲染路径

Unity3D中的Shader

简单的说,Shader是为渲染管线中的特定处理阶段提供算法的一段代码.Shader是伴随着可编程渲染管线出现的,从而可以对渲染过程加以控制. 1. Unity提供了很多内建的Shader,这些可以从官网下载,打开looking for older version的链接就能看到Build-in shaders.选择合适的Shader很重要,以下是开销从低到高的排序: (1)Unlit:仅使用纹理颜色,不受光照影响 (2)VertexLit:顶点光照 (3)Diffuse:漫反射 (4)Specul

【转】Unity3D中Layers和LayerMask解析

Unity中是用int32来表示32个Layer层.int32表示二进制一共有32位(0-31).在Unity中可编辑的Layer如下图所示: 在Unity中每个GameObject都有Layer属性,默认的Layer都是Default.在Unity中可编辑的Layer共有24个(8-31层),官方已使用的是0-7层,默认不可编辑! LayerMask实际上是一个位码操作,在Unity3D中一共有32个Layer层,并且不可增加. 位运算符 按位运算符:~.|.&.^.位运算符主要用来对二进制位

【Unity灯光与渲染技术】Global Illumination全局光照

本系列主要参考Unity灯光与渲染技术教程Unity Lighting And Rendering,同时会加上一点个人实践过程和理解. ========================================== 分割线 ========================================== 这篇文章主要讲全局光照,在看教程的时候就有一个点不是很理解,就是作者开启物体的static这个选项.在网上查找一些资料,有的说"static表示物体时静态的,多用于静止不动的物体,此外

Unity3D中事件函数的运行顺序

Unity3D中脚本的生命周期是依照预先定义好的事件函数的运行流程来演化的,详细流程例如以下: Editor模式下Reset: 当脚本第一次被挂到GameObject上或用户点击Resetbutton时,Reset被调用初始化脚本属性,最经常使用于在Inspector视图中呈现好的默认值. 载入第一个场景First Scene Load: 场景启动时会对场景中的每一个对象运行一遍例如以下事件函数: Awake:游戏启动之前初始化不论什么变量和游戏状态,仅在脚本生命周期中调用一次.不能做协程,St

(转)unity3d中脚本生命周期(MonoBehaviour lifecycle)

自:http://blog.csdn.net/qitian67/article/details/18516503 最近在做一个小示例,发现类继承于MonoBehaviour的类,有很多个方法,于是乎必然要问出一个问题:这么多个方法,执行先后顺序是如何的呢?内部是如何进行管理的呢?于是在网上找了许多资料,发现了Richard Fine在2012年就已经发布了一篇文章,而且讲得算是相当深入,并且很有道理的,这里加上我的一些尝试与思考,分享给大家. 先贴上图,大家有个直观认识: 接下来,做出一下讲解:

Unity3D中可重载虚函数的总结

重载虚函数:Unity3D中所有控制脚本的基类MonoBehaviour有一些虚函数用于绘制中事件的回调,也可以直接理解为事件函数,例如大家都很清楚的Start,Update等函数,以下做个总结. Awake 当前控制脚本实例被装载的时候调用.一般用于初始化整个实例使用. Start 当前控制脚本第一次执行Update之前调用. Update 每帧都执行一次.这是最常用的事件函数. FixedUpdate 每固定帧绘制时执行一次,和update不同的是FixedUpdate是渲染帧执行,如果你的

Unity3D中的shader基础知识

1.Unity中配备了强大的阴影和材料的语言工具称为ShaderLab,以程式语言来看,它类似于CgFX和Direct3D的效果框架语法,它描述了材质所必须要的一切咨询,而不仅仅局限于平面顶点/像素着色. 2.在Unity3D中创建一个Shader:Assets -> Create -> Shader 3.创建了Shader就可以应用到各个材质Material中,创建材质:Assets -> Create -> Material.然后就可以在材质的Inspector面板中,shad