• UnityShader Syntax


    0x01 基本语法

    Shader "name" { [Properties] __Subshaders__ [Fallback] [CustomEditor] }

    名字

    解释

    name

    Shader文件中name是唯一存在,且不能与其他shader文件重名

    Properties

    属性表

     

    Properties:属性表组成 及其 语法:Properties { Property [Property ...] }

    variable

    Inspect ui name

    data type

    default value

    _Color

    "Color"

    Color

    (1,1,1,1)

    _TestVector

    "TestVector"

    vector

    (0.1,0.2,0.3)

    _MainTex

    "Albedo (RGB)"

    Texture 2D

    "white" {}

    _Glossiness

    "Smoothness"

    Range

    0.5

    _TestFloat

    "TestFloat"

    float

    0.5

    _TestInt

    "TestInt"

    int

    2

    _TestCube

    "TestCube"

    CUBE

    ""{}

    Properties

    {

         _Color ("Color", Color) = (1,1,1,1)//颜色指示器

        _TestVector("TestVector", vector) = (0.1,0.2,0.3)//坐标

       _MainTex ("Albedo (RGB)",2D)="white" {}//纹理带tilling xyoffset zw

        _Glossiness("Smoothness", Range(0,1)) = 0.5//滑块

        _TestFloat("TestFloat",float) = 0.5//单精度值

        _TestInt("TestInt", int) = 2//整形

        _TestCube("TestCube", CUBE) = ""{}//cube纹理

    }

     

    Properties属性映射到Subshaders(Cg/HLSL code)中的变量对应表

    Property Type

    Subshader Type

    ColorVector

    float4half4fixed4

    Rangefloat

    floathalffixed

    Texture

    sampler2D

    CUBE

    samplerCUBE

    3DTexture

    sampler3D

     

    属性前缀(可选属性)

    Attribute

    Describe

    [HideInInspector]

    inspector面板隐藏该属性

    [NoScaleOffset]一般纹理专用

    inspector面板隐藏纹理平铺/偏移。

    [Normal]

    指示纹理属性需要一个法线映射

    [HDR]

    指示纹理属性需要高动态范围(HDR)纹理

    [Gamma]

    指示在UI中将浮点数/向量属性指定为sRGB(就像颜色一样),可能需要根据使用的颜色空间进行转换。

    [PerRendererData]

    指示纹理属性用MaterialPropertyBlock每次渲染数据的形式呈现纹理

    [KeywordEnum(None, Add, Multiply)]

    #pragma multi_compile _OVERLAY_NONE _OVERLAY_ADD _OVERLAY_MULTIPLY

    [Toggle]

    开关

    [PowerSlider(3.0)]

    非线性响应的滑块

    [Space]…[Space(value)]

    创建一个垂直空间

    [Header(…)]

    加标题文字说明

     

    0x02 Subshader

    Subshader { [Tags] [CommonState] Passdef [Passdef ...] }

    一个Shader可以有一组subshader。每个subshader可以设置标签、一组通道。

     

    以下标签 只在subshader内部被识别,不能在pass内。

    Tag key

    Tag Value

    Describe

    Queue”

    Background| Geometry| AlphaTest| Transparent| Overlay”

    渲染队列

    RenderType

    Opaque| Transparent| TransparentCutout| Background| Overlay| TreeOpaque| TreeTransparentCutout| TreeBillboard| Grass| GrassBillboard

    着色器分类标签,可被替代

    DisableBatching

    True(总是禁用)False(总是关闭) LODFading(fading激活就禁用)

    禁用批处理

    ForceNoShadowCasting

    True(关闭投射阴影)

     

    IgnoreProjector

    True(不受投影仪影响)不想投影仪影响半透物就开

     

    CanUseSpriteAtlas

    False(图集对该精灵合批失效)

     

    PreviewType

    Plane|Sphere|Cube等等,修改材质球的默认预览

     

    RenderPipeline

    LightweightPipeline (LWRP) HighDefinitionRenderPipeline (HDRP)

     

     

    渲染队列Rendering Order

    Name

    Base Order Value

    Describe

    Background

    1000

    最先渲染,会被遮挡

    Geometry

    2000

    适用用于大多数不透明几何物体

    AlphaTest

    2450

    是阻止像素被写到屏幕的最后机会

    Transparent

    3000

    任何alpha混合(例如着色器不写入深度缓冲)都应该到这里(玻璃,粒子效果)

    Overlay

    4000

    叠加效果,最后渲染,一般做后处理

     

    着色器分类RenderType Tag    

    Name

    Describe

    Opaque

    大多数着色器(正常, 自动照明,反射,地形着色器等等)

    Transparent

    大多数半透明着色器(透明,粒子,字体,地形添加通过着色器)

    TransparentCutout

    masked transparency例如一片有洞的树叶、打碎了的玻璃窗

    Background

    Skybox

    Overlay

    UIHaloFlare

    TreeOpaque

    Terrain engine tree bark

    TreeTransparentCutout

    Terrain engine tree leaves

    TreeBillboard

    Terrain engine billboarded trees

    Grass

    Terrain engine grass

    GrassBillboard

    Terrain engine billboarded grass

    备注: 现在有了SpeedTree第三方插件,可以很好的替换上Terrain engine关于树花草等

     

    0x03 Pass

    Pass { [Name and Tags] [RenderSetup] }

    Name “PassName” UsePass shaderName/passName

     

    光照标签:Tags { "TagName1" = "Value1" "TagName2" = "Value2" }光照标签只能在Pass内识别

    Lighting Mode

    Descripe

    Always

    总是开启渲染,没有光照计算

    ForwardBase

    Used in Forward rendering. 该pss会计算环境光、主方向光、逐顶点/SH lighting以及光照贴图

    ForwardAdd

    Used in Forward rendering,该pass会计算额外的逐像素光,每个pass对应一个光源

    Deferred

    Used in Deferred Shading, 该pass会渲染g-buffer

    ShadowCaster

    把物体的深度信息渲染到阴影纹理或一张深度纹理

    MotionVectors

    Used to calculate per-object motion vectors

    PrepassBase

    (Legacy)Deferred Lighting,该pass渲染法线和高光反射的指数部分

    PrepassFinal

     legacy Deferred Lighting,通过合并纹理、灯光、散射光渲染最终颜色

    Vertex

    Used in legacy Vertex Lit rendering when object is not lightmapped顶点着色

    VertexLMRGBM

    Used in legacy Vertex Lit rendering when object is lightmapped;顶点着色

    VertexLM

    Used in legacy Vertex Lit rendering when object is lightmapped顶点着色

    PassFlags

    OnlyDirectional指示该Pass只接受main directional light and ambient/lightprobe data。

    RequireOptions

    SoftVegetation指示该Pass只应用于软植被

     

    Render state set-up    //渲染状态

    Name

    Describe

    Cull Back | Front | Off

    多边形剔除模式

    ZTest (Less | Greater | LEqual | GEqual | Equal | NotEqual | Always)

    深度缓冲测试模式

    ZWrite On | Off

    深度缓冲写入模式

    Offset OffsetFactor, OffsetUnits

    设置z缓冲深度偏移量

    Blend src dest  详细参考UnityEngine.Rendering.BlendMode

    混合模式

    ColorMask RGB | A | 0 | any combination of R, G, B, A

    颜色模板,用于模板缓冲

     

    0x04 Culling & Depth Testing & Blending& Stenci详解

    0x05 Render Pipeline & 光照渲染路径

    0x100待续

    keyword变种知识补充

  • 相关阅读:
    mongodb
    python中读取文件的read、readline、readlines方法区别
    uva 129 Krypton Factor
    hdu 4734
    hdu 5182 PM2.5
    hdu 5179 beautiful number
    hdu 5178 pairs
    hdu 5176 The Experience of Love
    hdu 5175 Misaki's Kiss again
    hdu 5174 Ferries Wheel
  • 原文地址:https://www.cnblogs.com/baolong-chen/p/11627617.html
Copyright © 2020-2023  润新知