阴影表示、过滤与稳定性:36篇复现
覆盖shadow volume、shadow map、透视变换、级联、软阴影和体积阴影。
先预测,再建立证据
先预测:如果只把ShaderX中的DirectX 8/9、早期GLSL或固定功能接口替换成现代API,哪些数据顺序、精度、过滤和同步假设会改变?阴影系统必须把表示、样本分配、偏移和过滤分开验证,柔和边缘不等于正确遮挡。 本页用、、、和建立统一验收语言。
官方范围与唯一归属
来源:ShaderX 1 · ShaderX 2 · Introductions & Tutorials · ShaderX 2 · Tips & Tricks · ShaderX 3 · ShaderX 4 · ShaderX 5 · ShaderX 6 · ShaderX 7。以下原篇只在本主题拥有一个主归属;其他主题可以引用,但不得重复计入329篇覆盖。
ShaderX 1 · 1篇
- SXX-SX1-04 · Shadow Volume Extrusion Using a Vertex Shader:确定遮挡表示、光空间样本分配、偏移与过滤对象,再用接触、掠射和动态相机证明稳定性。
ShaderX 2 · Introductions & Tutorials · 2篇
- SXX-SX2I-05 · Shadow Mapping with Direct3D 9:确定遮挡表示、光空间样本分配、偏移与过滤对象,再用接触、掠射和动态相机证明稳定性。
- SXX-SX2I-06 · The Theory of Stencil Shadow Volumes:确定遮挡表示、光空间样本分配、偏移与过滤对象,再用接触、掠射和动态相机证明稳定性。
ShaderX 2 · Tips & Tricks · 3篇
- SXX-SX2T-45 · Soft Shadows:确定遮挡表示、光空间样本分配、偏移与过滤对象,再用接触、掠射和动态相机证明稳定性。
- SXX-SX2T-46 · Robust Object ID Shadows:确定遮挡表示、光空间样本分配、偏移与过滤对象,再用接触、掠射和动态相机证明稳定性。
- SXX-SX2T-47 · Reverse Extruded Shadow Volumes:确定遮挡表示、光空间样本分配、偏移与过滤对象,再用接触、掠射和动态相机证明稳定性。
ShaderX 3 · 5篇
- SXX-SX3-11 · Parallax Occlusion Mapping: Self-Shadowing, Perspective-Correct Bump Mapping Using Reverse Height Map Tracing:确定遮挡表示、光空间样本分配、偏移与过滤对象,再用接触、掠射和动态相机证明稳定性。
- SXX-SX3-32 · Poisson Shadow Blur:确定遮挡表示、光空间样本分配、偏移与过滤对象,再用接触、掠射和动态相机证明稳定性。
- SXX-SX3-33 · Fractional-Disk Soft Shadows:确定遮挡表示、光空间样本分配、偏移与过滤对象,再用接触、掠射和动态相机证明稳定性。
- SXX-SX3-34 · Fake Soft Shadows Using Precomputed Visibility Distance Functions:确定遮挡表示、光空间样本分配、偏移与过滤对象,再用接触、掠射和动态相机证明稳定性。
- SXX-SX3-35 · Efficient Omnidirectional Shadow Maps:确定遮挡表示、光空间样本分配、偏移与过滤对象,再用接触、掠射和动态相机证明稳定性。
ShaderX 4 · 6篇
- SXX-SX4-21 · Reflective Shadow Maps:确定遮挡表示、光空间样本分配、偏移与过滤对象,再用接触、掠射和动态相机证明稳定性。
- SXX-SX4-25 · Soft Projected Shadows:确定遮挡表示、光空间样本分配、偏移与过滤对象,再用接触、掠射和动态相机证明稳定性。
- SXX-SX4-26 · Eliminate surface acne with gradient shadow mapping:确定遮挡表示、光空间样本分配、偏移与过滤对象,再用接触、掠射和动态相机证明稳定性。
- SXX-SX4-27 · Real-time soft shadows using the PDSM technique:确定遮挡表示、光空间样本分配、偏移与过滤对象,再用接触、掠射和动态相机证明稳定性。
- SXX-SX4-28 · Robust Shadow Mapping with Light-Space Perspective Shadow Maps:确定遮挡表示、光空间样本分配、偏移与过滤对象,再用接触、掠射和动态相机证明稳定性。
- SXX-SX4-29 · Shadowbuffer Frustum Partitioning:确定遮挡表示、光空间样本分配、偏移与过滤对象,再用接触、掠射和动态相机证明稳定性。
ShaderX 5 · 7篇
- SXX-SX5-07 · Dynamic Parallax Occlusion Mapping with Soft Shadows:确定遮挡表示、光空间样本分配、偏移与过滤对象,再用接触、掠射和动态相机证明稳定性。
- SXX-SX5-16 · Cascaded Shadow Maps:确定遮挡表示、光空间样本分配、偏移与过滤对象,再用接触、掠射和动态相机证明稳定性。
- SXX-SX5-17 · Multisampling Extension for Gradient Shadow Maps:确定遮挡表示、光空间样本分配、偏移与过滤对象,再用接触、掠射和动态相机证明稳定性。
- SXX-SX5-18 · Alias-free Hard Shadows with Geometry Maps:确定遮挡表示、光空间样本分配、偏移与过滤对象,再用接触、掠射和动态相机证明稳定性。
- SXX-SX5-19 · Edge Masking and Per-Texel Depth Extent Propagation For Computation Culling During Shadow Mapping:确定遮挡表示、光空间样本分配、偏移与过滤对象,再用接触、掠射和动态相机证明稳定性。
- SXX-SX5-20 · Queried Virtual Shadow Maps:确定遮挡表示、光空间样本分配、偏移与过滤对象,再用接触、掠射和动态相机证明稳定性。
- SXX-SX5-21 · Real-time Soft Shadows with Shadow Accumulation:确定遮挡表示、光空间样本分配、偏移与过滤对象,再用接触、掠射和动态相机证明稳定性。
ShaderX 6 · 6篇
- SXX-SX6-20 · Stable Rendering of Cascaded Shadow Maps:确定遮挡表示、光空间样本分配、偏移与过滤对象,再用接触、掠射和动态相机证明稳定性。
- SXX-SX6-21 · Approximate Cumulative Distribution Function Shadow Mapping:确定遮挡表示、光空间样本分配、偏移与过滤对象,再用接触、掠射和动态相机证明稳定性。
- SXX-SX6-22 · Rendering Filtered Shadows with Exponential Shadow Maps:确定遮挡表示、光空间样本分配、偏移与过滤对象,再用接触、掠射和动态相机证明稳定性。
- SXX-SX6-23 · Fitted Virtual Shadow Maps and Shadow Fog:确定遮挡表示、光空间样本分配、偏移与过滤对象,再用接触、掠射和动态相机证明稳定性。
- SXX-SX6-24 · Removing Shadow Volume Artifacts:确定遮挡表示、光空间样本分配、偏移与过滤对象,再用接触、掠射和动态相机证明稳定性。
- SXX-SX6-37 · Shadow Techniques for OpenGL ES 2.0:确定遮挡表示、光空间样本分配、偏移与过滤对象,再用接触、掠射和动态相机证明稳定性。
ShaderX 7 · 6篇
- SXX-SX7-17 · Practical Cascaded Shadow Maps:确定遮挡表示、光空间样本分配、偏移与过滤对象,再用接触、掠射和动态相机证明稳定性。
- SXX-SX7-18 · A Hybrid Method for Interactive Shadows in Homogeneous Media:确定遮挡表示、光空间样本分配、偏移与过滤对象,再用接触、掠射和动态相机证明稳定性。
- SXX-SX7-19 · Real-time dynamic shadows for image-based lighting:确定遮挡表示、光空间样本分配、偏移与过滤对象,再用接触、掠射和动态相机证明稳定性。
- SXX-SX7-20 · Facetted Shadow Mapping for Large Dynamic Game Environments:确定遮挡表示、光空间样本分配、偏移与过滤对象,再用接触、掠射和动态相机证明稳定性。
- SXX-SX7-28 · Real-Time Subsurface Scattering using Shadow Maps:确定遮挡表示、光空间样本分配、偏移与过滤对象,再用接触、掠射和动态相机证明稳定性。
- SXX-SX7-29 · Instant radiosity with GPU photon tracing and approximate indirect shadows:确定遮挡表示、光空间样本分配、偏移与过滤对象,再用接触、掠射和动态相机证明稳定性。
核心模型与不变量
阴影系统必须把表示、样本分配、偏移和过滤分开验证,柔和边缘不等于正确遮挡。 复现时先写输入、输出、坐标或数据域、迭代顺序、误差判据和资源生命周期,再讨论接口迁移。任何优化都要指出它保持、近似或放弃了哪条关系。
公式里的量必须给出范围、单位、空间、精度和生产者。画面相似不代表算法等价;数值接近也不代表带宽、时序和设备边界相同。
最小现代探针
float4 ProbeStage(float4 inputValue, float4 constantsValue) {
float4 candidate = EvaluateInvariant(inputValue, constantsValue);
return float4(candidate.xyz, 1.0);
}探针一次只暴露一个阶段。先使用常量、解析输入和小规模CPU参考确认关系,再逐步恢复纹理、变体、并行和历史数据。
历史载体到现代路径
original article -> assumptions -> invariant -> reference
reference -> modern shader/compute path -> intermediate evidence
evidence -> image or numeric diff -> target-device acceptance旧shader model、寄存器语义、effect框架、render-to-texture和多pass接口可以变化,但读写依赖、采样边界、精度和同步不能被省略。迁移报告要明确标记完全等价、受控近似和不可直接迁移。
性能、兼容与失败边界
固定设备、驱动、分辨率、场景、帧阶段和统计窗口,分别报告CPU提交、GPU时间、外存流量、显存峰值与画质误差。历史技巧在现代GPU上可能被编译器、缓存或专用硬件替代,必须以捕获而不是名称判断。
{"source":"volume + article id","correctness":"reference diff","compatibility":"api and device matrix","performance":"end-to-end metrics","failure":"minimal replay"}- 固定卷号、篇名、来源、原始平台和输入输出。
- 写出核心不变量、CPU或离线参考以及现代GPU路径。
- 构造正常、边界、退化和超容量输入,保存中间证据。
- 在目标设备重放,记录图像或数值误差和端到端成本。
常见误区
练习
本章回顾
阴影表示、过滤与稳定性页承载36篇唯一原文;每篇都回到问题、不变量、现代实现、边界和证据,而不是只保留一个效果名称。