【本系列文章系学习 唐福幸《Unity ShaderLab 新手宝典》的笔记,包含个人理解,如有错误欢迎批评指出

透明效果

  • 7.4 透明测试
    • 7.4.1透明测试
    • 7.2抗锯齿

一句话总结:之前的混合透明是渲染顺序加上贴图透明度实现透明效果,这次透明测试是通过图片的透明通道来剔除透明部分。前者要考虑物体前后的渲染,后者要考虑图片的锯齿以及无法半透明

7.4 透明测试

7.4.1透明测试

遇到像树叶,栏杆这种部分透明,部分不透明的情况:如果继续使用混合透明方式,在延迟着色器渲染路径中物体将无法接受投影,凸起或重叠会出现渲染顺序错误的问题

存在问题:
透明度测试得到的透明效果比较极端——要么全部透明,要么全部不透明,得到的透明效果由于在边界处纹理的透明度的变化精度导致在边缘上往往处理不到位,存在锯齿的情况。

代码模板:

SubShader
{Tags{"Queue" = "AlphaTest""RenderType" = "TransparentCutout""IgnoreProjector" = "True"}Pass{CGPROGRAM//CG代码clip(textureColor.a - alphaCutoffValue);//CG代码ENDCG}
}

在Lambert基础上修改

Shader "Chapter7/TransImg5"
{Properties{_MainTex ("Texture", 2D) = "white" {}_AlphaTest("Alpha Test", Range(0,1)) = 0}SubShader{Tags {"Queue" = "AlphaTest""RenderType"="TransparentCutuot" "IgnoreProjector" = "True"}Pass{Tags{"LightMode" = "ForwardBase"}Cull OffCGPROGRAM#pragma vertex vert#pragma fragment frag// make fog work#pragma multi_compile_fog#include "UnityCG.cginc"#include "UnityLightingCommon.cginc"struct v2f{float4 worldPos : TEXCOORD0;float4 pos : SV_POSITION;float2 texcoord : TEXCOORD1;float3 worldNormal : TEXCOORD2;};sampler2D _MainTex;float4 _MainTex_ST;fixed _AlphaTest;v2f vert (appdata_base v){v2f o;o.pos = UnityObjectToClipPos(v.vertex);o.worldPos = mul(unity_ObjectToWorld,v.vertex);o.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex);float3 worldNormal = UnityObjectToWorldNormal(v.normal);o.worldNormal = normalize(worldNormal);return o;}fixed4 frag (v2f i) : SV_Target{float3 worldLight = UnityWorldSpaceLightDir(i.worldPos.xyz);worldLight = normalize(worldLight);fixed Ndotl = saturate(dot(i.worldNormal, worldLight));fixed4 color = tex2D(_MainTex, i.texcoord);clip(color.a - _AlphaTest);//开启Alpha测试, 利用Alpha通道信息剔除透明部分,其他不变color.rgb *= Ndotl * _LightColor0;color.rgb += unity_AmbientSky;return color;}ENDCG}}
}

完成shader编写,附到材质上后,还要调一下_AlphaTest的值(大于0即可),因为clip()指令必须小于0才能产生透明效果

与混合透明(左)效果对比

注:测试图片是带有alpha通道的tga贴图

7.2抗锯齿

当把_AlphaTest值调大后,把图片放大后会在交界处出现许许多多的锯齿,当图片像素低时候锯齿就会很模糊

可以在Pass中添加AlphaToMask On指令开启(alpha-to-coverage)功能,提高多重采样边界覆盖范围,从而消除透明测试器上的锯齿现象(我开完没看出啥区别)

透明效果(六)--透明测试相关推荐

  1. 网页设计中 透明效果的使用技巧

    运用好透明效果是提高网页设计水准的重要方法之一.如同使用其他方法一样,设计师们有很多种手段将透明效果运用到网页中,今天这篇文章就来好好和您分享一下关于"透明"的实用小技巧哟:) 在 ...

  2. Unity 3D物体模型的透明和不透明实现

    最近在做项目中遇到一个需求,需要将物体模型进行透明虚化效果.看了网上一些博客文章.已实现该需求,为此博主写篇文章记录一下该功能的实现操作.希望能帮助到大家,不足之处还望海涵.一起学习交流. 透明效果: ...

  3. html透明度_Unity透明效果-透明度测试

    在之前的记录中已经知道了透明度测试的原理.本节主要就在Unity中通过透明度测试实现透明效果进行实践. 原理回顾 透明度测试采用一种"非舍即留"的机制,即,若某片元的透明度不满足条 ...

  4. IE6下PNG图片透明效果(PNG图片做背景也可以)

    懒人萱在这里保证发的文章都是高质量的经过测试的JS代码,而且IE6.IE7和火狐都兼容的,希望大家多多关注我的帖子,我会把我的经验都共享出来哦! 懒人萱在寻找PNG图片透明效果的JS特效代码的时候,发 ...

  5. Unity Shader 之 透明效果

    本文引用 Unity Shader入门精要 开启透明混合后,一个物体被渲染到屏幕上时,每个片元除了颜色值和深度值外,还有--透明度.透明度为1,则完全不透明,透明度为0,则完全不会显示. 在Unity ...

  6. UnityShader14.1:透明效果实现(下)

    接上文:UnityShader14:透明效果实现(上) 四.开启深度写入的透明效果 对比下面两种渲染效果: 前面提到过,透明物体的渲染顺序非常重要,对于一个复杂的透明物体,若不进行网格分割,那么几乎不 ...

  7. 实现透明效果时,开启深度测试,关闭深度写入

    同一个场景,同时存在透明和不透明物体,存在各种遮挡关系. 正常渲染流程:渲染不透明物体时,开启深度测试和深度写入;渲染透明物体时,开启深度测试,关闭深度写入.两种状态,互相切换. 深度测试与深度写入就 ...

  8. QT下的几种透明效果

    1.窗口整体透明,但是窗体上的控件不透明. 通过设置窗体的背景色来实现,将背景色设置为全透.  QPalette pal = palette();   pal.setColor(QPalette::B ...

  9. css实现html透明效果

    CSS3草案中定义了{opacity: | inherit;}来声明元素的透明度,这已经得到了大多数现代浏览器的支持,而IE则很早通过特定的私有属性filter来实现的,所以HTML元素的透明效果已经 ...

最新文章

  1. 2高并发服务器:多路IO之poll
  2. standalone vue initialization process
  3. 动画演示 Delphi 2007 IDE 功能[3] - 修改属性
  4. dj鲜生-29-登陆后欢迎信息的显示
  5. 【英语学习】【WOTD】heartstring 释义/词源/示例
  6. 问题 C: 判断三角形的性质
  7. 对 cloudwu 简单的 cstring 进行简单解析
  8. Oralce UTL_SMTP发送邮件的发送时间处理
  9. Oracle数据库详解(超详细)
  10. SI4463模块使用心得(无线协议)
  11. f和摄氏度怎么换算_华氏度怎么换算成摄氏度啊?
  12. 加权平均数的例子_EXCEL 加权平均数的计算
  13. GAMES101-现代计算机图形学入门-闫令琪——Lecture 18 Advanced Topics in Rendering 学习笔记
  14. python中and的用法
  15. python中nx_python在nx在Python3中使用asyncio库进行快速数据抓取的教程
  16. 红酒百科知识(二)_manok_新浪博客
  17. Pdf 插入图片 | 指定位置插入图片 不改变原格式 直接操作 pdf
  18. tp5 JWT生成token验证接口安全、防止高频请求
  19. 王阳明心学感悟1——勇敢地剖析自己的内心
  20. 树莓派之无屏幕下发现树莓派IP方法

热门文章

  1. 中式红木装修,越中式越奢华
  2. 解决2021年之后 CentOS 6 Yum 源无效 停止维护404错误
  3. 基于stm32f429的uclinux-W5500网络设备内核驱动
  4. 天翼物联网平台(AIoT)量子安全能力发布,为物联网端到端安全加装“量子盾”!
  5. 进程的三种状态及其转换
  6. 曼哈顿距离与切比雪夫距离及其相互转化
  7. 如何在GitLab与GitHub中删除项目(仓库)
  8. 《啊哈!算法》第二章 - 第一节 - 解密QQ号(Java实现)
  9. Windows Live Mail直接修改附件保存关闭后,如何恢复
  10. 蓝桥杯真题 购物单 EXCEl解法详细步骤