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); } }
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.