unity shader学习笔记1

shaderlab语法 https://docs.unity3d.com/cn/current/Manual/SL-Shader.html
shadergraph手册 https://docs.unity3d.com/Packages/com.unity.shadergraph@10.3/manual/index.html
HLSL语法 https://docs.unity3d.com/cn/current/Manual/SL-ShaderPrograms.html(顶点和片元着色器)
表面着色器 https://docs.unity3d.com/cn/current/Manual/SL-SurfaceShaders.html

Pass {
// ...常规通道状态设置 ...

    CGPROGRAM
    // 此代码片段的编译指令,例如:
    #pragma vertex vert
    #pragma fragment frag
  
    // Cg/HLSL 代码本身
  
    ENDCG
    // ...通道设置的剩余部分 ...
}

HLSL代码片段

pragma vertex name - 作为顶点着色器来编译函数 name。
pragma fragment name - 作为片元着色器来编译函数 name。
pragma geometry name - 作为 DX10 几何着色器来编译函数 name。如下所述,设置此选项会自动开启 #pragma target 4.0。
pragma hull name - 作为 DX11 外壳着色器来编译函数 name。如下所述,设置此选项会自动开启 #pragma target 5.0。
pragma domain name - 作为 DX11 域着色器来编译函数 name。如下所述,设置此选项会自动开启 #pragma target 5.0。
其他编译指令:

pragma target name - 要编译到的着色器目标。有关详细信息,请参阅着色器编译目标页面。
pragma require feature …- 对着色器需要的 GPU 功能进行精细控制,请参阅着色器编译目标页面以了解详细信息。
pragma only_renderers 空格分隔的名称 - 仅为给定的渲染器编译着色器。默认情况下,将为所有渲染器编译着色器。请参阅下文中的_渲染器_以了解详细信息。
pragma exclude_renderers 空格分隔的名称 - 不为给定渲染器编译着色器。默认情况下,将为所有渲染器编译着色器。请参阅下文中的_渲染器_以了解详细信息。
pragma multi_compile … - 用于处理多个着色器变体。
pragma enable_d3d11_debug_symbols - 为针对 DirectX 11 编译的着色器生成调试信息,这将允许您通过 Visual Studio 2012(或更高版本)图形调试器来调试着色器。
pragma hardware_tier_variants 渲染器名称 - 为每个可以运行所选渲染器的硬件层生成每个编译着色器的多个着色器硬件变体。请参阅下文中的_渲染器_以了解详细信息。
pragma hlslcc_bytecode_disassembly - embed disassembled HLSLcc bytecode into translated shader.
pragma disable_fastmath - enables precise IEEE 754 rules, mostly involving NaN handling (currently only affects Metal platform).
pragma glsl_es2 - When set in a GLSL shader, generate a GLSL ES 1.0(OpenGL ES 2.0), even when the shader target is OpenGL ES 3.

posted @ 2021-03-12 10:26  melt00  阅读(105)  评论(0编辑  收藏  举报