【Unity学习笔记】光照简介

news2024/11/22 11:09:19

在这里插入图片描述

本节主要是简单介绍一些常见的光照组件和渲染设置。


文章目录

  • 灯光类型
    • 平行光Directional Light
    • 点光源Point Light
    • 聚光灯Spot Light
    • 面积光 Area Light
  • 阴影设置
  • 全局光照明
    • 光照模式
    • 直接光照与间接光照
    • Mixed Lighting
  • 光照探针
    • Light Probe Group光照探针组
  • 反射探针


灯光类型

在Unity场景中,灯光的一般可以由以下五类属性描述:

位置,方向,颜色,强度,衰减

位置指的是光源在场景中的坐标,方向即为光源的朝向,颜色是光源的色彩,强度代表了光源的曝光度,衰减代表了光照随距离减弱的程度。

而一般来说光照的烘焙属性可以分为RealTime,Mixed,Baked三种属性,这些涉及到光照渲染,我们先从对灯光类型的介绍开始讲起。

平行光Directional Light

平行光就是场景中的太阳,平行光的光照效果是全局的,不会随位置而改变。通过改变平行光的Rotation属性可以调整平行光的方向。
平行光是不会衰减的。

点光源Point Light

在这里插入图片描述

点光源是从一个点发出的,以该点为球心向一个球形范围发散光照。由于发散的特性,因此点光源的方向属性在场景中无法调整,如果需要控制点光源的照射方向可以在代码中获取。

物体离点光源的球心越近,光照强度就越大。

聚光灯Spot Light

在这里插入图片描述
在这里插入图片描述
聚光灯的形状是以光源为顶点发散的一个锥形体,离光源越近接收光照越强,并且光照范围是物体与圆锥的切面重叠处。

面积光 Area Light

在这里插入图片描述
面积光并不是以点为光源的,它是一种二维的光源,它的亮度不仅与强度相关,也与面积大小直接相关。

面积光的发光方向是始终朝向Z轴的,这个面的形状可以设定为方形或者圆形。

由于面积光在Unity中不是RealTime(实时渲染)的,因此直接使用无法发光,需要烘焙后才能使用。

首先如果要在物体表面烘焙出光照效果的话,需要被光照的物体的Static(静态)属性是要勾选上的:
在这里插入图片描述

然后需要在Lighting选项中勾选选项:Baked Global illumination(全局光照烘焙),并生成光照。
在这里插入图片描述
等待烘焙完成,我们才能在场景中看见光源的效果:
在这里插入图片描述
面积光非常适合室内的光照。但是如果物体不是静态的话就不会接收到光照。

但是在HDRP高清渲染管线中,Area Light已经支持实时预览了,所以在制作氛围的时候,可以更加方便的判断和调整了


阴影设置

在之前场景中设置光源的时候,光照并没有产生影子。如果需要产生影子的话,我们需要勾选相应设置:

在这里插入图片描述
在光照的选项中,都有关于阴影的shadow相关选项,如果我们需要物体在光线照射下显示阴影,就需要勾选相应选项。

在这里插入图片描述
对于阴影的选项也可以细分到每一个物体上,在物体的MeshRenderer下也有光照选项:
在这里插入图片描述
在CastShadows里可以选择计算阴影的类型。而ReceiveShadows则代表了物体表面渲染可接受其他阴影。

此外,在游戏设置里,我们可以在Quality选项中看到关于阴影的一些设置,
在这里插入图片描述
在Quality中可以选择Shadowmask mode,例如Distance Shadowmask代表了Unity 渲染实时阴影的最大距离,如果物体离得摄像机太远就不渲染实时阴影。或者直接不渲染阴影。

在这里插入图片描述

再例如Shadows中的Hard and Soft Shadows,软阴影和硬阴影,软阴影的阴影更接近现实,边缘更加柔和,当然也更消耗内存。

如果shader是透明通道的话,光就无法被阻挡,自然也就不会有阴影。


全局光照明

使用全局光照明,场景效果会更加细致,真实,但是会较为消耗性能。

首先对于需要接受全局光照明的物体,需要在MeshRenderer里勾选上Contribute Global illumination
在这里插入图片描述
随后,在lighting settings设置Baked Global illumination把全局光烘焙打开,顺便勾选Ambient Occlusion环境光遮挡。然后对场景进行渲染。
在这里插入图片描述

在这里插入图片描述
可以看到全局光烘焙后边缘的阴影,正方体不同面的亮度,阴影投射到墙体上的明暗等细节都被渲染出来了。

在这里插入图片描述

全局光渲染后会为我们的场景生成光照贴图,光照贴图本质上就是一张或者多张应用在场景模型上的贴图。它们包含的是通过光照贴图烘焙方式进行预计算所获得的间接光照,阴影等信息(可以在烘焙时选择只烘焙间接光照,不烘焙阴影)。使用光照贴图可以避免在游戏运行时进行实时的光照和阴影计算,提高游戏的运行性能,特别适合用于性能较弱的计算平台比如移动平台上。

所以使用烘焙(或者说其实是对光照贴图的预计算)静态物体获取光照贴图,能够避免实时运算的性能消耗,又能带来较好的光照效果。

光照模式

光照的烘焙属性可以分为RealTime,Mixed,Baked三种属性

现在我们又可以回头讲讲上文提到的光照模式了,Baked其实就是刚才讲到的对光照进行预计算以获取光照贴图。RealTime则是将光照效果始终使用实时计算,对性能消耗更大。还有一种Mixed模式,可以对部分光照进行Baked,部分光照进行RealTime计算。

在这里插入图片描述
通过在光照选项卡下勾选Realtime或者Mixed Lighting来允许光源在全局光照下使用对应的光照模式。
在这里插入图片描述
现在我们在场景中使用RealTime模式。如图所示有两个立方体,其中左边是静态的,右边是动态的。在没有光线照射的情况下,我们发现静态立方体依然出现了光照效果,因为它是提前烘焙过的,不参与光照计算,因此即使没有光照,依然出现了光照效果。

在这里插入图片描述
切换为Baked模式,在Baked模式下,动态物体是不会被渲染的
在这里插入图片描述

最后是Mixed模式,可以看到Mixed模式下,左边的静态物体依旧是提前烘焙的效果,右侧的动态物体则是计算了实时光照。

直接光照与间接光照

在这里需要插播一下直接光照与间接光照的区别。
直接光照就是照射物体的光线,间接光照则是光线照射到物体表面之后折射到其他物体上的光照。犹记之前看到虚幻5demo时,lumen系统加上光追的炫目效果。在金属材质上的光照能够将自身材质色彩的间接光照反射到周边的物体上。

在这里插入图片描述
上图就是间接光照的一个效果演示,可以看到黄色立方体的间接光照映射到了地板上(当然这个是Baked模式的光照贴图烘焙出的效果)。这些间接光照的信息还会被加入到光照探测器(ReflectionProbe)中。

Mixed Lighting

混合光照模式中还有一些模式的细分,具体分为:Baked Indirect,Subtractive,Shadowmask

关于在MixedLighting下不同Lighing Mode对静态物体和动态物体的光照效果影响,请看下图:

拓展——内置渲染管线下静态物体和动态物体的区别

在这里插入图片描述
从性能消耗的情况下看,Shadowmask > Baked Indirect > Subtractive, 效果上也是如此,其中Distance Shadowmask 不仅比Shadowmask好,性能也更节省。


光照探针

Light Probe Group光照探针组

在这里插入图片描述

在上图中有两个立方体,左边的立方体是静态的,右边的立方体是动态的,在经过Shadowmask烘焙之后发现,静态物体受到了粉色和蓝色的反光效果。而动态物体却没有反射光照。如果想要动态物体也能接收到间接光照,可以为动态物体挂载一个光照探针组
在这里插入图片描述
使用光照探针组包裹动态物体,由代表顶点的小球记录光照信息。

在这里插入图片描述
在这里插入图片描述
可以看到这个动态的立方体在不同的反射光照下,表面也被渲染上了不同的色彩。

在这里插入图片描述

在这里插入图片描述

如果我们用两个光照探针组分开左半边和右半边,就能对左右分别进行渲染。使用更多的光照探针组来探测更丰富的光照信息。

但是在运行时,只会给出四个探针来收集光照


反射探针

在这里插入图片描述
反射探针是一种可以收集周边场景光照反射信息的探测器。
如果仔细观察不难发现,反射探针内部呈现的图样和天空盒十分相似。反射探针蕴含的思想,不仅和天空盒贴图一脉相承,而且实际上是互逆的:天空盒贴图通过Cube map纹理获取像素信息,渲染场景;而反射探针通过获取范围内场景信息,输出Cube map形式的反射贴图。

周边的MeshRenderer会自动读取反射探针并加入。

在这里插入图片描述

反射探针拥有三种模式,Baked,custom,realtime,根据模式名也好理解,baked代表提前烘焙的反射探针,custom代表自定义的反射贴图,realtime则是实时计算。
在这里插入图片描述
上图中,红圈物体是反射探针,蓝圈物体是一个小球。我们将小球的材质的光滑度和金属度都设置为1,就能实现百分百反射的效果。图中白色立方体范围代表了反射探针能影响的MeshRenerer的范围。小球在反射探针范围内映射出的样式和反射探针内的样式是一样的。说明小球读取了反射探针内的反射贴图并显示出来。
在这里插入图片描述
如果将小球置于反射探针范围之外,则小球只反射天空盒。

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

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

相关文章

00后女孩月薪3200,3年买两套房,这个程序员变现新风口千万要把握住

00后女孩月薪3200,3年买两套房,这个程序员变现新风口千万要把握住 前几天,在网上看到了一份中国90后收入的调查报告: 报告显示: 90后月均收入8000元,三成90后零存款,两成90后存款达到10万以上…

鸿蒙开发之页面与组件生命周期

一、页面间的跳转 创建文件的时候记得选择创建page文件,这样就可以在main->resources->profile->main_pages.json中自动形成页面对应的路由了。如果创建的时候你选择了ArkTS文件,那么需要手动修改main_pages.json文件中,添加相应的…

mysql字段设计规范:使用unsigned(无符号的)存储非负值

如果一个字段存储的是数值,并且是非负数,要设置为unsigned(无符号的)。 例如: 备注:对于类型是 FLOAT、 DOUBLE和 DECIMAL的,UNSIGNED属性已经废弃了,可能在mysql的未来某个版本去…

​flutter 代码混淆

​flutter 代码混淆 Flutter 应用混淆:Flutter 应用的混淆非常简单,只需要在构建 release 版应用时结合使用 --obfuscate 和 --split-debug-info 这两个参数即可。–obfuscate --split-debug-info 用来指定输出调试文件的位置,该命令会生成一…

threejs 多屏互动效果,居然还能这么玩

threejs 多屏互动效果 看别人做了多屏互动的效果,觉得还挺有意思的,也顺便自己动手操作一下试试。 先来张效果图: 项目地址 参考地址 项目基于vuethreejs。 思路 大体思路如下: 架设一个正投影摄像机,在屏幕中间…

技术阅读周刊第9️⃣期

技术阅读周刊,每周更新。 历史更新 20231107:第五期20231117:第六期20231124:第七期20231201:第八期 美团技术博客十周年,感谢一路相伴 - 美团技术团队 URL: https://tech.meituan.com/2023/12/04/ten-year…

java学生选课系统 数据库版

首先让我们创建一个数据库 让我们向表中插入数据然后查询它

AI全栈大模型工程师(二十八)如何做好算法备案

互联网信息服务算法 什么情况下要备案? 对于B2B业务,不需要备案。 但在B2C领域,一切要视具体情况而定。 如果我们自主训练大型模型,这是必要的。 但如果是基于第三方模型提供的服务,建议选择那些已获得备案并且具有较大…

光伏开发设计施工一体化系统都有哪些功能?

随着全球对可再生能源的需求不断增加,光伏行业得到了快速发展。同时也面临着一些挑战,例如初始投资成本高、需要大量土地和水资源等。鹧鸪云光伏与储能软件利用技术创新,促进光伏行业数字化升级。 一、智能测算 1.投融资表:采用…

如何处理PHP开发中的单元测试和自动化测试?

如何处理PHP开发中的单元测试和自动化测试,需要具体代码示例 随着软件开发行业的日益发展,单元测试和自动化测试成为了开发者们重视的环节。PHP作为一种广泛应用于Web开发的脚本语言,单元测试和自动化测试同样也在PHP开发中扮演着重要的角色…

java智慧工地系统:让工地管理可视化、数字化、智能化

智慧工地功能包括:劳务管理、施工安全管理、视频监控管理、机械安全管理、危大工程监管、现场物料监管、绿色文明施工、安全隐患排查、施工综合管理、施工质量管理、设备管理、系统管理等模块。 一、项目开发环境 技术架构:微服务 开发语言:…

Ubuntu 设置共享文件夹

一、在Windows中建立一个英文的文件夹 注意:新建文件夹的名称一定要是英文的,不能出现中文的路径(可能出现问题) 二、在VMware中添加共享文件 3: VMware安装VMware Tools 一般安装成功桌面上会显示这个安装包,&…

【从零开始学习JAVA集合 | 第一篇】深入解读HashMap源码(含面试题)

目录 目录 前言: HashMap简介: HashMap的常用常量和变量: HashMap的重要考点: HashMap的存储过程: HashMap的扩容过程: HashMap的初始化: 常见面试题: 总结:…

菜鸟学习日记(python)——迭代器与生成器

迭代器 迭代是 Python 最强大的功能之一,是访问集合元素的一种方式。 迭代器是一个可以记住遍历的位置的对象。 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。 迭代器有两个基本的方法:it…

【大数据】Hudi 核心知识点详解(一)

😊 如果您觉得这篇文章有用 ✔️ 的话,请给博主一个一键三连 🚀🚀🚀 吧 (点赞 🧡、关注 💛、收藏 💚)!!!您的支持 &#x…

win10中CMD找不到adb的解决方法

问题描述: 在cmd命令行输入”adb devices” 时就会出现”adb不是内部命令或者外部命令….”,出现这个问题主要是windows系统环境变量没设置好。 配置环境变量 找到本地 adb.exe 程序所在目录,复制当前目录;找到高级系统设置 &g…

CleanMyMac X2024(Mac优化清理工具)v4.14.5中文版

CleanMyMac X是一款颇受欢迎的专业清理软件,拥有十多项强大的功能,可以进行系统清理、清空废纸篓、清除大旧型文件、程序卸载、除恶意软件、系统维护等等,并且这款清理软件操作简易,非常好上手,特别适用于那些刚入手苹…

Xubuntu16.04系统中使用EDIMAX EW-7822UAC无线网卡开启5G自发AP

目录 1.关于 EDIMAX EW-7822UAC2.驱动安装3.查看无线网卡信息3.通过create_ap配置5G自发AP 1.关于 EDIMAX EW-7822UAC 官网介绍 https://www.edimax.com/edimax/merchandise/merchandise_detail/data/edimax/global/wireless_adapters_ac1200_dual-band/ew-7822uac/ 详细参数…

大数据企业如何使用IP代理进行数据抓取

目录 一、引言 二、IP代理概述 三、为什么大数据企业需要使用IP代理 四、使用IP代理进行数据抓取的步骤 1、获取可用的代理IP 2、配置代理IP 3、设置请求头部信息 4、开始数据抓取 5、错误处理和重试 五、IP代理的注意事项 六、总结 一、引言 随着互联网的快速发展…

C++笔记汇总(随时更新)

你好,这里是争做图书馆扫地僧的小白。 个人主页:争做图书馆扫地僧的小白_-CSDN博客 目标:希望通过学习技术,期待着改变世界。 目录 前言 一、C语言向C语言过度的知识点 二、C语言的相关知识 总结 前言 2023.12.13 之前撰写的笔…