糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > Unity遮挡边缘光透明xray效果(Shader)

Unity遮挡边缘光透明xray效果(Shader)

时间:2020-09-11 02:34:50

相关推荐

Unity遮挡边缘光透明xray效果(Shader)

文章目录

一. 前言二. 制作1 创建Shader2 创建材质球3 测试 三. Shader代码

一. 前言

在3D游戏中,经常会出现控制的角色被房子或者墙壁之类的挡住,一些游戏会做一些特殊效果把角色被挡住的部分用xray边缘光显示出来,如下图,下面就用Shader实现遮挡透明效果。

二. 制作

1 创建Shader

shader需要两个pass来实现。其中一个pass正常显示贴图,另外一个pass实现xray效果。

创建一个Shader文件,Shader代码见文章末尾

2 创建材质球

创建材质球

使用刚刚的shader,设置RimColor

把材质球赋值给模型

3 测试

创建一个Cube遮挡角色,即可看到角色的边缘光透明xray效果

三. Shader代码

Shader "MyShader/RimShader" {Properties {_MainTex ("Base (RGB)", 2D) = "white" {} _RimColor("RimColor",Color) = (0,1,1,1)_RimPower ("Rim Power", Range(0.1,8.0)) = 1.0} SubShader {LOD 300 Tags {"Queue" = "Geometry+500" "RenderType"="Opaque" } Pass{Blend SrcAlpha OneZWrite offLighting offztest greaterCGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"float4 _RimColor;float _RimPower;struct appdata_t {float4 vertex : POSITION;float2 texcoord : TEXCOORD0;float4 color:COLOR;float4 normal:NORMAL;};struct v2f {float4 pos : SV_POSITION;float4 color:COLOR;} ;v2f vert (appdata_t v){v2f o;o.pos = UnityObjectToClipPos(v.vertex);float3 viewDir = normalize(ObjSpaceViewDir(v.vertex));float rim = 1 - saturate(dot(viewDir,v.normal ));o.color = _RimColor*pow(rim,_RimPower);return o;}float4 frag (v2f i) : COLOR{return i.color; }ENDCG}pass {ZWrite onZTest less CGPROGRAM #pragma vertex vert #pragma fragment frag sampler2D _MainTex; float4 _MainTex_ST;struct appdata {float4 vertex : POSITION; float2 texcoord : TEXCOORD0; }; struct v2f {float4 pos : POSITION; float2 uv : TEXCOORD0; }; v2f vert (appdata v) {v2f o; o.pos = UnityObjectToClipPos(v.vertex); o.uv = v.texcoord; return o; } float4 frag (v2f i) : COLOR {float4 texCol = tex2D(_MainTex, i.uv); return texCol; } ENDCG } } FallBack "Diffuse" }

如果觉得《Unity遮挡边缘光透明xray效果(Shader)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。