加载中…
个人资料
去冒险的猪
去冒险的猪
  • 博客等级:
  • 博客积分:0
  • 博客访问:73,967
  • 关注人气:91
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

[Unreal3_Material]各材质节点详细图释讲解1

(2009-04-12 16:56:12)
标签:

unreal3

游戏引擎

shader

材质节点

教程

分类: [游戏美术]

前言,这些是我在Unreal3项目开发中总结的的教程,面向于初次接触U3的使用者,对在U3材质节点方面想要进阶的朋友也有一点帮助,教程里面有一些简单的例子来诠释各个节点的功能,并没有针对某种材质的单独例子。通过这篇大纲式的教程,能帮助你对U3材质节点有个大概的了解。

 

U3 Shader 不仅是给物体附上贴图,它也能做各种很酷的特殊效果,如材质动画——流动的岩浆,燃烧的火焰,雨雪效果,水体效果,天光等等等等。。。,还能制作通用的材质球模板,来提高制作效率。

 

如果你想在这方面达到一个高级阶段,是要具备一定的数学基础的,因为里面有很多节点功能与运算、向量、三角函数、矩阵有关~~这些高级的东西在真正制作时是很少用到的,所以只要掌握一小部分节点,就能胜任大部分基层的功能要求。

 

模块化的节点网络可以方理解,查错和修改,规范上类似于写程序

很多复杂的节点网络可以拆解成一个个小的功能模块,每个小的模块用来实现特定的功能。我们研究官方节点和自己做时可以用这种方法

每个节点运算时耗的资源量是不一样的,节点网络也需要优化。

 

如果你想转载这篇文章,请不要把这篇文章的来源去掉:http://blog.sina.com.cn/zjmjeo

一来是对我辛苦写这篇文章肯定,二来我可以有更多机会和你们这些朋友交流

 

Unreal3 Shader 各节点详细图释讲解

为了方便理解,我把所有已知的节点分成以下几个大类:

 

数值变换类

数值限制—Clamp, ConstantClamp
降低维数(通道过滤)—ComponenMask
小数进位取整—Ceil
去小数取整—Floor
只取小数部分—Frac
使向量模为1—Normalize

 

[Unreal3_Material]各材质节点详细图释讲解1

Clamp
作用:限制数值。无控制参数。Min, max没有输入时,自定义为无穷小和无穷大
原理:If x>max, then x=max; If x<min, then x=min; If min<=x<=max, then x=x;
举例1:如输入1,2,3,因为1<2,所以输出2;如输入2.5,2,3,因为2<2.5<3,所以输出2.5;如输入5,2,3,因为5>3,所以输出3

 

例1:

[Unreal3_Material]各材质节点详细图释讲解1

min=(1,0,0)
R(1,0,0) G(0,1,0) B(0,0,1) 白色(1,1,1) Clamp min=(1,0,0)
左上角R(1,0,0)每个数值和 min(1,0,0)比较,因为每个数值都相等,结果为(1,0,0);
左下角G(0,1,0) 做三次比较0<1,输出1;1>0,输出1;0=0,输出0,结果输出(1,1,0);
同理,右上角输出(1,0,1);
同理,右下角输出(1,1,1)。

 

例2:

[Unreal3_Material]各材质节点详细图释讲解1

如图min为图片本身R通道
左上角R(1,0,0)每个数值和 min(1,1,1)比较,结果为(1,1,1);
左下角G(0,1,0)和(0,0,0) 比较,结果输出(0,1,0);
右上角B(0,0,1)和(0,0,0)比较,输出(0,0,1);
右下角(1,1,1)和(1,1,1)比较,输出(1,1,1)。

Tips:
1.一维常数0.5在与三维常数作计算时,可以换算成RGB(0.5,0.5,0.5),分别与三维常数各个值分别作计算。
2.引擎中对颜色的数值定义为0-1,超过1的颜色仍然存在,我称之为颜色的强度;Photoshop中定义为0-255,超过255的颜色不存在


[Unreal3_Material]各材质节点详细图释讲解1

ConstantClamp:常数限制,与Clamp类似,min和max为自定义,只能是常数

 

[Unreal3_Material]各材质节点详细图释讲解1

ComponenMask:通道过滤,Mask(R)表示不过滤通道R。

 

例1:

[Unreal3_Material]各材质节点详细图释讲解1

Mask (R) =只取红色通道

算法:

Mask(R)[R,G,B]=[R,0,0]

 

例2:

[Unreal3_Material]各材质节点详细图释讲解1

Mask(G,B) =取GB通道,以RG通道的形式输出

算法:

Mask(G,B)[R,G,B]=[0,G,B]

 

[Unreal3_Material]各材质节点详细图释讲解1

StaticComponentMaskParameter:和Mask功能一样,可以在MaterialInstance中调节

 

Tips:

所有名字里含Parm的节点都可以在MaterialInstance中调节

 

[Unreal3_Material]各材质节点详细图释讲解1

Ceil:让小数点进位,变成整数0.2->1;1.4->2
在此颜色会从各个像素作计算,等于0的输出为0,大于0小于1的输出为1。

 

[Unreal3_Material]各材质节点详细图释讲解1

Floor:去小数变成整数,0.2->0;1.4->1。与Ceil类似
在此颜色会从各个像素作计算,等于1的输出为1,大于0小于1的输出为0。

 

[Unreal3_Material]各材质节点详细图释讲解1

Frac:和Floor和Ceil类似,只取小数,3.4->0.4
在此颜色会从各个像素作计算,等于0和1的输出为0,小数部分输出为其本身。

 

[Unreal3_Material]各材质节点详细图释讲解1

Normalize:使输出向量的模为1。如一个三维向量a (x, y, z),要使输出新的向量a’的值|a’|=1;计算方式:|a|=(x2+y2+z2)1/2,则输出向量a’为(x/ |a|, y / |a|, z / |a|),且|a|!=0。
同理:

一维数a=x,|a|=|x|,输出a’=x/ |x| (x>0,a’=1; x<0,a’=-1;x=0,输出无效)
二维向量a (x, y), |a|= (x2+y2)1/2,输出a’=(x/ |a|, y /|a|, z /|a|)

 

例1:

[Unreal3_Material]各材质节点详细图释讲解1

输入颜色(5,2,3),作Normalize运算后。
输出颜色应该是(0.8111,0.3244,0.4867)
对比发现颜色是一样的。可以理解为改变颜色强度。

 

例2:

[Unreal3_Material]各材质节点详细图释讲解1

运算结果可以理解为:把颜色(R,G,B)各值等比例缩放后,满足(R2+G2+B2)1/2=1。
左图中,Frac运算之后,除纯黑色区, R:G:B的比值是一致的,为x:0:0,0<x<1,只是颜色强度不一样。最后输出都变成(R2+G2+B2)1/2=1 ,因为G=0,B=0,所以这块区域的颜色为(1,0,0)。

 

Tips:

1.颜色(R,G,B)是三维向量
2.图片属于矩阵,如512*512 就是其矩阵大小。

3.U3常用的图片是2次幂大小的TGA格式图片

4.很多时候,图片代表的是数字而不是颜色。我们常增加一些自定义控制参数去调整Shader,其载体就是一张张贴图,如高光贴图,法线贴图。简单说来,引擎就是把贴图转化成矩阵进行一系列运算后,形成一个新的矩阵,在转化为我们可以看到的颜色,这就我们最后看到的渲染后的画面了。

 

数学方程运算类
定义数值1~4维—Constant
自定义运算方程—MathBox
绝对值运算—Abs
加法运算—Add
减法运算—Subtract
乘法运算—Multiply
除法运算—Divide
平方根运算—SquareRoot
幂运算—Power
1-x—Oneminus

[Unreal3_Material]各材质节点详细图释讲解1

常数节点,从上到下依次为:

Constant:常数
任何整数,小数   5,0.25等


Constant2Vector:2维常数
例如平面坐标就是2维常数


Constant3Vector: 3维常数
颜色RGB就是3维常数


Constant4Vector:4维常数

RGBA就是4维常数

 

[Unreal3_Material]各材质节点详细图释讲解1

ScalarParameter:
与Constant作用相同,不同点在与Parm可以在MaterialInstance中调参数,但Constant不能

 

[Unreal3_Material]各材质节点详细图释讲解1

VectorParameter:
与Constant4Vector作用相同,不同点在与Parm可以在MaterialInstance中调参数,但Constant4Vector不能

 

[Unreal3_Material]各材质节点详细图释讲解1

MathBox (Tiberium Engine Only):自定义运算方程,包含通道过滤功能(同ComponenMask ),输入值可以向低维数转化,参与运算的ABCD各数不属于同一维,依次屏蔽ABGR通道到最小的维数。不同维运算会出错

例1:

[Unreal3_Material]各材质节点详细图释讲解1

 

例2:

[Unreal3_Material]各材质节点详细图释讲解1

 

[Unreal3_Material]各材质节点详细图释讲解1

 MathBox2 (Tiberium Engine Only):与MathBox类似,自定义运算方程,不包含通道过滤功能,参与运算的ABCD各数必须属于同一维,否则出错

 

 

[Unreal3_Material]各材质节点详细图释讲解1[Unreal3_Material]各材质节点详细图释讲解1[Unreal3_Material]各材质节点详细图释讲解1[Unreal3_Material]各材质节点详细图释讲解1[Unreal3_Material]各材质节点详细图释讲解1[Unreal3_Material]各材质节点详细图释讲解1[Unreal3_Material]各材质节点详细图释讲解1

 

 

[Unreal3_Material]各材质节点详细图释讲解1

 [Unreal3_Material]各材质节点详细图释讲解1

 用于取一个颜色的反象等

 

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有