UnityShader常用算法笔记(颜色叠加混合、RGB-HSV-HSL的转换、重映射、UV序列帧动画采样等,持续更新中)
一.颜色叠加混合
1.Blend混合
// 正常,透明度混合 Normal
Blend SrcAlpha OneMinusSrcAlpha
//柔和叠加 Soft Additive
Blend OneMinusDstColor One
//正片叠底 相乘 Multiply
Blend DstColor Zero
//两倍叠加 相加 2x Multiply
Blend DstColor SrcColor
//变暗 Darken
BlendOp Min
Blend One One
//变亮 Lighten
BlendOp Max
Blend One One
//滤色 Screen
Blend OneMinusDstColor One //或者 Blend One OneMinusSrcColor
//线性减淡 Linear Dodge
Blend One One
2.Blend算法
//Darken变暗
float3 Darken(float3 Src, float3 Dst) {return saturate(min(Src.rgb, Dst.rgb));
}
//Multiply正片叠底
float3 Multiply(float3 Src, float3 Dst) {return saturate((Src.rgb*Dst.rgb));
}
//Color Burn颜色加深
float3 ColorBurn(float3 Src, float3 Dst) {return saturate((1.0-((1.0-Dst.rgb)/Src.rgb)));
}
//Linear Burn线性加深
float3 LinearBurn(float3 Src, float3 Dst) {return saturate((Src.rgb+Dst.rgb-1.0));
}
//Lighten变亮
float3 Lighten(float3 Src, float3 Dst) {return saturate(max(Src.rgb,Dst.rgb));
}
//Screen滤色
float3 Screen(float3 Src, float3 Dst) {return saturate((1.0-(1.0-Src.rgb)*(1.0-Dst.rgb)));
}
//Color Dodge颜色减淡
float3 ColorDodge(float3 Src, float3 Dst) {return saturate((Dst.rgb/(1.0-Src.rgb)));
}
//Linear Dodge线性减淡
float3 LinearDodge(float3 Src, float3 Dst) {return saturate((Src.rgb+Dst.rgb));
}
//Overlay叠加
float3 Overlay(float3 Src, float3 Dst) {return saturate(( Dst.rgb > 0.5 ? (1.0-(1.0-2.0*(Dst.rgb-0.5))*(1.0-Src.rgb)) : (2.0*Dst.rgb*Src.rgb) ));
}
//Hard Light强光
float3 HardLight(float3 Src, float3 Dst) {return saturate((Src.rgb > 0.5 ? (1.0-(1.0-2.0*(Src.rgb-0.5))*(1.0-Dst.rgb)) : (2.0*Src.rgb*Dst.rgb)) );
}
//Vivid Light亮光
float3 VividLight(float3 Src, float3 Dst) {return saturate(( Src.rgb > 0.5 ? (Dst.rgb/((1.0-Src.rgb)*2.0)) : (1.0-(((1.0-Dst.rgb)*0.5)/Src.rgb))));
}
//Linear Light线性光
float3 LinearLight(float3 Src, float3 Dst) {return saturate(( Src.rgb > 0.5 ? (Dst.rgb + 2.0*Src.rgb -1.0) : (Dst.rgb + 2.0*(Src.rgb-0.5))));
}
//Pin Light点光
float3 PinLight(float3 Src, float3 Dst) {return saturate(( Src.rgb > 0.5 ? max(Dst.rgb,2.0*(Src.rgb-0.5)) : min(Dst.rgb,2.0*Src.rgb) ));
}
//Hard Mix实色混合
float3 HardMix(float3 Src, float3 Dst) {return saturate(round( 0.5*(Src.rgb + Dst.rgb)));
}
//Difference差值
float3 Difference(float3 Src, float3 Dst) {return saturate(abs(Src.rgb-Dst.rgb));
}
//Exclusion排除
float3 Exclusion(float3 Src, float3 Dst) {return saturate((0.5 - 2.0*(Src.rgb-0.5)*(Dst.rgb-0.5)));
}
//Subtract减去
float3 Subtract(float3 Src, float3 Dst) {return saturate((Dst.rgb-Src.rgb));
}
//Divide划分
float3 Divide(float3 Src, float3 Dst) {return saturate((Dst.rgb/Src.rgb));
}
二、RGB、HSV/HSB、HSL的转换
// RGB转HSV/HSB
float3 RGBToHSV( float3 Color ){float4 p = lerp(float4(Color.bg, -1.0,2.0 / 3.0), float4(Color.gb, 0.0, -1.0 / 3.0), step(Color.b, Color.g));float4 q = lerp(float4(p.xyw, Color.r), float4(Color.r, p.yzx), step(p.x, Color.r));float d = q.x - min(q.w, q.y);float e = 1.0e-10;return float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x);
}// HSV/HSB转RGB
float3 HSVToRGB( float3 Color ){return lerp(float3(1,1,1),saturate(3.0*abs(1.0-2.0*frac(Color.r+float3(0.0,-1.0/3.0,1.0/3.0)))-1),Color.g)*Color.b;
}// HSV/HSB转HSL
float3 HSVToHSL( float3 HSV){float L = HSV.b - 0.5 * HSV.g;return float3(HSV.r,HSV.g * HSV.b / (1 - abs(2 * L -1)),L);
}// HSL转HSV/HSB
float3 HSLToHSV( float3 HSL){float B = HSL.b + 0.5 * HSL.g * (1 - abs(2 * HSL.b - 1));return float3(HSL.r,2 - 2 * HSL.b / B,B);
}
三、UV序列帧动画
//UV序列帧动画,wid--宽度数量,hei--高度数量,tile--采样第几个(排序从左下角到右下角),uv--UV
float2 UVTile(float wid,float hei,float tile,float2 uv)
{float UVTile_ty = floor(tile / wid);float UVTile_tx = tile - wid * UVTile_ty;float2 UVTile = (uv + float2(UVTile_tx, UVTile_ty)) / float2( wid, hei);return UVTile;
}
四、重映射
//重映射,把值Val,从[iMin,iMax]重映射到[oMin,oMax]
float Remap(float Val,float iMin,float iMax,float oMin,float oMax)
{return (oMin + ( (Val - iMin) * (oMax - oMin) ) / (iMax - iMin));
}
五、旋转UV
//旋转UV,uv--原来的UV centre--旋转中心点 rad--旋转弧度 返回最新的UV
float2 RotatorUV(float2 uv,float2 centre,float rad)
{float c = cos(rad);float s = sin(rad);return (mul(uv - centre,float2x2( c, -s, s, c)) + centre);
}
持续更新中…
相关文章:

UnityShader常用算法笔记(颜色叠加混合、RGB-HSV-HSL的转换、重映射、UV序列帧动画采样等,持续更新中)
一.颜色叠加混合 1.Blend混合 // 正常,透明度混合 Normal Blend SrcAlpha OneMinusSrcAlpha //柔和叠加 Soft Additive Blend OneMinusDstColor One //正片叠底 相乘 Multiply Blend DstColor Zero //两倍叠加 相加 2x Multiply Blend DstColor SrcColor //变暗…...

Vue3调用钉钉api,内嵌H5微应用单点登录对接
钉钉内嵌H5微应用单点登录对接 https://open.dingtalk.com/document/isvapp/obtain-the-userid-of-a-user-by-using-the-log-free 前端需要的代码 1、安装 dingtalk-jsapi npm install dingtalk-jsapi2、在所需页面引入 import * as dd from dingtalk-jsapi; // 引入钉钉a…...

UE5 局域网联机,寻找会话失败。
目录 参考资料: 尝试解决办法 1.1在【项目名.Build.cs】脚本中添加该行,添加后关闭编辑器,重新生成解决方案。编辑 2.检查是否在同一个C类子网 参考资料: 1.Cant find session in LAN - Programming & Scripting / Mul…...

Windows系统安装MongoDB并结合内网穿透实现公网访问本地数据库
文章目录 前言1. 安装数据库2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射2.3 测试随机公网地址远程连接 3. 配置固定TCP端口地址3.1 保留一个固定的公网TCP端口地址3.2 配置固定公网TCP端口地址3.3 测试固定地址公网远程访问 前言 MongoDB是一个基于分布式文件存储的数…...

Hadoop伪分布式配置--没有DataNode或NameNode
一、原因分析 重复格式化NameNode 二、解决方法 1、输入格式化NameNode命令,找到data和name存放位置 ./bin/hdfs namenode -format 2、删除data或name(没有哪个删哪个) sudo rm -rf data 3、重新格式化NameNode 4、重新启动即可。...

柚见第十期(后端队伍接口详细设计)
创建队伍 用户可以 创建 一个队伍,设置队伍的人数、队伍名称(标题)、描述、超时时间 P0 队长、剩余的人数 聊天? 公开 或 private 或加密 信息流中不展示已过期的队伍 请求参数是否为空?是否登录,未登录不…...

【李沐论文精读】GPT、GPT-2和GPT-3论文精读
论文: GPT:Improving Language Understanding by Generative Pre-Training GTP-2:Language Models are Unsupervised Multitask Learners GPT-3:Language Models are Few-Shot Learners 参考:GPT、GPT-2、GPT-3论文精读…...

新版Android Studio火烈鸟 在新建项目工程时 无法选java的语言模板解决方法
前言 最近下载最新版androidstudio时 发现不能勾选java语言模板了 如果快速点击下一步 新建项目 默认是kotlin语言模板 这可能和google主推kt语言有关 勾选1 如图所示 如果勾选 No Activity 这个模板 是可以选java语言模板的 但是里面没有默认的Activity 勾选2 和以前的用法…...
github(不是git啊)操作记录(踩坑)
专栏介绍与文章目录-CSDN博客 github是程序员绕不开的东西。 网站打不开? 向雇主或有关部门申请合法信道连接互联网。 明明账号密码都对却登录失败? 向雇主或有关部门申请合法信道连接互联网。 重置密码失败? 向雇主或有关部门申请合法信道…...

【SpringCloud微服务实战01】Eureka 注册中心
前言 在 Eureka 架构中,微服务角色有两类: EurekaServer :服务端,注册中心 记录服务信息 心跳监控 EurekaClient :客户端 Provider :服务提供者,例如案例中的 user-service …...
Python之函数进阶-柯里化
Python之函数进阶-柯里化 柯里化是一种将多参数函数转化为单参数高阶函数的技术。 具体来说,柯里化过程会将一个接受多个参数的函数,转换成一系列接受一个参数的函数,这些函数在内部组合起来,最终完成原函数的运算。 柯里化是一…...

Spring Cloud项目整合Sentinel及简单使用
说明:Sentinel是阿里巴巴开发的微服务治理中间件,可用于微服之间请求的流量管控、权限控制、熔断降级等场景。本文介绍如何在Spring Cloud项目中整合Sentinel,以及Sentinel的简单使用。 环境 首先搭建一个简单的微服务环境,有以…...
【话题】人工智能迷惑行为大赏
随着ChatGPT热度的攀升,越来越多的公司也相继推出了自己的AI大模型,如文心一言、通义千问等。各大应用也开始内置AI玩法,如抖音的AI特效~在使用过程中往往会遇到一些问题,让你不得不怀疑,这真的是人工智能吗…...

Jsp在Javaweb中扮演什么角色?
1.什么是Jsp JSP(Java Server Pages,Java 服务器页面)是一种动态网页技术,它允许在 HTML 页面中嵌入 Java 代码,并由 Web 服务器在请求页面时动态生成 HTML 页面。JSP 通常用于创建动态 Web 内容,如交互式表…...

部署docker仓库harbor
1、下载包 1、包已上传有两个harbor.v2.6.0.tar与harbor.tar 2、harbor.tar解压后会生成harbor目录,将harbor.v2.6.0.tar移动到harbor目录下。 3、执行harbor目录下的install.sh 4、执行完后修改配置文件 2、修改配置文件 vim /root/harbor/make/ harbor.yml.tmpl …...

Linux CentOS系统安装Spug并结合内网穿透实现远程访问本地运维平台
目录 前言 1. Docker安装Spug 2 . 本地访问测试 3. Linux 安装cpolar 4. 配置Spug公网访问地址 5. 公网远程访问Spug管理界面 6. 固定Spug公网地址 结语 作者简介: 懒大王敲代码,计算机专业应届生 今天给大家聊聊Linux CentOS系统安装Spug并结合…...

阿里云第一次面试记录
java多态? 多态表示一个对象具有多种的状态,具体表现为父类的引用指向子类的实例 Fu f Zi z(); 多态是同一个行为具有多个不同表现形式或形态的能力。 多态就是同一个接口,使用不同的实例而执行不同操作 特点: 对象类型和引用类型…...

AndroidStudio跑马灯实现
在activity_main.xml中编写如下代码: <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_h…...
mysql笔记:12. 数据备份与还原
文章目录 一、数据备份1. 备份单个数据库2. 备份多个数据库3. 备份所有数据库 二、数据还原1. mysql命令2. source命令 在操作数据库时,难免会发生一些意外情况造成数据丢失。为了确保数据的安全,需要对数据库中的数据进行备份,这样当遇到数据…...
react native使用TS实现路由
一、入口文件app.jsx的配置 入口文件最好还是要保留jsx import { NavigationContainer } from react-navigation/native; import { navigationRef } from "./src/views/RootNavigation";const App () > {return(<NavigationContainer ref{navigat…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...

高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...
规则与人性的天平——由高考迟到事件引发的思考
当那位身着校服的考生在考场关闭1分钟后狂奔而至,他涨红的脸上写满绝望。铁门内秒针划过的弧度,成为改变人生的残酷抛物线。家长声嘶力竭的哀求与考务人员机械的"这是规定",构成当代中国教育最尖锐的隐喻。 一、刚性规则的必要性 …...

goreplay
1.github地址 https://github.com/buger/goreplay 2.简单介绍 GoReplay 是一个开源的网络监控工具,可以记录用户的实时流量并将其用于镜像、负载测试、监控和详细分析。 3.出现背景 随着应用程序的增长,测试它所需的工作量也会呈指数级增长。GoRepl…...
验证redis数据结构
一、功能验证 1.验证redis的数据结构(如字符串、列表、哈希、集合、有序集合等)是否按照预期工作。 2、常见的数据结构验证方法: ①字符串(string) 测试基本操作 set、get、incr、decr 验证字符串的长度和内容是否正…...