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