Unity 中的立方体贴图(Cubemaps)

目录

前言

一、立方体贴图的基本概念

二、从纹理创建立方体贴图

支持的纹理布局

[光泽反射(Glossy Reflection)选项](#光泽反射(Glossy Reflection)选项)

[三、 legacy 立方体贴图资源(Legacy Cubemap Assets)](#三、 legacy 立方体贴图资源(Legacy Cubemap Assets))

四、其他创建方法:从场景生成立方体贴图

总结


前言

立方体贴图(Cubemap)是 Unity 中一种特殊的纹理类型,由 6 个正方形纹理组成,用于模拟环境反射效果。这 6 个纹理分别对应一个虚拟立方体的 6 个面,覆盖了上下、左右、前后六个方向的视野,能够精准捕捉物体周围的环境信息。立方体贴图广泛应用于天空盒、环境反射等场景,为 3D 场景增添真实的光影交互效果。

本文将详细介绍立方体贴图的创建方法、特性及使用场景。

一、立方体贴图的基本概念

立方体贴图是由 6 个正方形纹理组成的集合,这 6 个纹理分别代表虚拟立方体的 6 个面,对应世界坐标系的 6 个方向(上、下、左、右、前、后)。当物体需要表现反射效果时,立方体贴图可以模拟出物体 "反射周围环境" 的视觉效果,让场景更具真实感。

常见应用场景包括:

  • 天空盒(Skybox):作为场景的背景,模拟无限远处的天空和环境;
  • 环境反射:让金属、水面等反光表面反射周围环境,提升材质真实度;
  • 反射探针(Reflection Probes):结合探针烘焙场景反射信息,优化动态物体的反射效果。

二、从纹理创建立方体贴图

从纹理导入是创建立方体贴图最快捷的方式。Unity 支持多种预设的立方体贴图布局,步骤如下:

  1. 将纹理文件导入 Unity 项目,在 Project 窗口中选中该纹理;
  2. 在 Inspector 窗口的导入设置中,将 Texture Type 设为 "Default""Normal Map" 或 "Single Channel";
  3. Texture Shape 设为 "Cube",Unity 会自动将纹理解析为立方体贴图;
  4. Unity 会根据纹理的宽高比自动检测布局,无需手动调整。

支持的纹理布局

Unity 支持多种常见的立方体贴图纹理布局:

  • 十字布局:包括垂直十字和水平十字(6 个面以十字形排列);
  • 行列布局:6 个面以一行或一列的形式排列;
  • 经纬线布局(LatLong):也称为圆柱形布局,常见于全景图;
  • 球面映射(SphereMap):球形环境映射纹理。

导入后,纹理会自动转换为可用的立方体贴图,可直接用于天空盒或反射效果。

光泽反射(Glossy Reflection)选项

若立方体贴图用于反射探针(Reflection Probes),建议勾选 Glossy Reflection 选项。该选项会对立方体贴图的 mipmap 级别进行特殊处理(高光卷积),使其能模拟不同光滑度表面的反射效果(例如粗糙表面的模糊反射和光滑表面的清晰反射)。

三、 legacy 立方体贴图资源(Legacy Cubemap Assets)

Unity 也支持通过 6 张独立纹理创建立方体贴图(传统方式),步骤如下:

  1. 选择菜单 Assets > Create > Legacy > Cubemap,创建一个新的立方体贴图资源;
  2. 在 Inspector 窗口中,将 6 张纹理分别拖入 "Right""Left""Top""Bottom""Front""Back" 对应的插槽中;
  3. 配置参数:
    • Face Size:每个面的像素宽高(纹理会自动缩放以适应此尺寸);
    • Mipmap:是否生成 mipmap;
    • Linear:是否使用线性颜色空间;
    • Readable:是否允许脚本访问像素数据。

注意:推荐使用前文提到的 "Cube" 纹理导入类型创建立方体贴图,这种方式支持纹理压缩、边缘修复、光泽反射卷积及 HDR 立方体贴图,性能和效果更优。

四、其他创建方法:从场景生成立方体贴图

通过脚本从 Unity 场景中生成立方体贴图是一种灵活的方式。使用 Camera.RenderToCubemap 函数,可以从场景中任意位置捕捉 6 个方向的图像并生成立方体贴图。

例如,通过添加菜单命令快速生成:

csharp

复制代码
using UnityEngine;
using UnityEditor;

public class RenderCubemapWizard : ScriptableWizard
{
    public Camera renderCamera;
    public Cubemap cubemap;

    void OnWizardCreate()
    {
        if (renderCamera == null)
            renderCamera = Camera.main;
        
        if (cubemap == null)
        {
            Debug.LogError("请指定一个立方体贴图资源");
            return;
        }
        
        renderCamera.RenderToCubemap(cubemap);
    }

    [MenuItem("GameObject/Render to Cubemap")]
    static void RenderCubemap()
    {
        ScriptableWizard.DisplayWizard<RenderCubemapWizard>("渲染到立方体贴图", "渲染");
    }
}

该脚本会在菜单栏添加 "GameObject/Render to Cubemap" 选项,通过相机拍摄场景并生成立方体贴图。

总结

立方体贴图是 Unity 中实现环境反射和天空盒的核心工具,通过本文介绍的方法,你可以根据需求选择合适的方式创建立方体贴图:从预设纹理导入、通过 6 张独立纹理组合,或从场景实时生成。合理使用立方体贴图能显著提升场景的视觉真实感,尤其在模拟金属、玻璃、水面等反光材质时效果显著。在实际开发中,建议优先使用 "Cube" 纹理导入类型,并结合反射探针优化动态反射效果。

相关推荐
牛掰是怎么形成的12 小时前
Unity材质贴图引用陷阱:包体暴涨真相
unity·材质·贴图
呆呆敲代码的小Y12 小时前
【Unity工具篇】| 超实用工具LuBan,快速上手使用
游戏·unity·游戏引擎·unity插件·luban·免费游戏·游戏配置表
EQ-雪梨蛋花汤12 小时前
【Unity优化】Unity多场景加载优化与资源释放完整指南:解决Additive加载卡顿、预热、卸载与内存释放问题
unity·游戏引擎
我的offer在哪里13 小时前
用 Unity 从 0 做一个「可以玩的」游戏,需要哪些步骤和流程
游戏·unity·游戏引擎
泡泡茶壶ᐇ13 小时前
Unity游戏开发入门指南:从零开始理解游戏引擎核心概念
unity·游戏引擎
YigAin15 小时前
Unity中的Lock,到底在锁什么,什么时候该用?
unity
Var_al15 小时前
抖小Unity WebGL分包命令行工具实践指南
unity·游戏引擎·webgl
天人合一peng17 小时前
unity 通过代码修改button及其名字字体的属性
unity·游戏引擎
GLDbalala21 小时前
Unity基于自定义管线实现经典经验光照模型
unity·游戏引擎