角色Shader的动效需求

角Shader的开发不知要实现最基础光照等功能, 可能还要在角色武器的Shader增加多种动效, 比如因武器品质区分的流光特效, 被技能击中时的冻结效果.
这类动效的实现方式有多种, 以下以Shader的方式实现下列三种:

  • 流光
  • 溶解

开发思路

具体效果

  • 流光

    两层
    Alpha控制范围

  • matcap实现

  • 溶解

    支持溶解边缘亮边
    step(fixed2(noise, noise+edge), _Dissolve)

对需要实现的效果进行排序

实现这些需求的过程上来说, 肯定是一层一层在基础效果只上叠加上去的,相互之间是有"覆盖"关系的, 于是我们将以上需求排列整理如下:

  • 光照
  • 流光
  • 溶解

2. Shader代码的实现

1. 封装

#ifndef MESH_FX_CORE_INCLUDED#define MESH_FX_CORE_INCLUDED#ifdef MESH_FX_ONuniform float4 _EdgeColor;uniform sampler2D _DissolveNoiseTex;uniform float4 _DissolveNoiseTex_ST;uniform float _DissolveWidth;uniform float _Dissolve;uniform sampler2D   _MatcapTex      ;uniform float       _MatcapIntensity;uniform float4      _FlowColor;uniform sampler2D   _FlowTex        ;uniform float4      _FlowTexTiling  ;uniform float4      _Flow1Color;uniform sampler2D   _FlowTex1       ;uniform float4      _FlowSpeed      ;uniform float       _FlowIntensity  ;struct MeshFXData{float2 UV0;float3 normalWorld;fixed3 BaseColor;};fixed4 FX_Dissolve(MeshFXData fx){float2 uv_DissolveNoiseTex = fx.UV0 * _DissolveNoiseTex_ST.xy + _DissolveNoiseTex_ST.zw;float4 dissolveTexCol = tex2D(_DissolveNoiseTex, uv_DissolveNoiseTex);float2 twoLayer = float2(dissolveTexCol.r, saturate(dissolveTexCol.r + _DissolveWidth));float2 dissolveResult = step(twoLayer, _Dissolve.xx);float4 finalCol = _EdgeColor * (dissolveResult.x - dissolveResult.y) * dissolveTexCol.r;finalCol.a = saturate(dissolveResult.x);return finalCol;}fixed4 FX_Frozen(MeshFXData fx){float2 matCapUV = ((mul(UNITY_MATRIX_V, float4(fx.normalWorld, 0.0)).xyz * 0.5) + 0.5).xy;float4 finalCol = tex2D(_MatcapTex, matCapUV);finalCol.a = _MatcapIntensity;return finalCol;}fixed4 FX_LightFlow(MeshFXData fx){float2 uv0 = fx.UV0 * _FlowTexTiling.xy + (_Time.y * _FlowSpeed.xy);fixed4 flowCol1 = tex2D(_FlowTex, uv0);fixed mask1 = tex2D(_FlowTex, fx.UV0.xy).a; //float2 uv1 = fx.UV0 * _FlowTexTiling.zw + (_Time.y * _FlowSpeed.zw);fixed4 flowCol2 = tex2D(_FlowTex1, uv1);fixed mask2 = tex2D(_FlowTex1, fx.UV0.xy).a;fixed4 layer1 = flowCol1 *  mask1 * _FlowColor;fixed4 layer2 = flowCol2 * mask2 * _Flow1Color;fixed4 col = (layer1 + layer2) * _FlowIntensity;col.a = max(flowCol1.a, flowCol2.a);return col;}fixed4 MeshFXInternal(MeshFXData fx){fixed4 finalColor = fixed4(0, 0, 0, 0);fixed4 Dissolve = FX_Dissolve(fx);fixed4 Frozen = FX_Frozen(fx);fixed4 LightFlow = FX_LightFlow(fx);// lightflow -> frozen -> dissolve//lightflowfinalColor.rgb = fx.BaseColor + LightFlow.rgb * fx.BaseColor * 2;//matcap frozenfinalColor.rgb = lerp(finalColor.rgb, Frozen.rgb, Frozen.a);//dissolvefinalColor.rgb = finalColor + Dissolve.rgb;finalColor.a = Dissolve.a;return finalColor;}#endif
#endif

2. 调用

#if defined(MESH_FX_ON)MeshFXData fx = (MeshFXData)0;fx.UV0 = i.tex.xy;fx.normalWorld = s.normalWorld;fx.BaseColor = Color.rgb;Color = MeshFXInternal(fx);
#endif

3. ShaderGUI的实现

体力活

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">

转载于:https://www.cnblogs.com/CloudLiu/p/10442301.html

角色和武器Shader特效开发相关推荐

  1. 《Unity着色器和屏幕特效开发秘笈》—— 1.7 创建渐变纹理来控制漫反射着色...

    本节书摘来自华章出版社<Unity着色器和屏幕特效开发秘笈>一 书中的第1章,第1.7节,作者:(美)Kenny Lammers,更多章节内容可以访问云栖社区"华章计算机&quo ...

  2. Ruby‘s Adventrue游戏制作笔记(十二)Unity给角色添加简单的特效

    Ruby's Adventrue游戏制作笔记(十二)Unity给角色添加简单的特效 前言 一.把特效物品进行切割 二.创建 particle System 三.创建彩色球 四.再设置一下其他属性 五. ...

  3. 《Unity着色器和屏幕特效开发秘笈》—— 2.5 法线贴图

    本节书摘来自华章出版社<Unity着色器和屏幕特效开发秘笈>一 书中的第2章,第2.5节,作者:(美)Kenny Lammers,更多章节内容可以访问云栖社区"华章计算机&quo ...

  4. 001_StarterPlatformGame_角色,武器,控制类

    ----------------------------------StarterPlatformGame---李明阳2015-2-19-------------------------------- ...

  5. 《Unity着色器和屏幕特效开发秘笈》—— 3.4 创建BlinnPhong高光类型

    本节书摘来自华章出版社<Unity着色器和屏幕特效开发秘笈>一 书中的第3章,第3.4节,作者:(美)Kenny Lammers,更多章节内容可以访问云栖社区"华章计算机&quo ...

  6. 《Unity着色器和屏幕特效开发秘笈》—— 2.1 引言

    本节书摘来自华章出版社<Unity着色器和屏幕特效开发秘笈>一 书中的第2章,第2.1节,作者:(美)Kenny Lammers,更多章节内容可以访问云栖社区"华章计算机&quo ...

  7. 《Unity着色器和屏幕特效开发秘笈(原书第2版)》一2.9 打包和混合纹理

    本节书摘来自华章出版社<Unity着色器和屏幕特效开发秘笈(原书第2版)>一书中的第2章,第2.9节,作者 [英]艾伦朱科尼(Alan Zucconi) [美]肯尼斯拉默斯(Kenneth ...

  8. Silverlight游戏特效开发(一) : 制作人物光环效果

    本系列介绍使用Silverlight制作游戏特效的方法,本文主要介绍人物光环效果. 本方法适用于Silverlight网页程序,WPF应用,Windows Phone Silverlight应用.对于 ...

  9. 《Unity着色器和屏幕特效开发秘笈》—— 第3章 利用镜面反射让游戏闪耀起来...

    本节书摘来自华章出版社<Unity着色器和屏幕特效开发秘笈>一 书中的第3章,第3.1节,作者:(美)Kenny Lammers,更多章节内容可以访问云栖社区"华章计算机&quo ...

  10. 《Unity着色器和屏幕特效开发秘笈》—— 1.1 引言

    本节书摘来自华章出版社<Unity着色器和屏幕特效开发秘笈>一 书中的第1章,第1.1节,作者:(美)Kenny Lammers,更多章节内容可以访问云栖社区"华章计算机&quo ...

最新文章

  1. ffmpeg解封装及解码实战
  2. 大道至简—GO语言最佳实践
  3. Lambda表达式和流API:基本示例
  4. Redis(十一):Redis特殊类型之Bitmap位图
  5. C/C++语言中Static的作用详述
  6. 常见计算机英语词汇翻译,常见计算机英语词汇翻译.doc
  7. 初级会计资格-初级会计实务-知识点总结大全
  8. Win11怎么把桌面文件路径改到D盘
  9. 中国首个证券纠纷示范判决机制的规定在沪发布
  10. MAtlab wavefront,这是张小飞的阵列信号的全部MATLAB代码 传统的高分辨波达方向(DOA)估计算法中 - 下载 - 搜珍网...
  11. html css3滤镜,CSS滤镜之Glow属性_css
  12. neo4j笔记(一)
  13. ES(四)ES使用(基本查询、聚合查询)
  14. java手势识别技术_Android基础开发之手势识别
  15. Rust权威指南 全书笔记
  16. 机器学习-----聚类kmeans肘部图、轮廓图的绘制、以及聚类和聚类中心散点图的绘制
  17. 要实现一台电脑可以上公司内网也可以访问外网
  18. html中图片自动循环滚动代码,实现长图片自动循环滚动效果
  19. linux 搭建webserver-Goahead
  20. 软考高级已过,可以继续考软考中级吗?

热门文章

  1. 利用全加器实现7段数码管_[走近FPGA]之数码管动态显示
  2. CPU卡指令文件读取算法
  3. handsome主题添加服务器信息,全屏响应式精美typecho主题handsome
  4. 一网打尽:指针和数组
  5. itsm软件_itsm软件的主要功能
  6. 德州农工大学计算机硕士申请,德州农工大学硕士申请
  7. NLP 论文领读 | 缺少有标注的数据集怎么训练文本检索模型?来看看 LaPraDoR怎么做的吧
  8. Axure RP8 进度条
  9. 如何在PC上显示Hololens的视野
  10. 仿微软Video Indexer——视频断点播放与智能解析时间线的前端可视化实现