计算机图形学(Computer Graphics )简称CG,是一门研究如何利用计算机进行图形计算、处理和显示的学科,简单的说图形学是一种使用数学算法将二维或者三维图形转化为计算机显示器所能显示的二维栅格形式的科学,就是从
3D
到2D
的转换。
Modeling
:构造场景的三维模型 – 建模Rendering
:将三维模型画在屏幕上–渲染Animation
:让图像动起来–动画渲染的意思:根据三维模型,计算屏幕窗口中每个像素点的颜色,像素点的颜色与光照、环境以及物体材质等因素有关,本质就是计算像素点的颜色
经典示例: http://physbam.stanford.edu/~fedkiw/
日常生活角度来讲图形与图像并没有任何差别,图形英文是Graph
图像英文是Image
形
的几何信息但是两者之间并不是完全分开,图形之中也会有图像的成分,因为图形的显示最终要转化为图像,图形中的纹理就是图像
简称CG
,主要是从三维模型到二维图像转换的一个过程
输入
三维模型 > 绘制 >输出
二维图像
简称IP
,主要是对图像的处理
输入
二维图像 > 分析处理 > 得到其他信息或者生成某种特效
简称CV
,同样也是对二维图像的处理
输入
二维图像 > 分析处理 > 三维信息
Graphics Pipeline
概念
简单的理解:在计算机中将3D
模型转化为屏幕上的图像需要经过一系列的处理步骤,这个处理步骤就是图形流水线。
图形流水线已经硬化到了显卡GPU
中,显卡就是专门用于画图的处理器。
CPU
负责组织数据,数据处理完成之后,就交给GPU
去处理后面的任务
阶段如下
Vertex operation
:顶点处理阶段,会对顶点数据进行一些列的变换,是由三维模型到二维图形的转换
Rasterization
:光栅化,此过程大概就是计算二维图形锁覆盖的所有像素Fragment operation
:此阶段是对光栅化后的像素进行处理的阶段,进行颜色的很多处理,然后把片元填入帧缓冲区中基础图图形库
OpenGL
,Direct3D
辅助OpenGL
开发的工具库
aux
,glut
,freeglut
,glfw
辅助调用openGL
扩展功能的库
glew
(shader开发),glad
基于OpenGL进行轻量级开发的库
bgfx
:可以进行多语言开发OpenGL
,不仅仅是使用C/C++
,还可以使用C#
,Python
…
三维图形引擎
OSG
,OGRE
,对OpenGL
进行了封装,类似于three
对WebGL
的封装
所谓调用图形硬件的程序接口,就是通过OpenGL去调用图形显卡驱动程序来进行绘图,而不是应用程序直接去调用显卡驱动,因为直接的调用显卡驱动是很难绘图的,所以通过OpenGL作为中间的媒介,来更好的进行绘制。
Direct3D在游戏界占据优势,是微软公司开发的图形库,OpenGL的优势是跨平台,可以在任何平台上使用,但是两者的背后都是同样的图形流水线
GPU:Graphics Processing unit,图形处理单元
CPU:Central processing Unit,中央处理单元
GPU比CPU快吗?
GPU是并行的,例如Geforce 7800 有24条像素渲染管线,可以做到24路并行,但是CPU是为了通用计算,而GPU之需要执行相对固定的任务,因此GPU更快,但是不如CPU灵活,通用,现代的CPU正变得越来越灵活,并且具有了可编程功能和统一渲染框架
图形流水线式固定的,任何情况都按照一种模式进行,只能通过往函数中传递一些参数来影响它,因此固定图形流水线不够灵活
后来在2002年开始,GPU在Vertex Operation
和Fragment Operation
这两个模块中具有了可编程功能,可以通过代码来直接改变固定流水线的流程,当数据走到上面两个模块中时,可以通过程序来控制流水线
举例:比如模拟布料的效果,在以前是在CPU中把每一帧的顶点变化都计算出来,然后再传递给流水线去执行,但是有了Vertex Shader 之后就不再需要通过CPU去计算顶点发生的变化了,CPU只需要把顶点数据准备好,计算交给Vertex Shader就可以了,可以直接在Vertex shader 中编程控制顶点的各种属性
优点:
在之前没有这个Geometry Shader
之前,有多少顶点就只能处理多少顶点,不能出现新的顶点,有了Geometry Shader
之后,就可以生成新的顶点和面片,可以在GPU中细化模型
例如一开始是一个粗糙的面片,然后通过Geometry Shader
可以不断的把这个粗糙的面片不断的进行细化,编程更细腻的模型
一开始编程的时候需要使用汇编语言,来进行GPU编程,然后可以通过Cg
来编程,今天可以使用的语言
Cg
—C for Graphics
HLSL
— High Level Shading Language ,for D3D
GLSL
— GL Shading Language ,for OpenGL
上面就是所谓的shader
编程,在了解了图形流水线的基础之上然后再学习shader
编程
GPU 因为其强大的计算能力,不仅仅用于画图,被用在各个领域
高性能计算领域
各个领域中的大计算任务
医学、化学、生物、金融、科学计算、图像处理
人工智能
区块链
通用并行计算平台
CUDA和OpenCL的出现,使得不具备计算机图形学基础的人也可以利用GPU进行通用并行计算
智能时代的机遇
GPU + CPU
混合架构的Tesla高性能计算系统(2015)