书籍详情
GPU精粹2:高性能图形芯片和通用计算编成技巧
作者:(美)法尔(Pharr,M.) 编著,龚敏敏 翻译
出版社:清华大学出版社
出版时间:2007-05-01
ISBN:9787302139430
定价:¥128.00
购买这本书可以去
内容简介
本书延续了畅销书《GPU精粹》的第1卷,细述了在今天的图形处理器(GPU)上最新的可编程技术。随着GPU进入手机、手持游戏设备和游戏机领域,GPU专业知识在今天的竞争环境中显得更为重要。实时图形程序员会发现用于建立高级的视觉特效、管理复杂场景的策略和高级图像处理技术的最新算法。读者还会学到一些新方法,把GPU的强大处理能力运用到其他计算密集型程序中,比如科学计算和金融。书中有20章专门讲述GPGPU编程,从基本的概念到高级技术。本书提供了一些专家撰写的最前沿的GPU编程技术,为读者介绍了利用GPU巨大功能的实用方法。
作者简介
《GPU精粹2》的主编是NVIDIA公司的软件工程师Matt Pharr。Matt也是Physically Based Rendering:From Theory to Implementation(Morgan Kaufmann,2004)一书的合著者之一。“GPU精粹”系列编辑是Randima Fernando。Randy 主编了“GPU精粹”的第1卷(Addison-Wesley,2004),而且是The Cg Tutorial(Addiosn-Wesley,2003)的合著者,其论文“Adaptive Shadow Maps”曾发表于SIGGRAPH2001。
目录
第Ⅰ部分 几何复杂性
第1章 实现照片级真实感的虚拟
植物 5
1.1 场景管理 6
1.1.1 种植栅格 6
1.1.2 种植策略 6
1.1.3 实时优化 7
1.2 草层 7
1.2.1 通过溶解模拟Alpha透明 9
1.2.2 变化 10
1.2.3 光照 11
1.2.4 风 12
1.3 地面杂物层 12
1.4 树和灌木层 13
1.5 阴影 14
1.6 后处理 15
1.6.1 天空圆顶辉散 16
1.6.2 全场景辉光 16
1.7 本章小结 17
参考文献 18
第2章 使用基于GPU几何体剪切图
的地形渲染 19
2.1 几何体剪切图简介 19
2.2 GPU实现概览 21
2.2.1 数据结构 22
2.2.2 剪切图大小 22
2.3 渲染 23
2.3.1 活动层 23
2.3.2 顶点和索引缓冲区 23
2.3.3 视锥剪切 24
2.3.4 DrawPrimitive调用 25
2.3.5 顶点着色器 25
2.3.6 像素着色器 27
2.4 更新 28
2.4.1 升采样 28
2.4.2 残差 29
2.4.3 法线图 30
2.5 结果和讨论 30
2.6 本章小结和改进 31
2.6.1 顶点纹理 31
2.6.2 去掉法线图 31
2.6.3 不需要存储空间的地形
合成 31
参考文献 31
第3章 几何体实例化的内幕 33
3.1 为什么要对几何体实例化? 34
3.2 定义 34
3.2.1 几何体包 34
3.2.2 实例属性 35
3.2.3 几何体实例 35
3.2.4 渲染和纹理场景 35
3.2.5 几何体批次 36
3.3 实现 37
3.3.1 静态批次 38
3.3.2 动态批次 39
3.3.3 顶点常量实例化 40
3.3.4 几何体实例API批次 43
3.4 本章小结 46
参考文献 48
第4章 分段缓冲 49
4.1 问题空间 49
4.2 解决方案 50
4.3 方法 50
4.3.1 分段缓冲的第一步 50
4.3.2 分段缓冲的第二步 50
4.3.3 分段缓冲的第三步 51
4.4 改进分段缓冲技术 51
4.5 本章小结 51
参考文献 51
第5章 用多流来优化资源管理 53
5.1 概览 53
5.2 实现 55
5.2.1 DirectX 9.0中的多流 55
5.2.2 资源管理 57
5.2.3 处理顶点 59
5.3 本章小结 63
参考文献 63
第6章 让硬件遮挡查询发挥作用 65
6.1 引言 65
6.2 受益于遮挡查询的场景 66
6.3 遮挡裁减 66
6.4 层的停等方法 67
6.4.1 为什么使用层 67
6.4.2 层结构 67
6.4.3 层的算法 68
6.4.4 问题1:停滞 68
6.4.5 问题2:查询的额外开销 68
6.5 一致性层裁减 69
6.5.1 想法1:猜测 69
6.5.2 想法2:提升,提升 70
6.5.3 算法 70
6.5.4 实现细节 71
6.5.5 停滞比较少的原因 73
6.5.6 查询较少的原因 73
6.5.7 如何遍历层 73
6.6 优化 74
6.6.1 用真正的几何体查询 74
6.6.2 只有Z的渲染遍 74
6.6.3 近似的可见性 74
6.6.4 保守的可见性测试 74
6.7 本章小结 75
参考文献 76
第7章 带有位移映射的细分表面自
适应镶嵌 77
7.1 细分表面 77
7.1.1 一些定义 78
7.1.2 Catmull-Clark细分 78
7.1.3 用细分来镶嵌 79
7.1.4 面片化表面 80
7.1.5 GPU镶嵌算法 80
7.1.6 致密镶嵌 84
7.2 位移映射 84
7.2.1 改变平滑度测试 85
7.2.2 用法线映射着色 85
7.3 本章小结 86
参考文献 86
第8章 使用距离函数的逐像素位移
映射 87
8.1 简介 87
8.2 准备工作 89
8.3 距离映射算法 89
8.4 计算距离图 92
8.5 着色器 92
8.5.1 顶点着色器 92
8.5.2 片段着色器 92
8.5.3 关于过滤的注意事项 94
8.6 结果 94
8.7 本章小结 95
参考文献 96
第Ⅱ部分 着色、光照和阴影
第9章 S.T.A.L.K.E.R.中的延期
着色 101
9.1 引言 101
9.2 几种观点 102
9.3 优化 103
9.3.1 优化的对象 103
9.3.2 光照优化 104
9.3.3 G缓冲区建立的优化 106
9.3.4 阴影优化 108
9.4 改善质量 109
9.4.1 “虚拟位置”的威力 109
9.4.2 环境遮挡 110
9.4.3 材质和表面光照的交互 111
9.5 反走样 111
9.5.1 高效的调和映射 113
9.5.2 处理透明 114
9.6 尝试过但没有包含入最终
代码的内容 114
9.6.1 高程图 114
9.6.2 实时的全局照明 115
9.7 本章小结 115
参考文献 116
第10章 动态辐照度环境映射实时
计算 117
10.1 辐照度(irradiance)环境
映射 117
10.2 球面调和卷积 119
10.3 映射到GPU上 120
10.3.1 空域到频域 121
10.3.2 卷积和恢复 122
10.4 以后的工作 123
10.5 本章小结 123
参考文献 123
第11章 近似的双向纹理函数 125
11.1 引言 125
11.2 采集 126
11.2.1 建立和采集 126
11.2.2 汇集着色图 127
11.3 渲染 128
11.3.1 细节算法 128
11.3.2 实时渲染 129
11.4 结果 130
11.5 本章小结 132
参考文献 132
第12章 基于贴面的纹理映射 133
12.1 方法简介 134
12.2 纹理贴面的构造 135
12.3 纹理贴面打包 135
12.4 纹理贴面映射 137
12.5 mipmap问题 138
12.6 本章小结 140
参考文献 140
第13章 在GPU上实现mental
images的Phenomena
渲染器 141
13.1 引言 141
13.2 着色器和Phenomena 142
13.3 用Cg实现Phenomena 143
13.3.1 Cg顶点程序和可变
参数 144
13.3.2 片段程序着色器的main()
入口点 145
13.3.3 通用着色器接口 145
13.3.4 一个简单的着色器
例子 146
13.3.5 全局的状态变量 148
13.3.6 光着色器 149
13.3.7 纹理着色器 151
13.3.8 凹凸映射 152
13.3.9 环境着色器和体着
色器 153
13.3.10 返回结构体的着色器 154
13.3.11 渲染毛发 154
13.3.12 组合所有东西 155
13.4 本章小结 155
参考文献 156
第14章 动态环境遮挡和间接光照 157
14.1 表面元素 158
14.2 环境遮挡 158
14.2.1 多遍阴影算法 160
14.2.2 改善性能 160
14.3 间接光照和面光源 162
14.4 本章小结 164
参考文献 164
第15章 蓝图渲染和草图绘制 165
15.1 基本原理 166
15.1.1 中间渲染结果 166
15.1.2 边增强 166
15.1.3 深度子图形渲染 167
15.2 蓝图渲染 167
15.2.1 深度剥离 167
15.2.2 析取可见边和不可
见边 169
15.2.3 合成蓝图 170
15.2.4 深度屏蔽 171
15.2.5 使用蓝图渲染显示
建筑 171
15.3 草图渲染 171
15.3.1 边和颜色面片 172
15.3.2 应用不确定性 172
15.3.3 调整深度 173
15.3.4 草图渲染的变体 173
15.3.5 控制不确定性 174
15.3.6 减少雨景效果 175
15.4 本章小结 176
参考文献 176
第16章 精确的大气散射 179
16.1 引言 179
16.2 解散射方程 180
16.2.1 Rayleigh散射与Mie
散射 180
16.2.2 相位函数 181
16.2.3 外向散射方程 181
16.2.4 内向散射方程 182
16.2.5 表面散射方程 182
16.3 实时渲染 182
16.4 挤入着色器中 184
16.4.1 去除一个维度 184
16.4.2 去除其他维度 184
16.5 实现散射的着色器 185
16.5.1 顶点着色器 185
16.5.2 片段着色器 187
16.6 增加高动态范围渲染 188
16.7 本章小结 188
参考文献 189
第17章 利用像素着色器分支的
高效模糊边缘阴影 191
17.1 现有的阴影生成技术 191
17.2 用单张阴影图产生模糊
阴影 192
17.2.1 模糊尖锐边缘阴影 192
17.2.2 提高效率 195
17.2.3 实现细节 196
17.3 本章小结 199
参考文献 200
第18章 将顶点纹理位移用于水的
真实感渲染 201
18.1 水的模型 202
18.2 实现 202
18.2.1 水的表面模型 202
18.2.2 实现细节 203
18.2.3 对高度图采样 203
18.2.4 质量的提高与优化 204
18.2.5 渲染局部的扰动 208
18.3 本章小结 209
参考文献 209
第19章 通用的折射模拟 211
19.1 基本方法 212
19.2 折射掩码 213
19.3 示例 215
19.3.1 水的模拟 215
19.3.2 玻璃的模拟 217
19.4 本章小结 219
参考文献 219
第Ⅲ部分 高质量渲染
第20章 快速三阶纹理过滤 225
20.1 高阶过滤 225
20.2 快速递归三次卷积 226
20.3 mipmapping 230
20.4 导数重建 232
20.5 本章小结 235
参考文献 236
第21章 高质量反走样的光栅化 237
21.1 概述 237
21.2 降采样 239
21.2.1 与现有软硬件的对比 239
21.2.2 用GPU进行降采样 240
21.3 延伸 240
21.4 过滤器的细节 241
21.5 两遍分离式的过滤器 242
21.6 分块和累加 243
21.7 代码 243
21.7.1 渲染循环 244
21.7.2 降采样类 245
21.7.3 实现细节 246
21.8 本章小结 246
参考文献 247
第22章 快速的预过滤线条 249
22.1 为什么尖锐的直线看起来很
糟糕 249
22.2 限制信号的带宽 250
22.3 预处理 252
22.4 运行时 253
22.4.1 线段的建立(CPU) 253
22.4.2 表查找(GPU) 254
22.5 实现的问题 256
22.5.1 绘制宽线 256
22.5.2 组合多条线段 256
22.6 示例 256
22.7 本章小结 258
参考文献 258
第23章 Nalu Demo的头发动画和
渲染 261
23.1 头发的几何体 262
23.1.1 布局和增长 262
23.1.2 控制头发 263
23.1.3 数据流 263
23.1.4 镶嵌 263
23.1.5 插值 264
23.2 动力学和碰撞 265
23.2.1 约束条件 265
23.2.2 碰撞 266
23.2.3 鳍 266
23.3 头发的着色 267
23.3.1 用于头发的实时反射
模型 268
23.3.2 头发中实时的体化阴影 271
23.4 本章小结和未来的工作 274
参考文献 274
第24章 使用查找表加速颜色变换 275
24.1 查找表的基础知识 275
24.1.1 一维查找表 275
24.1.2 三维查找表 276
24.1.3 插值 278
24.2 实现 278
24.2.1 把查找表映射到GPU
的策略 278
24.2.2 Cg着色器 278
24.2.3 系统集成 280
24.2.4 把三维查找表扩展到用
于高动态范围图像 281
24.3 本章小结 282
参考文献 282
第25章 Apple Motion中的GPU
图像处理 285
25.1 设计 285
25.1.1 喜爱的和厌恶的 285
25.1.2 选择语言 287
25.1.3 CPU向后支持 287
25.2 实现 288
25.2.1 GPU资源的限制 288
25.2.2 被零除 289
25.2.3 丢失的顶点分量 289
25.2.4 双线过滤 290
25.2.5 高精度存储 294
25.3 调试 294
25.4 本章小结 295
参考文献 296
第26章 实现改进的Perlin噪声 297
26.1 随机但平滑 297
26.2 存储与计算 297
26.3 实现细节 298
26.4 本章小结 302
参考文献 302
第27章 高级的高质量过滤 303
27.1 在GPU上实现过滤 303
27.1.1 访问图像样本 303
27.1.2 卷积过滤 304
27.2 数字图像的重采样 307
27.2.1 背景知识 307
27.2.2 反走样问题 307
27.2.3 图像重建 310
27.3 冲击过滤: 锐化图像的方法 312
27.4 过滤器的实现技巧 314
27.5 高级应用 314
27.5.1 时间变形 314
27.5.2 运动模糊的消除 314
27.5.3 自适应的纹理过滤 315
27.6 本章小结 315
参考文献 315
第28章 Mipmap级的测量 317
28.1 哪个mipmap层是可
见的? 318
28.2 GPU抢险队 318
28.2.1 像素点计数 318
28.2.2 引擎中的实际考虑 321
28.2.3 扩展 322
28.3 实验结果 324
28.4 本章小结 325
参考文献 326
第Ⅳ部分 GPU的通用计算:初级读本
第29章 流式体系结构和技术趋势 331
29.1 技术趋势 331
29.1.1 核心技术趋势 331
29.1.2 后果 332
29.2 高性能计算的关键 334
29.2.1 高效计算的方法 334
29.2.2 高效通信的方法 335
29.2.3 与CPU对比 335
29.3 流式计算 336
29.3.1 流式编程模型 336
29.3.2 构建一个流式处理器 337
29.4 未来和挑战 338
29.4.1 技术趋势 338
29.4.2 功耗管理 338
29.4.3 支持更高的可编程性和
功能性 339
29.4.4 来自CPU的GPU功能性
(或反之亦然) 339
参考文献 339
第30章 GeForce 6系列GPU的
体系结构 341
30.1 GPU如何适合于整体计算
系统 342
30.2 整体系统体系结构 342
30.2.1 图形操作的功能结构图 343
30.2.2 非图形操作的功能结
构图 346
30.3 GPU特性 347
30.3.1 固定函数特性 348
30.3.2 着色器Model 3.0编程
模型 349
30.3.3 支持的数据存储格式 353
30.4 性能 354
30.5 达到最佳性能 354
30.5.1 积极地使用z裁减 355
30.5.2 加载数据时利用纹理
数学 355
30.5.3 使用片段程序的分支 355
30.5.4 尽可能使用fp16作中
间值 355
30.6 本章小结 356
第31章 把计算概念映射到GPU 357
31.1 数据并行的重要性 357
31.1.1 哪种类型的计算可以很
好地映射到GPU 357
31.1.2 示例:在栅格上模拟 358
31.1.3 流通信:聚集与散布 359
31.2 GPU计算资源清单 359
31.3 CPU-GPU类比 362
31.3.1 流:GPU纹理 = CPU
数组 362
31.3.2 核:GPU片段程序 = CPU
“内循环” 362
31.3.3 渲染到纹理 = 反馈 362
31.3.4 几何体光栅化 = 计算的
调用 363
31.3.5 纹理坐标 = 计算的域 363
31.3.6 顶点坐标 = 计算的
范围 363
31.3.7 缩减 363
31.4 从类比到实现 364
31.5 一个简单的例子 366
31.6 本章小结 368
参考文献 368
第32章 尝试GPU计算 369
32.1 选择快速算法 369
32.1.1 局部性 369
32.1.2 允许计算的准则 370
32.1.3 考虑下载和读回 371
32.2 了解浮点 371
32.3 实现散列 373
32.3.1 转换成聚集 373
32.3.2 地址排序 374
32.3.3 渲染点 375
32.4 本章小结 375
参考文献 376
第33章 在GPU上实现高效的并行
数据结构 377
33.1 流式编程 377
33.2 GPU存储器模型 379
33.2.1 存储器体系结构 379
33.2.2 GPU流类型 380
33.2.3 GPU核的存储器访问 381
33.3 基于GPU的数据结构 382
33.3.1 多维数组 382
33.3.2 结构体 387
33.3.3 稀疏数据结构 387
33.4 性能考虑 391
33.4.1 依赖的纹理读取 391
33.4.2 计算频度和程序特化 391
33.4.3 Pbuffer Survival Guide 392
33.5 本章小结 393
参考文献 393
第34章 GPU流程控制习惯用法 395
34.1 流程控制的挑战 395
34.2 基本的流程控制策略 396
34.2.1 判定 396
34.2.2 把分支向着流水线上端
移动 396
34.2.3 z裁减 397
34.2.4 分支指令 399
34.2.5 选择一种分支机制 399
34.3 使用遮挡查询的数据依赖
循环 400
34.4 本章小结 400
第35章 GPU程序优化 401
35.1 数据并行计算 401
35.1.1 指令级并行性 401
35.1.2 数据级并行性 403
35.2 计算频率 404
35.2.1 循环内不变量的预
计算 405
35.2.2 用查找表进行预计算 406
35.2.3 避免内循环分支 407
35.2.4 swizzle操作 407
35.3 评价和负载平衡 408
35.4 本章小结 409
参考文献 410
第36章 用于GPGPU应用程序的
流式缩减操作 411
36.1 通过紧缩来过滤 411
36.1.1 累加和扫描 412
36.1.2 通过搜索/聚集来散布 413
36.1.3 过滤性能 415
36.2 动机:碰撞检测 416
36.3 用于细分表面的过滤 419
36.4 本章小结 421
参考文献 421
第Ⅴ部分 面向图像的计算
第37章 GPU上的八叉树纹理 425
37.1 一个GPU加速的层次结构:
N3树 426
37.1.1 定义 426
37.1.2 实现 427
37.2 应用1:在网格表面上色 431
37.2.1 建立八叉树 431
37.2.2 上色 432
37.2.3 渲染 432
37.2.4 把八叉树纹理转换成标准
2D纹理 434
37.3 应用2:表面模拟 436
37.4 本章小结 437
参考文献 438
第38章 使用光栅化的高质量全局照
明渲染 439
38.1 通过光栅化的全局照明 440
38.2 最终聚集简介 441
38.2.1 两遍的方法 441
38.2.2 最终聚集 441
38.2.3 两遍方法的问题 442
38.3 通过光栅化的最终聚集 443
38.3.1 最终聚集光线的聚类 443
38.3.2 光线投射作为多次平行
投影 445
38.4 实现细节 446
38.4.1 初始化 446
38.4.2 深度剥离 446
38.4.3 采样 447
38.4.4 性能 447
38.5 GPU上的全局照明渲染器 448
38.5.1 第一遍 448
38.5.2 生成可见点数据 448
38.5.3 第二遍 448
38.5.4 其他解决方案 449
38.6 本章小结 451
参考文献 451
第39章 使用逐步求精辐射度方法的
全局照明 453
39.1 辐射度的基础 454
逐步求精 454
39.2 GPU实现 455
39.2.1 使用半球投影的可
见性 456
39.2.2 构成因子的计算 458
39.2.3 选择下一个发射者 459
39.3 渐进细分 459
39.3.1 纹理四叉树 459
39.3.2 四叉数细分 460
39.4 性能 460
39.5 本章小结 460
参考文献 461
第40章 GPU上的计算机视觉 463
40.1 引言 463
40.2 实现框架 463
40.3 应用示例 464
40.3.1 把一系列片段程序用于
计算机视觉 464
40.3.2 求和操作 467
40.3.3 创建全景照片的方
程组 469
40.3.4 特征向量的计算 471
40.4 并行计算机视觉处理 473
40.5 本章小结 474
参考文献 474
第41章 延迟过滤:困难数据格式的
渲染 477
41.1 引言 477
41.2 为什么要延迟 478
41.3 延迟过滤算法 479
41.4 为什么它可以工作 481
41.5 本章小结:何时延迟 481
参考文献 482
第42章 保守光栅化 485
42.1 问题定义 486
42.2 两种保守算法 487
42.2.1 剪切空间 487
42.2.2 第一种算法 488
42.2.3 第二种算法 489
42.3 鲁棒性问题 492
42.4 保守深度 492
42.5 结果和本章小结 493
参考文献 494
第Ⅵ部分 模拟与数值算法
第43章 蛋白质结构预测的GPU
计算 497
43.1 介绍 497
43.2 Floyd-Warshall算法以及
绑定距离的平滑 498
43.3 GPU实现 499
43.3.1 动态更新 499
43.3.2 数据纹理的索引 499
43.3.3 三角形划分 500
43.3.4 向量化 500
43.4 试验结果 501
43.5 本章小结和工作展望 502
参考文献 502
第44章 用于解线性方程组的GPU
框架 505
44.1 概述 505
44.2 表示 506
44.2.1 “单浮点”的表示 506
44.2.2 向量 506
44.2.3 矩阵 507
44.3 运算 509
44.3.1 向量运算 509
44.3.2 向量缩减 509
44.3.3 矩阵与向量的积 510
44.3.4 把所有的组合起来 511
44.3.5 共轭梯度求解器 511
44.4 一个偏微分方程的例子 512
44.5 本章小结 515
参考文献 516
第45章 GPU上的期权定价 517
45.1 期权概述 517
45.2 Black-Scholes模型 518
45.3 Lattice模型 521
45.3.1 二项模型 521
45.3.2 欧式期权定价 522
45.4 本章小结 525
参考文献 526
第46章 改进的GPU排序 527
46.1 排序算法 527
46.2 一种简单的方法 528
46.3 快速排序 529
46.3.1 实现奇偶合并排序 529
46.4 使用所有的GPU资源 531
46.5 本章小结 535
参考文献 536
第47章 复杂边界的流体模拟 537
47.1 简介 537
47.2 Lattice Boltzmann方法 538
47.3 基于GPU的LBM 539
47.3.1 算法介绍 539
47.3.2 数据封装 540
47.3.3 迁移 541
47.4 基于GPU的边界处理 541
47.4.1 基于GPU的体素化
方法 542
47.4.2 周期性边界 543
47.4.3 流出边界 544
47.4.4 障碍物边界 544
47.5 可视化 545
47.6 实验结果 546
47.7 本章小结 547
参考文献 548
第48章 基于FFT的医学图像重建 551
48.1 背景 551
48.2 傅里叶变换 552
48.2 FFT算法 553
48.4 在GPU上的实现 553
48.4.1 方法1:主要使用片段
处理器 555
48.4.2 方法2:使用顶点处理器、
光栅器和片段处理器 556
48.4.3 负载平衡 558
48.4.4 基准测试结果 558
48.5 医学成像中的FFT 559
48.5.1 磁共振成像 559
48.5.2 MRI结果 560
48.5.3 超声波成像 562
48.6 本章小结 564
参考文献 565
第1章 实现照片级真实感的虚拟
植物 5
1.1 场景管理 6
1.1.1 种植栅格 6
1.1.2 种植策略 6
1.1.3 实时优化 7
1.2 草层 7
1.2.1 通过溶解模拟Alpha透明 9
1.2.2 变化 10
1.2.3 光照 11
1.2.4 风 12
1.3 地面杂物层 12
1.4 树和灌木层 13
1.5 阴影 14
1.6 后处理 15
1.6.1 天空圆顶辉散 16
1.6.2 全场景辉光 16
1.7 本章小结 17
参考文献 18
第2章 使用基于GPU几何体剪切图
的地形渲染 19
2.1 几何体剪切图简介 19
2.2 GPU实现概览 21
2.2.1 数据结构 22
2.2.2 剪切图大小 22
2.3 渲染 23
2.3.1 活动层 23
2.3.2 顶点和索引缓冲区 23
2.3.3 视锥剪切 24
2.3.4 DrawPrimitive调用 25
2.3.5 顶点着色器 25
2.3.6 像素着色器 27
2.4 更新 28
2.4.1 升采样 28
2.4.2 残差 29
2.4.3 法线图 30
2.5 结果和讨论 30
2.6 本章小结和改进 31
2.6.1 顶点纹理 31
2.6.2 去掉法线图 31
2.6.3 不需要存储空间的地形
合成 31
参考文献 31
第3章 几何体实例化的内幕 33
3.1 为什么要对几何体实例化? 34
3.2 定义 34
3.2.1 几何体包 34
3.2.2 实例属性 35
3.2.3 几何体实例 35
3.2.4 渲染和纹理场景 35
3.2.5 几何体批次 36
3.3 实现 37
3.3.1 静态批次 38
3.3.2 动态批次 39
3.3.3 顶点常量实例化 40
3.3.4 几何体实例API批次 43
3.4 本章小结 46
参考文献 48
第4章 分段缓冲 49
4.1 问题空间 49
4.2 解决方案 50
4.3 方法 50
4.3.1 分段缓冲的第一步 50
4.3.2 分段缓冲的第二步 50
4.3.3 分段缓冲的第三步 51
4.4 改进分段缓冲技术 51
4.5 本章小结 51
参考文献 51
第5章 用多流来优化资源管理 53
5.1 概览 53
5.2 实现 55
5.2.1 DirectX 9.0中的多流 55
5.2.2 资源管理 57
5.2.3 处理顶点 59
5.3 本章小结 63
参考文献 63
第6章 让硬件遮挡查询发挥作用 65
6.1 引言 65
6.2 受益于遮挡查询的场景 66
6.3 遮挡裁减 66
6.4 层的停等方法 67
6.4.1 为什么使用层 67
6.4.2 层结构 67
6.4.3 层的算法 68
6.4.4 问题1:停滞 68
6.4.5 问题2:查询的额外开销 68
6.5 一致性层裁减 69
6.5.1 想法1:猜测 69
6.5.2 想法2:提升,提升 70
6.5.3 算法 70
6.5.4 实现细节 71
6.5.5 停滞比较少的原因 73
6.5.6 查询较少的原因 73
6.5.7 如何遍历层 73
6.6 优化 74
6.6.1 用真正的几何体查询 74
6.6.2 只有Z的渲染遍 74
6.6.3 近似的可见性 74
6.6.4 保守的可见性测试 74
6.7 本章小结 75
参考文献 76
第7章 带有位移映射的细分表面自
适应镶嵌 77
7.1 细分表面 77
7.1.1 一些定义 78
7.1.2 Catmull-Clark细分 78
7.1.3 用细分来镶嵌 79
7.1.4 面片化表面 80
7.1.5 GPU镶嵌算法 80
7.1.6 致密镶嵌 84
7.2 位移映射 84
7.2.1 改变平滑度测试 85
7.2.2 用法线映射着色 85
7.3 本章小结 86
参考文献 86
第8章 使用距离函数的逐像素位移
映射 87
8.1 简介 87
8.2 准备工作 89
8.3 距离映射算法 89
8.4 计算距离图 92
8.5 着色器 92
8.5.1 顶点着色器 92
8.5.2 片段着色器 92
8.5.3 关于过滤的注意事项 94
8.6 结果 94
8.7 本章小结 95
参考文献 96
第Ⅱ部分 着色、光照和阴影
第9章 S.T.A.L.K.E.R.中的延期
着色 101
9.1 引言 101
9.2 几种观点 102
9.3 优化 103
9.3.1 优化的对象 103
9.3.2 光照优化 104
9.3.3 G缓冲区建立的优化 106
9.3.4 阴影优化 108
9.4 改善质量 109
9.4.1 “虚拟位置”的威力 109
9.4.2 环境遮挡 110
9.4.3 材质和表面光照的交互 111
9.5 反走样 111
9.5.1 高效的调和映射 113
9.5.2 处理透明 114
9.6 尝试过但没有包含入最终
代码的内容 114
9.6.1 高程图 114
9.6.2 实时的全局照明 115
9.7 本章小结 115
参考文献 116
第10章 动态辐照度环境映射实时
计算 117
10.1 辐照度(irradiance)环境
映射 117
10.2 球面调和卷积 119
10.3 映射到GPU上 120
10.3.1 空域到频域 121
10.3.2 卷积和恢复 122
10.4 以后的工作 123
10.5 本章小结 123
参考文献 123
第11章 近似的双向纹理函数 125
11.1 引言 125
11.2 采集 126
11.2.1 建立和采集 126
11.2.2 汇集着色图 127
11.3 渲染 128
11.3.1 细节算法 128
11.3.2 实时渲染 129
11.4 结果 130
11.5 本章小结 132
参考文献 132
第12章 基于贴面的纹理映射 133
12.1 方法简介 134
12.2 纹理贴面的构造 135
12.3 纹理贴面打包 135
12.4 纹理贴面映射 137
12.5 mipmap问题 138
12.6 本章小结 140
参考文献 140
第13章 在GPU上实现mental
images的Phenomena
渲染器 141
13.1 引言 141
13.2 着色器和Phenomena 142
13.3 用Cg实现Phenomena 143
13.3.1 Cg顶点程序和可变
参数 144
13.3.2 片段程序着色器的main()
入口点 145
13.3.3 通用着色器接口 145
13.3.4 一个简单的着色器
例子 146
13.3.5 全局的状态变量 148
13.3.6 光着色器 149
13.3.7 纹理着色器 151
13.3.8 凹凸映射 152
13.3.9 环境着色器和体着
色器 153
13.3.10 返回结构体的着色器 154
13.3.11 渲染毛发 154
13.3.12 组合所有东西 155
13.4 本章小结 155
参考文献 156
第14章 动态环境遮挡和间接光照 157
14.1 表面元素 158
14.2 环境遮挡 158
14.2.1 多遍阴影算法 160
14.2.2 改善性能 160
14.3 间接光照和面光源 162
14.4 本章小结 164
参考文献 164
第15章 蓝图渲染和草图绘制 165
15.1 基本原理 166
15.1.1 中间渲染结果 166
15.1.2 边增强 166
15.1.3 深度子图形渲染 167
15.2 蓝图渲染 167
15.2.1 深度剥离 167
15.2.2 析取可见边和不可
见边 169
15.2.3 合成蓝图 170
15.2.4 深度屏蔽 171
15.2.5 使用蓝图渲染显示
建筑 171
15.3 草图渲染 171
15.3.1 边和颜色面片 172
15.3.2 应用不确定性 172
15.3.3 调整深度 173
15.3.4 草图渲染的变体 173
15.3.5 控制不确定性 174
15.3.6 减少雨景效果 175
15.4 本章小结 176
参考文献 176
第16章 精确的大气散射 179
16.1 引言 179
16.2 解散射方程 180
16.2.1 Rayleigh散射与Mie
散射 180
16.2.2 相位函数 181
16.2.3 外向散射方程 181
16.2.4 内向散射方程 182
16.2.5 表面散射方程 182
16.3 实时渲染 182
16.4 挤入着色器中 184
16.4.1 去除一个维度 184
16.4.2 去除其他维度 184
16.5 实现散射的着色器 185
16.5.1 顶点着色器 185
16.5.2 片段着色器 187
16.6 增加高动态范围渲染 188
16.7 本章小结 188
参考文献 189
第17章 利用像素着色器分支的
高效模糊边缘阴影 191
17.1 现有的阴影生成技术 191
17.2 用单张阴影图产生模糊
阴影 192
17.2.1 模糊尖锐边缘阴影 192
17.2.2 提高效率 195
17.2.3 实现细节 196
17.3 本章小结 199
参考文献 200
第18章 将顶点纹理位移用于水的
真实感渲染 201
18.1 水的模型 202
18.2 实现 202
18.2.1 水的表面模型 202
18.2.2 实现细节 203
18.2.3 对高度图采样 203
18.2.4 质量的提高与优化 204
18.2.5 渲染局部的扰动 208
18.3 本章小结 209
参考文献 209
第19章 通用的折射模拟 211
19.1 基本方法 212
19.2 折射掩码 213
19.3 示例 215
19.3.1 水的模拟 215
19.3.2 玻璃的模拟 217
19.4 本章小结 219
参考文献 219
第Ⅲ部分 高质量渲染
第20章 快速三阶纹理过滤 225
20.1 高阶过滤 225
20.2 快速递归三次卷积 226
20.3 mipmapping 230
20.4 导数重建 232
20.5 本章小结 235
参考文献 236
第21章 高质量反走样的光栅化 237
21.1 概述 237
21.2 降采样 239
21.2.1 与现有软硬件的对比 239
21.2.2 用GPU进行降采样 240
21.3 延伸 240
21.4 过滤器的细节 241
21.5 两遍分离式的过滤器 242
21.6 分块和累加 243
21.7 代码 243
21.7.1 渲染循环 244
21.7.2 降采样类 245
21.7.3 实现细节 246
21.8 本章小结 246
参考文献 247
第22章 快速的预过滤线条 249
22.1 为什么尖锐的直线看起来很
糟糕 249
22.2 限制信号的带宽 250
22.3 预处理 252
22.4 运行时 253
22.4.1 线段的建立(CPU) 253
22.4.2 表查找(GPU) 254
22.5 实现的问题 256
22.5.1 绘制宽线 256
22.5.2 组合多条线段 256
22.6 示例 256
22.7 本章小结 258
参考文献 258
第23章 Nalu Demo的头发动画和
渲染 261
23.1 头发的几何体 262
23.1.1 布局和增长 262
23.1.2 控制头发 263
23.1.3 数据流 263
23.1.4 镶嵌 263
23.1.5 插值 264
23.2 动力学和碰撞 265
23.2.1 约束条件 265
23.2.2 碰撞 266
23.2.3 鳍 266
23.3 头发的着色 267
23.3.1 用于头发的实时反射
模型 268
23.3.2 头发中实时的体化阴影 271
23.4 本章小结和未来的工作 274
参考文献 274
第24章 使用查找表加速颜色变换 275
24.1 查找表的基础知识 275
24.1.1 一维查找表 275
24.1.2 三维查找表 276
24.1.3 插值 278
24.2 实现 278
24.2.1 把查找表映射到GPU
的策略 278
24.2.2 Cg着色器 278
24.2.3 系统集成 280
24.2.4 把三维查找表扩展到用
于高动态范围图像 281
24.3 本章小结 282
参考文献 282
第25章 Apple Motion中的GPU
图像处理 285
25.1 设计 285
25.1.1 喜爱的和厌恶的 285
25.1.2 选择语言 287
25.1.3 CPU向后支持 287
25.2 实现 288
25.2.1 GPU资源的限制 288
25.2.2 被零除 289
25.2.3 丢失的顶点分量 289
25.2.4 双线过滤 290
25.2.5 高精度存储 294
25.3 调试 294
25.4 本章小结 295
参考文献 296
第26章 实现改进的Perlin噪声 297
26.1 随机但平滑 297
26.2 存储与计算 297
26.3 实现细节 298
26.4 本章小结 302
参考文献 302
第27章 高级的高质量过滤 303
27.1 在GPU上实现过滤 303
27.1.1 访问图像样本 303
27.1.2 卷积过滤 304
27.2 数字图像的重采样 307
27.2.1 背景知识 307
27.2.2 反走样问题 307
27.2.3 图像重建 310
27.3 冲击过滤: 锐化图像的方法 312
27.4 过滤器的实现技巧 314
27.5 高级应用 314
27.5.1 时间变形 314
27.5.2 运动模糊的消除 314
27.5.3 自适应的纹理过滤 315
27.6 本章小结 315
参考文献 315
第28章 Mipmap级的测量 317
28.1 哪个mipmap层是可
见的? 318
28.2 GPU抢险队 318
28.2.1 像素点计数 318
28.2.2 引擎中的实际考虑 321
28.2.3 扩展 322
28.3 实验结果 324
28.4 本章小结 325
参考文献 326
第Ⅳ部分 GPU的通用计算:初级读本
第29章 流式体系结构和技术趋势 331
29.1 技术趋势 331
29.1.1 核心技术趋势 331
29.1.2 后果 332
29.2 高性能计算的关键 334
29.2.1 高效计算的方法 334
29.2.2 高效通信的方法 335
29.2.3 与CPU对比 335
29.3 流式计算 336
29.3.1 流式编程模型 336
29.3.2 构建一个流式处理器 337
29.4 未来和挑战 338
29.4.1 技术趋势 338
29.4.2 功耗管理 338
29.4.3 支持更高的可编程性和
功能性 339
29.4.4 来自CPU的GPU功能性
(或反之亦然) 339
参考文献 339
第30章 GeForce 6系列GPU的
体系结构 341
30.1 GPU如何适合于整体计算
系统 342
30.2 整体系统体系结构 342
30.2.1 图形操作的功能结构图 343
30.2.2 非图形操作的功能结
构图 346
30.3 GPU特性 347
30.3.1 固定函数特性 348
30.3.2 着色器Model 3.0编程
模型 349
30.3.3 支持的数据存储格式 353
30.4 性能 354
30.5 达到最佳性能 354
30.5.1 积极地使用z裁减 355
30.5.2 加载数据时利用纹理
数学 355
30.5.3 使用片段程序的分支 355
30.5.4 尽可能使用fp16作中
间值 355
30.6 本章小结 356
第31章 把计算概念映射到GPU 357
31.1 数据并行的重要性 357
31.1.1 哪种类型的计算可以很
好地映射到GPU 357
31.1.2 示例:在栅格上模拟 358
31.1.3 流通信:聚集与散布 359
31.2 GPU计算资源清单 359
31.3 CPU-GPU类比 362
31.3.1 流:GPU纹理 = CPU
数组 362
31.3.2 核:GPU片段程序 = CPU
“内循环” 362
31.3.3 渲染到纹理 = 反馈 362
31.3.4 几何体光栅化 = 计算的
调用 363
31.3.5 纹理坐标 = 计算的域 363
31.3.6 顶点坐标 = 计算的
范围 363
31.3.7 缩减 363
31.4 从类比到实现 364
31.5 一个简单的例子 366
31.6 本章小结 368
参考文献 368
第32章 尝试GPU计算 369
32.1 选择快速算法 369
32.1.1 局部性 369
32.1.2 允许计算的准则 370
32.1.3 考虑下载和读回 371
32.2 了解浮点 371
32.3 实现散列 373
32.3.1 转换成聚集 373
32.3.2 地址排序 374
32.3.3 渲染点 375
32.4 本章小结 375
参考文献 376
第33章 在GPU上实现高效的并行
数据结构 377
33.1 流式编程 377
33.2 GPU存储器模型 379
33.2.1 存储器体系结构 379
33.2.2 GPU流类型 380
33.2.3 GPU核的存储器访问 381
33.3 基于GPU的数据结构 382
33.3.1 多维数组 382
33.3.2 结构体 387
33.3.3 稀疏数据结构 387
33.4 性能考虑 391
33.4.1 依赖的纹理读取 391
33.4.2 计算频度和程序特化 391
33.4.3 Pbuffer Survival Guide 392
33.5 本章小结 393
参考文献 393
第34章 GPU流程控制习惯用法 395
34.1 流程控制的挑战 395
34.2 基本的流程控制策略 396
34.2.1 判定 396
34.2.2 把分支向着流水线上端
移动 396
34.2.3 z裁减 397
34.2.4 分支指令 399
34.2.5 选择一种分支机制 399
34.3 使用遮挡查询的数据依赖
循环 400
34.4 本章小结 400
第35章 GPU程序优化 401
35.1 数据并行计算 401
35.1.1 指令级并行性 401
35.1.2 数据级并行性 403
35.2 计算频率 404
35.2.1 循环内不变量的预
计算 405
35.2.2 用查找表进行预计算 406
35.2.3 避免内循环分支 407
35.2.4 swizzle操作 407
35.3 评价和负载平衡 408
35.4 本章小结 409
参考文献 410
第36章 用于GPGPU应用程序的
流式缩减操作 411
36.1 通过紧缩来过滤 411
36.1.1 累加和扫描 412
36.1.2 通过搜索/聚集来散布 413
36.1.3 过滤性能 415
36.2 动机:碰撞检测 416
36.3 用于细分表面的过滤 419
36.4 本章小结 421
参考文献 421
第Ⅴ部分 面向图像的计算
第37章 GPU上的八叉树纹理 425
37.1 一个GPU加速的层次结构:
N3树 426
37.1.1 定义 426
37.1.2 实现 427
37.2 应用1:在网格表面上色 431
37.2.1 建立八叉树 431
37.2.2 上色 432
37.2.3 渲染 432
37.2.4 把八叉树纹理转换成标准
2D纹理 434
37.3 应用2:表面模拟 436
37.4 本章小结 437
参考文献 438
第38章 使用光栅化的高质量全局照
明渲染 439
38.1 通过光栅化的全局照明 440
38.2 最终聚集简介 441
38.2.1 两遍的方法 441
38.2.2 最终聚集 441
38.2.3 两遍方法的问题 442
38.3 通过光栅化的最终聚集 443
38.3.1 最终聚集光线的聚类 443
38.3.2 光线投射作为多次平行
投影 445
38.4 实现细节 446
38.4.1 初始化 446
38.4.2 深度剥离 446
38.4.3 采样 447
38.4.4 性能 447
38.5 GPU上的全局照明渲染器 448
38.5.1 第一遍 448
38.5.2 生成可见点数据 448
38.5.3 第二遍 448
38.5.4 其他解决方案 449
38.6 本章小结 451
参考文献 451
第39章 使用逐步求精辐射度方法的
全局照明 453
39.1 辐射度的基础 454
逐步求精 454
39.2 GPU实现 455
39.2.1 使用半球投影的可
见性 456
39.2.2 构成因子的计算 458
39.2.3 选择下一个发射者 459
39.3 渐进细分 459
39.3.1 纹理四叉树 459
39.3.2 四叉数细分 460
39.4 性能 460
39.5 本章小结 460
参考文献 461
第40章 GPU上的计算机视觉 463
40.1 引言 463
40.2 实现框架 463
40.3 应用示例 464
40.3.1 把一系列片段程序用于
计算机视觉 464
40.3.2 求和操作 467
40.3.3 创建全景照片的方
程组 469
40.3.4 特征向量的计算 471
40.4 并行计算机视觉处理 473
40.5 本章小结 474
参考文献 474
第41章 延迟过滤:困难数据格式的
渲染 477
41.1 引言 477
41.2 为什么要延迟 478
41.3 延迟过滤算法 479
41.4 为什么它可以工作 481
41.5 本章小结:何时延迟 481
参考文献 482
第42章 保守光栅化 485
42.1 问题定义 486
42.2 两种保守算法 487
42.2.1 剪切空间 487
42.2.2 第一种算法 488
42.2.3 第二种算法 489
42.3 鲁棒性问题 492
42.4 保守深度 492
42.5 结果和本章小结 493
参考文献 494
第Ⅵ部分 模拟与数值算法
第43章 蛋白质结构预测的GPU
计算 497
43.1 介绍 497
43.2 Floyd-Warshall算法以及
绑定距离的平滑 498
43.3 GPU实现 499
43.3.1 动态更新 499
43.3.2 数据纹理的索引 499
43.3.3 三角形划分 500
43.3.4 向量化 500
43.4 试验结果 501
43.5 本章小结和工作展望 502
参考文献 502
第44章 用于解线性方程组的GPU
框架 505
44.1 概述 505
44.2 表示 506
44.2.1 “单浮点”的表示 506
44.2.2 向量 506
44.2.3 矩阵 507
44.3 运算 509
44.3.1 向量运算 509
44.3.2 向量缩减 509
44.3.3 矩阵与向量的积 510
44.3.4 把所有的组合起来 511
44.3.5 共轭梯度求解器 511
44.4 一个偏微分方程的例子 512
44.5 本章小结 515
参考文献 516
第45章 GPU上的期权定价 517
45.1 期权概述 517
45.2 Black-Scholes模型 518
45.3 Lattice模型 521
45.3.1 二项模型 521
45.3.2 欧式期权定价 522
45.4 本章小结 525
参考文献 526
第46章 改进的GPU排序 527
46.1 排序算法 527
46.2 一种简单的方法 528
46.3 快速排序 529
46.3.1 实现奇偶合并排序 529
46.4 使用所有的GPU资源 531
46.5 本章小结 535
参考文献 536
第47章 复杂边界的流体模拟 537
47.1 简介 537
47.2 Lattice Boltzmann方法 538
47.3 基于GPU的LBM 539
47.3.1 算法介绍 539
47.3.2 数据封装 540
47.3.3 迁移 541
47.4 基于GPU的边界处理 541
47.4.1 基于GPU的体素化
方法 542
47.4.2 周期性边界 543
47.4.3 流出边界 544
47.4.4 障碍物边界 544
47.5 可视化 545
47.6 实验结果 546
47.7 本章小结 547
参考文献 548
第48章 基于FFT的医学图像重建 551
48.1 背景 551
48.2 傅里叶变换 552
48.2 FFT算法 553
48.4 在GPU上的实现 553
48.4.1 方法1:主要使用片段
处理器 555
48.4.2 方法2:使用顶点处理器、
光栅器和片段处理器 556
48.4.3 负载平衡 558
48.4.4 基准测试结果 558
48.5 医学成像中的FFT 559
48.5.1 磁共振成像 559
48.5.2 MRI结果 560
48.5.3 超声波成像 562
48.6 本章小结 564
参考文献 565
猜您喜欢