美文网首页
Unity Shader(1)

Unity Shader(1)

作者: 叫我颜先生 | 来源:发表于2024-07-03 11:25 被阅读0次

GPU流水线

  1. CPU将数据(纹理、网格等)从硬盘加载到内存,然后再从内存加载到显存,因为显卡对于显存的访问速度更快,而且大多数显卡对于内存没有直接的访问权限
  2. 准备好之后,CPU调用DrawCall渲染命令开始进行GPU流水线渲染


    image.png
  3. 几何阶段:
    • 顶点着色器:完全可编程,顶点空间变换、着色、逐顶点光照
    • 曲面细分着色器:可选着色器,细分图元
    • 几何着色器:可选着色器,逐图元着色
    • 裁剪:可配置,自定义裁剪区域、控制裁剪正面还是背面等,不在摄像机视野范围内不需要处理
    • 屏幕映射:不可,把图元坐标转换到屏幕坐标系,对于OpenGL和DirectX对应的坐标系就不相同了
  4. 光栅化阶段:
    • 三角形设置:绘制出三角形三条边
    • 三角形遍历:三角形图形
    • 片元着色器:完全可编程,逐片元着色
    • 逐片元操作:可配置,修改颜色,深度缓冲,混合等

Unity Shader

  • 四种模版
    • Standard Surface Shader:包含标准光照模型 表面着色器
    • Unlit Shader:不包含光照(包含烟雾)顶点片元着色器
    • Image Effect Shader:处理屏幕后处理效果
    • Compute Shader:…(少用)

语法

  1. Properties

    类型 语法 例子
    Int n _Int(“Int”,Int)=2
    Float n _Float(“Float”,Float)=1.5
    Range(min,max) n _Range(“Range”,Range(0.0,5.5))=3.0
    Color (n,n,n,n) _Color(“Color”,Color)=(1,1,1,1)
    Vector (n,n,n,n) _Vector(“Vector”,Vector)=(2,3,4,5)
    2D “defaulttexture”{} _2D(“2D”,2D)=“”{}
    Cube “defaulttexture”{} _Cube(“Cube”,Cube)=“white”{}
    3D “defaulttexture”{} _3D(“3D”,3D)=“black”{}
  2. SubShader

    • 每个UnityShader可包含多个SubShader语义块,不支持就Fallback。

    • 每个Pass都是一次完整的渲染流程,但是过多的Pass会造成渲染性能下降

    • 状态和标签同样可以在Pass中设置,但是SubShader中一些标签设置是特定的,和在Pass中使用不一样,SubShader的设置会作用于所有Pass

    SubShader{
        [Tags]
        
        [RenderSetup]
        
        Pass{
        }
        //other Passes
    }
    
    1. 状态设置:

      状态指令可以设置显卡的各种状态,例如是否开启混合,深度测试等

相关文章

网友评论

      本文标题:Unity Shader(1)

      本文链接:https://www.haomeiwen.com/subject/xzoslctx.html