Unity Shader 流光 边缘光

前言

Unity2021.3.23

一、实现原理

Time控制UV的变化,再采样一张流光贴图.即可实现流光效果。

二、效果及源码展示

1.流光效果

效果描述:
1.边缘光(菲尼尔),
2.从上到下扫描光.

效果图如下:

代码如下:

Shader "Unlit/ScanCode"
{Properties{_MainTex ("Texture", 2D) = "white" {}_RimMin("RimMin",Range(-1,1)) = 0.0_RimMax("RimMax",Range(0,2)) = 1.0_InnerColor("InnerColor",Color) = (0.0, 0.0, 0.0 ,0.0)_RimColor("Rim Color", Color) = (1,1,1,1)_RimIntensity("Rim Intensity", Float) = 1.0_FlowTilling("Flow Tilling",Vector) = (1,1,0,0)_FlowSpeed("Flow Speed", Vector)= (1,1,0,0)_FlowTex("Flow Tex", 2D) = "white"{}_FlowIntensity("Flow Intensity",Float) = 0.5_InnerAlpha("Inner Alpha",Range(0.0,1.0)) = 0.0}SubShader{//Tags { "RenderType"="Opaque" }Tags { "Queue"="Transparent" }LOD 100Pass{ZWrite offBlend SrcAlpha OneCGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"struct appdata{float4 vertex : POSITION;float2 texcoord : TEXCOORD0;float3 normal : NORMAL;};struct v2f{float2 uv : TEXCOORD0;float4 vertex : SV_POSITION;float3 pos_world :TEXCOORD1;float3 normal_world : TEXCOORD2;//轴点的世界空间坐标float3 pivot_world :TEXCOORD3;};sampler2D _MainTex;float4 _MainTex_ST;float _RimMin;float _RimMax;float4 _InnerColor;float4 _RimColor;float4 _RimIntensity;float4 _FlowTilling;float4 _FlowSpeed;sampler2D _FlowTex;float _FlowIntensity;float _InnerAlpha;v2f vert (appdata v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex);//float4(v.normal,0.0)如果是向量,后面补0.0float3 normal_world = mul(float4(v.normal,0.0), unity_WorldToObject);float3 pos_world = mul(unity_ObjectToWorld,v.vertex).xyz;o.normal_world = normalize(normal_world);o.pos_world = pos_world;//三维向量变成一个四维向量,后面补1.0,o.pivot_world = mul(unity_ObjectToWorld,float4(0.0, 0.0, 0.0, 1.0));o.uv = v.texcoord;            return o;}fixed4 frag (v2f i) : SV_Target{//1.边缘光half3 normal_world = normalize(i.normal_world);//视线方向的向量,先拿到世界空间上的摄像机的位置,然后归一化。//精度上,向量用half3就够了。片元阶段要非常注意性能half3 view_world = normalize(_WorldSpaceCameraPos.xyz -i.pos_world);//限制在0-1的范围内 half NdotV = saturate(dot(normal_world, view_world));half fresnel = 1.0 - NdotV;fresnel = smoothstep(_RimMin,_RimMax, fresnel);//自发光half emiss = tex2D(_MainTex, i.uv).r;emiss = pow(emiss, 5.0);half final_fresnel = saturate(fresnel + emiss);//设置颜色half3 final_rim_color = lerp(_InnerColor.xyz, _RimColor.xyz *_RimIntensity, final_fresnel);half final_rim_alpha = final_fresnel;//2.流光half2 uv_flow = (i.pos_world.xy - i.pivot_world.xy) * _FlowTilling.xy;         uv_flow =uv_flow + _Time.y * _FlowSpeed.xy;float4 flow_rgba = tex2D(_FlowTex, uv_flow) * _FlowIntensity;//整合float3 final_col = final_rim_color + flow_rgba.xyz;float final_alpha = saturate(final_rim_alpha + flow_rgba.a + _InnerAlpha);return float4(final_col,final_alpha);}ENDCG}}
}

(i.pos_world.xy - i.pivot_world.xy)
用于计算UV位置,达到从上到下的扫描效果.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/310419.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【分享】linux下安装sunshine串流配置进行远程办公

前排提示教程内容比较短,废话比较多,需要看教程的建议直接跳目录 目录 前言(原因) 选择远程连接软件 三种连接软件的优劣以及体验 sunshine支持显卡 教程 注意事项 显示器 如果为远程部署 前言(原因&#xff0…

Proxmox VE qm 方式恢复虚拟机

前言 使用qm 恢复Proxmox VE虚拟机,高效便捷。 登录Proxmox VE shell 执行恢复操作 假设备份好的文件在其它主机存储,我们可以下载到Proxmox VE本地目录下,如何执行虚拟化恢复操作--storage local-lvm(恢复后存储到的位置&…

Qt5 编译oracle数据库驱动

库文件 1、Qt源码目录:D:\Qt5\5.15.2\Src\qtbase\src\plugins\sqldrivers\oci 2、oracle客户端SDK: https://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html 下载各版本中的如下压缩包,一定要版本相同的 将两个压缩包…

阿里云Centos7下编译glibc

编译glibc 原来glibc版本 编译前需要的环境: CentOS7 gcc 8.3.0 gdb 8.3.0 make 4.0 binutils 2.39 (ld -v) python 3.6.8 其他看INSTALL, 但有些版本也不易太高 wget https://mirrors.aliyun.com/gnu/glibc/glibc-2.37.tar.gz tar -zxf glibc-2.37.tar.gz cd glibc-2.37/ …

使用 Tranformer 进行概率时间序列预测实战

使用 Transformers 进行概率时间序列预测实战 通常,经典方法针对数据集中的每个时间序列单独拟合。然而,当处理大量时间序列时,在所有可用时间序列上训练一个“全局”模型是有益的,这使模型能够从许多不同的来源学习潜在的表示。…

腾讯EdgeOne产品测评体验——开启安全防护,保障数据无忧

当今时代数字化经济蓬勃发展人们的生活逐渐便利,类似线上购物、线上娱乐、线上会议等数字化的服务如雨后春笋般在全国遍地生长,在人们享受这些服务的同时也面临着各式各样的挑战,如网络数据会不稳定、个人隐私容易暴露、资产信息会被攻击等。…

分类算法(数据挖掘)

目录 1. 逻辑回归(Logistic Regression) 2. 支持向量机(Support Vector Machine, SVM) 3. 决策树(Decision Tree) 4. 随机森林(Random Forest) 5. K近邻(K-Nearest …

C++矩阵库Armadillo出现warning solve() system is singular错误的解决

本文介绍使用C 语言的矩阵库Armadillo时,出现报错system is singular; attempting approx solution的解决方法。 在之前的文章中,我们介绍过Armadillo矩阵库在Visual Studio软件C环境中的配置方法(https://blog.csdn.net/zhebushibiaoshifu/a…

Leetcode - 128双周赛

目录 一,3110. 字符串的分数 二,3111. 覆盖所有点的最少矩形数目 三,3112. 访问消失节点的最少时间​编辑 写法一:朴素 Dijkstra(适用于稠密图,即边比较多的图) 写法二:堆优化 …

软考126-上午题-【软件工程】-测试方法

一、测试方法 在软件测试过程中,应该为定义软件测试模板,即将特定的测试方法和测试用例设计放在一系列的测试步骤中。 软件测试方法分为:静态测试和动态测试。 1-1、静态测试。 静态测试是指被测试程序不在机器上运行,而是采用…

js性能优化(五)

第五章开始啦~~~~~~~~~~~~~ 防抖和节流之前自己有学过一次,包括几种方式怎么实现,代码如何写花了两天有写过,这次算是更系统的一个复习加填补 十七、防抖与节流 为什么需要防抖和节流: 在一些高频率事件触发的场景下我们不希望…

【Redis深度解析】揭秘Cluster(集群):原理、机制与实战优化

Redis Cluster是Redis官方提供的分布式解决方案,通过数据分片与节点间通信机制,实现了水平扩展、高可用与数据容灾。本文将深入剖析Redis Cluster的工作原理、核心机制,并结合实战经验分享优化策略,为您打造坚实可靠的Redis分布式…

Leetcode二叉树刷题

给你一个二叉树的根节点 root , 检查它是否轴对称。 示例 1: 输入:root [1,2,2,3,4,4,3] 输出:true public boolean isSymmetric(TreeNode root) {if(rootnull)return true;return compare(root.left,root.right);}public boole…

浏览器渲染原理-解释回流重绘以及为什么transform效率高

浏览器是如何渲染页面 当浏览器的网络线程收到 HTML 文档后,会产生一个渲染任务,并将其传递给渲染主线程的消息队列。在事件循环机制的作用下,渲染主线程取出消息队列中的渲染任务,开启染流程。 整个渲染流程分为多个阶段&#xf…

家居网购项目(权限验证+事务管理)

文章目录 1.过滤器权限认证1.程序框架图2.web.xml3.编写AdminAuthorization4.编写MemberAuthorization5.细节6.结果展示1.未登录可以任意浏览商品2.点击添加购物车提示登录3.点击后台管理,提示管理员登录4.也做了其余资源的访问验证 2.事务管理1.思路分析2.重写JDBC…

git am XXX.patch 文件内容解析

git am XXX.patch 文件内容解析 打补丁的两种方式: 1.patch XXX.patch 2.git am XXX.patch 例如: diff --git a/drivers/crypto/se/ce.c b/drivers/crypto/se/ce.c index e6f68286d4ce6..de1bcb46fbe6b 100644 --- a/drivers/crypto/se/ce.cb/drive…

品牌百度百科词条创建多少钱?

百度百科作为国内最具权威和影响力的知识型平台,吸引了无数品牌和企业争相入驻。一个品牌的百度百科词条,不仅是对品牌形象的一种提升,更是增加品牌曝光度、提高品牌知名度的重要途径。品牌百度百科词条创建多少钱,这成为了许多企…

【vue】ref 和 reactive 对比

ref&#xff1a;存储单个数据&#xff0c;如数值&#xff0c;字符串reactive&#xff1a;存储复杂数据&#xff0c;如对象&#xff0c;数组 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"vie…

《QT实用小工具·二十六》运行时间记录

1、概述 源码放在文章末尾 运行时间记录&#xff0c;包含如下功能&#xff1a; 可以启动和停止服务&#xff0c;在需要的时候启动。 可以指定日志文件存放目录。 可以指定时间日志输出间隔。 可以单独追加一条记录到日志文件。 日志为文本格式&#xff0c;清晰明了。 软…

《前端面试题》- JS基础 - 伪数组

第一次听说伪数组这个概念&#xff0c;听到的时候还以为是说CSS的伪类呢&#xff0c;网上一查&#xff0c;这东西原来还是个很常见的家伙。 何为伪数组 伪数组有两个特点&#xff1a; 具有length属性&#xff0c;其他属性&#xff08;索引&#xff09;为非负整数但是却不具备…