CPU处理数据、渲染管线

目录

CPU与GPU

数据处理

点的数据

面的数据

摄像机数据

灯光数据

材质球

渲染管线

顶点处理(Vertex Shder)

生成三角形

光栅化

像素着色

后处理(Post -Process)


CPU与GPU

首先,让我们先认识两个处理器

GPU:图形处理器--显卡重要组成部分(决定画面好坏)

CPU:中央处理器--对数据的控制

CPU命令GPU进行渲染,告诉GPU应该渲染什么部分,为GPU准备所需要的东西

那CPU是怎么准备数据的呢?

数据处理

渲染首先要有一个3D模型,但在CPU眼中其实就是一堆数据

点的数据

例如一个立方体,我们若想用数据准确描述,首先应该有顶点,再有法线,顶点色等

这些数据有一个更专业的说法--顶点缓存(Vertex Buffer)

而仅仅有点的数据是完全不够的,还应该有面的数据来构成3D模型

面的数据

每3个顶点构成一个面--三角面(Triangle)

而每一个三角面会记录绘制它的顶点号码(如图,0,1,3...),而(0,1,2)、(2,3,0)就是索引(Index)

该立方体所有索引数据结合就是--索引缓存(Index Buffer)

模型准备好后,还需知道玩家在哪里

摄像机数据

除了最基本的位置和方向,还需要知道范围

即是FOV(find of view)

并且摄像机不能看的无穷远,也不能看的无穷近,所以会进行两个设置,近平面(Near ClipPlane)与远平面裁切(Far ClipPlane)

而被裁切出来蓝色部分就叫做视锥(Frustrum)

为了让我们的3D模型有光影效果,为场景添加光线

灯光数据

添加光线,例如太阳光(平行光),需要方向,颜色,强度等数据

材质球

CPU准备Shader(着色器)--一段代码,去告诉GPU该如何渲染模型

而光有这一段代码是不够的,Shder还要引用某些贴图以及各种需要调节的参数

而这些数据综合起来构成材质球这么一个概念

至此GPU所需数据基本准备完毕

渲染管线

如图,GPU将CPU打包数据进行一连串处理,这些处理过程就是渲染管线(其中,绿色部分表示可进行编程修改阶段,即Shder发挥作用的阶段)

顶点处理(Vertex Shder)

用之前CPU已准备好的模型顶点数据,在这一步可对其他属性做一些额外处理,例如:顶点动画

但最重要的还是把这些顶点变换到裁切空间(Clip Space)中,将模型的顶点变换到世界空间(Worls Space),再变换到摄像机空间(View Space),最后把它变换到裁切空间(Clip Space)

有了裁切空间,我们可以很方便地把顶点投影到屏幕(Screen Space)上

就像是把一个3D的东西拍平成一个二维的平面,并且可以根据屏幕的像素大小把这些点映射到我们屏幕的对应位置。即使经过了多次变化,但是点跟点的连接并没有变,就是说之前在3D空间中,哪三个点构成一个三角形,在屏幕上也是这三个点构成一个三角形

生成三角形

所以这个阶段GPU就开始遍历我们模型上的所有三角形,也就相当于把模型的三角面投影到了我们屏幕上。

光栅化

但我们的显示器是由一个像素组成,所以这一步就要把这些三角形变成,屏幕上对应的像素,也就是所谓的光栅化

像素着色

主要对我们的模型效果产生变化的阶段

可以根据灯光做出明暗变化的效果

也可以根据贴图坐标去采样贴图

后处理(Post -Process)

最后我们得到一个绘制完的结果,但一般情况下,我们不会直接将结果输出到屏幕上,还会对这一张图做进一步的处理,比如看锯齿、校色,添加bloom之类

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值