cubemap | The cube map to render to. |
faceMask | A bitmask which determines which of the six faces are rendered to. |
bool False if rendering fails, else true.
Рендер в статическую кубическую текстуру (cubemap) с камеры.
This function is mostly useful in the editor for "baking" static cubemaps of your Scene. See
wizard example below. If you want a realtime-updated cubemap, use RenderToCubemap variant that uses
a RenderTexture with a cubemap dimension, see below.
Camera's position, clear flags and clipping plane distances will be used to
render into cubemap faces. faceMask
is a bitfield indicating which cubemap faces should be rendered into. Each
bit that is set corresponds to a face. Bit numbers are integer values of CubemapFace enum.
By default all six cubemap faces will be rendered (default value 63 has six lowest bits on).
This function will return false
if rendering to cubemap fails. Some graphics hardware does not
support the functionality.
Note also that ReflectionProbes are a more advanced way of performing realtime reflections. Cubemaps can be created in the editor by selecting the Create->Legacy option.
See Also: Cubemap assets, Reflective shaders.
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). faceMask является битовым полем, указывающим на то, какие грани cubemap должны быть отрендерены. Каждый |
cubemap | The texture to render to. |
bool False if rendering fails, else true.
Рендер в cubemap с этой камеры.
This is used for real-time reflections into cubemap render textures. It can be quite expensive though,
especially if all six cubemap faces are rendered each frame.
The Camera's position, clear flags and clipping plane distances will be used to
render into cubemap faces. faceMask
is a bitfield indicating which cubemap faces should be rendered into. Each
bit that is set corresponds to a face. Bit numbers are integer values of CubemapFace enum.
By default all six cubemap faces will be rendered (default value 63 has six lowest bits on).
This function will return false
if rendering to cubemap fails. Some graphics hardware does not
support the functionality.
Note that the RenderTexture must have RenderTexture.dimension set to TextureDimension.Cube. This is illustrated in the example following.
See Also: RenderTexture.isCubemap, Reflective shaders.
using UnityEngine;
[ExecuteInEditMode] public class Example : MonoBehaviour { // Attach this script to an object that uses a Reflective shader. // Realtime 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 | The texture to render to. |
faceMask | A bitfield indicating which cubemap faces should be rendered into. Set to the integer value 63 to render all faces. |
stereoEye | A Camera eye corresponding to the left or right eye for stereoscopic rendering, or neither for non-stereoscopic rendering. |
bool False if rendering fails, else true.
Render one side of a stereoscopic 360-degree image into a cubemap from this camera.
Setting the stereoEye
parameter to Camera.MonoOrStereoscopicEye.Left or Camera.MonoOrStereoscopicEye.Right renders the left or right eye point-of-view of a stereo 360 image with proper world space transform. Setting stereoEye
to Camera.MonoOrStereoscopicEye.Mono renders a monoscopic view of the Scene. After rendering the separate left and right cubemaps, you can convert them into equirectangular panoramic images that occupy one texture.
When rendering either side of a stereoscopic view, the camera uses its stereoSeparation value as the inter-pupillary distance (IPD), unless VR Support is enabled. When using a VR camera, the VR device IPD overrides the stereoSeparation value.
Unity uses the Camera's position, clear flags and clipping plane distances to
render into the cubemap faces. The camera is rotated for each face. faceMask
is a bitfield indicating which cubemap faces should be rendered into. Each
bit that is set corresponds to a face. Bit numbers are integer values of CubemapFace enum.
For 360 stereo image capture, all six cubemap faces should be rendered (set facemask
to 63).
This function will return false
if rendering to the cubemap fails. Some graphics hardware does not
support the functionality.
Note that the RenderTexture must have RenderTexture.dimension set to TextureDimension.Cube.
See Also: RenderTexture.isCubemap, Cubemap.
using UnityEngine; using UnityEngine.Rendering;
//attach this script to your camera object public class CreateStereoCubemaps : MonoBehaviour { public RenderTexture cubemap1; public RenderTexture cubemap2; public RenderTexture equirect; public bool renderStereo = true; public float stereoSeparation = 0.064f;
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(cubemap1, 63, Camera.MonoOrStereoscopicEye.Left); cam.RenderToCubemap(cubemap2, 63, Camera.MonoOrStereoscopicEye.Right); } else { cam.RenderToCubemap(cubemap1, 63, Camera.MonoOrStereoscopicEye.Mono); }
//optional: convert cubemaps to equirect
if (equirect == null) return;
cubemap1.ConvertToEquirect(equirect, Camera.MonoOrStereoscopicEye.Left); cubemap2.ConvertToEquirect(equirect, Camera.MonoOrStereoscopicEye.Right); } }