我们在看到一些流光溢彩美轮美奂的效果时,心中可能会出现这样的疑惑:程序员是通过什么技术把想要的表现效果呈现在屏幕上的呢。其实用的是shader特效,那到底什么是shader呢,它渲染管线有什么关系呢?
Shader效果(取自glslsandbox事例)
说到渲染管线首先我们明确一个概念:渲染。
渲染在维基百科的定义:在电脑绘图中,是指以软件由模型生成图像的过程。模型是用语言或者数据结构进行严格定义的三维物体或虚拟场景的描述,它包括几何、视点、纹理、照明和阴影等信息。图像是数字图像或者位图图像。
众所周知,计算机上显示的图像都是经过CPU、GPU计算最终的渲染到屏幕上,由我们人眼所接收到,所以我们要让一个物体呈现出不同的颜色和形状,这就要求我们对它们的位置顶点和颜色信息进行代码的干涉修改,那这个修改过程是如何进行的呢,这里我们就要讲到下一个概念了:图形渲染流水线
渲染流水线的工作任务在于由一个三维场景触发、生成(或者说渲染)一张二维图像。换句话说,计算机需要从一系列的顶点数据,纹理等信息出发,把这些信息最终转化成一张人眼可以看到的图像。而这个工作通常是靠CPU和GPU共同完成的。之所以不都用CPU去做这件事是因为GPU在特定阶段对图像处理有着得天独厚的优势,好比是有一千道十以内加减法的算术题。如果让一千名小学生来分配完成计算和一个心算口算能力都顶尖的大学教授来计算做完成时间的比较,那就算教授的计算能力再卓越,完成计算需要的总消耗用时也会远低于这一千名小学生。这些小学生也就像流水线上的工人,每个人都在做同一件事情,这样GPU的高并行计算效率就远高于CPU了。
渲染流水线三个阶段
阶段一:应用阶段
准备要渲染的场景和模型,对需要渲染的数据如位置信息等做准备,执行Culling剔除,将不可见的物体剔除掉。最后再设置渲染状态,设置好渲染图元,并输出渲染的几何信息。此阶段在CPU阶段完成。
阶段二:几何阶段
将模型顶点坐标变换到屏幕中,在交给下一阶段的光栅器进行处理。
阶段三:光栅化阶段
该阶段将应用阶段数据处理成屏幕像素,并渲染成图像。该阶段的主要任务是将上一阶段得到的逐顶点的纹理坐标和顶点颜色进行差值运算,并进行逐像素处理。此阶段在GPU阶段主导完成。
shader
Shader,中文翻译即着色器,是一种较为短小的程序片段,用于告诉图形硬件如何计算和输出图像,Shader是可编程图形管线的算法片段。
shader即是在渲染流水线交给程序员对我们的模型图片等数据进行形态和色彩可编程部分编写的代码片段。渲染管线是对计算机数据转换成最终呈现图像的形象过程描述。本期关于shader渲染管线的介绍就到此结束,下周继续给大家进行知识分享~