广州业余3D程序

沉着,简单,便捷,逐步重构
随笔 - 8, 文章 - 0, 评论 - 10, 引用 - 0
数据加载中……

(翻译)3.2 硬件渲染

 3.2 硬件渲染

        当然地,你是由于对实时图形学的兴趣才买这本书。作为一个当代3D图形硬件的使用者,渲染系统的大部分细节都被图形API诸如OpenGL或者Direct3D等隐藏。为了渲染对象,这些API需要你调用各种不同的函数去配置渲染器,以达到你心目中的各种特殊效果。事实上不是真的有必要去了解所有的内部渲染系统的细节,例如我在前面讲解软件渲染章节所说的细节。
        忽略GPU方面的着色编程,对你有用的函数总的来说被称为固定函数管线。许多渲染状态的管理都被API调用所封装,这允许你集中精力在你自己的图形系统
的高层细节。但是,作为交换,决定哪些函数被调用以及以什么顺序调用是你的责任。大量可下载的SDK,教程,和例子,特别是来自显卡制造商的网站,减轻了这方面的负担,但从大量提交到游戏开发者论坛和网络新闻组的问题来看,固定函数管线仍然被许多图形学领域的新人所误解。尽管你不需要了解渲染过程涉及到的大部分内部细节,但学习软件渲染器的实现会很好的令你理解正如你所遇到的,为什么我调用这些函数。Wild Magic软件渲染器是一个简单的实现。对于一个比你能想象得到的,拥有更多细节的,更加丰富的渲染器,你可以看Brian Paul的3D Graphics Library。这是一个倾向于非常类似OpenGL的软件实现。它的源代码是经常维护的。
        随着可编程GPU的引入,我们图形开发者被赋予强大的力量去创造和显示尖端的特效,这些都是通过着色编程实现的。现实总是这样,巨大的力量意味着巨大的责任。固定函数管线的状态管理的封装现在基本上是你的责任。举例子,为动态光照设置光照参数过去经常是大约调用一些图形API函数。现在你必须将他们传给着色程序和自己实现的光照公式。在另一方面,你不再限制于使用固定函数管线所用的光照模型。正如另一个例子,在固定函数管线里为一个单通多纹理效果启用纹理单元是非常普遍的。现在,有趣的,你必须为每种单通多纹理效果编写着色程序。因为可组合的数量很巨大,事实上手动创造所有这些是无益的。例如,如果你有4种光照类型(环境光,方向光,点光源,聚光灯),为了支持多达8个光源的任意组合的着色程序的数量是494。对于一个通过着色程序来支持大量特效的图形系统,拥有着色程序的自动生成以及着色编织(shader stitching)——一种组合已存在着色程序为单一程序,并且在运行时编译的能力,是很有用的。抉择是使用多通编程,但这是一种昂贵的方式,因为每多一个通道都需要重新光栅化一次网格里面的三角形。
        为了获得好的性能,图形系统应该利用好显卡提供的显存。任何东西,无论是顶点数据还是纹理图像,能往显存里传送一次并且缓存下来为以后使用都应该是。改变频繁的数据应该保存在AGP内存里,以利用好相比于从系统内存到显存的传输,从AGP内存到显存的传输速度更快的优势。
        Wild Magic版本3或者更早的版本里的渲染层尝试于使抽象渲染器API看起来像固定函数管线。它提供了一些函数调用实现一些特效,例如凹凸贴图,环境映射和透视纹理。任何时候,你创造一个新的和复杂的特效,特别是需要多通渲染,你不得不修改渲染器类,为特效增加虚拟函数,并且为了OpenGL和Direct3D,在继承渲染器类里面实现它。Wild Magic版本3也支持着色程序,但要求你添加C++类,每个都封装一对顶点和像素程序。再一次,这是尝试使渲染器看起来像它是固定函数管线。一些性能提高的东西被添加了,也就是,缓存顶点缓冲在显存的能力,但对于这样的一个系统,场景图管理系统和Direct3D渲染器构造得不是很友善。OpenGL渲染器运行良好,但Direct3D渲染器不是。
        Wild Magic版本4的渲染系统是之前系统的完全重写。它被设计为一个作为基础图像系统(硬件或软件)的资源管理系统。资源包括顶点缓冲(存储顶点位置和属性),索引缓冲(存储网格拓扑的索引),顶点和像素程序,以及纹理和相关的纹理坐标和图像。系统也包含清空各种缓冲(颜色,深度,模板)的支持。渲染器管理一个摄像机,动态光照,物体的变换,以及全局渲染状态诸如深度缓冲和alpha混合。系统的其他函数支持各种东西,诸如文本渲染,字体选择,用户自定义裁剪平面,颜色蒙版和深度范围。
        一大堆标准着色常量被支持,包括各种变换矩阵,光照和材质参数,摄像机参数,和投影器参数。设置这些的函数不是公开接口的一部分,但被用在启用顶点和像素程序的初始化。
        绘图系统是渲染器的核心,并且是资源处理的主客户端。下章描述Wild Magic 4的抽象渲染API,包括子系统在应用着色程序到几何图元过程中起到的作用。

posted on 2009-04-11 11:55 saltyshrimp 阅读(2212) 评论(3)  编辑 收藏 引用 所属分类: 3D游戏引擎设计-实时计算机图形学的应用方法(第二版)

评论

# re: (翻译)3.2 硬件渲染   回复  更多评论   

文章不错,楼主翻译的也很流畅...谢谢了...
2009-04-12 09:21 | sailtsao

# re: (翻译)3.2 硬件渲染 [未登录]  回复  更多评论   

楼主有没有pdf,共享一下啊
2009-04-30 13:54 | zz

# re: (翻译)3.2 硬件渲染   回复  更多评论   

@zz
当当网买的书,然后边看边翻吧,没有pdf
2009-04-30 17:57 | saltyshrimp

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理