没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
Unity3D Built-in Shader 详解一
Unity3D 的 Shader
Unity 里面的 Shaders 是使用一种叫 ShaderLab 的语言编写的,它同微软的.FX 文件或者 NVIDIA 的
CgFX 有些类似。传统意义上的 vertex shader 和 pixel shader 还是使用标准的 Cg/HLSL 编程语言
编写的。(因此 Unity 文档里面的 Shader,都是指用 ShaderLab 编写的代码) 然后我们来看下 Unity3D
自带的 60 多个 Shader 。 这些 Shader 被 分 为 五 个 大 类 : Normal,Transparent,Transparent
Cutout,Self-llluminated,Reflective。由于数量比较多,将分几个篇幅一一介绍。
(一) Normal Shader Family 这个家族一共 9 个 Shader,都是针对不透明的对象的。 (1) Vertex-Lit:
最简单的一种 Shader 之一,所有照射在该物体上的光在一个 Pass 里面渲染完,光源只在顶点计算。
所以不会有任何基于像素渲染得效果,比如说:normal mapping,light cookies 和 shadows.这个
shader 对模型的剖分(将一个物体从几何描述变为多边形表示的过程)非常敏感,如果你将一个点
光源放在很靠近一个立方体的一个顶点那里,并且对立方体使用这个 shader,光源只会在角落计算。
基于像素光照的 shader 对剖分没有要求,在表现圆形高光上效果也很好。如果上述情况时你想要的
效果,你可以考虑使用一个基于像素光照的 shader 或者增加模型的剖分。(增加顶点数) 总的来说,
这个 shader 的渲染代价比较小。这个 shader 包含了 2 个 subshader,分别对应可编成管线和固定管
线。是所有硬件都支持的一个最基本的 shader。如果设备支持可编成管线,那使用可编成管线的
subshader,否则使用固定管线的。
(2) Diffuse: Diffuse 基于一个简单的光照模型-Lambertian,光照强度随着物体表面和光入射角
夹角的减小而减小(即光垂直于表面时强度最大)。光照的强度只和该角度有关系,和摄像机无关。由
于这是一个基于像素光照的 shader,因此他有这类 shader 的优势,同时他需要设备支持可编程管线,
如果设备不支持,则自动使用 Vertex-Lit 这个 Shader。 总的来说,这个 shader 渲染代价比较小。
(3) Specular Specular 使用和 Diffuse 相同的光照模型,但是添加了一个和观察角度相关的反射高
光。这个被称为 Blinn-Phong 光照模型。他包含了一个反射强光,这个反射高光物体表面角度,光的
入射角度以及观察者角度都有关系。这种高光计算方法实际上是对实时光源模糊反射的一种具有可行
性的模拟。模糊的等级通过 inspector 里面 Shininess 这个变量控制。 主纹理的 alpha 通道被用来
当作 Specular Map 来使用(有时候也称 gloss map),它定义了物体的反光率。纹理中 alpha 里面全
黑 的部分将完全不反光(即反光率为 0%)。而全白的的部分反光率为 100%。这个 Map 在你的物体在
不同的部分有不同的反光率的时候非常有用。比如说,锈迹斑斑的金属会反光率低,而磨光的金属反
光率比较高。口红的反光率比皮肤高,而皮肤的反光率比棉质衣服高。一个精心制作的 Specular Map
将会让玩家身临其境。如果目标设备不支持可编程管线,则自动使用 Vertex-Lit 这个 Shader。 这
个 shader 的渲染代价会比较大。
(4)Bumped Diffuse 同 Diffuse Shader 一样,这个 Shader 基于 Lambertian 光照模型,同时使用了
normal mapping 技术来增加物体表面细节。相对于通过增加剖分来表现物体表面细节的方式,normal
mapping 并不改变物体的形状,而是使用一张称为 Normal Map 的特殊纹理来达到这种效果。在 normal
map 中,每个象素的颜色代表了该像素所在物体表面的法线,然后通过这个法线(而不是通过物体模
型计算而来的法线)来计算光照。可以说 Normal Map 在计算光照的过程中“高效地修改”了整个模
型。 如何创建 Normal maps:你可以通过导入一张普通的灰度图(白色表示凸起,黑色表示凹进)
Unity 会自动将它转换为 Normal Map。 技术细节:这里使用 Normal map 是一种“Tangent space Normal
Map”,Tangent space(正切空间)是一个跟随模型物体表面的空间。在这个空间中,z 轴始终从表
面指向外面。Tangent space Normal Map 相对于另一种被称为“Object space Normal Map”来说有
点复杂,但是他有一些优势。1)可以使用在各种奇形怪状的表面 2)便于在同一物体不同区域或者
不同物体间复用 具体关于 Tangent Space Normal Map 和 Object Space Normal Map 的区别,下次再
讲。 如果调用这个 shader 失败,则会调用 Diffuse 这个 shader,一般而言,该 shader 渲染代价低。
剩余17页未读,继续阅读
LovePurple
- 粉丝: 12
- 资源: 43
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
前往页