当前位置: 首页 > news >正文

Shader中着色器的编译目标级别

1. # pragma target  x.0

2. # pragma require  xxx

支持的“#pragma target”名称

以下是支持的着色器模型列表,其中包含大致增加的功能集(在某些情况下对于平台/GPU 的要求更高):

#pragma target 2.0

适用于 Unity 支持的所有平台。DX9 着色器模型 2.0。 有限数量的算术和纹理指令;8 个插值器;没有顶点纹理采样;片元着色器中没有衍生指令;没有显式的 LOD 纹理采样。

#pragma target 2.5(默认值)
  • 几乎与 3.0 目标相同(见下文),例外之处是仍然只有 8 个插值器,并且没有显式的 LOD 纹理采样。
  • 在 Windows Phone 上编译为 DX11 功能级别 9.3。
#pragma target 3.0
  • DX9 着色器模型 3.0:衍生指令,纹理 LOD 采样,10 个插值器,允许更多的数学/纹理指令。
  • 在 DX11 功能级别 9.x GPU(例如大多数 Windows Phone 设备)上不支持。
  • 某些 OpenGL ES 2.0 设备可能无法完全支持,具体取决于存在的驱动程序扩展和使用的功能。
#pragma target 3.5(或 es3.0)
  • OpenGL ES 3.0 功能(D3D 平台上的 DX10 SM4.0,只是没有几何着色器)。
  • 在 DX11 9.x (WinPhone) 和 OpenGL ES 2.0 上不支持。
  • 在 DX11+、OpenGL 3.2+、OpenGL ES 3+、Metal、Vulkan 和 PS4/XB1 游戏主机上支持。
  • 着色器、纹理数组等中的本机整数运算。
#pragma target 4.0
  • DX11 着色器模型 4.0。
  • 在 DX11 9.x (WinPhone)、OpenGL ES 2.0/3.0/3.1 和 Metal 上不支持。
  • 在 DX11+、OpenGL 3.2+、OpenGL ES 3.1+AEP、Vulkan 和 PS4/XB1 游戏主机上支持。
  • 具有几何着色器以及 es3.0 目标所具有的一切功能。
#pragma target 4.5(或 es3.1)
  • OpenGL ES 3.1 功能(D3D 平台上的 DX11 SM5.0,只是没有曲面细分着色器)。
  • 在早于 SM5.0 的 DX11、早于 4.3 的 OpenGL(即 Mac)和 OpenGL ES 2.0/3.0 上不支持。
  • 在 DX11+ SM5.0、OpenGL 4.3+、OpenGL ES 3.1、Metal、Vulkan 和 PS4/XB1 游戏主机上支持。
  • 有计算着色器、随机访问纹理写入、原子等。没有几何着色器和曲面细分着色器。
#pragma target 4.6(或 gl4.1)
  • OpenGL 4.1 功能(D3D 平台上的 DX11 SM5.0,只是没有计算着色器)。这基本上是 Mac 支持的最高 OpenGL 级别。
  • 在早于 SM5.0 的 DX11、早于 4.1 的 OpenGL、OpenGL ES 2.0/3.0/3.1 和 Metal 上不支持。
  • 在 DX11+ SM5.0、OpenGL 4.1+、OpenGL ES 3.1+AEP、Vulkan、Metal(不含几何体)和 PS4/XB1 游戏主机上支持。
#pragma target 5.0
  • DX11 着色器模型 5.0。
  • 在早于 SM5.0 的 DX11、早于 4.3 的 OpenGL(即 Mac)、OpenGL ES 2.0/3.0/3.1 和 Metal 上不支持。
  • 在 DX11+ SM5.0、OpenGL 4.3+、OpenGL ES 3.1+AEP、Vulkan、Metal(不含几何体)和 PS4/XB1 游戏主机上支持。

请注意,所有 OpenGL 类平台(包括移动平台)都被视为“支持着色器模型 3.0”。WP8/WinRT 平台(DX11 功能级别 9.x)被视为仅支持着色器模型 2.5。

Shader "Unlit/ShaderTarget"
{
    CGINCLUDE
    #include "UnityCG.cginc"

            struct appdata
            {
                float4 vertex : POSITION;
            };

            struct v2f
            {
                float4 vertex : SV_POSITION;
            };

            v2f vert (appdata v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {
                #if(SHADER_TARGET<30)   //如果着色器的目标编译级别小于3.0时
                return fixed4(1,0,0,1);
                #else
                return fixed4(0,1,0,1);
                #endif
            }
    ENDCG

    //高配
    SubShader
    {
        Tags { "RenderType"="Opaque" }

        LOD 400

        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #pragma target 3.0   //表示支持的硬件特性越多
            
            ENDCG
        }
    }

    //低配
    SubShader
    {
        Tags { "RenderType"="Opaque" }

        LOD 200

        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #pragma target 2.0
            
            ENDCG
        }
    }
}

相关文章:

  • vue3数据双向绑定解析
  • Unity3D 着色器优化(Shader Optimization)
  • 机器人基础知识
  • 如何设置GET请求的参数?
  • SAP SD学习笔记31 - 销售BOM
  • Java基础入门流程控制全解析:分支、循环与随机数实战
  • 部署MuseTalk时, MMCV问题解决方案
  • 【MyBatis Plus 逻辑删除详解】
  • DICOM开发者常用DICOM开源库详解
  • 推理大模型时代,TextIn ParseX助力出版业知识资产重构
  • 全球领先的光学方案设计公司:倚光科技
  • Android Spinner总结
  • 23、vue3+vite配置环境变量实现开发、测试、生产的区分
  • LLM最新的模型微调技术有哪些
  • c语言闯算法--常用技巧
  • LINUX 指令大全
  • 养生,点亮健康生活
  • 监听新打开窗口的关闭情况和iframe内系统的url改变情况
  • 如何用“几何产品规范”让齿轮测量更精准?
  • 如何选择适合您智能家居解决方案的通信协议?
  • 印巴战火LIVE丨印巴互相发动无人机袭击,巴官员称两国已在国安层面接触
  • 以总理内塔尼亚胡称决心彻底击败哈马斯
  • 国家主席习近平同普京总统举行大范围会谈
  • 绍兴柯桥:用一块布托起中国制造的新经纬
  • 外交部答澎湃:美方攻击抹黑中加关系与合作的卑劣图谋不会得逞
  • 鸿蒙电脑正式亮相,五年布局积累超2700项核心专利