漾阳心情(学习版)

为了毕业设计而看的做的想的一些东西.不包含本人任何情绪.
阿水 @ 2006-04-25 20:22

3D游戏中的公告牌技术

类型:转贴 | 来源:整理 | 时间: 2006-03-24

公告牌技术,即billboard技术,在3D游戏中有着广泛的应用.它的本质就是用预先做好的几幅位图来代替3D物体,极大地节省资源和提高速度.仔细观察<<魔法门>>系列游戏,它的精灵,树木,物品都是二维图象,但由于它始终朝向观察者,你根本看不它"扁"的一面,所以给人一种立体的感觉.这种技术最大的优点是快.试想一个多边形构成的3D精灵,至少百余个多边形,而用billboard技术,只需处理两个多边形,优势不言而喻.其他3D游戏的爆炸效果,<<极品飞车>>中路旁的树木,都使用了该技术.

实现该技术的两个关键的步骤:

1.在合适的地方,朝合适的方向放位置一面"公告牌".这个公告牌,其实是一个共面四边形,一般使用
矩形.
2.把位图贴到矩形上.

1.方向的计算:

如果是做爆炸效果,要求该矩形的法向量始终指向观察者的眼睛,设矩形的初始法向量与Z轴重合,可以用以下代码获得其旋转矩阵:

D3DVECTOR vEyeLoc; //观察者眼睛的位置
D3DVECTOR vLoc; //公告牌位置
D3DVECTOR vAxis; //转轴
float fRads; //旋转角
D3DMATRIX matRotate; //旋转矩阵
//赋值语句略去......
D3DVECTOR v=vEyeLoc-vLoc;//从放置点指向视点的矢量
vAxis=CrossProduct(Normalize(v),D3DVECTOR(0,1,0));//用叉积求转轴
fRads=asin(Magnitude(vAxis));//该叉积的模的反正玄正好是旋转角
D3DUtil_SetRotationMatrix(matRotate,vAxis,fRads); //设置旋转矩阵

如果是做精灵,树木等,要求该矩形的法向量始终指向观察者且与地面平行,则更简单:

D3DVECTOR v=vEyeLoc-vLoc;//从放置点指向视点的矢量
vAxis=CrossProduct(Normalize(v),D3DVECTOR(0,1,0));//用叉积求转轴
D3DUtil_SetRotationMatrix(matRotate;,vAxis,g_PI/2.0); //g_PI=3.1415926

2.贴图的方式:

贴图的方式有两种,一是用颜色键,一是用Alpha.前者适合做精灵和树木等,后者适合做爆炸效果.

a)对于颜色键方法,如果是调色板表面,需要设置调色板;如果是高彩或真彩表面,需要逐点设置Alpha信息.具体可参照d3dtextr.cpp里的CopyBitmapToSurface函数.其实也可以简单地使用下面的代码(必须include d3dtextr.h):

//创建纹理,白色为透明色
D3DTextr_CreateTexture( "texture.bmp", 0, D3DTEXTR_TRANSPARENTWHITE);
......
//打开Alpha
pd3dDevice->SetRenderState( D3DRENDERSTATE_ALPHABLENDENABLE, TRUE );
//设置纹理层参数
pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
//设置混合因子
pd3dDevice->SetRenderState( D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE);
pd3dDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND,D3DBLEND_ZERO);
//绘图元
...........

b)直接使用Alpha.如果做的是爆炸效果,当然爆炸的边缘是半透明的,可以如下设置:

//假设你的爆炸的位图以黑色为背景
//打开Alpha
pd3dDevice->SetRenderState( D3DRENDERSTATE_ALPHABLENDENABLE,TRUE );
//设置混合因子
pd3dDevice->SetRenderState( D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE);
pd3dDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND,D3DBLEND_ONE);
//绘图元
...........
(完)



 
阿水 @ 2006-04-09 17:52

设定基本材质
 
作者:网络收集 来源:http://www.d9soft.com/ 时间:2005-7-14 2:28:55

 

 

 

在3D Studio MAX中基本材质赋予对象一种单一的颜色,基本材质和贴图与复合材质是不同的。在虚拟三维空间中,材质是用于模拟表面的反射特性与真实生活中对象反射光线的特性是相区别的。

基本材质使用三种颜色构成对象表面。

· Ambient Color(环境光颜色):对象阴影处的颜色,它是环境光比直射光强时对象反射的颜色。

· Diffuse Color(漫反射颜色):光照条件较好,比如在太阳光和人工光直射情况下,对象反射的颜色。又被称作对象的固有色。

· Specular Color(高光颜色):反光亮点的颜色。高光颜色看起来比较亮,而且高光区的形状和尺寸可以控制。根据不同质地的对象来确定高光区范围的大小以及形状。

使用三种颜色及对高光区的控制,可以创建出大部分基本反射材质。这种材质相当简单,但能生成有效的渲染效果。同时基本材质同样可以模拟发光对象,及透明或半透明对象。

这三种颜色在边界的地方相互融合。在环境光颜色与漫反射颜色之间,融合根据标准的着色模型进行计算,高光和环境光颜色之间,可使用材质编辑器来控制融合数量。被赋予同种基本材质的不同造型的对象边界融合程度不同,如图6-14所示。

 

设定基本材质
图6-14 基本材质效果

 

6.2.1 基本参数的设定

对材质的基本参数的设置主要通过Basic Parameters参数卷展栏来完成,如图6-15所示。

 

设定基本材质
图6-15 基本参数卷展栏

 

首先根据我们创建的对象要求在Basic Parameters参数卷展栏Shading着色清单中,选择材质的着色类型,在3D Studio MAX 4.0中有七种着色类型:Anisotropic、Blinn、Metal、Multi-Layer、Oren-Bayar-Blinn、Phong、Strauss每一种着色类型确定在渲染一种材质时着色的计算方式。

·如图6-16所示为Anisotropic着色方式。

 

设定基本材质
图6-16 Anisotropic

 

·如图6-17所示为Blinn着色方式。

 

设定基本材质
图6-17 Blinn

 

·如图6-18所示为Metal着色方式。

 

设定基本材质
图6-18 Metal

 

·如图6-19所示为Multi-Layer着色方式。

 

设定基本材质
图6-19 Multi-Layer

 

·如图6-20所示为Oren-Bayar-Blinn着色方式。

 

设定基本材质
图6-20 Oren-Bayar-Blinn

 

·如图6-21所示为Phong着色方式。

 

设定基本材质
图6-21 Phong

 

·如图6-22所示为Strauss着色方式。

 

设定基本材质
图6-22 Strauss

 

这几种着色方式的选择取决于场景中所构建的角色需求。当你须要创建玻璃或塑料物体时,可选择Phong或Blinn着色方式,如果要使物体具有金属质感,则选择Metal着色方式。在完成着色类型的选择后,着色基本参数卷展栏下的卷展栏会自动切换为与着色方式相应的卷展栏。在这一卷展栏内可对材质部件颜色:漫反射颜色、反光、不透明度进行设置。

在Shader Basic Parameters卷展栏中,另外有四个选项:Wire线框、2-Sided双面、Face Map面状贴图、Faceted面状材质。通过对这四种选项的设置,可使同一材质实现不同的渲染效果。

对于高度透明的三维对象如以单线条生成的面片物体,可以看到法线指向观察对象的表面后面的几何体。如果勾选了双面选项,3D Studio MAX将渲染那些对象不透明时被挡住的面,包括后部表面的高光。渲染双面材质比渲染正向的面要耗费更多时间。

首先使用工具栏中Shapes标签项中的Line工具,在视图中绘制一条不闭合的曲线作为花瓶的旋转截面,如图6-23所示。

 

设定基本材质
图6-23 不必合的曲线截面

 

1)进入Modify命令面板,选择Lathe旋转命令将曲线进行旋转生成花瓶的面片物体。

2)单击工具栏中设定基本材质按钮,在弹出的材质编辑器中击活一个示例框。单击设定基本材质Assign Material to Selection按钮将这一材质赋予花瓶物体。

在Shader Basic Parameters卷展栏中选择着色方式为Blinn。并且在Blinn Basic Parameters卷展栏中对Blinn材质的部件颜色及剖光度、反光强度等参数进行调整,参数如图6-24所示。

 

设定基本材质
图6-24 Blinn基本参数卷展栏

 

参数说明:Specular反光强度 Glossiness剖光度 Soften软化

Ambient环境色值如图6-25所示。

 

设定基本材质
图6-25 环境色值

 

Diffuse漫反射色值如图6-26所示。

 

设定基本材质
图6-26 漫反射色值

 

Specular高光区色值如图6-27所示。

 

设定基本材质
图6-27 高光区色值

 

这一场景进行着色效果如图6-28所示。

 

设定基本材质
图6-28 着色后的场景

 

这时材质并没有设置双面选项。瓶子物体的表面没有被完全显示出来。

3)回到材质编辑器,在Shader Basic Parameters卷展栏中勾选2-Sided(双面)选项,场景效果如图6-29所示。

 

设定基本材质
图6-29 进行双面设置后的花瓶效果

 

使用线框材质,可以将对象作为一个网格物体进行渲染。这种材质只显示顶的边界而不完全显示面。

1)选择上面的练习中创建的花瓶物体,并继续使用已设置好的双面材质。
  2)进入Material Editor对话框,在示例框中选择花瓶材质。
  3)单击基本参数卷展栏中的Wire线框选项。

材质着色显示效果如图6-30所示。

 

设定基本材质
图6-30 线框材质

 

在渲染材质时,可在Extended Parameters扩展参数栏中调整着色的控制器,如图6-31所示为扩展参数栏,在右侧的Filter选项是线框着色控制器。

 

设定基本材质
图6-31 扩展参数栏

 

·如果选择Pixels像素,无论几何体是否变化或物体的位置有多远,线框的厚度都是相同的。也就是说,像素网格在图像的任意位置显示的尺寸都是恒定的,效果如图6-32所示。

 

设定基本材质
图6-32 Pixels线框

 

·如果选择Units单位,线框就像是模型,在场景中会有近大远小的透视关系。变化线框对象同时变化线框宽度,效果如图6-33所示。

 

设定基本材质
图6-33 Units线框

 

无论使用像素或单位,Size(尺寸)调节按钮都是用于控制宽度。如果选择Units选项,尺寸则是按当前的世界单位来计算,单位的尺寸会相对于像素的尺寸大一些。

注意:网格对象可以投射阴影,但只有使用光影跟踪方式才可以得到精确的投射线框厚度,如图6-34所示。

 

设定基本材质
图6-34 线框材质投影效果

 

6.2.2 创建透明材质

透明材质在三维制作中是一种普遍使用的材质,利用它可以制作如玻璃、水等多种对象。透明材质具有反射和传输光线的特性,通过它的光线也会被染上材质的过滤色。

创建透明材质,首先要对基本参数卷展栏中的Opacity不透明值进行调整,通过减少材质的透明度来创建透明材质。

3D Studio MAX 4.0中,透明材质的类型主要是通过Extended Parameters扩展参数卷展栏中的Advanced Transparency高级透明控制器来控制。如图6-35所示为高级透明控制器。

 

设定基本材质
图6-35 高级透明控制器

 

我们继续使用瓶子场景,并将瓶子的材质设置为透明材质。通过高级透明控制器来控制瓶子的透明度。

1)进入材质编辑器,在示例框中选择瓶子材质并在基本参数卷展栏中设定Opacity=60。

打开Extended Parameters扩展参数卷展栏。在Advanced Transparency控制器中Falloff衰减选项中选择In方式(确定瓶子是内部透明度高而逐渐向外衰减的)并设定Amt数值为90(这个值为透明值,0为不透明)。着色场景效果如图6-36所示。

 

设定基本材质
图6-36 衰减方式为In

 

2)透明值不变,衰减方式为Out。着色后效果如图6-37所示。

 

设定基本材质
图6-37 衰减方式为Out

 

注意:向内扩散用于模拟在边缘处较厚的材质,如玻璃杯;而向外扩散用于模拟中心处比较厚的材质如云石。

3)在Advanced Transparency控制器中还包括三种透明类型:Filter过滤色、Subtractive相减、Additive相加。

Filter过滤色:将后面对象的颜色加入过滤色,如图6-38所示。

 

设定基本材质
图6-38 过滤色

 

Subtractive相减:用后面对象的颜色减去过滤色,如图6-39所示。

 

设定基本材质
图6-39 相减

 

Additive相加:忽略过滤色,用漫反射加上后面对象的颜色。相加透明可使对象有自发光的效果,如图6-40所示。

 

设定基本材质
图6-40 相加

 

6.2.3 创建发光材质

在3D Studio MAX 4.0中创建材质的自发光。可以在基本参数卷展栏中增加Self-Illumination 自发光值也可以直接选择自发光色。

在材质对话框中选择一个材质赋予场景中的灯物体,并设置材质的部件颜色如图6-41所示。

 

设定基本材质
图6-41 Diffuse色值

 

注意:自发光使用漫反射颜色替代环境色。在100%自发光时看不到环境色。

在Self-Illumination控制器中击活Color数值输入方式。在数值区输入发光值。灯片自发光效果如图6-42所示。

 

设定基本材质
图6-42 自发光为100的灯片效果

 

在Self-Illumination控制器Color选项勾选的状态下直接单击Color后的色彩调节器在弹出的Color Selector:Self-Illumination对话框中可直接选择自发光的颜色。

注意:自发光材质不能显示投射到它表面的阴影,并不受场景光源的影响。



 
阿水 @ 2006-04-01 15:45

1。请问做好的模型再打开时为何贴图会不见 ?


答:可能你的贴图的路径改变,找不到贴图,渲染开始时会给出贴图的原路径,按此路径将贴图恢复即可。另外,看看你的贴图材质是否还在机子上,有时你在作图中或许调用的是光盘中的材质,但在第二次打开图时光盘没有了,显然材质也就没了。


2。在给材质或贴图的时候显示不出图案,用看图工具可以看到,给到模型上就是一片红或其他颜色,没有图案?


答:一般在对物体进行了一些操作后易出现你说的情形,可使用uvw map修改器为物体指定贴图坐标,在modify面板。uvw map命令很强大。另外,在视图中,一般材质贴图不会显示出来,只有在渲染后才会显示,除非在菜单栏中进行一些设置。


3。不知道怎么样才能在造型上贴好材质,才能使效果图看起来不失真,有真实感,


答:不要用100%的材质贴图,应该多用色彩调和.当然图片也要,现在的硬盘大,多装图片无所谓。还有必须搞懂贴图坐标的用法!!!!!


4。我在使用3dmax 4中不小心点了一个菜单使材质球的颜色全部变成了黑白色,不知如何恢复?


答:只要删除就行了,重新再做。


5。请问各位高手,你们的boolen后的物件会不会贴不上材质?如何解决?         


答:由于布尔运算后的对象贴图坐标丢失,所以不好贴图,解决:给对象加一个UVW map修改器即可。


6。我想把在PHOTOSHOP中处理的站得很直的一个人的背面变成弯腰拾东西的,要如何处理呢?


答:2维图形不能像3维那样变形,除非把它做成3维的 。


7。请问在PHOTOSHOP中处理的图像贴到3D中如何可做出立体效果?


答:方法很多啊,比如将图应用到到置换贴图上,不就立体了吗?

在贴图面版里有个displacement,选择bitmap,后,找些黑白的花纹贴上,然后赋给物体,然后在物体上加上一个displace(好像是,这个方法我少用,记不清),好像就行了,要不然就直接把黑白图贴到maps的bump里面,再赋给物体就可以得到简单的起伏变化了.


8。一个平面的啤酒瓶的标签是平铺的,如何能将它绕着瓶子贴上去呢?还有啤酒瓶如何贴图呢?


答:(1)先做好啤酒瓶,上材质,棕色,Opacity为46,Glossiness为61

(2)用Maps/Diffuse通道,Maps选Mask,在Mask Parameters中Map选标签,Mask选标签蒙板.

再用用uvw map修改器,设置Cylinder.操作的关键是标签大小要设计好

用uvw map修改器,它的功能相当强大,仔细体会。


9。请问3dmax怎么为1个物体赋予多个贴图?

  

答:用多维材质。


10。如何可以作玻璃的效果!


答:玻璃材质:

在材质框中设计置:

Ambient R:80 G:80 B:80

Diffuse R:230 G:230 B:230

Specular R:255 G:255 B:255


Specular Level:100

Glossiness:25

Soften:0.1


选中color项


展开Maps卷展栏:

选中Opacity项,设数值为70。

点选None项,出现对话框,选择贴图。


另外,制作玻璃效果,光是调节参数是不够的,那样只是实现了透明效果。如果使用光线跟踪材质raytrace效果会更好。在map卷展的reflection和refraction贴图通道都使用taytrace(光线追踪),一个是反射,一个是折射。在加上高光贴图就可以了(用二维软件制作)。
11。我在家具设计中遇到要在三维曲面周边准确的上做一块弧型LOGO贴图,该怎么办呢?


答:要实现准确定位贴图,得使用复合贴图composite,在其子级贴图中选择想要得贴图。要在每个子级贴图的bitmap 参数卷展中设置贴图通道号码(map cannale)。然后modfy面板的材质修改器中选择uvw map,对每个composite的子级材质设置同bitmap卷展相同的贴图号码。在uvw map参数面板下部选择region fit,在物体上划出要贴图的位置即可

如果渲染出现logo覆盖整个物体现象,在logo贴图的bitmap卷展把tile下方的复选框去掉,关闭它的重复功能即可。我只是大概的说一下,细节的东西还要自己来体会。multi/sub-object(多重子材质贴图)也可实现定位贴图。只不过它需要通过edit mesh修改器来调整。


12。怎样能准确在圆形面添加贴图,比如硬币的正反面,这种材质应该处理成什么样的?

答:材质是方形的,贴图的图面做成圆形的,在UVW中调整大小,直到合适为止。


13。谁会做镜子的材质?


答:一般用反射贴图加光线跟踪,把材质的反射率设成100%就可以了。


14。我把球转化为NURBS然后用Make loft 在球上生成一系列的纬线,请问怎样才能把这些线给渲染出来


答:在NURBS不能渲染,你可用sphere建立球体 ,在材质编辑器中赋线框材质。


15。我做一块窗帘后,用快速着色观看时却一片黑暗(不是灯光问题)有谁能告诉我为什么?


答:你把这窗帘换个面或搞上个双面贴图就行了。


16。我在做一个透明的盆子时,想要像镜子一样反射周围的物体又想拆射后面的物体。不知如何下手?


答:这样试试:1 选择Raytrace材质(不是帖图)

2 调整Reflect of refr:系数来调整折射率

3 调整Reflect的灰度来控制反射

4 调整Transparency的灰度来调整透明度


17。用RHINO做的模型导入3dmax后是一个整体, 不知怎么样才能对一个整体模型上多种材质? 例如: 从RHINO导入一螺丝刀模型, 怎么样才能对把手,和转头分别上材质?


答:应先转为网格对象,后用子对象材质。建议使用多维次物体材质进行贴图。转为网格后,跟据需要给ID号,


18。请问在3dmax(3.0中)怎么才能改变示例球的数量?


答:在材质编辑框中右击弹出对话框就可以选择了.


19。作图大于24个样本材质球, 我不知道怎么才能在怎设置才能在3dmax4中有大于24个样本球?


答:保留一两个色球不用,再把这个色球拖到已编辑的任何一个材质上覆盖它,如果再想编辑原材质,用吸管吸出来,或者到场景材质中编辑.


20。怎么做地板折射反射物体的效果啊?


答:你可以这样,先指定一个过渡色贴图,就是材质编辑器下maps按钮中的第二栏长按钮,再出现的对话框中选bitmaps双击,出现贴图路径,选取合适的贴图,制定给地面,然后按住贴图的长按钮把她拖到reflection按钮上,再谈出的对话框中选择copy确定,将reflection的值限制在25%-30%,视环境和气氛而定。然后渲染。



 
阿水 @ 2006-03-20 22:25



 
阿水 @ 2006-03-18 14:08


---------------------------------------------------------
#VRML V2.0 utf8
Viewpoint
{
position 0 0 9
description "viewFront"
}
Shape
{
appearance Appearance
{
material Material
{
diffuseColor 1 0 0
}
}
geometry Box
{
size 1.0 1.0 1.0
}
}
Shape
{
appearance Appearance
{
material Material
{
diffuseColor 0 1 0
}
}
geometry Sphere
{
radius 0.7
}
}
Shape
{
appearance Appearance
{
material Material
{
diffuseColor 0 0 1
}
}
geometry Cylinder
{
radius 1.25
height 0.05
}
}
Shape
{
appearance Appearance
{
material Material
{
diffuseColor 1 1 0
}
}
geometry Cylinder
{
radius 0.4
height 2.0
}
}
Shape
{
appearance Appearance
{
material Material
{
diffuseColor 1 0 1
}
}
geometry Cylinder
{
radius 0.3
height 3.0
}
}
Shape
{
appearance Appearance
{
material Material
{
diffuseColor 0 1 1
}
}
geometry Cylinder
{
radius 0.1
height 6.0
}
}


 
网志分类
所有日志 (15)
虚拟现实 (4)
乱图乱画 (7)
未分类 (4)
最新评论
站内搜索
友情链接
我的歪酷 非非共享界
漾阳心情(flog版)
漾阳心情(动力版)
漾阳心情(MSN版)

歪酷博客

订阅 RSS

 

0003472