当前位置: 首页 > news >正文

【Unity】光照解决方案笔记

【Unity】光照解决方案笔记

https://docs.unity.cn/cn/2022.3/Manual/BestPracticeLightingPipelines.html

确定对象显示效果的三阶段

  1. 剔除

    列出了需要渲染的对象,确保这些对象摄像机可见(视锥体剔除)且不被遮挡(遮挡剔除)。

  2. 渲染

    将这些对象绘制到基于像素的缓冲区中(通过正确的光照以及它们的一些属性)。

  3. 后期处理

    在这些缓冲区上执行后期处理操作,生成发送到显示设备的最终输出帧。

光照类型

  • 直接光照

从自发光光源(如灯泡)发出的光照,而不是光从表面反射的结果。

  • 间接光照

由于光从表面反射并通过介质(如大气或半透明物质)传播和散射而形成的结果。

  • 局部光照:

只考虑简单的直接光照构成的视觉效果。

  • 全局光照:

考虑各种复杂的光照因素构造的结果,包括间接光照。

全局光照(GI)

全局光照 (Global Illumination) 是一组特殊照明技术的总称,它考虑了综合且复杂的现实光照模型(如光的反射、折射等),并以此对直接和间接光照进行建模,从而为游戏提供逼真的光照效果

从使用角度来看可以将 GI 简单理解为产生间接光的手段。单纯的兰伯特光照之类的经验光照模型技术并不是 GI。

GI 提供几种方法,如:

  • 烘焙/动态光照贴图(Unity 支持)
  • 烘焙/动态光照探针(Unity 支持)
  • 辐照度体积
  • 光传播体积
  • 基于体素的 GI 和基于距离场的 GI

光照贴图程序(Lightmapper)

这是一个基础系统,它通过发射光线、计算光线反弹并将产生的光线应用到纹理来生成光照贴图和光照探针的数据。

  • 光照贴图:存储模型表面收到的光照信息,如光颜色强度、光入射方向、灯光阴影信息。
  • 光照探针:利用球谐函数存储的某空间位置收到周围环境的低频漫射光信息,类似轻量级IBL。

如何点亮你的项目?

https://docs.unity.cn/cn/2022.3/uploads/Main/BestPracticeLightingPipeline15.svg

  1. 选择渲染管线

    • Built-in RP
    • URP
    • HDRP
    • 自定义 SRP
  2. 决定 GI 模式(产生间接光的 GI 系统)

    • 烘焙 GI
    • 实时 GI
    • 烘焙 & 实时 GI
  3. 选择光照模式(GI 光与实时光的混合方式)

    • Baked Indirect
    • Subtractive
    • Shadowmask
    • Distance Shadowmask
  4. 添加场景光照

    • 添加灯光
    • 添加发光表面
    • 添加反射探针
    • 添加光照探针
    • 添加光照探针代理体(LPPVs)

渲染管线

内置渲染管线(Built-in RP)

2018 年之前,Unity 只有一个内置渲染管线(Built-in RP),其提供两种渲染路径。

  • 向前渲染(多通道:每一盏灯光占用一个 Pass)
  • 延迟渲染

高清渲染管线 (HDRP)

提供了先进的渲染和着色功能,为高端游戏平台设计。

  • 混合延迟/前向瓦片/聚类渲染器

通用渲染管线(URP)

内置管线替代品,保持全平台通用且性能提升。

  • 向前渲染(单通道:一个 Pass 中渲染所有灯光)
  • 向前渲染+:Unity 2022.2 新增
  • 延迟渲染:Unity 2021.2 新增

渲染路径

向前渲染路径

按顺序渲染场景中的所有对象和灯光。

当对象被多个光源照亮时,渲染成本会急剧增加。

这种类型的渲染器通常提供各种各样的着色器,并且可以很轻松地处理透明度。

延迟渲染路径

先将所有不透明几何体渲染到缓冲区中,其中存储着有关材质的信息(颜色,镜面反射,光滑度等)。然后在后一个 Pass(也就是名字中的“延迟”)渲染所有像素的灯光信息。

渲染时间将主要取决于影响每个像素的光源数量。但对于透明对象或更复杂的着色器对象,依然需要回退到向前渲染路径中渲染。

当处理包含许多动态光源的场景时(例如具有人工光照的内部空间,或室外与室内光照相结合的项目),通常建议使用延迟渲染。

Unity 中的 GI 系统

在 Unity 的 5.6 之前,Unity 主要使用 Geomerics 公司的 Enlighten 来提供实时 GI 以及烘焙 GI,但在 5.6 之后 Unity 引入了新的 Progressive Lightmapper,如今 Enlighten 将陆续弃用。

Unity GI 发展计划

  • 实时 GI

    • Enlighten 实时 GI(已弃用,仅支持到 Unity 2024)
  • 烘焙 GI

    利用光照贴图程序将光照数据烘焙到光照探针、反射探针、称为光照贴图的纹理中

    • Enlighten 烘焙 GI(已弃用,仅支持到 Unity 2021)
    • 渐进式光照贴图程序(Progressive Lightmapper)

不要同时使用 Enlighten 实时 GI 和烘焙 GI,这将对性能产生影响,且两者获取到的间接光也存在视觉差异。

如何让物体获取间接光

  • 静态物体

    标记为“Contribute GI”的物体将被识别为静态物体,只有静态物体可以接受烘焙/预计算的 GI 光照。

  • 动态物体

    动态物体只能通过光照探针获得间接光的支持。

由于光照的烘焙是一个相当缓慢的过程,所以只推荐自身具有不同光照变化(如存在凹洞或接受自身阴影)的大型复杂物体才推荐标记“Contribute GI”;对于自身受光均匀的小型凸面网格应该作为动态物体从光照探针中获取间接光。

  • 大型不可烘焙物体(如大型粒子系统或蒙皮网格)

    可以使用 LPPV(Light Probe Proxy Volume)来获取更好的本地化间接光照。

要最大程度减少烘焙时间并同时保持足够的光照质量,最重要的就是限制场景中标记为“Contribute GI”的对象数量。

照明优化教程:
https://learn.unity.com/project/lighting-optimization-with-precomputed-realtime-gi

光照模式

Light 组件和 Lighting Settings Asset 中都有一个光照模式的设置,但两者是不同的概念。

灯光光照模式

  • 烘焙:
    为 GI 提供光照信息,从这些光源产生的直接和间接光照将被光照贴图程序处理。
  • 实时:
    实时计算的光照效果,受性能影响无法产生间接光,且光照没有 GI 的效果真实。
  • 混合:
    提供实时光照的同时也为烘焙光照(GI)提供烘焙信息,并能将两种光照进行混合,混合方式取决于场景光照模式。

场景光照模式

指定场景中实时光照和烘焙光照(GI)的混合方式,配合灯光的混合模式使用。

前置说明

  • 阴影贴图:实时阴影实现方案
  • 阴影距离:显示阴影的最大范围。若非注明,则所有阴影都受此影响

具体方案

  • Subtractive

    最早的混合光照模式。将大部分光照和阴影都烘焙至光照贴图,仅提供主方向光的实时灯光。

    光照效果比较简陋,但在低端硬件上非常有用。

    接收光照 静态物体 动态物体
    直接光照 光照贴图 实时
    间接光照 光照贴图 光照探针
    静态物体阴影 光照贴图 光照探针
    动态物体阴影 阴影贴图(仅主方向光) 阴影贴图(仅主方向光)
    • 主方向光:强度最高的方向光
  • BakedIndirect

    仅将间接光烘焙至光照贴图,直接光和阴影都采用实时计算。

    光照效果逼真,但有一定的性能问题。

    接收光照 静态物体 动态物体
    直接光照 实时 实时
    间接光照 光照贴图 光照探针
    静态物体阴影 阴影贴图 阴影贴图
    动态物体阴影 阴影贴图 阴影贴图
  • Shadowmask

    在 BakedIndirect 基础上增加了对静态物体的阴影进行了额外处理,使其支持实时或烘焙两种方案,且烘焙方案可以超出阴影距离限制。

    光照效果更逼真,且可通过采用烘焙阴影优化一定的性能。

    Shadowmask具有多重含义:

    • 表示一种光照混合模式。
    • 表示一种静态阴影功能。
    • 表示一种额外的光照贴图,用于确定物体表面是否处于某些灯光的阴影中,最多支持4盏灯。

    三者的关系在于,Shadowmask(光照模式)就是在BakedIndirect模式基础上增加了可选的Shadowmask(阴影功能),该功能会通过存储额外的Shadowmask(光照贴图)来实现烘焙阴影。当Shadowmask(阴影功能)没有开启时,Shadowmask(光照模式)就会退化为BakedIndirect,下表中的分歧点就是出自这个原因。

    接收光照 静态物体 动态物体
    直接光照 实时 实时
    间接光照 光照贴图 光照探针
    静态物体阴影 阴影贴图 | 阴影遮罩 阴影贴图 | 光照探针
    动态物体阴影 阴影贴图 阴影贴图

    Shadowmask模式在质量面板提供了两种方式,用于决定如何开启静态阴影:

    • DistanceShadowmask:阴影距离内采用阴影贴图实现,超出则采用烘焙实现。
    • Shadowmask:全距离的都采用烘焙实现。

    当采用烘焙实现时,静态物体将不再参与阴影贴图的计算,故不会投射阴影,此时为了接受到的其他静态物体阴影,便会从预先计算的shadowmask中获取。

后处理间接光

GI 烘焙间接光的时间很长不利于快速原型开发,此时可以利用“屏幕空间环境光遮蔽”功能来模拟间接光效果。

http://www.gsyq.cn/news/143385.html

相关文章:

  • Java毕设项目推荐-基于springboot的二手物品交易系统的设计与实现基于SpringBoot的闲置物品循环交易保障系统的设计与实现【附源码+文档,调试定制服务】
  • 别再被忽悠了!看完这篇文章,学会正确应对儿童近视的方法
  • 重要内容表述
  • C#易错点解析
  • 创新!高级!【日前、日内非滚动、日内滚动调度以及实时修正】考虑需求侧响应的智慧楼宇多时间尺度调度策略附Matlab代码
  • 【Linux】Linux使用笔记
  • 大模型打分机制揭秘:为何需要多次更换位置进行评分?
  • 中望3D2026曲面建模技巧:利用「缠绕到面」功能将平面特征精准移植到曲面
  • SRC 漏洞挖掘全流程攻略:小白→挖洞达人,学习路线 + 配套工具全曝光
  • 基于微信小程序的零工市场服务系统计算机毕业设计项目源码文档
  • vscode使用vs环境运行程序
  • java基础-HashMap
  • 【Unity】各种操作触发GC情况
  • 2026金三银四必备国内大厂Java面试高频题库整理!
  • Mercado Libre(美客多)拉美市场研究指南:十款实用工具助力跨境运营分析
  • 茶颜悦色X北森|如何用AI面试官帮HR工作量直降90%!
  • 【负荷预测】基于变分模态分解(VMD-CNN-LSTM)的短期电力负荷预测Python代码
  • 【技术美术】TRS矩阵
  • 最大数max(x,y,z)(信息学奥赛一本通- P1152)
  • 基于Spring框架社区老年人健康杂志阅读分享管理系统
  • 2025年珠海可靠的门窗源头厂家有哪些,门窗/慕莎尼奥门窗/断桥铝门窗/侧压平移推拉窗/铝门窗/安全门窗实力厂家推荐排行榜 - 品牌推荐师
  • 【软件开发】Windows 开发笔记
  • DDD领域驱动设计原理
  • 量子优越性为什么采用玻色采样问题,而不采用N皇后问题呢?
  • 【技术美术】视差贴图
  • 详细介绍:Sciter之c++与前端交互(五)
  • 【技术美术】双向反射分布函数
  • 软件缺少找不到MSJT4JLT.DLL文件 下载修复方法
  • 打造个人数字大脑:访答知识库深度指南
  • 收藏!程序员避坑指南:裁员潮下,入局大模型才是高薪破局关键