Jump to content
模组网
icedream

(翻译)NifSkope添加碰撞模型教程

Recommended Posts

本文转自《(翻译)NifSkope添加碰撞模型教程》,原作者为xyzeratul。
提醒:niftool的网页在墙外,bethsoft的网页已经没了。
所以,如果觉得太吃力的,这篇文章就不要看了。

说在前面:这个是帮JIPA翻译的东西,关于翻译的问题请尽量指出,但本人不负责解答任何关于教程本身的问题,因为我也看不懂。有能力的建议去看原文
NifSkop:添加碰撞模型

对于Blender使用者的提醒:

本指南对你很可能没有用
当前的Blender的输出脚本支持输出碰撞模型
查看在Niftools wiki页面上的Blender/Collision
但是这个篇指南的‘定义碰撞属性’部分可能会有帮助

这篇文章的目的是给出一个对在‘Finessing Physics’教程中提到的‘Better Collision Modelling ’的一步一步的指导。这些步骤的最终结果是创建一个会对周围环境进行的正确反应的简单物体。这里会给出一个极耗资源但也是最简单的碰撞模型制作方法。

目录
1:准备开始
1.1需要工具
1.2准备工作
2添加碰撞模型
2.1在NifSkope中载入你的模型
2.2准备arstatue01模型
2.3准备低模模型
2.4导入新数据
3渲染碰撞属性

准备开始

准备工具

×一个BSA解包工具,例如BSA Commander,BSA Unpacker或者TES4BSA来解开NIF files
×最新版本的NifSkope来编辑NIF文件,本教程中举例的截图取之于0.9.3和0.9.8版,请不时检查NifSkope的下载页。
×一个3D建模工具,例如Blender

这些工具的教程:
TES4BSA: BSA Unpacker Tutorial
NifSkope: NifSkope Documentation & Tutorials
Blender: Blender 3D:Noob to ProBlender Configuration for Import & Export of Nifs

准备工作:
×在你的3D建模工具中做好你的模型
×建立这个模型的低模版,不用加任何材质设置
×用NIF或者OBJ格式导出这些模型
    ×关于NIF导入和导出插件请看:NIF Importers and Exporters
    ×关于OBJ导出的帮助请看:niftools.sourceforge.net:Mesh import export
从OblivionDatameshes.bsa中解压datameshesdungeonsayleidruinsexteriorarstatue01.nif

添加碰撞模型
在NifSkope中载入你的模型
×启动NifSkope
×激活View菜单中Block Details,或者点F2
×在File菜单中选择Load,并找到你放解压出arstatue01.nif文件的地方,打开文件。如果到现在你把一切都做对了的话,一个肩膀上有只鸟的人就会出现在渲染窗口。
×在File菜单选择New Window,这会在NifSkope创立一个新的进程。在这里载入你的高模模型。
   ×如果你的模型是NIF格式,用和arstatue01.nif方法载入。
   ×如果你的模型是OBJ格式,在菜单中的Spells -> .OBJ -> Import Multi菜单中导入。
×再打开一个新窗口(New Window),在这里载入低模模型。
在每个NifSkope进程中,你应该可以看见正确的模型在渲染窗口中,加一个Block List窗口和一个
Block Details窗口。

准备arstatue01模型
选择这个arstatue01是因为它的碰撞几何数据格式允许导入自定义的几何模型。你将你的高模和低模数据导入这个文件,但首先应该移除不需要的数据。

gallery_1_68_4247.png

1.在NifSpoke中转到载入arstatue01的那个进程,这个将会是你的最终模型,所以把它存为另一个名字。
2.在Block List窗口中展开0 NiNode元素,右键7 NiTriStrips,在跳出的窗口选择Block -> Remove Branch。7 NiTriStrips元素现在应该没有了,移除剩下的4个NiTriStrips元素。这些元素包括这个模型一切信息(几何,材质属性),除了碰撞数据。剩下的红线框代表碰撞几何图形,激活Render菜单中的Draw Havok如果你看不到的话。
3.转到3 NiTriStripsData元素,并在右键后选择Block -> Remove。这个元素包含碰撞几何数据。现在渲染窗口应该空了。
gallery_1_68_36437.gif
4.在Block List窗口中选择5 bhkRigidBodyT,并双击在Block Details窗口中Translation的Value选项,把x,y,z的值改为零。这个位置为碰撞几何图形的原点(origo)
gallery_1_68_33590.png
准备低模模型
提示:除了用低模模型外,你还可以用NiTriShape或者NiTriStrips来从任何NIF文件中去模(BLOCK FROM),包括高模模型!

1.转到你载入低模模型的进程
2.展开0 NiNode元素,如果你只导入了这个模型的几何部分,它只包括一个NiTriShape 和NiTriShapeData元素,要确定你没有复制顶点在你的模型中,右键NiTriShape元素,并选择
Mesh -> Remove Doublicated Vertices. 
3.右键NiTriShape元素,在菜单中选择Mesh -> Face Normals(在NifSkope版本0.9.4之前: Make Normals.) 
gallery_1_68_52025.png
4.再次右键NiTriShape,在菜单中选择Mesh -> Strippify。这个将几何模型从三角模型转变为线条,线条化是必须的,因为arstatue01.nif的碰撞几何模型是用线条建筑的,并且低模的几何模型将要取代它。
gallery_1_68_9032.png


导入新数据
1.转到你的高模进程,右键NiTriShape元素,在菜单中选择Block -> Copy Branch。
gallery_1_68_11286.png
2.转到清理好的NIF文件(那个arstatue01.nif)。右键0 NiNode并选择Block -> Paste Branch。NifSkope可能会提示NIF版本问题,选择继续。高模的NiTriShape包括几何模型,材质数据现在将被复制上去。
gallery_1_68_39378.png
gallery_1_68_8617.gif
3.双击Block Details窗口Num Children属性的Value,这个数字控制NiNode中有多少子对象(Children),设为1.展开Children.NiNode的子对象没有自动更新,它还是包括6个参考对象,这个5个没有任何值的子对象是你必须移除的NiTriShapes,第6个是你必须粘贴的NiTriShape。
gallery_1_68_58814.gif

4.右键Children属性,选择Array -> Update。这个会依照Num Children更新Children list。
gallery_1_68_34843.gif
5.展开Children,并设置它的子对象值为你的NiTriShape (6)的参考数字,现在这个高模的NiTriShape被正确连接在NiNode上了。
gallery_1_68_18122.gif
6.转到你的低模,右键NiTriStripsData元素,选择Block -> Copy. 
gallery_1_68_224.png
7.转回那个清理好的NIF。右键0 NiNode元素,选择Block -> Paste.再选择继续如果NifSkope向你提示NIF版本问题。
gallery_1_68_14604.png
8.选择4 bhkNiTriStripsShape。双击Block Details窗口中Strips Data的Value,输入新NiTriStripsData (1)的参考数字,现在这个低模的几何模型数据已经和碰撞形状关联了。
gallery_1_68_7825.gif
9.接下来的步骤可以用在所有这种碰撞模型中。右键bhkNiTriStripsShape元素,选择Havok -> Pack Strips.这个bhkNiTriStripsShape 元素将转换为一个bhkPackedNiTriStripsShape。这个
NiTriStripsData将变为hkPackedNiTriStripsData。这个是NifSkope0.9.7版本带来的新特性。

10.这个网格(meshes)在这个时候可能没有连上,在Block List中选择5 bhkRigidBodyT元素,双击Translation的Value,试着修改x,y,z的值直到碰撞几何模型连上网格。

11.这个碰撞数据元素必须用一个特定的顺序,现在hkPackedNiTriStripsData还没有添上,选择Spells -> Sanitize 菜单中的Reorder Havok Blocks。要手动重排序这些元素,右键1 NiTriStripsData,选择Block -> Move Down,,注意到现在参考数字已经被改为2,重复Move Down,现在数字变为3,请查看Finessing Physics教程对元素顺序的正确解释。
gallery_1_68_35834.gif
12。保存NIF。

定义碰撞属性
先你的模型已经有碰撞几何模型了,但是它的材质属性(移动,撞击声,箭穿透)是继承雕像的,它被打的时候声音和石头一样,箭在它的表面跳飞,并且它是静止的。

材质设置:
选择bhkPackedNiTriStripsShape元素,展开Block Details窗口中列出的子形状(Sub Shapes)
双击Material属性Value(当前为HAV_MAT_STONE)。你可以获得一个可用材质的下拉的列表。这个带解释的列表可以作为一个工具提示(把你的鼠标移到材质属性的Type块上),从下拉列表中选择材质,或者输入一个适当的数字(可以从这里找到列表),这个设置控制打击声音,脚本声,箭穿透,和表面粒子效果。
gallery_1_68_3437.gif

碰撞属性
选择5 bhkRigidBodyT元素,值得注意的属性都用红点标注在图片上了,这里有一个可用的属性表。
gallery_1_68_3437.gif
最重要的属性:
×这个layer设置控制着碰撞模型在CS中的颜色,和其他属性一样,举例来说NONCOLLIDABLE的层(layer)会让碰撞身体像个可收割的物体(无碰撞,但是激活图标会出现)。带解释的层的列表也可以作为一个工具提示。
×Motion System,Unknown Byte 1和2,Quality Type决定物体的状态是静止还是移动,查看Finessing Physics教程中的bhkRigidBody解释。

用这些属性和其他NIF属性比较,对照着修改它们。
更多关于NIF格式和NifSkope的信息可以在niftools.sourceforge.net找到。 关于NIF格式和Havok系统的信息可以在这里找到。

问题讨论
如果你遇到任何问题,请阅读在CS论坛的指南贴,在那里发帖或者在作者的讨论页发帖如果你还是没有找到解决办法的话。

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...