我认为这种shader能通过简单的方式呈现出不错的效果。

1.流光shader:

Shader "Unlit/StreamShader"
{
//流光shader
Properties
{
_MainTex ("Texture", 2D) = "white" {}
_StreamTex("StreamTexture", 2D) = "white" {}
_StreamColor("StreamColor", Color) = (,,,)
_StreamStrength("StreamStrength", Float) =
_StreamSpeed("StreamSpeed", Range(,)) = 0.5
_EnvTex("EnvTex (CubeMap)", Cube) = "_SkyBox" {}
_EnvStrength("EnvStrength", Range(,)) = 0.8 }
SubShader
{
Tags { "RenderType"="Opaque" }
LOD Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag #include "UnityCG.cginc" struct appdata
{
float4 vertex : POSITION;
float4 normal : NORMAL;
float2 uv0 : TEXCOORD0;
float2 uv1 : TEXCOORD1;
}; struct v2f
{
float2 uv0 : TEXCOORD0;
float2 uv1 : TEXCOORD1;
float4 vertex : SV_POSITION;
float3 RefDir : TEXCOORD2;
}; sampler2D _MainTex;
float4 _MainTex_ST;
sampler2D _StreamTex;
float4 _StreamTex_ST;
half4 _StreamColor;
float _StreamStrength;
float _StreamSpeed;
samplerCUBE _EnvTex;
half _EnvStrength; v2f vert (appdata v)
{
v2f o;
o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
o.uv0 = TRANSFORM_TEX(v.uv0, _MainTex);
o.uv1 = v.uv1; float3 worldN = UnityObjectToWorldNormal(v.normal);
o.RefDir = reflect(-WorldSpaceViewDir(v.vertex), worldN);
return o;
} fixed4 frag (v2f i) : SV_Target
{
// sample the texture
fixed4 col = tex2D(_MainTex, i.uv0);
//流光
float2 streamUV = i.uv1 + _Time.y * float2(_StreamSpeed, );//缩放时间控制速度
fixed4 steamCol = tex2D(_StreamTex, TRANSFORM_TEX(streamUV, _StreamTex));
float3 steam = _StreamColor * steamCol.r * _StreamStrength;
//环境贴图反射
float3 reflection = texCUBE(_EnvTex, i.RefDir).rgb * _EnvStrength;
float3 o = col.rgb + steam + reflection;
return fixed4(o, );
}
ENDCG
}
}
}

效果:

2.流光+扭曲shader:

Shader "Unlit/SteamAndWrapShader"
{
//流光+纹理扭曲shader
Properties
{
_MainTex("Texture", 2D) = "white" {}
_StreamTex("StreamTexture", 2D) = "white" {}
_StreamColor("StreamColor", Color) = (,,,)
_StreamStrength("StreamStrength", Float) =
_StreamSpeed("StreamSpeed", Range(,)) = 0.5
_EnvTex("EnvTex (CubeMap)", Cube) = "_SkyBox" {}
_EnvStrength("EnvStrength", Range(,)) = 0.8
_WrapSpeed("WrapSpeed", Float) =
_WrapStrength("WrapStrength", Float) =
}
SubShader
{
Tags{ "RenderType" = "Opaque" }
LOD Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag #include "UnityCG.cginc" struct appdata
{
float4 vertex : POSITION;
float3 normal : NORMAL;
float2 uv0 : TEXCOORD0;
float2 uv1 : TEXCOORD1;
}; struct v2f
{
float2 uv0 : TEXCOORD0;
float2 uv1 : TEXCOORD1;
float4 vertex : SV_POSITION;
float3 RefDir : TEXCOORD2;
}; sampler2D _MainTex;
float4 _MainTex_ST;
sampler2D _StreamTex;
float4 _StreamTex_ST;
half4 _StreamColor;
float _StreamStrength;
float _StreamSpeed;
samplerCUBE _EnvTex;
half _EnvStrength;
half _WrapSpeed;
half _WrapStrength; v2f vert(appdata v)
{
v2f o;
o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
o.uv0 = TRANSFORM_TEX(v.uv0, _MainTex);
o.uv1 = v.uv1; float3 worldN = UnityObjectToWorldNormal(v.normal);
o.RefDir = reflect(-WorldSpaceViewDir(v.vertex), worldN);
return o;
} fixed4 frag(v2f i) : SV_Target
{
// sample the texture
fixed4 col = tex2D(_MainTex, i.uv0);
//流光
float2 streamUV = i.uv1 + _Time.y * float2(_StreamSpeed, );//缩放时间控制速度
fixed4 steamCol = tex2D(_StreamTex, TRANSFORM_TEX(streamUV, _StreamTex));
float3 steam = _StreamColor * steamCol.r * _StreamStrength; //扭曲,是在主tex上呈现扭曲,所以用uv0,但扭曲所用的纹理是_SteamTex,所以采样_SteamTex
float2 wrapUV = i.uv0 + _Time.y * float2(-_WrapSpeed, _WrapSpeed);//缩放时间控制速度并扭曲uv
fixed4 wrapCol = tex2D(_StreamTex, TRANSFORM_TEX(wrapUV, _StreamTex));
float3 wrap = _StreamColor * wrapCol.r * _WrapStrength; //环境贴图反射
float3 reflection = texCUBE(_EnvTex, i.RefDir).rgb * _EnvStrength;
float3 o = col.rgb + steam + wrap + reflection;
return fixed4(o,);
}
ENDCG
}
}
}

效果:

总结:因为图片是我自己网上找的,所以流光和扭曲效果不好看,如果能针对性的做一些流光底图,会好看很多,结合扭曲就有流光溢彩之效了。

流光shader 和 流光+扭曲shader的更多相关文章

  1. UnityShader之Shader格式篇【Shader资料1】

    关于Shader,在Unity里面我们一般叫做ShaderLab,只要你的职业是与渲染搭边,Unity就与ShaderLab有着直接的关联,你都应该试着去学会它,其实我们在新手未有入门的时候,我们总是 ...

  2. cocos2d-js Shader系列4:Shader、GLProgram在jsb(native、手机)和html5之间的兼容问题。cocos2d-js框架各种坑。

    为了让jsb也能顺利跑起滤镜效果,在手机侧折腾了2天,因为每次在真机上运行总要耗那么半分钟,而且偶尔还遇到apk文件无法删除导致运行失败的情况. 这个调试起来,实在让人烦躁加沮丧. 还好,测试上百轮, ...

  3. Unity3D Shader 模型流光效果

    Shader "Custom/FlowColor" { Properties { _MainTex ("Base (RGB)", 2D) = "whi ...

  4. Cg入门14:Vertex Shader - 几何变换 —顶点扭曲

    mul (UNITY_MATRIX_MVP,upPos): 參数说明 由第一个參数UNITY_MATRIX_MVP 矩阵去影响第二个參数upPos向量(或者矩阵) Shader "Sbin/ ...

  5. 使用Amplify Shader Editor优化特效Shader

    ASE相对于Shader Forge生成的代码更加干净, 用于制作特效的再合适不过,以下是使用ASE优化一个SF制作特效的经过: ## 分析美术用SF制作的Shader 懒得装SF, 直接分析代码可知 ...

  6. UnityShader之Shader分类篇【Shader资料2】

    关于ShaderLab,从我个人的理解上来看应该是分为三种类型. 1.Fixed function shader 固定渲染管线Shader,基于用于高级Shader在老显卡无法显示时的Fallback ...

  7. 【Unity Shader】五、Shader纹理映射,及纹理的缩放和偏移

    将漫反射的颜色改为从纹理贴图中获取,逐像素计算. Shader "Custom/11-Texture" { // 纹理贴图,BlinnPhong光照模型 Properties{ / ...

  8. unity, unlit surface shader (texColor only surface shader)

    要实现双面透明无光照只有纹理色的surface shader. 错误的写法:(导致带有曝光) Shader "Custom/doubleFaceTranspTexColor" { ...

  9. PlayCanvas PBR材质shader代码分析(vertex shader)

    顶点shader主要对顶点坐标变换,将顶点坐标从local->world->view->clip 空间变换 local空间:模型物体坐标系 world空间:世界空间坐标系 view空 ...

随机推荐

  1. Kaggle-pandas(3)

    Summary-functions-and-maps 教程 在上一教程中,我们学习了如何从DataFrame或Series中选择相关数据. 正如我们在练习中所展示的,从我们的数据表示中提取正确的数据对 ...

  2. @RestController注解初步理解

    一.在Spring中@RestController的作用等同于@Controller + @ResponseBody. 所以想要理解@RestController注解就要先了解@Controller和 ...

  3. “随手记”开发记录day15

    今天完成了前两天没有完成的增加“修改”功能.对于已经添加的记账记录,长按可以进行修改和删除的操作.

  4. 我给这个Python库打101分!

    日志在开发过程中是一种被很多程序员 不重视 ,但是却 至关重要 的一项功能. 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案 ...

  5. 史上最简单操作!!!!!!!Window Server2012 修改远程桌面端口号

    Window Server2012 修改远程桌面端口号   Win + R 输入 regedit 打开注册表编辑器 在注册表编辑器中找到 PortNumber 双击 PortNumber,选择10进制 ...

  6. C#LeetCode刷题之#9-回文数(Palindrome Number)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3840 访问. 判断一个整数是否是回文数.回文数是指正序(从左向右 ...

  7. 检查型异常和非检查型异常——Java

    文章目录 检查型异常和非检查型异常--Java 检查型异常 非检查型异常 结语 检查型异常和非检查型异常--Java Java语言规范将派生于Error类或RuntimeExceprion类的所有异常 ...

  8. 《Windows程序设计(第5版 珍藏版)》配书光盘

    https://pan.baidu.com/s/1ro72qQja_xTbf-Ik8b06Ng

  9. 树上的等差数列 [树形dp]

    树上的等差数列 题目描述 给定一棵包含 \(N\) 个节点的无根树,节点编号 \(1\to N\) .其中每个节点都具有一个权值,第 \(i\) 个节点的权值是 \(A_i\) . 小 \(Hi\) ...

  10. Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.util.List com.catherine.forrealm.about_utils.RealmHelper.findAllStudent()' on a null object reference

    报错: 解决方法: private RealmHelper realm_search = new RealmHelper(); 进而发现在写RecyclerView时,遗漏如下代码: recy_sea ...