找回密码
 立即注册
查看: 260|回复: 0

《Real-Time Rendering 4th》第三章 图形处理单元 The ...

[复制链接]
发表于 2023-4-1 16:27 | 显示全部楼层 |阅读模式
3.7 几何着色器(The Geometry Shader)

几何着色器可以将图元转换为其他图元,这是细分阶段无法做到的。例如,三角形网格可以通过每个三角形创建线条边缘来转换为线框视图。或者,线条可以被面向观众的四边形替换,从而使线框渲染具有更粗的边缘[1492]。几何着色器在2006年底DirectX 10发布时被添加到硬件加速图形管道中。它位于管线中的细分着色器之后,使用是可选的。虽然它是Shader Model 4.0的必要部分,但在早期的Shader Model中并未使用。OpenGL 3.2和OpenGL ES 3.2也支持这种类型的着色器。
几何着色器的输入是单个对象及其关联的顶点。该对象通常由三角形条带、线段或简单的点组成。可以通过几何着色器定义和处理扩展图元。特别地,可以传入三角形外的三个额外顶点,并且可以使用折线上的两个相邻顶点。参见图3.12。使用DirectX 11和Shader Model 5.0,您可以传入更复杂的patch,最多可达32个控制点。也就是说,曲面细分阶段对于patch生成更有效[175]。
几何着色器处理这个图元并输出零个或多个顶点,这些顶点被视为点、折线或三角形条带。请注意,几何着色器可以不生成任何输出。通过这种方式,可以通过编辑顶点、添加新图元和删除其他图元来选择性地修改网格。
几何着色器旨在修改传入数据或制作有限数量的副本。例如,一种用途是生成六个变换后的数据副本,以同时渲染立方体贴图的六个面;参见第10.4.3节。它还可以用于高效创建级联阴影贴图,以生成高质量阴影。利用几何着色器的其他算法包括从点数据创建可变大小的粒子、沿轮廓挤出鳍状物以进行皮毛渲染以及查找阴影算法的对象边缘。参见图3.13了解更多示例。这些和其他用途将在本书的其余部分中讨论。



图3.13. 几何着色器(GS)的一些用途。在左侧,使用GS实时执行Metaball等值面细分。在中间,使用GS和流输出进行线段的分形细分,并通过GS生成广告牌以显示闪电。在右侧,通过使用顶点和几何着色器以及流输出来执行布料模拟。(图片来自NVIDIA SDK 10 [1300] 样本,由NVIDIA Corporation提供。)

DirectX 11增加了几何着色器使用实例化的能力,其中几何着色器可以在任何给定图元上运行一定次数[530,1971]。在OpenGL 4.0中,这是通过调用计数指定的。几何着色器还可以输出多达四个流(streams)。一个流可以被发送到渲染管线以进一步处理。所有这些流都可以选择性地发送到流输出渲染目标(stream output render targets)。
几何着色器保证以与输入相同的顺序输出图元的结果。这会影响性能,因为如果多个着色器核心并行运行,则必须保存并排序结果。这和其他因素都不利于几何着色器在单次调用中复制或创建大量几何图形[175,530]。
在发出绘制调用后,在GPU上管线中只有三个位置可以创建工作:光栅化、细分阶段和几何着色器。在这些中,几何着色器的行为在考虑所需资源和内存时最不可预测,因为它是完全可编程的。实际上,几何着色器通常很少使用,因为它与GPU的优势不匹配。在一些移动设备上,它是用软件实现的,因此在那里不鼓励使用它[69]。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-23 15:46 , Processed in 0.099967 second(s), 28 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表