3、HDRI环境光:HDRI原理、加载与调整、旋转与强度控制、自定义HDRI制作思路
说到硬表面渲染的氛围营造,HDRI环境光绝对是个绕不开的话题。我个人觉得,很多新手做出来的模型明明很精致,但渲染出来就是「假」,十有八九是环境光没处理好。今天我们就来彻底搞懂HDRI——从原理到实战,再到自己动手做一套专属HDRI。
3.1 HDRI到底是什么?
HDRI的全称是High Dynamic Range Image,高动态范围图像。说白了,它和我们平时看到的JPG照片最大的区别在于——它记录了真实世界的光照信息,而不仅仅是颜色信息。
你想想看,普通照片里最亮的地方是纯白(255),最暗的是纯黑(0)。但真实世界中,太阳的亮度可能是室内灯光的几万倍。普通照片根本存不下这么大的亮度范围。HDRI就能做到,它用浮点数来存储亮度值,理论上可以无限亮。
为什么硬表面渲染离不开HDRI?
我在做机械类产品渲染时遇到过一个问题:用普通灯光打出来的金属表面,反射总是「死」的,没有那种真实世界里的环境反射细节。后来换成HDRI,金属表面的高光反射立刻就有了丰富的环境信息——天空、地面、远处的建筑轮廓,全都映射在模型表面。这就是HDRI的核心价值:它同时提供了环境背景和光照信息。
核心要点:HDRI = 环境背景 + 光照来源 + 反射贴图,三者合一。
3.2 在Blender中加载与调整HDRI
Blender加载HDRI的方式很直观,但我见过不少新手在这里翻车。下面我把标准流程和避坑点一起说清楚。
3.2.1 加载HDRI的两种方式
方式一:世界属性面板(推荐)
1. 切换到「Shading」工作区
2. 在右侧属性面板找到「World Properties」(地球图标)
3. 点击「Color」旁边的圆点,选择「Environment Texture」
4. 点击「Open」加载你的.hdr或.exr文件
方式二:节点编辑器
1. 将视图切换为「Shader Editor」
2. 左上角将「Object」切换为「World」
3. Shift+A添加「Texture」→「Environment Texture」节点
4. 连接到「World Output」的「Surface」输入
我个人习惯用节点编辑器,因为可以更灵活地做后期调整。比如加个颜色校正节点,或者混合两张HDRI。
我曾经踩过的坑:加载HDRI后渲染一片漆黑?检查一下你的「World Output」节点是否连接正确。另外,有些免费HDRI的曝光值偏低,需要手动提高强度。
3.2.2 旋转与强度控制
加载完HDRI后,你会发现场景中的光照方向可能不太对。比如我想让主光源从左上角打下来,但HDRI的主光源却在正上方。这时候就需要旋转。
旋转操作:
- 在世界属性面板中,找到「Rotation」参数
- 调整Z轴旋转值(0-360°)
- 也可以在节点编辑器中加一个「Mapping」节点来控制
强度控制:
- 世界属性面板的「Strength」参数,默认1.0
- 我建议从0.5开始试,慢慢往上加
- 金属材质建议强度在0.8-1.5之间,塑料材质0.3-0.8就够
这里有个小技巧:旋转HDRI时,打开「Viewport Shading」的「Rendered」模式,实时观察模型表面的高光变化。我一般会找一个球体作为参考,看高光点的位置是否合理。
我的个人习惯:在场景中放一个「金属球」和一个「粗糙球」,用来快速评估HDRI的光照效果。金属球看反射细节,粗糙球看漫反射分布。
3.3 自定义HDRI制作思路
市面上的HDRI资源很多,但有时候就是找不到合适的。比如我想做一个「黄昏工业风」的环境光,网上找的要么太亮,要么色调不对。这时候就得自己动手了。
方法一:用相机拍摄(最真实)
你需要一台支持包围曝光的相机,以及一个三脚架。拍摄流程如下:
- 架好三脚架,相机水平放置
- 设置包围曝光:-2EV、0EV、+2EV(至少3张)
- 每旋转30°拍摄一组,共12组(360°全覆盖)
- 用PTGui或HDRshop等软件合成
说实话,这个方法门槛有点高。我试过一次,光后期拼接就花了一整天。除非你对环境光有极致要求,否则不太建议新手尝试。
方法二:Blender内渲染生成(推荐)
这个方法我经常用,效果可控且效率高。核心思路是:在Blender里搭建一个虚拟场景,然后用全景相机渲染出HDRI。
步骤:
1. 新建一个场景,添加你想要的元素(天空球、灯光、建筑轮廓等)
2. 在场景中心放置一个「空物体」作为相机位置
3. 添加相机,将类型改为「Panoramic」
4. 在相机属性中,将「Panoramic Type」设为「Equirectangular」
5. 设置渲染输出为EXR格式(32位浮点)
6. 渲染输出,得到的就是一张HDRI
我做过一个「赛博朋克城市夜景」的HDRI,就是在Blender里用几个发光立方体和霓虹灯管搭建的。渲染出来用在硬表面模型上,效果出奇的好。
方法三:软件合成(最灵活)
如果你会一点编程,可以用Python+OpenCV来合成HDRI。这里给个简单的思路:
1. 准备多张不同曝光的JPG(同一场景)
2. 用OpenCV的createMergeDebevec()函数合成
3. 保存为EXR格式
4. 在Blender中加载使用
这个方法的好处是可以批量处理,我做过一个自动化脚本,一次能生成20张不同色调的HDRI。
自定义HDRI的核心原则:
- 光源位置要明确(主光、辅光、背光)
- 亮度范围要足够大(至少10档动态范围)
- 颜色信息要丰富(不要只有黑白灰)
- 反射细节要清晰(金属材质全靠它)
3.4 HDRI的进阶调整技巧
加载HDRI只是第一步,真正的高手在于「调」。下面分享几个我常用的技巧。
技巧一:混合两张HDRI
有时候一张HDRI的光照方向对了,但颜色不对;另一张颜色好,但光照方向偏了。怎么办?混合它们。
节点连接方式:
1. 加载两张HDRI(Environment Texture节点)
2. 用「Mix Shader」节点混合
3. 用「Color Ramp」控制混合权重
4. 输出到World Output
我经常用这个方法做「清晨+黄昏」的混合效果,模型表面会有一种时间过渡的微妙感。
技巧二:用HDRI做局部补光
HDRI是全局光照,但有时候某个局部需要额外补光。我的做法是:在HDRI节点后面加一个「Bright/Contrast」节点,单独提亮某个区域。配合「Mapping」节点的旋转,可以精确控制补光位置。
技巧三:降低HDRI的饱和度
很多免费HDRI的饱和度偏高,用在硬表面模型上会让颜色「脏」。我一般会在节点链中加一个「Hue Saturation Value」节点,把饱和度降到0.6-0.8之间。这样金属的反射会更干净。
注意:不要过度依赖HDRI。我见过有人把HDRI强度拉到5.0,结果模型曝光过度,细节全没了。记住,HDRI是环境光,不是主光源。主光源还是要靠面光或区域光来打。
3.5 本章知识体系
下面这张图是我自己整理的HDRI知识结构,方便你快速回顾:
这张图把HDRI的三大模块串起来了。我个人建议你从「加载与调整」入手,先熟悉基础操作,再慢慢尝试自定义制作。别一上来就想搞复杂的合成,容易劝退。
最后说一句:HDRI这东西,用好了是神器,用不好就是灾难。我见过太多人把HDRI当成「一键出图」的魔法按钮,结果渲染出来的东西千篇一律。记住,HDRI只是工具,真正决定画面质量的,是你对光照的理解和审美。
公众号:蓝海资料掘金营,微信deep3321