insert 操作

语法

  • i(filePath)
  • i(filePath, upAxisOfGeometry)
  • i(filePath, upAxisOfGeometry, insertMode)
  • i(filePath, upAxisOfGeometry, insertMode, cleanupMode)

参数

  1. filePath - string
    要插入的几何资产的名称。 有关搜索位置的信息,请参阅资产和纹理搜索
  2. upAxisOfGeometry - selector
    • yUp - 几何的向上轴为 y。 默认值。
    • zUp - 几何的向上轴为 z。 为了适合 City Engine 中使用的坐标系,将几何围绕 x 轴旋转 -90 度。
  3. insertMode - selector
    • alignSizeAndPosition - 使几何适合范围。 默认值。
    • keepSizeAndPosition - 几何的大小和位置会保留,并且不会与范围对齐。 这与设置零范围维度 s(0,0,0) 相同。
    • keepSizeAlignPosition - 几何的大小和位置会保留。 几何被置于范围的 xz 中心,其边界框位于 y=0。
  4. cleanupMode - selector
    • numericalCleanup - 默认。 将对非常短的边和非常小的角度进行清理。 由此提升数值稳定性。
    • noCleanup - 几何未受影响(结构错误除外)。

描述

i 操作从文件中读取几何资产(3D 模型、面网格)并将其插入到当前形状的范围内。 对资产进行转换,使其边界框与范围重合。

如果 scope 的一个或多个大小 sx, sysz(即,宽度、高度或深度)为零,则范围修改如下:

  • 如果范围的所有三个大小均为零,则此类点状范围将用作要插入的资产的来源。 因此,范围的大小矢量设置为资产边界框的大小,即 scope.sx = asset.sx、scope.sy = asset.sy 和 scope.sz = asset.sz。 类似地,将使用资产中的值(即 scope.tx += asset.tx、scope.ty += asset.ty 和 scope.tz += asset.tz)平移 scope。 结果,插入的资产未被修改,并且其原始尺寸被完全保留。
  • 如果两个大小为零,则相对于非零大小修改此类线状范围。 例如,如果仅高度 (scope.sy) 不为零,则将计算以下缩放值:scalexz = scope.sy/asset.sy。 大小修改如下:scope.sx = scalexz*asset.sx 和 scope.sz = scalexz*asset.sz。 因此,在 scope.tx +=scalexz*asset.tx 和 scope.tz += scalexz*asset.tz 的情况下,为两个相应的轴修改范围的位置。 这样,插入的资产将被均匀缩放,即,资产的比例被完全保留。
  • 如果大小之一为零,则将相对于两个非零大小的平均值修改范围的大小。 例如,如果深度 (scope.sz) 为零,将执行以下计算:scope.sz = (scope.sx/asset.sx + scope.sy/asset.sy)*0.5*asset.sz。 请注意,scope 的位置未修改。
注:

支持的资产格式

资产插入支持以下格式:

  • Wavefront OBJ
  • Khronos COLLADA DAE
  • Autodesk FBX
  • Khronos glTF
  • Pixar USD
  • Autodesk DWG
  • buildingSMART IFC

OBJ 读取器导入材料描述文件 (.mtl),并且还了解负索引(从当前位置向后引用)。 它将以静默方式删除不受支持的几何/材料标签,并且还将删除不一致网格的法线或纹理坐标。

COLLADA 读取器可以导入无限的场景图,并且还可以读取转换节点。 附加标签将被忽略,并且它还将删除不一致网格的法线或纹理坐标。

FBX 读取器导入整个场景图,其中包括转换节点。 此外,还处理坐标单位和向上矢量信息。 自定义属性将被忽略,并且删除不一致网格的法线或纹理坐标。

glTF 读取器支持 glTF 2.0,并能够读取 glTF JSON (.gltf) 和 GLB 二进制 (.glb) 格式。 对于几何数据,均支持外部文件 .bin、GLB 存储的缓冲区和 base64 编码的缓冲区。 对于纹理数据,两个受支持的选项是存储在外部或 GLB 缓冲区内部的外部 JPEG 和 PNG 图像(不支持 base64 编码的图像)。 将导入完整场景图,包括转换节点和多个纹理坐标集。 蒙皮网格属性和动画将被忽略。 CGA material.shader 属性将设置为 CityEnginePBRShader。 有关详细信息,请参阅 PBR 材料属性

USD 读取器可导入所有类型为 UsdGeomMesh 的对象。 类型为 UsdPreviewSurface 的材料节点将自动转换为 CityEnginePBRShader 材料。

Autodesk DWG 导入程序仅可导入文件的 3D 部分。 其将默认丢弃所有仅 2D 元素。

buildingSMART IFC 导入器支持版本 2x3。 它将元素结构转换为已命名组。

备注:

  • 所有格式都支持按网格和按面的材料分配。
  • 网格一致性要求:网格的所有面必须具有相同的折点、纹理坐标和折点法线用法。 如果一个面不使用纹理坐标,而另一个面则使用纹理坐标,则所有纹理坐标都将从该网格中删除。 不会修改其他网格。
  • 模型导出相关性:可以将多次使用并且在 CGA 模型生成过程中未按几何或材料进行修改的资产作为实例导出,请参阅网格粒度导出设置。

相关内容

示例

窗口插入

下面的规则产生细分的质量模型。

Lot-->
   extrude(47)
   comp(f) { side : Facade  
           | top  :  X }	
	
Facade-->
   split(y) { { ~1 : X 
              | ~8 : Floor }* 
            | ~1   : X }
			   
Floor-->
   split(x) { { ~1 : X 
              | ~5 : Window }* 
            | ~1   : X }
细分的质量模型

图像中显示了在“窗口”规则中插入窗口模型的效果。

Window-->
   i("window.obj")
具有窗口模型的细分质量模型

插入和零范围维度

将要插入的资产显示在检查器中。 资产的坐标包含(12.3、4.3、7.2)的平移。

检查器中的资产

将资产插入范围的大小为零的形状中,会将范围的大小设置为资产的维度,并平移范围以保留资产的位置。 请注意,相对于形状枢轴的平移(左侧的小轴)与检查器中资产相对于原点的平移相同(上图)。

Head-->
   s(0,0,0)	
   i("beethoven.obj")
范围的大小为零的资产

如果范围大小在一维中不为零,则相对于非零维度设置其他两个维度。 这对于沿零维的范围平移同样有效。 在左图中,显示了原始范围(沿 x 轴为一维)。

Head-->
   s(9,0,0)	
   i("beethoven.obj")
具有非零范围维度的资产

如果范围大小之一为零,则将相对于两个非零大小的平均值修改范围的大小。 请注意,范围的位置未修改。

Head-->
   s(9,9,0)	
   i("beethoven.obj")
具有两个非零范围维度的资产

修剪平面和插入

左侧显示的圆柱模型将插入于立方体的四个侧面。

Lot-->
   primitiveCube()
   s(10,40,10)
   t(-5, 0, -5)
   comp(f) { side: Side }
	
Side-->
   t(0,0,-5)
   s('1,'1,10)			 
   i("cylinder.vert.obj")
已插入立方体的圆柱模型

已插入的圆柱体将用通过组件分割生成的修剪平面进行剪切。 在左侧的图片中,突出显示了一个“边”形状的几何(即剪切的圆柱体)及其修剪平面。 右侧是俯视图(顶部)的同一场景,以及上部区域的特写(底部)。

使用修剪平面剪切的圆柱体

请注意,在插入操作之前禁用修剪平面的方式会更改生成的几何。

Lot-->
   primitiveCube()
   s(10,40,10)
   t(-5, 0, -5)
   comp(f) { side : Side }
	
Side-->
   t(0,0,-5)
   s('1,'1,10)			 
   set(trim.vertical, false)
   i(cylinder.vert.obj)
使用已禁用的修剪平面的圆柱体