Unity Shader(一)渲染流水线

一、基本知识

渲染流水线用来生成或者渲染一张二维纹理,即我们在电脑上看到的所有效果。
它的输入是一个虚拟摄像机、一些光源、一些Shader以及纹理

1.什么是渲染流水线?
由一个三位场景出发,生成(或者说渲染)一张二维图像(即计算机从一系列的顶点数据、纹理等信息出发,把这些信息转换成一张图片)。

这个工作由CPU和GPU共同完成
渲染流程可以分为三个阶段
应用阶段-几何阶段-光栅化阶段

在这里插入图片描述

(一)、应用阶段
通常由CPU负责,开发者具有这个阶段的绝对控制权。
这一阶段中,开发者主要有三个任务:
1.准备好场景数据
2.粗粒度剔除工作
3.设置好每个模型的渲染状态
(ps:场景数据例如摄像机位置,光源、模型等)
(粗粒度剔除工作:剔除出不可见的物质,这样就不需要移交到几何阶段在处理)
(渲染状态:包括但不限于他的使用材质(漫反射颜色,高光反射颜色)、使用的纹理、使用的Shader等)
这一阶段最重要的输出是渲染所需的几何信息(即渲染图元——可以是点、线、三角面等),这些渲染图元会被传递给下一阶段——几何阶段

(二)、几何阶段
      用于处理绘制几何相关的事情(例如决定需要绘制的图元是什么,怎么样绘制,在哪绘制——即是什么、怎么样、在哪里),这一阶段在GPU上进行。
这一阶段最主要的任务就是把顶点坐标变换到屏幕空间中,再交给光栅器处理。
     通过对渲染图元进行多步处理后,这一阶段将会输出屏幕空间的二位顶点坐标,每个顶点对应的深度值、着色等相关信息并传递给下一阶段

(三)、光栅化阶段

这一阶段使用几何阶段传递的数据来产生屏幕上的像素,并渲染出最终图像。同样运行在GPU上。
其任务主要是决定每个渲染图元中哪些像素应该被绘制在屏幕上。
需要对上一阶段得到的逐顶点数据(例如纹理坐标,顶点颜色等)进行插值,然后在逐像素处理

以上三个流水线阶段是概念上的流水线阶段
以下则为GPU流水线,是硬件真正用于实现上述概念的流水线

二、CPU和GPU之间的通信

由上述可知,渲染的起点是应用阶段,即CPU为起点。
应用阶段又可以分为三个阶段:
1.将数据加载到显存中
2.设置渲染状态
3.调用Draw Call

(一)、将数据加载到显存中

所有渲染所需数据都从硬盘(HHD)加载到系统内存中(RAM),网格和纹理等数据又被加载到显存(VRAM)上
(这是因为,显卡对于显存的访问速度更快,且大多数显卡对于RAM没有直接访问权利。)
数据被加载到显存上后,RAM中的数据就会被移除,但有些数据CPU仍需要访问(例如,李彤CPU来访问网格数据进行碰撞检测,这个时候就希望这些数据不被移除,毕竟从硬盘加载到RAM的过程十分耗时)

(二)、设置渲染状态

cpu是通过设置渲染状态来”指导“GPU工作的
1.什么是渲染状态?
渲染状态定义了场景中的网格是被怎么渲染的。例如,使用哪个顶点着色器等等这些属性。(没有更改渲染状态,则意味着所有的网格都将使用同一种渲染状态)

(三)、调用Draw Call

Draw Call的本质就一个命令,发起方是CPU,接收方是GPU,该命令仅仅指向一个需要被渲染的图元列表,而不会再包含任何材质信息(材质信息在上一阶段已经完成了)


当GPU收到一个DrawCall时,就会根据其指向的图元列表来计算,输出成屏幕上的像素

因此,CPU和GPU通过Draw Call来通信

三、GPU流水线

GPU渲染的过程就是GPU流水线(GPU实现几何阶段和光栅化阶段)
对于几何阶段和光栅化阶段,开发者不拥有绝对的控制权(仍有部分控制权),实现的载体为GPU。
在这里插入图片描述
几何阶段

  • 顶点数据:几何阶段开始时作为输入(这些数据由应用阶段加载到显存中的,再由Draw Call指定的,然后被传递给顶点着色器)
  • 顶点着色器:完全可编程,用于实现顶点的空间变换、顶点着色功能。
  • 曲面细分着色器:是可选的,用于细分图元
  • 几何着色器:是可选的,用于执行逐图元的着色操作。
  • 裁剪:将不再摄像机视野内的顶点裁剪掉
  • 屏幕映射:负责把每个图元坐标转换到屏幕坐标系中


    (一)、顶点着色器
    输入来自CPU,处理的单位是顶点(即每个顶点都会调用一次顶点着色器)。
    顶点着色器不可以创建或销毁顶点,而且无法得到顶点与顶点之间的关系——GPU可以并行处理每个顶点。
    主要工作:坐标变换和逐顶点光照
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值