unity shader入门精要_Unity Shader 入门(一):渲染流水线

 2023-09-07 阅读 19 评论 0

摘要:一、参考与说明(需要写在开始东西):1.1 Unity Shader 入门紧要学习candycat1992/Unity_Shaders_Book​github.com1.2 还有一些图形学的历史可以观看渲染管线与Shader编程入门_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com1.3 写在开头,

68b08540c9134ac0cfd568bb00808ab4.png

一、参考与说明(需要写在开始东西):

1.1 Unity Shader 入门紧要学习

candycat1992/Unity_Shaders_Book​github.com
294dfdd2ecb98167969e259b9c82ac8b.png

1.2 还有一些图形学的历史可以观看

渲染管线与Shader编程入门_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com
32a5d4c322cb2c9a52f345bda510bc5c.png

1.3 写在开头,曾经好几次想开始unity shader学习,也确实开始过,但是最终都没长久。这次希望可以通过记录的形式督促自己,将学习进行下去。经过几天的资料学习,才了解,在unity shader 中,Unity已经做了大量的工作,所以学会ShaderLab无法代表会图形学shader。但这并不影响我们学习,而且这样上手学些也会更轻松一些。

二、渲染流水线

unity可编程渲染管线。2.1 关于渲染流水线的发展史,个人觉得很有意思,我们都是站在巨人的肩膀上前行的,有大量的人做出的贡献,才能让我们如此轻易的了解这些。如有想详细了解的,请访问参考中视频链接地址观看。

  1. 直接对接硬件函数库
  2. 对接标准函数库(固定功能)
  3. 对接标准图形函数库(可编程)

2.2 通俗的讲渲染就是把模型显示到显示器上,中间计算机一系列过程就是流水线。那为何我们要了解渲染流水线?如果我们直接开始编写,那就犹如管中窥豹,不知前因,不知后果,学习难度也会增加。

ef65f8236ae7353db2ca50b198d251d0.png

2.3 如上图可编程部分,在unity中我们比较熟悉的是 顶点着色器和片元着色器,我们默认创建的Unlit Shader就包括这两个部分,也可以看到这两个部分在整个流水线中在什么位置。在顶点着色器中有几个比较重要的事情如下,它保证了顶点信息独立,与GPU并行运算

  1. 输入的每个顶点都会调用一次
  2. 不可以销毁或创建顶点
  3. 无法得到顶点与顶点的关系

片元着色器在光栅化阶段中,屏幕显示是以像素为单位,光栅化就是把三角面转化成像素的工程,如下图所示,转化结果单位像素是不能才分显示的,所以三角形面转化后如下图形式,也就是大家常听到的锯齿,关于锯齿的优化算法有很多,大家可以后续查找阅读。

shader unity,

525bf97b67efdfca277b9cfa996315ea.png

2.4 不可编程但可配置部分包括 剪裁 和 逐片元操作

剪裁用于控制几何体的哪一面会被剔除,其中可配置项包括:

  • Cull Back | Front | Off
    • Cull Back——不绘制背离观察者的几何面
    • Cull Front——不绘制面向观察者的几何面,用于由内向外的旋转对象
    • Cull Off——绘制所有的面

逐片元操作片元要经过各种测试,片元-->模板测试-->深度测试-->混合-->颜色缓冲区


2.4.1 模板测试

unity血条shader,管网讲解 参考博客

Ref 就是参考值,当参数允许赋值时,会把参考值赋给当前像素

ReadMask 对当前参考值和已有值进行mask操作,默认值255,一般不用

WriteMask 写入Mask操作,默认值255,一般不用

Comp 比较方法。是拿Ref参考值和当前像素缓存上的值进行比较。默认值always

  • Greater - 大于
  • GEqual - 大于等于
  • Less - 小于
  • LEqual - 小于等于
  • Equal - 等于
  • NotEqual - 不等于
  • Always - 永远通过
  • Never - 永远通不过

unity怎么渲染、Pass 当模版测试和深度测试都通过时,进行处理

Fail 当模版测试和深度测试都失败时,进行处理

ZFail 当模版测试通过而深度测试失败时,进行处理

pass,Fail,ZFail都属于Stencil操作,他们参数统一如下:

  • Keep 保持(即不把参考值赋上去,直接不管)
  • Zero 归零
  • Replace 替换(拿参考值替代原有值)
  • IncrSat 值增加1,但不溢出,如果到255,就不再加
  • DecrSat 值减少1,但不溢出,值到0就不再减
  • Invert 反转所有位,如果1就会变成254
  • IncrWrap 值增加1,会溢出,所以255变成0
  • DecrWrap 值减少1,会溢出,所以0变成255

2.4.2 深度测试 包括zwrite 和 ztest

unity shader graph、zwrite 分类

zwrite on / off : 开启深度缓冲/关闭深度缓冲(其实就是记录Z值,把最小的Z存放在缓冲中),一般情况不透明的物体都会使用zwrite on 而 半透明的物体都会使用 zwrite off 这样半透明的物体就直接比较ztest了

ztest 分类

less / greater / lequal /gequal / equal / notequal /always(其实就是拿着当前的像素来对深度缓冲中的z值进行比较的条件)

那么他们的情况就有如下几种:

unity书籍。1. 当ZWrite为On时,ZTest通过时,该像素的深度才能成功写入深度缓存,同时因为ZTest通过了,该像素的颜色值也会写入颜色缓存。

2. 当ZWrite为On时,ZTest不通过时,该像素的深度不能成功写入深度缓存,同时因为ZTest不通过,该像素的颜色值不会写入颜色缓存。

3. 当ZWrite为Off时,ZTest通过时,该像素的深度不能成功写入深度缓存,同时因为ZTest通过了,该像素的颜色值会写入颜色缓存。

4. 当ZWrite为Off时,ZTest不通过时,该像素的深度不能成功写入深度缓存,同时因为ZTest不通过,该像素的颜色值不会写入颜色缓存。

2.4.3 混合

unity 渲染,混合操作相关的句法

  • Blend Off
    • 关闭混合
  • Blend SrcFactor DstFactor
    • 基本的配置并启动混合操作。对产生的颜色乘以SrcFactor。对已存在于屏幕的颜色乘以DstFactor,并且两者将被叠加在一起。
  • Blend SrcFactor DstFactor,SrcFactorA DstFactorA
    • 同上,但是使用不同的要素来混合alpha通道,也就是有了4个操作对象
  • BlendOp Add | Min | Max | Sub | RevSub
    • Add——将源像素和目标像素相加
    • Sub——用源像素减去目标像素
    • RevSub——用目标像素减去源像素
    • Min——取目标像素和源像素的较小者作为结果
    • Max——取目标像素和源像素的较大者作为结果

混合因子(Blend factors)列举

引用博客

Blend SrcFactor DstFactor

以下所有属性都可以作为SrcFactor或DstFactor。其中Source指的是被计算过的颜色,Destination是已经在屏幕上的颜色

  • One——值为1,使用此因子来让帧缓冲区源颜色或是目标颜色完全的通过
  • Zero——值为0,使用此因子来删除帧缓冲区源颜色或目标颜色的值。
  • SrcColor——使用此因子为将当前值乘以帧缓冲区源颜色的值
  • SrcAlpha——使用此因子为将当前值乘以帧缓冲区源颜色的Alpha的值
  • DstColor——使用此因子为将当前值乘以帧缓冲区目标颜色的值。
  • DstAlpha——使用此因子为将当前值乘以帧缓冲区目标颜色Alpha分量的值
  • OneMinusSrcColor——使用此因子为将当前值乘以(1-帧缓冲区源颜色值)
  • OneMinusSrcAlpha——使用此因子为将当前值乘以(1-帧缓冲区源颜色Alpha分量的值)
  • OneMinusDstColor——使用此因子为将当前值乘以(1-目标颜色值)
  • OneMinusDstAlpha——使用此因子为将当前值乘以(1-目标颜色Alpha分量的值)

三、写在最后

shader。概念性的知识总会让人容易分神,其实可以将整个渲染流水线想象成一个 顶点的闯关游戏,我们可以在顶点着色器和片段着色器中操控顶点玩家自身,在剪裁 和 逐片元操作 中操控顶点躲避环境障碍,最终实现模型以像素的形式渲染到屏幕上,在每一帧中不同顶点的通关成功,在屏幕上展现出不同的界面。在此过程中我们需要掌握的知识有很多,文中很多参数解释来自其他博客,放在这里一是方便查找,二是方便整理理解,详情还请跳转原博客中阅读。

下一篇

路奇:Unity Shader 入门(二):shader 基础​zhuanlan.zhihu.com
7d60aaa7362cd669c2b5c0db2f2bfcba.png

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/17604.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息