【Unity3D渲染】Unity3d实现Photoshop的各种图层混合模式

VIP【Unity3D渲染】Unity3d实现Photoshop的各种图层混合模式
Adobe Photoshop图层混合原理、Unity ShaderLab图层混合实现
开通可读全文 ·2.4k 人阅读
最低0.47元/天 解锁文章

一、概述

众所周知,我们平时玩手机游戏接触到的游戏UI的资源图,大多数都是设计师童鞋使用Photoshop绘制出来的。那么,作为程序员,就可能时不时遇到这样的需求:

a、游戏里的一些图片元素,在不同的主题里,呈现不同的色彩,但是又不是简单的调色。美术童鞋为了达到美观的效果,会使用Photoshop里面的图层混合模式,将颜色以某种混合模式作用到一张灰白底图。这样就不需要每次都给程序员重新绘制图片,不同的地方只需要给一个色号,用上一样的混合模式,就能复刻一样的效果了。
b、游戏里的一些UI模拟静态光效等,在Photoshop里,设计师是拿背景图+花纹图样混合而来,这样的话,程序员就需要在代码里实现这样的图层混合效果。

那么,这种时候,虽然咱程序员并不是设计师,也需要了解一下Photoshop里面的图层混合模式了。

二、常见的混合模式

首先可以看看都有哪些图层混合模式,以及一些简单的描述:
(以下资料由AI大模型总结,如有错误请轻喷哈):

英文名称 中文名称 描述
Normal 正常 在“运算”或“应用图像”时使用该模式完全不加混合地将源图层或通道复制到目标图层,通道,也就是用源完全替代目标。
Dissolve 溶解 把溶解的不透明度作为来自混合色的像素百分比并按此比例把混合色放于基色之上。
Multiply 正片叠底 任何原来每张图像上黑的部分在结果中为黑,任何在原来每张图像上白的或是被清除的部分会让你透过它看到另外一幅图像上相同位置的部分。
Screen 屏幕 它是一个和正片叠底相反的操作过程,在所有的模式里也都有。它所展现的效果是:在图像中白色的部分在结果中也是白色,在图像中黑色的部分在结果中显示出另一幅图像相同位置的部分。
Soft Light 柔光 在这模式下,原始图像与混合色彩,图案或图像进行混合,并依据混合图像决定使原始图像变亮还是变暗,混合图像亮则更亮,暗则更暗。
Hard Light 强光 这没什么好讲的, 在这模式下结果图像是从混合色彩,图案或图像中取的其亮度值。
Overlay 叠加 它是正片叠底(Multipy)和屏幕(Screen)模式的合并。效果:原始图像中黑暗的区域被叠底而光亮的区域就被屏幕化,最亮的部分和阴影部分被一定程度的保存下来。
Darken 暗化 将两个图像中更暗的那个被选来作为结果。
Lighten 亮化 是取两个像素中更亮的作为结果。 上述模式在合并几个蒙版以创建新的蒙版时最有用。
Difference 差值 比较两个图像并给出一个蒙版,这个蒙版在两幅图像完全相同的区域为黑色,并随两幅图像相差越大它越趋向于白色。
Exclusion 排除 与差值模式差不了多少,很相似,除了有强度上的差别外。(注:一个用黑色所作的排除将不会改变任何原始图像)
Add 相加 将原始图像及混合图像的对应像素取出来并加在一起。
Subtract 相减 将原始图像与混合图像相对应的像素提取出来并将它们相减。
Hue 色相 把这些模式放在一起,是因为上述的混合模式可以通过混合色彩,图案或是图像的色相,饱和度,色彩,亮度作为原始图像的色相,饱和度,色彩以及亮度来影响原始图像。
Saturation 饱和度 把这些模式放在一起,是因为上述的混合模式可以通过混合色彩,图案或是图像的色相,饱和度,色彩,亮度作为原始图像的色相,饱和度,色彩以及亮度来影响原始图像。
Color 色彩 把这些模式放在一起,是因为上述的混合模式可以通过混合色彩,图案或是图像的色相,饱和度,色彩,亮度作为原始图像的色相,饱和度,色彩以及亮度来影响原始图像。
Luminosity 亮度 把这些模式放在一起,是因为上述的混合模式可以通过混合色彩,图案或是图像的色相,饱和度,色彩,亮度作为原始图像的色相,饱和度,色彩以及亮度来影响原始图像。

三、实现思路

我们可以实现自定义的shader来实现上面的这些效果。

但是在实现shader之前,我们需要准确的知道这些混合模式对应的实现原理,实质上就是需要知道当我们有两个颜色值的时候,用什么样的数学公式能将他们正确的混合成对应的效果。

这里有一份Adobe早期官方对Blend Mode的说明性pdf文件,里面详细记录了几个常见的混合模式的原理和计算公式,大家取需:

Adobe Blend Modes.pdf

以正片叠底为例,其英文名字Multiply就是乘法的意思,我们可以看到,正片叠底的计算公式为:
在这里插入图片描述
实际shader实现就是一个采样到的颜色相乘的结果。

四、开源项目

这里推荐Github上面一个开源项目:
JL-s-Unity-Blend-Modes

这个开源项目给出了常见的图层混合模式的实现代码。

这个仓库主要是以Grab屏幕像素,然后叠加上一张图片去做的屏幕特效为例,但是我们可以很轻松的将其改造为上文我们提到的用一个颜色和灰白图混合得到效果,也可以轻松的改造成两张图片采样去混合。

这个仓库给我们提供了常见混合模式的shader公式实现,比如一些常见的计算工具函数

#ifndef PHOTOSHOP_BLENDMODES_INCLUDED
#define PHOTOSHOP_BLENDMODES_INCLUDED
 
//
// Ported from https://www.shadertoy.com/view/XdS3RW
//
// Original License:
//
// Creative Commons CC0 1.0 Universal (CC-0) 
//
// 25 of the layer blending modes from Photoshop.
//
// The ones I couldn't figure out are from Nvidia's advanced blend equations extension spec -
// http://www.opengl.org/registry/specs/NV/blend_equation_advanced.txt
// 
// ~bj.2013
//
 
// Helpers
 
const fixed3 l = fixed3(0.3, 0.59, 0.11);
 
/** @private */
float pinLight(float s, float d)
{
   
   
    return (2.0*s - 1.0 > d) ? 2.0*s - 1.0 : (s < 0.5 * d) ? 2.0*s : d;
}
 
/** @private */
float vividLight(float s, float d)
{
   
   
    return (s < 0.5) ? 1.0 - (1.0 - d) / (2.0 * s) : d / (2.0 * (1.0 - s));
}
 
/** @private */
float hardLight(float s, float d)
{
   
   
    return (s < 0.5) ? 2.0*s*d : 1.0 - 2.0*(1.0 - s)*(1.0 - d);
}
 
/** @private */
float softLight(float s, float d)
{
   
   
    return (s < 0.5) ? d - (1.0 - 2.0*s)*d*(1.0 - d) 
                : (d < 0.25) ? d + (2.0*s - 1.0)*d*((16.0*d - 12.0)*d + 3.0) 
                : d + (2.0*s - 1.0) * (sqrt(d
VIP 图像算法 -- 最全混合图层算法(附源码) 最全图层混合算法,附带源码和demo,希望大家喜欢。 开通可读全文·1.1w 阅读·5 点赞·26 收藏 阅读全文

相关推荐

Unity复刻Photoshop图层混合模式:27种GPU Shader实现指南

图层混合模式是数字图像处理的基础概念,本质为像素级色彩数学运算协议,广泛应用于UI动效、AR叠加、PBR材质融合等场景。其核心原理涉及sRGB与Linear色彩空间转换、Alpha预乘一致性、Gamma校正等关键渲染管线适配问题。技术价值在于打通设计工具(如Photoshop)与实时引擎(如Unity3D)之间的视觉语义鸿沟,支撑电商预览、工业设计评审、教育AR等跨工具链协作需求。本文聚焦Photoshop标准27种混合模式在Unity中的Shader级还原,涵盖乘法系、反乘法系、差值系、叠加系等分类实现策

weixin_32570803的博客 236

Unity多相机渲染实现热成像效果:从原理到工程实践

在计算机图形学中,多相机渲染是一种将场景信息分层采集与合成的核心技术,它通过多个相机从同一视角渲染不同数据层,实现复杂视觉效果的解耦与高效管理。这一技术原理在游戏开发、工业仿真和军事模拟等领域具有重要价值,能够将物理属性(如温度、材质ID)与视觉表现分离处理。基于Unity引擎的多相机方案,开发者可以构建灵活的可视化系统,例如将温度数据通过专用Shader编码为灰度信息层,再与主场景画面实时合成,最终生成逼真的热成像效果。这种方案不仅支持动态温度模拟和高效性能优化,还能无缝适配URP/HDRP现代渲染管线,

weixin_30788619的博客 367

服务器被攻击植入挖矿病毒,CPU占用高问题排查处理(.systemd-service.sh)

客户服务器遭攻击,部署的应用服务经常性被停止,服务器CPU占用居高不下,top查看如下: 可以看到第一个bash任务,占用cpu近400%,非正常的应用程序和脚本任务,多半是被植入了木马信息。 查看该进程的符号连接,发现已经是被删除的状态 /usr/bin/-bash (deleted),无法查看其启动程序的信息 查看定时任务:cat /etc/crontab,发现都是正常的应用程序定时脚本 又用 crontab -l 查看了一下,发现了异常定时任务如下,同top里的异常任务一致...

gottst0113的博客 2113

LwIP在国产MCU的落地实践:从协议栈优化到网络稳定性实战

本文详细介绍了LwIP协议栈在国产GD32F407 MCU上的移植与优化实践,涵盖硬件平台选择、驱动适配、协议栈调优和网络稳定性提升策略。通过内存管理优化、实时操作系统集成和性能测试,为工业物联网应用提供高可靠性网络通信解决方案,显著提升数据传输效率和系统稳定性。

m2n3b4v5c6的博客 263

C-08-实战:搭建一个AI客服机器人(接入微信企微)

客服是一人公司最大的时间杀手。本文教你搭建一个AI客服机器人,能自动回答80%的常见问题,只把复杂问题转给人工。含微信公众号和企业微信接入完整代码。

Johnny2004的专栏 77

基于Python实现身份证信息识别

身份证是一种重要的证件,包含了个人的基本信息,如姓名、性别、出生日期、住址等。在实际应用中,有时需要对身份证进行自动化的识别,以提高工作效率和准确性。本文将介绍如何使用Python实现身份证信息的识别,通过图像预处理、OCR技术和解析算法,实现对身份证号码和其他信息的提取和解析。

商务合作 / 项目定制 / 学习交流。个人vx:lovely_wml 1万+

用Virtuoso和Abstract完成gds2lef

需要用到的工具有virtuoso和abstract。 数模混合的项目通常需要模拟完成模块设计,把接去数字的pin打上label(text),数字的floorplan才能正式开始。 如果只需要简单的数字PR boundary和pin点位置,那么只使用virtuoso就够了,还想把模拟版图都转成lef就要用到abstract工具。 1.PR boundary+pin 1)在virtuoso中打开layout a) Gui操作: Create->P&R Objects->

m0_61544122的博客 8715

Istio ICA考试之路---2-2

找到dr部分,这部分可以在mirroring里找也可以和题2-1一样在Traffic Management的dr里复制,内容都一样。此题之后都是在cluster-2上操作,所以就不需要再切换了.之后的几题2.1节就忽略掉了。可以看到,80%的流量被镜像到了dev上,实际考试这步可以忽略。看到ex-ip是192.168.126.220。获取gw,把gateways加入到vs配置中。获取istio-ingress的ex-ip。就获得了这样一个模板文件。查看2个pod的日志。

Q先生 848

VS Code下载安装与使用教程

VSCode下载安装与使用教程

weixin_46713695的博客 4万+

【红外技术】DDE算法:HE在红外图像可视化上的应用(附源码)

并且数据一般是以 8 的整数倍的位宽在电子系统中应用,因此大多数的显示器的显示位宽为 8bit,共 256 个灰阶。为了使红外图像可视化,因此需要一种“数据压缩”技术,还需要既可能的不丢失原始图像信息。HE后的图像直方图分布比较均匀离散,图像对比度好。但是HE算法只是适用某些图像,它是将灰度集中区域进行拉伸得到,也会放大该集中区域的噪声,它是一种“不公平”的映射。以下是红外细节增强算法的演示,很明显右边的图像,展现了更多的图像细节,对于小目标的观测非常友好。文章已于2019-12-02修改。

sunwindl91181的博客 905

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

上一篇: 【Unity3D杂谈】Unity3D iOS包支持多图标
下一篇: 【GitHub Copilot】JetBrains使用GitHub Copilot

双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —
留待舞人归
博客等级 码龄12年 1775粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

留待舞人归

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值