添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
奔放的黄瓜  ·  JMS、MQ、ActiveMQ - 知乎·  1 年前    · 
热心肠的烈酒  ·  java ...·  1 年前    · 
PQO:高仿 3D tiles 规范

PQO (Progressive Quantized Object) 是 3D tiles 格式的简化版本,扁平化了一些字典字段,去除了 GIS 相关的属性,增加了 RTC_CENTER 等字段。本格式中所有对象都是 tile,tile 之间通过 children 字典嵌套。

空间直角坐标系:左手(同 UE4),+Z轴向上

所有距离单位:厘米(同UE4)

所有角度单位:弧度

tile: Dict 或 String

tile字典的所有属性:

transform: Vector[16]

OBB: Vector[12]

AABB: Vector[6]

sphere: Vector[4]

RTC_CENTER: Vector[3]

geometricError: Vector[1]

uri: String

refine: Enum(String)

children: List

除此之外,可自定义任何字段。

example

"version": 1, "visibleGeometricError":200 "geometricError": 50, "AABB": [-1, -1, -1, 1, 1, 1], "RTC_CENTER": [0, 0, 0], "pak":pak的路径字符串 "uri": "pak内部的mesh路径", "children": [ "AABB": [-1, -1, -1, 1, 1, 1], "geometricError": 20, "uri": "pak内部的mesh路径", "transform":字符串, "AABB": [-1, -1, -1, 1, 1, 1], "geometricError": 20, "uri": "pak内部的mesh路径", "transform":字符串, "children": "AABB": [-1, -1, -1, 1, 1, 1], "geometricError": 10, "uri": "pak内部的mesh路径", "transform":字符串, "AABB": [-1, -1, -1, 1, 1, 1], "geometricError": 10, "uri": "路径.json",

transform: Vector[16]

1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1

The transform property is a 4x4 affine transformation matrix, stored in column-major order, that transforms from the tile's local coordinate system to the parent tile's coordinate system—or the tileset's coordinate system in the case of the root tile.

OBB: Vector[12]

X, Y, Z, length.x, length.y, length.z, width.x,  width.y,  width.z, height.x, height.y, height.z

Oriented Bounding Box:有向包围盒,可任意旋转的长方体。

OBB由中心点和3个方向向量定义,3个向量相互垂直,分别代表OBB的长宽高的方向与大小(一半)。

AABB: Vector[6]

X, Y, Z, length, width, height

Axis Aligned Bounding Box:轴对齐包围盒,类似3d tiles中的region类型,但region是由最小顶点和最大顶点的坐标来定义,我们的AABB由中心点和长宽高来定义,目的是与UE保持一致。

sphere: Vector[4]

[x, y, z, radius]

包围球:最简单的包围体,中心点坐标+半径

RTC_CENTER: Vector[3]

[x, y, z]

RelativeToCenter:模型及包围体的原点坐标

geometricError: Vector[1]

和3d tiles一样,几何误差代表当前lod与真实物体的最大差距(估值),需要每一帧计算出屏幕误差(单位:像素),计算公式:

sse = (geometricError ⋅ screenHeight) / (tileDistance ⋅ 2 ⋅ tan(fovy / 2))

The geometricError property is used to quantify the visual error that would occur if the

tileset was not rendered. When the visual error exceeds a certain threshold, then the

tileset and the tiles that it contains are considered for rendering.

uri: String

3D模型文件路径,或者其他json文件的引用。当uri为json的引用时,children字段失效。

refine: 枚举string

refine决定在相机进入子叶后,当前tile是否滞留

default: "REPLACE"

"REPLACE": 不滞留

"ADD": 滞留

children: List

子成员列表,成员类型可以是一个 tile(字典),也可以是一个 tile 的引用(string)

几何变换的顺序

模型顶点最终的绝对坐标需要经过以下几个步骤得出:

模型内部的变换,如 gltf 的 node 嵌套

transform 字段的变换

RTC_CENTER 字段的平移

父级的变换...

与3d tiles包围体的区别:

支持3种包围体:OBB、AABB、sphere。3 选 1。

包围体应当包围transform之后的模型

包围体的原点是RTC_CENTER,而不是世界原点