Camera.RenderWithShader
Declaration
public void RenderWithShader(Shader shader, string replacementTag);Параметры
| Параметр | Описание |
|---|---|
| шейдер | Шейдер для отображения видимых объектов. |
| replacementTag | Тег ShaderLab используется для фильтрации объектов, которые будут отображаться. |
Описание
Рендер камеры с заменой шейдера.
См. Рендирование с замененными шейдерами для подробностей.
Это будет рендировать камеру. Она будет использовать флаг камеры clear, текстуру цели и все другие настройки.
Если аргумент replacementTag не используется, передайте пустую строку в качестве значения.
Камера будет не отправлять MonoBehaviour.OnPreCull, MonoBehaviour.OnPreRender или MonoBehaviour.OnPostRender в приложенные скрипты. Фильтры изображений также не будут рендироваться.
Это используется для специальных эффектов, e.g. рендеринг экранного пространства обычный буфер всего Scene, тепловидение и так далее. Чтобы использовать эту функцию, обычно вы создаете камеру и отключаете ее. Затем вызываете RenderWithShader на ней.
Вы не можете вызвать функцию Render с камеры, которая в настоящее время рендируется. Если вы хотите сделать это, создайте копию камеры, и сделайте ее соответствующей оригинальной с помощью CopyFrom.
В следующем примере показано, как рендировать текущую камеру с заменой шейдера и сохранить результат в текстуре рендеринга.
Дополнительные ресурсы: Рендирование с замененными шейдерами, SetReplacementShader, Render.
using UnityEngine; using UnityEngine;
public class ReplaceShader : MonoBehaviour { public Shader overrideShader; public RenderTexture output; void Update() { // Check if there is a current camera rendering if (Camera.current != null) { // Assign the output render texture to the current camera Camera.current.targetTexture = output; // // Render the scene by replacing all the "RenderType" shaders with the overrideShader Camera.current.RenderWithShader(overrideShader, "RenderType"); // // Set the output render texture back to null to avoid side effects. Camera.current.targetTexture = null; } else { Debug.LogWarning("No current camera available for rendering."); } } }