Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

Объявление

public void DrawRenderers(Rendering.CullingResults cullingResults, ref Rendering.DrawingSettings drawingSettings, ref Rendering.FilteringSettings filteringSettings);

public void DrawRenderers(Rendering.CullingResults cullingResults, ref Rendering.DrawingSettings drawingSettings, ref Rendering.FilteringSettings filteringSettings, ref Rendering.RenderStateBlock stateBlock);

public void DrawRenderers(Rendering.CullingResults cullingResults, ref Rendering.DrawingSettings drawingSettings, ref Rendering.FilteringSettings filteringSettings, NativeArray renderTypes, NativeArray stateBlocks);

public void DrawRenderers(Rendering.CullingResults cullingResults, ref Rendering.DrawingSettings drawingSettings, ref Rendering.FilteringSettings filteringSettings, Rendering.ShaderTagId tagName, bool isPassTagName, NativeArray tagValues, NativeArray stateBlocks);

Параметры

cullingResults Набор видимых объектов для рисования. Обычно вы получаете его из ScriptableRenderContext.Cull.
drawingSettings Структура, которая описывает, как рисовать объекты.
filteringSettings Структура, описывающая, как фильтровать набор видимых объектов, чтобы Unity рисовала только подмножество.
stateBlock Набор значений, которые Unity использует для переопределения состояния рендеринга графического процессора.
tagName Имя SubShader Tag или Pass Tag.
isPassTagName Если задано значение true, tagName указывает Pass Tag. В противном случае tagName указывает SubShader Tag.
tagValues Массив структур ShaderTagId, где name — это значение заданного SubShader Tag или Pass Tag.
renderTypes Массив структур ShaderTagId, где name является значением SubShader Tag с именем "RenderType".
stateBlocks Массив структур, описывающих, какие части состояния рендеринга графического процессора следует переопределить.

Описание

Планирует отрисовку набора видимых объектов и при необходимости переопределяет состояние рендеринга графического процессора.

Эта функция создает команды для рисования указанной геометрии и добавляет команды во внутренний список команд ScriptableRenderContext. ScriptableRenderContext выполняет все команды из своего внутреннего списка при вызове ScriptableRenderContext.Submit.

Полный пример, демонстрирующий использование этой функции в контексте, см. в разделе Создание простого цикла рендеринга в пользовательском конвейере рендеринга. В этом коротком примере показано использование CommandBuffer для установки матрицы представления, а затем вызов этой функции для рисования геометрии с использованием этой матрицы:

using UnityEngine; using UnityEngine.Rendering; public class ExecuteCommandBufferExample { ScriptableRenderContext scriptableRenderContext; // Placeholder data DrawingSettings exampleDrawingSettings; CullingResults exampleCullingResults = new CullingResults(); FilteringSettings exampleFilteringSettings = new FilteringSettings(); public void Draw() { // Create a CommandBuffer to set the view matrix Matrix4x4 exampleViewMatrix = Matrix4x4.Scale(new Vector3(2f, 2f, 2f)); CommandBuffer myCommandBuffer = new CommandBuffer(); myCommandBuffer.SetViewMatrix(exampleViewMatrix); // Schedule the execution of the CommandBuffer scriptableRenderContext.ExecuteCommandBuffer(myCommandBuffer); myCommandBuffer.Clear(); // Schedule the drawing operation scriptableRenderContext.DrawRenderers(exampleCullingResults, ref exampleDrawingSettings, ref exampleFilteringSettings); // Perform all scheduled tasks, in the order that they were scheduled // This means that the CommandBuffer is executed before the drawing operation occurs scriptableRenderContext.Submit(); } }

Переопределение состояния рендеринга Когда вы рисуете геометрию с помощью этой функции, вы можете использовать одну или несколько структур RenderStateBlock для переопределения состояния рендеринга графического процессора следующими способами:

  • Вы можете использовать параметр stateBlock для предоставления одной структуры RenderStateBlock. Unity использует состояние рендеринга, определенное в stateBlock, для всей геометрии, которую рисует эта функция.
  • Вы можете использовать параметр stateBlocks для предоставления массива структур RenderStateBlock и renderTypes для предоставления массива значений для тега SubShader с именем renderTypes. Для каждого элемента в массиве renderTypes, если Unity находит геометрию с именем тега SubShader RenderType и совпадающим значением, он использует состояние рендеринга, определенное в соответствующем элементе массива stateBlocks. Если совпадений несколько, Unity использует первое. Если элемент в массиве renderTypes имеет значение по умолчанию для ShaderTagId, Unity рассматривает это как универсальное и использует соответствующее состояние визуализации для всей геометрии.
  • Вы можете использовать параметр stateBlocks для предоставления массива структур RenderStateBlock, а также использовать tagName, tagValues и isPassTagName, чтобы указать имя и значения любого SubShader Tag или Pass Tag. Для каждого элемента в массивах tagNames и tagValues Unity идентифицирует геометрию с помощью соответствующего имени и значения тега SubShader или тега Pass, а также применяет состояние рендеринга, определенное в соответствующем элементе массива stateBlocks. Если совпадений несколько, Unity использует первое. Если элемент в tagValues имеет значение по умолчанию для ShaderTagId, Unity рассматривает это как универсальное и использует соответствующее состояние визуализации для всей геометрии.

В этом примере показано, как переопределить состояние рендеринга:

using UnityEngine; using UnityEngine.Rendering; using Unity.Collections; public class OverrideRenderStateExample { ScriptableRenderContext scriptableRenderContext; // Placeholder data DrawingSettings exampleDrawingSettings; CullingResults exampleCullingResults = new CullingResults(); FilteringSettings exampleFilteringSettings = new FilteringSettings(); // Override the render state for all geometry that this function draws public void OverrideRenderStateForAll() { // Tell Unity how to override the render state var stateBlock = new RenderStateBlock(RenderStateMask.Depth); stateBlock.depthState = new DepthState(true, CompareFunction.LessEqual); // Schedule a command to draw the geometry using the desired render state // Unity will execute all scheduled commands during the next call to ScriptableRenderContext.Submit scriptableRenderContext.DrawRenderers(exampleCullingResults, ref exampleDrawingSettings, ref exampleFilteringSettings, ref stateBlock); } // Override the render state for all geometry that has a SubShader Tag // with a name of "RenderType" and a value of "ExampleRenderTypeTagValue" public void OverrideRenderStateUsingRenderTypeTag() { // Create the parameters that tell Unity how to override the render state var stateBlock = new RenderStateBlock(RenderStateMask.Depth); stateBlock.depthState = new DepthState(true, CompareFunction.Greater); var stateBlocks = new NativeArray<RenderStateBlock>(1, Allocator.Temp); stateBlocks[0] = stateBlock; // Create the parameters that tell Unity when to override the render state ShaderTagId renderType = new ShaderTagId("ExampleRenderTypeTagValue"); var renderTypes = new NativeArray<ShaderTagId>(1, Allocator.Temp); renderTypes[0] = renderType; // Schedule a command to draw the geometry using the desired render state // Unity will execute all scheduled commands during the next call to ScriptableRenderContext.Submit scriptableRenderContext.DrawRenderers(exampleCullingResults, ref exampleDrawingSettings, ref exampleFilteringSettings, renderTypes, stateBlocks); // DrawRenderers copies the array contents, so it is safe to dispose of the native arrays stateBlocks.Dispose(); renderTypes.Dispose(); } // Override the render state in two different ways. // Use one state for all geometry that has a Pass Tag // with a name of "ExamplePassTagName" and a value of "ExamplePassTagValue". // For all other geometry, use a second state. public void OverrideRenderStateUsingPassTag() { // Create the parameters that tell Unity how to override the render state var stateBlock0 = new RenderStateBlock(RenderStateMask.Depth); stateBlock0.depthState = new DepthState(true, CompareFunction.Greater); var stateBlock1 = new RenderStateBlock(RenderStateMask.Depth); stateBlock1.depthState = new DepthState(true, CompareFunction.Less); var stateBlocks = new NativeArray<RenderStateBlock>(2, Allocator.Temp); stateBlocks[0] = stateBlock0; stateBlocks[1] = stateBlock1; // default override // Create the parameters that tell Unity when to override the render state ShaderTagId tagName = new ShaderTagId("ExamplePassTagName"); bool isPassTagName = true; var tagValues = new NativeArray<ShaderTagId>(2, Allocator.Temp); tagValues[0] = new ShaderTagId("ExamplePassTagValue"); tagValues[1] = new ShaderTagId(); // catch all // Schedule a command to draw the geometry using the desired render state // Unity will execute all scheduled commands during the next call to ScriptableRenderContext.Submit scriptableRenderContext.DrawRenderers(exampleCullingResults, ref exampleDrawingSettings, ref exampleFilteringSettings, tagName, isPassTagName, tagValues, stateBlocks); // DrawRenderers copies the array contents, so it is safe to dispose of the native arrays stateBlocks.Dispose(); tagValues.Dispose(); } }

Смотрите так же: CullingResults, DrawingSettings, FilteringSettings, RenderStateBlock.

Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
API скрипты 2021.3