这个显卡上不能运行子着色器



这在PC上运行良好,但我使用的是Mac,它会弹出警告

没有子着色器可以在这个显卡上运行

对于着色器,这会显示粉红色的错误着色器。

Shader "Custom/wireframeShaderWithLambert" {
Properties {
    _Glossiness ("Smoothness", Range(0,1)) = 0.5
    _Metallic ("Metallic", Range(0,1)) = 0.0
    _Color ("Line Color", Color) = (1,1,1,1)
    _MainTex ("Main Texture", 2D) = "white" {}
    _Thickness ("Thickness", Float) = 1
}     
SubShader {
  Tags { "RenderType" = "Opaque" }
  CGPROGRAM
  #pragma surface surf Lambert
  struct Input {
      float2 uv_MainTex;
  };
  sampler2D _MainTex;
  void surf (Input IN, inout SurfaceOutput o) {
      o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb;
  }
  ENDCG
    Pass
    {
        Tags { "RenderType"="Opaque" "Queue"="Geometry" } 
        Blend SrcAlpha OneMinusSrcAlpha
        Cull Off
        LOD 200
        CGPROGRAM
        #pragma target 5.0
        #include "UnityCG.cginc"
        #pragma vertex vert
        #pragma fragment frag
        #pragma geometry geom
            struct vertToGeom
            {
                float4  pos     : POSITION;     // vertex position
                float2  uv      : TEXCOORD0;    // vertex uv coordinate
            };
            // Geometry to  UCLAGL_fragment
            struct geomToFrag
            {
                float4  pos     : POSITION;     // fragment position
                float2  uv      : TEXCOORD0;    // fragment uv coordinate
                float3  dist    : TEXCOORD1;    // distance to each edge of the triangle
            };
            // PARAMETERS //
            //float4 _Texture_ST;           // For the Main Tex UV transform
            float _Thickness = 1;       // Thickness of the wireframe line rendering
            float4 _Color = {1,1,1,1};  // Color of the line
            float4 _MainTex_ST;         // For the Main Tex UV transform
            sampler2D _MainTex;         // Texture used for the line

            // Vertex Shader
            vertToGeom vertShader(appdata_base v)
            {
                //Random shader code
                return output;
            }
            // Geometry Shader
            [maxvertexcount(3)]
            void geomShader(triangle UCLAGL_v2g p[3], inout TriangleStream<UCLAGL_g2f> triStream)
            {
                   //Random shader code
            }
        ENDCG
    }
} 
}

我不知道为什么会这样,我唯一能想到的是也许Cg不能在mac上工作?

另外,我似乎找不到使它成为GLSL的方法。

这并不是说Cg不能在Mac上工作,而是超过你的目标着色器版本(5.0)对于你的Mac图形卡来说太高了。

通常,你应该总是写一个子着色器目标2.0,这是默认的着色器。当然,效果不会像高级版本那么好,有些功能可能不可用,所以你必须适应它。

然后,添加更多的子着色器目标更高的版本,因为你需要它,为一个更好的质量版本。

有关着色器目标和渲染平台的更多信息,请参阅Unity3D文档。


Shader目标概述:

默认情况下,Unity将shader编译成shader model 2.0等价的。使用#pragma target可以将着色器编译成其他能力级别。目前支持以下目标:

#pragma target 2.0(默认)-大致着色器模型2.0

  • Shader Model 2.0在Direct3D 9。
  • 有限的算术量&结构说明;无顶点纹理采样;在片段着色器中没有衍生。

#pragma target 3.0 -编译为着色器模型3.0:

  • Shader Model 3.0 on Direct3D 9.

#pragma target 4.0 -编译DX10着色器模型4.0。

  • 此目标目前仅支持DirectX 11和XboxOne/PS4平台。

#pragma target 5.0 -编译成DX11着色器模型5.0。

  • 此目标目前仅支持DirectX 11和XboxOne/PS4平台。

相关内容

  • 没有找到相关文章

最新更新