几何阴影(阴影卷Shadow volumes,模板缓冲区stencil buffer)

几何阴影

1.简介
•阴影增加了3D的现实主义
•没有阴影对象可以出现浮现
•阴影给出深度提示
•大小取决于光线位置
•区分Umbra和Penumbra:
Umbra-接收表面不能查看光源的任何部分;
Penumbra-可以看到一些光

•“几何阴影” - 计算阴影的形状,但仅猜测它的形状反射光强度(最常见的方法)
• 开发:阴影是从光线隐藏的区域来源(暗示使用HSR算法);点光源意味着没有半身(Penumbra); 阴影不会在静态场景中改变
•高计算开销:现在被GPU改善; 阴影以与纹理映射相同的方式观看 - 一种质量附加组件标准多边形网状渲染管道

2.简单的阴影
2.1假阴影

•没有确切的计算
•阴影位置的近似形状
•通过中心或锚定目的
•优点:简单; 快速地
•缺点:需要平坦的地面; 并非准确

2.1顶点投影
•投影到地面的物体
•精确的数学计算
•优点:简单; 精确的
•缺点:仅平面表面; 不自我阴影

3.CG中的影子算法
•早期方法始于早期的渲染方法:例如 与扫描线集成算法(Appel,68)
•现在,两个最常见的方法是:阴影卷(Shadow volumes); 影子Z-Buffer
•通常,这两种方法的两个阶段:
1.独立查看 - 生成影子信息
2.查看依赖 - 渲染
•全局渲染算法可以用正确的
照明 - 请参阅以后的讲座

4.阴影卷(Shadow volumes )
•无形的空间扫除通过对象的阴影(封锁者occluder/创建者creator)
•通过剪辑获得的有限体积相对于任何视图卷
•可以集成到许多HSR中算法
•分为前后面(无形)阴影多边形

4.1区域光源
4.2实时阴影卷

•使用模板缓冲区( stencil buffer)进行快速硬件实现, eg Doom 3

除了在现代图形硬件上找到的颜色缓冲区和Z-Buffer外,模板缓冲区是一个额外的数据缓冲区。 缓冲液为每个像素,并在整数值上工作,通常为每个像素的深度为一个字节。 Z-Buffer和模板缓冲区通常在图形硬件的RAM中共享相同的区域。
在最简单的情况下,模板缓冲区用于限制渲染区域(刻板)。 模板缓冲区的更高级用法利用了Z-Buffer和渲染管道中的模板缓冲区之间的牢固连接。 例如,对于每个失败或通过深度测试的像素,可以自动增加/减小模板值。
最典型的应用程序仍然是将阴影添加到3D应用程序中。 它也用于平面反射。
其他渲染技术(例如门户网站渲染)以其他方式使用模板缓冲区; 例如,它可用于查找被门户网站遮盖的屏幕区域,并正确渲染这些像素。
可以通过使用OpenGL,Direct3D或Vulkan等API在计算机图形中访问模板缓冲区及其修饰符。

Doom 3 是2004年的生存恐怖第一人称射击游戏视频游戏,由ID软件开发,并由Activision发布。
Doom 3于2145年在火星上设置,那里的军事工业集团已将科学研究设施建立在远程管道,生物学研究和先进武器设计等领域。 传送实验打开了通往地狱的门户,导致恶魔对火星基地的灾难性入侵。 玩家控制着一名太空海军陆战队,该海军陆战队通过基地战斗,阻止恶魔攻击火星并到达地球。
Doom 3是一个至关重要的商业成功; 售出了超过350万张游戏的副本,它是迄今为止开发人员ID软件最成功的游戏。 批评者称赞了游戏的图形,演示和气氛,尽管评论者划分了游戏玩法与原始厄运的距离有多近,主要专注于简单地通过大量的敌人角色进行战斗。 该游戏之后是由神经软件开发的扩展包的复活。 2012年第四季度发行了一个扩展和重新制作的版本,标题为“ Doom 3:BFG版”,而基于BFG版本的版本发行了,没有在线多人游戏,简称为DOOM 3

5.Shadow Z-Buffer / Shadow映射
•提醒:阴影/视图双重性

深度缓冲区(也称为Z-Buffer)是计算机图形中使用的一种数据缓冲区,用于从特定的角度来表示3D空间中对象的深度信息。 深度缓冲区是渲染场景的帮助,以确保正确的多边形正确阻塞其他多边形。 画家的算法是确定重叠多边形的一种类似解决方案,该算法能够处理非偏见的场景元素,尽管以效率和不正确的结果为代价。
在3D渲染管道中,当对象在屏幕上投影时,将投影屏幕图像中生成片段的深度(z值)与已经存储在缓冲区中的值(深度测试)中的值进行了比较,并替换了它 如果新值更接近。 它与Rasterizer协同工作,该栅格计算彩色值。 如果不被另一个片段重叠,则将保存栅格的片段输出。
当查看包含部分或完全重叠的不透明对象或表面的图像时,无法完全看到那些远离查看器和其他对象后面的对象(即,某些表面隐藏在其他物体后面)。 如果没有管理重叠表面的机制,则表面将彼此呈现,如果要在其他物体后面,则不关心它们。 这些表面的识别和去除称为隐藏表面问题。

要检查重叠,计算机计算与第一个对象相对应的像素的Z值,并将其与Z-Buffer中同一像素位置的Z值进行比较。 如果计算出的Z值小于Z-buffer中已经在Z-buffer中的z值(即,新像素更接近),则将Z-Buffer中的当前Z值替换为计算值。 对于场景中的所有对象和表面(通常是并行),重复了这一点。 最后,Z-buffer将允许对通常的深度感知的正确复制:一个近距离物体隐藏在更远的地方。 这称为Z-Culling。

Z-Buffer具有与图像相同的内部数据结构,即2D阵列,唯一的区别是,它为每个屏幕像素而不是使用3个值创建颜色的颜色图像存储一个值。 这使Z-Buffer显得黑白,因为它没有存储颜色信息。 缓冲区具有与屏幕缓冲区相同的尺寸以保持一致性。

通常,通常在对象的多边形上执行主要的可见性测试(例如后面摘要)和次级可见性测试(例如重叠检查和屏幕剪辑),以跳过不必要的渲染的特定多边形。 相比之下,Z-Buffer相对较昂贵,因此进行初级和次要可见性测试可以减轻某些职责的Z-Buffer。
Z-Buffer的粒度对场景质量具有很大的影响:传统的16位Z-Buffer会导致两个物体彼此非常接近时,会导致工件(称为“ Z-tighting”或“缝制”)。 一个更现代的24位或32位Z-Buffer的行为要好得多,尽管没有其他算法就无法消除问题。 几乎从未使用过8位Z-Buffer,因为它的精度太少。

两阶段算法,每个阶段都有渲染通道
阶段1:从光的角度来看(无照明计算)“渲染”场景
阶段2:从眼睛角度渲染场景(包括照明计算)

5.1阶段1:从光的角度来看“渲染”场景
•没有照明计算
•将每个像素的深度存储在影子地图中(也称为深度图,因为
这是Z缓冲区)

5.2阶段2:从眼点渲染场景
•包括照明计算,即基于标准的Zbuffer HSR
•检查影子地图以确定阴影
•将表面点从眼(Xe,Ye,Ze)转换为光坐标
•将结果深度z’与阴影图中的深度进行比较
• If z’ > stored_depth(xl,yl), then pixel is in shadow:
The case A < B, therefore in shadow;
A= B, therefore unshadowed;
The case A > B, therefore unshadowed;

5.3偏见
•影子图(x,y)=Z’
•错误的自我阴影
•添加一点:影子图(x,y)+偏见<z’
•选择良好的偏见价值可以非常棘手

5.4多个灯
•单独的影子z(深度) - 延迟每个光源。
•不正确的阴影亮点 - 它们是变暗

5.5混叠
•抽样问题
•重新投影混叠 - 尤其是当相机和光是彼此相对
•降低阴影图分辨率增加了阴影边缘的块状外观并导致阴影破裂
•增加阴影图的分辨率会减少遮挡性

5.6过滤
•过滤深度?加权平均相邻的深度值
•过滤深度值不是有意义

5.7百分比更接近过滤
•而是过滤每个邻居的深度测试结果
•比较结果的加权平均值
•比较Aij <49.8
•0 0 0
0 1 1
1 1 1
•平均= 0.56
•因此,影子价值为56%
•5x5样品
•漂亮的抗原阴影
•使用较大的过滤器会产生假柔软的阴影
•设置偏见
•但是使偏见问题更棘手

6.摘要
•“几何阴影”,因为我们计算了阴影的形状,但是仅猜测其反射的光强度
•我们需要全球照明算法来确定更好的光强度
• 开发:阴影从光源隐藏;阴影不会在静态场景中改变
•可以在硬件中完成Shadow Z-Buffer: 对几何复杂性敏感不如
阴影卷;混叠问题
•由于高度计算的开销,阴影已经以与纹理映射的方式相同的方式 - 质量添加

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值