使用UnityShader实现X光效果

使用UnityShader实现外发光效果


实现原理------------------------------------------------------------------------------------
改造外发光shader, 添加透明度混合,输出的透明度为计算出的外发光的透明度

效果展示-------------------------------------------------------------------------------------------------------
在这里插入图片描述

Shader "zclShader/X光特性shader"
{
	//具有外发光效果
	//具有透明效果
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
	//控制外发光的颜色
		_RimColor("_RimColor",Color) = (0,0,0,0)
	//控制外发光的范围
		_RimPower("_RimPower",Range(1,10)) = 1
	//控制外发光的强度
		_RimStrength("_RimStrength",Range(1,10)) = 4
    }
    SubShader
    {
        Tags { 
		"RenderType"="Transparent" 
		"Queue"="Transparent"
		}
        LOD 100
		Blend SrcAlpha OneMinusSrcAlpha
        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
           

            #include "UnityCG.cginc"

			 struct appdata
			{
				float4 vertex : POSITION;
				float2 uv : TEXCOORD0;
				float3 normal:NORMAL;
			};

			struct v2f
			{
				float2 uv : TEXCOORD0;
				float4 vertex : SV_POSITION;
				float3 normal:NORMAL;    //法线
				float3 m_viewDir:TEXCOORD1;  //视角向量
				float4 col:TEXCOORD2;  //视角向量
			};

            sampler2D _MainTex;
            float4 _MainTex_ST;
			float4 _RimColor;
			float _RimStrength;
			float _RimPower;

			
            v2f vert (appdata v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.uv = TRANSFORM_TEX(v.uv, _MainTex);
				o.normal = normalize(v.normal);
				o.m_viewDir = normalize(ObjSpaceViewDir(v.vertex));	

				//在顶点中计算,减少性能消耗
				float Rim = 1 - saturate(dot(o.normal, o.m_viewDir));  // 1-cos
				Rim = pow(Rim, _RimPower);      // 1- cos 的 指数
				float4 addColor = Rim * _RimColor *_RimStrength;  
				//边缘光的颜色,边缘光的透明
				o.col = float4(_RimColor.rgb, addColor.a);
                return o;
            }

			fixed4 frag(v2f i) : SV_Target
			{			
				return i.col;
			}
            ENDCG
        }
    }
}


免责声明:图片素材来源于Unity资源商店免费资源包,仅供学习使用
参考资料:https://edu.manew.com/my/course/443/material?type=material
参考书籍:冯乐乐《unityshader入门精要》
参考书籍:郭浩瑜,张鹤《unity3D shaderLab开发实战详解》

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值