unity着色器和屏幕特效学习之渲染几何体边线问题
我是根据《unity着色器和屏幕特效》这本书学习的,但是最近在学到通过着色器渲染几何边线这里时出了问题,教程里给的模型一个球通过加shader之后是这样的
而我从max中导出的球,加了相同的shader之后是这样的
下面是shader为standard时两个球在一起的效果
下面是shader为边线着色器两个球在一起的效果
两个球的区别目前只发现是这样的
希望哪位懂得人可以告诉我是怎么回事,着色器代码如下
Shader "PACKT/unlit_wireframe"
{
Properties
{
_Color("Color", Color) = (0,0,0,0)//漫反射颜色
_EngeColor("Enge Color",Color) = (0,1,0,1)//边缘颜色
_Width("Width",float) = 0.1//边缘宽度
}
SubShader
{
Tags { "RenderType" = "Transparent" "Queue"="Transparent" }
LOD 100
Pass
{
Blend SrcAlpha OneMinusSrcAlpha//两个系数:SrcAlpha源颜色OneMinusSrcAlpha 1-源颜色
Cull Front//剔除正面
AlphaTest Greater 0.5
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
uniform float4 _Color;
uniform float4 _EngeColor;
uniform float _Width;
// make fog work
#pragma multi_compile_fog
#include "UnityCG.cginc"
struct appdata//顶点着色器
{//顶点坐标、贴图纹理坐标、顶点颜色
float4 vertex : POSITION;
float4 texcoord1 : TEXCOORD0;
float4 color:COLOR;
};
struct v2f//传给片元着色器
{
float4 pos : POSITION;
float4 texcoord1 : TEXCOORD0;
float4 color:COLOR;
};
/*sampler2D _MainTex;
float4 _MainTex_ST;*/
v2f vert (appdata v)//顶点处理
{
v2f o;//传给片元的
o.pos= UnityObjectToClipPos(v.vertex);//投影坐标
o.texcoord1 = v.texcoord1;
o.color = v.color;
return o;
}
fixed4 frag (v2f i) : COLOR
{
fixed4 answer;
float lx = step(_Width, i.texcoord1.x);
float ly = step(_Width, i.texcoord1.y);
float hx = step(i.texcoord1.x, 1.0- _Width);
float hy = step(i.texcoord1.y, 1.0 - _Width);
answer = lerp(_EngeColor, _Color, lx*ly*hx*hy);
return answer;
}
ENDCG
}
Pass
{
Blend SrcAlpha OneMinusSrcAlpha
Cull Back
AlphaTest Greater 0.5 //try removing this
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
uniform float4 _Color;
uniform float4 _EdgeColor;
uniform float _Width;
struct appdata
{
float4 vertex : POSITION;
float4 texcoord1 : TEXCOORD0;
float4 color : COLOR;
};
struct v2f
{
float4 pos : POSITION;
float4 texcoord1 : TEXCOORD0;
float4 color : COLOR;
};
v2f vert(appdata v)
{
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
o.texcoord1 = v.texcoord1;
o.color = v.color;
return o;
}
fixed4 frag(v2f i) : COLOR
{
fixed4 answer;
float lx = step(_Width, i.texcoord1.x);
float ly = step(_Width, i.texcoord1.y);
float hx = step(i.texcoord1.x, 1.0 - _Width);
float hy = step(i.texcoord1.y, 1.0 - _Width);
answer = lerp(_EdgeColor, _Color, lx*ly*hx*hy);
return answer;
}
ENDCG
}
}
Fallback "Vertex Colored", 1
}