首页 分享 边缘发光效果的两种写法

边缘发光效果的两种写法

来源:花匠小妙招 时间:2024-11-13 12:21

边缘发光效果的两种写法

最新推荐文章于 2024-09-25 10:30:00 发布

Rains卍Soft 于 2016-03-25 10:18:54 发布

我们可以看到很多游戏经常会有这种模型边缘发光的效果,看起来很高大上的样子。其实实现起来挺简单的,网上也有很多这样的例子分享,现在我也来分享一下两种Shader实现的代码吧。

1.Surface Shader

Shader "Custom/Rim Light" {          Properties {                 _MainTex("Base (RGB)", 2D) = "white" {}                 _RimColor("_RimColor", Color) =(0.17,0.36,0.81,0.0)                 _RimWidth("_RimWidth", Range(0.6,9.0)) = 0.9          }              SubShader {                 Tags{ "RenderType" = "Opaque"}                 LOD 150                    CGPROGRAM                     #pragma surface surf Lambert                                 struct Input {                        float2 uv_MainTex;                        float3 viewDir;                 };                     sampler2D _MainTex;                 fixed4 _RimColor;                 fixed _RimWidth;                     void surf (Input IN, inout SurfaceOutput o) {                        fixed4 t = tex2D (_MainTex, IN.uv_MainTex);                        o.Albedo = t.rgb;                        o.Alpha = t.a;                        half rim = 1.0 - saturate(dot (normalize(IN.viewDir), o.Normal));                        o.Emission= _RimColor.rgb * pow (rim, _RimWidth);                 }                    ENDCG          }              Fallback "Diffuse"   }  

主要是这两句起到关键作用。

half rim = 1.0 - saturate(dot (normalize(IN.viewDir), o.Normal));   o.Emission= _RimColor.rgb * pow (rim, _RimWidth);  

如果不想受灯光影响,可以在Tags加上"LightMode"="Always"

2.Vetex and Fragment Shader

Shader "Custom/Rim Light VF" {       Properties {           _MainTex ("Base (RGB)", 2D) = "white" {}           _Color ("Main Color", Color) = (1,1,1,1)           _RimColor ("Rim Color", Color) = (1, 1, 1, 1)           _RimWidth ("Rim Width", float) = 0.9       }       SubShader {           Pass {               Lighting Off               CGPROGRAM                   #pragma vertex vert                   #pragma fragment frag                   #include "UnityCG.cginc"                      struct appdata                    {                       float4 vertex : POSITION;                       float3 normal : NORMAL;                       float2 texcoord : TEXCOORD0;                   };                      struct v2f                    {                       float4 pos : SV_POSITION;                       float2 uv : TEXCOORD0;                       fixed3 color : COLOR;                   };                      uniform float4 _MainTex_ST;                   uniform fixed4 _RimColor;                   float _RimWidth;                      v2f vert (appdata_base v) {                       v2f o;                       o.pos = mul (UNITY_MATRIX_MVP, v.vertex);                          float3 viewDir = normalize(ObjSpaceViewDir(v.vertex));                       float dotProduct = 1 - dot(v.normal, viewDir);                                             o.color = smoothstep(1 - _RimWidth, 1.0, dotProduct);                       o.color *= _RimColor;                          o.uv = v.texcoord.xy;                       return o;                   }                      uniform sampler2D _MainTex;                   uniform fixed4 _Color;                      fixed4 frag(v2f i) : COLOR {                       fixed4 texcol = tex2D(_MainTex, i.uv);                       texcol *= _Color;                       texcol.rgb += i.color;                       return texcol;                   }               ENDCG           }       }   }  

当然最关键的还是vert方法里的代码,具体两种方法大家可以根据需求使用。看看效果,赶紧试试吧。

相关知识

ps怎么设计漂亮的霓虹灯花? ps发光花朵的画法
几种LED用多色氧化物发光材料的制备、结构及其发光特性研究
这种夜晚发光的植物,你想来一盆吗?
开业花篮贺词写法
商务花篮贺词的写法,送花篮贺词
如何写花圈挽带 花圈挽带的写法
看!这里的绿植夜晚会发光
彩色电子发光装饰花的制作方法
老人去世送花圈怎么写?殡葬花圈挽联怎么写?农村花圈挽联的写法
哀悼花圈:花圈送什么样的?订购哀悼花圈挽联的写法须知

网址: 边缘发光效果的两种写法 https://www.huajiangbk.com/newsview538917.html

所属分类:花卉
上一篇: 居家=度假?桃李春风这款合院产品
下一篇: 珠宝品牌的新战场,产品力 x 用

推荐分享