Unity ShaderLab --- 实现局部透明

embedded/2024/11/25 8:13:17/

首先准备一张局部透明度的贴图

实现局部透明原理:

采样准备好的贴图,在片元着色中,将返回颜色的a值乘上采样后的a值

代码:

     fixed4 frag (v2f i) : SV_Target{fixed4 col = i.color;col.a *= tex2D(_MainTex, i.texcoord).a;return col;}

实现效果:

完整代码:

Shader "CustomMask"
{Properties {_MainTex ("Texture", 2D) = "white" {}_Color ("Fog Color", Color) = (1,1,1,1)}SubShader {Tags {"Queue"="Transparent""IgnoreProjector"="True""RenderType"="Transparent""PreviewType"="Plane"}Blend SrcAlpha OneMinusSrcAlphaPass {CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"struct appdata_t {float4 vertex : POSITION;fixed4 color : COLOR;float2 texcoord : TEXCOORD0;};struct v2f {float4 vertex : SV_POSITION;fixed4 color : COLOR;float2 texcoord : TEXCOORD0;};sampler2D _MainTex;uniform float4 _MainTex_ST;uniform fixed4 _Color;v2f vert (appdata_t v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex);o.color = v.color * _Color;o.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex);return o;}fixed4 frag (v2f i) : SV_Target{fixed4 col = i.color;col.a *= tex2D(_MainTex, i.texcoord).a;return col;}ENDCG }}
}


http://www.ppmy.cn/embedded/140336.html

相关文章

=computed() =ref()

computed() ref() 在 Vue 中,computed() 和 ref() 是 Vue 3 组合式 API 的核心工具,它们分别用于 计算属性 和 响应式数据。以下是它们的区别和用法: 1. ref() 作用 用于创建响应式的单一数据。可以是基本类型(如字符串、数字、…

RocketMQ 消息示例-延迟消息

生产者在确定一定时间间隔之后,这个消息才会被发送。其实也就是不会马上将消息发送出去,希望过一段时间以后再发送出去。 生产者在发送message的时候设置了一个延迟时间的等级,这里的3描述的是时间延迟的等级。这个消息会被延迟10s的时间 mes…

LeetCode-632. Smallest Range Covering Elements from K Lists [C++][Java]

目录 题目描述 解题思路 【C】 【Java】 LeetCode-632. Smallest Range Covering Elements from K Listshttps://leetcode.com/problems/smallest-range-covering-elements-from-k-lists/description/ 题目描述 You have k lists of sorted integers in non-decreasing o…

Vscode进行Java开发环境搭建

Vscode进行Java开发环境搭建 搭建Java开发环境(Windows)1.Jdk安装2.VsCode安装3.Java插件4.安装 Spring 插件5.安装 Mybatis 插件5.安装Maven环境6.Jrebel插件7.IntelliJ IDEA Keybindings8. 收尾 VS Code(Visual Studio Code)是由微软开发的一款免费、开…

STM32完全学习——使用标准库完成PWM输出

一、TIM2初始化 我这里使用的是STM32F407ZGT6这个芯片,我这里使用的是定时器TIM2来完成PWM输出,由于这里没有使用中断,因此不需要初始化NVIC,下面先来进行定时器的相关初始化 TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;R…

C#的数据类型总结:decimal ,double,float的区别

在 C# 中,decimal、double 和 float 都是用于表示数值类型的关键字,但它们在精度、范围和用途上有所不同。以下是它们的主要区别和适用场景的总结。 目录 1. decimal 2. double 3. float 主要比较 适用场景总结 注意点 1. decimal 类型大小: 16 字…

解释 Python 中的可变与不可变数据类型?

在 Python 中,数据类型分为可变(mutable)和不可变(immutable)两种。 理解这两种类型的区别对于编写高效、可靠的代码至关重要。 作为面试官,我会详细解释这两者的区别,并提供一些实际开发中的…

一文读懂 ESLint配置

你好,我是Qiuner. 为帮助别人少走弯路和记录自己编程学习过程而写博客 这是我的 github https://github.com/Qiuner ⭐️ ​ gitee https://gitee.com/Qiuner 🌹 如果本篇文章帮到了你 不妨点个赞吧~ 我会很高兴的 😄 (^ ~ ^) 想看更多 那就点个关注吧 我…