8.2透明度混合-关闭写入
//透明度混合
//使用当前偏移的透明度作为混合因子,与已经存储在绿色缓冲中的颜色进行混合。得到颜色。
//使用混合命令Blend
//可以得到真正的半透明效果
//关闭深度写入会造成错误排序的情况
//本列只计算环境光和漫反射
Shader "Unity shader book/Chapter 8/AlphaBlend" {
Properties {
_Color("Color Tint",Color)=(1,1,1,1)
_MainTex("Main Tex",2D) = "white"{}
_AlphaScale("Alpha Scale",Range(0,1))=1//控制透明度
}
SubShader {
Tags{"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}//透明度混合队列Transparent 设置shader不受投影器projector影响
Pass{
Tags{"LightMode"="ForwardBase"}
ZWrite Off//关闭深度写入
Blend SrcAlpha OneMinusSrcAlpha//开启混合模式 将源颜色的混合因子设为SrcAlpha,把目标颜色(已经存在颜色缓冲中)的因子设置OneMinusSrcAlpha,得到半透明效果
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "Lighting.cginc"
//定义变量
fixed3 _Color;
sampler2D _MainTex;
float4 _MainTex_ST;
fixed _AlphaScale;
//定义顶点着色器的输入和输出结构体
struct a2v {
float4 vertex:POSITION;
float3 normal:NORMAL;
float4 texcoord:TEXCOORD0;
};
struct v2f {
float4 pos:SV_POSITION;
float3 worldNormal:TECOORD0;
float3 worldLightDir:TEXCOORD1;
float2 uv:TEXCOORD2;
};
v2f vert(a2v v) {
v2f o;
o.pos = mul(UNITY_MATRIX_MVP,v.vertex);
o.worldNormal = normalize(UnityObjectToWorldNormal(v.normal));
o.worldLightDir = normalize(UnityWorldSpaceLightDir(v.vertex));
o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);//将模型顶点的uv和tiling,offset两个变量进行运算。计算出时间显示用的定点uv
return o;
}
fixed4 frag(v2f i) :SV_Target
{
float3 worldNormal = normalize(i.worldNormal);
float3 worldLightDir = normalize(i.worldLightDir);
fixed4 texColor = tex2D(_MainTex,i.uv);
fixed3 albedo = texColor.rgb*_Color.rgb;
fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz * albedo;
fixed3 diffuse = _LightColor0.rgb*albedo*max(0,dot(worldNormal, worldLightDir));
return fixed4(diffuse + ambient, texColor.a * _AlphaScale);
}
ENDCG
}
}
FallBack off
}
8.2透明度混合-关闭写入相关推荐
- 【Unity Shader】实现透明度测试和透明度混合
本篇开始将进行<入门精要>初级篇最后一部分的学习,完成透明效果的学习. 1 Unity中实现透明效果的方法 一个像素的RGBA参数中的最后一项A指的就是透明度Alpha.在之前的实践中,一 ...
- unity shader学习---透明度测试,透明度混合
unity实现透明效果 效果图 理论 Alpha Test Alpha Blend 改进 开启深度写入的半透明效果 双面渲染的透明效果 代码部分 效果图 Alpha Test Alpha Test W ...
- unity 半透明混合问题_Unity Shader 透明度混合的双面渲染(十八)
效果: 双面渲染的透明度混合的物体.png 原图: transparent_texture.png Shader代码: Shader中2个Pass代码一样,一个只渲染背面,一个只渲染正面 // 透明度 ...
- Unity_Shader学习笔记_02_透明度测试,透明度混合,半透明.shader入门精要
关于透明度测试,主要是通过clip函数来实现裁剪功能 函数:void clip(float4 x);void clip(float3 x);void clip(float2 x);void clip( ...
- unity物体设置透明度_URP自学笔记5. 透明度混合与透明度测试
1.概述 本节中我们回顾一下两种透明方法,透明度混合与透明度测试.透明度混合用于实现半透明,透明度测试则用于实现消融效果之类"消失"效果. 2.透明度混合 透明度混合是一种混合方式 ...
- RGBA alpha 透明度混合算法实现和测试
目录 1.算法叙述 1.1.透明度混合算法1 1.2.AlphaBlend算法介绍 1.3.简易Alpha混合算法 2.算法实现代码和测试 2.1.透明度混合算法1实现代码 2.1.AlphaBlen ...
- 图片正常模式混合(透明度混合)公式
一.描述 所有内容摘自维基 在处理图象时可能需要手撸图片混合的代码,此时混合公式就十分重要.而正常混合(Normal Blending)模式是最常用的一种格式(比如PS的默认图层混合模式).想手动实现 ...
- unity物体设置透明度_透明度混合(Alpha blending)
文章目录 前言 一.混合模式 1.说明 2.常用公式 二.问题 总结 参考 前言 本文介绍unity渲染中的透明度混合,和透明度混合相关问题. 一.混合公式 1.说明 unity上,Blend Src ...
- 关于透明度混合blend
webgl中关于blend 开启blend是gl.enable(gl.BLEND) 关闭blend是gl.disable(gl.BLEND); 设置blendFunc是gl.blendFunc gl. ...
最新文章
- 镇海区工业机器人与自动化设备_镇海区开展首期“工业机器人操作实训班”蓄力智能制造产业发展...
- wireshark网络分析就这么简单_【读书笔记】2wireshark网络分析就这么简单——不同子网如何发送消息。...
- access期刊可以重投几次_又被拒稿了?老司机带你一投即中
- 985学校计算机专业毕业月薪过万,这八个985和211大学分数低,容易考,毕业后月薪过万...
- 2022Go安装goimports第三方库命令
- 任意给4条边求形成四边形面积最大值
- java编程思想学习(1):抽象
- apache启动错误 AH00072: make_sock: could not bind to address [::]:443
- 梯形图 c语言代码生成,PLC梯形图中内嵌C语言编程的实现
- centos mysql 修改mysql用户密码
- sql 树状结构中知道 父节点与孙节点_数据结构之(树)
- 单例模式Java的七种写法
- pymysql之常见数据库操作
- 干货 | 携程动态表单DynamicForm的设计与实现
- 产生式系统 实验报告 人工智能原理实验
- laydate定位修改
- Ratel-Kubernetes Dashboard 一键式 Kubernetes多集群资源管理平台 k8s 管理平台
- 服务器站群16c多少个ip?不同C段IP怎么计算
- vba 邮件body html,Excel VBA中的Outlook电子邮件和签名 - .Body vs .HTMLbody
- Terraform的安装
热门文章
- python分治算法_黄哥Python:分治算法(Divide-and-Conquer)
- 递进式产品研发基本过程
- c++ :override的用法
- ubuntu安装无线网卡驱动(包括离线安装)
- 【生态大会】​大咖云集!今天这些人亮相CDEC2019上海站!
- 树莓派4B驱动1.8寸ST7735S TFT屏幕
- java 窗口文本_Java Frame 窗口读取 文本文件代码
- 系统集成项目管理工程师(系统集成基础知识)
- Retrofit动态设置支持JSON和XML格式转换工厂
- 准备斑马网络一面(2)