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

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); } } } }