shader:着色器
计算机中的三维模型本质上是一组数据,包括空间中顶点位置,法线方向,定点颜色等
GPU通过包括在模型的一系列数据进行计算,将结果提交给显示器
数据是美术做的事情,如何去计算数据是shader做的
应用阶段 (数据准备阶段,cpu)
:三维建模
场景搭建
灯光设置
贴图设置
几何阶段 (GPU)
:主要编辑顶点着色器及片元着色器
cpu与Gpu系统工作:
DrawCall:一个场景的drawCall多会在低端设备卡顿
cpu准备数据和渲染状态,调用drawCall,Gpu开始渲染。DrawCall很缓慢,cpu准备数据放到显存,Gpu从显存中取很慢,这就是一次drawCall
Gpu的渲染流程
顶点着色器:对每个顶点调用顶点着色器,计算顶点的颜色和坐标变换。
几何着色器:用点线面等图元数据通过Gpu的特性生成新的细节(新的图元,逐图元的着色)
裁剪:将无需渲染的部分裁剪掉,可以设置裁剪哪个面
屏幕映射:将坐标映射到屏幕坐标系,不可编程,将三维图像变为二维映射
三角形设置:根据顶点位置,颜色深度等得到三角形对屏幕像素的覆盖信息
三角形变换:检查像素是否被遮盖,如果是生成片元对片元内的像素进行插值
片元着色器:进行纹理采样,对每个像素计算光照结果。
逐片元操作:
OpenGL && DirectX :图像应用接口
显卡-》显卡驱动-》图像应用接口-》开发者
HLSL (DirectX兼容的高级shader编程语言)
GLSL(OpenGL兼容的高级shader编程语言)
CG (C for Graphic )for Nvidia
unity Shader Language (CG/HLSL)
Material 是shader的载体
创建shader:
1、Standard Surface Shader:unity提供的最基础,比较完备的shader,可以调节出一般的风格
2、Unlit Shader 可以做出特殊风格,例如素描等
3、Image Effect Shader 屏幕特效
4、Compute Shader 专门用来做特殊算法类的渲染,加快渲染速度
shaderPath:在material内的shader的路径
properties 在用户面板上调节的属性
_Name(“DIsplayName”,Type) = defaultValue
_Name 是在编程中的变量
DisplayName 在用户面板中显示的名字
Type 在用户面板调节的值类型
defaultValue 默认值
Subshader:
unity 会选择第一个可以在当前显卡可用的subshader执行
渲染状态设置。。
Cull Back/Front/off 剔除面
Ztest LessGreater/Lequal/GEqual/Equal/Always
检测像素在Z轴的深度
Zwrite on/off 设置靠近摄像机的值覆盖了远处的值
Blend 混合两个像素值的颜色
标签设置:
Tags{“Queue”=”Transparent”}
Subshader 中的pass
一个subshader中有很多pass,依次执行
定义的时候
Name “MyPass”
使用的时候
UsePass “MyShader/MYPass”要大写
FallBack 是本shader中内容不被支持时,选用低级shader替换