Unity 6.3
0 онлайн 89 гостей 3 в системе
Вход

Camera.SubmitRenderRequest

Declaration

public void SubmitRenderRequest(RequestData renderRequest);

Параметры

Параметр Описание
renderRequest Вся необходимая информация для выполнения запроса, например, место назначения, уровень mipmap, индекс слоя и т.д. Эта информация зависит от типа RequestData.

Описание

Отправляет запрос на рендеринг камере вне цикла рендеринга Unity.

Вызов этого метода или RenderPipeline.SubmitRenderRequest для выполнения отображения вне цикла отображения Unity и вывода конвейера отображения в место назначения отображения, указанное в параметре RequestData. Перед отправкой запроса используйте RenderPipeline.SupportsRenderRequest для проверки того, что конвейер отображения поддерживает выбранный вами тип RequestData. Запрос обрабатывается последовательно в вашем скрипте, без использования механизма обратного вызова.

Universal Render Pipeline (URP) поддерживает следующие типы RequestData:

  • StandardRequest отображает полный стек камер и выводит результат на указанный объект. Этот запрос применим только к Базовым Камерам.
  • ObjectIdRequest отображает объект ID в каждом пикселе и выводит результат на указанную цель. Этот запрос поддерживается только в редакторе.
  • UniversalRenderPipeline.SingleCameraRequest рендирует одну камеру и выводит результат на указанный объект. Этот запрос применим только к Базовым Камерам.

High Definition Render Pipeline (HDRP) поддерживает следующие типы RequestData:

  • StandardRequest рендирует камеру без произвольных переменных выхода (AOVs) и выводит результат на указанный объект. Он использует отдельную историю камеры от цикла рендеринга, чтобы обеспечить последовательность временных эффектов.
  • ObjectIdRequest отображает объект ID на каждом соответствующем пикселе и выводит результат на заданные цели. Поддерживается только в редакторе.

Встроенный Render Pipeline поддерживает только ObjectIdRequest тип запроса.

Дополнительные сведения о том, как выполнить запрос на выполнение в URP, см. Создание запроса отображения в URP.

// This example sends render requests when the GUI button "Render Request" is selected.
// To use it, attach the script to a camera and select Enter Play Mode.

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Rendering;

[RequireComponent(typeof(Camera))] public class StandardRenderRequest : MonoBehaviour { [SerializeField] RenderTexture texture2D, texture2DArray, cubeMap, texture3D;

// Create a button you can use to send a render request private void OnGUI() { GUILayout.BeginVertical(); if (GUILayout.Button("Render Request")) { SendRenderRequests(); } GUILayout.EndVertical(); }

// Send render requests outside of Unity render loop void SendRenderRequests() { Camera camera = GetComponent<Camera>();

// Create a standard request. This is supported only in HDRP and URP. RenderPipeline.StandardRequest request = new RenderPipeline.StandardRequest();

// Check if the request is supported by the render pipeline if (RenderPipeline.SupportsRenderRequest(camera, request)) { // Submit the render request to the render pipeline with different destination textures

// Render to a 2D texture request.destination = texture2D;

// Render the camera, and fill the 2D texture with its view camera.SubmitRenderRequest(request);

// Render to a 2D texture array request.destination = texture2DArray; for (int i = 0; i < texture2DArray.volumeDepth; i++) { request.slice = i; // Render the camera and fill slice i of the 2D texture array with its view camera.SubmitRenderRequest(request); }

// Render to a cubemap texture var faces = new[] { CubemapFace.NegativeX, CubemapFace.PositiveX, CubemapFace.NegativeY, CubemapFace.PositiveY, CubemapFace.NegativeZ, CubemapFace.PositiveZ }; request.destination = cubeMap; foreach (var face in faces) { request.face = face; // Render the camera and fill each face of the cubemap texture with its view camera.SubmitRenderRequest(request); }

// Render to a 3D texture request.destination = texture3D; for (int i = 0; i < texture3D.volumeDepth; i++) { request.slice = i; // Render the camera and fill slice i of the 3D texture with its view camera.SubmitRenderRequest(request); } } } }