Unity Shader(1)

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

    类型语法例子
    Intn_Int(“Int”,Int)=2
    Floatn_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. 状态设置:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值