[转]Stage 3D翻译系列之二:Stage 3D是如何工作的(深入篇)

继续昨天的翻译。。

深入3D渲染管道(pipeline)

    3D渲染管道促进了基于硬件的3D渲染。管道意味着渲染工作被分割为一组有序的基本命令操作。GPU由一系列的单元组成。每个单元负责一个基本命令操作。每个单元之间有级联关系,上一个单元的输出作为下一个单元的输入。

    最早发布的3D图形渲染管道被称为固定功能管道(fixed function pipeline),这就意味着它是非可编程的管道。它的功能有些单一,只是简单的接收几何图形数据,用管道单元进行处理,然后产生最终的渲染图像(见图1)

图1:固定功能图形管道单元

    用固定功能管道,你需要给GPU如下输入:关于几何图形的描述(顶点和三角形),几何图形在场景中的纹理,位置和方向,场景摄像机的位置和方向,光源(数量、颜色和位置),和一些额外的必须变量。换句话说,用以前的系统工作,你只是把顶点/三角形/纹理作为参数传递给硬件,让它来完成渲染工作。

    固定功能管道包含变换和光照单元,它们负责转换本地(模型中)空间的顶点的坐标,然后将其映射到屏幕上,另外每个顶点的光源工作也由它们完成。接下来的是视域剪裁(Viewport clipping)单元,它负责将在视域中预计可见的部分剪裁下来输出。这些被剪裁的数据向下通过管道传递到了光栅化阶段(rasterizer stage),这个阶段主要完成纹理和映射工作,同时还负责雾化、alpha变化效果和按照适当的顺序来执行为渲染三角形像素所需要的深度缓冲测试。

    固定功能管道已经很好的工作了很多年,但随着时间流逝,人们发现它的渲染过程有些死板(rigid),特对是对于光照渲染,只能使用诸如基本的Goraud和Phong标准的着色模型。固定功能管道不够灵活,让开发者在面对一些生动有趣的效果时,只能望洋兴叹。在很多时候,渲染看起来都是一样的。

    然后,可编程图形管线被引入进来。下图说明了可编程图形管道全新的渲染流程(见图2)

图2:可编程图形管道单元

    两种系统最大的不同在于新系统引入了两个额外的单元:顶点着色和片段着色。这个两个单元是可编程的。当用可编程管道编写应用时,你可以编写一些叫做着色器(Shaders)的代码片段,这个东东会对渲染管线产生重大影响。

    随着这个不起眼的着色器的引入,3D渲染世界的一切都被改变了。

    通过编写顶点着色器来改善顶点的变换和修改,通过编写片段着色器来改善三角形像素颜色的渲染,现在我们能创造出以前无法渲染的炫酷效果。例如:你可以用着 色器来自定义适用于各种光照技术的特定应用,而不是使用默认的管道提供的。着色器使很多炫酷炫酷效果称为可能,比如添加阴影,硬件加速骨骼系统等。

    随后你将在本教程中学习到如何使用着色器和可编程渲染管道。Stage3D完全基于可编程功能管道,你甚至没有使用固定功能管道的选择。这是一个优点,因为你可以编写顶点着色器来充分利用硬件加速的优势。你现在可以在Flash 3D应用中创建令人称奇的效果。

    功能强大也是一把双刃剑:为了执行最简单的渲染,你都要写自己的着色器。象固定功能管线那样简单的设置几个变量就可以渲染的方式在可编程渲染管道中是不可行的。

比较Stage3D的优势和限制

    在本节中,你将了解到Stage3D对其它标准原生平台3D API的优势,比如:OpenGL和DirectX。OpenGL和DirectX已经使用超过十年了。他们是在现代计算机中创建大型游戏的主要手段。

    开始,用DirectX和OpenGL创建一个3D应用不是一项简单的任务。渲染一个简单的三角形很直接,但是用C++常见一个成熟的3D应用需要相当的技巧,这当然不是一个新手能完成的。

    创建一个原生3D应用程序的困难之一就是标准DirectX和OpenGL API的使用。为了让开发者充分利用图形硬件,项目必须提供所有硬件的控制项。原生API几乎直接控制硬件,开发者要处理应用运行时不同GPU的能力差异问题,为了能够充分利用最强大的硬件,调整代码是在所难免的。这对于开发者来说是一个好处,因为你可以用更强的硬件创造出更好的效果。但这也意味着要修改应用,并且在不同的硬件上进行测试。

    Stage3D工作时却并非如此。你面对的都是Stage3D经过抽象了的Context3D和Program3D。编写的应用程序可以在支持Flash Player(AIR 运行时)的任何平台运行。充某种程度上来说,Stage3D比原生API更加抽象,离硬件本身更远,所以使用起来会更容易一些。当然,这在某些方面来说是一个缺点,因为你并没有直接面对特定硬件并且充分利用此硬件的特定功能。你只是在虚拟的Stage3D平台上编码;Stage3D在你的代码和实际硬件中扮演了中间人的角色。

    Stage3D一个重大的优势是你可以将3D硬件加速的强大功能和易于使用的普通2D Flash authoring结合起来。当要创建一个3D应用的2D UI时,没有什么创作工具比Flash更加灵活。用Stage3D,常规的Flash 2D内容可以同Stage3D内容同时存在,所以你可以拥有Flash的所有优势,同时又可以使用3D硬件加速。你可以创建一个纯3D场景,或者在2D的内容中创建一些小3D的物件。

    Stage3D应用可以在不同的平台上运行。你可以把Stage3D应用作为一个AIR应用或者让它在Flash Player中运行。这个功能意味着你可以用Stage3D创建一个桌面的3D应用,就像其它原生3D原生应用一样。最终用一份代码编译的应用可以直接部署到移动平台,例如:iOS和Android。得益于Flash Player巨大的安装率,可以想像用Stage3D开发的应用程序将可以运行在几乎世界的每一台计算机上。

明确Stage3D的限制

    主要的缺点是为了照顾平台兼容性,用一个统一的API,针对所有平台,Stage3D无法利用在某些高级3D显卡上才有的高级特性。为了确保一个应用使用所有的平台,Stage3D不得不抽象出一个3D硬件设备,使之适用于所有平台。例如,主流显卡都已经支持SM 4.0(用于顶点和片段着色的标准),但是,Stage3D只支持SM2.0。这意味着当你用Stage3D编码时,你会遇到一些限制,这些限制让你充分使用高端显卡的功能。例如,像AGAL这个着色器语言,你能使用的着色寄存器数量有限制,最多可以有8个临时寄存器,而用SM4.0的GLSL时,这个数量是4096个。

    Stage3D着色器最多只支持200条OpCodes,而SM4.0支持4096条。而且Stage3D着色器不支持条件操作和循环,但是SM3.0和4.0都支持。换句话说,Stage3D的着色器是非常简单的,不支持更为先进的硬件和SM版本。因此,在今天的AAA(高成本、高质量、高销量)游戏中着色器所实现的高级效果,Stage3D无法实现。

(待续…)

引用地址:http://www.adobe.com/devnet/flashplayer/articles/how-stage3d-works.html

本文固定链接: http://www.gisthink.com/blog/guoguogis/?p=321 | GUOGUOGIS


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值