《Unity Shader》10.1.2 创建用于环境映射的立方体纹理

准备 RenderCubemapWizard.cs 的代码。由于该代码需要添加菜单栏条目,因此我们需要把它放在Editor文件夹下才能正确执行。当准备好上述代码后,要创建一个Cubemap非常简单。

编辑器类脚本,必须放在 Assets/Editor 资源目录中。此文件夹下的脚本只对编辑器进行操作。最后资源打包,Editor文件夹下的所有资源都不会被打包到工程中。

先create-folder 创建 Editor 文件夹

create-c# script 创建RenderCubemapWizard

但是有一个问题,创建了 C#文件之后,报错

解决方法是在 unity hub 里重新安装 unity。如下图,就没有报错了。

https://github.com/candycat1992/Unity_Shaders_Book/blob/master/Assets/Editor/Chapter10/RenderCubemapWizard.cs

RenderCubemapWizard.cs

java 复制代码
using UnityEngine;
using UnityEditor;
using System.Collections;

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!");
	}
}

(1)我们使用和10.1.1节中相同的场景,并创建一个空的GameObject对象。我们会使用该GameObject的位置信息来渲染立方体纹理。

(2)新建一个用于存储的立方体纹理(在Project视图下单击右键,选择Create → Legacy →Cubemap来创建)。在本书资源中,该立方体纹理名为Cubemap_0。为了让脚本可以顺利将图像渲染到该立方体纹理中,我们需要在它的面板中勾选Readable选项。

(3)从Unity菜单栏选择GameObject -> Render into Cubemap,打开我们在脚本中实现的用于渲染立方体纹理的窗口,并把第1步中创建的GameObject和第2步中创建的Cubemap_0分别拖曳到窗口中的Render From Position和Cubemap选项,如图10.5所示。

(4)单击窗口中的Render!按钮,就可以把从该位置观察到的世界空间下的6张图像渲染到Cubemap_0中,如图10.6所示。需要注意的是,我们需要为Cubemap设置大小,即图10.6中的Face size选项。Face size值越大,渲染出来的立方体纹理分辨率越大,效果可能更好,但需要占用的内存也越大,这可以由面板最下方显示的内存大小得到。

准备好了需要的立方体纹理后,我们就可以对物体使用环境映射技术。而环境映射最常见的应用就是反射和折射。

相关推荐
怣疯knight3 小时前
unity上传git需要上传哪些文件
git·unity
世洋Blog3 小时前
Unity开发微信小游戏-合理的规划使用YooAsset
unity·c#·微信小游戏
hashiqimiya3 小时前
unity配置外部编辑器rider
unity·编辑器·游戏引擎
jtymyxmz6 小时前
《Unity Shader》10.1.3 反射
unity·游戏引擎
avi91111 天前
发现一个宝藏Unity开源AVG框架,视觉小说的脚手架
unity·开源·框架·插件·tolua·avg
一线灵2 天前
跨平台游戏引擎 Axmol-2.10.0 发布
游戏引擎
沉默金鱼2 天前
Unity实用技能-格式化format文字
ui·unity·游戏引擎
jyy_992 天前
通过网页地址打开unity的exe程序,并传参
unity
qq_205279053 天前
Unity TileMap 使用经验
unity·游戏引擎