本书由引领全球计算机图形芯片技术发展的NVIDIA公司组稿,汇集当今国际上前沿开发者们经多年研究和实践得出的实用的实时图形技术成果。本书主要基于当今图形处理器(GPU)的可编程图形管线,除了讲述创建高级视觉效果的基础知识和性能优化技术外,还着重介绍了前沿开发者们总结出来的快速技巧。全书由42篇文章组成,根据主题不同分为6个部分,包括自然效果、光照和阴影、材质、图像处理、性能及实践、超越三角形。\r\n 本书适合于实时渲染相关行业的技术人员阅读,也适合作为相关科研院所的学习研究参考资料。
第1部分 自然效果\r\n\r\n简介 2\r\n\r\n第1章 用物理模型进行高效的水模拟 4\r\n1.1 目标和范围 4\r\n1.2 正弦近似值的加和 5\r\n1.2.1 波的选择 5\r\n1.2.2 法线和切线 6\r\n1.2.3 几何波 8\r\n1.2.4 纹理波 11\r\n1.3 编辑 13\r\n1.3.1 深度的使用 13\r\n1.3.2 重载 14\r\n1.3.3 边长的过滤 15\r\n1.3.4 纹理坐标 15\r\n1.4 运行时的处理 16\r\n1.4.1 凹凸环境映射参数 16\r\n1.4.2 顶点和像素的处理 18\r\n1.5 小结 19\r\n1.6 参考文献 19\r\n\r\n第2章 水刻蚀的渲染 21\r\n2.1 引言 21\r\n2.2 刻蚀的计算 22\r\n2.3 方法 24\r\n2.4 使用OpenGL实现 25\r\n2.5 使用高级着色语言实现 25\r\n2.6 小结 30\r\n2.7 参考文献 30\r\n\r\n第3章 Dawn演示中的皮肤 31\r\n3.1 引言 31\r\n3.2 皮肤着色 32\r\n3.3 场景的照明 32\r\n3.3.1 高动态范围的环境 32\r\n3.3.2 遮挡 34\r\n3.4 皮肤如何对光进行响应 35\r\n3.5 实现 36\r\n3.5.1 顶点Shader 36\r\n3.5.2 像素Shader 41\r\n3.6 小结 43\r\n3.7 参考文献 43\r\n\r\n第4章 Dawn演示中的动画 44\r\n4.1 简介 44\r\n4.2 网格的动画 45\r\n4.3 变形网格对象 45\r\n4.3.1 高级语言中的变形网格对象 45\r\n4.3.2 变形网格对象的实现 47\r\n4.4 蒙皮 48\r\n4.5 小结 50\r\n4.6 参考文献 50\r\n\r\n第5章 改良的Perlin噪声的实现 51\r\n5.1 噪声函数 51\r\n5.2 最初的实现 52\r\n5.3 最初实现的缺点 52\r\n5.4 对噪声函数的改进 54\r\n5.5 如何在像素shader中产生好的假噪声 56\r\n5.6 不考虑相邻顶点制作凹凸贴图 57\r\n5.7 小结 58\r\n5.8 参考文献 58\r\n\r\n第6章 Vulcan演示中的火 59\r\n6.1 创建逼真的火焰 59\r\n6.2 动画精灵的实现 61\r\n6.2.1 火焰和烟的动画 61\r\n6.2.2 使火焰增加多样性 62\r\n6.2.3 动画的存储 63\r\n6.2.4 火焰和烟的混合 64\r\n6.3 粒子运动 65\r\n6.4 性能 65\r\n6.4.1 层次合成 65\r\n6.4.2 定制的精灵 67\r\n6.5 渲染后的效果 67\r\n6.5.1 辉光 68\r\n6.5.2 热微光 68\r\n6.5.3 颗粒 70\r\n6.5.4 最终的程序 71\r\n6.6 小结 72\r\n\r\n第7章 无数波动草叶的渲染 73\r\n7.1 引言 73\r\n7.2 概述 73\r\n7.3 草体的准备 74\r\n7.3.1 草的纹理 74\r\n7.3.2 草体 74\r\n7.4 动画 76\r\n7.4.1 一般思路 76\r\n7.4.2 每丛草体的动画 77\r\n7.4.3 每个顶点的动画 79\r\n7.4.4 每个草体的动画 80\r\n7.5 小结 82\r\n7.6 参考文献 82\r\n\r\n第8章 衍射的模拟 84\r\n8.1 什么是衍射 84\r\n8.1.1 波动光学 84\r\n8.1.2 衍射的物理学 85\r\n8.2 实现 86\r\n8.3 结果 89\r\n8.4 小结 90\r\n8.5 参考文献 90\r\n\r\n第2部分 光照和阴影\r\n\r\n简介 92\r\n\r\n第9章 有效的阴影体渲染 94\r\n9.1 引言 94\r\n9.2 程序结构 96\r\n9.2.1 多遍渲染 96\r\n9.2.2 顶点缓冲器结构 99\r\n9.2.3 在无限远处工作 99\r\n9.3 详细的讨论 101\r\n9.3.1 数学 101\r\n9.3.2 代码 103\r\n9.3.3 markShadows方法 103\r\n9.3.4 findBackfaces方法 104\r\n9.3.5 亮罩和暗罩 105\r\n9.3.6 侧面 106\r\n9.4 调试 107\r\n9.5 几何优化 108\r\n9.5.1 方向光 108\r\n9.5.2 点光源和聚光灯 108\r\n9.5.3 剔除阴影体 109\r\n9.5.4 除罩操作 109\r\n9.6 填充率的优化 110\r\n9.6.1 有限的体积 110\r\n9.6.2 XY裁剪 111\r\n9.6.3 Z-边界 111\r\n9.7 将来的阴影 112\r\n9.8 参考文献 113\r\n\r\n第10章 电影级的光照 114\r\n10.1 引言 114\r\n10.2 直射光照明模型 115\r\n10.2.1 选择 116\r\n10.2.2 颜色 116\r\n10.2.3 造型 116\r\n10.2.4 阴影 117\r\n10.2.5 纹理 118\r\n10.2.6 结果 118\r\n10.3 泛光Shader 119\r\n10.4 性能分析 124\r\n10.4.1 速度 124\r\n10.4.2 开销 124\r\n10.4.3 优化 124\r\n10.5 小结 124\r\n10.6 参考文献 125\r\n\r\n第11章 阴影贴图反走样 126\r\n11.1 引言 126\r\n11.2 靠近的百分比过滤 126\r\n11.3 平滑滤波的实现 127\r\n11.4 较少地取样 128\r\n11.5 工作原理 129\r\n11.6 小结 131\r\n11.7 参考文献 131\r\n\r\n第12章 全方位的阴影映射 132\r\n12.1 引言 132\r\n12.1.1 模板阴影 133\r\n12.1.2 阴影映射 133\r\n12.2 阴影映射的算法 133\r\n12.2.1 条件 133\r\n12.2.2 算法 134\r\n12.2.3 纹理格式 135\r\n12.2.4 阴影贴图的尺寸 135\r\n12.2.5 几何体的数值范围 135\r\n12.3 实现 135\r\n12.3.1 系统需求 135\r\n12.3.2 资源创建 136\r\n12.3.3 渲染阶段1:渲染到阴影贴图 136\r\n12.3.4 渲染阶段2:基本渲染 137\r\n12.3.5 光照计算 137\r\n12.3.6 阴影的计算 137\r\n12.3.7 技巧和窍门 138\r\n12.3.8 最终的着色遍(Lighting×Shadow) 138\r\n12.4 添加模糊的阴影 138\r\n12.5 小结 139\r\n12.6 参考文献 139\r\n\r\n第13章 使用遮挡区间映射产生模糊的阴影 140\r\n13.1 加油站 140\r\n13.2 算法 141\r\n13.3 创建映射 142\r\n13.4 渲染 143\r\n13.5 局限性 144\r\n13.6 小结 145\r\n13.7 参考文献 146\r\n\r\n第14章 透视阴影贴图 147\r\n14.1 引言 147\r\n14.2 PSM算法的问题 148\r\n14.2.1 虚拟摄像机 148\r\n14.2.2 光源摄像机 152\r\n14.2.3 偏置 157\r\n14.3 获得更好阴影映射的技巧 160\r\n14.3.1 过滤器 160\r\n14.3.2 模糊 161\r\n14.4 结果 164\r\n14.5 参考文献 165\r\n\r\n第15章 逐像素光照的可见性管理 166\r\n15.1 GPU书中的可见性 166\r\n15.2 批和逐像素光照 166\r\n15.2.1 逐像素光照的例子 166\r\n15.2.2 究竟需要多少批 167\r\n15.3 作为集合的可见性 168\r\n15.3.1 可见集合 168\r\n15.3.2 光源集合 168\r\n15.3.3 照明集合 168\r\n15.3.4 阴影集合 168\r\n15.4 各集合的生成 169\r\n15.4.1 可见集合的生成 169\r\n15.4.2 光源集合的生成 169\r\n15.4.3 照明集合的生成 169\r\n15.4.4 阴影集合的生成 170\r\n15.5 可见性改善填充率 172\r\n15.6 实际的应用 173\r\n15.7 小结 173\r\n15.8 参考文献 173\r\n\r\n第3部分 材质\r\n\r\n简介 176\r\n\r\n第16章 次表面散射的实时近似 177\r\n16.1 次表面散射的视觉效果 177\r\n16.2 简单的散射近似 177\r\n16.3 用深度映射模拟吸收 179\r\n16.3.1 实现细节 182\r\n16.3.2 更精密的散射模型 183\r\n16.4 纹理空间的漫反散 183\r\n16.5 小结 187\r\n16.6 参考文献 187\r\n\r\n第17章 环境遮挡 188\r\n17.1 概述 188\r\n17.2 预处理步骤 189\r\n17.3 硬件加速计算遮挡 190\r\n17.4 用环境遮挡贴图来渲染 191\r\n17.5 小结 194\r\n17.6 参考文献 195\r\n\r\n第18章 空间的BRDFs 198\r\n18.1 什么是SBRDF 198\r\n18.2 表达式的详述 198\r\n18.3 使用离散光的渲染 200\r\n18.4 使用环境贴图的渲染 202\r\n18.4.1 算法 202\r\n18.4.2 shader代码 204\r\n18.5 小结 207\r\n18.6 参考文献 207\r\n\r\n第19章 基于图像的光照 208\r\n19.1 基于图像光照的局部化 208\r\n19.2 顶点Shader 211\r\n19.3 片元Shader 213\r\n19.4 漫反射IBL 215\r\n19.5 影子 215\r\n19.6 使用局部立方体贴图作背景 216\r\n19.7 小结 217\r\n19.8 参考文献 217\r\n\r\n第20章 纹理爆炸 219\r\n20.1 纹理爆炸101 219\r\n20.1.1 求单元 219\r\n20.1.2 对图像采样 220\r\n20.1.3 相邻单元中的图像 220\r\n20.1.4 图像优先级 221\r\n20.1.5 程序化图像 222\r\n20.1.6 图像的随机选择 223\r\n20.2 技术上的考虑 224\r\n20.3 高级特性 225\r\n20.3.1 缩放和转动 225\r\n20.3.2 可控的变量密度 225\r\n20.3.3 程序化的3D爆炸 226\r\n20.3.4 随时间变化的纹理 227\r\n20.3.5 Voronoi相关的细胞法 227\r\n20.4 小结 229\r\n20.5 参考文献 229\r\n\r\n第4部分 图像处理\r\n\r\n简介 232\r\n\r\n第21章 实时辉光 234\r\n21.1 技术概述 234\r\n21.2 渲染辉光的步骤 237\r\n21.2.1 辉光源的指定和渲染 237\r\n21.2.2 模糊辉光源 238\r\n21.2.3 分步卷积 238\r\n21.2.4 GPU上的卷积 239\r\n21.3 特定硬件的实现 240\r\n21.3.1 Direct3D 9 240\r\n21.3.2 Direct3D 8 242\r\n21.3.3 Direct3D 7 242\r\n21.4 模糊的其他用途 243\r\n21.5 把效果加入一个游戏引擎 243\r\n21.5.1 渲染场景 243\r\n21.5.2 走样问题 244\r\n21.5.3 DirectX 7的精度问题 244\r\n21.5.4 残留图像效应 245\r\n21.5.5 渐变效果 245\r\n21.6 小结 246\r\n21.7 参考文献 246\r\n\r\n第22章 颜色控制 248\r\n22.1 引言 248\r\n22.2 基于通道的颜色校正 248\r\n22.2.1 级别 248\r\n22.2.2 曲线 250\r\n22.3 多通道的彩色校正和变换 252\r\n22.3.1 灰度变换 252\r\n22.3.2 彩色空间的变换 253\r\n22.4 参考文献 255\r\n\r\n第23章 景深:技术综述 256\r\n23.1 什么是景深 256\r\n23.1.1 模糊圈的计算 257\r\n23.1.2 主要技术 257\r\n23.2 光线跟踪的景深 258\r\n23.3 累积缓冲区的景深 258\r\n23.4 分层的景深 259\r\n23.5 向前映射的z缓冲区景深 260\r\n23.6 反向映射的z缓冲区景深 261\r\n23.7 小结 265\r\n23.8 参考文献 266\r\n\r\n第24章 高质量的过滤 267\r\n24.1 质量与速度 267\r\n24.2 对GPU求导的理解 277\r\n24.3 解析的反走样和纹理化 278\r\n24.4 小结 284\r\n24.5 参考文献 284\r\n\r\n第25章 用纹理贴图进行快速过滤宽度的计算 285\r\n25.1 在shader中求导的需求 285\r\n25.2 用纹理计算过滤宽度 287\r\n25.3 讨论 288\r\n25.4 参考文献 289\r\n\r\n第26章 OpenEXR图像文件格式 291\r\n26.1 什么是OpenEXR 291\r\n26.1.1 高动态范围图像 291\r\n26.1.2 “半精度”(Half)格式 293\r\n26.1.3 可表示的数值范围 293\r\n26.1.4 彩色分辨率 294\r\n26.1.5 C++接口 294\r\n26.2 OpenEXR文件结构 294\r\n26.2.1 文件头 294\r\n26.2.2 像素 294\r\n26.3 OpenEXR数据压缩 295\r\n26.4 OpenEXR的使用 295\r\n26.4.1 OpenEXR图像的读和显示 295\r\n26.4.2 一个OpenEXR图像的渲染和写入 296\r\n26.5 线性像素值 300\r\n26.6 创建和使用HDR图像 302\r\n26.7 小结 303\r\n26.8 参考文献 304\r\n\r\n第27章 图像处理的框架 305\r\n27.1 引言 305\r\n27.2 框架设计 306\r\n27.2.1 操作器和过滤器 306\r\n27.2.2 图像数据 307\r\n27.2.3 丢失的块 308\r\n27.3 实现 310\r\n27.3.1 Image类 311\r\n27.3.2 ImageFilter类 314\r\n27.3.3 过滤的实现 315\r\n27.4 一个示例应用程序 318\r\n27.5 性能和局限性 319\r\n27.6 小结 320\r\n27.7 参考文献 321\r\n\r\n第5部分 性能及实践\r\n\r\n简介 324\r\n\r\n第28章 图形流水线性能 326\r\n28.1 概述 326\r\n28.1.1 流水线 326\r\n28.1.2 方法 326\r\n28.2 定位瓶颈 327\r\n28.2.1 光栅操作 328\r\n28.2.2 纹理带宽 328\r\n28.2.3 片元着色 328\r\n28.2.4 顶点处理 329\r\n28.2.5 顶点和索引传输 329\r\n28.3 优化 329\r\n28.3.1 在CPU上优化 329\r\n28.3.2 减少顶点传输的开销 330\r\n28.3.3 顶点处理的优化 331\r\n28.3.4 加速片元着色 331\r\n28.3.5 减小纹理带宽 332\r\n28.3.6 优化帧缓冲带宽 333\r\n28.4 小结 334\r\n28.5 参考文献 334\r\n\r\n第29章 有效的遮挡剔除 335\r\n29.1 什么是遮挡剔除 335\r\n29.1.1 遮挡查询 335\r\n29.1.2 早期z值拒绝 335\r\n29.2 遮挡查询如何工作 336\r\n29.3 初步使用遮挡查询 336\r\n29.3.1 恰当地使用遮挡查询 337\r\n29.3.2 遮挡物和被遮挡物的比较 337\r\n29.4 更进一步的应用 337\r\n29.4.1 将物体排序 339\r\n29.4.2 一个防止误解的说明 339\r\n29.5 关于包围盒 339\r\n29.5.1 静态的物体 340\r\n29.5.2 动画的物体 340\r\n29.6 其他问题 341\r\n29.6.1 CPU消耗太高 341\r\n29.6.2 高分辨率的渲染 341\r\n29.6.3 快速深度写入的性能 342\r\n29.6.4 锥体剔除 342\r\n29.7 一点小忠告 343\r\n29.8 一个应用:透镜耀斑 343\r\n29.8.1 渲染透镜耀斑的旧方法 344\r\n29.8.2 渲染透镜耀斑的新方法 345\r\n29.9 小结 345\r\n29.10 参考文献 346\r\n\r\n第30章 FX Composer的设计 347\r\n30.1 工具的开发 347\r\n30.2 设计初衷和使用对象 347\r\n30.3 对象设计 348\r\n30.4 文件格式 352\r\n30.5 用户接口 353\r\n30.6 Direct3D图形的实现 353\r\n30.6.1 设备窗口 353\r\n30.6.2 Direct3D效果 354\r\n30.6.3 ID3DXEffectCompiler 354\r\n30.6.4 ID3DXEffect 355\r\n30.7 场景管理 355\r\n30.8 小结 356\r\n30.9 参考文献 356\r\n\r\n第31章 FX Composer的使用 357\r\n31.1 开始 357\r\n31.1.1 材质面板 358\r\n31.1.2 场景图形面板 359\r\n31.1.3 编辑窗口 360\r\n31.1.4 Shader Perf面板 361\r\n31.1.5 属性面板 361\r\n31.1.6 场景面板 363\r\n31.1.7 纹理面板 364\r\n31.1.8 任务面板 365\r\n31.1.9 日志面板 365\r\n31.2 项目示例 366\r\n31.3 小结 367\r\n\r\n第32章 Shader接口入门 368\r\n32.1 shader接口的基础 369\r\n32.2 一个灵活的光源描述 371\r\n32.3 材质树 373\r\n32.4 小结 376\r\n32.5 参考文献 376\r\n\r\n第33章 将产品的RenderMan shader转化为实时的shader 377\r\n33.1 引言 377\r\n33.2 光照 378\r\n33.2.1 光源 378\r\n33.2.2 光源shader 378\r\n33.2.3 其他的光源参数 379\r\n33.3 顶点程序与片元程序的比较 379\r\n33.4 使用顶点和片元程序 380\r\n33.5 片元程序的优化技术 381\r\n33.5.1 把代码转移到应用层 381\r\n33.5.2 把代码转移到顶点程序 381\r\n33.5.3 通过纹理查询优化 382\r\n33.5.4 向量化的优化 383\r\n33.5.5 最终的优化 383\r\n33.6 小结 384\r\n33.7 参考文献 386\r\n\r\n第34章 将硬件着色整合进Cinema 4D 387\r\n34.1 引言 387\r\n34.2 把Cinema 4D连接到CgFX上去 389\r\n34.3 shader和参数管理 390\r\n34.4 模拟离线渲染 391\r\n34.5 结果和性能 393\r\n34.6 收获和教训 394\r\n34.7 参考文献 395\r\n\r\n第35章 在实时应用程序中使用高质软件渲染效果 396\r\n35.1 引言 396\r\n35.2 用于硬件渲染的内容流水线 397\r\n35.3 硬件渲染的组件 398\r\n35.3.1 几何数据 398\r\n35.3.2 属性映射 398\r\n35.4 组件的产生 400\r\n35.4.1 创建几何图形 400\r\n35.4.2 对纹理和顶点的渲染 400\r\n35.5 试验情况和结果 403\r\n35.6 小结 408\r\n35.7 参考文献 408\r\n\r\n第36章 将Shader整合到应用程序中去 409\r\n36.1 引言 409\r\n36.2 关于shader 409\r\n36.3 一个effect文件的剖析 411\r\n36.3.1 变量 412\r\n36.3.2 结构体 412\r\n36.3.3 pass 412\r\n36.3.4 technique 412\r\n36.3.5 评注 412\r\n36.4 shader数据的类型 413\r\n36.4.1 场景信息 413\r\n36.4.2 材质 414\r\n36.4.3 渲染的场景 414\r\n36.4.4 顶点数据 414\r\n36.5 与shader的通信 414\r\n36.5.1 场景信息 414\r\n36.5.2 材质的参数 415\r\n36.5.3 顶点格式 416\r\n36.5.4 场景 416\r\n36.5.5 就场景对technique和pass的比较 417\r\n36.6 effect文件格式的扩展 417\r\n36.6.1 对预处理程序的支持 417\r\n36.6.2 对shader变化的支持 418\r\n36.6.3 shader继承的添加 418\r\n36.7 小结 419\r\n36.8 参考文献 419\r\n\r\n第6部分 超越三角形\r\n\r\n简介 422\r\n\r\n第37章 用于GPU计算的工具箱 424\r\n37.1 用GPU进行计算 424\r\n37.1.1 编程模型 425\r\n37.1.2 并行编程 426\r\n37.1.3 高级的GPU程序 426\r\n37.2 约减 426\r\n37.2.1 并行的约减 427\r\n37.2.2 有关约减的注意事项 428\r\n37.3 排序和搜索 428\r\n37.3.1 Bitonic归并排序 428\r\n37.3.2 二分搜索 430\r\n37.4 挑战 432\r\n37.4.1 有限的输出 432\r\n37.4.2 缓慢的回读 433\r\n37.4.3 GPU和CPU的比较 433\r\n37.5 小结 433\r\n37.6 参考文献 433\r\n\r\n第38章 在GPU上的快速流体动力学模拟 435\r\n38.1 引言 435\r\n38.1.1 目的 436\r\n38.1.2 假设 436\r\n38.1.3 方法 436\r\n38.2 数学背景 436\r\n38.2.1 不可压缩流体的Navier-Stokes方程式 437\r\n38.2.2 Navier-Stokes方程式的各项 438\r\n38.2.3 矢量微积分的简要复习 438\r\n38.2.4 解Navier-Stokes方程式 439\r\n38.3 实现 443\r\n38.3.1 CPU-GPU的类比 444\r\n38.3.2 片运算 445\r\n38.3.3 片元程序的实现 445\r\n38.4 应用 450\r\n38.4.1 模拟液体和气体 450\r\n38.4.2 浮力和对流 450\r\n38.5 扩展 451\r\n38.5.1 旋涡状态的限制 452\r\n38.5.2 三维 452\r\n38.5.3 交错排列的网格 452\r\n38.5.4 任意边界 452\r\n38.5.5 流体的自由表面 453\r\n38.6 小结 453\r\n38.7 参考文献 453\r\n\r\n第39章 体渲染技术 454\r\n39.1 引言 454\r\n39.2 体渲染 455\r\n39.3 基于纹理的体渲染 456\r\n39.4 实现细节 459\r\n39.4.1 数据的表达和处理 459\r\n39.4.2 代理几何体 460\r\n39.4.3 渲染 461\r\n39.5 高级技术 463\r\n39.5.1 体光照 463\r\n39.5.2 程序化渲染 467\r\n39.6 对性能的考虑 467\r\n39.7 小结 469\r\n39.8 参考文献 469\r\n\r\n第40章 用于三维超声波可视化的实时着色 471\r\n40.1 背景 471\r\n40.2 引言 473\r\n40.2.1 笛卡尔网格数据的体渲染 473\r\n40.2.2 体渲染锥体网格中的数据 475\r\n40.3 结果 480\r\n40.4 小结 480\r\n40.5 参考文献 480\r\n\r\n第41章 实时立体图 481\r\n41.1 什么是立体图 481\r\n41.1.1 立体摄影 481\r\n41.1.2 随机点立体图 481\r\n41.1.3 单个图像的立体图 483\r\n41.2 单个图像立体图的创建 484\r\n41.2.1 参数 484\r\n41.2.2 渲染 485\r\n41.2.3 动画的单个图像立体图的创建 486\r\n41.2.4 片元程序 488\r\n41.3 示例应用程序 489\r\n41.4 参考文献 490\r\n\r\n第42章 变形 491\r\n42.1 什么是变形 491\r\n42.2 在GPU上的变形 492\r\n42.2.1 变形的公式 492\r\n42.2.2 写顶点程序 492\r\n42.2.3 法线的变形 493\r\n42.3 局限性 494\r\n42.4 性能 495\r\n42.5 例子:波浪变形 495\r\n42.6 小结 497
无封面