cubemap | 要渲染到的立方体贴图。 |
faceMask | 位掩码,用于确定渲染到六个面中的哪一个。 |
bool False is rendering fails, else true.
从该摄像机渲染到一个静态立方体贴图。
该函数的主要用途是在 Editor 中“烘焙”场景的静态立方体贴图。请参阅下面的
向导示例。如果需要实时更新的立方体贴图,请使用 RenderToCubemap 变体,
该变体使用一个具有立方体贴图尺寸的 RenderTexture,详见下文。
将使用摄像机的位置、清除标记和裁剪面距离渲染到立方体贴图面。
faceMask
是一个位域,指示应渲染到立方体贴图的哪些面。设置的每个位
对应一个面。位数为 CubemapFace 枚举的整数值。
默认情况下,将渲染立方体贴图的所有六个面(默认值为 63 - 即最低六位均被置位)。
如果渲染到立方体贴图失败,该函数将返回 /false/。某些图形硬件不支持
该功能。
另请注意,ReflectionProbes 是执行实时反射的更高级的方法。通过选择 Create > Legacy 选项,可以在 Editor 中创建立方体贴图。
另请参阅:立方体贴图资源、反光着色器。
using UnityEngine;
using UnityEditor;
using System.Collections;
public class RenderCubemapWizard : ScriptableWizard
{
public Transform renderFromPosition;
public Cubemap cubemap;
void OnWizardUpdate()
{
string helpString = "Select transform to render from and cubemap to render into";
bool 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;
go.transform.rotation = Quaternion.identity;
// 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!");
}
}
faceMask | 位域,指示应渲染到立方体贴图的哪些面。 |
cubemap | 要渲染到的纹理。 |
bool False is rendering fails, else true.
从该摄像机渲染到一个立方体贴图。
用于将实时反光渲染到立方体贴图渲染纹理。该操作开销很大,
如果每帧都需要渲染立方体贴图的所有六个面,代价将极其高昂。
将使用摄像机的位置、清除标记和裁剪面距离渲染到立方体贴图面。
faceMask
是一个位域,指示应渲染到立方体贴图的哪些面。设置的每个位
对应一个面。位数为 CubemapFace 枚举的整数值。
默认情况下,将渲染立方体贴图的所有六个面(默认值为 63 - 即最低六位均被置位)。
如果渲染到立方体贴图失败,该函数将返回 /false/。某些图形硬件不支持
该功能。
注意,必须将 RenderTexture 的 RenderTexture.dimension 设置为 TextureDimension.Cube。下面的示例将对此进行说明。
另请参阅:RenderTexture.isCubemap、反光着色器。
// Attach this script to an object that uses a Reflective shader.
// Realtime reflective cubemaps!
@script ExecuteInEditMode
var cubemapSize = 128;
var oneFacePerFrame = false;
private var cam : Camera;
private var rtex : RenderTexture;
function Start () {
// render all six faces at startup
UpdateCubemap( 63 );
}
function LateUpdate () {
if (oneFacePerFrame) {
var faceToRender = Time.frameCount % 6;
var faceMask = 1 << faceToRender;
UpdateCubemap (faceMask);
} else {
UpdateCubemap (63); // all six faces
}
}
function UpdateCubemap (faceMask : int) {
if (!cam) {
var go = new GameObject ("CubemapCamera", Camera);
go.hideFlags = HideFlags.HideAndDontSave;
go.transform.position = transform.position;
go.transform.rotation = Quaternion.identity;
cam = go.GetComponent.<Camera>();
cam.farClipPlane = 100; // don't render very far into cubemap
cam.enabled = false;
}
if (!rtex) {
rtex = new RenderTexture (cubemapSize, cubemapSize, 16);
rtex.dimension = UnityEngine.Rendering.TextureDimension.Cube;
rtex.hideFlags = HideFlags.HideAndDontSave;
GetComponent.<Renderer>().sharedMaterial.SetTexture ("_Cube", rtex);
}
cam.transform.position = transform.position;
cam.RenderToCubemap (rtex, faceMask);
}
function OnDisable () {
DestroyImmediate (cam);
DestroyImmediate (rtex);
}