《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值越大,渲染出来的立方体纹理分辨率越大,效果可能更好,但需要占用的内存也越大,这可以由面板最下方显示的内存大小得到。

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

相关推荐
郝学胜-神的一滴1 小时前
[简化版 Games 101] 计算机图形学 05:二维变换下
c++·unity·图形渲染·three.js·opengl·unreal
mxwin14 小时前
Unity URP 热更新兼容性:Shader 在 IL2CPP 打包下的注意事项
unity·游戏引擎
mxwin19 小时前
Unity shader中TransformWorldToShadowCoord原理解析
unity·游戏引擎·shader
mxwin19 小时前
Unity Shader 中 ShadowCaster的作用和疑问
unity·游戏引擎
mxwin20 小时前
Unity Shader中如何学习阴影技术 产生阴影,接受阴影,联级阴影,软阴影
学习·unity·游戏引擎·shader
♡すぎ♡20 小时前
ShaderLab:线条几何体旋转
unity·计算机图形学·着色器·shaderlab
小贺儿开发20 小时前
【MediaPipe】Unity3D 指间游鱼互动演示
游戏·unity·人机交互·摄像头·手势识别·互动·康复训练
mxwin1 天前
Unity Shader中CastShadows 和 ReceiveShadows 在代码中的区分
unity·游戏引擎·shader
努力长头发的程序猿1 天前
Unity2D当中的A*寻路算法
算法·unity·c#
RReality2 天前
【Unity Shader URP】Matcap 材质捕捉实战教程
java·ui·unity·游戏引擎·图形渲染·材质