Unity3D渲染系列之标准着色器(Standard Shader)使用1

上一篇讲了一些常用贴图的用法,这一篇讲下如何使用标准着色器(Standard Shader)的几个渲染模式。

1.标准着色器是什么

首先它是一个着色器(Shader)(狗头,不相当于没说吗),我刚学Unity的时候觉得着色器很高端,会写着色器的人都是大佬,其实不然,弄懂之后也没啥。着色器没什么特别的神秘的地方,它就是一段运行在GPU上代码而已。它和C#一样仅仅是代码,只是两者使用的地方不同,C#用来写游戏的交互逻辑,而着色器用来给物体“上色”。

其次,“标准”是什么东东?这所谓的“标准”有几层意思(如果没学过Shader,以下几点当作了解即可)。

  1. 它是基于物理的渲染技术(Physically Based Shading, PBS 或者 Physically Based Rendering, PBR
  2. 它可以让我们的场景在各种光照条件下(光源的个数、光源类型、光源是否开启阴影以及物体与光源的距离等)都能得到令人满意的效果,同时不需要频繁的调整材质参数
  3. 它可以让我们不用考虑物体具体是什么材质,如是金属材质还是塑料材质,通通使用同一个着色器来渲染

总结一下,标准着色器其实就是Unity3D官方封装的基于物理的渲染技术的Shader,该Shader在不同光照环境下都能有令人满意的效果,而且能够模拟各种不同的材质。

2.一点准备工作

设置颜色空间为线性空间(Linear)。路径如下:File --> Build Settings --> Player Settings --> Other Settings --> Color Space

这里有个知识:伽马空间(Gamma)和线性空间(Linear)。

伽马空间主要用在移动端、页游、HoloLens,性能比较低的设备上。

线性空间可以得到更加真实的效果,但要求硬件支持线性计算,所以线性空间一般用在PC端和主机端。我们使用标准着色器时,建议使用线性空间,这样可以得到更好的渲染效果。

关于伽马空间和线性空间这里只稍微提了一下,想深入理解的话,参考冯乐乐的文章

3.四大渲染模式

新建一个材质球,默认的材质就是Standard Shader。(ps: 我使用的Unity版本是Unity2017.4.25,版本不同,标准着色器会有不同)

该Unity版本下,Unity支持了三种基于物理的工作流程:金属工作流、粗糙度工作流和高光反射工作流。这里的工作流程对应于美工制作贴图的工作流程。其实这几种工作流程都可以实现相同的效果,只是它们使用的参数不同而已。

标准着色器支持四大渲染模式。(ps:以下都是使用的Standard Shader)

3.1 Opaque

用于渲染现实世界中一切不透明物体,如陶瓷、塑料、石头、地板等等。

如这里使用该Shader渲染一个蓝紫色的立方体。

3.2 Transparent

用于渲染透明物体,如玻璃。

我们可通过Metallic贴图或Albedo贴图来控制不同区域的透明度,也可通过Albedo中的叠加颜色来控制整体的透明度。如下。

设置不同Alpha的效果,可以看到,我们能透过左边两个透明物体看到后面的不透明物体。(ps:如果手动去写透明物体的Shader的话,需要考虑许多问题,如渲染队列、透明物体的阴影什么的,而在这里我们使用Unity标准着色器,只需调整一点参数就实现好了,这也正是Unity的强大之处)

3.3 Cutout

用于渲染镂空的物体,如中间有洞的纸、被子弹打穿的玻璃等。

这个模式的原理就是设定一个阈值,如果该物体表面上的贴图的Alpha值低于该阈值,就直接把这部分给剔除掉不渲染。

一张贴图导入到Unity会有一个设置面板,需要设置对应的Alpha通道,由于本文用到的贴图自身不带有Alpha通道,所以使用灰度生成Alpha通道,如下。(ps:下次专门讲一下这个设置纹理设置面板)

Shader设置如下。

设置不同Alpha Cutoff效果比较。

3.4 Fadeout

渐隐,可以通过Albedo中的Alpha值来控制物体的显现与消失。和Transparent类似,不同的是Alpha为0时,Fadeout模式的物体完全消失,而Transparent的物体虽然完全透明但仍然能被看见。

项目上传到GitHub了,见06.Rendering-3-StandardShader,下次再会。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值