GPU渲染阶段介绍+Shader基础结构实现
GPU是什么
(CPU)Center Processing Unit:逻辑编程
(GPU)Graphics Processing Unit:图形处理(矩阵运算,数据公式运算,光栅化)
渲染管线
渲染管线也称为渲染流水线,就是CPU准备一些数据,然后告诉GPU渲染出一个二维的
图像的过程。
渲染管道的三个阶段:应用程序阶段,几何阶段,光栅化阶段
1.应用阶段(CPU)
主要就是CPU将硬盘中的数据加载后,和内存进行通讯后,将需要显示的数据信息
(顶点数据,纹理坐标,法线信息),传递GPU处理。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Process : MonoBehaviour
{// Start is called before the first frame updatevoid Start(){//从硬盘加载数据GameObject prefab = Resources.Load<GameObject>("Capsule");//将数据放置在内存中GameObject capsule = Instantiate<GameObject>(prefab);//物体上面,带有材质球,材质球会引用Shader着色器,因为Shader是GPU编程,所以就会将数据传递给GPU//注意:Unity采用了材质球调用Shader,所以Unity是通过材质球将数据传递给GPU的,别的引擎不一定是材质球实现}
}
2.几何阶段(GPU)
几何阶段最重要的工作就是“变换三维顶点坐标”,变换的工作由矩阵运算完成。
空间
模型空间:3D物体的原始坐标,存储在模型中。
世界空间:物体放在场景中,才能构成整个游戏场景。
观察空间:需要以相机为原点的三维空间。
裁剪空间:物体是否在相机的渲染范围内。
屏幕空间:3D物体,投影到屏幕上。
物体最终显示:需要GPU进行一系列的矩阵运算,将模型空间下的点,转换到屏间
下(转换点的过程是并行)
非模型顶点信息中记录的点,GPU会以线性插值的方式获得并提示
3.光栅化阶段(GPU)
使用上一个阶段(几何阶段)递过来的数据,对像素点进行染色,最终显示出来,
染色过程为并行执行。
着色器(Shader)是什么?
给GPU编程的语言,代码会在GPU上并行执行(几何运算,光栅化)
Unity的Shader类型
固定管线Shader:很古老显卡的编程着色器,现在很少使用,画质不好
顶点/片元Shader:通用的着色器类型(重点学习),可编程
表面体Shader:Unity自己创建的着色器类型,基于顶点/片元着色器二次封装实
现,降低了着色器的编写难度。
材质球和Shader的关系
Unity中Material用来关联游戏物体和Shader着色器,所以编写Shader前,需要先
建立材质球
建立Shader方法
1.建立材质球
2.建立Shader文件
(1)表面体Shader
(2)顶点/片元Shader
(3)图片效果Shader
(4)GPU运算Shader
Pass通道和SubShader的区别
Pass通道在SubShader内部,SubShader不执行,则内部的Pass通道也不会执行
SubShader从上向下依次执行,每次只会执行一个,同一个SubShader中的Pass通
道会依次向下执行。
Shader的基本结构
//Shader名称与材质球的Shader列表对应
Shader "CreateTest/FixedColor"
{//Shader属性,会出现在关联材质球的选项里Properties{}//SubShader根据显卡等级只执行一个SubShader{//Pass依次向下执行Pass{}}SubShader{}//所有SubShader都执行失败,则最终执行FallBack效果//"Diffuse"是Unity的一个内置Shader效果FallBack "Diffuse"
}
实现染色着色器效果(shader文件):
//Shader名称与材质球的Shader列表对应
Shader "CreateTest/FixedColor"
{//Shader属性,会出现在关联材质球的选项里Properties{//用于在材质球上面配置的颜色//属性名"_Color()"//参数1:材质面板上显示的名称//参数2:属性的类型Color//等号右边:当前属性的默认值_Color("颜色",Color)=(1,1,1,1)}//SubShader根据显卡等级只执行一个SubShader{Pass{//使用固定管线着色器染色//Color[]是固定管线着色器的染色命令Color[_Color]}}//所有SubShader都执行失败,则最终执行FallBack效果//"Diffuse"是Unity的一个内置Shader效果FallBack "Diffuse"
}
该系列专栏为网课课程笔记,仅用于学习参考。