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

本文深入探讨了Unity Shader中透明效果的实现原理,包括透明度测试与透明度混合两种方法,以及它们在游戏开发中的应用。文章还讲解了渲染顺序的重要性,并介绍了Unity提供的渲染队列如何帮助解决透明物体的渲染问题。

大白话版 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标签决定模型使用哪个队列

名称队列索引描述
Background1000最早渲染的队列,用于渲染背景
Geometry2000默认渲染队列,不透明物体使用这个
AlphaTest2450透明度测试
Transparent3000使用透明度混合或关闭深度写入的shader
Overlay4000使用一些叠加效果,最后渲染的物体都使用该队列
卷积神经网络(CNN)是一种常用于图像处理和模式识别的深度学习模型。它的设计灵感来自于生物学中视觉皮层的神经元结构。为了用通俗的语言解释CNN,我们可以用以下方式来理解它: 假设你要识别一张猫的图片。首先,你的大脑会将这张图片的像素点转化成一系列数字,并且记录下它们的位置和颜色。然后,大脑会将这些数字输入到“卷积层”中。 在卷积层中,会有很多个“过滤器”。这些过滤器可以视为一双眼睛,它们通过抓取图片的不同特征来帮助你识别物体。每个过滤器都在图片上滑动并计算一个“特征图”,这个特征图描述了所检测到的特定特征。例如,一个过滤器可以检测到猫的边缘,另一个可以检测到猫的颜色等等。当所有过滤器完成计算后,就会得到一些不同的特征图。 在“池化层”中,每个特征图都会被压缩,去除一些不重要的信息。这样可以减少需要计算的数据量,并且使得特征更加鲁棒和不变形。 最后,在全连接层中,所有的特征图都被连接起来,形成一个巨大的向量。接下来,这个向量会通过一些神经元节点,最终输出识别结果,也就是“这是一张猫的图片”。 CNN的一个重要特点是参数共享,这意味着每个过滤器会在整个图片上进行计算,而不仅仅是某个局部区域。这样可以减少需要计算的参数量,提高训练速度和模型的泛化能力。 总结一下,CNN通过卷积层来提取图像的特征,并通过池化层降低特征的维度。最后,通过全连接层将所有特征连接起来并输出结果。这种结构使得CNN非常适合于图像分类和识别任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值