1cpu把网格从硬盘加载到显存
2cpu设置网格的渲染状态,哪个网格用哪个shader
3cpu告诉gpu渲染这个drawcall
drawcall理解为cpu对gpu发起一个命令。此命令指向需要被渲染的图元列表,不包含任何材质信息
顶点数据->顶点着色器(模型坐标到投影坐标)->裁剪(摄像机外的扔掉,一半一半的构建新顶点)->屏幕映射
->三角形设置(计算边上对应的像素)->三角形遍历(插值生成包含的片元)->片元着色器->逐片元操作->输出
片元->模板测试->深度测试->混合->颜色缓存区
-----
透明测试
-----
模板缓存区,深度缓存区,透明缓存区,颜色缓存区
----
命令缓存区,cpu不断插入,gpu不断读取,cpu速度一般跟不上
===================
_mainTex("Main Tex"),2d) = "while" {}
========
sampler2D _MainTex //属性表的右边贴图
float4 _MainTex_ST //属性表的左边属性
====
o.uv = i.texcoord * _MainTex_ST.xy + _MainTex_ST.zw;
o.uv = TRANSFORM_TEX(v.texcoord, _MainTex)
//i.texcoord 也是uv
写在顶点着色器
=====
fixed3 albedo = tex2D(_MainTex, i.uv)
写在片元着色器
====
mul(矩阵,向量)
(float3x3)矩阵
(向量).xyz
降纬度
==
升维度
fixed4(i.color,1)
==
逐个顶点进行计算
逐个片元进行计算 更加平滑的光照效果
====
物体渲染:
1先渲染所有不透明物体,并开启深度测试和深度写入
2半透明物体从远到近 排序,顺序渲染,开启深度测试,关闭深度写入
开深度测试是为了在不透明的物体后的 不需要渲染, 关闭深度写入是为了 透明物体之后的透明物体也渲染
====
透明度测试:
clip(texColor.a - _Cutoff)
相当于
if((texColor.a - _Cutoff) < 0)
discard;
要么完全显示,要么完全不显示
===
Blend SrcAlpha OneMinusSrcAlpha
正常混合
目标 = 源*源alpha + 目标*(1-源alpha)
===
cull back | front | off
默认是back不显示
一个平面2个面,back不显示的话,翻过平面会看穿