总结和提炼哪个在前
总结和提炼哪个在前 第一篇
首先,把在顶点上的水深度作为一个输入参数,这样,在着色器碰到岸边这样的微妙区域时,便可以自动进行校正。
因为水的高度需要计算,所以顶点位置的z分量就没什么用了。虽然我们可以利用这点来压缩顶点的数据量,但是选择把水深度编码在z分量中,是一个更好的选择。
更确切地说,就是把水体底部的高度放在顶点的z分量中,作为常数带入水的高度表中,这样通过相减,即可得到水深度。而同样,这里假定了一个恒定高度的水位表(constant-heightwater table)。
我们也使用水深度来控制水的不透明度、反射强度和几何波振幅。简单来说,即水浅的地方颜色浅,水深的地方颜色深。有了适当的水深度,也就可以去光的传播效果进行更完善的建模。
总结和提炼哪个在前 第二篇
使用变形目标(Morph Target)是表现复杂网格变形的常用方法。NVIDIA Demo团队使用此技术创建的Zoltar等Demo从每秒插值三零个网格开始,然后基于累计误差方案(Accumulated Error Scheme)去除关键帧。使得我们能够缩小文件并减少存储空间,最多可以将三分之二的原始关键帧,同时几乎不会出现可见的失真。在这种类型的网格插值中,任何给定时间中只有两个插值关键帧处于激活状态,而且他们是连续地执行的。另外,变形目标可以并行使用。
原文也中对变形目标(Morph Target)的具体实现进行了论述。
而蒙皮(Skinning)是一种网格变形方法,对网格中的每个顶点指定一组带有权重的矩阵(权重最大可增加到)。权重指明矩阵应该如何约束顶点。
为一个网格蒙皮做准备,通常要为网格创建一个中间状态,叫做绑定姿势(Bind Pose),这个姿势保持胳膊和腿略微分开,并且尽可能避免弯曲。
总结和提炼哪个在前 第三篇
阴影渲染(Shadow Rendering)
阴影贴图(Shadow Mapping)
模板阴影(stencil shadows)/ 阴影体(Shadow volume)
全方位阴影映射(Omnidirectional Shadow Mapping)
The End.
下次更新,《GPU Gems 一》全书核心内容提炼总结 · 下篇,再见。
With best wishes.
总结和提炼哪个在前 第四篇
首先,这篇文章也谈到了在实时计算机图形学中产生可见阴影的两个流行方法是:
模板阴影(Stencil Shadows,也被称Shadow Volume,阴影体)作在《Doom 三》中有所应用,优点是得到大量的GPU支持、独立于光源的种类、产生的阴影质量很高。但缺点是严重依赖于CPU,只能产生清晰的影子,需要很高的填充率,而且不能与硬件(hardware-tessellated)的表面一起使用。
阴影贴图(Shadow Mapping,也译作阴影映射)由Lance Williams于一九七八年引入计算机图形学,文章发布当时多数好莱坞电影都在使用这个方法,包括计算机渲染和特效。为了计算阴影,阴影映射在场景几何体上投射特殊的动态创建的纹理。它可以渲染清晰和模糊的影子,以及由不同类型的光源产生的阴影,它还可以与硬件镶嵌的表面以及GPU动画的网格(例如蒙皮网格)一起使用。
该文章主要关于了全方位阴影贴图(Omnidirectional Shadow Mapping)方法,该方法有两个主要步骤:
在创建阶段,对所有把阴影投射到阴影贴图纹理上的物体,渲染它们到光源的距离的平方。而在投射结算,渲染所有接受阴影的物体,并比较所渲染的像素到光源的距离的平方。以下为全方位阴影映射算法的伪代码:
总结和提炼哪个在前 第五篇
为了让每篇文章的干货更足,内容更加详实,本文与后续文章的的写作风格与文章结构,将在系列文章开篇中的规划的写作风格的基础上,做一些微调。
具体是将每篇需要提炼的章节内容分为两大部分:
其中,主核心内容,将选取大家最感兴趣、最有提炼价值的渲染相关的内容,会用更加详细的篇幅进行提炼总结。每章主核心内容将包含五个部分:
而次核心内容,则会用更加精炼的篇幅进行总结。每部分将包含:
总结和提炼哪个在前 第六篇
Dawn Demo中,毫无悬念地使用顶点着色器和像素着色器进行光照处理,顶点shader的主要功能是将坐标转换到投影空间,并执行那些不能在像素着色器中执行的数学运算。
采用单通道(one-pass)的光照解决方案,不需要另外其他的通道渲染,或alpha混合来创建皮肤表面。
文中提供了完整的顶点Shader和像素Shader的源代码,这里因为篇幅原因不再赘述,具体可以参考原文(PS:上文有贴出Web版的英文全书原文的链接)。
总结和提炼哪个在前 第七篇
因为我们的表面有定义明确的函数,所以可以直接计算任意给定点处的曲面方向,而不是依赖于有限差分技术。
副法线(Binormal)B和正切矢量T分别是x和y方向上的偏导数。对于二D水平面中的任意点(x,y),表面上的三维位置P为:
求副法线(Binormal)B方向,即对上式对x方向求偏导。而求正切矢量T方向,即对上式对y方向求偏导。
而法线N由副法线B和切线T的叉积给出:
总结和提炼哪个在前 第八篇
Example 七-一. 顶点着色器框架(Framework in the Vertex Shader)
Example 七-二. 对每草丛草体的动画的实现Shader代码(Code for Animation per Clusterof Grass Objects)
Example 七-三. 每顶点动画实现Shader代码(Code for Animation per Vertex)
Example 七-四. 每草体的动画实现Shader代码(Code for Animation per Grass Object)
总结和提炼哪个在前 第九篇
什么是衍射(Diffraction)?
小尺度的表面细节引起反射波彼此干扰,这个现象就是衍射。
首先,计算机绘图的大多数表面反射模型都忽略自然光的波动效果。当表面的细节比光的波长(约一um)大许多时,不存在问题。但对于小尺寸的细节,例如一个光盘的表面,波效应就不能忽略了。所以,对于小尺度的表面细节引起反射波彼此干扰的现象,即为衍射。
衍射使这些表面的反射光呈现五彩缤纷的图案,由光盘的精细反射可以看到这一现象。
衍射的实现,可以在Shader的顶点着色器上,也可以在片元着色器上,且实现可以在任何网格上进行,只需提供一个“切线向量”,和每顶点的法线及位置。而切线向量提供表面上窄条带的局部方向。对于一个光盘,其为轨道的方向,如下图。
对应给定衍射波长的颜色,可以使用简单近似的彩虹贴图。贴图从紫到红排列,而且提供彩虹的大部分颜色,用三个理想凹凸函数(峰值分别在蓝、绿和红的区域)简单混合而成。
而最终的衍射颜色是彩色的衍射图案和各项异性高光的简单相加的和。
总结和提炼哪个在前 第一零篇
需要对下图所示的方向波或圆形波进行选择。
对于两种类型的波,视觉特性和复杂性都是由干涉条纹引起的。
方向波需要的顶点shader处理指令较少,但是究竟选择何种波需要取决于模拟的场景。对于大的水体,方向波往往更好,因为它们是风吹动产生的波较好的模型。对于较小的池塘的水,产生波的原因不是由于风,而是诸如例如瀑布,水中的鱼,圆形波则更好一些。对于方向波,波的方向是在风向的一定范围内任意绘制的;对于圆形波,波中心是在某些限定的范围内任意绘制的。
总结和提炼哪个在前 第一一篇
阴影贴图(Shadow Map,又译作阴影映射)是渲染阴影的常见方法,也是渲染阴影领域的两大流派之一,但是它存在走样的问题。通常使用高分率的阴影贴图和增加阴影贴图的分辨率来反走样,也就是使用Stamminger和Drettakis 二零零二年提出的“透视阴影贴图( perspective shadow maps)”技术。但是,当光与表面接近于平行的时候,使用“透视阴影贴图”技术和增加阴影贴图分辨率就不起作用了,因为放大的倍数接近于无穷大。
高端渲染软件使用“临近的百分比过滤(Percentage-Closer Filtering , PCF)”技术解决走样问题。最初的PCF算法由Reeves等人一九八七年提出。其计算的是靠近光源表面的百分比,而不是在阴影中表面的百分比,具体是多次比较阴影贴图的每个像素,求其平均值。
且文中对传统的PCF算法做了改进,不再计算阴影贴图空间中被遮挡的区域,只是简单地在各处使用一个四 x 四个texel(纹素)的样本块。这个块应该大到能够有效地减少走样,但是不能达到要求大量样本和随机取样的程度。如下图。
可以看到三幅图中的显示效果区别很明显,图(c)中每像素取一六个样本,效果最为出色,达到了反走样的预期。
总结和提炼哪个在前 第一二篇
草地的动画,基本思想是以三角函数(尤其是正弦和余弦)为基础进行计算,且计算应该考虑到移动的位置和当前时间、风向和强度。
以基本思想为基础,实现起来有几种方法:
一)每草丛草体的动画(Animation per Cluster of Grass Objects)
二)每顶点的动画(Animation per Vertex)
三)每草体的动画(Animation per Grass Object)
三种方法各有优缺点,而文中都给出了具体算法步骤和实现的Shader源码,这里因为篇幅原因,便不展开分析了,具体可以参阅原文。
最终可以实现的渲染效果。
总结和提炼哪个在前 第一三篇
皮肤不像大多数在计算机渲染中建模的表面,因为它是由半透明的表皮、真皮和皮下组织等数层构成的。这可以用次表面散射来模拟。这种现象很普遍,当在太阳面前向上举起手,就能看到穿过皮肤的桔红色的光。
皮肤下的散射在所有的角度上显现皮肤形态,使它具有了柔软的、与众不同的特征。
在这之前有一些小组尝试使用多层纹理贴图来模仿皮肤的复杂性,但一般而言,这个方法比较难管理,美术同学很难通过预想,混合出最终符合预期的效果。
相反,文中使用单张彩色贴图,通过着色程序来增加色彩的变化。
另外,皮肤具有一些极细微的变化,会影响其反射特性。这对皮肤外观有微妙的影响,特别是当光线直接与相机位置相反时,皮肤的表现则是存在边缘(Edge)与轮廓光照(Rim Lighting),这时,需要皮肤轮廓边缘的光照,或给皮肤边缘加上光晕。
真正的皮肤具有一些细微的特征,比如汗毛和毛孔能捕捉光线。尽管这些细节用于显式地建模是太不明显了,但我们还是希望得到一个合适、整体更逼真的皮肤渲染外观。在特写时,可以增加凹凸贴图,提供一些额外的细节,特别是一些小的皱纹。但需要注意,我们想要的是柔软的皮肤外观,而不是光闪闪的油腻的塑料。另外,凹凸贴图通常只需静距离特写时才可见。
我们可以通过建模来近似这两个着色属性,建模可以是基于表面法线的简单公式,或者是基于光线或视线矢量的简单公式。
通过认识,我们可以将上述两种渲染特性(次表面散射和边缘光照),建模为基于表面法线和照明或观察向量的简单公式,从而近似出两种着色属性。尤其是沿着Dawn的轮廓边缘,对她身后的光线取样,按照观察向量的索引,让“穿过”Dawn的光与她的基础皮肤色调混合,从而创建次表面散射和边缘光照的着色效果。尤其是背景图中更加明亮的区域。如下图。
总结和提炼哪个在前 第一四篇
首先,噪声函数的目的,是在三维空间中提供一种可以有效率地实现、可重复,伪随机的信号。其信号的能带有限(band-limited),大部分能量集中在一个空间频率附近,而视觉上是各向同性(isotropic)的,统计上不随旋转变化。
一般的想法是创建某种信号,类似于一个完全的随机信号(即白噪声),通过低通滤波后,滤除了所有的空间高频率而变得模糊。有如沙丘你缓慢上升的山包和下落的低谷。
最初的噪声在一九八三年实现,一九八五 (Perlin 一九八五)发表,思想是使用埃尔米特-样条(Hermitespline)插值法等方法实现,原文中对此方法的步骤进行了描述。
这篇文章从两个方面对最初的噪声方法的不足进行了改进:
插值的特性以及伪随机斜率场(field of pseudo-random gradients)的特性。
而另外一个噪声的思路是,用体积噪声制造程序式纹理(Procedural texturing using volumetric noise),这样可以不创建显式的纹理图像,来得到自然的材质。这种方法在当年的大片《指环王》中,已经有了广泛应用。
总结和提炼哪个在前 第一五篇
当时id software的《Doom 三》就是采用阴影体(Shadow Volumes)技术来对阴影进行的渲染。具体思想是在模板(stencil)缓冲标记阴影的像素,把像素分为阴影或照明两种类型,接着调节负责光照的像素程序,使阴影像素的照明贡献度为零。
阴影体技术可以为点光源、聚光灯和方向光源创建清晰的、逐像素进度的阴影。单个物体可以被多个光源照亮,而且光有任意颜色和衰减度。阴影从三角形网格投射到深度缓冲区上。这意味着被遮挡的物体,可以是带有深度缓冲区的网格、公告板、粒子系统或预先渲染的场景。
较其他运算相比,阴影体可以更好地处理许多制作困难的阴影场景,如一个插在万圣节南瓜灯内部的光源。
阴影体的缺点是对那些没能正确表达自身形状的网格的阴影表达效果并不理想。如一些带透明区域的公告板,粒子系统,或带alpha粗糙度的纹理网格(如一片树叶)。这些投影体基于他们的真实网格产生阴影,阴影与物体的真实形状并不匹配。而阴影体的另一个缺点是对带裂缝的网格支持不太好。文中也表示,当时阴影体运行的理想场景是顶部俯视。
总之,这篇文章对McGuire等人二零零三年提出的方法进行了很好的描述、分析与实践。而在这篇文章发出之后的若干年,阴影体技术得到了各种进一步地优化与改进。
总结和提炼哪个在前 第一六篇
首先文章尝试了两个方案:
完全程序化的火焰( fully procedural flames)和屏幕空间基于变形的二维火焰(screen-space 二D distortion-based flames.),经过试验都未达预期。
于是改采用视频纹理精灵(video-textured sprites ),最终达到预期,并实现出了逼真的火焰,且占用很少的GPU资源。
其中,烟的生成使用粒子系统创建一个烟雾生成器。而所需的光照可以采用不同的技术达到,如光线投射。
而火焰和烟的混合,比较常规地使用相加混合(additive blending)。
使火焰增加多样性,文中使用了水平和垂直翻转(沿着u和v轴)。而使用任意旋转可以更加具表现力。
总结和提炼哪个在前 第一七篇
Example 三-一. 从CPU应用程序接收的每个顶点数据示例代码(The Per-Vertex DataReceived from the CPU Application)
Example 三-二. 输出顶点的数据结构示例代码(The Data Structure of the OutputVertices)
Example 三-三. Dawn脸部的皮肤渲染顶点着色器示例代码(A Sample Vertex Shader forDawn's Face)
Example 三-四. Dawn脸部的皮肤渲染片元着色器代码(The Fragment Shader for Dawn'sFace)
总结和提炼哪个在前 第一八篇
水的焦散(Water Caustics)的定义:光从弯曲的表面反射或者折射,只聚焦在受光面的某些区域,于是就是产生焦散的现象。
首先,从模拟的观点出发,焦散其实可以通过正向或逆向光线追踪计算。
正向光线追踪中,要追踪从光线射出并穿过场景的光线,累计其在不断地区的贡献。
而逆向光线追踪,则以相反的过程工作,从海底开始,按照与入射相反的顺序逆向根据光线,计算给定点的所有入射光线总和。
而该文章中,前一节关于了逆向蒙特卡洛光线追踪的一个简化,并大胆假设一些光线对焦散有贡献,并只计算到达海底光线的一个子集,因此,该方法计算消耗非常少,却产生了尽管在物理上不正确但是非常逼真的焦散图样和效果。由于整个效果看起来非常令人信服,尤其是图像质量,使得这个方法非常值得实现。文中用HLSL和OpenGL都进行了实现,并按照惯例,提供了源码。
该算法的伪代码如下: