Cubemap是一个由六个独立的正方形纹理组成的集合。通常被用来作为具有反射属性物体的反射源。类似与MAX里的HDR属性。
创建Cubemap的第一种方式
利用编辑器扩展功能进行快速创建。
首先新建一个Editor文件夹,在里面创建一个C#脚本,我们可以命名为RenderCubeMap.cs,然后进行编辑,代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
public class RenderCubeMap : ScriptableWizard
{
public Transform renderTrans;
public Cubemap cubemap;
[MenuItem("Tools/CreateCubemap")]
static void CreateCubemap()
{
//"Create Cubemap"是打开的窗口名,"Create"是按钮名,点击时调用OnWizardCreate()方法
ScriptableWizard.DisplayWizard<RenderCubeMap>("Create Cubemap", "Create");//打开向导
}
private void OnWizardUpdate()//打开向导或者在向导中更改了其他内容的时候调用
{
helpString = "选择渲染位置并且确定需要设置的cubemap";
isValid = renderTrans != null && cubemap != null;//isValid为true的时候,“Create”按钮才能点击
}
private void OnWizardCreate()//点击创建按钮时调用
{
GameObject go = new GameObject();
go.transform.position = renderTrans.position;
Camera camera = go.AddComponent<Camera>();
camera.RenderToCubemap(cubemap);//用户提供的Cubemap传递给RenderToCubemap函数,生成六张图片
DestroyImmediate(go);//立即摧毁go
}
}
保存后回到unity,这时Unity菜单栏多出了Tools工具,我们点击CreateCubemap后出现一个窗口,我们将需要创建Cubemap的观测点的位置赋值上去,再将事先新建的cubemap拖进去(Readable要打勾),点击Create后,我们原本新建的cubemap就已经贴好6张图片了,cubemap就创建完成了。
创建Cubemap的第二种方式
我们可以在网上找一些天空盒类型的材质赋值给天空盒,在Lighting中进行替换,也可以在某些场景中制作cubemap。
首先我们需要创建一个反射探针,即右键—>Light—>Reflection Probe,创建出来后,选中需要被绘制到Cubemap的物体,Inspector面板中右上角的Static选择Reflection Probe Static(如果不选择这个,那么只绘制天空盒),在反射探针的Inspector下点击Bake就出现一个cubemap了,(如果没有Bake的按钮,我们要先打开Lighting面板,将Auto Generate取消勾选之后就出现Bake按钮了)
Cubemap的使用
我们可以创建一个材质球,shader选择Skybox/Cubemap,然后将这个材质球赋值到Lighting面板中的Skybox Material就可以了。