“1.1 建模与模型”的版本间的差异

来自Infinitipedia
跳到导航 跳到搜索
(班班的機器人建立RSS索引)
(已恢复班图西撰史者对话)的编辑至Gundamfj的最后一个修订版本)
第168行: 第168行:
 
[[分类:帮助]]
 
[[分类:帮助]]
 
[[分类:技术]]
 
[[分类:技术]]
{{Template:官方设计说明文件}}     
+
{{Template:官方设计说明文件}}

2010年8月14日 (六) 05:53的版本

Bbsm.png 小提醒:假如你需要更多资讯,可以参考此页面的中英对照版本
下一页

此版本为班班校订的简化版,完全版请点我查看

Pro warn.png
以下文章含有许多未注解专业内容,可能包含比较多的相关领域专业知识,对于刚接触的阅读者可能将不是一篇客观易懂的文章,为了更加掌握此文章所传达之内容,建议你可以透过搜寻引擎或者Infinitipedia中类似领域比较入门的文章做参考。我们未来尽可能会为此文章多补充更多资讯,让这篇文章更加平易近人,简单易懂。

同时若你对这方面领域有所研究,我们也欢迎你参与编辑更多内容来达到此一目的。


档案格式

目前转码工具ASEToBin(用来将模型导入游戏的工具)只支持.ASE文件。很多3D软件可以生成ASE文件,但文件格式有微小变化。只有3DS MAX可以准确导出Infinity游戏引擎所需要的ASE文件。另外,一般需要对完成的模型作一些调整,比如将其缩放到合适的尺寸、将其旋转一定角度对齐方向,清理某些不必要的场景参数,等等。这些操作也要在3DS MAX(或者其他3D软件,详情可以参考精简你的模型)中完成。因此,提交的文件必须采用3DS MAX可以打开的格式。

也可以使用Maya, Lightwave, Sketchup, Blender, Milkshape, Wings3D等3D软件工具,但完成的作品必须用以下文件格式提交:

.3DS

.3DS格式为标准格式。但是要输出为这格式时要注意,.3DS格式的要求相对严格,文件中的贴图档案名称,对象名称,转成.3DS会变成只有8个半形字元的主名和3个半形字元的扩展名格式。

例如:

test_texture.jpg

test_texture.tga

会变成:

test_tex.jpg

test_tex.tga

也就是说,档名多余的部分会被自动删去,等等的状况,同样的场景的对象名称,都会被自动删去以符合标准,例如:

test_object1

test_ object2

会变成:

test_obje

test_ obje

这个时候就有可能会在之后输出产生问题,两个不同档名的档案同名了,所以在编辑时要特别注意这种情况,同样的材质的命名等等,都要注意这种情况的发生。

.blend

如果使用Blender,请直接提交.blend文件。

.OBJ

如果生成的.3DS文件不完整或损坏,请使用.OBJ格式导出。这样可能对动画或平滑效果造成一定影响,但基本的模型结构和UV贴图会完好保留。

不过要注意的是,.OBJ命名时,档名开头必须要为英文字型而不是数字,比如说 "A01" 而不是 "10A" 请特别注意。

.WRL

实在不行就用.WRL(vrml)导出。

操作流程小结

Workflow.png

操作流程简易示意图,这里我们是指 Infinity 官方

  • 目前来说,我们可以接受所有版本3dsmax格式,所以如果你用3dsmax建模,请直接提交.max格式。

单一场景内的对象

定义

一般,我们通常一般常规3D的档案里面可能会包含许多独立的模型对象(object),而不是单单只有一个模型,3D MAX的预设存档路径,就是一个叫做"Scense(场景)"的文件夹,顾名思义,就是一个包含着许多对象(objects)的档案,其实从下面那张图你可以简单的了解上面那一段文字是在解说什么。

3dsturcture.jpg

在Infinity中

在Infinity中一个船舰模型可以由或者必须由多个对象组成,越大型的船只,组成的对象就越多,同样的在Infinity中,并不支持模型变型的动画,所以说,做动画的部分必须为钢体变化。

ShipStruct01.jpg

从这张图可以清楚见到,一艘船舰模型是由许多不同的部位组成。

将模型中所有可脱落部件设定为独立的对象,如舰船的翼,引擎模块,货柜等等,而这些部份可以由更多小模型所组成。

ShipStruct02.jpg

模块化是Infinity模型的特色,Infinity的船舰是由不同的小模型所组成的一个模块,再由不同的模块组成一艘船舰。

将模型中所有模块化的部分设定为独立对象(见模块相关章节)。一艘舰艇上的所有模块都应包括在同一个CAD文件中,只有当有些模块对象为不同舰船模型共享时,才需要再额外另存成其他档案。

简单模块准则

将模型中尺寸过大的部分(按真实世界的标准)设定为独立对象。此举有助于3D引擎对对象的远近距离显示时的运算。一般而言,每250米分一个对象(即,如果一舰船模型长2千米,应该要将其分为8个对象)。

不要单纯根据模型结构分割对象。每个对象三角面数尽量不要超过1万,当然设计者可以更自由的切割,但是必须要有系统显示这些模型的关系。

将尺寸很小或结构简单的多个小对象合成一个比较大对象,也就是说把多个模型利用指令合成一个大模型,这样子可以减低模块化的工作时间。

一般而言,如战机等尺寸这种小于50米的小型模型,使用的对象数尽量不要超过5个。如航母、战舰等大型单位的对象(模块)数控制在3-25个。

模型细节

这里主要描述一些游戏模型必须注意的问题。

常见错误

一般建模者常常犯下下面这些错误,请务必详读并且避免。

多边形密度

不要在曲面上浪费过多的多边形数,尤其不必把小物体做得过细。相反,在较大的弯曲面上要应用较高的多边形密度。例如,一个在不显眼位置的或者很小的圆柱型就不必分割成40段。

Z轴叠合冲突

一般所指的共面问题,Z缓冲冲突,就是这一类型。

这是一个非常大众的问题,他发生的原因主要是在于两个太过于相近的面,你可以从下面的图中了解这些问题为何会发生。3D引擎在运算时,原本距离有一定距离的两个面,因为画面拉的很远,所以两面之间的距离缩小了,事实上电脑在处理时的确是把两面间距缩小,到相近到一定程度之后,到两个面几乎重和,就会发生这个问题,有你会看到一些模型会啥会闪烁着错面,就是这个原因。

Zbuffer.gif

基本上角度过小的夹角尖端处,一个很细或者很窄的两个面,在拉远之后,往往Z轴会近乎重和而发生这个问题。

隐面剔除(Backface culling)

隐面剔除就是当电脑在作3D图型运算时,一种节省渲染时所耗费资源的方式,原理很简单,就是在一个视野中看的到的面才渲染输出,看不到的面则不需要渲染出来以节省资源,你可以从下面这张图简易了解隐面剔除的运作方式。

Backface.gif

第一张图是完整的模型场景,总共有1002个面,第一张图渲染出总共大约有713个面,而下一张图是某个镜头所显示出的结果,实际上在这镜头渲染的面数,因为前方的障碍物档住而降低许多。白色的即是剔除掉而不需要渲染的面。

在Infinity中,许多船舰的模型可能高达数十万个面,此时隐面剔除就扮演了节省资源的一个很重要的过程,因为我们不需要一次把整个数十万个面渲染出来,而是只渲染我们看的见的部分,就许多方面,这大大降低了系统所需的资源。

也因此,为了建出符合隐面剔除有效率的船舰模型,建模者必须要注意一些问题。在Infinity中,隐面剔除的判断依据是针对单一个无缺口的模型,也就是说为了防止引擎判断错误,建模者必须注意,让每个节点(Vertex),该合并的就要合并,两条线合成一条线,如下图所示,或者翻转反面,把向内的转成向外的。

Fixingpoly.gif
顶点合并

确保去除无谓重复的顶点,一方面也可以节省硬件运算的资源。不过当然,更新完的对象的向外方向或平滑组后不要再合并顶点,只要合并该合并的,这样可能会导致平滑组错误。

法线/平滑组

多数情况下应用30°自动平滑就足够了。但有时必须手动修改某些区域,比如曲面的平滑。法线/平滑组在照明中要用到,错误的法线方向会导致照明错误,或在表面上出现“暗的”三角面或者有其他"奇特"光影的三角面。

丁字节点(T-junctions)

这是有关网眼的一个小问题,几乎是看不出来的,但最好还是避免。当三角面的一个顶点落在另一个三角面一边的中间时,就会产生丁字节点。实时表现时,节点处会有一个1像素大小的缺口。这在细节水平生成阶段可能会造成麻烦。见下图,尽量避免这种状况。

TJ.gif
共面多边形(Coplanar polygons)

小型舰船从远距离看不过是些小点,所以它们受共面问题影响不大。但对以公里计尺寸的大型舰船来说,用小厚度的共面表面来构造模型细节就会产生问题。

修正这个问题的方法是将这些表面整合为一个(在船体和模型细部之间放置一些顶点),然后去除船体下那些从模型外部看不见的部分。然而这一操作将大大增加模型的多边形数,务必谨慎。但是这是避免Z缓冲冲突的较好方法,也有助于细节算法的实现。

I3t.png

定稿

中轴(Pivots)

除非有充分理由将中轴设置在其他位置,必须在模型的中央设置中轴。

单位(Units)

请使用公制长度单位(米)
3DSMAX中系统单位改为米的设置方法:
中文版:
自定义 > 单位设置 > 系统单位设置 > 系统单位比例(1 Unit = 1 米)

英文版:
Customize > System Unit Setup > System Unit Scale (1 Unit = 1 Meters)

紧急更正!! 3Ds Max中请把系统单位设置为:英寸(Inches)显示单位设置为:米(Meters)
中文版设置方法:
自定义 > 单位设置 > 系统单位设置 > 系统单位比例(1 Unit = 1 英寸)

英文版设置方法:
Customize > System Unit Setup > System Unit Scale (1 Unit = 1 Inches)
Unitsetup.png

尺寸(Scale)

请确保模型大小符合相应模型分类的尺寸要求。在3DS MAX中有用来测量两点间距离的工具。

原点(Origin)

确保整个场景(即,包括所有对象)的中心落在场景的原点(0,0,0)上。

朝向(Orientation)

确保整个模型朝向Y轴正方向(即前向轴)。Z轴正方向作为上方。

多边形数(Polycount)

确保模型的多边形数接近要求的数值(参见各种模型的多边形数参照表)。多边形数按三角面数量计,不要按四边形数计。

各位设计者需要注意的几个关键问题

http://www.infinity-game.com/bbs/viewthread.php?tid=963

下一页