Unity Shader - UI Sprite Shader之抠图+纯色

  1. 添加一个 _SolidColor 属性,用于指定纯色。

  2. 添加一个 _UseSolidColor 属性,用于控制是否启用纯色模式。

  3. 在片段着色器中,根据 _UseSolidColor 的值决定是否将图像替换为纯色。

以下是修改后的Shader代码:

Shader "Demo/SpriteShader"
{Properties{[PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {}_Color ("Alpha Color Key", Color) = (0,0,0,1)_Range("Range", Range(0, 1.01)) = 0.1_SolidColor("Solid Color", Color) = (1,1,1,1) // 新增:纯色属性_UseSolidColor("Use Solid Color", Float) = 0 // 新增:是否启用纯色模式[MaterialToggle] PixelSnap ("Pixel snap", Float) = 0}SubShader{Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" "PreviewType"="Plane""CanUseSpriteAtlas"="True"}// 关键修复:添加Stencil块以支持Mask组件Stencil{Ref 1Comp EqualPass KeepFail Keep}Pass{Cull OffLighting OffZWrite OffBlend SrcAlpha OneMinusSrcAlphaCGPROGRAM#pragma vertex vert#pragma fragment frag#pragma multi_compile _ PIXELSNAP_ONsampler2D _MainTex;float4 _Color;half _Range;float4 _SolidColor; // 新增:纯色属性float _UseSolidColor; // 新增:是否启用纯色模式struct appdata{float4 vertex : POSITION;float2 uv : TEXCOORD0;};struct v2f{float4 vertex : SV_POSITION;float2 uv : TEXCOORD0;};v2f vert(appdata v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex);o.uv = v.uv;#ifdef PIXELSNAP_ONo.vertex = UnityPixelSnap(o.vertex);#endifreturn o;}half4 frag(v2f IN) : SV_Target{half4 c = tex2D(_MainTex, IN.uv);// 计算颜色差值half3 diff = abs(c.rgb - _Color.rgb);half maxDiff = max(diff.r, max(diff.g, diff.b));// 使用clip函数直接丢弃像素,兼容AlphaTestclip(maxDiff - _Range);// 新增:纯色模式if (_UseSolidColor > 0.5){c.rgb = _SolidColor.rgb; // 替换为纯色c.a *= _SolidColor.a; // 保留原始Alpha值,与纯色的Alpha混合}return c;}ENDCG}}
}

新增功能说明

  1. _SolidColor 属性

    • 用于指定纯色的颜色值。

    • 在材质面板中可以调整颜色。

  2. _UseSolidColor 属性

    • 用于控制是否启用纯色模式。

    • 值为 1 时启用纯色模式,值为 0 时禁用。

  3. 纯色模式逻辑

    • 在片段着色器中,如果 _UseSolidColor > 0.5,则将像素颜色替换为 _SolidColor

    • 同时保留原始Alpha值,与 _SolidColor 的Alpha混合,确保透明效果正确。

使用示例

  1. 创建材质

    • 将Shader赋给一个材质。

    • 在材质面板中设置 _SolidColor 为你想要的纯色(例如红色 (1,0,0,1))。

    • 勾选 _UseSolidColor 启用纯色模式。

  2. 应用到RawImage

    • 将材质赋给 RawImage 组件。

    • 运行场景,观察图像是否被替换为纯色。

  3. 动态切换纯色模式

    • 可以通过脚本动态修改 _UseSolidColor 的值,实现纯色模式的开关:

Material material = rawImage.material;
material.SetFloat("_UseSolidColor", 1); // 启用纯色模式
material.SetFloat("_UseSolidColor", 0); // 禁用纯色模式

效果展示

  • 禁用纯色模式
    图像正常显示,抠图逻辑生效。

  • 启用纯色模式
    图像被替换为指定的纯色,同时保留抠图逻辑(透明区域仍然透明)。


注意事项

  1. Alpha混合

    • 如果 _SolidColor 的Alpha值小于 1,图像会与背景混合。

    • 如果需要完全不透明,可以将 _SolidColor 的Alpha值设为 1

  2. 性能优化

    • 如果不需要动态切换纯色模式,可以将 _UseSolidColor 设为材质常量,避免每帧上传。

  3. 兼容性

    • 该Shader兼容 Mask 组件,确保裁剪效果正常。

通过以上修改,你的Shader现在既能实现抠图功能,又能将图像处理为纯色,满足更多使用场景!

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

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

相关文章

图解模糊推理过程(超详细步骤)

我们前面已经讨论了三角形、梯形、高斯型、S型、Z型、Π型6种隶属函数,下一步进入模糊推理阶段。 有关六种隶属函数的特点在“Pi型隶属函数(Π-shaped Membership Function)的详细介绍及python示例”都有详细讲解:https://lzm07.b…

001-JMeter的安装与配置

1.前期准备 下载好JMeter : https://jmeter.apache.org/download_jmeter.cgi 下载好JDK : :Java Downloads | Oracle 中国 下载图中圈蓝的JMeter和JDK就行,让它边下载,我们边往下看 2.为什么要下载并安装JDK ? JMeter 是基于 Java 开发的工具&#…

英伟达有哪些支持AI绘画的 工程

英伟达在AI绘画领域布局广泛,其自研工具与第三方合作项目共同构建了完整的技术生态。以下是其核心支持AI绘画的工程及合作项目的详细介绍: 一、英伟达自研AI绘画工具 1. GauGAN系列 技术特点:基于生成对抗网络(GAN)&…

Netty源码—4.客户端接入流程二

大纲 1.关于Netty客户端连接接入问题整理 2.Reactor线程模型和服务端启动流程 3.Netty新连接接入的整体处理逻辑 4.新连接接入之检测新连接 5.新连接接入之创建NioSocketChannel 6.新连接接入之绑定NioEventLoop线程 7.新连接接入之注册Selector和注册读事件 8.注册Rea…

2025.3.17-2025.3.23学习周报

目录 摘要Abstract1 文献阅读1.1 动态图邻接矩阵1.2 总体框架1.2.1 GCAM1.2.2 输出块 1.3 实验分析 总结 摘要 在本周阅读的文献中,作者提出了一种名为TFM-GCAM的模型。TFM-GCAM模型的创新主要分为两部分,一部分是交通流量矩阵的设计,TFM-GC…

生活电子类常识——搭建openMauns工作流+搭建易犯错解析

前言 小白一句话生成一个网站?小白一句话生成一个游戏?小白一句话生成一个ppt?小白一句话生成一个视频? 可以 原理 总体的执行流程是 1,用户下达指令 2,大模型根据用户指令,分解指令任务为多个细分步骤…

深入解析 Uniswap:自动做市商模型的数学推导与智能合约架构

目录 1. 自动做市商(AMM)模型的数学推导1.1 恒定乘积公式推导1.2 价格影响与滑点 2. Uniswap 智能合约架构解析2.1 核心合约(Core)2.1.1 工厂合约(Factory)2.1.2 交易对合约(Pair) 2…

高频面试题(含笔试高频算法整理)基本总结回顾20

干货分享,感谢您的阅读! (暂存篇---后续会删除,完整版和持续更新见高频面试题基本总结回顾(含笔试高频算法整理)) 备注:引用请标注出处,同时存在的问题请在相关博客留言…

生成模型速通(Diffusion,VAE,GAN)

基本概念 参考视频https://www.bilibili.com/video/BV1re4y1m7gb/?spm_id_from333.337.search-card.all.click&vd_sourcef04f16dd6fd058b8328c67a3e064abd5 生成模型其实是主要是依赖概率分布,对输入特征的概率密度函数建模 隐空间(latent space)…

Android在kts中简单使用AIDL

Android在kts中简单使用AIDL AIDL相信做Android都有所了解,跨进程通信会经常使用,这里就不展开讲解原理跨进程通信的方式了,最近项目换成kts的方式,于是把aidl也换成了统一的方式,其中遇到了很多问题,这里…

学习本地部署DeepSeek的过程(基于ollama)

DeepSeek除了支持在线调用服务接口外,还支持本地部署后调用本地服务,这样的好处是不需要api key,且资源独占,还能训练个人知识库。本文学习并记录本地部署DeepSeek的过程。   参考文献3中列出了不同模型对于电脑硬件的要求&…

文献分享: ColXTR——将ColBERTv2的优化引入ColXTR

1. ColXTR \textbf{1. ColXTR} 1. ColXTR原理 1.1. ColBERTv2 \textbf{1.1. ColBERTv2} 1.1. ColBERTv2概述 1.1.1. \textbf{1.1.1. } 1.1.1. 训练优化 1️⃣难负样本生成 初筛:基于 BM-25 \text{BM-25} BM-25找到可能的负样本重排:使用 KL \text{KL} KL…

Altium Designer数模电学习笔记

模电 电容 **退耦:**利用通交阻直,将看似直流的信号中的交流成分滤除 (一般用在给MPU供电,尽量小一些,10nf~100nf~1uf以下) **滤波:**也可以理解为给电容充电,让电容在电平为低时…

从指令集鸿沟到硬件抽象:AI 如何重塑手机与电脑编程语言差异——PanLang 原型全栈设计方案与实验性探索1

AI 如何跨越指令集鸿沟?手机与电脑编程语言差异溯源与统一路径——PanLang 原型全栈设计方案与实验性探索1 文章目录 AI 如何跨越指令集鸿沟?手机与电脑编程语言差异溯源与统一路径——PanLang 原型全栈设计方案与实验性探索1前言一、手机与电脑编程语言…

python 实现一个简单的window 任务管理器

import tkinter as tk from tkinter import ttk import psutil# 运行此代码前,请确保已经安装了 psutil 库,可以使用 pip install psutil 进行安装。 # 由于获取进程信息可能会受到权限限制,某些进程的信息可能无法获取,代码中已经…

C之(15)cppcheck使用介绍

C之(15)cppcheck使用介绍 Author: Once Day Date: 2025年3月23日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 全系列文章可查看专栏: Linux实践记录_Once_day的博客-CS…

Ant Design Vue Select 选择器 全选 功能

Vue.js的组件库Ant Design Vue Select 选择器没有全选功能&#xff0c;如下图所示&#xff1a; 在项目中&#xff0c;我们自己实现了全选和清空功能&#xff0c;如下所示&#xff1a; 代码如下所示&#xff1a; <!--* 参数配置 - 风力发电 - 曲线图 * 猴王软件学院 - 大强 …

CaiT (Class-Attention in Image Transformers):深度图像Transformer的创新之路

CaiT (Class-Attention in Image Transformers)&#xff1a;深度图像Transformer的创新之路 近年来&#xff0c;Transformers 模型在自然语言处理领域的成功逐渐扩展到了计算机视觉领域&#xff0c;尤其是图像分类任务中&#xff0c;Vision Transformer (ViT) 的提出打破了卷积…

Qt之MVC架构MVD

什么是MVC架构&#xff1a; MVC模式&#xff08;Model–view–controller&#xff09;是软件工程中的一种软件架构模式&#xff0c;把软件系统分为三个基本部分&#xff1a;模型&#xff08;Model&#xff09;、视图&#xff08;View&#xff09;和控制器&#xff08;Controll…

数组,指针 易混题解析(二)

目录 一.基础 1. 2. 二.中等 1. 坑 2. 3.指针1到底加什么 三.偏难 1.&#xff08;小端 x86&#xff09; 2.通过数组指针进行偏移的时候怎么偏移 3. 大BOSS &#xff08;1&#xff09;**cpp &#xff08;2&#xff09;*-- * cpp 3 &#xff08;3&#xff09;*c…