关于XPlane制作隧道及滑行桥效果实现的研究
0. 原理!
- 首先XPlane 里本身是不支持隧道这种东西的,但是它的模型可以添加各种的属性(Attributes)。
并且这些obj模型是可以设置层级属性从而实现在XPlane里显示的优先级别。
我们首先要了解XPlane的分层概念
OBJ的分层
命令: ** ATTR_Layer_Group
根据XPlane地景开发的obj8文件格式文档,在一个地景中,objs可以通过该命令设置层级以及offset实现obj之间的优先级。比如:group + 1意思为在group之后显示 (层1)。group -2 意思为优先两层现实obj。层的范围为 -5 到 +5。
层级(layer)名字必须为下面的有效层名字的其中之一
1 | terrain, beaches, shoulders, taxiways, runways, markings, airports, roads, objects, light_objects, cars |
注意:组 “airports” 会包含所有wed里的绘制(即wed内画的跑道,滑行道pol等),在这个大组里有下列几个子组(sub group)
1 | shoulders, taxiways, runways, and markings |
Markings组是用于滑行线,所以会在其他layer的上面
PS: 该分层概念同样适用于pol,lin等类型
”隧道“的原理
既然我们已经知道分层的概念了,那么隧道是通过什么能在XP里显示的呢?
- 首先我们假设有一个隧道的模型,并且制作一个其轮廓的平面,如下图:
*将这个平面的z高度调整为高出地平线(z = 0)一点点,比如 0.000001cm
- 那么当我们加ATTR_layer_group terrain -1的时候,我们的平面会优先于地形显示。如果我们将这个平面的贴图做成99%透明,那么直接放到xplane里看的话其实就相当于我们给它挖了个洞,里面啥都没有。
- 接下来我们将我们的隧道导出放置好后,在obj里添加ATTR_layer_group terrain -2 , 这时候xp就会优先显示隧道。
- 滑行桥同理,桥的围栏其实就相当于隧道地面凸起部分
- 效果图(感谢陈桥授权我自己私人转换以及使用zggg v2):
注意事项及小贴士
- 因为我们的隧道obj是设置成了terrain -2,但是优先级还是没有机场pol等marking高,如果隧道有高于地面的地方,需要将其拆成另外一个obj,并且不需要设置任何层级的优先(默认的话obj会直接显示,所以如果不动层级的话就不会出现pol在一些视角穿透obj的问题)
(忽略渣画工)
Horizontal line = 平面(地面)
Tunnel(below ground) = 隧道(低于地面部分)
(above ground) = 高于地面部分
Transparent cover = 透明盖子
cut tunnel into two parts(objs) = 将隧道按照高于地面低于地面切成两个部分
- 之外,如果是想要将视角伸到隧道内部,那么在隧道的模型里加上ATTR_hard指令即可
- 滑行桥的话记得要做与xp地面(z = 0)差不多高的桥面,并且改成hard,否则飞机飞过去会掉到隧道里.
Reference
https://developer.x-plane.com/article/obj8-file-format-specification/
https://forums.x-plane.org/index.php?/forums/topic/176020-tunnels-under-a-runway/
https://forums.x-plane.org/index.php?/forums/topic/80393-making-underpasstunnel/