本篇来了解一下unity中的光照
光照分为漫反射光和全反射光
场景光源主要分为两类:手动添加的实际光源平行光或点光源还有环境光照,后者包括物体间的的间接光反射和天空盒光照

我们选择光照渲染 lit shader graph
Unity 的 Lit Shader(光照着色器)是 URP(Universal Render Pipeline,通用渲染管线)和 HDRP(High Definition Render Pipeline,高清渲染管线)中的核心光照材质系统。它定义了物体表面如何与光源交互,决定了渲染的真实感程度

Unity的Lit着色器采用PBR(Physically Based Rendering,基于物理的渲染)技术,简称为PBR(基于物理渲染),其核心是向Unity描述物体的物理特性
unity会自动计算物体表面的漫反射和镜面反射强度,base color输出代表物体的反照率颜色(即表面基础反射色),其运行机制与无光照unlit 着色器中的表现完全一致

然后我们了解一下这个黑白贴图的类型
| 名称 | 存储内容 | 用途 |
|---|---|---|
| Metallic Map(金属度贴图) | 黑=非金属,白=金属 | 控制 Metallic 参数 |
| Smoothness Map(光滑度贴图) | 黑=粗糙,白=光滑 | 控制 Smoothness 参数 |
| Roughness Map(粗糙度贴图) | 黑=光滑,白=粗糙 | Unreal 等引擎使用,Unity 需反转 |
| Ambient Occlusion Map(AO 贴图 / 环境光遮蔽贴图) | 黑=遮蔽,白=无遮蔽 | 控制 Ambient Occlusion |
| Opacity Map(不透明度贴图) | 黑=透明,白=不透明 | 控制 Alpha 裁剪或透明度 |
| Height Map(高度贴图) | 黑=低,白=高 | 用于 Parallax(视差)或 Displacement(置换) |
| Mask Map(遮罩贴图) | 通道分别存不同数据 | HDRP 常用,RGBA 各存 Metallic、AO、Detail Mask、Smoothness |
高度贴图
然后添加纹理节点并添加纹理

不过这个只是在视觉效果上改变,不会改变实际的模型

然后再添加一个HeightMap Texture的纹理节点,然后再和Parallax mapping(视差贴图)节点相连,这个节点会结合高度图和特定算法参数来动态调整基底贴图的UV坐标,然后通过高度图和特定算法参数动态调整UV坐标

左侧输入参数
| 参数 | 类型 | 含义 |
|---|---|---|
| Heightmap | Texture2D | 高度图贴图,灰度图,白=高,黑=低 |
| Heightmap Sampler | Sampler State | 高度图的采样器状态,控制过滤/寻址模式 |
| Amplitude | Float | 深度强度,值越大凹凸越明显,通常 0~0.1 |
| UV | Vector2 | 原始 UV 坐标,输入基础纹理坐标 |
| Heightmap Sample Channel | Vector4 / 下拉选项 | 指定从高度图的哪个通道读取高度值 |
右侧输出
| 参数 | 类型 | 含义 |
|---|---|---|
| Parallax UVs | Vector2 | 偏移后的 UV 坐标,用于后续所有贴图采样 |
关键参数详解:
Heightmap Sample Channel
高度图可能是单通道灰度(R=G=B),也可能是把高度存在某个特定通道的 RGBA 贴图里。这个参数告诉节点读哪个通道:
| 通道选择 | 对应值 |
|---|---|
| R | (1, 0, 0, 0) |
| G | (0, 1, 0, 0) |
| B | (0, 0, 1, 0) |
| A | (0, 0, 0, 1) |
法线贴图

法线贴图的效果看起来和位移贴图差不多,不过存在很多区别:
① 位移贴图通过模拟在Z轴上的位移来制造深度假象
② 法线贴图是改变每个像素的表面法线方向,相当于告诉渲染引擎这个像素的实际朝向与模型几何表面不一致
法线贴图和位移贴图配合使用可以产生逼真的渲染效果

然后我们添加一个叫做normal texture的2d纹理并选择normalmap模式
此时我们可以看到这个变成了一种淡淡的紫色

然后我们把之间用位移贴图处理过的UV贴图坐标和这个sample texture2d的UV相连,并将type类型设置为normal 法线贴图,并将输出结果连到法线图的主输出端口Normal (Tangent Space)

我们可以了解一下这个workflow mode工作流模式
| Metallic(金属度) | Specular(高光) | |
|---|---|---|
| 核心思路 | “这材质含多少金属?” | “这材质反射什么颜色?” |
| 输入参数 | Base Color + Metallic + Smoothness | Diffuse + Specular + Smoothness |
| Base Color 含义 | 非金属的固有色 / 金属的反射色调 | 仅漫反射颜色 |
| 金属反射色 | 由 Base Color × Metallic 自动推导 | 由 Specular 贴图直接指定 |
| 物理正确性 | 强制遵守:金属无漫反射,非金属反射弱 | 容易设置错误(如非金属给强反射) |
| 贴图数量 | 少(Metallic 存 R 或 Alpha) | 多(Specular 需 RGB 颜色) |
| 直观程度 | 更符合直觉 | 美术师传统习惯 |
| 主流程度 | 现代 PBR 标准,强烈推荐 | 兼容旧项目/传统管线 |

高光模式允许直接调节反射高光的色彩属性
我们添加一个浮点类型的metallic并设置为滑块模式(这个是在inspector窗口调节的)
粗糙度贴图


粗糙度贴图中黑色表示表面极度光滑,白色表示材质表面极度粗糙,不过unity中白色表示完美平滑
为了消除这个差异我们需要反转
我们需要添加一个Roughness texture节点,并选择红色通道输出,因为这是单通道灰度贴图,可以随便选择一个通道,不限于红色通道 R
然后连接反转节点 one minus进行黑白颜色反转,然后将处理后的值连接到smoothness平滑度通道

One Minus 节点就是数学上的 1 - x,对每个通道单独做减法。
功能
plain
1 | 输出 = 1 - 输入 |
例如
| 输入 | 输出 |
|---|---|
| 0 | 1 |
| 0.25 | 0.75 |
| 0.5 | 0.5 |
| 0.75 | 0.25 |
| 1 | 0 |
本质上就是反转数值——黑的变白,白的变黑,中间灰互相颠倒
虽然我们得到的材质跟十几年的老游戏画质一样,不过问题不大

自发光贴图
现在我们需要添加自发光颜色属性
先添加一个颜色节点,然后将模式设置为HDR
然后就可以使用超高强度的颜色值


可以看到小球发光了,但是由于这个是我们在创建URP项目的时候自动添加的功能—–global volume
如果没有的话可以点击这里添加

就是这个东西

相比你也看到了inspector里面有很多属性,比如Bloom,Vignette什么的
每个volume都是单个profile文件配置的,例如我们现在使用的就是这个默认的SamepleSceneProfile

当然我们还可以选择自己创建一个

可以在这里找到

创建完了之后并使用发现没有任何属性,小球也不发光了

我们可以通过add override添加子属性

我们可以调节强度大小intensity,默认为0 不发光,数值越高发光越亮


环境光遮蔽贴图

比如某些模型上面会出现孔洞什么的,在现实中,对于那些小坑会显示出黑影,月球就是一个最好的例子,比如月亮上的黑斑就是陨石砸的坑
在unity中就是使用环境光遮蔽贴图可以标识物体表面各部位受环境光遮蔽的效果的程度即被环境光遮挡的情况
我们需要和之前一样的操作,用材质连接环境光遮蔽通道

去掉自发光节点恢复成普通不发光的材质,现在来看是不是很真实呢(说实话,这个让我想起了玩早期GTA的时候的那个粗糙的建模了 狗头狗头)



评论区