扰动
直接对uv进行变换就可以了,记得首先把六边形格子地图的Tilling调高点 先预先调成合适大小的六边形,然后repeat铺满整个护盾

1
2
3
4
5
6
// Tiles and offsets the value of input UV by the inputs Tiling and Offset respectively.
// This is commonly used for detail maps and scrolling textures over Time.
void Unity_TilingAndOffset_float(float2 UV, float2 Tiling, float2 Offset, out float2 Out)
{
Out = UV * Tiling + Offset;
}
直接在vertex着色器中对appdata传进来的uv进行变动,两者 offset的变动频率不同

1
2
3
4
5
6
7
8
9
10
11
12
13
14
v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
half2 uv = TRANSFORM_TEX(v.uv, _MainTex);
Unity_TilingAndOffset_float(uv, half2(1, 1), half2(0, -_Time.y), o.uv);
Unity_TilingAndOffset_float(uv, half2(1, 1), half2(0, -_Time.y * 2), o.uvGlow);

            float3 worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; o.worldViewDir = normalize(UnityWorldSpaceViewDir(worldPos));o.worldNormal = UnityObjectToWorldNormal(v.normal);return o;}

护盾边缘光
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
float3 normal : NORMAL;
};

        struct v2f{float2 uv : TEXCOORD0;float2 uvGlow : TEXCOORD1;float4 vertex : SV_POSITION;half3 worldNormal : TEXCOORD2;half3 worldViewDir : TEXCOORD3;};

vertex着色器
1
2
3
4
5
6
7
8
9
10
11
12
13
v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);

float3 worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;

            o.worldViewDir = normalize(UnityWorldSpaceViewDir(worldPos));o.worldNormal = UnityObjectToWorldNormal(v.normal);...return o;}

fragment着色器
先获取世界坐标系下的法线向量和世界坐标系下摄像机到顶点的向量,1-点乘得到的值然后结合到最后的颜色输出计算中,法线向量与摄像机到顶点的向量的所成夹角可视为从中心点向边缘扩散,角度越来越大,到边缘区角度呈局部最大值

1
2
3
4
5
6
7
8
9
10
11
half4 frag (v2f i) : SV_Target
{

half rim = pow(1 - abs(dot(normalize(i.worldNormal), normalize(i.worldViewDir))), _RimNum);

            // 边缘高光col = lerp(col, _LightColor, rim);...return col;}

全部代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
Shader “Unlit/ShieldForceField”
{
Properties
{
_MainTex (“Texture”, 2D) = “white” {}
[NoScaleOffset] _LightTex (“LightTex”, 2D) = “white” {}
_Hologram (“Hologram”, 2D) = “white” {}
[HDR] _LightColor (“LightColor”, Color) = (1, 1, 1, 1)
// 边缘光幅度
_RimNum(“Rim” , Range(0 , 5)) = 1
}
SubShader
{
Tags
{
“RenderType” = “Transparent”
“Queue” = “Transparent”
“IgnoreProjector” = “True”
“ForceNoShadowCasting” = “True”
}

    Blend SrcAlpha OneMinusSrcAlphaPass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"#include "../../../../../Assets/ShaderGraphic.cginc"sampler2D _MainTex, _LightTex, _Hologram;float4 _MainTex_ST;half4 _LightColor;float _RimNum;struct appdata{float4 vertex : POSITION;float2 uv : TEXCOORD0;float3 normal : NORMAL;};struct v2f{float2 uv : TEXCOORD0;float2 uvGlow : TEXCOORD1;float4 vertex : SV_POSITION;half3 worldNormal : TEXCOORD2;half3 worldViewDir : TEXCOORD3;};v2f vert (appdata v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex);half2 uv = TRANSFORM_TEX(v.uv, _MainTex);Unity_TilingAndOffset_float(uv, half2(1, 1), half2(0, -_Time.y), o.uv);Unity_TilingAndOffset_float(uv, half2(1, 1), half2(0, -_Time.y * 2), o.uvGlow);float3 worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; o.worldViewDir = normalize(UnityWorldSpaceViewDir(worldPos));o.worldNormal = UnityObjectToWorldNormal(v.normal);return o;}half4 frag (v2f i) : SV_Target{half4 col = tex2D(_MainTex, i.uv);half4 light = tex2D(_LightTex, i.uv);// light.rgb = light.r * _LightColor.rgb;light.rgb = _LightColor.rgb;col.rgb += light.rgb * _LightColor.a;half4 holoColor = tex2D(_Hologram, i.uvGlow);col += holoColor * 0.3;col.a = 0.5;half rim = pow(1 - abs(dot(normalize(i.worldNormal), normalize(i.worldViewDir))), _RimNum);// 边缘高光col = lerp(col, _LightColor, rim);return col;}ENDCG}
}

}

最后大功告成了,后续可能会继续改进一下(加上相交时会留下边缘光)
USB Microphone https://www.soft-voice.com/
Wooden Speakers https://www.zeshuiplatform.com/
亚马逊测评 www.yisuping.cn
深圳网站建设www.sz886.com

Unity shader 护盾shield的简单实现相关推荐

  1. Unity shader护盾特效

    身为小白的我看到某大神用 amplify shader editor 插件做了护盾特效,很酷. 蓝色是大神做的,红色那个是我的(感觉和大神的低了几个档次,哈哈) 大神的视频链接: https://ww ...

  2. Unity Shader - 板砖日志 - 简单的树、草 等植物的 随风飘扬 动画

    文章目录 目的 思路 Script include cginc appled shader csharp 效果 目的 便于后续自己的 CTRL+C,V的面向复制.粘贴编程 思路 非常简单:可以使用 p ...

  3. Unity Shader - Simple Toon Shading - 简单卡通渲染

    文章目录 最终效果 - Final Effect 无光照,只有纹理与主色调 Shader 加描边 - Outline GIF Shader 添加光影 - RecieveShadow 自身接收阴影 Sh ...

  4. 2019年6月日记-Unity Shader Graph 菲尼尔简单边缘发光

    ShaderGraph 菲尼尔反射边缘光 创建菲尼尔反射节点,与Color节点相差获得边缘发光的颜色. 控制菲尼尔节点的大小,调出vector1节点来可视化调整. 新建Remap(重映射)节点,将Ti ...

  5. Unity Shader 实现透明护盾效果

    这是大致的效果图,图片压得有点糊.我参考了本篇博客 Unity shader护盾特效. 这是原博客展示的图片: 本例采用了特殊的模型与贴图,原博客里有视频链接的教程,从模型到贴图. 以下是代码 // ...

  6. 《Unity Shader入门精要》 第五章 开始学习Unity Shader之旅 笔记

    开始学习Unity Shader之旅 最简单的片元着色器 #pragma vertex vert #pragma fragment frat 告诉Unity那个函数包括顶点着色器的代码,哪个函数包括片 ...

  7. Unity Shader学习案例一: 流光效果

    Unity Shader Lab新手宝典简单Shader案例一:流光效果 + 相关基础知识说明 Shader "Samples/Light Flow"//shader名称 {Pro ...

  8. 【unity shader】unity游戏特效-简简单单的能量护罩

    本文参考文章: [1]Unity shader护盾特效,作者:qq_16982323 [2]UnityShader--屏幕空间的能量罩(模拟守望先锋温斯顿的能量罩),作者:Porco_ 玩过崩坏3没? ...

  9. Unity Shader 之 简单 护盾Shield 效果的实现

    Unity Shader 之 简单 护盾Shield 效果的实现 目录 Unity Shader 之 简单 护盾Shield 效果的实现 一.简单介绍 二.实现原理

最新文章

  1. 大数据引发的风险与管控
  2. python处理excel表格实例-使用Python操作excel文件的实例代码
  3. 智能合约语言 Solidity 教程系列8 - Solidity API
  4. tensorflow综合示例5:图象分割
  5. excel附件下载 Response 参数设置 (自定义文件并并解决中文乱码)
  6. Nginx 配置实现web解析php代码 过程记录
  7. 面试题简答题——操作系统相关汇总
  8. jQuery—$ is not a function
  9. c语言yuv图片cb,YUV格式图像基础
  10. Elasticsearch 基本查询,term,match,
  11. c语言判断素数 是返回1,c语言编程:设计一个函数用于判断一个数是否为素数,如果是素数返回1,否则返回0。...
  12. Learning Multi-granularity Consecutive User Intent Unit for Session-based Recommendation
  13. IntelliJ IDEA 超实用使用技巧分享
  14. css样式border-radius学习-画出水滴
  15. 数苹果-第11届蓝桥杯Scratch真题
  16. 军品三大基线(功能基线、分配基线、产品基线)及基线包含的文件
  17. 苹果系统中英文输入法切换_Mac系统,如何优雅切换中英文?
  18. 中国FW贝尔探头市场现状研究分析与发展前景预测报告(2022)
  19. 四个数排序C++语言
  20. 超市智能商品推荐系统设计

热门文章

  1. 关于 fir.im 你可能不知道的实用小工具
  2. 微信小程序springboot在线考试系统小程序+后台管理系统 | 计算机毕业设计
  3. HDU4324 - Triangle LOVE 拓补排序
  4. 语句摘抄——第26周
  5. OpenCV图像拼接和图像融合技术
  6. 如何用Camtasia将喜欢的视频做出复古的感觉
  7. mysql8 Record Locks ,Gap Locks, Next-Key Locks实验2 唯一索引和非唯一索引,无索引情况
  8. 小米、街电、携程等名企找人了,免费内推
  9. 关闭Excel2016的动画效果
  10. m3u8视频格式下载并转换为mp4(ffmpeg)