Camera.RenderToCubemap

Switch to Manual
public bool RenderToCubemap (Cubemap cubemap, int faceMask= 63);

Parameters

cubemap 要渲染到的立方体贴图。
faceMask 位掩码,用于确定渲染到六个面中的哪一个。

Returns

bool False is rendering fails, else true.

Description

从该摄像机渲染到一个静态立方体贴图。

该函数的主要用途是在 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!"); } }

public bool RenderToCubemap (RenderTexture cubemap, int faceMask= 63);

Parameters

faceMask 位域,指示应渲染到立方体贴图的哪些面。
cubemap 要渲染到的纹理。

Returns

bool False is rendering fails, else true.

Description

从该摄像机渲染到一个立方体贴图。

用于将实时反光渲染到立方体贴图渲染纹理。该操作开销很大, 如果每帧都需要渲染立方体贴图的所有六个面,代价将极其高昂。

将使用摄像机的位置、清除标记和裁剪面距离渲染到立方体贴图面。 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); }