模拟城市中文网

 找回密码
 入住
搜索
查看: 15844|回复: 32

解释一下s3d是如何工作的

[复制链接]
发表于 2008-2-17 12:26 | 显示全部楼层 |阅读模式
以及如何用reader制作s3d

首先明确几个概念:
1.我们看到的3D图象都是由空间中的若干个三角形组成,制作3D模型时需要确定这些点
使用三角形是因为立体几何中不在同一直线上的三个点确定一个平面。几何中三角形的三个点是无序的,但在我们的视图中一个平面总是存在正反两个面,那么贴图时贴在哪一个面呢?因此在模型里三角形的三个点是有序的,贴图贴在逆时针方向旋转确定的那个面。如左下图,如果该三角形平行于你的屏幕,那么A-B-C决定的面就是面对你的面,而C-B-A决定的面就是背对你的面。这一点在reader的视图里两个面都会贴上图,但在游戏里就会严格按照上述的规则,自然是以游戏为准。

2.在SC4的插件制作中我们会用到两个坐标系。
右上图是立体几何中的标准坐标系,经过旋转我们在插件制作中会使用到两个坐标系。
左下角的是sc4pathfile使用的坐标系,右下角的是s3d和lotconfigdata使用的坐标系。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?入住

x

评分

参与人数 1威望 +5 收起 理由
天唐永thianz + 5 精品,謝謝

查看全部评分

发表于 2008-2-17 12:43 | 显示全部楼层
顶起,

 楼主| 发表于 2008-2-17 13:01 | 显示全部楼层

下方的视图和Anim页

用reader打开一个s3d file,上面是数据,下面是视图。
数据包括八个页,Hex页仅仅是各页的十六进制数据,Prop页也不用管它,下面我们会解释其他六个页:
Anim、Mats、UVmap、Prim、Indx、Vert。
下面先说Anim页。
s3d将一个3d模型切割成若干个Group,你可以在Anim页添加或删除这些Group。
添加一个Group,你可以在Name项为该Group命名(字符串),flags为0,后面vertex block、index block、prim block、mat block里的数字代表该Group引用的vert、index、prim、mats页中数据的编号,这样可以增加数据的复用性。这里需要的注意的是:1.一个Group只能引用一个mats(Fsh File),切割Group时需要注意这一点;2.任何情况下无损地缩小数据的体积对于使用效率来说都是有益的,对于一个较大的模型,合理地切割Group可以缩小文件体积;3.上面四个数据,请不要引用四个页中不存在的数据编号,否则可能导致游戏的崩溃。



视图包括三种模式:Wireframe(仅框架)、textured(仅纹理,也就是贴图的)、Both
下面是Group,Group的数目和Anim页的Group的数目相同,但前面的选项框却与Mats页的顺序对应。比如你选中或不选中Group0,在视图里将显示或不显示使用Materiral0的所有Group。
再下面是工具按钮,依次是Zoom in(靠近)、Zoom out(远离)、Default Position(默认位置、角度)、Rotate(旋转)、Show Grid(显示网格)、Show Faces、Day/Night。
这里需要注意的是:
1.Zoom in、Zoom out虽然起的是放大、缩小的作用,但和平面的放大和缩小还是有区别的;
2.Show Grid中的网格一格是20单位,而游戏里一个Tile的边长是16单位;
3.Day/Night里夜景效果是由FSH完成的,而不是s3d。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?入住

x
发表于 2008-2-17 13:05 | 显示全部楼层
怎样制作以获得s3d呢?如果是做车辆的话,还是用sc4bat?

快快k,
我在做新的捷运机车,正需要这些资料。

楼主快,去我的帖子看看,有问题请教。

[ 本帖最后由 柏海 于 2008-2-17 13:10 编辑 ]
 楼主| 发表于 2008-2-17 13:39 | 显示全部楼层

MATS页

MATS页描述的是s3d引用的fsh。
你可以在MATS页添加s3d引用的fsh(但好象只能remove,不能delete)。
Material的基本属性是name和id,这里的id引用的是fsh file的instance。当s3d的Group = 0xbadb57f1时,引用的fsh file的Group = 0x1abe787d,否则s3d.group = fsh.group。
当选中一个Material Group时,如果程序能找到该fsh,右边会显示其图象。那么怎样算是能找到呢?1.该Material确定的Instance在你当前打开的文件中,时间点是你打开该文件时,这里的文件是文本系统的文件;2.如果你设置了option里的sc4pathfile,那么如果该Material确定的instance在Simcity_x.dat里,时间点是你打开reader时。这样存在两个潜在的bug:1.显示的可能是同instance的另一个fsh file;2.当你打开一个文件是该文件里存在一个fsh file,你删除该fsh file后又选中了某个引用它的material group,可能导致reader崩溃,操作时需要注意。

Material还有很多属性,选项够多,也没一一试过。
Flags:一般选中alpha tes、depth tes、texturin、backface。
Alpha:一般选中Greater(大于)。
Depth:一般选中less than or equal(小于或等于)。
Src Blend:一般选中one;Dest一般选中Zero。

Wrap Mode(贴图模式):UV都选repeat(循环)吧,在设置UV时可以超出0-1界限。
Magnif.(magnification,放大):一般选nearest。
Minif.(minification,缩小):一般选nearest, no mipmapping。

nearest(最近的)、linear(线性的)、bilinear(双线性的)、trilinear(三线的);PS.谁告诉偶mipmap是啥?
 楼主| 发表于 2008-2-17 14:06 | 显示全部楼层

Indx页和Prim页

在楼顶说个,我们看到的3d图象是空间中的若干个三角形。

Indx页描述的就是空间中的点如何组织三角形。
Indx页包含若干个Indx Group,可以添加或删除。拉开一个Indx Group,可以看到是一个三列若干行的列表,每一行描述的是一个三角形,可以添加或移除。每一行的三个数字,描述的是三角形的三个点,这些点的数据由Vert Group提供,这里引用的是三个点在vert group中的序号。t1-t2-t3是循环有序的,也就是说0-1-2和1-2-0确定的贴图面是相同的,但和0-2-1确定的贴图面是不同的,需要遵守楼顶说的逆时针原则。

Prim页包含若干个Prim Group,可以添加或删除。Type一般就用triangles(其他也没试过),first vertex一般就用0,在这样的情况下,number_of_vertices = 3 * Indx_Group.size,请不要大也不要小,小的话Indx Group中靠后的三角形就不会被显示,大的话严重影响图象质量,甚至可能导致游戏崩溃。
 楼主| 发表于 2008-2-17 14:19 | 显示全部楼层

Vert页和UV map页

在楼顶说了3d模型需要确定空间中一系列的点。

Vert页描述的就是这些点在空间中的位置以及他们在贴图中的位置。
Vert页包含若干个Vert Group,可以添加或删除。拉开一个Vert Group,可以看到是一个五列若干行的列表,每一行描述的是一个点,可以添加或移除。每一行的五个数字,前三个描述的是该点在空间中的位置(X-Y-Z),坐标系就是在楼顶说的那个坐标系;后两个描述的是在贴图时该点在贴图上的位置(U-V),坐标系以左上角为原点,以平行向右为U的正方向,垂直向下为V的正方向,如果Mat页的Wrap Mode如果选择的是Clamb,那么数据范围是[0,1],否则可以超出该界限。

如果你觉得在Vert页确定UV不直观的话,那么可以在UVMap页确定每个点的UV。
这里的Material name应该是个Bug,它实际引用的是Anim页各个Group的name,也依次与Anim页的各个Group对应,右侧显示的是该Group引用的Material,显示的点也是该Group引用的Vert Group里的点的UV。
但我认为该页是鸡肋,因为没有标号,要把图上的点与VertGroup里的点一一对应也是见麻烦事。
 楼主| 发表于 2008-2-17 14:20 | 显示全部楼层

Done,预留

最后提醒,编辑后记得按上面的Apply确认更改。

另外,上面所说的列表都支持复制和粘贴
如果粘贴的内容里包含"\n"就可以换行

[ 本帖最后由 rszxh 于 2008-2-17 17:41 编辑 ]
头像被屏蔽
发表于 2008-2-18 09:45 | 显示全部楼层
xrr34
很好,很详细
楼主继续
头像被屏蔽
发表于 2008-2-18 10:03 | 显示全部楼层
mipmap叫做纹理映射贴图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?入住

x
 楼主| 发表于 2008-2-18 11:31 | 显示全部楼层
3Q
发表于 2008-2-18 13:26 | 显示全部楼层
要学的东西真的是太多了~
发表于 2008-2-18 23:00 | 显示全部楼层
靠,强悍的帖,我只知道三维立体图是什么原理,有空找找发过来。
发表于 2008-2-20 22:16 | 显示全部楼层
请问大图章,Mats栏的Material Name从何获得呢?是可以随意命名的吗?


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?入住

x
头像被屏蔽
发表于 2008-2-20 22:48 | 显示全部楼层
Material Name Material ID都可以改,改以后就成这样:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?入住

x
 楼主| 发表于 2008-2-20 23:11 | 显示全部楼层
纯文本的(LTEXT、UI、RUL、SC4PATH、LUA)不算

现在看到的字符串除了effectdir里的那个,其他都只是给人看的,不是给机器看的
发表于 2008-2-20 23:15 | 显示全部楼层
这是怎么回事?



帮我看看

这是源

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?入住

x
 楼主| 发表于 2008-2-20 23:26 | 显示全部楼层
UV没对准吧
这模型竟然用了那么多点……
发表于 2008-2-20 23:31 | 显示全部楼层
那个10660002的贴图不一定非要加上去吧?
头像被屏蔽
发表于 2008-2-21 10:16 | 显示全部楼层
原帖由 rszxh 于 2008-2-20 23:26 发表
UV没对准吧
这模型竟然用了那么多点……

UV没确定范围,那模型确实很多点、线,其实这么小的模型不用做那么复杂的,有些东西可以靠画出来
发表于 2008-2-21 10:53 | 显示全部楼层
原帖由 三桑叶子 于 2008-2-21 10:16 发表

UV没确定范围,那模型确实很多点、线,其实这么小的模型不用做那么复杂的,有些东西可以靠画出来



有办法在reader礼调整UV吗?

看了一下HSRP的模型,面的确是少很多,

看来我当初不该把考虑的太平滑。

这是HSRP的----------

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?入住

x
头像被屏蔽
发表于 2008-2-21 21:57 | 显示全部楼层
像上面那电车的导电杆,其实做成一个平面即可,之后用alpha处理
发表于 2008-2-21 22:02 | 显示全部楼层
原帖由 三桑叶子 于 2008-2-21 21:57 发表
像上面那电车的导电杆,其实做成一个平面即可,之后用alpha处理
我相信,精益求精总是没有错的。
发表于 2008-2-21 22:08 | 显示全部楼层
s3d你會做啦?你是看yo總的那篇教學還是大圖章的?還是兩篇都有……
头像被屏蔽
发表于 2008-2-22 09:52 | 显示全部楼层

回复 #23 CNAurora 的帖子

偶做插件的原则是用最少的点做出最好的效果,因为模型点越少,占用资源越少,游戏运行也越快,精简正是精益求精的体现——E=cm^2(很好很强大的公式)
发表于 2008-2-22 14:06 | 显示全部楼层
3,对称关系的物体贴图是不是就可以只做一面?所谓映射是什么意思?
发表于 2008-2-22 17:50 | 显示全部楼层
原帖由 天唐永thianz 于 2008-2-21 22:08 发表
s3d你會做啦?你是看yo總的那篇教學還是大圖章的?還是兩篇都有……

我教的
发表于 2008-2-22 17:51 | 显示全部楼层
原帖由 三桑叶子 于 2008-2-22 09:52 发表
偶做插件的原则是用最少的点做出最好的效果,因为模型点越少,占用资源越少,游戏运行也越快,精简正是精益求精的体现——E=cm^2(很好很强大的公式) ...

我追求的是尽可能的高精度。
发表于 2008-2-22 20:03 | 显示全部楼层
原帖由 CNAurora 于 2008-2-22 17:51 发表

我追求的是尽可能的高精度。


同意,

现在的机机性能都能胜任……,像战地2那种复杂的图形系统都没问题
 楼主| 发表于 2008-2-23 13:51 | 显示全部楼层

回复 #28 CNAurora 的帖子

精益求精的前提是全部是机器处理
一旦含有人工成分恐怕哪个点对哪个数据都对应不上了
 楼主| 发表于 2009-3-6 08:30 | 显示全部楼层
暂记

highway类型的exemplar引用
1.无nightlite
#2.双面贴图
 楼主| 发表于 2010-4-6 20:49 | 显示全部楼层
更新Material页的几个术语:
SRC Blend→Source Blend,源混合方式
Dest→Destination Blend,目的混合方式(写过游戏贴图代码的应该知道啥意思)
Magnif.→Magnification,放大
Minif.→Minification,缩小
nearest→Nearest Neighbor interpolation,邻近内插值法
bilinear→bilinear interpolation,双线性内插值法(这两个是数值计算里面的概念)
mipmapping→分级细化(纹理映射)贴图
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2010-4-8 22:18 | 显示全部楼层
很好,很好,有空翻译一下exemplar里各种property的名称吧

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?入住

x
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 入住

本版积分规则

小黑屋|手机版|模拟城市中文网

GMT+8, 2024-11-18 18:46 , Processed in 0.033708 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表