Realtime Rendering 3rd笔记 7

本文介绍了像素着色器(PS)的工作原理及其在图形渲染管线中的作用,包括其输入输出、限制及如何影响片段的颜色和深度值。此外,还讨论了合并阶段如何将片段的深度值和颜色与帧缓冲区结合。

3.6 The Pixel Shader

在vs和gs执行之后,图元被clipped并set up准备光栅化,这个阶段是很固定的,不能编程(值得注意的例外是pixel shader可以指定使用哪种插值,perspective corrected or screen space, or none)。每个三角形依次处理,顶点数据在三角形内插值。pixel shader是下一个可编程阶段。在OpenGL中,被称作fragmenet shader,这在某种角度是一个更好的名字。这个意思是说,一个三角形全部或部分的覆盖每个像素,并且材质描绘为不透明的或透明的。光栅器不直接修改像素的颜色,而是生产数据,描述三角形如何覆盖像素。之后在merging阶段,片段的数据被使用来修改像素。
vs的输出成为ps的输入,SM4.0中一共有16个vector可以从vs传输到ps,如果使用gs,可以输出32个vector到ps。SM3.0之后,给ps的额外的输入被加入,例如三角形的哪个面是可见的作为一个输入标志。片段的屏幕坐标对于ps也是可用的。
ps的限制是他只能影响他所处理的片段,不能将结果直接传递给相邻的像素,而是使用顶点插值的数据和存储的常量以及纹理数据。然而,这个限制也不是太严重,因为可以使用image processing来影响相邻的像素(10.9)。
一种情况下ps可以访问临近像素的信息(虽然是间接的),即计算梯度(gradient)或者derivative information。The pixel shader has the ability to take any value and compute the amount by which it changes per pixel along the x and y screen axes.这对于多种计算和纹理寻址很有用。梯度信息不能被动态控制流影响的shader访问。
ps一般是设置片段的颜色,颜色在最终的merging阶段被合并。光栅化阶段产生的深度值也可以被ps修改。stencil buffer的值是不可以修改的,会直接发送到merge阶段。从SM2.0开始,ps可以丢弃(discard)输入的片段数据,即不产生输出。这种操作是消耗性能的,因为GPU将不能进行优化。在SM4.0中,fog计算和alpha test从merge阶段被移动到ps中。(es2.0也一样)
ps可以进行的处理,这种在单一pass中计算任意数目值的能力促进了multiple render targets(MRT)的使用。每个片段可以生成多个向量并被保存到不同的多个buffer中,这些buffer必须是相同尺寸的,并且一些架构需要他们具有相同的bit depth(尽管如果需要格式可以不同)。PS输出寄存器的数量参考独立的buffer的数量,例如4或8。不同于color buffer,附加的target有一些限制。例如,不能使用反锯齿。尽管有这些限制,MRT功能对于更有效的执行渲染算法是一个强大的辅助。如果有很多中间结果的image需要从一批相同的数据中计算出来,只需要一个rendering pass就可以了,而不是每个pass对应一个输出buffer。另外的一个MRT相关的关键能力是从产生的image读取回数据作为纹理使用。

3.7 The Merging Stage

merge阶段独立片段的深度值和颜色和frame buffer进行组合。stencil-buffer,Z-buffer操作在这阶段进行。另外一个操作是color blending。merge阶段是不可编程的,但也不完全固定,他可以通过配置来定制操作。特别是color blending,可以使用很多不同的操作,例如乘法,加法,减法,使用颜色和alpha值;其他的操作如取最小值和取最大值也是可能的,以及还有位逻辑操作。DirectX10增加了从pixel shader输出两个颜色和frame buffer上的颜色进行混合的功能,被称作dual-color blending。
如果采用了MRT功能,blending可以在多个buffer上进行。DirectX10.1引入了一个功能:在每个MRT buffer上进行不同的混合操作,在之前的版本中,所有的buffer只能进行相同的混合操作。(注意dual-color blending和MRT不兼容)

MATLAB主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性内容概要:本文主要介绍了一种在MATLAB环境下实现的主动噪声和振动控制算法,该算法针对较大的次级路径变化具有较强的鲁棒性。文中详细阐述了算法的设计原理与实现方法,重点解决了传统控制系统中因次级路径动态变化导致性能下降的问题。通过引入自适应机制和鲁棒控制策略,提升了系统在复杂环境下的稳定性和控制精度,适用于需要高精度噪声与振动抑制的实际工程场景。此外,文档还列举了多个MATLAB仿真实例及相关科研技术服务内容,涵盖信号处理、智能优化、机器学习等多个交叉领域。; 适合人群:具备一定MATLAB编程基础和控制系统理论知识的科研人员及工程技术人员,尤其适合从事噪声与振动控制、信号处理、自动化等相关领域的研究生和工程师。; 使用场景及目标:①应用于汽车、航空航天、精密仪器等对噪声和振动敏感的工业领域;②用于提升现有主动控制系统对参数变化的适应能力;③为相关科研项目提供算法验证与仿真平台支持; 阅读建议:建议读者结合提供的MATLAB代码进行仿真实验,深入理解算法在不同次级路径条件下的响应特性,并可通过调整控制参数进一步探究其鲁棒性边界。同时可参考文档中列出的相关技术案例拓展应用场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值