Unity3D
来源:互联网 发布:怎么下载淘宝号 编辑:程序博客网 时间:2024/06/05 18:26
透明度测试:只要有一个片元的透明度不满足条件(通常是小于某个阈值),那么它对应的片元就会被舍弃。被舍弃的片元不会再进行任何处理,也不会对颜色缓冲区产生任何影响。否则就会按照普通物体进行处理。
通常使用clip函数进行透明度测试,如果给定的参数任何一个分量是负数,就会舍弃当前像素的输出颜色:
void clip(float4 x);void clip(float3 x);void clip(float2 x);void clip(float1 x);void clip(float x);==== 等同于void clip(float4 x) { if (any(x) < 0) { discard; }}
具体代码:
// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'Shader "Unity Shaders Book/Chapter 8/Alpha Test" { Properties { _Color ("Main Tint", Color) = (1,1,1,1) _MainTex ("Main Tex", 2D) = "white" {} // 用于使用clip进行透明度测试时使用的判断条件。 _Cutoff ("Alpha Cutoff", Range(0,1 )) = 0.5 } SubShader { // Queue用于指定渲染队列 // RenderType让Unity把这个Shader归入到提前定的组(TransparentCutout组),以指明该Shader是一个使用了透明度测试的Shader // IgnoreProjector=true意味着该Shader不会受到投影器(Projectors)的影响 Tags { "Queue"="AlphaTest" "IgnoreProjector"="True" "RenderType"="TransparentCutout" } Pass { // 定义该Pass在Unity中的光照流水线中的角色 Tags { "LightMode"="ForwardBase" } CGPROGRAM #pragma vertex vert #pragma fragment frag #include "Lighting.cginc" fixed4 _Color; sampler2D _MainTex; float4 _MainTex_ST; fixed _Cutoff; struct a2v { float4 vertex : POSITION; float3 normal : NORMAL; float4 texcoord : TEXCOORD0; }; struct v2f { float4 pos : SV_POSITION; float3 worldNormal : TEXCOORD0; float3 worldPos : TEXCOORD1; float2 uv : TEXCOORD2; }; v2f vert(a2v v) { v2f o; o.pos = UnityObjectToClipPos(v.vertex); o.worldNormal = UnityObjectToWorldNormal(v.normal); o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); return o; } fixed4 frag(v2f i) : SV_Target { fixed3 worldNormal = normalize(i.worldNormal); fixed3 worldLightDir = normalize(UnityWorldSpaceLightDir(i.worldPos)); fixed4 texColor = tex2D(_MainTex, i.uv); // AlphaTest clip(texColor.a - _Cutoff); 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 (ambient + diffuse , 1.0); } ENDCG } } FallBack "Transparent/Cutout/VertexLit"}
阅读全文
0 0
- Unity3D
- Unity3D
- Unity3D
- Unity3D
- unity3d
- Unity3D
- Unity3D
- Unity3D
- UNITY3D
- Unity3D
- unity3d
- unity3D
- Unity3D
- Unity3d
- Unity3D
- unity3D
- unity3D
- Unity3D
- 浅析DispatcherServlet
- Redis数据类型之String
- Android 6.0权限笔记
- Mezzanine多site管理问题
- 【LuaWithC++】Lua的基础
- Unity3D
- C++ 模板(1) 介绍与使用方法
- Scala之视图边界
- SecureCRT 工具 上传下载数据 与 ASCII、Xmodem、Ymodem 、Zmodem 说明
- 查询系统下的所有表视图
- 如何使用dedecms的图集模型?
- 抽奖
- dhcp服务器简单指南
- python字符串