版本: Unity 6 (6000.0)
语言英语
  • C#

CommandBuffer.SetShadowSamplingMode

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交,但我们确实会阅读用户提出的每个建议更改,并在适用情况下进行更新。

关闭

提交失败

由于某些原因,您的建议更改无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

声明

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

参数

shadowmap 要更改采样模式的阴影贴图渲染目标。
mode 新的采样模式。

描述

添加“设置阴影采样模式”命令。

阴影贴图渲染纹理通常设置为使用比较过滤器进行采样 - 采样器获取屏幕像素的阴影空间深度值,并根据阴影贴图中的深度值是否小于或大于返回 0 或 1。这是默认的 ShadowSamplingMode.CompareDepths 模式,用于渲染阴影。

如果要像在普通纹理中一样访问阴影贴图值,请将采样模式设置为 ShadowSamplingMode.RawDepth

在当前 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); } }