本文由第三方AI基于17173文章http://news.17173.com/content/2005-3-14/n49_965645.html提炼总结而成,可能与原文真实意图存在偏差。不代表网站观点和立场。推荐点击链接阅读原文细致比对和校验。
全新3D技术-顶点复用流分频器
2005-03-14 11:07:28
神评论
转载自:PCPRO
在好莱坞的大片中,我们经常都可以看到千军万马厮杀作战的盛大场面,但现在的3D游戏中依然只是单人任务,无法实现电影级的宏伟场景。原因并非是游戏开发的落后,而是技术限制使然。一个模型需要使用上百万个多边形,倘若屏幕上同时出现成千上万个模型,对硬件系统无疑是一场灾难。事实上,我们相信现在没有一个硬件平台可以胜任这样的恐怖任务。
然而,Shader Model 3.0以一种巧妙的方法解决了问题。Shader Model 3.0引入一项“顶点复用流分频器”技术(Vertex Frequency Stream Divider),该技术允许模型调用已有的顶点资源,达到减轻多边形生成任务的目的。举个例子,倘若要创建一支包含1万名战士的军队,那么我们只要建立一个战士的三维模型,然后将其直接复制1万次。接下来,设计者定义出一万种不同的运动状态并分别将数据流随机赋值,我们便可以看到屏幕上出现了一支包含万名战士的庞大军队。尽管每个战士的外形完全相同,但它们的表情、动作都互不相同,倘若我们再多使用几个三维模型,所得效果与一一建模、渲染无异,而它并不会导致运算量的灾难性上升,相信两年后的桌面GPU完全可以轻松应付。
取消指令长度限制
指令长度限制问题曾让不少程序员对DirectX API大为光火。Shader Model 1.0规定,顶点渲染指令长度最多不超过128条,像素渲染指令不超过96条。升级到2.0版本之后,顶点指令长度也只能达到256条,即便是在DirectX 9.0b中,指令长度也仅仅提高到512条。指令越长,设计者便可让一个程序完成更多操作,有利于设计出高复杂的渲染画面。但如果指令限制严格的话,程序员就需要将一个大渲染任务分解为几个小程序来完成,所造成的后果就是程序编写麻烦,执行效率低下,很难实现高精度的画面渲染。
问题同样在Shader Model 3.0中得到解决。微软决定取消程序指令长度的限制,程序员可以使用任意长度的指令来编写渲染指令,这样不仅可营造出无比精美的3D场景,同时也因省略原本存在的大量跳转操作而提高了硬件利用率,为下一代高画质游戏开发扫除了后顾之忧。
引入HLSL高级程序语言
引入HLSL高级语言同样是为程序员们考虑。过去,渲染程序所用的语言类似汇编,枯燥、晦涩不说,甚至也没有循环、分支等常见的控制功能,给开发工作造成很大的困扰。过去,nVIDIA试图以Cg(C for Graphics)语言来解决问题,但它并没有为业界广泛接受,而OpenGL联盟推出的GLSL(OpenGL shader language)语言则大获成功。有鉴于此,微软在Shader Model 3.0中也决定引入一种类似C++的HLSL高级语言,专门用于渲染程序编写。HLSL代码精简,丰富的控制语句让程序编写工作变得更为简单,程序员们可以很高的效率来开发新游戏,相信这会让所有的游戏开发者感到欢呼雀跃。
全新的OpenGL 2.0
DirectX API针对娱乐市场,为3D游戏服务是它的全部目的,但OpenGL与之不同,虽然3D游戏对它来说非常重要,但它还是更多顾及到专业图形领域。两种API不同定位的根本原因在于标准制定者:DirectX API为微软一家独有,OpenGL则是一套业界共同参与的API,SGI(大名鼎鼎的工作站厂商)是它的开创者,也是最初领导者,现在则是由“OpenGL委员会”专门负责。由于历史原因,OpenGL近些年的进步非常缓慢,在DirectX飞速前进的时候它几乎还是在原地徘徊,要不是id Software的鼎立支持,OpenGL很有可能已经被DirectX所取代。id Software在1997年开发Quake 2的时候,因当时DirectX 3.0设计糟糕而选择了OpenGL,技术延续性让它沿着这条路一直走下去,DOOM3、Quake 4之类的大作也继续沿用了OpenGL API。8月份,我们期待已久的OpenGL 2.0终于发布,而它带来了五个方面的重大改进:复杂的核心被彻底精简;完全硬件可编程能力;改进的内存管理机制,支持高级像素处理;扩展至数字媒体领域,使之跨越高端图形和多媒体范畴;支持嵌入式图形应用。
精简的核心
OpenGL 2.0构建在OpenGL 1.3基础之上,为了平滑过渡,OpenGL 2.0采用渐进方式进行升级。第一阶段侧重兼容能力,新核心将在精简后的OpenGL 1.3功能模块基础上增加一些新功能来共同组成(图8)。在满足兼容性的同时,将OpenGL 1.3中数量众多,且纠缠不清的扩展指令进行彻底精简。第一阶段的任务只是为了过渡。第二阶段,OpenGL 2.0将逐步抛弃1.3,采用高效的“纯内核(Pure OpenGL 2.0)”。纯内核包含更多新增加的“精简型API函数”, 包括完全可编程能力、改进的内存管理机制和OpenML数字媒体功能等至关重要的新特性。此时OpenGL 2.0才进入真正的成熟期。
完全可编程特性
DirectX 9 API中具有完备的可编程能力,这项特性最大的好处就是灵活性,游戏开发商可根据自身需要灵活地制作出自己想要的图形效果,是更高精度、更快速度,还是在二者间折衷。显卡厂商之所以对DirectX 9积极支持很大程度上就是受可编程特性吸引。同样,OpenGL 2.0也将具备全面的可编程能力,包括可编程顶点处理、可编程片段处理和可编程图像格式三大部分,整体功能已然超越了DirectX 9。
● 可编程顶点处理:取代坐标转换、材质应用程序及光照运算,允许对个别顶点作随机运算;
● 可编程片段处理:取代材质存取、材质应用及雾化功能,允许个别片段的随机运算;
● 可编程图像格式:取代固定格式封装和解封装运算,并允许OpenGL在传送或接收像素数据时,将类型与格式进行任意组合。
优化内存管理
OpenGL 2.0对OpenGL 1.X系列僵化的内存管理机制进行了有效改进。先前的OpenGL 1.X采用类似“**”的方式来管理内存,应用程序无需了解运算结果和运算要花的时间,也无需控制存储空间分配及对象的存放,内存中的所有数据都会被自动处理。在当时条件下,这种设计是相当成功的,它将程序员从繁琐的内存管理工作中解放出来,将精力花在其他方面。但随着时间的推移,“**”的弊端变得越发明显,程序员无法有效控制对象的复制、搬移、删除或封装过程,也搞不清楚内存资源的虚拟化,导致内存利用效率奇低无比,成为影响显卡性能的一大制约因素。
OpenGL 2.0采用这样的一套机制对内存管理作了高度优化,直接为数据对象建立定位/连结的接口,同时充分利用顶点数组、图像、材质、着色、显示清单及像素缓冲区来对其作精确控制,此外OpenGL 2.0还借助压缩技术来减少数据的移动量。这些措施使OpenGL 2.0获得高效管理内存的能力,同时保留“**”简单易用的优点。
整合OpenML接口
精简核心、完整可编程、优化内存管理机制,这些措施都是为了让程序员可以更得心应手地使用OpenGL来开发游戏或专业软件,但新增的OpenML接口却是着眼于功能扩展。OpenML本身是一个针对数字视频、音频、动画等多媒体功能的应用程序接口,娱乐功能相当强大,整合OpenML之后的OpenGL 2.0将集高端图形、数字媒体于一身,摇身一变成为超越DirectX 9的全能型API。但这还不是全部,嵌入式设备对图形应用的需求越来越为人关注,譬如未来的掌上电脑、PDA甚至是手机都有可能使用3D图形,而这些领域尚是一片空白,显然极具发展潜力。OpenGL 2.0增加了嵌入式图形API,ATi和nVIDIA针对掌上电脑、彩屏手机的掌上3D芯片都在此基础上进行开发,由于DirectX并不打算进入这个领域,OpenGL 2.0很有可能将完全垄断这个市场。
图7 顶点复用流分频技术让营造盛大3D游戏场面成为可能
在好莱坞的大片中,我们经常都可以看到千军万马厮杀作战的盛大场面,但现在的3D游戏中依然只是单人任务,无法实现电影级的宏伟场景。原因并非是游戏开发的落后,而是技术限制使然。一个模型需要使用上百万个多边形,倘若屏幕上同时出现成千上万个模型,对硬件系统无疑是一场灾难。事实上,我们相信现在没有一个硬件平台可以胜任这样的恐怖任务。
然而,Shader Model 3.0以一种巧妙的方法解决了问题。Shader Model 3.0引入一项“顶点复用流分频器”技术(Vertex Frequency Stream Divider),该技术允许模型调用已有的顶点资源,达到减轻多边形生成任务的目的。举个例子,倘若要创建一支包含1万名战士的军队,那么我们只要建立一个战士的三维模型,然后将其直接复制1万次。接下来,设计者定义出一万种不同的运动状态并分别将数据流随机赋值,我们便可以看到屏幕上出现了一支包含万名战士的庞大军队。尽管每个战士的外形完全相同,但它们的表情、动作都互不相同,倘若我们再多使用几个三维模型,所得效果与一一建模、渲染无异,而它并不会导致运算量的灾难性上升,相信两年后的桌面GPU完全可以轻松应付。
取消指令长度限制
指令长度限制问题曾让不少程序员对DirectX API大为光火。Shader Model 1.0规定,顶点渲染指令长度最多不超过128条,像素渲染指令不超过96条。升级到2.0版本之后,顶点指令长度也只能达到256条,即便是在DirectX 9.0b中,指令长度也仅仅提高到512条。指令越长,设计者便可让一个程序完成更多操作,有利于设计出高复杂的渲染画面。但如果指令限制严格的话,程序员就需要将一个大渲染任务分解为几个小程序来完成,所造成的后果就是程序编写麻烦,执行效率低下,很难实现高精度的画面渲染。
问题同样在Shader Model 3.0中得到解决。微软决定取消程序指令长度的限制,程序员可以使用任意长度的指令来编写渲染指令,这样不仅可营造出无比精美的3D场景,同时也因省略原本存在的大量跳转操作而提高了硬件利用率,为下一代高画质游戏开发扫除了后顾之忧。
引入HLSL高级程序语言
引入HLSL高级语言同样是为程序员们考虑。过去,渲染程序所用的语言类似汇编,枯燥、晦涩不说,甚至也没有循环、分支等常见的控制功能,给开发工作造成很大的困扰。过去,nVIDIA试图以Cg(C for Graphics)语言来解决问题,但它并没有为业界广泛接受,而OpenGL联盟推出的GLSL(OpenGL shader language)语言则大获成功。有鉴于此,微软在Shader Model 3.0中也决定引入一种类似C++的HLSL高级语言,专门用于渲染程序编写。HLSL代码精简,丰富的控制语句让程序编写工作变得更为简单,程序员们可以很高的效率来开发新游戏,相信这会让所有的游戏开发者感到欢呼雀跃。
全新的OpenGL 2.0
DirectX API针对娱乐市场,为3D游戏服务是它的全部目的,但OpenGL与之不同,虽然3D游戏对它来说非常重要,但它还是更多顾及到专业图形领域。两种API不同定位的根本原因在于标准制定者:DirectX API为微软一家独有,OpenGL则是一套业界共同参与的API,SGI(大名鼎鼎的工作站厂商)是它的开创者,也是最初领导者,现在则是由“OpenGL委员会”专门负责。由于历史原因,OpenGL近些年的进步非常缓慢,在DirectX飞速前进的时候它几乎还是在原地徘徊,要不是id Software的鼎立支持,OpenGL很有可能已经被DirectX所取代。id Software在1997年开发Quake 2的时候,因当时DirectX 3.0设计糟糕而选择了OpenGL,技术延续性让它沿着这条路一直走下去,DOOM3、Quake 4之类的大作也继续沿用了OpenGL API。8月份,我们期待已久的OpenGL 2.0终于发布,而它带来了五个方面的重大改进:复杂的核心被彻底精简;完全硬件可编程能力;改进的内存管理机制,支持高级像素处理;扩展至数字媒体领域,使之跨越高端图形和多媒体范畴;支持嵌入式图形应用。
图8 OpenGL 2.0第一阶段,以OpenGL 1.3为基础加入新功能
图9 OpenGL 2.0第二阶段,使用更强大、高效的纯内核,原1.3功能逐渐被抛弃
精简的核心
OpenGL 2.0构建在OpenGL 1.3基础之上,为了平滑过渡,OpenGL 2.0采用渐进方式进行升级。第一阶段侧重兼容能力,新核心将在精简后的OpenGL 1.3功能模块基础上增加一些新功能来共同组成(图8)。在满足兼容性的同时,将OpenGL 1.3中数量众多,且纠缠不清的扩展指令进行彻底精简。第一阶段的任务只是为了过渡。第二阶段,OpenGL 2.0将逐步抛弃1.3,采用高效的“纯内核(Pure OpenGL 2.0)”。纯内核包含更多新增加的“精简型API函数”, 包括完全可编程能力、改进的内存管理机制和OpenML数字媒体功能等至关重要的新特性。此时OpenGL 2.0才进入真正的成熟期。
完全可编程特性
DirectX 9 API中具有完备的可编程能力,这项特性最大的好处就是灵活性,游戏开发商可根据自身需要灵活地制作出自己想要的图形效果,是更高精度、更快速度,还是在二者间折衷。显卡厂商之所以对DirectX 9积极支持很大程度上就是受可编程特性吸引。同样,OpenGL 2.0也将具备全面的可编程能力,包括可编程顶点处理、可编程片段处理和可编程图像格式三大部分,整体功能已然超越了DirectX 9。
● 可编程顶点处理:取代坐标转换、材质应用程序及光照运算,允许对个别顶点作随机运算;
● 可编程片段处理:取代材质存取、材质应用及雾化功能,允许个别片段的随机运算;
● 可编程图像格式:取代固定格式封装和解封装运算,并允许OpenGL在传送或接收像素数据时,将类型与格式进行任意组合。
优化内存管理
OpenGL 2.0对OpenGL 1.X系列僵化的内存管理机制进行了有效改进。先前的OpenGL 1.X采用类似“**”的方式来管理内存,应用程序无需了解运算结果和运算要花的时间,也无需控制存储空间分配及对象的存放,内存中的所有数据都会被自动处理。在当时条件下,这种设计是相当成功的,它将程序员从繁琐的内存管理工作中解放出来,将精力花在其他方面。但随着时间的推移,“**”的弊端变得越发明显,程序员无法有效控制对象的复制、搬移、删除或封装过程,也搞不清楚内存资源的虚拟化,导致内存利用效率奇低无比,成为影响显卡性能的一大制约因素。
OpenGL 2.0采用这样的一套机制对内存管理作了高度优化,直接为数据对象建立定位/连结的接口,同时充分利用顶点数组、图像、材质、着色、显示清单及像素缓冲区来对其作精确控制,此外OpenGL 2.0还借助压缩技术来减少数据的移动量。这些措施使OpenGL 2.0获得高效管理内存的能力,同时保留“**”简单易用的优点。
整合OpenML接口
精简核心、完整可编程、优化内存管理机制,这些措施都是为了让程序员可以更得心应手地使用OpenGL来开发游戏或专业软件,但新增的OpenML接口却是着眼于功能扩展。OpenML本身是一个针对数字视频、音频、动画等多媒体功能的应用程序接口,娱乐功能相当强大,整合OpenML之后的OpenGL 2.0将集高端图形、数字媒体于一身,摇身一变成为超越DirectX 9的全能型API。但这还不是全部,嵌入式设备对图形应用的需求越来越为人关注,譬如未来的掌上电脑、PDA甚至是手机都有可能使用3D图形,而这些领域尚是一片空白,显然极具发展潜力。OpenGL 2.0增加了嵌入式图形API,ATi和nVIDIA针对掌上电脑、彩屏手机的掌上3D芯片都在此基础上进行开发,由于DirectX并不打算进入这个领域,OpenGL 2.0很有可能将完全垄断这个市场。
【来源:】
关于引擎的新闻
- (2026-06-09) 《爆弹战车:放置点击》新增装备 & 功能优化
- (2026-06-07) 曝《GTA6》Bug数量大幅膨胀!前作已高达14万个
- (2026-06-01) 2030年之前! Take-Two CEO暗示《荒野大镖客:救赎3》或能尽早面世
- (2026-05-30) 《加油站大亨》大叔的交通法则第七条
- (2026-05-29) 《汽车修理工模拟2018》免费领取周圆满落幕但超值优惠仍在继续!🔥




