重庆游戏人丨为重庆提供游戏开发技术培训服务

虚幻引擎UE3渲染3D效果之流水线处理流程

要讲UE3(虚幻引擎)如何处理3D效果流水线处理流程,首先要了解几个知识点。

1、什么叫虚幻引擎(UE)?

百度百科上是这样的说:“虚幻3引擎是一套为DirectX 9/10 PC、Xbox 360、PlayStation 3平台准备的完整的游戏开发构架,提供大量的核心技术阵列,内容编辑工具,支持高端开发团队的基础项目建设。 虚幻3引擎的所有编写观念都是为了更加容易的内容制作和编程的开发,为了让所有的美术开发人员能够牵扯到最少程序开发内容的情况下使用抽象程序助手来自由创建虚拟环境,以及提供程序编写者高效率的模块和可扩展的开发构架用来创建,测试,和完成各种类型的游戏制作。”

2、什么叫渲染?

渲染的英文名叫(英文原文render),用我们行内的话来说,就是三维的物体或三维的场景通过渲染转化成二维的图像,转化的二维图片同时又能很好的反应三维的场景和三维的物体。用下面的来表示吧。

3维渲染成二维示意图

3维渲染成二维示意图

 

3、什么叫流水线?

用个例子来说吧,生产一台电脑需要装电源、主板、硬盘、内存条几个步骤。如果一个人同时完成了生产电源、主板、硬盘、内存条等工作,这叫非流水线作业。流水线作业就是4个工位,1、一号工位负责生产CPU和主板,二号工位生产电源、三号工位生产硬盘、四号工位生产内存条。流水线的某个阶段的工位不用关心其他阶段的流程是否完成,只需要关注自己工位的产品的生产。从效率来看流水线作业的方法效率更高。

4、什么叫3D渲染流水线?

3D渲染流水线其实可以称之为3D渲染管道,是显示芯片内部处理图形信号相互独立而并行的处理单元。看图片的话更容易理解一些,如图所示3D渲染流水线就相当于工厂的流水线。而原材料就是一些3D的网格数据,最终就是在2D屏幕显示3D的画面。3D渲染流水线的处理和照相机照相的原理很像,它们都同样是要通过将3D世界的内容放置到2D平面上,通过2D的方式来展现3D世界,只不过3D世界场景的物体是通过电脑模拟的3D场景数据,而照相机所面对的是真实的世界。

3D渲染流水线流程图

3D渲染流水线流程图

了解了什么是虚幻引擎?什么叫渲染?什么叫流水线?什么叫3D渲染流水线?后。还是回归到主题,来讲解3D渲染流水线的步骤。

 

12步骤

首先1,2步骤是在CPU中执行的,它们的主要作用是为3D流水线准备当前帧中最终可能要渲染到屏幕上的所有网格数据,在UE3中,鼠标键盘输入、3D物体运动、碰撞检测、场景管理、骨骼计算、伤害判断等都是在这一步处理的,也就是说,和渲染无关的所有游戏逻辑,其实都还是放在CPU处理的,只不过UE3为了加快核心模块的运行效率,使用了MMX指令(多媒体扩展指令)和SSE指令(单指令多数据流式扩展)来优化核心部分的代码,比如骨骼计算和碰撞检测。

3456步骤

通常从第三步开始,都是在GPU内部处理的步骤了。3,4,5,6步骤是一个对顶点进行几何处理的流程,也叫做“顶点管线”,和后续“像素管线”相对应,它主要处理1,2步骤中输入的网格顶点数据,通过固定管道对这些数据进行几何坐标空间的变换、裁剪以及顶点的光照计算等。

顶点管线中有这么几个坐标空间:局部空间 -> 世界空间 -> 相机空间 -> 投影空间 -> 屏幕空间(视口空间),初始的网格数据是在局部空间中的,顶点管线将其从局部空间变换到屏幕空间作为输入供“像素管线”处理。为何要分这么多空间呢,因为上述每个空间都有处理某块逻辑的优势,比如局部空间内,一个人物的骨骼模型,它的中心点就是根骨骼的位置,在进行骨骼层次计算的时候,根骨骼放在中心位置是易于计算的,如果将其放置到世界空间中进行骨骼计算,那么根骨骼的位置不在原点且朝向也不为0,计算起来相当复杂。而世界空间中,易于描述场景中各个物体间的关系,易于作碰撞处理、伤害计算、顶点光照计算等。在相机空间中,容易描述被观察物体与观察者之间的关系,利用相机视锥体对物体进行裁剪,把观察不到的物体剔除掉。

坐标空间转换及推导这块内容设计到相当多几何学、线性代数等内容,但是也是非常有意思的一块内容,由于本期主要概述3D流水线的处理流程,所以几何推导这部分就不详细讲了,下期分享会结合DX9中的一些接口及程序示例讲解对应变换矩阵的推导流程。

VertexShader——顶点着色器是用来替换这个阶段中固定管线的顶点变换及光照计算的,传统管线处理顶点及光照的方式都是固定流程的,所以固定管线下的3D程序特效都有很大的局限性。引入顶点着色器之后,顶点的在空间中的变换以及光照处理都可以可编程化了,从而创造出许多精美的特效。顶点着色器主要是用来改变顶点固定流程中的变换过程,所以使用顶点着色器表现出来的大多是几何外形的变化以及顶点的光照、纹理等数据的变化。

在UE3中,是不能直接编写Shader语言的,UE3中把所有Shader特效都绑定到材质中,只能通过材质编辑器来间接的编辑顶点着色器和像素着色器内容。UE3中修改顶点着色器的方式也是在材质编辑器中进行的,其中比较典型的一个输入节点叫做WorldPositionOffset,它就是在顶点管道阶段对材质对应的网格物体顶点进行编辑的一个节点,对应到底层是修改了该材质对应的顶点着色器代码(通过编辑器的HLSL按钮能够看到该材质树对应的Shader代码),如下图所示:

虚幻引擎UE3渲染3D效果之流水线处理流程

虚幻引擎UE3渲染3D效果之流水线处理流程

应用该材质树后,网格物体将会得到一个在Z轴方向呈现正弦波状的一个柱子:

虚幻引擎UE3渲染3D效果之流水线处理流程

虚幻引擎UE3渲染3D效果之流水线处理流程

要注意的是,由于这个阶段是属于渲染阶段,它不负责处理任何游戏碰撞逻辑(上面说过游戏逻辑是在CPU中进行的),所以,即使柱子是弯曲的,但是它的碰撞盒还是直立的样子。

 

在UE3中,WorldPositionOffset还可以应用于植物的风动效果、水波效果等,通过传入一个风力参数或者是水波顶点受力方向等,在WorldPositionOffset的输入表达式中计算,最终得出该顶点应该渲染的位置。如图所示的材质树(红色框内),显示的是UE3中叶子类植物的风动表达式:

虚幻引擎UE3渲染3D效果之流水线处理流程

虚幻引擎UE3渲染3D效果之流水线处理流程

 

应用风动材质的植物:

虚幻引擎UE3渲染3D效果之流水线处理流程

虚幻引擎UE3渲染3D效果之流水线处理流程

题外话:GeometryShader,几何着色器,是SM4.0引入的。在DirectX9/SM3.0之前,GPU并不包含GeometryShader,3D模型的顶点信息是通过CPU这边预先准备好之后,再输入到GPU中,在GPU这里不能随意的进行增减。它的最主要的应用就是曲面细分,让多边形少的模型变成精细程度非常高的模型。几何着色器在上图步骤4中进行处理。下图是曲面细分处理前后的效果比较:

虚幻引擎UE3渲染3D效果之流水线处理流程

虚幻引擎UE3渲染3D效果之流水线处理流程

未做曲面细分前的屋子模型。

虚幻引擎UE3渲染3D效果之流水线处理流程

虚幻引擎UE3渲染3D效果之流水线处理流程

做完曲面细分后,可以看到瓦片、烟囱、窗户等地方的三角形数量明显猛增,再结合置换贴图,渲染效果截然不同!

1 2 3

未经允许不得转载:重庆游戏人 » 虚幻引擎UE3渲染3D效果之流水线处理流程

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址