RenderPipeline.SubmitRenderRequest
Declaration
public static void SubmitRenderRequest(Camera camera, RequestData data);Параметры
| Параметр | Описание |
|---|---|
| камера | Камера для выполнения запроса. |
| данные | Вся необходимая информация о назначении для отображения запроса, например назначение отображения, уровень mipmap, индекс слоя и т.д. Эта информация зависит от типа RequestData. |
Описание
Отправляет запрос на рендеринг камере с помощью конвейера рендеринга вне цикла рендеринга Unity.
Вызов этого метода или Camera.SubmitRenderRequest для рендеринга выбранной камеры с конвейером рендеринга на место назначения рендеринга, указанное в параметре 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 RenderPipeline.SubmitRenderRequest(camera, 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 RenderPipeline.SubmitRenderRequest(camera, 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 RenderPipeline.SubmitRenderRequest(camera, 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 RenderPipeline.SubmitRenderRequest(camera, request); } } } }