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

CommandBuffer.SetShadowSamplingMode

Declaration

public void SetShadowSamplingMode(Rendering.RenderTargetIdentifier shadowmap, Rendering.ShadowSamplingMode mode);

Параметры

Параметр Описание
теневая карта Целевой объект рендеринга Shadowmap для изменения режима выборки.
режим Новый режим выборки.

Описание

Добавить команду "set shadow sampling mode".

Тексты рендеринга Shadowmap обычно настраиваются для выборки с помощью сравнительного фильтра — семплер получает значение глубины тени пикселя экрана и возвращает 0 или 1, в зависимости от того, меньше или больше значение глубины в shadowmap. Это режим по умолчанию ShadowSamplingMode.CompareDepths и используется для рендеринга теней.

Если вы хотите получить доступ к значениям shadowmap, как в обычной текстуре, установите режим выборки на ShadowSamplingMode.RawDepth.

Режим выборки Shadowmap будет возвращен к стандартному после последней команды в текущей CommandBuffer.

Проверьте SystemInfo.supportsRawShadowDepthSampling, чтобы убедиться, что текущая платформа времени выполнения поддерживает выборку теней таким образом. В частности, DirectX9 не поддерживает.

using UnityEngine;
using UnityEngine.Rendering;

[RequireComponent(typeof(Camera))] public class RawShadowmapDepth : MonoBehaviour { public Light m_Light; RenderTexture m_ShadowmapCopy;

void Start() { RenderTargetIdentifier shadowmap = BuiltinRenderTextureType.CurrentActive; m_ShadowmapCopy = new RenderTexture(1024, 1024, 0); CommandBuffer cb = new CommandBuffer();

// Change shadow sampling mode for m_Light's shadowmap. cb.SetShadowSamplingMode(shadowmap, ShadowSamplingMode.RawDepth);

// The shadowmap values can now be sampled normally - copy it to a different render texture. cb.Blit(shadowmap, new RenderTargetIdentifier(m_ShadowmapCopy));

// Execute after the shadowmap has been filled. m_Light.AddCommandBuffer(LightEvent.AfterShadowMap, cb);

// Sampling mode is restored automatically after this command buffer completes, so shadows will render normally. }

void OnRenderImage(RenderTexture src, RenderTexture dest) { // Display the shadowmap in the corner. Camera.main.rect = new Rect(0, 0, 0.5f, 0.5f); Graphics.Blit(m_ShadowmapCopy, dest); Camera.main.rect = new Rect(0, 0, 1, 1); } }