shader入门精要 读后总结



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不显示的话,翻过平面会看穿










猜你喜欢

转载自blog.csdn.net/a133900029/article/details/80725385
今日推荐