光栅渲染技术
栅格化:将几何数据 进过变换后 最终变为一些列像素点数据,最终呈现在显示设备上的过程
光栅化:rasterization
将矢量点组成的图形进行像素化的过程
光线投射:ray casting
正向投射,从图像的每一个像素,沿视线方向发射光线,光线穿越整个图像序列,并在这个过程中,对图像序列进行采样获取颜色信息,同时依据光线吸收模型将颜色值进行累加,直至光线穿越整个图像序列,最后得到的颜色值就是渲染图像的颜色(像素点位置–》像素点颜色)
光线追踪:ray tracing
逆向追踪,沿着到达视点的光线的反方向跟踪,经过屏幕上每一个象素,找出与视线相交的物体表面点,并继续跟踪,找出影响点光强的所有光源,从而算出点上精确的光线强度。(视角–像素位置–投影光源计算颜色)
渲染时机:
- 实时渲染:游戏等,根据输入,实时的计算输出
- 离线渲染:电影等,直接将渲染好的 所有像素帧序列显示
GPU Graphic Process Unit
最初被设计时就是用来做实时的图像渲染(光栅化)的加速的。如果实时渲染器中只使用cpu的渲染器叫做软光栅渲染器,速度慢
GPU采用了数量众多的计算单元和超长的流水线,但只有非常简单的控制逻辑并省去了Cache。GPU的特点是有很多的ALU和很少的cache. 缓存的目的不是保存后面需要访问的数据的。
GPU对于计算量大,但是单个计算难度简单的,并且要重复多次的任务使用,这些可并行,且要反复迭代收敛的东西,通常都是GPU相对擅长的领域。除了图形加速,还有机器学习,人工智能,并行计算等等,当然还可以挖矿这样的
渲染管线
渲染管道或者渲染管线,是一个概念模型,描述了图形系统在将3D场景渲染到2D屏幕时需要执行的步骤。(就是流水线相关的流程?)
- 应用程序阶段(CPU)
开发者通过程序的方式对图元数据等信息进行配置和调控,最后传输到下个阶段(输入是用户需求–输出是图元绘制信息)
作用:在应用程序阶段通常可以实现的有碰撞检测、加速算法、输入检测,动画,力反馈以及纹理动画,变换、仿真、几何变形,以及一些不在其他阶段执行的计算,如层次视锥裁剪等加速算法就可以在这里实现。
几何阶段 The Geometry Stage
- 模型视点变换 Model & View Transform:由模型自己的坐标系转换到世界坐标系,然后到视觉空间。由于坐标系的的选取不同而进行的变换(坐标系变换)
- 顶点着色 Vertex Shading:什么是着色呢,着色是指确定材质上的光照效果的这种操作,实际就是确定颜色。因为我们对于渲染而言的要求并不是说只是为了要一个形状和位置,我们还要让他真实或者其他的风格,这个时候就需要着色器来编写颜色方程放在GPU里运行,快速的进行颜色的确定(着色 确定颜色)
- 投影 Projection:从三维到二维空间的映射(也是 坐标映射)
- 裁剪 Clipping:对于在屏幕空间外的物体,我们并没有必要去计算它的颜色等等信息(裁剪 节省计算)
- 屏幕映射 Screen Mapping:屏幕映射阶段的主要目的,是将之前步骤得到的坐标映射到对应的屏幕坐标系上(坐标转换)
- 光栅化阶段 The Rasterizer Stage(GPU)()