Unity HDRP项目实践 —— HDRP光照系统(一)
准备开始做游戏场景了,发现HDRP用得非常不顺利,干脆照着《高清3D虚拟世界》这本书先操练一番
今天的任务是——用HDRP搭建一个场景
首先是制作一个阳光明媚的中午时分的场景,咱就照着书上干!
先简单看一下我们场景上有哪些物体,可以看到和光照相关的Lights&Probes(灯光和探针)Volumes都被禁用
这就是我们的场景。疑惑?为什么光照都被禁用了,我们场景还有这么强烈的反光效果
这是因为在Edit->Project Settings->HDRP Default Settings中我们关联使用了默认的Volume
接下来进行我们的打光
1、启用Volume
仅通过勾选Visual Environment和HDRI Sky,来制作我们的Volume,他们的作用如下:
- 在Visual Environment组件中选择天空的类型,这里选择HDRI Sky作为天空的类型
- 因为在VisualEnvironment选择了HDRI作为天空的类型,所以需要为当前Volume添加一个HDRI Sky来关联具体的HDRI Cubemap作为天空。我们使用光照强度单位为Lux,通过Desired Lux Value来设置光照强度
HDRP文档给出的自然光照强度参考值
照明度 | 自然光照等级 |
120000 | 非常明亮的阳光 |
110000 | 明亮的阳光 |
20000 | 中午的蓝天 |
1000~2000 | 阴天中午的天空 |
<1 | 月光明亮,无云的天空 |
0.002 | 没有月光,包含天空辉光和星光的夜晚 |
**实现效果
2、启用平行光
简单介绍几个重要的参数
Color Temperature(颜色温度):勾选此选项,HDRP会使用Filter和Temperature两个参数来计算光源颜色。色温越高,越偏向于蓝色,反之越偏向于黄色。色温大于5000,通常称为冷色调,反之称为暖色调
Intensity(光照强度):这里的数值为120000 Lux。参考值参上表
Indirect Multiplier(间接光照):设置为1用于模拟真实世界的光照,设置为0,那么这盏灯就不会在场景中产生间接光照信息
Volumetrics(体积雾):此参数用于模拟光源发射的光线通过体积雾散射的现象。当我们在Volume中启用Fog选项,就可以看到平行光穿过雾发生散射的效果了
Shadows(阴影):勾选Enable选项让当前光源可以投射阴影
**实现效果
3、启用自动曝光控制
Volume中的Exposure用于进行曝光度的控制
通过Limit Min和Limit Max可以将画面的整体曝光控制在一定范围内,防止在画面切换时通过自动曝光计算生成的曝光值过低或过高
**实现效果
4、启用点光源
Window->Rendering->Light Explorer打开光源浏览窗口,可以帮我们快速浏览场景中的灯光
点光源设置如下
白天场景点光源效果非常不明显。因为这里我们采用了明亮的户外阳光作为主光源
在夜晚场景我们的灯光效果就会比较好
5、启用反射探针
当我们点击调整按钮,我们就可以在Scene窗口中查看他们包含的区域
(scene切换为了WireFrame模式)我们可以看到每个反射探针他们包含的区域,这些区域就是用于生成反射贴图Cubemap的区域
这里我们的反射探针Type被设置为了Baked。烘焙之前我们需要确保参与烘焙的物体被标记为Static
unity给我们弓提供了两种烘焙方式
第一种Reflection Probe组件中进行烘焙
另一种是通过windows->Rendering->Lighting Setting窗口进行烘焙
烘焙完成之后就能明显看到我们的反射了
6、启用光照探针
当我们点击调整按钮时 就可以显示场景中的所有光照探针
(Wireframe模式显示场景中的所有光照探针)
光照探针组的作用?用烘焙的方式将场景中的间接光照信息烘焙到这些黄色圆球所代表的的光照探针上。当游戏运行时,动态物品虽然无法进行光照烘焙计算,但是可以采样这些光照探针上的间接光照信息,为自己提供更加逼真的表面光照效果
7、进行光照烘焙
Unity的光照烘焙技术,经过好几次记得技术更新和迭代,自2019.3开始Enlighten正式退出历史舞台,取而代之的是Unity自己研发的光照贴图烘焙技术“渐进式光照贴图”(Progressive Lightmapper)
接下来讲讲具体的烘焙操作
首先,确保所有的静态物体被标记为static
此外只要确保勾选Contribute GI(贡献全局光照)和Reflection Probe Static(反射光照静态)选项即可。
然后打开我们的lighting Setting面板
简单介绍一下这些参数:
(1)Environment(HDRP):在这里可以指定所用的环境光的Volume,并指定相关联的Sky作为环境光的来源。此处使用的Volume必须包含一个Sky相关的Override
(2)Mixed Lighting:想要获取全局光照,必须勾选Baked Global Illumination选项,然后选择一种光照模式:Baked Indirect或Shadowmask
(Shadow和Baked Indirect的区别就是,Shadowmask会再Lightmap(光照贴图)中把阴影烘焙进去,获得更逼真的阴影效果)
(3)Lightmapping Settings
- DIrect Samples、Indirect Samples和Environment Samples用于设置采样值。采样值越大,光照贴图细节越多
- Filtering下可以选择一种Denoiser(降噪算法)。一般Nvidia显卡用Optix,AMD用Redeon Pro,OpenImageDenoise用于所有平台
- Lightmap Resolution:用于控制光照贴图的分辨率
- ...
烘焙完成之后,会在数据展示区显示烘焙所得的光照贴图数量以及大小,也会显示总的烘焙时长和显卡信息等
之后会发现我们的场景明显变暗了,是因为间接光照信息已经被烘焙进了光照贴图中
8、增强间接光照强度
在Volume中启用Indirect Lighting Controller(间接光控制器)
- Indirect Diffuse Intensity(间接光漫反射强度):HDRP会将由烘焙获得的光照贴图和光照探针上的数据乘以这个值
- Indirect Specular Intensity(间接光高光强度):HDRP会将任何类型的反射探针上的数据乘以这个值
9、处理阴影和环境光遮蔽
我们阴影的产生主要来自于平行光的shadow设置
可以看到我们平行光投射的阴影比较“硬”,我们可以通过修改Angular Diameter这个参数来进行处理
在Hierarchy窗口中选择Scene Settings Volume,启用Shadows属性
Max Distance:控制点光源和聚光灯投射阴影的最远距离。控制平行光阴影的最远显示距离
Working Unit(工作单位):Metric表示用米作为单位,Percent表示用百分比作为单位
Cascade Count(阴影级联):用于将阴影投射距离分级。3个Split表示第一级为0-25,第二级为25-75,第三极为75-150,第四级为150-500。Border表示过渡
接着为阴影添加更多细节,我们可以在平行光的Contact Shadow(接触阴影)将质量改为High
注意:我们需要在HDRP配置文件中提前设置Contact Shadows质量等级
Project Settings->Quality->HDRP 中提前对Contact Shadows的不同质量进行设置
在Volume组件中启用Contact Shadows
Contact Shadows只会在当前场景的“主光源”上起作用。通常主光源就是平行光或者是投射范围最大的光源
启用Micro Shadows计算微阴影
微阴影可以为粗糙的墙面添加更多微笑的阴影,提升了真实感
最后添加环境光遮罩
Intensity(强度):用于控制环境光遮罩的显示效果。数值越大,效果越强,其影响区域会变得更黑
Direct Lighting Strength(直接光照强度):用于控制接受直接光照的区域的环境光遮罩强度
10、添加雾效
11、添加后处理Volume组件
后处理和之前light、shadow同属于Volume,但是将后处理相关的Override单独放到一起更易于管理和维护
这里使用了以下6个和后处理相关的Override
(1)Tonemapping(色调映射)
(2)Color Adjustment(颜色调整)
(3)Bloom(泛光)
(4)Chromatic Abberation(色差)
(5)Vignette(晕映)
(6)White Balance(白平衡)
**最终效果
Extra:将明亮的白天场景改为夜晚场景
1、修改Directional Light设置
夜间场景模拟的是明亮月光,需要对色温和强度进行修改
2、修改HDRI Sky
将天空盒换成带月亮的HDRI高动态图
3、修改曝光设置
4、Fog(雾效)设置
5、Contact Shadows(接触阴影)设置
6、调整后处理中的 Color Adjustments(颜色调整)设置
调整颜色饱和度
7、调整后处理中的WhiteBalance(白平衡)设置
注意:有时候会出现点光源不亮的情况
1、可以清除先前的光照贴图后重新烘焙,可能是因为先前烘焙的亮度太高导致的
2、可以重新设置一下profile文件,不知道什么情况
**最终效果呈现
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库