这在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的方法。
答案 0 :(得分:0)
并不是说Cg在Mac上不起作用,但是你所使用的着色器版本(5.0)对于Mac的显卡来说太高了。
通常,您应该始终编写一个目标为2.0的子目录,这是默认着色器。效果不如高版本的课程好,有些功能可能无法使用,所以你必须适应它。
然后,根据需要添加更多子目标更高版本,以获得更高质量的版本。
See this Unity3D doc了解有关着色器目标和渲染平台的更多信息。
着色器目标概述:
默认情况下,Unity将着色器编译为大致着色器模型2.0 当量。使用#pragma target可以将着色器编译到 其他能力水平。目前支持这些目标:
#pragma target 2.0
(默认) - 粗略着色模型2.0
#pragma target 3.0
- 编译为着色器模型3.0:
#pragma target 4.0
- 编译为DX10着色器模型4.0。
#pragma target 5.0
- 编译为DX11着色器模型5.0。