3D 游戏开发基础:模型、材质与光照
什么是 3D 游戏开发基础
3D 游戏开发的核心挑战之一是让虚拟世界看起来可信且具有沉浸感。无论使用 Unity、Unreal 还是 Godot,掌握模型、材质与光照这三大基础模块,是构建任何 3D 场景的起点。本教程将带你从零理解它们的工作原理与协作方式,无需任何美术背景。
3D 模型:世界的骨架
模型是什么
3D 模型是物体形状的数学表示,由 顶点、边和面 构成。顶点是空间中的点,边连接顶点,而面(通常是三角形)则连接边形成表面。无数个三角面组合在一起,就能表现从光滑曲面到复杂角色的任何外形。
常见模型格式
游戏引擎通常支持多种文件格式,不同格式保存的信息有所区别:
- FBX — 业界标准,支持几何体、骨骼动画、材质信息,是 Unity 和 Unreal 的首选交换格式。
- OBJ — 轻量、纯几何体格式,不包含动画,适合静态道具或环境资产。
- GLTF / GLB — 面向实时渲染的现代格式,可存储 PBR 材质、动画,Web 和移动端友好。
- USD (Universal Scene Description) — 高端制作管线格式,逐渐被引擎原生支持。
模型从哪来
- 建模软件 :Blender(免费)、Maya、3ds Max、Cinema 4D。Blender 是初学者首选。
- 资产商店 :引擎内置商店(如 Unity Asset Store、Unreal Marketplace)或 Sketchfab、CGTrader 等。
- 程序化生成:使用 Houdini 或引擎内工具(如地形系统)动态创建模型。
模型的消耗:三角面数与 LOD
性能直接与三角面数挂钩。移动平台建议角色在 5k-15k 三角面,PC/主机可更高。现代引擎通过 LOD(层次细节) 系统,在物体远离相机时自动切换为低面数版本,平衡画质与帧率。
材质与纹理:给模型穿上皮肤
材质 vs 纹理:别再混淆
- 纹理 是一张二维图片,包含颜色、粗糙度等数据。
- 材质 是一个容器或着色器程序,它引用纹理,并定义光线如何与表面交互。
例如,一块石头的材质会引用“颜色纹理”、“法线纹理”和“粗糙度纹理”,并结合着色器计算出最终外观。
PBR 材质基础
现代 3D 游戏普遍使用 基于物理的渲染(PBR),它模拟真实世界的光线行为。一个标准 PBR 材质通常由以下贴图组成:
| 贴图类型 | 作用 |
|---|---|
| Albedo / Base Color | 物体在均匀白光下的基础颜色,不含光影信息。 |
| Normal Map | 用 RGB 像素存储表面法线方向,在不增加几何体的情况下模拟凹凸细节。 |
| Roughness (粗糙度) | 控制表面光滑程度。0 为完美镜面,1 为完全漫反射。 |
| Metallic (金属度) | 区分金属(1)和非金属(0)。金属的反射会带有自身颜色。 |
| Ambient Occlusion (AO) | 预计算的环境光遮蔽,增强角落和缝隙的深度感。 |
材质实例与优化
不要为每个物体创建全新材质。利用主材质/材质实例机制:创建一个主材质模板,将颜色、粗糙度等暴露为参数,然后快速生成多个实例并微调参数。这既节省内存,又保持灵活性。
光照:赋予场景生命
光照基础:直接光与间接光
- 直接光 从光源直接照射到物体表面,产生强烈的高光和清晰的阴影。
- 间接光 是光线从周围表面反弹后形成的柔和照明,消除死黑区域。
引擎的光照系统会计算直接和间接光照(通过动态或烘焙),共同构成最终画面。
光源类型
每种光源都有特定用途:
- 点光源 :像灯泡一样向所有方向发光,有衰减范围。用于火把、灯具。
- 聚光源 :锥形光束,类似手电筒或舞台灯。可以调节角度和衰减。
- 方向光 :模拟无限远的平行光线,如太阳。位置无关,仅旋转起作用。
- 面光源 / 区域光 :从矩形或圆形表面发光,提供最柔和的真实阴影,但通常仅用于烘焙。
移动性设置:静态、固定、动态
在 Unreal 和 Unity 中,每个光源都有移动性选项,直接影响质量与性能:
- 静态:光照和阴影完全预先计算(烘焙),运行时成本极低,但无法移动或改变颜色。
- 固定:间接光照与阴影烘焙,但基础直接光可以实时影响物体亮度(Unreal 中的 Semi-dynamic)。
- 动态:所有光照和阴影实时计算,最灵活但性能消耗最高。适合必须移动或变化的光源。
阴影技术
生成高质量阴影通常由 阴影贴图 实现。引擎从光源视角渲染一张深度图,然后比较场景中每个像素的深度来决定是否处于阴影中。调整阴影分辨率、级联距离(对于方向光)和柔和度至关重要。
全局光照与烘焙
全局光照(GI) 模拟光线在场景中的多次反弹,是真实感的关键。实时 GI 较昂贵,静态场景通常选择 光照烘焙:将 GI 结果预先计算并存储到光照贴图中,在运行时直接采样。这也是移动平台保持流畅的主要手段。
三者如何协同工作
一个完整的渲染流程大致如下:
- 模型 提供顶点位置和法线。
- 顶点着色器将顶点从本地空间转换到屏幕空间。
- 材质 中的纹理被采样,结合着色器计算每个像素的初始颜色、法线和物理属性。
- 光照 系统根据场景中的所有光源及 GI 计算最终的颜色和亮度,完成像素的着色。
理解这种协作关系,就能在调试效果时快速定位问题是出在模型、材质还是光照设置上。
快速上手指南:在引擎中检验所学
- 导入一个简单模型(如立方体、茶壶或免费角色)。
- 创建一个 PBR 材质,为其赋予 Albedo、Normal 和 Roughness 贴图,应用到模型。
- 在场景中添加一个方向光(太阳)和一个点光源(局部照明),调整强度和颜色。
- 切换光源的移动性,观察性能与画质的变化。
- 尝试通过光照烘焙,并对比动态光照下的视觉效果。
通过以上实践,你将深刻理解“模型是骨骼,材质是皮肤,光照是灵魂”的 3D 开发哲学。