-
Unity3D Built-in Shader,unity3d
内
置
shader
详
解
1
Unity3D
内
置了很多
Shader,
文
档
很
详细
,
自己翻一下
.
便于加深印象
.
p>
首先先解
释
下
Un
ity3D
的
里面的
< br>Shaders
是使用一
种
叫<
/p>
ShaderLab
的
语
言
编写
的,
它
同微
软
的
.FX
文件或者
NVIDIA
的
C
gFX
有些
类
似。
传统
意
义
上的
vertex shader
和
pixel
shader
还
是使
用
标
准的
Cg/HLSL <
/p>
编
程
语
言
编写
的。(因此
Unity
< br>文
档
里面的
Shader
,都是指用
ShaderLab
编写
的代
码
)
然后我
们
来
看下
Unity3D
自
带
的
60
多
个
Shader
。
这
些
Shader
被分
为
五
个
大
p>
类
:
Norm
al
,Transparent,Transparent Cutout,Self-lllum
< br>inated,Reflective
。由于
数
量比
较
多,
将
分几
个
篇幅
一一介
p>
绍
。
(
一
)
Norm
al Shader
Fam
ily
这个
家族一共
9
个
Shader
,都是
针对
不透明的
对
象的。<
/p>
(1)
Vertex-Lit
:
最
简单<
/p>
的一
种
Shader
之一,
所有照射在
该
物体上的光在
一
个
Pass
里面渲染完,
光源只在
顶
点
计
算。
所以不
会
有任何基
于像素渲染得效果,比如
说
:
norm
al mapping,light cookies
和
shadows.
这个
shader
对
模型的剖分(
将
一<
/p>
个
物体
从
几何描
述
变为
多
边
形
表示的
过
程)非常敏感,如果
你将
p>
一
个
点光源放在很靠
近一
个
立方体的一
个顶
点那里,
并
且
对
立方体使用
这个
shader
,光源只
会
在角落
计
算。基于像素光照的
shader
对
剖分
没
有要求,在表
现圆
p>
形高光上效果也很好。如果上述情
况时你
想
要的效果,
你
可以考
虑
使用
一
个
基于像素光照的
p>
shader
或者增加模型的剖分。(增加
顶
点
数
)
总
的
p>
来说
,
这个
sha
der
的渲染代价比
较
小。
这个
shader
包含了
2
个
subshader
,分
别对应
可
编
成
管
线
和固定管
线
。是所有硬件都支持的一
个
最基本的
shader
。如果
设备
支持可
编
成管
线
,那使用可
编
成管
线
的
subshader
,否
则
使用固定管
线
的。
< br>
(2)
Diffuse
:
Diffuse
< br>基于一
个简单
的光照模型
-La
m
bertian
,
光照强度
随
着物体表面和光入射角
夹
角的
减
小而
减
小
(
即光垂直于表面
时
强度最大
)
。光照的强度只和
该
角度有
关
系,和
摄
像机无
关
。由于
这
是一
个
基于像素
光照的
shader
,因此他有
这类
shader
的
优势<
/p>
,同
时
他需要
设
备
支持可
编
程管
线
,如果
设备
不支持,
则
自
动
使用
Vertex-Lit
这个
Shader
。
p>
总
的
来说
,
这个
shader
渲染代价比
较
小。
(3) Specular
Specular
使用和
Diffuse
相同的光照模型,但是添加了
一
个
和
观
察角
度相
关
的反射高光。
这个
被
称
为
Blinn-Pho
ng
光照模型。他包含了一
个
反射强光
,
这个
反射高光物体表面角度,光的入射角度以及
观
察
者角度都有
关
系。
这种
高光
计
算方法
实际
上是
对实
时
光源模糊反射的一
种
具有可行性的模
拟
。模糊的等
级
通
过
inspector
里面
Shininess
这个变
量控制。
主
p>
纹
理的
alpha
通道被用
来当
作
Specular <
/p>
Map
来
使用(有
时
候也
称
gloss m
ap
)
,
它
定
义
了物体的
反光率。
p>
纹
理中
alpha
里面全黑
的部分
将
< br>完全不反光
(即反光率
为
0%<
/p>
)
。
而全白的的部分反光率
为
100%
。
这个
Map
在
你
的物体在不
同的部分有不同的反光率的
时
候非常有用。
比如
说
,
锈
迹斑斑的金
属会
反光率低,
而磨光的
金
属
反光率比
较
高。口
红
的反光率比皮
肤
高,而皮
肤
的反光率比棉
质
衣服高。一
个
精心制作的
Specular
Map
将会让
玩家身
临
其境。
如果目
标设备
不支持可
编
程
管
线
,
则
自<
/p>
动
使用
Vertex-Lit
这个
Shader
。
这个<
/p>
shader
的渲染代价
会
比
较
大。
(4)Bum
ped Diffuse
同
Diffuse Shader
一<
/p>
样
,
这个
Sha
der
基于
Lam
bertian
p>
光照模型,同
时
使用了
normal mapping
技
术来
增加物体表面
细节
。相
对
于通
过
增加剖分
来
p>
表
现
物体表面
细节
的方式,
norm
al mappin
g
并
不改
变
物
体的形
状
,而是使用一
张称为
Norm
al Map
的特殊
< br>纹
理
来达
到
这种
效果。在
norm
al ma
p
中,每
个
象素
的
颜
色代表了
该
像素所在物体表面的法
线
,然后通
过这个
法
线
(而不是通
过
物体模型
计
算而
来
的法
线
)
来
计
算光照。可以
说
Norm
al Map
在
计
算光照的
过
程中“高效地修改”
了整
个
模型。
如何<
/p>
创
建
Norm
a
l maps
:
你
可以通
过导
入一
张
普通的灰度
p>
图
(白色表示凸起,
黑色表示凹
进
)
Unity
会
自
动将它转换为
Norm
al Map
。
技
术细节
:
这
里使用
N
orm
al map
是一
种
“
Tangent space Normal
Map
”,
Tangent space
(正切
空
间
)
是一
个
跟
随
模型物体表面的空
间
。
在
这个
空
间
中,
z
轴
始
终从
表面指向外面。
Tangent space
Norm
al
Map
相
对
于另一
种
被
称为
“
Object space
Norm
al Map
”
来说
有点
复杂
,但是他有一些
优势
。
1
)可以使用
在各
种
奇形怪
状
的表面
2
)便于在同一物体不同
区
域或者不同物体
间复
用
具体<
/p>
关
于
Tangent Space
Norm
al Map
和
Object
Space Norm
al Map
的
区别
,下次再
讲
。
p>
如果
调
用
这个
p>
shader
失
败
,
则会调
用
Diffuse
这个
shader
,一般而言,
< br>该
shader
渲染代价低。
-
-
-
-
-
-
-
-
-
上一篇:好听的公司名字大全,公司取名字字大全
下一篇:医学英语主要前缀