cubemap | 要渲染到的立方体贴图。 |
faceMask | 位掩码,用于确定渲染到六个面中的哪一个。 |
bool 如果渲染失败,返回 false,否则返回 true。
从该摄像机渲染到一个静态立方体贴图。
This function is mostly useful in the editor for "baking" static cubemaps of your Scene. See
wizard example below. If you want a real-time-updated cubemap, use RenderToCubemap variant that uses
a RenderTexture with a cubemap dimension, see below.
将使用摄像机的位置、清除标记和裁剪面距离渲染到立方体贴图面。
faceMask
是一个位域,指示应渲染到立方体贴图的哪些面。设置的每个位
对应一个面。位数为 CubemapFace 枚举的整数值。
默认情况下,将渲染立方体贴图的所有六个面(默认值为 63 - 即最低六位均被置位)。
如果渲染到立方体贴图失败,该函数将返回 /false/。某些图形硬件不支持
该功能。
Note also that ReflectionProbes are a more advanced way of performing real-time reflections. Cubemaps can be created in the editor by selecting the Create->Legacy option.
另请参阅:立方体贴图资源、反光着色器。
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,否则返回 true。
从该摄像机渲染到一个立方体贴图。
用于将实时反光渲染到立方体贴图渲染纹理。该操作开销很大,
如果每帧都需要渲染立方体贴图的所有六个面,代价将极其高昂。
将使用摄像机的位置、清除标记和裁剪面距离渲染到立方体贴图面。
faceMask
是一个位域,指示应渲染到立方体贴图的哪些面。设置的每个位
对应一个面。位数为 CubemapFace 枚举的整数值。
默认情况下,将渲染立方体贴图的所有六个面(默认值为 63 - 即最低六位均被置位)。
如果渲染到立方体贴图失败,该函数将返回 /false/。某些图形硬件不支持
该功能。
注意,必须将 RenderTexture 的 RenderTexture.dimension 设置为 TextureDimension.Cube。下面的示例将对此进行说明。
另请参阅:RenderTexture.isCubemap、反光着色器。
using UnityEngine;
[ExecuteInEditMode] public class Example : MonoBehaviour { // Attach this script to an object that uses a Reflective shader. // Real-time reflective cubemaps!
int cubemapSize = 128; bool oneFacePerFrame = false; Camera cam; RenderTexture renderTexture;
void Start() { // render all six faces at startup UpdateCubemap(63); }
void OnDisable() { DestroyImmediate(cam); DestroyImmediate(renderTexture); }
void LateUpdate() { if (oneFacePerFrame) { var faceToRender = Time.frameCount % 6; var faceMask = 1 << faceToRender; UpdateCubemap(faceMask); } else { UpdateCubemap(63); // all six faces } }
void UpdateCubemap(int faceMask) { if (!cam) { GameObject obj = new GameObject("CubemapCamera", typeof(Camera)); obj.hideFlags = HideFlags.HideAndDontSave; obj.transform.position = transform.position; obj.transform.rotation = Quaternion.identity; cam = obj.GetComponent<Camera>(); cam.farClipPlane = 100; // don't render very far into cubemap cam.enabled = false; }
if (!renderTexture) { renderTexture = new RenderTexture(cubemapSize, cubemapSize, 16); renderTexture.dimension = UnityEngine.Rendering.TextureDimension.Cube; renderTexture.hideFlags = HideFlags.HideAndDontSave; GetComponent<Renderer>().sharedMaterial.SetTexture("_Cube", renderTexture); }
cam.transform.position = transform.position; cam.RenderToCubemap(renderTexture, faceMask); } }
cubemap | 要渲染到的纹理。 |
faceMask | 位域,指示应渲染到立方体贴图的哪些面。设置为整数值 63 将渲染所有面。 |
stereoEye | 摄像机眼,对应于左眼或右眼(用于立体渲染),或不对应于眼睛(用于非立体渲染)。 |
bool 如果渲染失败,返回 false,否则返回 true。
从该摄像机将一个 360 度立体图像的一侧渲染到一个立方体贴图。
将 stereoEye
参数设置为 Camera.MonoOrStereoscopicEye.Left 或 Camera.MonoOrStereoscopicEye.Right 后将以适当的世界空间变换来渲染 360 度立体图像的左眼或右眼视角。将 stereoEye
设置为 Camera.MonoOrStereoscopicEye.Mono 可渲染场景的单视场视图。渲染单独的左右立方体贴图之后,可以将其转换成占用一个纹理的等距圆柱投影全景图像。
在渲染立体视图的任一侧时,除非启用了 VR 支持,否则摄像机将使用其 stereoSeparation 值作为瞳孔间距 (IPD)。使用 VR 摄像机时,VR 设备 IPD 会重写 stereoSeparation 值。
Unity 使用摄像机的位置、清除标志和裁剪面距离来
渲染到立方体贴图面。每个面都要旋转摄像机。faceMask
是一个位域,指示应渲染到立方体贴图的哪些面。设置
的每个位对应于一个面。位数为 CubemapFace 枚举的整数值。
要捕获 360 度立体图像,应渲染立方体贴图的所有六个面(将 facemask
设置为 63)。
如果渲染到立方体贴图失败,该函数将返回 /false/。某些图形硬件不
支持该功能。
注意,必须将 RenderTexture 的 RenderTexture.dimension 设置为 TextureDimension.Cube。
另请参阅:RenderTexture.isCubemap、立方体贴图。
using UnityEngine; using UnityEngine.Rendering;
//attach this script to your camera object public class CreateStereoCubemaps : MonoBehaviour { public RenderTexture cubemapLeftEye; public RenderTexture cubemapRightEye; public RenderTexture equirect; public bool renderStereo = true; public float stereoSeparation = 0.064f;
void Start() { cubemapLeftEye = new RenderTexture(1024, 1024, 24, RenderTextureFormat.ARGB32); cubemapLeftEye.dimension = TextureDimension.Cube; cubemapRightEye = new RenderTexture(1024, 1024, 24, RenderTextureFormat.ARGB32); cubemapRightEye.dimension = TextureDimension.Cube; //equirect height should be twice the height of cubemap equirect = new RenderTexture(1024, 2048, 24, RenderTextureFormat.ARGB32); }
void LateUpdate() { Camera cam = GetComponent<Camera>();
if (cam == null) { cam = GetComponentInParent<Camera>(); }
if (cam == null) { Debug.Log("stereo 360 capture node has no camera or parent camera"); }
if (renderStereo) { cam.stereoSeparation = stereoSeparation; cam.RenderToCubemap(cubemapLeftEye, 63, Camera.MonoOrStereoscopicEye.Left); cam.RenderToCubemap(cubemapRightEye, 63, Camera.MonoOrStereoscopicEye.Right); } else { cam.RenderToCubemap(cubemapLeftEye, 63, Camera.MonoOrStereoscopicEye.Mono); }
//optional: convert cubemaps to equirect
if (equirect == null) return;
if (renderStereo) { cubemapLeftEye.ConvertToEquirect(equirect, Camera.MonoOrStereoscopicEye.Left); cubemapRightEye.ConvertToEquirect(equirect, Camera.MonoOrStereoscopicEye.Right); } else { cubemapLeftEye.ConvertToEquirect(equirect, Camera.MonoOrStereoscopicEye.Mono); } } }
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.