UnityShader初级篇——透明度测试
来源:互联网 发布:mysql 如何使用 编辑:程序博客网 时间:2024/06/05 06:58
1.透明度测试,只要一个片元的透明度不能满足条件,该片元就会被舍弃,不在进行处理,否则会按照普通不透明物体处理
Shader"Unity Shaders Book/Chapter 8/Alpha Test"{Properties{_Color ("Color Tint", Color) = (1,1,1,1)_MainTex("MainTex", 2D) = "White" {}//控制透明度测试时的阈值,决定调用clip进行透明度测试时使用的判定条件,纹理像素的透明度在0-1范围_Cutoff("Alpha Cutoff", Range(0,1)) = 0.5}SubShader{ //Queue渲染队列,决定此shader的渲染顺序; //IgnoreProject是否忽视投影器(Project)的影响; //RenderType将此shader归入提前定义的组,以指明此shader使用了透明度测试,一般用于着色器替换 //通常使用了透明度测试的shader都应该设置这三个标签 Tags{"Queue" = "AlphaTest" "IgnoreProject" = "True" "RenderType" = "TransparentCutout"}Pass{ Tags{"LightMode" = "ForwardBase"} CGPROGRAM#pragma vertex vert#pragma fragment frag#include "LIghting.cginc"fixed4 _Color;sampler2D _MainTex;//需要用 “纹理名_ST” 的方式定义纹理的属性,S是缩放(scale),T是平移(transform)//_MainTex_ST.xy获取缩放值,_MainTex_ST.zw获取偏移值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);//透明度测试clip(texColor.a - _Cutoff);//等同于//if((tecColor.a - _Cutoff) < 0.0)//{ // discard;//}//使用tex2D(需要被采集的纹理名,纹理坐标)进行纹理采样,再与颜色相乘,返回纹素值fixed3 albedo = texColor.rgb * _Color.rgb;//将环境光与纹理素相乘fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz * albedo;//漫反射与纹理素相乘fixed3 diffuse = _LightColor0.rgb * albedo * saturate(dot(worldNormal,worldLightDir));return fixed4(ambient + diffuse,1.0);;}ENDCG}}Fallback"Transparent/Cutoff/Vertexlit"}
阅读全文
0 0
- UnityShader初级篇——透明度测试
- UnityShader初级篇——透明度混合
- UnityShader初级篇——单张纹理
- UnityShader初级篇——凹凸映射
- UnityShader初级篇——渐变纹理
- UnityShader初级篇——使用半兰伯特光照模型
- UnityShader初级篇——BlinnPhong光照模型
- UnityShader初级篇——遮罩纹理
- UnityShader初级篇——最简单的顶点/片元着色器
- UnityShader初级篇——使用假色彩图像调试代码
- UnityShader初级篇——实现逐顶点漫反射光照模型
- UnityShader初级篇——实现逐像素漫反射光照模型
- UnityShader初级篇——实现逐顶点高光反射光照模型
- UnityShader初级篇——实现逐像素高光反射光照模型
- UnityShader——Wireframe
- UnityShader——玩弄GlobalFog
- [UnityShader]-理解深度测试
- 透明度测试
- 去你妈的996
- Java测试题(含答案和部分解析)
- 总结-2017/12/10
- 从Kudu中导出、导入数据
- 使用Opencv的python接口简单读取并显示图片
- UnityShader初级篇——透明度测试
- 虚拟现实(VR)技术与伦理
- 线程1
- 面试记录
- 算法与数据结构基础(三)插入排序、选择排序和冒泡排序的区别
- 实现基于静态数组的顺序表的基本操作
- 代码理解json.dumps(config, sort_keys=True, indent=4, separators=(',', ':')
- 互联网产品常用英语单词
- python正则表达式(二)