【Shader\j简单\Unity】Flowmap与光栅立体卡片效果

2023-11-10

Flowmap与光栅立体卡片效果

前言

实际上是尝试复原ta101第五课的一个小demo,目前还没有开课,我也穷,既然大纲给出来了,如果有时间摸鱼那么就可以慢慢磨,前面一大半的章节都比较基础适合我这种菜鸟。前期咱缺的不是知识,是素材啊TAT。
本节主要接上一节的消隐效果。
链接: 上一节

FlowMap

做特效经常用到,连连看也有内置的节点。Ben佬在UE4后面几期也讲了
Flowmap大概就是这样的一张贴图,其实使用他的原理很简单,rg记录了uv坐标的偏移量,但是偏移量是有限的,因此每隔一段时间都要交替然后插值。
在这里插入图片描述
制作这种贴图也简单,由一套现成的工具,使用也非常简单,这里放出下载地址: FlowmapPainter

代码

这里用的urp管线进行实现

Shader "urp_basic/FaceFade"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
        _BaseColor("BaseColor", Color) = (1,1,1,1)
        _FadeRange("Fade Softness", Float) = 1
        [Header(FlowMap)]
        _Wavemap("wave Map", 2D) = " white" {}
        _Flowmap("Flow Map", 2D) = "white" {}
        _FlowStrength("Flow Strength", Float) = 1
        _FlowSpeed("Flow Speed", Float) = 1
    }
    SubShader
    {
        Tags {"RenderPipeline"="UniversalRenderPipeline"
            "RenderType"="Opaque" }
        LOD 100
        HLSLINCLUDE
        #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" 

        CBUFFER_START(UnityPerMaterial)
            float4 _MainTex_ST;
            half4 _BaseColor;
            float _FadeRange;
            float  _FlowStrength;
            float _FlowSpeed;
        CBUFFER_END

        TEXTURE2D (_MainTex);
        SAMPLER(sampler_MainTex);
        TEXTURE2D (_Wavemap);
        SAMPLER(sampler_Wavemap);
        TEXTURE2D(_Flowmap);
        SAMPLER(sampler_Flowmap);

        struct a2v
        {
            float4 vertex : POSITION;
            float4 normal : NORMAL;
            float2 uv : TEXCOORD0;
            float4 tangent : TANGENT;
        };
        struct v2f
        {
            float2 uv : TEXCOORD0;
            float4 vertex : SV_POSITION;
            float3 normalW : TEXCOORD1;
            // float3 forward : TEXCOORD2;
            float3 posW : TEXCOORD3;
            float3 tangentW : TEXCOORD4;
            float3 binormW : TEXCOORD5;
        };

        ENDHLSL

        Pass
        {
           HLSLPROGRAM
           #pragma vertex vert
           #pragma fragment frag

           real4 getFlowResult(float2 uv, float2 direction, Texture2D tex, SamplerState sampler_tex)
           {
                direction = (direction-0.5) *  _FlowStrength;
                float T = _Time.y * _FlowSpeed;
                float2 uv1 = direction * frac(T) + uv;
                float2 uv2 = direction * frac(T+0.5) + uv;
                real4 col1 = SAMPLE_TEXTURE2D(tex, sampler_tex, uv1);
                real4 col2 = SAMPLE_TEXTURE2D(tex, sampler_tex, uv2);
                float transition = frac(T) * 2.0 - 1.0; // 0,1->-1,1
                return lerp(col1, col2, abs(transition));
           }

           
           v2f vert(a2v i)
           {
                v2f o;
                o.vertex = TransformObjectToHClip(i.vertex.xyz);
                o.uv = TRANSFORM_TEX(i.uv, _MainTex);
                o.normalW = TransformObjectToWorldNormal(i.normal.xyz, true);
                // o.forward = normalize(mul( float3(0,0,1),(float3x3)GetWorldToViewMatrix()).xyz);
                o.posW = TransformObjectToWorld(i.vertex.xyz);
                o.tangentW = normalize(TransformObjectToWorldDir(i.tangent.xyz));
                o.binormW = normalize(cross(o.normalW.xyz, o.tangentW.xyz)
                                * i.tangent.w * unity_WorldTransformParams.w);
                return o;
           }

           real4 frag(v2f i) : SV_TARGET
           {
                half2 dir = SAMPLE_TEXTURE2D(_Flowmap, sampler_Flowmap, i.uv).rg;
                //real4 col = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.uv);
                real4 wave_col = getFlowResult( i.uv, dir, _Wavemap, sampler_Wavemap);
                real4 partten_col = getFlowResult( i.uv, dir, _MainTex, sampler_MainTex);
                //=====> Mask <=====//
                float3 ViewDirW = normalize(_WorldSpaceCameraPos.xyz - i.posW);
                float3 NormalW = i.normalW;
                float3 BinormW = i.binormW;
                float3 TangentW = i.tangentW;
                float3x3 TBN = float3x3(TangentW, BinormW, NormalW);
                float3 ViewDirT = normalize(mul(ViewDirW, TBN));
                float fade_mask =pow(max(ViewDirT.z,0),_FadeRange);

                real4 col = lerp( wave_col, partten_col, fade_mask);
                return col;
           }
           ENDHLSL
        }
    }
}

效果大概这样,微调一下更好:
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Shader\j简单\Unity】Flowmap与光栅立体卡片效果 的相关文章

  • FBX导入Unity中模型没有材质的处理

    一 3dMax导出FBX时的注意事项 导出时 确保maps文件存在 里面放着fbx用到的image 二 在Unity中的设置 1 文件拖入Unity的Assets文件夹中 2 查看模型的材质是否存在 如下所示 材质为None 此时拖入sce
  • UnityVR--组件3--Line Renderer--线性渲染

    目录 线性渲染组件简介 绘制线条Line Renderer组件介绍 绘制拖尾Trail Renderer组件介绍 应用1 使用Line Renderer绘制线段 应用1实现 使用系统工具或自定义工具绘制线段 应用2 Trail Render
  • Unity中实现倒计时的几种方式

    1 Time time using UnityEngine public class TimeTest MonoBehaviour public float secound 10 void Update Timing private flo
  • GooglePlay提审警告(com.google.android.gms:play-services-safetynet:17.0.0)

    1 Goole在今年6月份出的新政策 不在使用safetynet 而使用Play Integrity API 2 项目本身没有使用过safetynet 3 使用了firebase 查阅资料 解决方案如下 implementation pla
  • unity后台加密时间锁

    前言 在做一些项目的时候 有些不良甲方在给完项目后会有不给尾款的情况 之前都是加一些水印啥的 感觉不是很方便 第一不美观 第二如果甲方给完尾款后还得重新打包去水印 然后又做过一个本地的时间锁 等到时间 程序直接退出 但是感觉还是不方便 有时
  • unity: C#的Action Event Delegate的异同

    目录 一 Action 二 Event 三 Action和Event区别 四 Delegate 总结 Action Event Delegate的异同 前言 Action Event和Delegate都是C 语言中的重要概念 分别用于管理函
  • 【Unity】按Esc进入操作菜单

    本文章是基于如下视频的自我总结 https www youtube com watch v JivuXdrIHK0 步骤如下 1 在Canvas 界面添加一个Panel Panel中添加一个按钮 调整按钮的大小为合适大小 调整字体的大小为合
  • 【Unity步步升】监控与检测物体的各种方案,如:射线、碰撞、挂载等...

    在制作AR模型数值控制方案的时候遇到了检测的问题 学习过程受益匪浅 故今天为大家整理带来一篇监控与检测物体的参考方案集合 目录 一 射线检测 二 物体存在检测 三 碰撞检测 一 射线检测 单射线检测 首先完成搭建场景如下图1 1 我这里用到
  • Unity旋转以及万向锁问题

    我之前研读了一些关于unity旋转相关的博客 一直想抽个时间写个总结 但是由于实习太忙一直没有写 趁着今天请了假晚上有时间把这段时间一些学习心得写出来 Unity inspector面板中的Rotation 在unity中 想必大家最先接触
  • unity dots jobSystem 记录

    Looking for a way to get started writing safe multithreaded code Learn the principles behind our Job System and how it w
  • unity3d 自定义的图片无法放入source image中

    须将图片的texture type改为 sprite
  • 【原神游戏开发日志1】缘起

    原神游戏开发日志1 缘起 版权声明 本文为 优梦创客 原创文章 您可以自由转载 但必须加入完整的版权声明 文章内容不得删减 修改 演绎 相关学习资源见文末 大家好 最近看到原神在TGA上频频获奖 作为一个14年经验的游戏开发行业的老兵 我就
  • 【Unity】如何让Unity程序一打开就运行命令行命令

    背景 Unity程序有时依赖于某些服务去实现一些功能 此时可能需要类似打开程序就自动运行Windows命令行命令的功能 方法 using UnityEngine using System Diagnostics using System T
  • 【Unity】运行时创建曲线(贝塞尔的运用)

    Unity 运行时创建线 贝塞尔的运用 1 实现的目标 在运行状态下创建一条可以使用贝塞尔方法实时编辑的网格曲线 2 原理介绍 2 1 曲线的创建 unity建立网格曲线可以参考 Unity程序化网格体 的实现方法 主要分为顶点 三角面 U
  • Unity中URP下的指数雾

    文章目录 前言 一 指数雾 雾效因子 1 FOG EXP 2 FOG EXP2 二 MixFog 1 ComputeFogIntensity 雾效强度计算 2 lerp fogColor fragColor fogIntensity 雾效颜
  • Unity中URP下的指数雾

    文章目录 前言 一 指数雾 雾效因子 1 FOG EXP 2 FOG EXP2 二 MixFog 1 ComputeFogIntensity 雾效强度计算 2 lerp fogColor fragColor fogIntensity 雾效颜
  • VS2022 | 显示Unreal Engine日志

    VS2022 显示Unreal Engine日志 视图 gt 其他窗口 gt Unreal Engine日志 视图 gt 其他窗口 gt Unreal Engine日志
  • U3D游戏开发中摇杆的制作(UGUI版)

    在PC端模拟摇杆 实现玩家通过控制摇杆让玩家移动 以下是完整代码 using System Collections using System Collections Generic using UnityEngine using Unity
  • 游戏开发创建操作之玩家信息系统的建立

    游戏一般都需要玩家信息系统 那么我们应该如何搭建玩家信息系统 接下来我将展示一种简单的方法 完整代码如下 using System Collections using System Collections Generic using Uni
  • 游戏开发常见操作系列之敌人系统的开发一(U3D)

    在开发游戏的过程中 我们常常会出现一些敌人攻击我们玩家 并且实现掉血以及死亡的现象 敌人还会源源不断地生成 这是怎么制作的呢 接下来为大家提供方法 其中使用了NGUI 后续会更新其它方法 敬请期待 使用HUDText实现扣血时显示文本 直接

随机推荐

  • 11.16---遍历数组赋值给对象失败,const定义常量不能重新再赋值,render的参数

    1 遍历数组赋值给对象失败 取到的都是最后一项的值 let result item list forEach function value item a value a item b value b result pust item 结果得
  • 字符串合并并处理(C++实现)

    按照指定规则对输入的字符串进行处理 详细描述 将输入的两个字符串合并 对合并后的字符串进行排序 要求为 下标为奇数的字符和下标为偶数的字符分别从小到大排序 这里的下标意思是字符在字符串中的位置 对排序后的字符串进行操作 如果字符为 0 9
  • 关于结构体中最后的 char [0]

    问题 结构体中最后定义一个类似 char p 0 这样的成员 有何意义 回复1 这是个广泛使用的常见技巧 常用来构成缓冲区 比起指针 用空数组有这样的优势 1 不需要初始化 数组名直接就是所在的偏移 2 不占任何空间 指针需要占用int长度
  • vue中实现div可编辑,并插入指定元素,样式

    前言 vue中实现一个既可以编辑内容 有可以动态编辑内容插入一个带有样式的内容 改变默认内容后 这个样式消失的效果 这里来整理下调研与解决实现问题之路 实现最终效果 图2为默认内容 1 可以光标点击任意地方 然后点击按钮 插入带有span的
  • 删除流氓软件的方法

    电脑在网上下载一些东西时经常被捆绑下载很多流氓软件 导致电脑是不是跳出一些弹窗广告 烦不胜烦 经过努力奋斗终于把流氓软件都删除了 下面介绍几个删除流氓软件的经验 1 如果软件不是安装在C盘 可以使用bitloacker给D盘加密 这样开机就
  • CAS单点登录-自定义认证登录策略(五)

    在上一节中我们使用了CAS的提供的JDBC 方式的登录认证 基本上能够满足我们多种需求的认证 但是如果CAS框架提供的方案还是不能满足我们的需要 比如我们不仅需要用户名和密码 还要验证其他信息 比如邮箱 手机号 但是邮箱 手机信息在另一个数
  • 毕业设计 - 基于stm32的WiFi监控小车

    文章目录 1 背景 2 系统设计方案 2 1 实现功能 2 1 1 硬件部分 2 1 2 软件部分 2 1 3 WIFI通信功能 2 2 系统架构 2 2 1 WiFi 通信 2 2 2 电机驱动 2 2 3 摄像头 2 2 4 舵机 2
  • 淘宝商品详情

    contact link 待签名参数 uid ttid 231200 taobao android 9 16 0 data 7B 22itemNumId 22 3A 22638728868726 22 7D lng 23 366706 ut
  • 【报错记录】解决CentOS免密失败的问题,以及解决免密问题的排查流程

    前言 本文相当于对之前的文章进行的补充 原创 三台CentOS7非root用户间实现相互间的免密登录 DCTANT的博客 CSDN博客 现场遇到一台旧服务器与其他服务器免密失败的问题 明明 ssh目录中authorized keys中的公钥
  • 图片等比例缩放,javademo

    图片等比缩小 放大需要将图片适配到现有的目标中 思想就是 下面代码 int w Integer parseInt width 原始宽 int h Integer parseInt height 原始高 int w1 450 固定宽 int
  • Ubuntu下如何创建文本文件

    找到要创建文件的位置 右键单机打开终端 输入sudo gedit 文件名字 就可以创建成功啦
  • STM32 USART—串口通信

    目录 一 串口通信协议物理层电平标准 1 RS232标准 2 USB转串口通讯 常用 3 原生的串口到串口 二 串口通信协议软件层 三 串口功能框图 1 引脚 2 数据寄存器USART DR 3 字符帧组成介绍 4 发送与接收数据 5 串口
  • python加速之numpy与numba

    最近在看深度学习加速计算时 发现了numba加速库 声称能加速python运行速速度高达百倍 首先是测速的工具 常规的测速工具是time time 但是在internet上看到有人说 这个不准确 python有个强大的代码测速库 timei
  • linux top进程状态D

    什么是D状态 运行在KVM虚拟机里的一些进程突然出了问题 这些出了问题的进程无法用kill杀掉 使用ps可以看到这些进程处于D状态 build kbuild john ps a o pid ppid stat command PID PPI
  • 浅谈Redis网络模型

    1 Redis介绍 Redis 是C语言开发的一个开源高性能键值对的内存数据库 也是一种NoSQL not only sql 非关系型数据库 的数据库 可以用来做数据库 缓存 消息中间件等场景 在目前的技术选型中 Redis常常被用来作为数
  • python使用xpath批量爬取图片

    import requests from lxml import etree import os if name main 创建文件夹存放照片 if not os path exists day07图片解析 素材 os mkdir day0
  • C语言输出中文

    include
  • 【CSS模块化之路3】 使用

    CSS是一门几十分钟就能入门 但是却需要很长的时间才能掌握好的语言 它有着它自身的一些复杂性与局限性 其中非常重要的一点就是 本身不具备真正的模块化能力 系列文章链接 CSS模块化之路1 使用BEM与命名空间来规范CSS CSS模块化之路2
  • 如何对云服务进行安装措施

    云服务器系统安全建议 1 修改云服务器系统默认远程登录端口 Linux远程端口修改参考文档 https cloud tencent com developer article 1124500 2 腾讯云平台有安全组功能 里面您只需要放行业务
  • 【Shader\j简单\Unity】Flowmap与光栅立体卡片效果

    Flowmap与光栅立体卡片效果 前言 FlowMap 代码 前言 实际上是尝试复原ta101第五课的一个小demo 目前还没有开课 我也穷 既然大纲给出来了 如果有时间摸鱼那么就可以慢慢磨 前面一大半的章节都比较基础适合我这种菜鸟 前期咱