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
	

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

happy Gaga

是哪个人这么有眼光,原来是你呀

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值