UnityShader案例(九)——透明效果(2)
来源:互联网 发布:网络私募 编辑:程序博客网 时间:2024/06/05 11:17
一、原理
透明度混合:这种方法可以得到 真正的半透明效果。它会使用当前片元的透明度作为混合因子,与已经存储在颜色缓冲中的颜色值进行混合,得到新的颜色。但是,透明度混合需要关闭深度写入。透明度混合只是关闭了深度写入,但并没有关闭深度测试。
二、实现
// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'Shader "Custom/Transparent/AlphaBlend"{ Properties { _MainTex ("Texture", 2D) = "white" {} _Color("Color",Color)=(1,1,1,1) _Cutoff("AlphaBlend",Range(0,1))=1 } SubShader { Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" } LOD 100 Pass { Tags{"LightMode"="ForwardBase"} ZWrite off Blend SrcAlpha OneMinusSrcAlpha CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" #include "Lighting.cginc" sampler2D _MainTex; fixed4 _Color; float4 _MainTex_ST; fixed _Cutoff; struct appdata { float4 vertex : POSITION; float4 uv : TEXCOORD0; float3 normal:NORMAL; }; struct v2f { float2 uv : TEXCOORD0; float3 worldNormal:TEXCOORD1; float3 worldPos:TEXCOORD2; float4 vertex : SV_POSITION; }; v2f vert (appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.worldNormal=UnityObjectToWorldNormal(v.normal); o.worldPos=mul(unity_ObjectToWorld,v.vertex); o.uv = TRANSFORM_TEX(v.uv, _MainTex); return o; } fixed4 frag (v2f i) : SV_Target { float3 worldNormal=normalize(i.worldNormal); float3 worldLightDir=normalize(UnityWorldSpaceLightDir(i.worldPos)); fixed4 col = tex2D(_MainTex, i.uv); fixed3 albedo=col.rgb*_Color.rgb; fixed3 ambient=UNITY_LIGHTMODEL_AMBIENT.xyz*albedo; fixed3 diffuse=_LightColor0.rgb*albedo*max(0,dot(worldNormal,worldLightDir)); return fixed4(ambient+diffuse,col.a *_Cutoff); return col; } ENDCG } }}
阅读全文
0 0
- UnityShader案例(九)——透明效果(2)
- UnityShader案例(八)——透明效果(1)
- UnityShader案例(一)——漫反射
- UnityShader案例(二)——Phong高光反射
- UnityShader案例(三)——BlinnPhong高光反射
- UnityShader案例(四)——单张纹理
- UnityShader案例(五)——法线纹理
- UnityShader案例(六)——渐变纹理
- UnityShader案例(七)——遮罩纹理
- unity shader学习笔记(九)——Unity中的透明效果之透明混合
- unityShader之遮挡透明效果
- UnityShader官方案例讲解——SurfaceShader(2)
- OpenGL之路(九)颜色混合实现透明效果
- UnityShader官方案例讲解——SurfaceShader(1)
- UnityShader官方案例讲解——SurfaceShader(3)
- UnityShader官方案例讲解——SurfaceShader(4)
- 【UnityShader】设置Image组件图片透明四个方向透明渐变(Sprite原理相同)
- UnityShader入门精要学习笔记(十):透明效果-上部分
- 使用mount挂载system目录为读写权限
- queue 队列测试
- 字符公式计算
- 爬虫基础之http协议
- Swift3.1字符串截取操作
- UnityShader案例(九)——透明效果(2)
- 【angularjs学习笔记】angularjs项目使用gulp自动化构建及压缩打包
- 逆向工程核心原理学习笔记(一):寻找程序的主函数(Main)
- hdoj 2007
- 安卓启动自动进入安全模式
- vs2017 使用Git 连接Github
- 随机森林---python实现
- 除了北上广深,程序员的归宿还有哪些城市?
- 技术分析