Unity Graphics 学习之:Lighting

本文深入讲解Unity中的光照系统,涵盖实时光与预计算光照的概念,包括实时光照、烘焙光照贴图及预计算实时全局光照。文章还介绍了Unity光照窗口的使用,以及不同类型的灯光如点光源、聚光灯和平行光等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

官方文档:https://docs.unity3d.com/2019.1/Documentation/Manual/LightingInUnity.html

第一章:Lighting Overview

简单来讲,Unity中的灯光可以被认为是实时光(realTime),或者是预先计算好的(precomputed),这两种可以结合来使用.
RealTime Lighting(实时光):


默认情况下,unity是使用的实时光并每一帧更新,当灯光和游戏对象子啊场景中移动时,灯光会立即更新.
不过,实时光在自己使用的时候并不会反射,所以为了创造更真实的场景,我们需要启用Unity中的预加载灯光方案
Baked lightmaps(烘焙光照贴图):

Bake lightmaps


unity使用一种叫做全局光照的技术(或者GI)计算复杂的静态光照效果,并将它们储存在一张叫光照贴图的纹理贴图中,这个计算过程叫做烘焙.
在制作光照贴图的时候,计算光源对场景中静态物体的影响,并将结果叠加在场景几何体的纹理上,来创建光照效果.
在烘焙光照贴图下,这些光照贴图在游戏运行过程中是不会改变的,因为被称为"静态".实时光可以叠加并附加使用在灯光映射场景的顶部,但不能相互地改变灯光映射本身.
Precomputed realtime global illumination:
虽然静态光照贴图无法对场景中光照条件的变换做出反应,但预先计算的实时GI提供了一种交互式更新复杂场景光照的技术

A simple example of time of day using Precomputed Realtime GI.

为了在可玩的帧率上实现这些效果,我们需要将一些冗长的数字处理从一个实时过程转变为一个预先计算的过程。
预计算将计算复杂光行为的负担从游戏过程中发生的事情转移到了时间不再那么重要的情况下。我们将此称为“脱机”进程
Benefits and costs:
虽然可以同时使用烘焙GI照明和预计算实时GI,但要注意渲染的性能成本,我们不仅要在视频内存中存储这两组光映射,还要再=在着色器中支付解码的处理成本
在某些情况下,您可能希望选择一种照明方法而不是另一种,这取决于您的项目的性质和您所期望的硬件的性能。例如,在视频内存和处理能力更有限的移动设备上,很可能采用烘烤GI照明方法会获得更高的性能。在具有专用图形硬件的独立计算机或最近的游戏机上,很有可能使用预先计算的实时GI,甚至同时使用两个系统。
采取哪种方法的决定必须根据特定项目的性质和所需的目标平台进行评估。请记住,当针对一系列不同的硬件时,决定需要哪种方法的往往是性能最差的那个硬件决定的.

第二章:Lighting Window:

灯光窗口路径:Window --> Rendering --> Lighting Settings
灯光窗口有三个选项卡:
Scene:scene中的设置是针对于整个场景的而不是单个游戏对象,这些设置控制灯光效果和优化选项.
Global Maps:显示了所有的由GI光照生成的光照贴图资产文件
Object Maps:显示当前选定的物体的GI光照贴图的纹理预览(包括阴影遮罩)
具体选项详情请查看官方文档.

Types of light:

灯光有六种分别是:
Point lights(点光源)

Spot lights(聚光灯)

Directional lights(平行光)

Area lights(区域光)

Emissive materials(放射性材质)

Ambient light(环境光)

 

<think>嗯,用户遇到了Unity中Progressive Lightmapper编译着色器失败的问题,需要解决方案。首先,我得回忆一下Progressive Lightmapper的基本功能,它是用于烘焙光照贴图的,编译着色器失败可能和GPU或驱动有关。根据用户提供的引用内容,特别是引用[1]提到Progressive Lightmapper会自动选择降噪算法,可能与硬件支持有关。 接下来,可能的解决步骤有哪些呢?首先,检查系统要求和硬件兼容性,比如显卡是否支持所需的计算能力,驱动是否最新。然后,检查Unity版本,确保没有已知的bug,可能需要升级或回退版本。另外,着色器错误可能是项目中的自定义着色器有问题,所以尝试重置或替换材质,或者重新导入资源。还有,清除缓存和生成文件可能解决临时文件导致的问题。如果问题依旧,可能需要调整Lightmapper设置,比如使用CPU模式而非GPU加速,或者降低光线数量等参数。最后,查看日志文件确定具体错误信息,根据日志排查。 用户可能需要一步步尝试这些方法,比如先更新驱动,再检查Unity版本,接着处理材质,最后调整设置。需要注意的是,引用[3]提到Progressive Lightmapper在烘焙时有即时反馈,可能对资源敏感,所以硬件兼容性很重要。此外,确保项目路径没有特殊字符或空格,避免文件访问问题。如果用户尝试了这些步骤仍无法解决,可能需要联系Unity技术支持。</think>### Progressive Lightmapper编译着色器失败的解决方案 #### 1. 检查系统要求和硬件兼容性 - **显卡驱动更新**:确保显卡驱动为最新版本,特别是NVIDIA/AMD/Intel显卡需通过官网更新。旧驱动可能导致与Unity的GPU加速计算不兼容[^1]。 - **硬件支持验证**:Progressive Lightmapper的GPU模式需要显卡支持DirectX 12或Vulkan。在Unity菜单栏中选择 **Help > System Info**,检查 **Graphics API Support** 是否包含`Direct3D12`或`Vulkan`。 #### 2. Unity版本与项目设置 - **Unity版本升级**:若使用2019.4或更早版本,建议升级至2020.3 LTS或更高版本。部分旧版本存在已知的GPU Lightmapper兼容性问题。 - **切换至CPU模式**:在 **Window > Rendering > Lighting > Lightmapper** 中,将 **Lightmapper** 从`Progressive GPU`临时改为`Progressive CPU`,测试是否解决问题[^2]。 #### 3. 修复材质与着色器 - **重置问题材质**:检查场景中是否有自定义着色器或第三方插件材质。尝试将材质切换为Standard Shader,或通过 **Edit > Render Pipeline > Upgrade Project Materials to UniversalRP** 更新材质(URP/HDRP项目适用)。 - **重新导入资源**:选中所有材质和着色器文件,右键点击 **Reimport**,确保文件未损坏。 #### 4. 清除缓存与生成文件 - **删除Library文件夹**:关闭Unity后,删除项目根目录下的`Library`文件夹,重启Unity重新生成数据。 - **清理Lightmap缓存**:在 **Lighting窗口 > Global Maps** 下,点击 **Delete All** 清除旧光照贴图。 #### 5. 调整Lightmapper参数 - **降低光线采样数**:在 **Lighting窗口 > Lightmap Settings** 中,将`Direct Samples`和`Indirect Samples`数值减半,减少GPU负载。 - **关闭复杂光照特性**:临时禁用`Ambient Occlusion`或`Light Probes`功能,测试是否为特定模块导致问题[^3]。 #### 6. 日志分析与精准定位 - 打开 **Console窗口**,筛选`ShaderCompilation`相关错误。 - 在日志中搜索`Failed compiling shader`,定位具体着色器名称,针对性修复或替换。 #### 示例操作流程 ```plaintext 1. 更新显卡驱动 → 2. 切换CPU模式测试 → 3. 删除Library文件夹 → 4. 降低采样参数 → 5. 检查错误日志 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值