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" 纹理导入类型,并结合反射探针优化动态反射效果。

相关推荐
leo__52012 分钟前
单载波中继系统资源分配算法MATLAB仿真程序
算法·matlab·unity
努力长头发的程序猿1 小时前
Unity使用ScriptableObject序列化资源
unity·游戏引擎
mxwin2 小时前
Unity Shader 手写基于 PBR 的 URP Lit Shader 核心光照计算
unity·游戏引擎·shader
小贺儿开发2 小时前
Unity3D 智能云端数字标牌系统
unity·阿里云·人机交互·视频·oss·广告·互动
魔士于安2 小时前
Unity windows 同步 异步 打开文件文件夹工具
游戏·unity·游戏引擎·贴图·模型
笑虾3 小时前
cocos2d-x lua 加载 Cocos Studio 导出的 csb
游戏引擎·lua·cocos2d
魔士于安3 小时前
unity lowpoly 风格 城市 建筑 道路 交通标志
游戏·unity·游戏引擎·贴图·模型
mxwin3 小时前
Unity GPU Shader 性能优化指南
unity·游戏引擎·shader
董董女友15 小时前
unity mcp 配置指南
unity·游戏引擎
垂葛酒肝汤20 小时前
Unity的可视化网格和文字标签
unity·游戏引擎