//透明度混合
//使用当前偏移的透明度作为混合因子,与已经存储在绿色缓冲中的颜色进行混合。得到颜色。
//使用混合命令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透明度混合-关闭写入相关推荐

  1. 【Unity Shader】实现透明度测试和透明度混合

    本篇开始将进行<入门精要>初级篇最后一部分的学习,完成透明效果的学习. 1 Unity中实现透明效果的方法 一个像素的RGBA参数中的最后一项A指的就是透明度Alpha.在之前的实践中,一 ...

  2. unity shader学习---透明度测试,透明度混合

    unity实现透明效果 效果图 理论 Alpha Test Alpha Blend 改进 开启深度写入的半透明效果 双面渲染的透明效果 代码部分 效果图 Alpha Test Alpha Test W ...

  3. unity 半透明混合问题_Unity Shader 透明度混合的双面渲染(十八)

    效果: 双面渲染的透明度混合的物体.png 原图: transparent_texture.png Shader代码: Shader中2个Pass代码一样,一个只渲染背面,一个只渲染正面 // 透明度 ...

  4. Unity_Shader学习笔记_02_透明度测试,透明度混合,半透明.shader入门精要

    关于透明度测试,主要是通过clip函数来实现裁剪功能 函数:void clip(float4 x);void clip(float3 x);void clip(float2 x);void clip( ...

  5. unity物体设置透明度_URP自学笔记5. 透明度混合与透明度测试

    1.概述 本节中我们回顾一下两种透明方法,透明度混合与透明度测试.透明度混合用于实现半透明,透明度测试则用于实现消融效果之类"消失"效果. 2.透明度混合 透明度混合是一种混合方式 ...

  6. RGBA alpha 透明度混合算法实现和测试

    目录 1.算法叙述 1.1.透明度混合算法1 1.2.AlphaBlend算法介绍 1.3.简易Alpha混合算法 2.算法实现代码和测试 2.1.透明度混合算法1实现代码 2.1.AlphaBlen ...

  7. 图片正常模式混合(透明度混合)公式

    一.描述 所有内容摘自维基 在处理图象时可能需要手撸图片混合的代码,此时混合公式就十分重要.而正常混合(Normal Blending)模式是最常用的一种格式(比如PS的默认图层混合模式).想手动实现 ...

  8. unity物体设置透明度_透明度混合(Alpha blending)

    文章目录 前言 一.混合模式 1.说明 2.常用公式 二.问题 总结 参考 前言 本文介绍unity渲染中的透明度混合,和透明度混合相关问题. 一.混合公式 1.说明 unity上,Blend Src ...

  9. 关于透明度混合blend

    webgl中关于blend 开启blend是gl.enable(gl.BLEND) 关闭blend是gl.disable(gl.BLEND); 设置blendFunc是gl.blendFunc gl. ...

最新文章

  1. 镇海区工业机器人与自动化设备_镇海区开展首期“工业机器人操作实训班”蓄力智能制造产业发展...
  2. wireshark网络分析就这么简单_【读书笔记】2wireshark网络分析就这么简单——不同子网如何发送消息。...
  3. access期刊可以重投几次_又被拒稿了?老司机带你一投即中
  4. 985学校计算机专业毕业月薪过万,这八个985和211大学分数低,容易考,毕业后月薪过万...
  5. 2022Go安装goimports第三方库命令
  6. 任意给4条边求形成四边形面积最大值
  7. java编程思想学习(1):抽象
  8. apache启动错误 AH00072: make_sock: could not bind to address [::]:443
  9. 梯形图 c语言代码生成,PLC梯形图中内嵌C语言编程的实现
  10. centos mysql 修改mysql用户密码
  11. sql 树状结构中知道 父节点与孙节点_数据结构之(树)
  12. 单例模式Java的七种写法
  13. pymysql之常见数据库操作
  14. 干货 | 携程动态表单DynamicForm的设计与实现
  15. 产生式系统 实验报告 人工智能原理实验
  16. laydate定位修改
  17. Ratel-Kubernetes Dashboard 一键式 Kubernetes多集群资源管理平台 k8s 管理平台
  18. 服务器站群16c多少个ip?不同C段IP怎么计算
  19. vba 邮件body html,Excel VBA中的Outlook电子邮件和签名 - .Body vs .HTMLbody
  20. Terraform的安装

热门文章

  1. python分治算法_黄哥Python:分治算法(Divide-and-Conquer)
  2. 递进式产品研发基本过程
  3. c++ :override的用法
  4. ubuntu安装无线网卡驱动(包括离线安装)
  5. 【生态大会】​大咖云集!今天这些人亮相CDEC2019上海站!
  6. 树莓派4B驱动1.8寸ST7735S TFT屏幕
  7. java 窗口文本_Java Frame 窗口读取 文本文件代码
  8. 系统集成项目管理工程师(系统集成基础知识)
  9. Retrofit动态设置支持JSON和XML格式转换工厂
  10. 准备斑马网络一面(2)