在世界的一隅重写天空: 一种支持局部渲染与平滑过渡的天空盒组件 —— Skybox
Unity 内置天空盒 主要面向全局环境渲染,通常只能作为场景背景或环境光来源使用。在需要为局部区域、特殊空间、传送场景、室内外切换或非标准几何体提供天空盒效果时,内置天空盒的控制方式会受到限制,也不便于实现多套天空盒之间的平滑过渡。
本组件的设计目标是将天空盒从全局渲染设置中解耦出来,使创作者可以像使用普通材质一样,将天空盒纹理应用到任意网格上。这种方式允许创作者在同一场景中创建多个独立的天空盒区域,并对其颜色、曝光、旋转、纹理偏移以及 过渡效果 进行细粒度控制。
演示世界: https://vrchat.com/home/world/wrld_3a888003-76d0-4be7-a476-aba50288e5b3/info
安装
- 下载
Xuan25-VRC-Common-Utilities组件包,并将其导入到你的 Unity 项目中。该组件包包含UdonTelemetry组件以及一系列相关依赖组件。你可以使用 Git 将其clone到项目的 Packages 目录下,或者直接下载压缩包并将其解压到该目录中。
使用方法
简单天空盒
在场景中创建一个球体,并将其缩放到足够大,以包裹 整个场景 或场景中 预期使用该天空盒的区域。
在资源中创建一个材质,并将其着色器设置为 Xuan25/CylindricalSkybox 或 Xuan25/CubemapSkybox,具体选择哪个着色器取决于你使用的天空盒纹理类型(柱面投影或立方体纹理)。
然后将该材质应用到球体上。将天空盒纹理设置到材质的 Cylindrical (HDR) 属性上(对于柱面投影纹理)或 Cubemap (HDR) 属性上(对于立方体纹理纹理)。
此时,球体内侧应呈现天空盒纹理。
![]() |
![]() |
![]() |
|---|---|---|
| 立方体纹理布局 (四种) | 柱面投影纹理布局 | 球面纹理布局 (暂不支持) |
(来源: Unity - Manual: Cubemaps)
静态天空盒
基于上述简单天空盒,可以通过调整 Tint Color、Exposure、Rotation 和 Tiling and Offset 属性来调整天空盒的视觉效果。
Enable LOD 选项允许启用 Mip Map 级别切换功能,以根据玩家 FOV 自动切换天空盒纹理的不同 Mip 级别。这可以在 FOV 较大时缓解纹理高频细节的混叠问题,但会带来一定的额外性能开销。
动态天空盒
通过对上述属性进行动画控制,可以实现动态天空盒效果。
天空盒过渡
除了 Cylindrical (HDR) 或 Cubemap (HDR) 属性之外,材质的 Alt Cylindrical (HDR) 或 Alt Cubemap (HDR) 属性还允许设置第二个天空盒纹理,并提供带有 Alt 前缀的对应属性,用于调整第二个天空盒纹理的视觉效果。
通过使用动画驱动 Blend Factor 属性,可以在两个天空盒纹理之间播放过渡切换动画。过渡模式可以通过 Blend Mode 属性进行设置。下面介绍当前支持的过渡模式。
![]() |
![]() |
|---|---|
| 原始天空盒 | 目标天空盒 |
Lerp 模式
在该模式下,两个天空盒纹理会根据 Blend Factor 属性进行线性插值混合,从而实现过渡效果。
![]() |
|---|
| Lerp 过渡 |
Superposition 模式
在该模式下,目标天空盒的辐照会先逐渐增强并叠加到原始天空盒上,然后原始天空盒的辐照会逐渐降低,直到完全切换到目标天空盒,从而实现过渡效果。
![]() |
|---|
| Superposition 过渡 |
ArgMax 模式
该模式又被称为亮度擦除模式。在该模式下,两个天空盒纹理的强度会根据 Blend Factor 属性进行调整,并始终显示亮度较高的天空盒纹理,从而实现过渡效果。
ArgMax Feather 属性允许设置 ArgMax 模式下的过渡边缘羽化范围,以避免过渡边缘过于锐利。
![]() |
![]() |
|---|---|
| ArgMax 过渡 (Feather = 0.3) | ArgMax 过渡 (Feather = 0.7) |
Map 模式
在该模式下,两个天空盒纹理的切换会根据 BlendMap 属性中设置的遮罩纹理进行控制。遮罩纹理的红色通道会与 Blend Factor 属性进行比较,以判断每个像素应显示哪个天空盒纹理,从而实现过渡效果。
Blend Map Feather 属性允许设置 Map 模式下的过渡边缘羽化范围,以避免过渡边缘过于锐利。
![]() |
|---|
| 示例中使用的遮罩纹理 |
![]() |
![]() |
|---|---|
| Map 过渡 (Feather = 0.01) | Map 过渡 (Feather = 0.1) |













No comments to display
No comments to display