☰
立方体映射:游戏中的环境反射秘密
2026/10/17 5:36:17 网站建设 项目流程

一、它是什么?

想象你站在一个正方体房间的正中间,房间 6 面墙(前、后、左、右、上、下)都贴满了照片,拍的是你四周的景色。

这时候不管你朝哪个方向看,视线都会落到某一面墙上,你看到的就是那面墙上对应位置的图案。

这就是立方体映射:

  • 6 张图拼成一个盒子,叫立方体贴图(Cubemap)
  • 查询时不用"坐标",只用一个方向
  • 问的问题是:“朝这个方向看,能看到什么颜色?”
┌─────┐ │ 上 │ ┌─────┼─────┼─────┬─────┐ │ 左 │ 前 │ 右 │ 后 │ └─────┼─────┼─────┴─────┘ │ 下 │ └─────┘ 把盒子拆开平铺,就是这 6 张图

二、为什么要用它?

因为游戏里有很多东西只和方向有关,和位置关系不大。

比如天空:你往前走 10 米,月亮还是在那个方向,天空看起来没变化。那就没必要真的建一个巨大的天空模型,只要记录"每个方向是什么颜色"就够了。

为什么偏偏用正方体而不用一张圆形或长方形图?

方案问题
一张长方形全景图头顶和脚下的图案会被拉扯变形,计算也慢
立方体 6 张图变形小、计算快,显卡天生就支持

三、游戏里怎么用?(最重要的部分)

1. 天空盒 —— 最常见

游戏里那片看起来无边无际的天空、远山、星空,绝大多数就是一个立方体贴图。

两个小窍门:

  • 天空跟着玩家走:玩家怎么移动都碰不到天边,所以看起来"无限远"
  • 天空最后画:先画房子、角色,天空只填补剩下的空白,省性能

2. 反射 —— 让金属、水面、车漆"照出"周围

一辆车的车漆能映出周围的街道,并不是真的实时算出来的。做法是:

在车附近放一个"相机",朝 6 个方向各拍一张,拼成立方体贴图。
车身每个点,根据视线被反弹后的方向,去这张图里取颜色。

这个"拍照的东西"在 Unity 里叫反射探针(Reflection Probe),在场景里摆一下就能用。

眼睛 ──→ 车身 ──↗ 反弹方向 ↓ 去立方体贴图里查:这个方向是什么?→ 映出一栋楼

粗糙程度怎么表现?

  • 镜面、新车漆:用清晰的贴图 → 倒影清楚
  • 磨砂金属、旧铁皮:用模糊版本的贴图 → 倒影糊成一片

3. 环境光 —— 让物体"染上"周围的颜色

在绿色森林里,角色身上会带点绿色;在沙漠里,会偏暖黄色。

做法类似:把周围环境的立方体贴图模糊到极致,只剩下"大概每个方向偏什么颜色",然后按物体表面的朝向去取色。朝上的面取天空的蓝,朝下的面取地面的绿。

4. 点光源阴影 —— 灯泡照向四面八方

一盏吊灯向所有方向发光,要算阴影,就得知道"每个方向上最近的东西有多远"。

于是从灯的位置朝 6 个方向各拍一张"距离图",拼成立方体贴图。判断某点是否在阴影里时,就查一下:灯往这个方向看,最近的东西是不是比这个点更近?是,就说明被挡住了。

5. 其他小用法

用途说明
室内假窗户窗外放一张房间的立方体贴图,看起来窗户里真有个房间,其实是平面(叫 Interior Mapping,城市建筑常用)
卡通 / 风格化光照用一张手绘的立方体贴图控制不同朝向的颜色
全景截图游戏里的 360° 拍照模式

四、Unity 里怎么上手?

做天空盒(3 步):

  1. 下载一张全景图,导入后把Texture Shape改成Cube
  2. 新建材质,Shader 选Skybox/Cubemap,把图拖进去
  3. Window → Rendering → Lighting,把材质拖到Skybox Material

做反射:

  1. 场景里GameObject → Light → Reflection Probe
  2. 把它放在需要反射的区域中间,调整范围框
  3. 点击 Bake,金属材质就会自动映出周围环境

五、常见问题

现象原因解决
天空图案拼接处错位6 张图方向摆错了用全景图让 Unity 自动转换,别手动拼
反射里的东西位置不对,像"飘着"立方体贴图默认把周围当成无限远反射探针里开启Box Projection,让室内反射贴合墙面
走进另一个房间,反射还是上个房间只放了一个探针每个区域放一个探针
实时反射很卡每帧拍 6 张图太贵改成烘焙,或者设为每帧只更新一个面

一句话总结

立方体映射 = 把"四周的样子"拍成 6 张照片围成盒子,之后只要给一个方向,就能查到那个方向的颜色。

用它做天空、做反射、做环境光、做点光源阴影,是游戏里最常用的基础技术之一。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询