光栅渲染
一. 渲染(Rendering)
定义
渲染是通过计算机程序从2D或3D模型生成图像的自动过程。
作用
渲染在建筑,游戏,模拟,电影或电视视觉效果以及设计可视化的各种场景中都被充分的使用,而每个行业都采用不同的特征和技术平衡。
实现
渲染的实现主要是封装成一个个独立的或者集成在其他游戏、建模、动画引擎或者其他软件里的渲染器。渲染器是一个基于与光学物理,视觉感知,数学和软件开发混合而成的程序。
分类
根据实现的技术不同,渲染主要分为
光栅化( rasterization):将矢量顶点组成的图形进行像素化的过程
光线投射(ray casting):正向投射。从图像的每一个像素,沿视线方向发射光线,光线穿越整个图像序列,并在这个过程中,对图像序列进行采样获取颜色信息,同时依据光线吸收模型将颜色值进行累加,直至光线穿越整个图像序列,最后得到的颜色值就是渲染图像的颜色。
光线跟踪(Ray tracing):逆向跟踪。沿着到达视点的光线的反方向跟踪,经过屏幕上每一个象素,找出与视线相交的物体表面点,并继续跟踪,找出影响点光强的所有光源,从而算出点上精确的光线强度。
根据渲染的时机来分类
实时渲染:一般在3D游戏中使用。指计算机边计算画面边将其输出显示。优点是可以实时操控,缺点是牺牲画质。
离线渲染:主要用于电影动画。指计算出画面时并不显示画面,计算机根据预先定义好的光线、轨迹渲染图片,渲染完成后再将图片连续播放,实现动画效果。
一般来说,实时渲染的技术方式都是使用的光栅化渲染。我们讲的光栅化就是日常 3D游戏当中实时渲染出来的,是遍计算遍显示,所以秒的帧数可能是不稳定的。
二.渲染管线(概念、功能)
定义:渲染管道或者渲染管线,是一个概念模型,描述了图形系统在将3D场景渲染到2D屏幕时需要执行的步骤。‘
应用程序阶段 The Application Stage(CPU)
应用程序阶段一般是图形渲染管线概念上的第一个阶段,开发者通过程序的方式对图元数据等信息进行配置和调控,最后传输到下个阶段。
作用:在应用程序阶段通常可以实现的有碰撞检测、加速算法、输入检测,动画,力反馈以及纹理动画,变换、仿真、几何变形,以及一些不在其他阶段执行的计算,如层次视锥裁剪等加速算法就可以在这里实现。
几何阶段 The Geometry Stage(GPU)
几何阶段主要负责大部分多边形操作和顶点操作
模型视点变换 Model & View Transform:由模型自己的坐标系转换到世界坐标系,然后到视觉空间。由于坐标系的的选取不同而进行的变换。
顶点着色 Vertex Shading:什么是着色呢,着色是指确定材质上的光照效果的这种操作,实际就是确定颜色。因为我们对于渲染而言的要求并不是说只是为了要一个形状和位置,我们还要让他真实或者其他的风格,这个时候就需要着色器来编写颜色方程放在GPU里运行,快速的进行颜色的确定。
投影 Projection:从三维到二维空间的映射
裁剪 Clipping:对于在屏幕空间外的物体,我们并没有必要去计算它的颜色等等信息
屏幕映射 Screen Mapping:屏幕映射阶段的主要目的,是将之前步骤得到的坐标映射到对应的屏幕坐标系上。
光栅化阶段 The Rasterizer Stage(GPU)
给定经过变换和投影之后的顶点,颜色以及纹理坐标(均来自于几何阶段),给每个像素正确配色,以便正确绘制整幅图像。这个过个过程叫光珊化(rasterization)。
三角形设定(Triangle Setup)阶段:计算三角形表面的差异和三角形表面的其他相关数据。
三角形遍历(Triangle Traversal)阶段:到哪些采样点或像素在三角形中的过程通常叫三角形遍历。
像素着色(Pixel Shading)阶段:像素着色阶段的主要目的是计算所有需逐像素计算操作的过程。
融合(Merging)阶段:融合阶段的主要任务是合成当前储存于缓冲器中的由之前的像素着色阶段产生的片段颜色。此外,融合阶段还负责可见性问题(Z缓冲相关)的处理。
三.GPU渲染管线(实际)
前面所讲的渲染管线,并不是真正意义上实际的细分步骤,而是一种概念上的理论。
GPU实现了之前所描述的几何和光珊化的所有概念管线。
这些阶段被分割成数个硬件实现的阶段,这些阶段支持不同程度的可配置性或可编程性的。下图中通过不同的颜色展示了其可编程性和可配置性。在这里可能和之前的概念模型略有不同。
绿色为完全可编程,黄色为可配置,蓝色为固定功能
顶点着色器
专门处理传入的顶点信息的着色器
输入:VertexBuffer,它由一个或多个顶点属性流组成。
输出:颜色
处理信息:颜色、法线、纹理坐标和位置
处理
1. 矩阵变换,从模型空间转换到齐次裁剪空间。
2.修改/创建/忽略顶点相关属性的功能
几何着色器
高效地创建和销毁几何图元
把(一个或多个)顶点转变为完全不同的基本图形(primitive),从而生成比原来多得多的顶点
输入:以一个或多个表示为一个单独基本图形(primitive)的顶点作为输入,比如可以是一个点或者三角形
输出:点线,三角形
处理
把(一个或多个)顶点转变为完全不同的基本图形(primitive),从而生成比原来多得多的顶点
像素着色器
进行像素的处理,是针对光栅化之后的像素操作
输入:进行插值后的各个像素
输出:颜色
处理信息:颜色
处理:
处理场景光照和与之相关的效果(凸凹纹理映射和调色)
通过纹理坐标取得对应的颜色
- 点赞
- 收藏
- 关注作者
评论(0)