创建用于环境映射的立方体纹理有三种:
(1)直接由一些特殊布局的纹理创建。
例如类似立方体展开图的交叉布局﹑全景布局等。我们只需把该纹理的 Texture Type 设置为 Cubemap 即可。
可以对纹理数据进行压缩,支持边缘修正﹑光滑反射和 HDR 等。
(2)手动创建一个 Cubemap 资源,再把 6 张图赋给它。
(3)由脚本生成。
最理想,我们希望根据物体在场景中位置的不同,生成它们各自不同的立方体纹理。
代码
using UnityEditor;
using UnityEngine;
public class RenderCubemapWizard : ScriptableWizard
{
public Transform renderFromPosition;
public Cubemap cubemap;
void OnWizardUpdate()
{
helpString = "Select transform to render from and cubemap to render into";
isValid = (renderFromPosition != null) && (cubemap != null);
}
void OnWizardCreate()
{
// create temporary camera for rendering
GameObject go = new GameObject("CubemapCamera");
go.AddComponent<Camera>();
// place it on the object
go.transform.position = renderFromPosition.position;
// render into cubemap
go.GetComponent<Camera>().RenderToCubemap(cubemap);
// destroy temporary camera
DestroyImmediate(go);
}
[MenuItem("GameObject/Render into Cubemap")]
static void RenderCubemap()
{
ScriptableWizard.DisplayWizard<RenderCubemapWizard>(
"Render cubemap", "Render!");
}
}
在 renderFromPosition 位置创建相机,调用函数把从当前位置观察到的图像渲染到用户指定的立方体纹理中。
创建立方体纹理,勾选Readable。Face size 值越大,渲染出来的立方体纹理分辨率越大,效果可能更好,占用内存也越大。
常用于反射和折射。
参考 我买的 untiy shader 入门精要