Параметры
cubemap | Кубическая карта для рендеринга. |
faceMask | Битовая маска, определяющая, на какую из шести граней выполняется рендеринг. |
Возвращает
bool False, если рендеринг завершается сбоем, иначе true.
Описание
Визуализация в статическую кубическую карту с этой камеры.
Эта функция в основном полезна в редакторе для «запекания» статических кубических карт вашей сцены. См. пример мастера ниже. Если вам нужна кубическая карта, обновляемая в реальном времени, используйте вариант RenderToCubemap, в котором используется RenderTexture с измерением кубической карты, см. ниже.
Положение камеры, четкие флажки и расстояния между плоскостями отсечения будут использоваться для рендеринга граней кубической карты. faceMask
– это битовое поле, указывающее, в какие грани кубической карты следует отображать. Каждый установленный бит соответствует лицу. Битовые числа — это целые значения перечисления CubemapFace. По умолчанию будут визуализированы все шесть граней кубической карты (значение по умолчанию 63 включает шесть младших битов).
Эта функция вернет false
, если рендеринг в кубическую карту завершится ошибкой. Некоторое графическое оборудование не поддерживает эту функцию.
Обратите внимание, что ReflectionProbes — это более продвинутый способ выполнения отражений в реальном времени. Кубические карты можно создавать в редакторе, выбрав опцию Create->Legacy.
Смотрите так же: 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(
"Render cubemap", "Render!");
}
}
Параметры
faceMask | Битовое поле, указывающее, какие грани кубической карты должны быть отображены в. |
cubemap | Текстура для рендеринга. |
Возвращает
bool False, если рендеринг завершается сбоем, иначе true.
Описание
Визуализация в кубическую карту с этой камеры.
Это используется для отражений в реальном времени в текстурах рендеринга кубической карты. Хотя это может быть довольно дорого, особенно если все шесть граней кубической карты визуализируются в каждом кадре.
Положение камеры, четкие флажки и расстояния между плоскостями отсечения будут использоваться для рендеринга граней кубической карты. faceMask
– это битовое поле, указывающее, в какие грани кубической карты следует отображать. Каждый установленный бит соответствует лицу. Битовые числа — это целые значения перечисления CubemapFace. По умолчанию будут визуализированы все шесть граней кубической карты (значение по умолчанию 63 включает шесть младших битов).
Эта функция вернет false
, если рендеринг в кубическую карту завершится ошибкой. Некоторое графическое оборудование не поддерживает эту функцию.
Обратите внимание, что для параметра RenderTexture RenderTexture.dimension должно быть задано значение TextureDimension.Cube. Это показано в следующем примере.
Смотрите так же: 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);
}
}
Объявление
public bool RenderToCubemap(RenderTexture cubemap, int faceMask, Camera.MonoOrStereoscopicEye stereoEye);Параметры
cubemap | Текстура для рендеринга. |
faceMask | Битовое поле, указывающее, в какие грани кубической карты следует отображать. Установите целочисленное значение 63, чтобы визуализировать все лица. |
stereoEye | Глаз камеры, соответствующий левому или правому глазу для стереоскопического рендеринга или ни одному из них для нестереоскопического рендеринга.. |
Возвращает
bool False, если рендеринг завершается сбоем, иначе true.
Описание
Визуализировать одну сторону стереоскопического 360-градусного изображения в кубическую карту с этой камеры.
Установка для параметра stereoEye
значения Camera.MonoOrStereoscopicEye.Left или Camera.MonoOrStereoscopicEye.Right отображает точку зрения левого или правого глаза стереоизображения 360 с надлежащим преобразованием мирового пространства. Установка для stereoEye
значения Camera.MonoOrStereoscopicEye.Mono обеспечивает моноскопическое представление сцены. После рендеринга отдельных левой и правой кубических карт их можно преобразовать в равнопрямоугольные панорамные изображения, занимающие одну текстуру.
При рендеринге любой стороны стереоскопического изображения камера использует значение stereoSeparation в качестве межзрачкового расстояния (IPD), если не включена поддержка VR. При использовании камеры VR IPD устройства VR переопределяет значение stereoSeparation.
Unity использует положение камеры, флажки очистки и расстояния между плоскостями отсечения для рендеринга граней кубической карты. Камера поворачивается для каждого лица. faceMask
– это битовое поле, указывающее, в какие грани кубической карты следует отображать. Каждый установленный бит соответствует лицу. Битовые числа — это целые значения перечисления CubemapFace. Для захвата стереоизображения 360 должны быть отрисованы все шесть граней кубической карты (установите для facemask
значение 63).
Эта функция вернет false
, если рендеринг в кубическую карту завершится ошибкой. Некоторое графическое оборудование не поддерживает эту функцию.
Обратите внимание, что для параметра RenderTexture RenderTexture.dimension должно быть задано значение TextureDimension.Cube.
Смотрите так же: RenderTexture.isCubemap, Cubemap.
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);
}
}
}