[Unity ShaderLab & ShaderGraph自学笔记] (一)萌新的小本本 —— Shader基础知识

复习了计算机图形学的基本运算,接下来还要了解Shader所在的渲染流水线的流程和作用,看一看具体要操作的shader究竟是个什么角色,在哪工作,具体做什么。

 
 

渲染流水线中的坐标系变换 —— 传说中的MVP变换

  1. M (Model --> World)
    即模型坐标系 → 世界坐标系
    就像在场景的各个位置、随意角度摆放模型、随意大小缩放,并且给它摆pose
     
    应用场景:待补充
  1. V (World --> View / Camera)
    即世界坐标系 → 视图 / 相机坐标系
    把相机放到(0,1,-10),并且把场景中所有其他物品都相对于相机移动到新位置
     
    应用场景:待补充
  1. P ( View --> Projection)
    即视图 / 相机坐标系 → 投影坐标系
    正交投影Orthographic:将空间按比例变换为中心在原点、边长为2的立方体
    透视投影Perspective:将空间按比例变换为
    的视锥体Frustum,将视锥体转换为(或者“挤”更贴切)与正交投影时一样的立方体,然后再用正交投影的方法进行变换
    注意:虽说投影变换是“3D → 2D”,但顶点的z值依然存在。它经过变换后依然保留,值可能会发生改变。
     
    应用场景:待补充

简化版的渲染流水线

完整版的渲染流水线要素过多,一次性看完脑子容易嗡嗡叫,在这里会略过一些内容,只介绍一些基础内容。想要了解完整版,随便一搜就能看到很多非常详细的帖子,不过每一篇的说法似乎又在一些细节上不大一样,容易越看越懵。

这里推荐直接看一篇文章搞懂到底什么是渲染流水线,是作者根据《Unity Shader入门精要》记录的读书笔记,全部认真看完可以了解不少渲染流水线中的细节(不过也还是会多了不少疑问噗)
 
图源:一篇文章搞懂到底什么是渲染流水线

进入正题:

  1. 应用阶段:CPU读取数据并放入显存
    准备场景数据:场景中的所有模型、相机参数等。
    设置渲染状态:shader、材质、纹理、灯光等。
    输出渲染图元:点、线、面。每个顶点包含位置、颜色、UV、法向量等信息。
     
    总结:完全不用程序员操心,了解一下即可。
     

  2. 几何阶段:GPU读取数据并逐顶点变换到屏幕空间中
    顶点着色器Vertex Shader:顶点变换、空间变换、光照计算、UV计算等
    裁剪与消隐:GPU自动进行
     
    总结:进行坐标变换,输出顶点信息
     

  3. 光栅化阶段:GPU经过一系列计算与测试后向屏幕输出最终颜色
    片元着色器Fragment Shader:纹理采样、颜色计算、片元着色等
    逐片元操作:GPU自动进行,但程序员可自行配置执行的项目(模板测试、深度测试、Apha测试、混合等)
     
    总结:获得经过处理的顶点信息,决定最终输出到屏幕的像素颜色
     
    注意:光栅化 ≠ 光栅化阶段
     
    光栅化 = 三角形设置 + 三角形遍历(扫描)= 决定每个图元中的哪些像素应该被绘制在屏幕上
     
    光栅化阶段 = 光栅化 + 片元着色器处理 + 逐片元操作 + 颜色呈现

     

最后聚焦一下主角们:顶点片元着色器!

(这里的着色器不是敲代码敲的shader,而是躺在流水线里的、等着接收shader代码的shader)
 
图源:解析顶点着色器和片元着色器
 

顶点着色器

  1. 输入:模型空间中顶点的属性信息(空间坐标、法向量、UV坐标、颜色)、顶点shader代码
  2. 要点:想要计算光照颜色、处理坐标信息(空间坐标系变换、操作各种UV坐标),把代码甩给顶点shader!

片元着色器

  1. 输入:必须是从顶点着色器中输出得到的(除了一些常量参数)、片元shader代码

  2. 要点:想要计算颜色和透明度信息(RGBA),把代码甩给片元shader!如果需要借助贴图UV,就提前把输出贴图UV的代码插入顶点shader!

参考资料

一篇文章搞懂到底什么是渲染流水线:很详细的介绍了渲染流水线的各个阶段

解析顶点着色器和片元着色器可以更详细的了解顶点片元着色器的输入、输出、处理内容

猜你喜欢

转载自blog.csdn.net/weixin_44045614/article/details/108543282