unity中实现一个类似x光扫描效果
2018-02-26 14:47
676 查看
先来看下效果:
原理很简单,首先获取顶点到摄像机的观察方向,然后与顶点的法线方向进行点积算出投影的长度最后再乘以我们设置的颜色值即为最终要输出的颜色。这里要注意观察方向与法线方向要进行归一化。
shader代码:Shader "Custom/XLight" {
Properties {
_Color ("Color", Color) = (1,1,1,1)
_MainTex ("Albedo (RGB)", 2D) = "white" {}
}
SubShader {
Tags{"IgnoreProjector"="True" "LightMode" = "ForwardBase" "Queue"="Transparent" "RenderType"="Transparent"}
Pass
{
Blend SrcAlpha OneMinusSrcAlpha
ZWrite Off
CGPROGRAM
#include "Lighting.cginc"
#pragma vertex vert
#pragma fragment frag
fixed4 _Color;
struct v2f
{
float4 pos : SV_POSITION;
float3 normal : normal;
float3 viewDir : TEXCOORD0;
};
v2f vert (appdata_base v)
{
v2f o;
o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
o.viewDir = ObjSpaceViewDir(v.vertex);
o.normal = v.normal;
return o;
}
fixed4 frag(v2f i) : SV_Target
{
float3 normal = normalize(i.normal);
float3 viewDir = normalize(i.viewDir);
float rim = 1 - dot(normal, viewDir);
return _Color * rim;
}
ENDCG
}
}
FallBack "Diffuse"
}
原理很简单,首先获取顶点到摄像机的观察方向,然后与顶点的法线方向进行点积算出投影的长度最后再乘以我们设置的颜色值即为最终要输出的颜色。这里要注意观察方向与法线方向要进行归一化。
shader代码:Shader "Custom/XLight" {
Properties {
_Color ("Color", Color) = (1,1,1,1)
_MainTex ("Albedo (RGB)", 2D) = "white" {}
}
SubShader {
Tags{"IgnoreProjector"="True" "LightMode" = "ForwardBase" "Queue"="Transparent" "RenderType"="Transparent"}
Pass
{
Blend SrcAlpha OneMinusSrcAlpha
ZWrite Off
CGPROGRAM
#include "Lighting.cginc"
#pragma vertex vert
#pragma fragment frag
fixed4 _Color;
struct v2f
{
float4 pos : SV_POSITION;
float3 normal : normal;
float3 viewDir : TEXCOORD0;
};
v2f vert (appdata_base v)
{
v2f o;
o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
o.viewDir = ObjSpaceViewDir(v.vertex);
o.normal = v.normal;
return o;
}
fixed4 frag(v2f i) : SV_Target
{
float3 normal = normalize(i.normal);
float3 viewDir = normalize(i.viewDir);
float rim = 1 - dot(normal, viewDir);
return _Color * rim;
}
ENDCG
}
}
FallBack "Diffuse"
}
相关文章推荐
- 【Unity快速实现小功能】实现一个类似跑马灯的效果
- 如何实现当一个应用调用另一个应用的某个activity的时候,让这个activity类似dialog的效果,但是这个应用单独运行的时候还是铺满屏幕的效果
- Duilib实现类似电脑管家扫描目录效果
- 一个可以实现 左右联动JTable 的完全Dialog 实现类似 Excel的冻结第一列 效果
- 将一个view 的背景设为透明 但view上的图标 不透明 实现类似iphone ipad 主页的滑动效果
- unity传送门类似效果实现
- swing实现一个类似网页视频列表横向滚动的效果
- unity 头盔跟随一个物体移动(类似用HTC做过山车效果)
- 分享一个jquery插件:实现类似淘宝上鼠标经过图片右侧显示大图的效果
- 带长按扫描二维码功能的WebView,实现类似微信效果
- Unity中实现类似纪念碑谷中地面的雾化效果
- ue4类似unity多相机分屏与小地图效果实现教程
- Unity_实现类似黑洞的效果__逻辑方面
- unity中一个类似纪念碑谷里的三角图形组成的海面效果
- 讲解如何在Unity的Inspector面板实现类似摄像机层次遮罩的多选效果
- html实现一个类似屏幕解锁的效果
- ue4类似unity多相机分屏与小地图效果实现教程
- 初识kotlin实现一个类似烟花效果的自定义view
- 使用jQuery实现类似开关按钮的效果
- 一个简单的滚动数字的效果实现