大白话版 UnityShader学习(3)-透明效果

根据冯乐乐大小姐的书以及相关资料来进行学习,总结学习经验,分享心得。

透明效果的定义以及相关内容

什么是透明效果,就是光可以完全通过或者部分透过的物体上所发生的状态,称之为透明(个人理解),那么放到Unity里进行解释的话,则无非是RGBA4个通道里,A通道也就是Alpha通道的使用。在过去几年前的手机游戏图像技术发展中,由于开发环境,开发周期以及游戏优化等原因,透明效果其实并不多见。当时大部分的手机游戏表现这种状态的形式是,通过UI图标,原画等形式来简单呈现出这种效果,比较出名的游戏便是仙剑奇侠传1,超级玛丽,忍者神龟等等的2D画面。
随着技术的发展和3D游戏的兴起,半透明似乎成为了一个3D游戏的一个基础表现,当然不只是游戏,很多平台,软件的后台里会默认的写进这种效果来强化你的视觉,以此便于制作人的创作。

言归正传,UnityShader里对这种效果也给出了支持,几个重点:

(1). 计算机对于透明和非透明的物体区分很是简单,A通道为0时,则像素为不显示;A通道为1时,则像素为完全不透明;介于之间的状态则为半透明,那么在我们操作表现上很简单

Properties
{_AlphaScale("图片a通道的范围",Range(0,1.0)) = 0.5 //区间为0~1
}

(2). 那么Unity Shader对于实现透明效果的第一种方法便是,透明度测试(Alpha Test),他是Unity默认提供的一种表现方法,Shader里是深度写入,测试俩个字一出现,那么便会想到判断,这种情况会怎么样,那种情况又会怎么样,显然在Shader里这种测试是很纯粹的:要么这个片元满足条件,留下;反之,扔掉。判断的内容一般是小于某个阈值的时候(比如x<= 0.00001),那么这种测试结果会带来一个什么样的效果呢?如果2个物体先后放在摄像头前面,那么测试后要么只能看见后面的,要么只能看见前面的,这种结果没有融合,倒似乎有点像互斥,所以这并不是我们所想要的状态。

(3). 第二种方法,透明度混合(Alpha Blend),这种办法相对于第一种变得灵活起来,在重叠的时候,会根据透明度的比例,对片元进行二次着色,这样来模拟出现实的透明效果,当然这里面会涉及到更多的表现形式,比如透明折射,透明自发光的散射等等。在技术层面上讲,我们关闭了Unity里自带的深度写入,但是并不是我们不需要这个功能了,只是关闭写入,判断依旧是需要的,因为没有深度之分,则透明度混合也没有了意义。也就是说,对于透明度混合来说 ,深度缓冲是只读的

渲染顺序也十分重要

冯姐姐在书中对此写的十分详细,总结几点
(1). 顺序先后十分重要,没有了Shader深度写入的功能,那么它可能会无法渲染出你想要的效果,如场景中有俩个物体,A,B。大概的距离为摄像机—>A—>B,那么问题来了,如果说我们先渲染B,再渲染A的话,B 首先会正常的写入颜色缓冲,之后再和A混合,这样的话,结果是正确的。
(2).反之,如果先渲染A的话,当然A肯定是先写入缓冲,随后B再次渲染的话,就会发现,B似乎在A的前面,这样的话就不正确了。那么这边便提出了渲染的物体越近,就越往后渲染观点。
(3).为解决渲染顺序,unity提供了渲染队列。Queue标签决定模型使用哪个队列

名称 队列索引 描述
Background 1000 最早渲染的队列,用于渲染背景
Geometry 2000 默认渲染队列,不透明物体使用这个
AlphaTest 2450 透明度测试
Transparent 3000 使用透明度混合或关闭深度写入的shader
Overlay 4000 使用一些叠加效果,最后渲染的物体都使用该队列

大白话版 UnityShader学习(3)-透明效果相关推荐

  1. 大白话版 UnityShader学习(1)-基础纹理研究(一)

    大白话版 UnityShader学习(1)-基础纹理研究(一) 根据冯乐乐大小姐的书来进行学习,总结学习经验,分享心得. 基础纹理 针对于纹理,说白了就是,"啪"的一声,你的妈妈在 ...

  2. unityShader之遮挡透明效果

    本文转载自http://blog.csdn.net/u011047171/article/details/46562969: 在3D游戏中,经常会出现控制的角色被房子或者墙壁之类的挡住,一些游戏会把挡 ...

  3. NeHe的OpenGL教程8(Bang翻译Delphi版)-如何制作立体透明效果

    NeHe的OpenGL教程8(Bang翻译Delphi版)-如何制作立体透明效果 在这一课里,我将教会你如何制作立体透明效果,如下图: 将下图放在应用程序data目录下,起名NeHe.bmp prog ...

  4. OpenGL教程8(Bang翻译Delphi版)-如何制作立体透明效果 .

    OpenGL教程8(Bang翻译Delphi版)-如何制作立体透明效果 在这一课里,我将教会你如何制作立体透明效果,如下图: 将下图放在应用程序data目录下,起名NeHe.bmp program l ...

  5. 【Android进阶学习】设置透明效果的三种方法

    1.使用Android系统自带的透明效果资源 <android:backgroundandroid:background="@android:color/transparent&quo ...

  6. UnityShader入门精要-透明效果

    实现透明效果的方法:1.透明度测试2.透明度混合 深度缓冲Z-buffer决定了哪个物体的那些部分会被渲染在前面,而哪些部分会被遮挡(比较距照相机的距离),渲染一个片元时需要把他的深度值与已经存在在深 ...

  7. Android学习整理 - 状态栏和虚拟导航键透明效果

    状态栏和虚拟导航键 4.4上半透明,5.0以上可以全透明 先上效果 4.4 半透明效果 5.0及以上 全透明效果 上代码 MainActivity代码 public class MainActivit ...

  8. Unity-shader学习笔记(七)

    文章目录 Unity-shader学习笔记(七) 15 更复杂的光照 15.1 Unity的渲染路径 15.1.1 前向渲染路径 15.1.1.1 前向渲染路径的原理 15.1.1.2 Unity中的 ...

  9. 《Unity着色器和屏幕特效》——2.2 进阶的透明效果

    本节书摘来自华章计算机<Unity着色器和屏幕特效>一书中的第2章,第2.2节,作者[美]杰米·迪恩(Jamie Dean),译 周翀,张薇,更多章节内容可以访问云栖社区"华章计 ...

最新文章

  1. 来,一起手撸一个简版 Redis(附源码)
  2. java isfocusowner_Java JTextArea.isFocusOwner方法代码示例
  3. 卡成PPT不开心?GAN也能生成流畅的连续表情了 |ECCV Oral · 代码
  4. C++ STL 之 unordered_set 使用(包括unordersd_map)
  5. 唐骏:幸福与财富无关
  6. 机房系统(四)——【分页控件SSTab】
  7. 分享MYSQL中的各种高可用技术(源自姜承尧大牛)
  8. AttributeError : module ‘enum‘ has no attribute ‘IntFlag‘
  9. iOS - 正则表达式判断邮箱、身份证..是否正确
  10. 写给想做好社区网站人员的一本书
  11. boost 静态库命名规则
  12. Julia科学记数法格式输出问题
  13. (第二天)编写训练记忆软件--数字编码矩阵V1.0
  14. 推荐系统实践 - 02利用用户行为数据
  15. sel2000服务器自动关闭,实用贴:轻松处理SQL 2000数据库自动停止
  16. Python一周小结
  17. 解决百度网盘下载慢,提速下载
  18. 社交电商概念与特点,十大社交电商平台及产业链模式图解
  19. 氟虫腈-13C2,15N2同位素内标的基质效应
  20. fastadmin 百度编辑器无法上传图片的几种原因和修改方法

热门文章

  1. 塞缪尔·厄尔曼-青春
  2. 山东大学暑期项目实训-基于信用评分卡算法模型的个人信用评级系统的设计与实现-第一周-1(6月28日)
  3. 这可是全网网工数通方向学习路线最完整,最详细的版本,没有之一
  4. java jwt刷新_基于springboot+jwt实现刷新token过程解析
  5. zabbix的简单介绍
  6. MIMIC数据库数据提取教程-提取实验室或生命体征指标
  7. py的session实现宁稳网验证码登录,csrf_token破解,自动跳转
  8. Animate.css动画库的源码分析(大部分都是CSS3.0动画的使用)
  9. SV学习笔记—类型转换
  10. 广西全国计算机考试打印时间,广西计算机等级考试准考证打印时间