unity 頂點shader製作流光

面片的頂點不多,所以判斷不能精確的使用==0來判斷,只能粗略的判斷一個<0.1f了,根據直線x+y+b=0在外部變化b的值只要在直線上的點就可以設計爲紅色。

Shader "Custom/vex2" {
	SubShader{
		Pass
		{
			CGPROGRAM
			#pragma vertex vert
			#pragma fragment frag			
			#include "unitycg.cginc"

			float b;
			struct vf {
				float4 pos: POSITION;
				fixed4 color : COLOR;
			};
			vf vert(appdata_base v)
			{
				vf o;
				o.pos = UnityObjectToClipPos(v.vertex); //用最後矩陣*mvp矩陣
				float x = o.pos.x / o.pos.w;
				float y = o.pos.y / o.pos.w;	
				float tmp = x + y + b;
				if (tmp < 0)
					tmp = -1 * tmp;
				if (tmp<=0.1)
					o.color = fixed4(1, 0, 0, 1);
				else
					o.color = fixed4(1, 1, 1, 1);
				return o;
			}

			fixed4 frag(vf IN) :COLOR
			{
				return IN.color;
			}

			ENDCG
		}
	}
}

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

namespace demospace
{
	public class vex2 : MonoBehaviour
	{
   		void Start()
    	{

   		}
        float b = 2f;
		void Update()
		{
            b -= Time.deltaTime;
            if (b < -2f)
                b = 2f;
            GetComponent<Renderer>().material.SetFloat("b",b);
        }
    }
}

在這裏插入圖片描述

發佈了90 篇原創文章 · 獲贊 19 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章