diff --git a/.trellis/spec/blender/asset-generation.md b/.trellis/spec/blender/asset-generation.md index 0766439..7c48990 100644 --- a/.trellis/spec/blender/asset-generation.md +++ b/.trellis/spec/blender/asset-generation.md @@ -259,6 +259,17 @@ tilt_y = TILT_JITTER * math.cos(index * 0.927295) | 靠调 `FOLIAGE_EMISSION` 提亮植被 | 用错了旋钮,该调 albedo gain | | 在 `MATERIALS` 中间插入条目 | GLB 材质索引整体平移 | +## 第三方资产导入的源文件边界 + +第三方 Blend 只属于一次性入库工具的输入,不能成为 `build:area` 或 Cesium 预览的运行时依赖。 +完成拆分后,仓库必须包含可直接消费的 glTF/bin、共享贴图、manifest 和人工预览;原始下载文件可 +以删除。导入工具应将源文件路径作为显式 `--source` 参数,manifest 最多保留源文件名作溯源, +不能写死用户 Downloads 目录。 + +删除原始文件前必须确认入库资产已通过结构验证和人工预览;删除后若需重新导入,必须重新取得 +同一 Blend 与其外部贴图。`blender/tools/split_lowpoly_cars.py` 是这一约定的实例,不参与区域 +构建阶段。 + --- ## 相关 diff --git a/.trellis/tasks/08-05-lowpoly-cars-assets/check.jsonl b/.trellis/tasks/08-05-lowpoly-cars-assets/check.jsonl new file mode 100644 index 0000000..9dd3234 --- /dev/null +++ b/.trellis/tasks/08-05-lowpoly-cars-assets/check.jsonl @@ -0,0 +1 @@ +{"_example": "Fill with {\"file\": \"\", \"reason\": \"\"}. Put spec/research files only — no code paths. Run `python3 .trellis/scripts/get_context.py --mode packages` to list available specs. Delete this line once real entries are added."} diff --git a/.trellis/tasks/08-05-lowpoly-cars-assets/design.md b/.trellis/tasks/08-05-lowpoly-cars-assets/design.md new file mode 100644 index 0000000..5bd61af --- /dev/null +++ b/.trellis/tasks/08-05-lowpoly-cars-assets/design.md @@ -0,0 +1,54 @@ +# 设计:LowPoly Cars 资产库 + +## 边界与目录 + +本任务独立于区域构建和 Cesium 预览。新增目录 +`assets/models/custom/lowpoly_cars/`,其内部结构与 Shapespark 植物包一致: + +```text +lowpoly_cars/ + manifest.json + index.html + textures/ + /model.gltf + /model.bin + /preview.png +``` + +源 `.blend` 保留在用户 Downloads,不复制入仓库;`manifest.json` 保存源文件名与根对象名, +以便可追溯而不引入二进制源文件。 + +## 拆分与规范化 + +新 Blender 工具以 Empty 根节点和其全部后代 mesh 作为一辆车。根节点名是稳定初始 ID: +`car_a01_002`、`truck_a01_001` 等。名称重复的车辆保留全部条目,不依据几何统计猜测合并。 + +导出前把每辆车的根节点变换 bake 到其后代网格,再把局部原点置于车辆的水平中心和最低接地点。 +规范化的预览坐标为 X 前进、Y 向上、Z 横向;若源根节点的朝向不符合它,工具按对象族显式 +变换并由渲染缩略图复核。不能依赖源文件中用于陈列的全局坐标、`0.001` 缩放或 90°/180°旋转。 + +保留同一辆车的 mesh 分件与材质槽,避免为图库的便利合并导致窗、轮胎等材质丢失。图像依赖 +集中复制到 `textures/`,glTF 以相对路径引用,重复车款不能复制同一张贴图。 + +## 产物与预览 + +工具为每辆车导出 glTF/bin,使用隔离的三点布光、地面阴影与固定透视相机输出 +`preview.png`。`index.html` 只消费 manifest,响应式显示缩略图、ID、类别、三角面数、尺寸和 +材质;它不依赖 Cesium、Node 打包或区域输出,通过 HTTP 直接查看。 + +`manifest.json` 的每项至少包含 `id`、`name`、`category`、`sourceRoot`、`model`、`bin`、 +`preview`,以及 `metrics.vertices`、`metrics.triangles`、`metrics.dimensions`、 +`metrics.materials`。`category` 取 `car`、`truck` 或 `tractor`。 + +## 风险与回退 + +Blender 的沙箱内加载会崩溃,因此导出、渲染和检查仅通过受批准的沙箱外 Blender 调用。若 +某一根节点导出失败,工具记录错误并继续其余资产;manifest 只收录有效产物,失败根节点写入 +报告。删除 `lowpoly_cars/` 不影响任何当前构建阶段或 Cesium 巡航。 + +## Cesium 候选集 + +候选集固定为 `car_a01_002`、`car_a02_002`、`car_a03_001`,以及按稳定 ID 排序的前三辆 +卡车 `truck_a01_001`、`truck_a02_001`、`truck_a03_001`。预览构建把这六个 glTF/bin 与一张 +共享 512px 贴图复制到区域输出目录并改写其 image URI;浏览器页面加载时从文件名列表随机选 +一项,所有巡航实体在本页使用相同模型。这样构建产物保持确定,随机性只属于用户可见的会话。 diff --git a/.trellis/tasks/08-05-lowpoly-cars-assets/implement.jsonl b/.trellis/tasks/08-05-lowpoly-cars-assets/implement.jsonl new file mode 100644 index 0000000..9dd3234 --- /dev/null +++ b/.trellis/tasks/08-05-lowpoly-cars-assets/implement.jsonl @@ -0,0 +1 @@ +{"_example": "Fill with {\"file\": \"\", \"reason\": \"\"}. Put spec/research files only — no code paths. Run `python3 .trellis/scripts/get_context.py --mode packages` to list available specs. Delete this line once real entries are added."} diff --git a/.trellis/tasks/08-05-lowpoly-cars-assets/implement.md b/.trellis/tasks/08-05-lowpoly-cars-assets/implement.md new file mode 100644 index 0000000..d153bf1 --- /dev/null +++ b/.trellis/tasks/08-05-lowpoly-cars-assets/implement.md @@ -0,0 +1,27 @@ +# 实施计划:LowPoly Cars 资产库 + +1. 在 `blender/tools/` 增加可重复执行的拆分/导出工具,读取指定 `.blend`,枚举命名 Empty + 根节点,bake 变换、规范化坐标并分别导出车辆。 +2. 让工具生成共享贴图目录、逐车 glTF/bin、缩略图、manifest 与静态图库 HTML;输出排序必须 + 按稳定 ID,避免重复运行产生无关差异。 +3. 为导出结果提供轻量结构检查:验证 manifest 路径存在、ID 唯一、几何指标为正、模型和缩略图 + 可读取;对源根节点与导出条目数量做对账。 +4. 在沙箱外运行导出与缩略图渲染,目检图库中的普通车、卡车和拖拉机,核对朝向、落地与比例。 +5. 运行 Python/Node 语法检查和现有 preview 测试,确认不触及 `vehicle-model.js`、路线 JSON 或 + Cesium 默认预览;记录验证结果。 +6. 验收后提交资产库、工具、来源说明与必要的代码规范;不改当前默认巡航模型。 + +## 验证 + +```bash +blender --factory-startup --background --python blender/tools/.py -- --source --output assets/models/custom/lowpoly_cars +python3 blender/tools/.py --verify assets/models/custom/lowpoly_cars +node --check scripts/lib/vehicle-model.js +npm run test:preview-assets +git diff --check +``` + +## 回滚 + +本任务只新增独立资产库和工具。若某项导出或方向不合格,删除该新增目录和工具即可;当前区域 +构建和 Cesium 预览没有依赖它们。 diff --git a/.trellis/tasks/08-05-lowpoly-cars-assets/prd.md b/.trellis/tasks/08-05-lowpoly-cars-assets/prd.md new file mode 100644 index 0000000..39a4043 --- /dev/null +++ b/.trellis/tasks/08-05-lowpoly-cars-assets/prd.md @@ -0,0 +1,53 @@ +# 拆分 LowPoly Cars 车辆资产 + +## Goal + +将用户下载的 `011.+LowPoly_Cars_01_blend.blend` 拆分为可独立检查、可被后续 +Cesium 车辆预览复用的低模车辆资产库;沿用 Shapespark 植物包的资产目录、清单与 +浏览器预览体验。 + +## Confirmed Facts + +- 源文件位于 `/Users/que01/Downloads/011.+LowPoly_Cars_01_blend.blend`,为 Blender + 3.0、64 位小端格式,约 25 MB;不应直接作为仓库产物引用。 +- 当前 Blender 4.5.12 LTS 在沙箱中加载会崩溃;在沙箱外可稳定读取,故拆分和渲染应通过 + 沙箱外 Blender 调用完成。 +- 源文件有 12 个可导出 Empty 根节点:5 个普通车条目(其中 `car_a01`、`car_a02` 各有两份 + 同名变体)、4 个卡车、3 个拖拉机;每项由 11 到 19 个 mesh 组成。 +- 根节点保存了展示排布用的 `0.001` 缩放与 90°/180°旋转。拆分必须应用这些层级变换,统一 + 比例、地面基线和车辆前进轴,不能将源文件世界坐标原样导出。 +- 主体使用共享 `carmaterial`(含 base-color 图和 normal map),拆分后应共用贴图,不复制到 + 每一个车辆目录。 +- 植物包位于 `assets/models/custom/shapespark_plants/`:每个资产拥有 + `model.gltf`、`model.bin`、`preview.png`,共享贴图放 `textures/`,并以 + `manifest.json` 和 `index.html` 提供机器与人工检查入口。 +- 已完成的车辆连续路线系统读取预览车辆 glTF;新资产库在验收前不得破坏该默认车辆或 + 现有路线播放。 + +## Requirements + +1. 稳定读取源 `.blend`,记录其集合、对象、材质、几何指标、坐标朝向和许可/来源信息。 +2. 按可独立使用的车辆变体拆分为 glTF 资产,保留正确比例、轮胎落地基线、前进朝向与 + 原始材质语义;共享贴图不得为每辆车重复复制。 +3. 在 `assets/models/custom/` 下创建与植物包一致的清晰目录、JSON manifest 与简洁的 + HTML 图库预览;每辆车显示缩略图、三角面数、尺寸与材质信息。 +4. 预览页必须可通过本地 HTTP 查看,不依赖主场景或 QGIS;缩略图应能帮助比较车款、颜色 + 和比例。 +5. 新库经过 Blender/glTF 结构检查;从普通车中固定选 3 个、从卡车中选前 3 个组成候选集, + Cesium 每次打开预览时从该 6 个模型随机选一辆作为巡航车辆。 + +## Acceptance Criteria + +- [ ] 能稳定枚举源文件内的可导出车辆,并把每个产物与源对象/集合对应起来。 +- [ ] 每个可用车辆有独立 `model.gltf`/二进制数据、预览图与 manifest 条目;预览图和 HTML + 能正确加载。 +- [ ] manifest 为每项记录稳定 ID、名称、来源、几何指标、尺寸、材质和相对路径。 +- [ ] 人工查看图库可比较全部导出的车辆;没有重复贴图、明显错误的坐标轴或悬空/埋地车轮。 +- [ ] 现有目标区域的 Cesium 巡航预览仍可生成和播放。 +- [ ] 目标区域预览目录包含选定的 6 个车辆模型与一张共享贴图;页面刷新会从候选集随机选车。 + +## Out of Scope + +- 不在本任务中制作车辆动画、转向轮、交通行为、LOD 或性能压缩策略。 +- 不修改 QGIS 工程、道路生成或上一轮已经确认的车辆连续路线逻辑。 +- 不引入车辆动画、逐车随机分配、性能压缩或车辆选择控件;本轮只在页面加载时随机确定一种车。 diff --git a/.trellis/tasks/08-05-lowpoly-cars-assets/task.json b/.trellis/tasks/08-05-lowpoly-cars-assets/task.json new file mode 100644 index 0000000..f4faf36 --- /dev/null +++ b/.trellis/tasks/08-05-lowpoly-cars-assets/task.json @@ -0,0 +1,26 @@ +{ + "id": "lowpoly-cars-assets", + "name": "lowpoly-cars-assets", + "title": "拆分 LowPoly Cars 车辆资产", + "description": "", + "status": "in_progress", + "dev_type": null, + "scope": null, + "package": null, + "priority": "P2", + "creator": "dingkang", + "assignee": "dingkang", + "createdAt": "2026-08-05", + "completedAt": null, + "branch": null, + "base_branch": "main", + "worktree_path": null, + "commit": null, + "pr_url": null, + "subtasks": [], + "children": [], + "parent": null, + "relatedFiles": [], + "notes": "", + "meta": {} +} \ No newline at end of file diff --git a/assets/models/SOURCES.md b/assets/models/SOURCES.md index 5966013..ddf287f 100644 --- a/assets/models/SOURCES.md +++ b/assets/models/SOURCES.md @@ -19,3 +19,21 @@ 旧的 SpeedTree apple、Lyrog fattree、Poly Haven `shrub_02`、原始高模 `custom/bush` 和 rejected `custom/bush_low` 已删除。相关实验结论保留在 `docs/changelog.md` 和归档 Trellis 任务中。 + +## LowPoly Cars + +`assets/models/custom/lowpoly_cars/` 是从用户本地下载的 +`011.+LowPoly_Cars_01_blend.blend` 拆分出的车辆图库。目录结构与植物包一致:每辆车 +拥有 `model.gltf`、`model.bin` 与 `preview.png`;全部资产共用 +`textures/color_512x512.jpg`,以保留颜色图集中的各车型车漆区域。 + +`manifest.json` 记录源 Empty 根节点、分类、尺寸、顶点/三角面数和相对文件路径, +`index.html` 用于人工选择车款。源文件许可证尚未确认;在重新分发资产前必须核对原始下载 +页面的许可。 + +拆分由 `blender/tools/split_lowpoly_cars.py` 执行。该工具只读取源 Blend 与指定贴图, +不会接入或替换当前 Cesium 巡航车辆。 + +区域构建**不依赖** Downloads 中的原始 `.blend`:它只读取本目录已提交的 glTF/bin/贴图。 +因此原始 Blend 可以在验收后删除;代价是日后不能从零重跑该导入脚本,除非重新取得同一源文件 +与颜色贴图。 diff --git a/assets/models/custom/lowpoly_cars/car_a01_002/model.bin b/assets/models/custom/lowpoly_cars/car_a01_002/model.bin new file mode 100644 index 0000000..2f5e981 Binary files /dev/null and b/assets/models/custom/lowpoly_cars/car_a01_002/model.bin differ diff --git a/assets/models/custom/lowpoly_cars/car_a01_002/model.gltf b/assets/models/custom/lowpoly_cars/car_a01_002/model.gltf new file mode 100644 index 0000000..5e07e5d --- /dev/null +++ b/assets/models/custom/lowpoly_cars/car_a01_002/model.gltf @@ -0,0 +1,1072 @@ +{ + "asset": { + "generator": "Khronos glTF Blender I/O v4.5.51", + "version": "2.0" + }, + "extensionsUsed": [ + "KHR_materials_specular", + "KHR_materials_ior" + ], + "scene": 0, + "scenes": [ + { + "name": "Scene", + "nodes": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12 + ] + } + ], + "nodes": [ + { + "mesh": 0, + "name": "Object459.001" + }, + { + "mesh": 1, + "name": "Object458.001" + }, + { + "mesh": 2, + "name": "Object457.001" + }, + { + "mesh": 3, + "name": "Object456.001" + }, + { + "mesh": 4, + "name": "Cylinder259.001" + }, + { + "mesh": 5, + "name": "Box2404.001" + }, + { + "mesh": 6, + "name": "Box2403.001" + }, + { + "mesh": 7, + "name": "Box2402.001" + }, + { + "mesh": 8, + "name": "Box2401.001" + }, + { + "mesh": 9, + "name": "Box2400.001" + }, + { + "mesh": 10, + "name": "Box2399.001" + }, + { + "mesh": 11, + "name": "Box2398.001" + }, + { + "mesh": 12, + "name": "Box2397.001" + } + ], + "materials": [ + { + "doubleSided": true, + "extensions": { + "KHR_materials_specular": { + "specularFactor": 0 + }, + "KHR_materials_ior": { + "ior": 1.4500000476837158 + } + }, + "name": "carmaterial", + "pbrMetallicRoughness": { + "baseColorTexture": { + "index": 0 + }, + "roughnessFactor": 0.858578622341156 + } + } + ], + "meshes": [ + { + "name": "Mesh.212", + "primitives": [ + { + "attributes": { + "POSITION": 0, + "NORMAL": 1, + "TEXCOORD_0": 2 + }, + "indices": 3, + "material": 0 + } + ] + }, + { + "name": "Mesh.213", + "primitives": [ + { + "attributes": { + "POSITION": 4, + "NORMAL": 5, + "TEXCOORD_0": 6 + }, + "indices": 7, + "material": 0 + } + ] + }, + { + "name": "Mesh.214", + "primitives": [ + { + "attributes": { + "POSITION": 8, + "NORMAL": 9, + "TEXCOORD_0": 10 + }, + "indices": 11, + "material": 0 + } + ] + }, + { + "name": "Mesh.215", + "primitives": [ + { + "attributes": { + "POSITION": 12, + "NORMAL": 13, + "TEXCOORD_0": 14 + }, + "indices": 15, + "material": 0 + } + ] + }, + { + "name": "Mesh.216", + "primitives": [ + { + "attributes": { + "POSITION": 16, + "NORMAL": 17, + "TEXCOORD_0": 18 + }, + "indices": 19, + "material": 0 + } + ] + }, + { + "name": "Mesh.217", + "primitives": [ + { + "attributes": { + "POSITION": 20, + "NORMAL": 21, + "TEXCOORD_0": 22 + }, + "indices": 23, + "material": 0 + } + ] + }, + { + "name": "Mesh.218", + "primitives": [ + { + "attributes": { + "POSITION": 24, + "NORMAL": 25, + "TEXCOORD_0": 26 + }, + "indices": 27, + "material": 0 + } + ] + }, + { + "name": "Mesh.219", + "primitives": [ + { + "attributes": { + "POSITION": 28, + "NORMAL": 29, + "TEXCOORD_0": 30 + }, + "indices": 31, + "material": 0 + } + ] + }, + { + "name": "Mesh.220", + "primitives": [ + { + "attributes": { + "POSITION": 32, + "NORMAL": 33, + "TEXCOORD_0": 34 + }, + "indices": 35, + "material": 0 + } + ] + }, + { + "name": "Mesh.221", + "primitives": [ + { + "attributes": { + "POSITION": 36, + "NORMAL": 37, + "TEXCOORD_0": 38 + }, + "indices": 39, + "material": 0 + } + ] + }, + { + "name": "Mesh.222", + "primitives": [ + { + "attributes": { + "POSITION": 40, + "NORMAL": 41, + "TEXCOORD_0": 42 + }, + "indices": 43, + "material": 0 + } + ] + }, + { + "name": "Mesh.223", + "primitives": [ + { + "attributes": { + "POSITION": 44, + "NORMAL": 45, + "TEXCOORD_0": 46 + }, + "indices": 47, + "material": 0 + } + ] + }, + { + "name": "Mesh.224", + "primitives": [ + { + "attributes": { + "POSITION": 48, + "NORMAL": 49, + "TEXCOORD_0": 50 + }, + "indices": 51, + "material": 0 + } + ] + } + ], + "textures": [ + { + "sampler": 0, + "source": 0 + } + ], + "images": [ + { + "mimeType": "image/jpeg", + "name": "LowPolyCarsCesiumTexture", + "uri": "../textures/color_512x512.jpg" + } + ], + "accessors": [ + { + "bufferView": 0, + "componentType": 5126, + "count": 80, + "max": [ + 0.704743504524231, + 2.1081624031066895, + 0.43502846360206604 + ], + "min": [ + -2.092670440673828, + 2.0931313037872314, + -0.4326508939266205 + ], + "type": "VEC3" + }, + { + "bufferView": 1, + "componentType": 5126, + "count": 80, + "type": "VEC3" + }, + { + "bufferView": 2, + "componentType": 5126, + "count": 80, + "type": "VEC2" + }, + { + "bufferView": 3, + "componentType": 5123, + "count": 120, + "type": "SCALAR" + }, + { + "bufferView": 4, + "componentType": 5126, + "count": 8, + "max": [ + 2.64951753616333, + 1.1359639167785645, + 0.8302097916603088 + ], + "min": [ + 2.648941993713379, + 0.8626613616943359, + -0.8328379988670349 + ], + "type": "VEC3" + }, + { + "bufferView": 5, + "componentType": 5126, + "count": 8, + "type": "VEC3" + }, + { + "bufferView": 6, + "componentType": 5126, + "count": 8, + "type": "VEC2" + }, + { + "bufferView": 7, + "componentType": 5123, + "count": 12, + "type": "SCALAR" + }, + { + "bufferView": 8, + "componentType": 5126, + "count": 4, + "max": [ + 2.607375144958496, + 1.149524211883545, + 0.6733339428901672 + ], + "min": [ + 2.6069083213806152, + 0.8510854244232178, + -0.6747811436653137 + ], + "type": "VEC3" + }, + { + "bufferView": 9, + "componentType": 5126, + "count": 4, + "type": "VEC3" + }, + { + "bufferView": 10, + "componentType": 5126, + "count": 4, + "type": "VEC2" + }, + { + "bufferView": 11, + "componentType": 5123, + "count": 6, + "type": "SCALAR" + }, + { + "bufferView": 12, + "componentType": 5126, + "count": 36, + "max": [ + 1.0714999437332153, + 1.956607699394226, + 1.124335527420044 + ], + "min": [ + -2.22672176361084, + 1.2774693965911865, + -1.1236393451690674 + ], + "type": "VEC3" + }, + { + "bufferView": 13, + "componentType": 5126, + "count": 36, + "type": "VEC3" + }, + { + "bufferView": 14, + "componentType": 5126, + "count": 36, + "type": "VEC2" + }, + { + "bufferView": 15, + "componentType": 5123, + "count": 54, + "type": "SCALAR" + }, + { + "bufferView": 16, + "componentType": 5126, + "count": 4134, + "max": [ + 2.161038875579834, + 0.911652684211731, + 1.0810720920562744 + ], + "min": [ + -1.9712411165237427, + 0, + -1.076410174369812 + ], + "type": "VEC3" + }, + { + "bufferView": 17, + "componentType": 5126, + "count": 4134, + "type": "VEC3" + }, + { + "bufferView": 18, + "componentType": 5126, + "count": 4134, + "type": "VEC2" + }, + { + "bufferView": 19, + "componentType": 5123, + "count": 7416, + "type": "SCALAR" + }, + { + "bufferView": 20, + "componentType": 5126, + "count": 235, + "max": [ + -2.4040427207946777, + 1.1970906257629395, + 0.8861404061317444 + ], + "min": [ + -2.4340412616729736, + 0.7668983340263367, + -0.8807237148284912 + ], + "type": "VEC3" + }, + { + "bufferView": 21, + "componentType": 5126, + "count": 235, + "type": "VEC3" + }, + { + "bufferView": 22, + "componentType": 5126, + "count": 235, + "type": "VEC2" + }, + { + "bufferView": 23, + "componentType": 5123, + "count": 360, + "type": "SCALAR" + }, + { + "bufferView": 24, + "componentType": 5126, + "count": 80, + "max": [ + 2.6831088066101074, + 0.7551630735397339, + 0.2681105136871338 + ], + "min": [ + -2.5068037509918213, + 0.4445183277130127, + -0.2695578932762146 + ], + "type": "VEC3" + }, + { + "bufferView": 25, + "componentType": 5126, + "count": 80, + "type": "VEC3" + }, + { + "bufferView": 26, + "componentType": 5126, + "count": 80, + "type": "VEC2" + }, + { + "bufferView": 27, + "componentType": 5123, + "count": 120, + "type": "SCALAR" + }, + { + "bufferView": 28, + "componentType": 5126, + "count": 290, + "max": [ + 1.0939979553222656, + 1.4773337841033936, + 1.136893391609192 + ], + "min": [ + 0.9926711320877075, + 1.2196999788284302, + -1.136181116104126 + ], + "type": "VEC3" + }, + { + "bufferView": 29, + "componentType": 5126, + "count": 290, + "type": "VEC3" + }, + { + "bufferView": 30, + "componentType": 5126, + "count": 290, + "type": "VEC2" + }, + { + "bufferView": 31, + "componentType": 5123, + "count": 456, + "type": "SCALAR" + }, + { + "bufferView": 32, + "componentType": 5126, + "count": 80, + "max": [ + 0.26064300537109375, + 1.1759743690490723, + 0.9777413606643677 + ], + "min": [ + 0.0034351646900177, + 1.1212470531463623, + -0.9754959344863892 + ], + "type": "VEC3" + }, + { + "bufferView": 33, + "componentType": 5126, + "count": 80, + "type": "VEC3" + }, + { + "bufferView": 34, + "componentType": 5126, + "count": 80, + "type": "VEC2" + }, + { + "bufferView": 35, + "componentType": 5123, + "count": 120, + "type": "SCALAR" + }, + { + "bufferView": 36, + "componentType": 5126, + "count": 160, + "max": [ + 2.5237233638763428, + 1.0702192783355713, + 0.968116283416748 + ], + "min": [ + -2.264378547668457, + 1.0067920684814453, + -0.9658422470092773 + ], + "type": "VEC3" + }, + { + "bufferView": 37, + "componentType": 5126, + "count": 160, + "type": "VEC3" + }, + { + "bufferView": 38, + "componentType": 5126, + "count": 160, + "type": "VEC2" + }, + { + "bufferView": 39, + "componentType": 5123, + "count": 240, + "type": "SCALAR" + }, + { + "bufferView": 40, + "componentType": 5126, + "count": 1732, + "max": [ + 2.6411917209625244, + 1.1886634826660156, + 1.0713635683059692 + ], + "min": [ + -2.683035135269165, + 0.3686206042766571, + -1.089755892753601 + ], + "type": "VEC3" + }, + { + "bufferView": 41, + "componentType": 5126, + "count": 1732, + "type": "VEC3" + }, + { + "bufferView": 42, + "componentType": 5126, + "count": 1732, + "type": "VEC2" + }, + { + "bufferView": 43, + "componentType": 5123, + "count": 2988, + "type": "SCALAR" + }, + { + "bufferView": 44, + "componentType": 5126, + "count": 224, + "max": [ + 2.654247522354126, + 1.2186293601989746, + 0.942198634147644 + ], + "min": [ + 2.573509693145752, + 0.7765794992446899, + -0.9348968863487244 + ], + "type": "VEC3" + }, + { + "bufferView": 45, + "componentType": 5126, + "count": 224, + "type": "VEC3" + }, + { + "bufferView": 46, + "componentType": 5126, + "count": 224, + "type": "VEC2" + }, + { + "bufferView": 47, + "componentType": 5123, + "count": 414, + "type": "SCALAR" + }, + { + "bufferView": 48, + "componentType": 5126, + "count": 746, + "max": [ + 2.5764241218566895, + 2.094496726989746, + 0.9471034407615662 + ], + "min": [ + -2.4071543216705322, + 0.5281065702438354, + -0.9448910355567932 + ], + "type": "VEC3" + }, + { + "bufferView": 49, + "componentType": 5126, + "count": 746, + "type": "VEC3" + }, + { + "bufferView": 50, + "componentType": 5126, + "count": 746, + "type": "VEC2" + }, + { + "bufferView": 51, + "componentType": 5123, + "count": 1416, + "type": "SCALAR" + } + ], + "bufferViews": [ + { + "buffer": 0, + "byteLength": 960, + "byteOffset": 0, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 960, + "byteOffset": 960, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 640, + "byteOffset": 1920, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 240, + "byteOffset": 2560, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 96, + "byteOffset": 2800, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 96, + "byteOffset": 2896, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 64, + "byteOffset": 2992, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 3056, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 48, + "byteOffset": 3080, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 48, + "byteOffset": 3128, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 3176, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 12, + "byteOffset": 3208, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 432, + "byteOffset": 3220, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 432, + "byteOffset": 3652, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 288, + "byteOffset": 4084, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 108, + "byteOffset": 4372, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 49608, + "byteOffset": 4480, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 49608, + "byteOffset": 54088, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 33072, + "byteOffset": 103696, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 14832, + "byteOffset": 136768, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 2820, + "byteOffset": 151600, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 2820, + "byteOffset": 154420, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1880, + "byteOffset": 157240, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 720, + "byteOffset": 159120, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 960, + "byteOffset": 159840, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 960, + "byteOffset": 160800, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 640, + "byteOffset": 161760, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 240, + "byteOffset": 162400, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 3480, + "byteOffset": 162640, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 3480, + "byteOffset": 166120, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 2320, + "byteOffset": 169600, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 912, + "byteOffset": 171920, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 960, + "byteOffset": 172832, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 960, + "byteOffset": 173792, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 640, + "byteOffset": 174752, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 240, + "byteOffset": 175392, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 1920, + "byteOffset": 175632, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1920, + "byteOffset": 177552, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1280, + "byteOffset": 179472, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 180752, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 20784, + "byteOffset": 181232, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 20784, + "byteOffset": 202016, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 13856, + "byteOffset": 222800, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 5976, + "byteOffset": 236656, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 2688, + "byteOffset": 242632, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 2688, + "byteOffset": 245320, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1792, + "byteOffset": 248008, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 828, + "byteOffset": 249800, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 8952, + "byteOffset": 250628, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 8952, + "byteOffset": 259580, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 5968, + "byteOffset": 268532, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 2832, + "byteOffset": 274500, + "target": 34963 + } + ], + "samplers": [ + { + "magFilter": 9729, + "minFilter": 9987 + } + ], + "buffers": [ + { + "byteLength": 277332, + "uri": "model.bin" + } + ] +} diff --git a/assets/models/custom/lowpoly_cars/car_a01_002/preview.png b/assets/models/custom/lowpoly_cars/car_a01_002/preview.png new file mode 100644 index 0000000..4a79eef Binary files /dev/null and b/assets/models/custom/lowpoly_cars/car_a01_002/preview.png differ diff --git a/assets/models/custom/lowpoly_cars/car_a01_003/model.bin b/assets/models/custom/lowpoly_cars/car_a01_003/model.bin new file mode 100644 index 0000000..b39aa2c Binary files /dev/null and b/assets/models/custom/lowpoly_cars/car_a01_003/model.bin differ diff --git a/assets/models/custom/lowpoly_cars/car_a01_003/model.gltf b/assets/models/custom/lowpoly_cars/car_a01_003/model.gltf new file mode 100644 index 0000000..4e0d53a --- /dev/null +++ b/assets/models/custom/lowpoly_cars/car_a01_003/model.gltf @@ -0,0 +1,1072 @@ +{ + "asset": { + "generator": "Khronos glTF Blender I/O v4.5.51", + "version": "2.0" + }, + "extensionsUsed": [ + "KHR_materials_specular", + "KHR_materials_ior" + ], + "scene": 0, + "scenes": [ + { + "name": "Scene", + "nodes": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12 + ] + } + ], + "nodes": [ + { + "mesh": 0, + "name": "Object574.001" + }, + { + "mesh": 1, + "name": "Object573.001" + }, + { + "mesh": 2, + "name": "Object572.001" + }, + { + "mesh": 3, + "name": "Object571.001" + }, + { + "mesh": 4, + "name": "Cylinder261.001" + }, + { + "mesh": 5, + "name": "Box2425.001" + }, + { + "mesh": 6, + "name": "Box2424.001" + }, + { + "mesh": 7, + "name": "Box2423.001" + }, + { + "mesh": 8, + "name": "Box2422.001" + }, + { + "mesh": 9, + "name": "Box2421.001" + }, + { + "mesh": 10, + "name": "Box2420.001" + }, + { + "mesh": 11, + "name": "Box2419.001" + }, + { + "mesh": 12, + "name": "Box2418.001" + } + ], + "materials": [ + { + "doubleSided": true, + "extensions": { + "KHR_materials_specular": { + "specularFactor": 0 + }, + "KHR_materials_ior": { + "ior": 1.4500000476837158 + } + }, + "name": "carmaterial", + "pbrMetallicRoughness": { + "baseColorTexture": { + "index": 0 + }, + "roughnessFactor": 0.858578622341156 + } + } + ], + "meshes": [ + { + "name": "Mesh.212", + "primitives": [ + { + "attributes": { + "POSITION": 0, + "NORMAL": 1, + "TEXCOORD_0": 2 + }, + "indices": 3, + "material": 0 + } + ] + }, + { + "name": "Mesh.213", + "primitives": [ + { + "attributes": { + "POSITION": 4, + "NORMAL": 5, + "TEXCOORD_0": 6 + }, + "indices": 7, + "material": 0 + } + ] + }, + { + "name": "Mesh.214", + "primitives": [ + { + "attributes": { + "POSITION": 8, + "NORMAL": 9, + "TEXCOORD_0": 10 + }, + "indices": 11, + "material": 0 + } + ] + }, + { + "name": "Mesh.215", + "primitives": [ + { + "attributes": { + "POSITION": 12, + "NORMAL": 13, + "TEXCOORD_0": 14 + }, + "indices": 15, + "material": 0 + } + ] + }, + { + "name": "Mesh.216", + "primitives": [ + { + "attributes": { + "POSITION": 16, + "NORMAL": 17, + "TEXCOORD_0": 18 + }, + "indices": 19, + "material": 0 + } + ] + }, + { + "name": "Mesh.217", + "primitives": [ + { + "attributes": { + "POSITION": 20, + "NORMAL": 21, + "TEXCOORD_0": 22 + }, + "indices": 23, + "material": 0 + } + ] + }, + { + "name": "Mesh.218", + "primitives": [ + { + "attributes": { + "POSITION": 24, + "NORMAL": 25, + "TEXCOORD_0": 26 + }, + "indices": 27, + "material": 0 + } + ] + }, + { + "name": "Mesh.219", + "primitives": [ + { + "attributes": { + "POSITION": 28, + "NORMAL": 29, + "TEXCOORD_0": 30 + }, + "indices": 31, + "material": 0 + } + ] + }, + { + "name": "Mesh.220", + "primitives": [ + { + "attributes": { + "POSITION": 32, + "NORMAL": 33, + "TEXCOORD_0": 34 + }, + "indices": 35, + "material": 0 + } + ] + }, + { + "name": "Mesh.221", + "primitives": [ + { + "attributes": { + "POSITION": 36, + "NORMAL": 37, + "TEXCOORD_0": 38 + }, + "indices": 39, + "material": 0 + } + ] + }, + { + "name": "Mesh.222", + "primitives": [ + { + "attributes": { + "POSITION": 40, + "NORMAL": 41, + "TEXCOORD_0": 42 + }, + "indices": 43, + "material": 0 + } + ] + }, + { + "name": "Mesh.223", + "primitives": [ + { + "attributes": { + "POSITION": 44, + "NORMAL": 45, + "TEXCOORD_0": 46 + }, + "indices": 47, + "material": 0 + } + ] + }, + { + "name": "Mesh.224", + "primitives": [ + { + "attributes": { + "POSITION": 48, + "NORMAL": 49, + "TEXCOORD_0": 50 + }, + "indices": 51, + "material": 0 + } + ] + } + ], + "textures": [ + { + "sampler": 0, + "source": 0 + } + ], + "images": [ + { + "mimeType": "image/jpeg", + "name": "LowPolyCarsCesiumTexture", + "uri": "../textures/color_512x512.jpg" + } + ], + "accessors": [ + { + "bufferView": 0, + "componentType": 5126, + "count": 80, + "max": [ + 0.7047436237335205, + 2.1081624031066895, + 0.4350276291370392 + ], + "min": [ + -2.092670202255249, + 2.0931313037872314, + -0.43265172839164734 + ], + "type": "VEC3" + }, + { + "bufferView": 1, + "componentType": 5126, + "count": 80, + "type": "VEC3" + }, + { + "bufferView": 2, + "componentType": 5126, + "count": 80, + "type": "VEC2" + }, + { + "bufferView": 3, + "componentType": 5123, + "count": 120, + "type": "SCALAR" + }, + { + "bufferView": 4, + "componentType": 5126, + "count": 8, + "max": [ + 2.6495180130004883, + 1.1359639167785645, + 0.8302093744277954 + ], + "min": [ + 2.648942470550537, + 0.8626613616943359, + -0.8328384160995483 + ], + "type": "VEC3" + }, + { + "bufferView": 5, + "componentType": 5126, + "count": 8, + "type": "VEC3" + }, + { + "bufferView": 6, + "componentType": 5126, + "count": 8, + "type": "VEC2" + }, + { + "bufferView": 7, + "componentType": 5123, + "count": 12, + "type": "SCALAR" + }, + { + "bufferView": 8, + "componentType": 5126, + "count": 4, + "max": [ + 2.607375144958496, + 1.149524211883545, + 0.6733335852622986 + ], + "min": [ + 2.6069083213806152, + 0.8510854244232178, + -0.6747815012931824 + ], + "type": "VEC3" + }, + { + "bufferView": 9, + "componentType": 5126, + "count": 4, + "type": "VEC3" + }, + { + "bufferView": 10, + "componentType": 5126, + "count": 4, + "type": "VEC2" + }, + { + "bufferView": 11, + "componentType": 5123, + "count": 6, + "type": "SCALAR" + }, + { + "bufferView": 12, + "componentType": 5126, + "count": 36, + "max": [ + 1.0714999437332153, + 1.956607699394226, + 1.124334692955017 + ], + "min": [ + -2.22672176361084, + 1.2774693965911865, + -1.1236401796340942 + ], + "type": "VEC3" + }, + { + "bufferView": 13, + "componentType": 5126, + "count": 36, + "type": "VEC3" + }, + { + "bufferView": 14, + "componentType": 5126, + "count": 36, + "type": "VEC2" + }, + { + "bufferView": 15, + "componentType": 5123, + "count": 54, + "type": "SCALAR" + }, + { + "bufferView": 16, + "componentType": 5126, + "count": 4134, + "max": [ + 2.161038398742676, + 0.911652684211731, + 1.0810712575912476 + ], + "min": [ + -1.9712413549423218, + 0, + -1.0764110088348389 + ], + "type": "VEC3" + }, + { + "bufferView": 17, + "componentType": 5126, + "count": 4134, + "type": "VEC3" + }, + { + "bufferView": 18, + "componentType": 5126, + "count": 4134, + "type": "VEC2" + }, + { + "bufferView": 19, + "componentType": 5123, + "count": 7416, + "type": "SCALAR" + }, + { + "bufferView": 20, + "componentType": 5126, + "count": 233, + "max": [ + -2.4040422439575195, + 1.1970906257629395, + 0.8861395716667175 + ], + "min": [ + -2.4340407848358154, + 0.7668983340263367, + -0.8807245492935181 + ], + "type": "VEC3" + }, + { + "bufferView": 21, + "componentType": 5126, + "count": 233, + "type": "VEC3" + }, + { + "bufferView": 22, + "componentType": 5126, + "count": 233, + "type": "VEC2" + }, + { + "bufferView": 23, + "componentType": 5123, + "count": 360, + "type": "SCALAR" + }, + { + "bufferView": 24, + "componentType": 5126, + "count": 80, + "max": [ + 2.6831088066101074, + 0.7551630735397339, + 0.26810967922210693 + ], + "min": [ + -2.5068037509918213, + 0.4445183277130127, + -0.26955872774124146 + ], + "type": "VEC3" + }, + { + "bufferView": 25, + "componentType": 5126, + "count": 80, + "type": "VEC3" + }, + { + "bufferView": 26, + "componentType": 5126, + "count": 80, + "type": "VEC2" + }, + { + "bufferView": 27, + "componentType": 5123, + "count": 120, + "type": "SCALAR" + }, + { + "bufferView": 28, + "componentType": 5126, + "count": 290, + "max": [ + 1.0939979553222656, + 1.4773337841033936, + 1.136892557144165 + ], + "min": [ + 0.9926711320877075, + 1.2196999788284302, + -1.1361819505691528 + ], + "type": "VEC3" + }, + { + "bufferView": 29, + "componentType": 5126, + "count": 290, + "type": "VEC3" + }, + { + "bufferView": 30, + "componentType": 5126, + "count": 290, + "type": "VEC2" + }, + { + "bufferView": 31, + "componentType": 5123, + "count": 456, + "type": "SCALAR" + }, + { + "bufferView": 32, + "componentType": 5126, + "count": 80, + "max": [ + 0.2606431245803833, + 1.1759743690490723, + 0.977740466594696 + ], + "min": [ + 0.0034352540969848633, + 1.1212470531463623, + -0.9754968285560608 + ], + "type": "VEC3" + }, + { + "bufferView": 33, + "componentType": 5126, + "count": 80, + "type": "VEC3" + }, + { + "bufferView": 34, + "componentType": 5126, + "count": 80, + "type": "VEC2" + }, + { + "bufferView": 35, + "componentType": 5123, + "count": 120, + "type": "SCALAR" + }, + { + "bufferView": 36, + "componentType": 5126, + "count": 160, + "max": [ + 2.5237233638763428, + 1.0702192783355713, + 0.9681154489517212 + ], + "min": [ + -2.264378547668457, + 1.0067920684814453, + -0.9658430814743042 + ], + "type": "VEC3" + }, + { + "bufferView": 37, + "componentType": 5126, + "count": 160, + "type": "VEC3" + }, + { + "bufferView": 38, + "componentType": 5126, + "count": 160, + "type": "VEC2" + }, + { + "bufferView": 39, + "componentType": 5123, + "count": 240, + "type": "SCALAR" + }, + { + "bufferView": 40, + "componentType": 5126, + "count": 1730, + "max": [ + 2.6411917209625244, + 1.1886634826660156, + 1.0713627338409424 + ], + "min": [ + -2.683035135269165, + 0.3686206042766571, + -1.089756727218628 + ], + "type": "VEC3" + }, + { + "bufferView": 41, + "componentType": 5126, + "count": 1730, + "type": "VEC3" + }, + { + "bufferView": 42, + "componentType": 5126, + "count": 1730, + "type": "VEC2" + }, + { + "bufferView": 43, + "componentType": 5123, + "count": 2988, + "type": "SCALAR" + }, + { + "bufferView": 44, + "componentType": 5126, + "count": 224, + "max": [ + 2.654247999191284, + 1.2186293601989746, + 0.9421982765197754 + ], + "min": [ + 2.57351016998291, + 0.7765794992446899, + -0.934897243976593 + ], + "type": "VEC3" + }, + { + "bufferView": 45, + "componentType": 5126, + "count": 224, + "type": "VEC3" + }, + { + "bufferView": 46, + "componentType": 5126, + "count": 224, + "type": "VEC2" + }, + { + "bufferView": 47, + "componentType": 5123, + "count": 414, + "type": "SCALAR" + }, + { + "bufferView": 48, + "componentType": 5126, + "count": 745, + "max": [ + 2.5764241218566895, + 2.094496726989746, + 0.9471026062965393 + ], + "min": [ + -2.4071543216705322, + 0.5281065702438354, + -0.9448918700218201 + ], + "type": "VEC3" + }, + { + "bufferView": 49, + "componentType": 5126, + "count": 745, + "type": "VEC3" + }, + { + "bufferView": 50, + "componentType": 5126, + "count": 745, + "type": "VEC2" + }, + { + "bufferView": 51, + "componentType": 5123, + "count": 1416, + "type": "SCALAR" + } + ], + "bufferViews": [ + { + "buffer": 0, + "byteLength": 960, + "byteOffset": 0, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 960, + "byteOffset": 960, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 640, + "byteOffset": 1920, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 240, + "byteOffset": 2560, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 96, + "byteOffset": 2800, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 96, + "byteOffset": 2896, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 64, + "byteOffset": 2992, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 3056, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 48, + "byteOffset": 3080, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 48, + "byteOffset": 3128, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 3176, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 12, + "byteOffset": 3208, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 432, + "byteOffset": 3220, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 432, + "byteOffset": 3652, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 288, + "byteOffset": 4084, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 108, + "byteOffset": 4372, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 49608, + "byteOffset": 4480, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 49608, + "byteOffset": 54088, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 33072, + "byteOffset": 103696, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 14832, + "byteOffset": 136768, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 2796, + "byteOffset": 151600, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 2796, + "byteOffset": 154396, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1864, + "byteOffset": 157192, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 720, + "byteOffset": 159056, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 960, + "byteOffset": 159776, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 960, + "byteOffset": 160736, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 640, + "byteOffset": 161696, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 240, + "byteOffset": 162336, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 3480, + "byteOffset": 162576, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 3480, + "byteOffset": 166056, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 2320, + "byteOffset": 169536, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 912, + "byteOffset": 171856, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 960, + "byteOffset": 172768, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 960, + "byteOffset": 173728, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 640, + "byteOffset": 174688, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 240, + "byteOffset": 175328, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 1920, + "byteOffset": 175568, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1920, + "byteOffset": 177488, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1280, + "byteOffset": 179408, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 180688, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 20760, + "byteOffset": 181168, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 20760, + "byteOffset": 201928, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 13840, + "byteOffset": 222688, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 5976, + "byteOffset": 236528, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 2688, + "byteOffset": 242504, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 2688, + "byteOffset": 245192, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1792, + "byteOffset": 247880, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 828, + "byteOffset": 249672, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 8940, + "byteOffset": 250500, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 8940, + "byteOffset": 259440, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 5960, + "byteOffset": 268380, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 2832, + "byteOffset": 274340, + "target": 34963 + } + ], + "samplers": [ + { + "magFilter": 9729, + "minFilter": 9987 + } + ], + "buffers": [ + { + "byteLength": 277172, + "uri": "model.bin" + } + ] +} diff --git a/assets/models/custom/lowpoly_cars/car_a01_003/preview.png b/assets/models/custom/lowpoly_cars/car_a01_003/preview.png new file mode 100644 index 0000000..2b500d6 Binary files /dev/null and b/assets/models/custom/lowpoly_cars/car_a01_003/preview.png differ diff --git a/assets/models/custom/lowpoly_cars/car_a02_002/model.bin b/assets/models/custom/lowpoly_cars/car_a02_002/model.bin new file mode 100644 index 0000000..c0f9fc1 Binary files /dev/null and b/assets/models/custom/lowpoly_cars/car_a02_002/model.bin differ diff --git a/assets/models/custom/lowpoly_cars/car_a02_002/model.gltf b/assets/models/custom/lowpoly_cars/car_a02_002/model.gltf new file mode 100644 index 0000000..33b1666 --- /dev/null +++ b/assets/models/custom/lowpoly_cars/car_a02_002/model.gltf @@ -0,0 +1,1149 @@ +{ + "asset": { + "generator": "Khronos glTF Blender I/O v4.5.51", + "version": "2.0" + }, + "extensionsUsed": [ + "KHR_materials_specular", + "KHR_materials_ior" + ], + "scene": 0, + "scenes": [ + { + "name": "Scene", + "nodes": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13 + ] + } + ], + "nodes": [ + { + "mesh": 0, + "name": "Object464.001" + }, + { + "mesh": 1, + "name": "Object463.001" + }, + { + "mesh": 2, + "name": "Object462.001" + }, + { + "mesh": 3, + "name": "Object461.001" + }, + { + "mesh": 4, + "name": "Object460.001" + }, + { + "mesh": 5, + "name": "Box2413.001" + }, + { + "mesh": 6, + "name": "Box2412.001" + }, + { + "mesh": 7, + "name": "Box2411.001" + }, + { + "mesh": 8, + "name": "Box2410.001" + }, + { + "mesh": 9, + "name": "Box2409.001" + }, + { + "mesh": 10, + "name": "Box2408.001" + }, + { + "mesh": 11, + "name": "Box2407.001" + }, + { + "mesh": 12, + "name": "Box2406.001" + }, + { + "mesh": 13, + "name": "Box2405.001" + } + ], + "materials": [ + { + "doubleSided": true, + "extensions": { + "KHR_materials_specular": { + "specularFactor": 0 + }, + "KHR_materials_ior": { + "ior": 1.4500000476837158 + } + }, + "name": "carmaterial", + "pbrMetallicRoughness": { + "baseColorTexture": { + "index": 0 + }, + "roughnessFactor": 0.858578622341156 + } + } + ], + "meshes": [ + { + "name": "Mesh.212", + "primitives": [ + { + "attributes": { + "POSITION": 0, + "NORMAL": 1, + "TEXCOORD_0": 2 + }, + "indices": 3, + "material": 0 + } + ] + }, + { + "name": "Mesh.213", + "primitives": [ + { + "attributes": { + "POSITION": 4, + "NORMAL": 5, + "TEXCOORD_0": 6 + }, + "indices": 7, + "material": 0 + } + ] + }, + { + "name": "Mesh.214", + "primitives": [ + { + "attributes": { + "POSITION": 8, + "NORMAL": 9, + "TEXCOORD_0": 10 + }, + "indices": 11, + "material": 0 + } + ] + }, + { + "name": "Mesh.215", + "primitives": [ + { + "attributes": { + "POSITION": 12, + "NORMAL": 13, + "TEXCOORD_0": 14 + }, + "indices": 15, + "material": 0 + } + ] + }, + { + "name": "Mesh.216", + "primitives": [ + { + "attributes": { + "POSITION": 16, + "NORMAL": 17, + "TEXCOORD_0": 18 + }, + "indices": 19, + "material": 0 + } + ] + }, + { + "name": "Mesh.217", + "primitives": [ + { + "attributes": { + "POSITION": 20, + "NORMAL": 21, + "TEXCOORD_0": 22 + }, + "indices": 23, + "material": 0 + } + ] + }, + { + "name": "Mesh.218", + "primitives": [ + { + "attributes": { + "POSITION": 24, + "NORMAL": 25, + "TEXCOORD_0": 26 + }, + "indices": 27, + "material": 0 + } + ] + }, + { + "name": "Mesh.219", + "primitives": [ + { + "attributes": { + "POSITION": 28, + "NORMAL": 29, + "TEXCOORD_0": 30 + }, + "indices": 31, + "material": 0 + } + ] + }, + { + "name": "Mesh.220", + "primitives": [ + { + "attributes": { + "POSITION": 32, + "NORMAL": 33, + "TEXCOORD_0": 34 + }, + "indices": 35, + "material": 0 + } + ] + }, + { + "name": "Mesh.221", + "primitives": [ + { + "attributes": { + "POSITION": 36, + "NORMAL": 37, + "TEXCOORD_0": 38 + }, + "indices": 39, + "material": 0 + } + ] + }, + { + "name": "Mesh.222", + "primitives": [ + { + "attributes": { + "POSITION": 40, + "NORMAL": 41, + "TEXCOORD_0": 42 + }, + "indices": 43, + "material": 0 + } + ] + }, + { + "name": "Mesh.223", + "primitives": [ + { + "attributes": { + "POSITION": 44, + "NORMAL": 45, + "TEXCOORD_0": 46 + }, + "indices": 47, + "material": 0 + } + ] + }, + { + "name": "Mesh.224", + "primitives": [ + { + "attributes": { + "POSITION": 48, + "NORMAL": 49, + "TEXCOORD_0": 50 + }, + "indices": 51, + "material": 0 + } + ] + }, + { + "name": "Mesh.225", + "primitives": [ + { + "attributes": { + "POSITION": 52, + "NORMAL": 53, + "TEXCOORD_0": 54 + }, + "indices": 55, + "material": 0 + } + ] + } + ], + "textures": [ + { + "sampler": 0, + "source": 0 + } + ], + "images": [ + { + "mimeType": "image/jpeg", + "name": "LowPolyCarsCesiumTexture", + "uri": "../textures/color_512x512.jpg" + } + ], + "accessors": [ + { + "bufferView": 0, + "componentType": 5126, + "count": 24, + "max": [ + 1.0953381061553955, + 1.9524025917053223, + 1.1534093618392944 + ], + "min": [ + -0.0788756012916565, + 1.277469277381897, + -1.0935930013656616 + ], + "type": "VEC3" + }, + { + "bufferView": 1, + "componentType": 5126, + "count": 24, + "type": "VEC3" + }, + { + "bufferView": 2, + "componentType": 5126, + "count": 24, + "type": "VEC2" + }, + { + "bufferView": 3, + "componentType": 5123, + "count": 36, + "type": "SCALAR" + }, + { + "bufferView": 4, + "componentType": 5126, + "count": 4128, + "max": [ + 2.1894469261169434, + 0.911652684211731, + 1.1419402360916138 + ], + "min": [ + -1.9998620748519897, + 0, + -1.131834864616394 + ], + "type": "VEC3" + }, + { + "bufferView": 5, + "componentType": 5126, + "count": 4128, + "type": "VEC3" + }, + { + "bufferView": 6, + "componentType": 5126, + "count": 4128, + "type": "VEC2" + }, + { + "bufferView": 7, + "componentType": 5123, + "count": 7416, + "type": "SCALAR" + }, + { + "bufferView": 8, + "componentType": 5126, + "count": 40, + "max": [ + 0.7169662714004517, + 2.1081624031066895, + 0.45525291562080383 + ], + "min": [ + -0.0701536238193512, + 2.0944972038269043, + -0.4341256022453308 + ], + "type": "VEC3" + }, + { + "bufferView": 9, + "componentType": 5126, + "count": 40, + "type": "VEC3" + }, + { + "bufferView": 10, + "componentType": 5126, + "count": 40, + "type": "VEC2" + }, + { + "bufferView": 11, + "componentType": 5123, + "count": 60, + "type": "SCALAR" + }, + { + "bufferView": 12, + "componentType": 5126, + "count": 8, + "max": [ + 2.672529458999634, + 1.1359639167785645, + 0.9065905213356018 + ], + "min": [ + 2.623784303665161, + 0.8626614212989807, + -0.7557428479194641 + ], + "type": "VEC3" + }, + { + "bufferView": 13, + "componentType": 5126, + "count": 8, + "type": "VEC3" + }, + { + "bufferView": 14, + "componentType": 5126, + "count": 8, + "type": "VEC2" + }, + { + "bufferView": 15, + "componentType": 5123, + "count": 12, + "type": "SCALAR" + }, + { + "bufferView": 16, + "componentType": 5126, + "count": 4, + "max": [ + 2.625826597213745, + 1.1495240926742554, + 0.7485629320144653 + ], + "min": [ + 2.5863120555877686, + 0.8510853052139282, + -0.5989730358123779 + ], + "type": "VEC3" + }, + { + "bufferView": 17, + "componentType": 5126, + "count": 4, + "type": "VEC3" + }, + { + "bufferView": 18, + "componentType": 5126, + "count": 4, + "type": "VEC2" + }, + { + "bufferView": 19, + "componentType": 5123, + "count": 6, + "type": "SCALAR" + }, + { + "bufferView": 20, + "componentType": 5126, + "count": 2643, + "max": [ + -0.37115681171417236, + 1.2811453342437744, + 0.557583212852478 + ], + "min": [ + -2.0981240272521973, + 0.8865832090377808, + -0.7119836807250977 + ], + "type": "VEC3" + }, + { + "bufferView": 21, + "componentType": 5126, + "count": 2643, + "type": "VEC3" + }, + { + "bufferView": 22, + "componentType": 5126, + "count": 2643, + "type": "VEC2" + }, + { + "bufferView": 23, + "componentType": 5123, + "count": 4320, + "type": "SCALAR" + }, + { + "bufferView": 24, + "componentType": 5126, + "count": 232, + "max": [ + -2.377516508102417, + 1.1970906257629395, + 0.8161215782165527 + ], + "min": [ + -2.4582607746124268, + 0.7668982744216919, + -0.9504430294036865 + ], + "type": "VEC3" + }, + { + "bufferView": 25, + "componentType": 5126, + "count": 232, + "type": "VEC3" + }, + { + "bufferView": 26, + "componentType": 5126, + "count": 232, + "type": "VEC2" + }, + { + "bufferView": 27, + "componentType": 5123, + "count": 360, + "type": "SCALAR" + }, + { + "bufferView": 28, + "componentType": 5126, + "count": 80, + "max": [ + 2.6894493103027344, + 0.7551630139350891, + 0.3454563319683075 + ], + "min": [ + -2.513176441192627, + 0.4445182681083679, + -0.34179046750068665 + ], + "type": "VEC3" + }, + { + "bufferView": 29, + "componentType": 5126, + "count": 80, + "type": "VEC3" + }, + { + "bufferView": 30, + "componentType": 5126, + "count": 80, + "type": "VEC2" + }, + { + "bufferView": 31, + "componentType": 5123, + "count": 120, + "type": "SCALAR" + }, + { + "bufferView": 32, + "componentType": 5126, + "count": 290, + "max": [ + 1.107053279876709, + 1.477333664894104, + 1.1663448810577393 + ], + "min": [ + 0.9745529890060425, + 1.219699740409851, + -1.10614013671875 + ], + "type": "VEC3" + }, + { + "bufferView": 33, + "componentType": 5126, + "count": 290, + "type": "VEC3" + }, + { + "bufferView": 34, + "componentType": 5126, + "count": 290, + "type": "VEC2" + }, + { + "bufferView": 35, + "componentType": 5123, + "count": 456, + "type": "SCALAR" + }, + { + "bufferView": 36, + "componentType": 5126, + "count": 80, + "max": [ + 0.288531094789505, + 1.1759742498397827, + 0.9845746755599976 + ], + "min": [ + -0.024628877639770508, + 1.1212469339370728, + -0.974675178527832 + ], + "type": "VEC3" + }, + { + "bufferView": 37, + "componentType": 5126, + "count": 80, + "type": "VEC3" + }, + { + "bufferView": 38, + "componentType": 5126, + "count": 80, + "type": "VEC2" + }, + { + "bufferView": 39, + "componentType": 5123, + "count": 120, + "type": "SCALAR" + }, + { + "bufferView": 40, + "componentType": 5126, + "count": 160, + "max": [ + 2.5503368377685547, + 1.0702191591262817, + 1.0405035018920898 + ], + "min": [ + -2.2911670207977295, + 1.0067919492721558, + -1.030712366104126 + ], + "type": "VEC3" + }, + { + "bufferView": 41, + "componentType": 5126, + "count": 160, + "type": "VEC3" + }, + { + "bufferView": 42, + "componentType": 5126, + "count": 160, + "type": "VEC2" + }, + { + "bufferView": 43, + "componentType": 5123, + "count": 240, + "type": "SCALAR" + }, + { + "bufferView": 44, + "componentType": 5126, + "count": 1728, + "max": [ + 2.6688148975372314, + 1.188663363456726, + 1.1348326206207275 + ], + "min": [ + -2.683210849761963, + 0.3686205744743347, + -1.1477137804031372 + ], + "type": "VEC3" + }, + { + "bufferView": 45, + "componentType": 5126, + "count": 1728, + "type": "VEC3" + }, + { + "bufferView": 46, + "componentType": 5126, + "count": 1728, + "type": "VEC2" + }, + { + "bufferView": 47, + "componentType": 5123, + "count": 2988, + "type": "SCALAR" + }, + { + "bufferView": 48, + "componentType": 5126, + "count": 224, + "max": [ + 2.6776669025421143, + 1.218629240989685, + 1.0163477659225464 + ], + "min": [ + 2.5451388359069824, + 0.7765793800354004, + -0.8599414229393005 + ], + "type": "VEC3" + }, + { + "bufferView": 49, + "componentType": 5126, + "count": 224, + "type": "VEC3" + }, + { + "bufferView": 50, + "componentType": 5126, + "count": 224, + "type": "VEC2" + }, + { + "bufferView": 51, + "componentType": 5123, + "count": 414, + "type": "SCALAR" + }, + { + "bufferView": 52, + "componentType": 5126, + "count": 594, + "max": [ + 2.602661609649658, + 2.094496726989746, + 1.021315574645996 + ], + "min": [ + -2.4335272312164307, + 0.5281063318252563, + -1.0141953229904175 + ], + "type": "VEC3" + }, + { + "bufferView": 53, + "componentType": 5126, + "count": 594, + "type": "VEC3" + }, + { + "bufferView": 54, + "componentType": 5126, + "count": 594, + "type": "VEC2" + }, + { + "bufferView": 55, + "componentType": 5123, + "count": 1146, + "type": "SCALAR" + } + ], + "bufferViews": [ + { + "buffer": 0, + "byteLength": 288, + "byteOffset": 0, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 288, + "byteOffset": 288, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 192, + "byteOffset": 576, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 72, + "byteOffset": 768, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 49536, + "byteOffset": 840, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 49536, + "byteOffset": 50376, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 33024, + "byteOffset": 99912, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 14832, + "byteOffset": 132936, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 147768, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 148248, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 320, + "byteOffset": 148728, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 120, + "byteOffset": 149048, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 96, + "byteOffset": 149168, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 96, + "byteOffset": 149264, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 64, + "byteOffset": 149360, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 149424, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 48, + "byteOffset": 149448, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 48, + "byteOffset": 149496, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 149544, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 12, + "byteOffset": 149576, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 31716, + "byteOffset": 149588, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 31716, + "byteOffset": 181304, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 21144, + "byteOffset": 213020, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 8640, + "byteOffset": 234164, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 2784, + "byteOffset": 242804, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 2784, + "byteOffset": 245588, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1856, + "byteOffset": 248372, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 720, + "byteOffset": 250228, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 960, + "byteOffset": 250948, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 960, + "byteOffset": 251908, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 640, + "byteOffset": 252868, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 240, + "byteOffset": 253508, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 3480, + "byteOffset": 253748, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 3480, + "byteOffset": 257228, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 2320, + "byteOffset": 260708, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 912, + "byteOffset": 263028, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 960, + "byteOffset": 263940, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 960, + "byteOffset": 264900, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 640, + "byteOffset": 265860, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 240, + "byteOffset": 266500, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 1920, + "byteOffset": 266740, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1920, + "byteOffset": 268660, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1280, + "byteOffset": 270580, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 271860, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 20736, + "byteOffset": 272340, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 20736, + "byteOffset": 293076, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 13824, + "byteOffset": 313812, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 5976, + "byteOffset": 327636, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 2688, + "byteOffset": 333612, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 2688, + "byteOffset": 336300, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1792, + "byteOffset": 338988, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 828, + "byteOffset": 340780, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 7128, + "byteOffset": 341608, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 7128, + "byteOffset": 348736, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 4752, + "byteOffset": 355864, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 2292, + "byteOffset": 360616, + "target": 34963 + } + ], + "samplers": [ + { + "magFilter": 9729, + "minFilter": 9987 + } + ], + "buffers": [ + { + "byteLength": 362908, + "uri": "model.bin" + } + ] +} diff --git a/assets/models/custom/lowpoly_cars/car_a02_002/preview.png b/assets/models/custom/lowpoly_cars/car_a02_002/preview.png new file mode 100644 index 0000000..c9eb562 Binary files /dev/null and b/assets/models/custom/lowpoly_cars/car_a02_002/preview.png differ diff --git a/assets/models/custom/lowpoly_cars/car_a02_003/model.bin b/assets/models/custom/lowpoly_cars/car_a02_003/model.bin new file mode 100644 index 0000000..e693d0e Binary files /dev/null and b/assets/models/custom/lowpoly_cars/car_a02_003/model.bin differ diff --git a/assets/models/custom/lowpoly_cars/car_a02_003/model.gltf b/assets/models/custom/lowpoly_cars/car_a02_003/model.gltf new file mode 100644 index 0000000..9c0c9c1 --- /dev/null +++ b/assets/models/custom/lowpoly_cars/car_a02_003/model.gltf @@ -0,0 +1,1149 @@ +{ + "asset": { + "generator": "Khronos glTF Blender I/O v4.5.51", + "version": "2.0" + }, + "extensionsUsed": [ + "KHR_materials_specular", + "KHR_materials_ior" + ], + "scene": 0, + "scenes": [ + { + "name": "Scene", + "nodes": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13 + ] + } + ], + "nodes": [ + { + "mesh": 0, + "name": "Object579.001" + }, + { + "mesh": 1, + "name": "Object578.001" + }, + { + "mesh": 2, + "name": "Object577.001" + }, + { + "mesh": 3, + "name": "Object576.001" + }, + { + "mesh": 4, + "name": "Object575.001" + }, + { + "mesh": 5, + "name": "Box2434.001" + }, + { + "mesh": 6, + "name": "Box2433.001" + }, + { + "mesh": 7, + "name": "Box2432.001" + }, + { + "mesh": 8, + "name": "Box2431.001" + }, + { + "mesh": 9, + "name": "Box2430.001" + }, + { + "mesh": 10, + "name": "Box2429.001" + }, + { + "mesh": 11, + "name": "Box2428.001" + }, + { + "mesh": 12, + "name": "Box2427.001" + }, + { + "mesh": 13, + "name": "Box2426.001" + } + ], + "materials": [ + { + "doubleSided": true, + "extensions": { + "KHR_materials_specular": { + "specularFactor": 0 + }, + "KHR_materials_ior": { + "ior": 1.4500000476837158 + } + }, + "name": "carmaterial", + "pbrMetallicRoughness": { + "baseColorTexture": { + "index": 0 + }, + "roughnessFactor": 0.858578622341156 + } + } + ], + "meshes": [ + { + "name": "Mesh.212", + "primitives": [ + { + "attributes": { + "POSITION": 0, + "NORMAL": 1, + "TEXCOORD_0": 2 + }, + "indices": 3, + "material": 0 + } + ] + }, + { + "name": "Mesh.213", + "primitives": [ + { + "attributes": { + "POSITION": 4, + "NORMAL": 5, + "TEXCOORD_0": 6 + }, + "indices": 7, + "material": 0 + } + ] + }, + { + "name": "Mesh.214", + "primitives": [ + { + "attributes": { + "POSITION": 8, + "NORMAL": 9, + "TEXCOORD_0": 10 + }, + "indices": 11, + "material": 0 + } + ] + }, + { + "name": "Mesh.215", + "primitives": [ + { + "attributes": { + "POSITION": 12, + "NORMAL": 13, + "TEXCOORD_0": 14 + }, + "indices": 15, + "material": 0 + } + ] + }, + { + "name": "Mesh.216", + "primitives": [ + { + "attributes": { + "POSITION": 16, + "NORMAL": 17, + "TEXCOORD_0": 18 + }, + "indices": 19, + "material": 0 + } + ] + }, + { + "name": "Mesh.217", + "primitives": [ + { + "attributes": { + "POSITION": 20, + "NORMAL": 21, + "TEXCOORD_0": 22 + }, + "indices": 23, + "material": 0 + } + ] + }, + { + "name": "Mesh.218", + "primitives": [ + { + "attributes": { + "POSITION": 24, + "NORMAL": 25, + "TEXCOORD_0": 26 + }, + "indices": 27, + "material": 0 + } + ] + }, + { + "name": "Mesh.219", + "primitives": [ + { + "attributes": { + "POSITION": 28, + "NORMAL": 29, + "TEXCOORD_0": 30 + }, + "indices": 31, + "material": 0 + } + ] + }, + { + "name": "Mesh.220", + "primitives": [ + { + "attributes": { + "POSITION": 32, + "NORMAL": 33, + "TEXCOORD_0": 34 + }, + "indices": 35, + "material": 0 + } + ] + }, + { + "name": "Mesh.221", + "primitives": [ + { + "attributes": { + "POSITION": 36, + "NORMAL": 37, + "TEXCOORD_0": 38 + }, + "indices": 39, + "material": 0 + } + ] + }, + { + "name": "Mesh.222", + "primitives": [ + { + "attributes": { + "POSITION": 40, + "NORMAL": 41, + "TEXCOORD_0": 42 + }, + "indices": 43, + "material": 0 + } + ] + }, + { + "name": "Mesh.223", + "primitives": [ + { + "attributes": { + "POSITION": 44, + "NORMAL": 45, + "TEXCOORD_0": 46 + }, + "indices": 47, + "material": 0 + } + ] + }, + { + "name": "Mesh.224", + "primitives": [ + { + "attributes": { + "POSITION": 48, + "NORMAL": 49, + "TEXCOORD_0": 50 + }, + "indices": 51, + "material": 0 + } + ] + }, + { + "name": "Mesh.225", + "primitives": [ + { + "attributes": { + "POSITION": 52, + "NORMAL": 53, + "TEXCOORD_0": 54 + }, + "indices": 55, + "material": 0 + } + ] + } + ], + "textures": [ + { + "sampler": 0, + "source": 0 + } + ], + "images": [ + { + "mimeType": "image/jpeg", + "name": "LowPolyCarsCesiumTexture", + "uri": "../textures/color_512x512.jpg" + } + ], + "accessors": [ + { + "bufferView": 0, + "componentType": 5126, + "count": 24, + "max": [ + 1.0953372716903687, + 1.9524025917053223, + 1.153409481048584 + ], + "min": [ + -0.07887649536132812, + 1.277469277381897, + -1.093592882156372 + ], + "type": "VEC3" + }, + { + "bufferView": 1, + "componentType": 5126, + "count": 24, + "type": "VEC3" + }, + { + "bufferView": 2, + "componentType": 5126, + "count": 24, + "type": "VEC2" + }, + { + "bufferView": 3, + "componentType": 5123, + "count": 36, + "type": "SCALAR" + }, + { + "bufferView": 4, + "componentType": 5126, + "count": 4128, + "max": [ + 2.1894466876983643, + 0.911652684211731, + 1.1419403553009033 + ], + "min": [ + -1.9998624324798584, + 0, + -1.1318347454071045 + ], + "type": "VEC3" + }, + { + "bufferView": 5, + "componentType": 5126, + "count": 4128, + "type": "VEC3" + }, + { + "bufferView": 6, + "componentType": 5126, + "count": 4128, + "type": "VEC2" + }, + { + "bufferView": 7, + "componentType": 5123, + "count": 7416, + "type": "SCALAR" + }, + { + "bufferView": 8, + "componentType": 5126, + "count": 40, + "max": [ + 0.7169661521911621, + 2.1081624031066895, + 0.455253005027771 + ], + "min": [ + -0.07015371322631836, + 2.0944972038269043, + -0.43412548303604126 + ], + "type": "VEC3" + }, + { + "bufferView": 9, + "componentType": 5126, + "count": 40, + "type": "VEC3" + }, + { + "bufferView": 10, + "componentType": 5126, + "count": 40, + "type": "VEC2" + }, + { + "bufferView": 11, + "componentType": 5123, + "count": 60, + "type": "SCALAR" + }, + { + "bufferView": 12, + "componentType": 5126, + "count": 8, + "max": [ + 2.6725289821624756, + 1.1359639167785645, + 0.906590461730957 + ], + "min": [ + 2.623783826828003, + 0.8626614212989807, + -0.7557429075241089 + ], + "type": "VEC3" + }, + { + "bufferView": 13, + "componentType": 5126, + "count": 8, + "type": "VEC3" + }, + { + "bufferView": 14, + "componentType": 5126, + "count": 8, + "type": "VEC2" + }, + { + "bufferView": 15, + "componentType": 5123, + "count": 12, + "type": "SCALAR" + }, + { + "bufferView": 16, + "componentType": 5126, + "count": 4, + "max": [ + 2.625825881958008, + 1.1495240926742554, + 0.7485629916191101 + ], + "min": [ + 2.5863113403320312, + 0.8510853052139282, + -0.5989729762077332 + ], + "type": "VEC3" + }, + { + "bufferView": 17, + "componentType": 5126, + "count": 4, + "type": "VEC3" + }, + { + "bufferView": 18, + "componentType": 5126, + "count": 4, + "type": "VEC2" + }, + { + "bufferView": 19, + "componentType": 5123, + "count": 6, + "type": "SCALAR" + }, + { + "bufferView": 20, + "componentType": 5126, + "count": 2638, + "max": [ + -0.3711574077606201, + 1.2811453342437744, + 0.557583212852478 + ], + "min": [ + -2.0981245040893555, + 0.8865832090377808, + -0.7119836807250977 + ], + "type": "VEC3" + }, + { + "bufferView": 21, + "componentType": 5126, + "count": 2638, + "type": "VEC3" + }, + { + "bufferView": 22, + "componentType": 5126, + "count": 2638, + "type": "VEC2" + }, + { + "bufferView": 23, + "componentType": 5123, + "count": 4320, + "type": "SCALAR" + }, + { + "bufferView": 24, + "componentType": 5126, + "count": 234, + "max": [ + -2.3775172233581543, + 1.1970906257629395, + 0.8161216974258423 + ], + "min": [ + -2.458261489868164, + 0.7668982744216919, + -0.950442910194397 + ], + "type": "VEC3" + }, + { + "bufferView": 25, + "componentType": 5126, + "count": 234, + "type": "VEC3" + }, + { + "bufferView": 26, + "componentType": 5126, + "count": 234, + "type": "VEC2" + }, + { + "bufferView": 27, + "componentType": 5123, + "count": 360, + "type": "SCALAR" + }, + { + "bufferView": 28, + "componentType": 5126, + "count": 80, + "max": [ + 2.689448595046997, + 0.7551630139350891, + 0.3454563021659851 + ], + "min": [ + -2.5131771564483643, + 0.4445182681083679, + -0.34179049730300903 + ], + "type": "VEC3" + }, + { + "bufferView": 29, + "componentType": 5126, + "count": 80, + "type": "VEC3" + }, + { + "bufferView": 30, + "componentType": 5126, + "count": 80, + "type": "VEC2" + }, + { + "bufferView": 31, + "componentType": 5123, + "count": 120, + "type": "SCALAR" + }, + { + "bufferView": 32, + "componentType": 5126, + "count": 290, + "max": [ + 1.1070531606674194, + 1.477333664894104, + 1.1663448810577393 + ], + "min": [ + 0.9745528697967529, + 1.219699740409851, + -1.10614013671875 + ], + "type": "VEC3" + }, + { + "bufferView": 33, + "componentType": 5126, + "count": 290, + "type": "VEC3" + }, + { + "bufferView": 34, + "componentType": 5126, + "count": 290, + "type": "VEC2" + }, + { + "bufferView": 35, + "componentType": 5123, + "count": 456, + "type": "SCALAR" + }, + { + "bufferView": 36, + "componentType": 5126, + "count": 80, + "max": [ + 0.2885303199291229, + 1.1759742498397827, + 0.9845747947692871 + ], + "min": [ + -0.024629652500152588, + 1.1212469339370728, + -0.9746750593185425 + ], + "type": "VEC3" + }, + { + "bufferView": 37, + "componentType": 5126, + "count": 80, + "type": "VEC3" + }, + { + "bufferView": 38, + "componentType": 5126, + "count": 80, + "type": "VEC2" + }, + { + "bufferView": 39, + "componentType": 5123, + "count": 120, + "type": "SCALAR" + }, + { + "bufferView": 40, + "componentType": 5126, + "count": 160, + "max": [ + 2.5503363609313965, + 1.0702191591262817, + 1.0405035018920898 + ], + "min": [ + -2.2911674976348877, + 1.0067919492721558, + -1.030712366104126 + ], + "type": "VEC3" + }, + { + "bufferView": 41, + "componentType": 5126, + "count": 160, + "type": "VEC3" + }, + { + "bufferView": 42, + "componentType": 5126, + "count": 160, + "type": "VEC2" + }, + { + "bufferView": 43, + "componentType": 5123, + "count": 240, + "type": "SCALAR" + }, + { + "bufferView": 44, + "componentType": 5126, + "count": 1728, + "max": [ + 2.6688148975372314, + 1.188663363456726, + 1.1348326206207275 + ], + "min": [ + -2.683210849761963, + 0.3686205744743347, + -1.1477137804031372 + ], + "type": "VEC3" + }, + { + "bufferView": 45, + "componentType": 5126, + "count": 1728, + "type": "VEC3" + }, + { + "bufferView": 46, + "componentType": 5126, + "count": 1728, + "type": "VEC2" + }, + { + "bufferView": 47, + "componentType": 5123, + "count": 2988, + "type": "SCALAR" + }, + { + "bufferView": 48, + "componentType": 5126, + "count": 224, + "max": [ + 2.677666425704956, + 1.218629240989685, + 1.0163477659225464 + ], + "min": [ + 2.545138359069824, + 0.7765793800354004, + -0.8599414229393005 + ], + "type": "VEC3" + }, + { + "bufferView": 49, + "componentType": 5126, + "count": 224, + "type": "VEC3" + }, + { + "bufferView": 50, + "componentType": 5126, + "count": 224, + "type": "VEC2" + }, + { + "bufferView": 51, + "componentType": 5123, + "count": 414, + "type": "SCALAR" + }, + { + "bufferView": 52, + "componentType": 5126, + "count": 597, + "max": [ + 2.602661371231079, + 2.094496726989746, + 1.021315574645996 + ], + "min": [ + -2.4335274696350098, + 0.5281063318252563, + -1.0141953229904175 + ], + "type": "VEC3" + }, + { + "bufferView": 53, + "componentType": 5126, + "count": 597, + "type": "VEC3" + }, + { + "bufferView": 54, + "componentType": 5126, + "count": 597, + "type": "VEC2" + }, + { + "bufferView": 55, + "componentType": 5123, + "count": 1146, + "type": "SCALAR" + } + ], + "bufferViews": [ + { + "buffer": 0, + "byteLength": 288, + "byteOffset": 0, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 288, + "byteOffset": 288, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 192, + "byteOffset": 576, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 72, + "byteOffset": 768, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 49536, + "byteOffset": 840, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 49536, + "byteOffset": 50376, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 33024, + "byteOffset": 99912, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 14832, + "byteOffset": 132936, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 147768, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 148248, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 320, + "byteOffset": 148728, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 120, + "byteOffset": 149048, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 96, + "byteOffset": 149168, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 96, + "byteOffset": 149264, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 64, + "byteOffset": 149360, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 149424, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 48, + "byteOffset": 149448, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 48, + "byteOffset": 149496, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 149544, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 12, + "byteOffset": 149576, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 31656, + "byteOffset": 149588, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 31656, + "byteOffset": 181244, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 21104, + "byteOffset": 212900, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 8640, + "byteOffset": 234004, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 2808, + "byteOffset": 242644, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 2808, + "byteOffset": 245452, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1872, + "byteOffset": 248260, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 720, + "byteOffset": 250132, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 960, + "byteOffset": 250852, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 960, + "byteOffset": 251812, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 640, + "byteOffset": 252772, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 240, + "byteOffset": 253412, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 3480, + "byteOffset": 253652, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 3480, + "byteOffset": 257132, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 2320, + "byteOffset": 260612, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 912, + "byteOffset": 262932, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 960, + "byteOffset": 263844, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 960, + "byteOffset": 264804, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 640, + "byteOffset": 265764, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 240, + "byteOffset": 266404, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 1920, + "byteOffset": 266644, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1920, + "byteOffset": 268564, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1280, + "byteOffset": 270484, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 271764, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 20736, + "byteOffset": 272244, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 20736, + "byteOffset": 292980, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 13824, + "byteOffset": 313716, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 5976, + "byteOffset": 327540, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 2688, + "byteOffset": 333516, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 2688, + "byteOffset": 336204, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1792, + "byteOffset": 338892, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 828, + "byteOffset": 340684, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 7164, + "byteOffset": 341512, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 7164, + "byteOffset": 348676, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 4776, + "byteOffset": 355840, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 2292, + "byteOffset": 360616, + "target": 34963 + } + ], + "samplers": [ + { + "magFilter": 9729, + "minFilter": 9987 + } + ], + "buffers": [ + { + "byteLength": 362908, + "uri": "model.bin" + } + ] +} diff --git a/assets/models/custom/lowpoly_cars/car_a02_003/preview.png b/assets/models/custom/lowpoly_cars/car_a02_003/preview.png new file mode 100644 index 0000000..a422e41 Binary files /dev/null and b/assets/models/custom/lowpoly_cars/car_a02_003/preview.png differ diff --git a/assets/models/custom/lowpoly_cars/car_a03_001/model.bin b/assets/models/custom/lowpoly_cars/car_a03_001/model.bin new file mode 100644 index 0000000..d778159 Binary files /dev/null and b/assets/models/custom/lowpoly_cars/car_a03_001/model.bin differ diff --git a/assets/models/custom/lowpoly_cars/car_a03_001/model.gltf b/assets/models/custom/lowpoly_cars/car_a03_001/model.gltf new file mode 100644 index 0000000..6c2a9d1 --- /dev/null +++ b/assets/models/custom/lowpoly_cars/car_a03_001/model.gltf @@ -0,0 +1,1445 @@ +{ + "asset": { + "generator": "Khronos glTF Blender I/O v4.5.51", + "version": "2.0" + }, + "extensionsUsed": [ + "KHR_materials_specular", + "KHR_materials_ior" + ], + "scene": 0, + "scenes": [ + { + "name": "Scene", + "nodes": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17 + ] + } + ], + "nodes": [ + { + "mesh": 0, + "name": "Shape041.001" + }, + { + "mesh": 1, + "name": "Object447.001" + }, + { + "mesh": 2, + "name": "Object445.001" + }, + { + "mesh": 3, + "name": "Object444.001" + }, + { + "mesh": 4, + "name": "Object324.001" + }, + { + "mesh": 5, + "name": "Object320.001" + }, + { + "mesh": 6, + "name": "Object319.001" + }, + { + "mesh": 7, + "name": "Object318.001" + }, + { + "mesh": 8, + "name": "Cylinder200.001" + }, + { + "mesh": 9, + "name": "Box2258.001" + }, + { + "mesh": 10, + "name": "Box2228.001" + }, + { + "mesh": 11, + "name": "Box2210.001" + }, + { + "mesh": 12, + "name": "Box2187.001" + }, + { + "mesh": 13, + "name": "Box2184.001" + }, + { + "mesh": 14, + "name": "Box2183.001" + }, + { + "mesh": 15, + "name": "Box2181.001" + }, + { + "mesh": 16, + "name": "Box2178.001" + }, + { + "mesh": 17, + "name": "Box2174.001" + } + ], + "materials": [ + { + "doubleSided": true, + "extensions": { + "KHR_materials_specular": { + "specularFactor": 0 + }, + "KHR_materials_ior": { + "ior": 1.4500000476837158 + } + }, + "name": "carmaterial", + "pbrMetallicRoughness": { + "baseColorTexture": { + "index": 0 + }, + "roughnessFactor": 0.858578622341156 + } + } + ], + "meshes": [ + { + "name": "Mesh.212", + "primitives": [ + { + "attributes": { + "POSITION": 0, + "NORMAL": 1, + "TEXCOORD_0": 2 + }, + "indices": 3, + "material": 0 + } + ] + }, + { + "name": "Mesh.213", + "primitives": [ + { + "attributes": { + "POSITION": 4, + "NORMAL": 5, + "TEXCOORD_0": 6 + }, + "indices": 7, + "material": 0 + } + ] + }, + { + "name": "Mesh.214", + "primitives": [ + { + "attributes": { + "POSITION": 8, + "NORMAL": 9, + "TEXCOORD_0": 10 + }, + "indices": 11, + "material": 0 + } + ] + }, + { + "name": "Mesh.215", + "primitives": [ + { + "attributes": { + "POSITION": 12, + "NORMAL": 13, + "TEXCOORD_0": 14 + }, + "indices": 15, + "material": 0 + } + ] + }, + { + "name": "Mesh.216", + "primitives": [ + { + "attributes": { + "POSITION": 16, + "NORMAL": 17, + "TEXCOORD_0": 18 + }, + "indices": 19, + "material": 0 + } + ] + }, + { + "name": "Mesh.217", + "primitives": [ + { + "attributes": { + "POSITION": 20, + "NORMAL": 21, + "TEXCOORD_0": 22 + }, + "indices": 23, + "material": 0 + } + ] + }, + { + "name": "Mesh.218", + "primitives": [ + { + "attributes": { + "POSITION": 24, + "NORMAL": 25, + "TEXCOORD_0": 26 + }, + "indices": 27, + "material": 0 + } + ] + }, + { + "name": "Mesh.219", + "primitives": [ + { + "attributes": { + "POSITION": 28, + "NORMAL": 29, + "TEXCOORD_0": 30 + }, + "indices": 31, + "material": 0 + } + ] + }, + { + "name": "Mesh.220", + "primitives": [ + { + "attributes": { + "POSITION": 32, + "NORMAL": 33, + "TEXCOORD_0": 34 + }, + "indices": 35, + "material": 0 + } + ] + }, + { + "name": "Mesh.221", + "primitives": [ + { + "attributes": { + "POSITION": 36, + "NORMAL": 37, + "TEXCOORD_0": 38 + }, + "indices": 39, + "material": 0 + } + ] + }, + { + "name": "Mesh.222", + "primitives": [ + { + "attributes": { + "POSITION": 40, + "NORMAL": 41, + "TEXCOORD_0": 42 + }, + "indices": 43, + "material": 0 + } + ] + }, + { + "name": "Mesh.223", + "primitives": [ + { + "attributes": { + "POSITION": 44, + "NORMAL": 45, + "TEXCOORD_0": 46 + }, + "indices": 47, + "material": 0 + } + ] + }, + { + "name": "Mesh.224", + "primitives": [ + { + "attributes": { + "POSITION": 48, + "NORMAL": 49, + "TEXCOORD_0": 50 + }, + "indices": 51, + "material": 0 + } + ] + }, + { + "name": "Mesh.225", + "primitives": [ + { + "attributes": { + "POSITION": 52, + "NORMAL": 53, + "TEXCOORD_0": 54 + }, + "indices": 55, + "material": 0 + } + ] + }, + { + "name": "Mesh.226", + "primitives": [ + { + "attributes": { + "POSITION": 56, + "NORMAL": 57, + "TEXCOORD_0": 58 + }, + "indices": 59, + "material": 0 + } + ] + }, + { + "name": "Mesh.227", + "primitives": [ + { + "attributes": { + "POSITION": 60, + "NORMAL": 61, + "TEXCOORD_0": 62 + }, + "indices": 63, + "material": 0 + } + ] + }, + { + "name": "Mesh.228", + "primitives": [ + { + "attributes": { + "POSITION": 64, + "NORMAL": 65, + "TEXCOORD_0": 66 + }, + "indices": 63, + "material": 0 + } + ] + }, + { + "name": "Mesh.229", + "primitives": [ + { + "attributes": { + "POSITION": 67, + "NORMAL": 68, + "TEXCOORD_0": 69 + }, + "indices": 70, + "material": 0 + } + ] + } + ], + "textures": [ + { + "sampler": 0, + "source": 0 + } + ], + "images": [ + { + "mimeType": "image/jpeg", + "name": "LowPolyCarsCesiumTexture", + "uri": "../textures/color_512x512.jpg" + } + ], + "accessors": [ + { + "bufferView": 0, + "componentType": 5126, + "count": 6894, + "max": [ + -1.825615644454956, + 1.4976463317871094, + 0.676990270614624 + ], + "min": [ + -4.111366271972656, + 0.991922914981842, + -0.9168975949287415 + ], + "type": "VEC3" + }, + { + "bufferView": 1, + "componentType": 5126, + "count": 6894, + "type": "VEC3" + }, + { + "bufferView": 2, + "componentType": 5126, + "count": 6894, + "type": "VEC2" + }, + { + "bufferView": 3, + "componentType": 5123, + "count": 12456, + "type": "SCALAR" + }, + { + "bufferView": 4, + "componentType": 5126, + "count": 32, + "max": [ + 3.2519187927246094, + 1.952402949333191, + 1.2795385122299194 + ], + "min": [ + 1.2941431999206543, + 1.2774696350097656, + -0.9651310443878174 + ], + "type": "VEC3" + }, + { + "bufferView": 5, + "componentType": 5126, + "count": 32, + "type": "VEC3" + }, + { + "bufferView": 6, + "componentType": 5126, + "count": 32, + "type": "VEC2" + }, + { + "bufferView": 7, + "componentType": 5123, + "count": 48, + "type": "SCALAR" + }, + { + "bufferView": 8, + "componentType": 5126, + "count": 4134, + "max": [ + 4.349225044250488, + 0.9116528034210205, + 1.2954109907150269 + ], + "min": [ + -0.1798720359802246, + -2.9802322387695312e-08, + -1.09258234500885 + ], + "type": "VEC3" + }, + { + "bufferView": 9, + "componentType": 5126, + "count": 4134, + "type": "VEC3" + }, + { + "bufferView": 10, + "componentType": 5126, + "count": 4134, + "type": "VEC2" + }, + { + "bufferView": 11, + "componentType": 5123, + "count": 7416, + "type": "SCALAR" + }, + { + "bufferView": 12, + "componentType": 5126, + "count": 1980, + "max": [ + -1.6796386241912842, + 0.8172327876091003, + 1.089613914489746 + ], + "min": [ + -4.727500915527344, + 0.016771972179412842, + -1.4370825290679932 + ], + "type": "VEC3" + }, + { + "bufferView": 13, + "componentType": 5126, + "count": 1980, + "type": "VEC3" + }, + { + "bufferView": 14, + "componentType": 5126, + "count": 1980, + "type": "VEC2" + }, + { + "bufferView": 15, + "componentType": 5123, + "count": 3432, + "type": "SCALAR" + }, + { + "bufferView": 16, + "componentType": 5126, + "count": 647, + "max": [ + 4.760288238525391, + 2.0944974422454834, + 1.186277985572815 + ], + "min": [ + -0.6113287210464478, + 0.5281069874763489, + -0.986976683139801 + ], + "type": "VEC3" + }, + { + "bufferView": 17, + "componentType": 5126, + "count": 647, + "type": "VEC3" + }, + { + "bufferView": 18, + "componentType": 5126, + "count": 647, + "type": "VEC2" + }, + { + "bufferView": 19, + "componentType": 5123, + "count": 1206, + "type": "SCALAR" + }, + { + "bufferView": 20, + "componentType": 5126, + "count": 40, + "max": [ + 2.863846778869629, + 2.1081624031066895, + 0.5742564797401428 + ], + "min": [ + 1.30610990524292, + 2.0944972038269043, + -0.3738171458244324 + ], + "type": "VEC3" + }, + { + "bufferView": 21, + "componentType": 5126, + "count": 40, + "type": "VEC3" + }, + { + "bufferView": 22, + "componentType": 5126, + "count": 40, + "type": "VEC2" + }, + { + "bufferView": 23, + "componentType": 5123, + "count": 60, + "type": "SCALAR" + }, + { + "bufferView": 24, + "componentType": 5126, + "count": 8, + "max": [ + 4.827330589294434, + 1.1359641551971436, + 1.0734889507293701 + ], + "min": [ + 4.737274169921875, + 0.862661600112915, + -0.5871187448501587 + ], + "type": "VEC3" + }, + { + "bufferView": 25, + "componentType": 5126, + "count": 8, + "type": "VEC3" + }, + { + "bufferView": 26, + "componentType": 5126, + "count": 8, + "type": "VEC2" + }, + { + "bufferView": 27, + "componentType": 5123, + "count": 12, + "type": "SCALAR" + }, + { + "bufferView": 28, + "componentType": 5126, + "count": 4, + "max": [ + 4.776774883270264, + 1.149524211883545, + 0.9145654439926147 + ], + "min": [ + 4.703772068023682, + 0.8510854244232178, + -0.4315716028213501 + ], + "type": "VEC3" + }, + { + "bufferView": 29, + "componentType": 5126, + "count": 4, + "type": "VEC3" + }, + { + "bufferView": 30, + "componentType": 5126, + "count": 4, + "type": "VEC2" + }, + { + "bufferView": 31, + "componentType": 5123, + "count": 6, + "type": "SCALAR" + }, + { + "bufferView": 32, + "componentType": 5126, + "count": 1730, + "max": [ + 4.8275909423828125, + 1.1886634826660156, + 1.2904963493347168 + ], + "min": [ + -0.8526400327682495, + 0.3686206340789795, + -1.110668659210205 + ], + "type": "VEC3" + }, + { + "bufferView": 33, + "componentType": 5126, + "count": 1730, + "type": "VEC3" + }, + { + "bufferView": 34, + "componentType": 5126, + "count": 1730, + "type": "VEC2" + }, + { + "bufferView": 35, + "componentType": 5123, + "count": 2988, + "type": "SCALAR" + }, + { + "bufferView": 36, + "componentType": 5126, + "count": 3924, + "max": [ + 1.0758616924285889, + 1.3304097652435303, + 0.8514509201049805 + ], + "min": [ + -0.25045859813690186, + 0.8668779134750366, + -0.6703141927719116 + ], + "type": "VEC3" + }, + { + "bufferView": 37, + "componentType": 5126, + "count": 3924, + "type": "VEC3" + }, + { + "bufferView": 38, + "componentType": 5126, + "count": 3924, + "type": "VEC2" + }, + { + "bufferView": 39, + "componentType": 5123, + "count": 6900, + "type": "SCALAR" + }, + { + "bufferView": 40, + "componentType": 5126, + "count": 492, + "max": [ + -0.6842715740203857, + 0.8599743843078613, + 0.7280910015106201 + ], + "min": [ + -4.8124237060546875, + 0.37496596574783325, + -1.1076585054397583 + ], + "type": "VEC3" + }, + { + "bufferView": 41, + "componentType": 5126, + "count": 492, + "type": "VEC3" + }, + { + "bufferView": 42, + "componentType": 5126, + "count": 492, + "type": "VEC2" + }, + { + "bufferView": 43, + "componentType": 5123, + "count": 798, + "type": "SCALAR" + }, + { + "bufferView": 44, + "componentType": 5126, + "count": 3568, + "max": [ + -1.501225233078003, + 1.6872458457946777, + 0.8619988560676575 + ], + "min": [ + -4.866485118865967, + 0.8585405945777893, + -1.2024487257003784 + ], + "type": "VEC3" + }, + { + "bufferView": 45, + "componentType": 5126, + "count": 3568, + "type": "VEC3" + }, + { + "bufferView": 46, + "componentType": 5126, + "count": 3568, + "type": "VEC2" + }, + { + "bufferView": 47, + "componentType": 5123, + "count": 4932, + "type": "SCALAR" + }, + { + "bufferView": 48, + "componentType": 5126, + "count": 80, + "max": [ + 4.829935073852539, + 0.7551631927490234, + 0.5135592222213745 + ], + "min": [ + -0.6737565994262695, + 0.444518506526947, + -0.3175361752510071 + ], + "type": "VEC3" + }, + { + "bufferView": 49, + "componentType": 5126, + "count": 80, + "type": "VEC3" + }, + { + "bufferView": 50, + "componentType": 5126, + "count": 80, + "type": "VEC2" + }, + { + "bufferView": 51, + "componentType": 5123, + "count": 120, + "type": "SCALAR" + }, + { + "bufferView": 52, + "componentType": 5126, + "count": 232, + "max": [ + -0.5099608302116394, + 1.197090744972229, + 0.841485857963562 + ], + "min": [ + -0.6341904401779175, + 0.7668983936309814, + -0.9236397743225098 + ], + "type": "VEC3" + }, + { + "bufferView": 53, + "componentType": 5126, + "count": 232, + "type": "VEC3" + }, + { + "bufferView": 54, + "componentType": 5126, + "count": 232, + "type": "VEC2" + }, + { + "bufferView": 55, + "componentType": 5123, + "count": 360, + "type": "SCALAR" + }, + { + "bufferView": 56, + "componentType": 5126, + "count": 294, + "max": [ + 3.2601161003112793, + 1.4773340225219727, + 1.2927794456481934 + ], + "min": [ + 3.0941240787506104, + 1.2197003364562988, + -0.9776713848114014 + ], + "type": "VEC3" + }, + { + "bufferView": 57, + "componentType": 5126, + "count": 294, + "type": "VEC3" + }, + { + "bufferView": 58, + "componentType": 5126, + "count": 294, + "type": "VEC2" + }, + { + "bufferView": 59, + "componentType": 5123, + "count": 456, + "type": "SCALAR" + }, + { + "bufferView": 60, + "componentType": 5126, + "count": 160, + "max": [ + 2.502000570297241, + 1.1759744882583618, + 1.0945967435836792 + ], + "min": [ + 1.3382869958877563, + 1.1212471723556519, + -0.9120360612869263 + ], + "type": "VEC3" + }, + { + "bufferView": 61, + "componentType": 5126, + "count": 160, + "type": "VEC3" + }, + { + "bufferView": 62, + "componentType": 5126, + "count": 160, + "type": "VEC2" + }, + { + "bufferView": 63, + "componentType": 5123, + "count": 240, + "type": "SCALAR" + }, + { + "bufferView": 64, + "componentType": 5126, + "count": 160, + "max": [ + 4.708327770233154, + 1.0702195167541504, + 1.2038722038269043 + ], + "min": [ + -0.4694225788116455, + 1.0067923069000244, + -0.9996917247772217 + ], + "type": "VEC3" + }, + { + "bufferView": 65, + "componentType": 5126, + "count": 160, + "type": "VEC3" + }, + { + "bufferView": 66, + "componentType": 5126, + "count": 160, + "type": "VEC2" + }, + { + "bufferView": 67, + "componentType": 5126, + "count": 224, + "max": [ + 4.832830429077148, + 1.2186294794082642, + 1.1812586784362793 + ], + "min": [ + 4.655939102172852, + 0.7765794992446899, + -0.6930826902389526 + ], + "type": "VEC3" + }, + { + "bufferView": 68, + "componentType": 5126, + "count": 224, + "type": "VEC3" + }, + { + "bufferView": 69, + "componentType": 5126, + "count": 224, + "type": "VEC2" + }, + { + "bufferView": 70, + "componentType": 5123, + "count": 414, + "type": "SCALAR" + } + ], + "bufferViews": [ + { + "buffer": 0, + "byteLength": 82728, + "byteOffset": 0, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 82728, + "byteOffset": 82728, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 55152, + "byteOffset": 165456, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 24912, + "byteOffset": 220608, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 384, + "byteOffset": 245520, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 384, + "byteOffset": 245904, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 256, + "byteOffset": 246288, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 96, + "byteOffset": 246544, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 49608, + "byteOffset": 246640, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 49608, + "byteOffset": 296248, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 33072, + "byteOffset": 345856, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 14832, + "byteOffset": 378928, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 23760, + "byteOffset": 393760, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 23760, + "byteOffset": 417520, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 15840, + "byteOffset": 441280, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 6864, + "byteOffset": 457120, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 7764, + "byteOffset": 463984, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 7764, + "byteOffset": 471748, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 5176, + "byteOffset": 479512, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 2412, + "byteOffset": 484688, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 487100, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 487580, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 320, + "byteOffset": 488060, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 120, + "byteOffset": 488380, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 96, + "byteOffset": 488500, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 96, + "byteOffset": 488596, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 64, + "byteOffset": 488692, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 488756, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 48, + "byteOffset": 488780, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 48, + "byteOffset": 488828, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 488876, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 12, + "byteOffset": 488908, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 20760, + "byteOffset": 488920, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 20760, + "byteOffset": 509680, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 13840, + "byteOffset": 530440, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 5976, + "byteOffset": 544280, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 47088, + "byteOffset": 550256, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 47088, + "byteOffset": 597344, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 31392, + "byteOffset": 644432, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 13800, + "byteOffset": 675824, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 5904, + "byteOffset": 689624, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 5904, + "byteOffset": 695528, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 3936, + "byteOffset": 701432, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1596, + "byteOffset": 705368, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 42816, + "byteOffset": 706964, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 42816, + "byteOffset": 749780, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 28544, + "byteOffset": 792596, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 9864, + "byteOffset": 821140, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 960, + "byteOffset": 831004, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 960, + "byteOffset": 831964, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 640, + "byteOffset": 832924, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 240, + "byteOffset": 833564, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 2784, + "byteOffset": 833804, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 2784, + "byteOffset": 836588, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1856, + "byteOffset": 839372, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 720, + "byteOffset": 841228, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 3528, + "byteOffset": 841948, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 3528, + "byteOffset": 845476, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 2352, + "byteOffset": 849004, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 912, + "byteOffset": 851356, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 1920, + "byteOffset": 852268, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1920, + "byteOffset": 854188, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1280, + "byteOffset": 856108, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 857388, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 1920, + "byteOffset": 857868, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1920, + "byteOffset": 859788, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1280, + "byteOffset": 861708, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 2688, + "byteOffset": 862988, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 2688, + "byteOffset": 865676, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1792, + "byteOffset": 868364, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 828, + "byteOffset": 870156, + "target": 34963 + } + ], + "samplers": [ + { + "magFilter": 9729, + "minFilter": 9987 + } + ], + "buffers": [ + { + "byteLength": 870984, + "uri": "model.bin" + } + ] +} diff --git a/assets/models/custom/lowpoly_cars/car_a03_001/preview.png b/assets/models/custom/lowpoly_cars/car_a03_001/preview.png new file mode 100644 index 0000000..1f4ce75 Binary files /dev/null and b/assets/models/custom/lowpoly_cars/car_a03_001/preview.png differ diff --git a/assets/models/custom/lowpoly_cars/index.html b/assets/models/custom/lowpoly_cars/index.html new file mode 100644 index 0000000..d030a45 --- /dev/null +++ b/assets/models/custom/lowpoly_cars/index.html @@ -0,0 +1,13 @@ +LowPoly Cars +
Car A01 002

Car A01 002

car · 4,574 tris

5.3661 x 2.2731 x 2.1082 m

carmaterial

+
Car A01 003

Car A01 003

car · 4,574 tris

5.3661 x 2.2731 x 2.1082 m

carmaterial

+
Car A02 002

Car A02 002

car · 5,898 tris

5.3727 x 2.3141 x 2.1082 m

carmaterial

+
Car A02 003

Car A02 003

car · 5,898 tris

5.3727 x 2.3141 x 2.1082 m

carmaterial

+
Car A03 001

Car A03 001

car · 14,028 tris

9.6993 x 2.7325 x 2.1082 m

carmaterial

+
Tractor A01 001

Tractor A01 001

tractor · 3,899 tris

4.3862 x 2.5279 x 3.04 m

carmaterial

+
Tractor A02 001

Tractor A02 001

tractor · 4,295 tris

5.894 x 2.8004 x 3.0523 m

carmaterial

+
Tractor A03 001

Tractor A03 001

tractor · 12,767 tris

10.4554 x 2.7708 x 3.04 m

carmaterial

+
Truck A01 001

Truck A01 001

truck · 8,724 tris

14.7667 x 3.288 x 4.5493 m

carmaterial

+
Truck A02 001

Truck A02 001

truck · 8,444 tris

12.1239 x 3.2881 x 4.5493 m

carmaterial

+
Truck A03 001

Truck A03 001

truck · 12,172 tris

12.1625 x 3.4661 x 4.0701 m

carmaterial

+
Truck A04 001

Truck A04 001

truck · 13,127 tris

12.1068 x 3.4692 x 4.0701 m

carmaterial

diff --git a/assets/models/custom/lowpoly_cars/manifest.json b/assets/models/custom/lowpoly_cars/manifest.json new file mode 100644 index 0000000..3278a92 --- /dev/null +++ b/assets/models/custom/lowpoly_cars/manifest.json @@ -0,0 +1,260 @@ +{ + "source": "011.+LowPoly_Cars_01_blend.blend", + "license": "Unknown; verify the original download license before redistribution.", + "texture": "textures/color_512x512.jpg", + "layout": "Each asset has model.gltf/model.bin/preview.png; the 512px color texture is shared in textures/.", + "assets": [ + { + "id": "car_a01_002", + "name": "Car A01 002", + "category": "car", + "sourceRoot": "car_a01_002", + "model": "car_a01_002/model.gltf", + "bin": "car_a01_002/model.bin", + "preview": "car_a01_002/preview.png", + "metrics": { + "vertices": 2526, + "triangles": 4574, + "dimensions": [ + 5.3661, + 2.2731, + 2.1082 + ], + "materials": [ + "carmaterial" + ] + } + }, + { + "id": "car_a01_003", + "name": "Car A01 003", + "category": "car", + "sourceRoot": "car_a01_003", + "model": "car_a01_003/model.gltf", + "bin": "car_a01_003/model.bin", + "preview": "car_a01_003/preview.png", + "metrics": { + "vertices": 2526, + "triangles": 4574, + "dimensions": [ + 5.3661, + 2.2731, + 2.1082 + ], + "materials": [ + "carmaterial" + ] + } + }, + { + "id": "car_a02_002", + "name": "Car A02 002", + "category": "car", + "sourceRoot": "car_a02_002", + "model": "car_a02_002/model.gltf", + "bin": "car_a02_002/model.bin", + "preview": "car_a02_002/preview.png", + "metrics": { + "vertices": 3426, + "triangles": 5898, + "dimensions": [ + 5.3727, + 2.3141, + 2.1082 + ], + "materials": [ + "carmaterial" + ] + } + }, + { + "id": "car_a02_003", + "name": "Car A02 003", + "category": "car", + "sourceRoot": "car_a02_003", + "model": "car_a02_003/model.gltf", + "bin": "car_a02_003/model.bin", + "preview": "car_a02_003/preview.png", + "metrics": { + "vertices": 3426, + "triangles": 5898, + "dimensions": [ + 5.3727, + 2.3141, + 2.1082 + ], + "materials": [ + "carmaterial" + ] + } + }, + { + "id": "car_a03_001", + "name": "Car A03 001", + "category": "car", + "sourceRoot": "car_a03_001", + "model": "car_a03_001/model.gltf", + "bin": "car_a03_001/model.bin", + "preview": "car_a03_001/preview.png", + "metrics": { + "vertices": 9401, + "triangles": 14028, + "dimensions": [ + 9.6993, + 2.7325, + 2.1082 + ], + "materials": [ + "carmaterial" + ] + } + }, + { + "id": "tractor_a01_001", + "name": "Tractor A01 001", + "category": "tractor", + "sourceRoot": "tractor_a01_001", + "model": "tractor_a01_001/model.gltf", + "bin": "tractor_a01_001/model.bin", + "preview": "tractor_a01_001/preview.png", + "metrics": { + "vertices": 2301, + "triangles": 3899, + "dimensions": [ + 4.3862, + 2.5279, + 3.04 + ], + "materials": [ + "carmaterial" + ] + } + }, + { + "id": "tractor_a02_001", + "name": "Tractor A02 001", + "category": "tractor", + "sourceRoot": "tractor_a02_001", + "model": "tractor_a02_001/model.gltf", + "bin": "tractor_a02_001/model.bin", + "preview": "tractor_a02_001/preview.png", + "metrics": { + "vertices": 2517, + "triangles": 4295, + "dimensions": [ + 5.894, + 2.8004, + 3.0523 + ], + "materials": [ + "carmaterial" + ] + } + }, + { + "id": "tractor_a03_001", + "name": "Tractor A03 001", + "category": "tractor", + "sourceRoot": "tractor_a03_001", + "model": "tractor_a03_001/model.gltf", + "bin": "tractor_a03_001/model.bin", + "preview": "tractor_a03_001/preview.png", + "metrics": { + "vertices": 8853, + "triangles": 12767, + "dimensions": [ + 10.4554, + 2.7708, + 3.04 + ], + "materials": [ + "carmaterial" + ] + } + }, + { + "id": "truck_a01_001", + "name": "Truck A01 001", + "category": "truck", + "sourceRoot": "truck_a01_001", + "model": "truck_a01_001/model.gltf", + "bin": "truck_a01_001/model.bin", + "preview": "truck_a01_001/preview.png", + "metrics": { + "vertices": 4751, + "triangles": 8724, + "dimensions": [ + 14.7667, + 3.288, + 4.5493 + ], + "materials": [ + "carmaterial" + ] + } + }, + { + "id": "truck_a02_001", + "name": "Truck A02 001", + "category": "truck", + "sourceRoot": "truck_a02_001", + "model": "truck_a02_001/model.gltf", + "bin": "truck_a02_001/model.bin", + "preview": "truck_a02_001/preview.png", + "metrics": { + "vertices": 4583, + "triangles": 8444, + "dimensions": [ + 12.1239, + 3.2881, + 4.5493 + ], + "materials": [ + "carmaterial" + ] + } + }, + { + "id": "truck_a03_001", + "name": "Truck A03 001", + "category": "truck", + "sourceRoot": "truck_a03_001", + "model": "truck_a03_001/model.gltf", + "bin": "truck_a03_001/model.bin", + "preview": "truck_a03_001/preview.png", + "metrics": { + "vertices": 6695, + "triangles": 12172, + "dimensions": [ + 12.1625, + 3.4661, + 4.0701 + ], + "materials": [ + "carmaterial" + ] + } + }, + { + "id": "truck_a04_001", + "name": "Truck A04 001", + "category": "truck", + "sourceRoot": "truck_a04_001", + "model": "truck_a04_001/model.gltf", + "bin": "truck_a04_001/model.bin", + "preview": "truck_a04_001/preview.png", + "metrics": { + "vertices": 7397, + "triangles": 13127, + "dimensions": [ + 12.1068, + 3.4692, + 4.0701 + ], + "materials": [ + "carmaterial" + ] + } + } + ] +} diff --git a/assets/models/custom/lowpoly_cars/textures/color_512x512.jpg b/assets/models/custom/lowpoly_cars/textures/color_512x512.jpg new file mode 100644 index 0000000..a2052ea Binary files /dev/null and b/assets/models/custom/lowpoly_cars/textures/color_512x512.jpg differ diff --git a/assets/models/custom/lowpoly_cars/tractor_a01_001/model.bin b/assets/models/custom/lowpoly_cars/tractor_a01_001/model.bin new file mode 100644 index 0000000..26b6da7 Binary files /dev/null and b/assets/models/custom/lowpoly_cars/tractor_a01_001/model.bin differ diff --git a/assets/models/custom/lowpoly_cars/tractor_a01_001/model.gltf b/assets/models/custom/lowpoly_cars/tractor_a01_001/model.gltf new file mode 100644 index 0000000..60cc17d --- /dev/null +++ b/assets/models/custom/lowpoly_cars/tractor_a01_001/model.gltf @@ -0,0 +1,918 @@ +{ + "asset": { + "generator": "Khronos glTF Blender I/O v4.5.51", + "version": "2.0" + }, + "extensionsUsed": [ + "KHR_materials_specular", + "KHR_materials_ior" + ], + "scene": 0, + "scenes": [ + { + "name": "Scene", + "nodes": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ] + } + ], + "nodes": [ + { + "mesh": 0, + "name": "Rectangle020.001" + }, + { + "mesh": 1, + "name": "Rectangle019.001" + }, + { + "mesh": 2, + "name": "Object178.001" + }, + { + "mesh": 3, + "name": "Object175.001" + }, + { + "mesh": 4, + "name": "Line250.001" + }, + { + "mesh": 5, + "name": "Cylinder135.001" + }, + { + "mesh": 6, + "name": "Cylinder133.001" + }, + { + "mesh": 7, + "name": "Box1449.001" + }, + { + "mesh": 8, + "name": "Box1448.001" + }, + { + "mesh": 9, + "name": "Box1447.001" + }, + { + "mesh": 10, + "name": "Box1444.001" + } + ], + "materials": [ + { + "doubleSided": true, + "extensions": { + "KHR_materials_specular": { + "specularFactor": 0 + }, + "KHR_materials_ior": { + "ior": 1.4500000476837158 + } + }, + "name": "carmaterial", + "pbrMetallicRoughness": { + "baseColorTexture": { + "index": 0 + }, + "roughnessFactor": 0.858578622341156 + } + } + ], + "meshes": [ + { + "name": "Mesh.212", + "primitives": [ + { + "attributes": { + "POSITION": 0, + "NORMAL": 1, + "TEXCOORD_0": 2 + }, + "indices": 3, + "material": 0 + } + ] + }, + { + "name": "Mesh.213", + "primitives": [ + { + "attributes": { + "POSITION": 4, + "NORMAL": 5, + "TEXCOORD_0": 6 + }, + "indices": 7, + "material": 0 + } + ] + }, + { + "name": "Mesh.214", + "primitives": [ + { + "attributes": { + "POSITION": 8, + "NORMAL": 9, + "TEXCOORD_0": 10 + }, + "indices": 11, + "material": 0 + } + ] + }, + { + "name": "Mesh.215", + "primitives": [ + { + "attributes": { + "POSITION": 12, + "NORMAL": 13, + "TEXCOORD_0": 14 + }, + "indices": 15, + "material": 0 + } + ] + }, + { + "name": "Mesh.216", + "primitives": [ + { + "attributes": { + "POSITION": 16, + "NORMAL": 17, + "TEXCOORD_0": 18 + }, + "indices": 19, + "material": 0 + } + ] + }, + { + "name": "Mesh.217", + "primitives": [ + { + "attributes": { + "POSITION": 20, + "NORMAL": 21, + "TEXCOORD_0": 22 + }, + "indices": 23, + "material": 0 + } + ] + }, + { + "name": "Mesh.218", + "primitives": [ + { + "attributes": { + "POSITION": 24, + "NORMAL": 25, + "TEXCOORD_0": 26 + }, + "indices": 27, + "material": 0 + } + ] + }, + { + "name": "Mesh.219", + "primitives": [ + { + "attributes": { + "POSITION": 28, + "NORMAL": 29, + "TEXCOORD_0": 30 + }, + "indices": 31, + "material": 0 + } + ] + }, + { + "name": "Mesh.220", + "primitives": [ + { + "attributes": { + "POSITION": 32, + "NORMAL": 33, + "TEXCOORD_0": 34 + }, + "indices": 35, + "material": 0 + } + ] + }, + { + "name": "Mesh.221", + "primitives": [ + { + "attributes": { + "POSITION": 36, + "NORMAL": 37, + "TEXCOORD_0": 38 + }, + "indices": 39, + "material": 0 + } + ] + }, + { + "name": "Mesh.222", + "primitives": [ + { + "attributes": { + "POSITION": 40, + "NORMAL": 41, + "TEXCOORD_0": 42 + }, + "indices": 43, + "material": 0 + } + ] + } + ], + "textures": [ + { + "sampler": 0, + "source": 0 + } + ], + "images": [ + { + "mimeType": "image/jpeg", + "name": "LowPolyCarsCesiumTexture", + "uri": "../textures/color_512x512.jpg" + } + ], + "accessors": [ + { + "bufferView": 0, + "componentType": 5126, + "count": 1469, + "max": [ + 1.6975711584091187, + 2.9161386489868164, + 1.1722427606582642 + ], + "min": [ + -2.203437328338623, + 0.7860412001609802, + -1.204569697380066 + ], + "type": "VEC3" + }, + { + "bufferView": 1, + "componentType": 5126, + "count": 1469, + "type": "VEC3" + }, + { + "bufferView": 2, + "componentType": 5126, + "count": 1469, + "type": "VEC2" + }, + { + "bufferView": 3, + "componentType": 5123, + "count": 2427, + "type": "SCALAR" + }, + { + "bufferView": 4, + "componentType": 5126, + "count": 96, + "max": [ + 1.930496096611023, + 1.744305968284607, + 0.6042758226394653 + ], + "min": [ + 0.1960076093673706, + 0.93204265832901, + -0.635987401008606 + ], + "type": "VEC3" + }, + { + "bufferView": 5, + "componentType": 5126, + "count": 96, + "type": "VEC3" + }, + { + "bufferView": 6, + "componentType": 5126, + "count": 96, + "type": "VEC2" + }, + { + "bufferView": 7, + "componentType": 5123, + "count": 168, + "type": "SCALAR" + }, + { + "bufferView": 8, + "componentType": 5126, + "count": 32, + "max": [ + 1.334498405456543, + 2.7617526054382324, + 0.8541421890258789 + ], + "min": [ + -0.2517751455307007, + 1.9346791505813599, + -0.7565109729766846 + ], + "type": "VEC3" + }, + { + "bufferView": 9, + "componentType": 5126, + "count": 32, + "type": "VEC3" + }, + { + "bufferView": 10, + "componentType": 5126, + "count": 32, + "type": "VEC2" + }, + { + "bufferView": 11, + "componentType": 5123, + "count": 54, + "type": "SCALAR" + }, + { + "bufferView": 12, + "componentType": 5126, + "count": 32, + "max": [ + -1.6952612400054932, + 1.5370264053344727, + 0.7388277649879456 + ], + "min": [ + -1.8932229280471802, + 0.9074157476425171, + -0.7088407874107361 + ], + "type": "VEC3" + }, + { + "bufferView": 13, + "componentType": 5126, + "count": 32, + "type": "VEC3" + }, + { + "bufferView": 14, + "componentType": 5126, + "count": 32, + "type": "VEC2" + }, + { + "bufferView": 15, + "componentType": 5123, + "count": 48, + "type": "SCALAR" + }, + { + "bufferView": 16, + "componentType": 5126, + "count": 310, + "max": [ + -0.3921399712562561, + 3.040038824081421, + 0.8353042006492615 + ], + "min": [ + -0.5216806530952454, + 1.6912429332733154, + 0.6449068188667297 + ], + "type": "VEC3" + }, + { + "bufferView": 17, + "componentType": 5126, + "count": 310, + "type": "VEC3" + }, + { + "bufferView": 18, + "componentType": 5126, + "count": 310, + "type": "VEC2" + }, + { + "bufferView": 19, + "componentType": 5123, + "count": 468, + "type": "SCALAR" + }, + { + "bufferView": 20, + "componentType": 5126, + "count": 2140, + "max": [ + 2.1827592849731445, + 1.1958849430084229, + 1.163870096206665 + ], + "min": [ + -1.683742880821228, + 0.37404870986938477, + -1.1929504871368408 + ], + "type": "VEC3" + }, + { + "bufferView": 21, + "componentType": 5126, + "count": 2140, + "type": "VEC3" + }, + { + "bufferView": 22, + "componentType": 5126, + "count": 2140, + "type": "VEC2" + }, + { + "bufferView": 23, + "componentType": 5123, + "count": 4008, + "type": "SCALAR" + }, + { + "bufferView": 24, + "componentType": 5126, + "count": 2208, + "max": [ + 1.9612305164337158, + 1.6576728820800781, + 1.2428208589553833 + ], + "min": [ + -2.057445526123047, + 0, + -1.2850725650787354 + ], + "type": "VEC3" + }, + { + "bufferView": 25, + "componentType": 5126, + "count": 2208, + "type": "VEC3" + }, + { + "bufferView": 26, + "componentType": 5126, + "count": 2208, + "type": "VEC2" + }, + { + "bufferView": 27, + "componentType": 5123, + "count": 3720, + "type": "SCALAR" + }, + { + "bufferView": 28, + "componentType": 5126, + "count": 56, + "max": [ + 0.3900825083255768, + 1.8057881593704224, + 0.758997917175293 + ], + "min": [ + 0.17267626523971558, + 1.7638591527938843, + 0.7036498785018921 + ], + "type": "VEC3" + }, + { + "bufferView": 29, + "componentType": 5126, + "count": 56, + "type": "VEC3" + }, + { + "bufferView": 30, + "componentType": 5126, + "count": 56, + "type": "VEC2" + }, + { + "bufferView": 31, + "componentType": 5123, + "count": 84, + "type": "SCALAR" + }, + { + "bufferView": 32, + "componentType": 5126, + "count": 40, + "max": [ + 0.10584698617458344, + 0.8977700471878052, + 0.9958042502403259 + ], + "min": [ + -0.517703652381897, + 0.8380477428436279, + 0.7023323178291321 + ], + "type": "VEC3" + }, + { + "bufferView": 33, + "componentType": 5126, + "count": 40, + "type": "VEC3" + }, + { + "bufferView": 34, + "componentType": 5126, + "count": 40, + "type": "VEC2" + }, + { + "bufferView": 35, + "componentType": 5123, + "count": 60, + "type": "SCALAR" + }, + { + "bufferView": 36, + "componentType": 5126, + "count": 280, + "max": [ + -1.3012173175811768, + 1.658207654953003, + 0.7557153701782227 + ], + "min": [ + -1.922289252281189, + 0.9572750329971313, + -0.7371543645858765 + ], + "type": "VEC3" + }, + { + "bufferView": 37, + "componentType": 5126, + "count": 280, + "type": "VEC3" + }, + { + "bufferView": 38, + "componentType": 5126, + "count": 280, + "type": "VEC2" + }, + { + "bufferView": 39, + "componentType": 5123, + "count": 396, + "type": "SCALAR" + }, + { + "bufferView": 40, + "componentType": 5126, + "count": 192, + "max": [ + -1.859789252281189, + 1.3449180126190186, + 0.6165856122970581 + ], + "min": [ + -1.9417186975479126, + 1.19881010055542, + -0.5781869888305664 + ], + "type": "VEC3" + }, + { + "bufferView": 41, + "componentType": 5126, + "count": 192, + "type": "VEC3" + }, + { + "bufferView": 42, + "componentType": 5126, + "count": 192, + "type": "VEC2" + }, + { + "bufferView": 43, + "componentType": 5123, + "count": 264, + "type": "SCALAR" + } + ], + "bufferViews": [ + { + "buffer": 0, + "byteLength": 17628, + "byteOffset": 0, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 17628, + "byteOffset": 17628, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 11752, + "byteOffset": 35256, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 4854, + "byteOffset": 47008, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 1152, + "byteOffset": 51864, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1152, + "byteOffset": 53016, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 768, + "byteOffset": 54168, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 336, + "byteOffset": 54936, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 384, + "byteOffset": 55272, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 384, + "byteOffset": 55656, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 256, + "byteOffset": 56040, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 108, + "byteOffset": 56296, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 384, + "byteOffset": 56404, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 384, + "byteOffset": 56788, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 256, + "byteOffset": 57172, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 96, + "byteOffset": 57428, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 3720, + "byteOffset": 57524, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 3720, + "byteOffset": 61244, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 2480, + "byteOffset": 64964, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 936, + "byteOffset": 67444, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 25680, + "byteOffset": 68380, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 25680, + "byteOffset": 94060, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 17120, + "byteOffset": 119740, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 136860, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 26496, + "byteOffset": 144876, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 26496, + "byteOffset": 171372, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 17664, + "byteOffset": 197868, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 7440, + "byteOffset": 215532, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 672, + "byteOffset": 222972, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 672, + "byteOffset": 223644, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 448, + "byteOffset": 224316, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 168, + "byteOffset": 224764, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 224932, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 225412, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 320, + "byteOffset": 225892, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 120, + "byteOffset": 226212, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 3360, + "byteOffset": 226332, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 3360, + "byteOffset": 229692, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 2240, + "byteOffset": 233052, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 792, + "byteOffset": 235292, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 2304, + "byteOffset": 236084, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 2304, + "byteOffset": 238388, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1536, + "byteOffset": 240692, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 528, + "byteOffset": 242228, + "target": 34963 + } + ], + "samplers": [ + { + "magFilter": 9729, + "minFilter": 9987 + } + ], + "buffers": [ + { + "byteLength": 242756, + "uri": "model.bin" + } + ] +} diff --git a/assets/models/custom/lowpoly_cars/tractor_a01_001/preview.png b/assets/models/custom/lowpoly_cars/tractor_a01_001/preview.png new file mode 100644 index 0000000..b77bd7c Binary files /dev/null and b/assets/models/custom/lowpoly_cars/tractor_a01_001/preview.png differ diff --git a/assets/models/custom/lowpoly_cars/tractor_a02_001/model.bin b/assets/models/custom/lowpoly_cars/tractor_a02_001/model.bin new file mode 100644 index 0000000..7d2f96c Binary files /dev/null and b/assets/models/custom/lowpoly_cars/tractor_a02_001/model.bin differ diff --git a/assets/models/custom/lowpoly_cars/tractor_a02_001/model.gltf b/assets/models/custom/lowpoly_cars/tractor_a02_001/model.gltf new file mode 100644 index 0000000..04bc03e --- /dev/null +++ b/assets/models/custom/lowpoly_cars/tractor_a02_001/model.gltf @@ -0,0 +1,1072 @@ +{ + "asset": { + "generator": "Khronos glTF Blender I/O v4.5.51", + "version": "2.0" + }, + "extensionsUsed": [ + "KHR_materials_specular", + "KHR_materials_ior" + ], + "scene": 0, + "scenes": [ + { + "name": "Scene", + "nodes": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12 + ] + } + ], + "nodes": [ + { + "mesh": 0, + "name": "Rectangle024.001" + }, + { + "mesh": 1, + "name": "Rectangle023.001" + }, + { + "mesh": 2, + "name": "Object182.001" + }, + { + "mesh": 3, + "name": "Object181.001" + }, + { + "mesh": 4, + "name": "Line256.001" + }, + { + "mesh": 5, + "name": "Line255.001" + }, + { + "mesh": 6, + "name": "Cylinder148.001" + }, + { + "mesh": 7, + "name": "Cylinder146.001" + }, + { + "mesh": 8, + "name": "Box1496.001" + }, + { + "mesh": 9, + "name": "Box1495.001" + }, + { + "mesh": 10, + "name": "Box1494.001" + }, + { + "mesh": 11, + "name": "Box1493.001" + }, + { + "mesh": 12, + "name": "Box1492.001" + } + ], + "materials": [ + { + "doubleSided": true, + "extensions": { + "KHR_materials_specular": { + "specularFactor": 0 + }, + "KHR_materials_ior": { + "ior": 1.4500000476837158 + } + }, + "name": "carmaterial", + "pbrMetallicRoughness": { + "baseColorTexture": { + "index": 0 + }, + "roughnessFactor": 0.858578622341156 + } + } + ], + "meshes": [ + { + "name": "Mesh.212", + "primitives": [ + { + "attributes": { + "POSITION": 0, + "NORMAL": 1, + "TEXCOORD_0": 2 + }, + "indices": 3, + "material": 0 + } + ] + }, + { + "name": "Mesh.213", + "primitives": [ + { + "attributes": { + "POSITION": 4, + "NORMAL": 5, + "TEXCOORD_0": 6 + }, + "indices": 7, + "material": 0 + } + ] + }, + { + "name": "Mesh.214", + "primitives": [ + { + "attributes": { + "POSITION": 8, + "NORMAL": 9, + "TEXCOORD_0": 10 + }, + "indices": 11, + "material": 0 + } + ] + }, + { + "name": "Mesh.215", + "primitives": [ + { + "attributes": { + "POSITION": 12, + "NORMAL": 13, + "TEXCOORD_0": 14 + }, + "indices": 15, + "material": 0 + } + ] + }, + { + "name": "Mesh.216", + "primitives": [ + { + "attributes": { + "POSITION": 16, + "NORMAL": 17, + "TEXCOORD_0": 18 + }, + "indices": 19, + "material": 0 + } + ] + }, + { + "name": "Mesh.217", + "primitives": [ + { + "attributes": { + "POSITION": 20, + "NORMAL": 21, + "TEXCOORD_0": 22 + }, + "indices": 23, + "material": 0 + } + ] + }, + { + "name": "Mesh.218", + "primitives": [ + { + "attributes": { + "POSITION": 24, + "NORMAL": 25, + "TEXCOORD_0": 26 + }, + "indices": 27, + "material": 0 + } + ] + }, + { + "name": "Mesh.219", + "primitives": [ + { + "attributes": { + "POSITION": 28, + "NORMAL": 29, + "TEXCOORD_0": 30 + }, + "indices": 31, + "material": 0 + } + ] + }, + { + "name": "Mesh.220", + "primitives": [ + { + "attributes": { + "POSITION": 32, + "NORMAL": 33, + "TEXCOORD_0": 34 + }, + "indices": 35, + "material": 0 + } + ] + }, + { + "name": "Mesh.221", + "primitives": [ + { + "attributes": { + "POSITION": 36, + "NORMAL": 37, + "TEXCOORD_0": 38 + }, + "indices": 39, + "material": 0 + } + ] + }, + { + "name": "Mesh.222", + "primitives": [ + { + "attributes": { + "POSITION": 40, + "NORMAL": 41, + "TEXCOORD_0": 42 + }, + "indices": 43, + "material": 0 + } + ] + }, + { + "name": "Mesh.223", + "primitives": [ + { + "attributes": { + "POSITION": 44, + "NORMAL": 45, + "TEXCOORD_0": 46 + }, + "indices": 47, + "material": 0 + } + ] + }, + { + "name": "Mesh.224", + "primitives": [ + { + "attributes": { + "POSITION": 48, + "NORMAL": 49, + "TEXCOORD_0": 50 + }, + "indices": 51, + "material": 0 + } + ] + } + ], + "textures": [ + { + "sampler": 0, + "source": 0 + } + ], + "images": [ + { + "mimeType": "image/jpeg", + "name": "LowPolyCarsCesiumTexture", + "uri": "../textures/color_512x512.jpg" + } + ], + "accessors": [ + { + "bufferView": 0, + "componentType": 5126, + "count": 1469, + "max": [ + 2.4500367641448975, + 2.928433895111084, + 1.0993822813034058 + ], + "min": [ + -1.4565236568450928, + 0.7983356714248657, + -1.282758355140686 + ], + "type": "VEC3" + }, + { + "bufferView": 1, + "componentType": 5126, + "count": 1469, + "type": "VEC3" + }, + { + "bufferView": 2, + "componentType": 5126, + "count": 1469, + "type": "VEC2" + }, + { + "bufferView": 3, + "componentType": 5123, + "count": 2427, + "type": "SCALAR" + }, + { + "bufferView": 4, + "componentType": 5126, + "count": 96, + "max": [ + 2.6814608573913574, + 1.7566009759902954, + 0.5296452641487122 + ], + "min": [ + 0.9441584348678589, + 0.9443376660346985, + -0.7147142291069031 + ], + "type": "VEC3" + }, + { + "bufferView": 5, + "componentType": 5126, + "count": 96, + "type": "VEC3" + }, + { + "bufferView": 6, + "componentType": 5126, + "count": 96, + "type": "VEC2" + }, + { + "bufferView": 7, + "componentType": 5123, + "count": 168, + "type": "SCALAR" + }, + { + "bufferView": 8, + "componentType": 5126, + "count": 32, + "max": [ + 2.0857999324798584, + 2.7740478515625, + 0.780298113822937 + ], + "min": [ + 0.4962620735168457, + 1.9469743967056274, + -0.8338615894317627 + ], + "type": "VEC3" + }, + { + "bufferView": 9, + "componentType": 5126, + "count": 32, + "type": "VEC3" + }, + { + "bufferView": 10, + "componentType": 5126, + "count": 32, + "type": "VEC2" + }, + { + "bufferView": 11, + "componentType": 5123, + "count": 54, + "type": "SCALAR" + }, + { + "bufferView": 12, + "componentType": 5126, + "count": 32, + "max": [ + -0.9437844753265381, + 1.5493217706680298, + 0.668896496295929 + ], + "min": [ + -1.1451151371002197, + 0.9197111129760742, + -0.7786996960639954 + ], + "type": "VEC3" + }, + { + "bufferView": 13, + "componentType": 5126, + "count": 32, + "type": "VEC3" + }, + { + "bufferView": 14, + "componentType": 5126, + "count": 32, + "type": "VEC2" + }, + { + "bufferView": 15, + "componentType": 5123, + "count": 48, + "type": "SCALAR" + }, + { + "bufferView": 16, + "componentType": 5126, + "count": 512, + "max": [ + -0.6006267070770264, + 0.9552828669548035, + 1.249547004699707 + ], + "min": [ + -2.3515453338623047, + 0.3653358817100525, + -1.165797472000122 + ], + "type": "VEC3" + }, + { + "bufferView": 17, + "componentType": 5126, + "count": 512, + "type": "VEC3" + }, + { + "bufferView": 18, + "componentType": 5126, + "count": 512, + "type": "VEC2" + }, + { + "bufferView": 19, + "componentType": 5123, + "count": 816, + "type": "SCALAR" + }, + { + "bufferView": 20, + "componentType": 5126, + "count": 310, + "max": [ + 0.35942548513412476, + 3.0523338317871094, + 0.7623065114021301 + ], + "min": [ + 0.22989127039909363, + 1.703537940979004, + 0.5719186067581177 + ], + "type": "VEC3" + }, + { + "bufferView": 21, + "componentType": 5126, + "count": 310, + "type": "VEC3" + }, + { + "bufferView": 22, + "componentType": 5126, + "count": 310, + "type": "VEC2" + }, + { + "bufferView": 23, + "componentType": 5123, + "count": 468, + "type": "SCALAR" + }, + { + "bufferView": 24, + "componentType": 5126, + "count": 2140, + "max": [ + 2.9324610233306885, + 1.2081797122955322, + 1.0933942794799805 + ], + "min": [ + -0.9368640184402466, + 0.38634347915649414, + -1.2701667547225952 + ], + "type": "VEC3" + }, + { + "bufferView": 25, + "componentType": 5126, + "count": 2140, + "type": "VEC3" + }, + { + "bufferView": 26, + "componentType": 5126, + "count": 2140, + "type": "VEC2" + }, + { + "bufferView": 27, + "componentType": 5123, + "count": 4008, + "type": "SCALAR" + }, + { + "bufferView": 28, + "componentType": 5126, + "count": 2222, + "max": [ + 2.7136006355285645, + 1.6699676513671875, + 1.169170618057251 + ], + "min": [ + -1.3105131387710571, + 0.012295305728912354, + -1.3637418746948242 + ], + "type": "VEC3" + }, + { + "bufferView": 29, + "componentType": 5126, + "count": 2222, + "type": "VEC3" + }, + { + "bufferView": 30, + "componentType": 5126, + "count": 2222, + "type": "VEC2" + }, + { + "bufferView": 31, + "componentType": 5123, + "count": 3720, + "type": "SCALAR" + }, + { + "bufferView": 32, + "componentType": 5126, + "count": 240, + "max": [ + -2.223161220550537, + 0.992064356803894, + 1.4366868734359741 + ], + "min": [ + -2.961554527282715, + -2.9802322387695312e-08, + -1.3254289627075195 + ], + "type": "VEC3" + }, + { + "bufferView": 33, + "componentType": 5126, + "count": 240, + "type": "VEC3" + }, + { + "bufferView": 34, + "componentType": 5126, + "count": 240, + "type": "VEC2" + }, + { + "bufferView": 35, + "componentType": 5123, + "count": 372, + "type": "SCALAR" + }, + { + "bufferView": 36, + "componentType": 5126, + "count": 56, + "max": [ + 1.1416096687316895, + 1.818083643913269, + 0.6844436526298523 + ], + "min": [ + 0.9240875244140625, + 1.776154637336731, + 0.6285629868507385 + ], + "type": "VEC3" + }, + { + "bufferView": 37, + "componentType": 5126, + "count": 56, + "type": "VEC3" + }, + { + "bufferView": 38, + "componentType": 5126, + "count": 56, + "type": "VEC2" + }, + { + "bufferView": 39, + "componentType": 5123, + "count": 84, + "type": "SCALAR" + }, + { + "bufferView": 40, + "componentType": 5126, + "count": 40, + "max": [ + 0.8579415082931519, + 0.9100651144981384, + 0.9229481220245361 + ], + "min": [ + 0.2337251603603363, + 0.850342869758606, + 0.6279616951942444 + ], + "type": "VEC3" + }, + { + "bufferView": 41, + "componentType": 5126, + "count": 40, + "type": "VEC3" + }, + { + "bufferView": 42, + "componentType": 5126, + "count": 40, + "type": "VEC2" + }, + { + "bufferView": 43, + "componentType": 5123, + "count": 60, + "type": "SCALAR" + }, + { + "bufferView": 44, + "componentType": 5126, + "count": 280, + "max": [ + -0.5496883988380432, + 1.6705024242401123, + 0.685126543045044 + ], + "min": [ + -1.1740230321884155, + 0.9695698022842407, + -0.8079696893692017 + ], + "type": "VEC3" + }, + { + "bufferView": 45, + "componentType": 5126, + "count": 280, + "type": "VEC3" + }, + { + "bufferView": 46, + "componentType": 5126, + "count": 280, + "type": "VEC2" + }, + { + "bufferView": 47, + "componentType": 5123, + "count": 396, + "type": "SCALAR" + }, + { + "bufferView": 48, + "componentType": 5126, + "count": 192, + "max": [ + -1.108642816543579, + 1.357213020324707, + 0.5471974611282349 + ], + "min": [ + -1.193468689918518, + 1.2111051082611084, + -0.647610068321228 + ], + "type": "VEC3" + }, + { + "bufferView": 49, + "componentType": 5126, + "count": 192, + "type": "VEC3" + }, + { + "bufferView": 50, + "componentType": 5126, + "count": 192, + "type": "VEC2" + }, + { + "bufferView": 51, + "componentType": 5123, + "count": 264, + "type": "SCALAR" + } + ], + "bufferViews": [ + { + "buffer": 0, + "byteLength": 17628, + "byteOffset": 0, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 17628, + "byteOffset": 17628, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 11752, + "byteOffset": 35256, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 4854, + "byteOffset": 47008, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 1152, + "byteOffset": 51864, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1152, + "byteOffset": 53016, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 768, + "byteOffset": 54168, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 336, + "byteOffset": 54936, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 384, + "byteOffset": 55272, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 384, + "byteOffset": 55656, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 256, + "byteOffset": 56040, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 108, + "byteOffset": 56296, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 384, + "byteOffset": 56404, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 384, + "byteOffset": 56788, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 256, + "byteOffset": 57172, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 96, + "byteOffset": 57428, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 6144, + "byteOffset": 57524, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 6144, + "byteOffset": 63668, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 4096, + "byteOffset": 69812, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1632, + "byteOffset": 73908, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 3720, + "byteOffset": 75540, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 3720, + "byteOffset": 79260, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 2480, + "byteOffset": 82980, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 936, + "byteOffset": 85460, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 25680, + "byteOffset": 86396, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 25680, + "byteOffset": 112076, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 17120, + "byteOffset": 137756, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 154876, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 26664, + "byteOffset": 162892, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 26664, + "byteOffset": 189556, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 17776, + "byteOffset": 216220, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 7440, + "byteOffset": 233996, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 2880, + "byteOffset": 241436, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 2880, + "byteOffset": 244316, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1920, + "byteOffset": 247196, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 744, + "byteOffset": 249116, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 672, + "byteOffset": 249860, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 672, + "byteOffset": 250532, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 448, + "byteOffset": 251204, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 168, + "byteOffset": 251652, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 251820, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 252300, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 320, + "byteOffset": 252780, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 120, + "byteOffset": 253100, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 3360, + "byteOffset": 253220, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 3360, + "byteOffset": 256580, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 2240, + "byteOffset": 259940, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 792, + "byteOffset": 262180, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 2304, + "byteOffset": 262972, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 2304, + "byteOffset": 265276, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1536, + "byteOffset": 267580, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 528, + "byteOffset": 269116, + "target": 34963 + } + ], + "samplers": [ + { + "magFilter": 9729, + "minFilter": 9987 + } + ], + "buffers": [ + { + "byteLength": 269644, + "uri": "model.bin" + } + ] +} diff --git a/assets/models/custom/lowpoly_cars/tractor_a02_001/preview.png b/assets/models/custom/lowpoly_cars/tractor_a02_001/preview.png new file mode 100644 index 0000000..4de90e1 Binary files /dev/null and b/assets/models/custom/lowpoly_cars/tractor_a02_001/preview.png differ diff --git a/assets/models/custom/lowpoly_cars/tractor_a03_001/model.bin b/assets/models/custom/lowpoly_cars/tractor_a03_001/model.bin new file mode 100644 index 0000000..11da259 Binary files /dev/null and b/assets/models/custom/lowpoly_cars/tractor_a03_001/model.bin differ diff --git a/assets/models/custom/lowpoly_cars/tractor_a03_001/model.gltf b/assets/models/custom/lowpoly_cars/tractor_a03_001/model.gltf new file mode 100644 index 0000000..f349197 --- /dev/null +++ b/assets/models/custom/lowpoly_cars/tractor_a03_001/model.gltf @@ -0,0 +1,1534 @@ +{ + "asset": { + "generator": "Khronos glTF Blender I/O v4.5.51", + "version": "2.0" + }, + "extensionsUsed": [ + "KHR_materials_specular", + "KHR_materials_ior" + ], + "scene": 0, + "scenes": [ + { + "name": "Scene", + "nodes": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ] + } + ], + "nodes": [ + { + "mesh": 0, + "name": "Shape059.001" + }, + { + "mesh": 1, + "name": "Rectangle022.001" + }, + { + "mesh": 2, + "name": "Rectangle021.001" + }, + { + "mesh": 3, + "name": "Object477.001" + }, + { + "mesh": 4, + "name": "Object180.001" + }, + { + "mesh": 5, + "name": "Object179.001" + }, + { + "mesh": 6, + "name": "Line253.001" + }, + { + "mesh": 7, + "name": "Line252.001" + }, + { + "mesh": 8, + "name": "Cylinder260.001" + }, + { + "mesh": 9, + "name": "Cylinder140.001" + }, + { + "mesh": 10, + "name": "Cylinder138.001" + }, + { + "mesh": 11, + "name": "Box2417.001" + }, + { + "mesh": 12, + "name": "Box2416.001" + }, + { + "mesh": 13, + "name": "Box2415.001" + }, + { + "mesh": 14, + "name": "Box2414.001" + }, + { + "mesh": 15, + "name": "Box1453.001" + }, + { + "mesh": 16, + "name": "Box1452.001" + }, + { + "mesh": 17, + "name": "Box1451.001" + }, + { + "mesh": 18, + "name": "Box1450.001" + } + ], + "materials": [ + { + "doubleSided": true, + "extensions": { + "KHR_materials_specular": { + "specularFactor": 0 + }, + "KHR_materials_ior": { + "ior": 1.4500000476837158 + } + }, + "name": "carmaterial", + "pbrMetallicRoughness": { + "baseColorTexture": { + "index": 0 + }, + "roughnessFactor": 0.858578622341156 + } + } + ], + "meshes": [ + { + "name": "Mesh.212", + "primitives": [ + { + "attributes": { + "POSITION": 0, + "NORMAL": 1, + "TEXCOORD_0": 2 + }, + "indices": 3, + "material": 0 + } + ] + }, + { + "name": "Mesh.213", + "primitives": [ + { + "attributes": { + "POSITION": 4, + "NORMAL": 5, + "TEXCOORD_0": 6 + }, + "indices": 7, + "material": 0 + } + ] + }, + { + "name": "Mesh.214", + "primitives": [ + { + "attributes": { + "POSITION": 8, + "NORMAL": 9, + "TEXCOORD_0": 10 + }, + "indices": 11, + "material": 0 + } + ] + }, + { + "name": "Mesh.215", + "primitives": [ + { + "attributes": { + "POSITION": 12, + "NORMAL": 13, + "TEXCOORD_0": 14 + }, + "indices": 15, + "material": 0 + } + ] + }, + { + "name": "Mesh.216", + "primitives": [ + { + "attributes": { + "POSITION": 16, + "NORMAL": 17, + "TEXCOORD_0": 18 + }, + "indices": 19, + "material": 0 + } + ] + }, + { + "name": "Mesh.217", + "primitives": [ + { + "attributes": { + "POSITION": 20, + "NORMAL": 21, + "TEXCOORD_0": 22 + }, + "indices": 23, + "material": 0 + } + ] + }, + { + "name": "Mesh.218", + "primitives": [ + { + "attributes": { + "POSITION": 24, + "NORMAL": 25, + "TEXCOORD_0": 26 + }, + "indices": 27, + "material": 0 + } + ] + }, + { + "name": "Mesh.219", + "primitives": [ + { + "attributes": { + "POSITION": 28, + "NORMAL": 29, + "TEXCOORD_0": 30 + }, + "indices": 31, + "material": 0 + } + ] + }, + { + "name": "Mesh.220", + "primitives": [ + { + "attributes": { + "POSITION": 32, + "NORMAL": 33, + "TEXCOORD_0": 34 + }, + "indices": 35, + "material": 0 + } + ] + }, + { + "name": "Mesh.221", + "primitives": [ + { + "attributes": { + "POSITION": 36, + "NORMAL": 37, + "TEXCOORD_0": 38 + }, + "indices": 39, + "material": 0 + } + ] + }, + { + "name": "Mesh.222", + "primitives": [ + { + "attributes": { + "POSITION": 40, + "NORMAL": 41, + "TEXCOORD_0": 42 + }, + "indices": 43, + "material": 0 + } + ] + }, + { + "name": "Mesh.223", + "primitives": [ + { + "attributes": { + "POSITION": 44, + "NORMAL": 45, + "TEXCOORD_0": 46 + }, + "indices": 47, + "material": 0 + } + ] + }, + { + "name": "Mesh.224", + "primitives": [ + { + "attributes": { + "POSITION": 48, + "NORMAL": 49, + "TEXCOORD_0": 50 + }, + "indices": 51, + "material": 0 + } + ] + }, + { + "name": "Mesh.225", + "primitives": [ + { + "attributes": { + "POSITION": 52, + "NORMAL": 53, + "TEXCOORD_0": 54 + }, + "indices": 55, + "material": 0 + } + ] + }, + { + "name": "Mesh.226", + "primitives": [ + { + "attributes": { + "POSITION": 56, + "NORMAL": 57, + "TEXCOORD_0": 58 + }, + "indices": 59, + "material": 0 + } + ] + }, + { + "name": "Mesh.227", + "primitives": [ + { + "attributes": { + "POSITION": 60, + "NORMAL": 61, + "TEXCOORD_0": 62 + }, + "indices": 63, + "material": 0 + } + ] + }, + { + "name": "Mesh.228", + "primitives": [ + { + "attributes": { + "POSITION": 64, + "NORMAL": 65, + "TEXCOORD_0": 66 + }, + "indices": 67, + "material": 0 + } + ] + }, + { + "name": "Mesh.229", + "primitives": [ + { + "attributes": { + "POSITION": 68, + "NORMAL": 69, + "TEXCOORD_0": 70 + }, + "indices": 71, + "material": 0 + } + ] + }, + { + "name": "Mesh.230", + "primitives": [ + { + "attributes": { + "POSITION": 72, + "NORMAL": 73, + "TEXCOORD_0": 74 + }, + "indices": 75, + "material": 0 + } + ] + } + ], + "textures": [ + { + "sampler": 0, + "source": 0 + } + ], + "images": [ + { + "mimeType": "image/jpeg", + "name": "LowPolyCarsCesiumTexture", + "uri": "../textures/color_512x512.jpg" + } + ], + "accessors": [ + { + "bufferView": 0, + "componentType": 5126, + "count": 8772, + "max": [ + -0.3865067958831787, + 1.738095998764038, + 0.8879308700561523 + ], + "min": [ + -4.90376091003418, + 1.1484100818634033, + -0.8955541849136353 + ], + "type": "VEC3" + }, + { + "bufferView": 1, + "componentType": 5126, + "count": 8772, + "type": "VEC3" + }, + { + "bufferView": 2, + "componentType": 5126, + "count": 8772, + "type": "VEC2" + }, + { + "bufferView": 3, + "componentType": 5123, + "count": 15288, + "type": "SCALAR" + }, + { + "bufferView": 4, + "componentType": 5126, + "count": 1469, + "max": [ + 5.227753639221191, + 2.9161386489868164, + 1.1767312288284302 + ], + "min": [ + 1.3627526760101318, + 0.7860410809516907, + -1.1759353876113892 + ], + "type": "VEC3" + }, + { + "bufferView": 5, + "componentType": 5126, + "count": 1469, + "type": "VEC3" + }, + { + "bufferView": 6, + "componentType": 5126, + "count": 1469, + "type": "VEC2" + }, + { + "bufferView": 7, + "componentType": 5123, + "count": 2427, + "type": "SCALAR" + }, + { + "bufferView": 8, + "componentType": 5126, + "count": 96, + "max": [ + 2.836660861968994, + 1.7443058490753174, + 0.6037052273750305 + ], + "min": [ + 1.1203320026397705, + 0.9320425391197205, + -0.6103073358535767 + ], + "type": "VEC3" + }, + { + "bufferView": 9, + "componentType": 5126, + "count": 96, + "type": "VEC3" + }, + { + "bufferView": 10, + "componentType": 5126, + "count": 96, + "type": "VEC2" + }, + { + "bufferView": 11, + "componentType": 5123, + "count": 168, + "type": "SCALAR" + }, + { + "bufferView": 12, + "componentType": 5126, + "count": 2688, + "max": [ + -0.2627427577972412, + 0.9559949636459351, + 1.376855492591858 + ], + "min": [ + -4.992339611053467, + 0.027127623558044434, + -1.3939017057418823 + ], + "type": "VEC3" + }, + { + "bufferView": 13, + "componentType": 5126, + "count": 2688, + "type": "VEC3" + }, + { + "bufferView": 14, + "componentType": 5126, + "count": 2688, + "type": "VEC2" + }, + { + "bufferView": 15, + "componentType": 5123, + "count": 4536, + "type": "SCALAR" + }, + { + "bufferView": 16, + "componentType": 5126, + "count": 32, + "max": [ + 3.283514976501465, + 2.7617523670196533, + 0.7362728714942932 + ], + "min": [ + 1.7182462215423584, + 1.9346789121627808, + -0.8474100828170776 + ], + "type": "VEC3" + }, + { + "bufferView": 17, + "componentType": 5126, + "count": 32, + "type": "VEC3" + }, + { + "bufferView": 18, + "componentType": 5126, + "count": 32, + "type": "VEC2" + }, + { + "bufferView": 19, + "componentType": 5123, + "count": 54, + "type": "SCALAR" + }, + { + "bufferView": 20, + "componentType": 5126, + "count": 32, + "max": [ + 4.925179958343506, + 1.537026286125183, + 0.7510902881622314 + ], + "min": [ + 4.748691082000732, + 0.9074156284332275, + -0.6968315839767456 + ], + "type": "VEC3" + }, + { + "bufferView": 21, + "componentType": 5126, + "count": 32, + "type": "VEC3" + }, + { + "bufferView": 22, + "componentType": 5126, + "count": 32, + "type": "VEC2" + }, + { + "bufferView": 23, + "componentType": 5123, + "count": 48, + "type": "SCALAR" + }, + { + "bufferView": 24, + "componentType": 5126, + "count": 242, + "max": [ + 1.1050711870193481, + 1.177865743637085, + 0.7402641177177429 + ], + "min": [ + -0.4091412425041199, + 0.7457661628723145, + -0.7528193593025208 + ], + "type": "VEC3" + }, + { + "bufferView": 25, + "componentType": 5126, + "count": 242, + "type": "VEC3" + }, + { + "bufferView": 26, + "componentType": 5126, + "count": 242, + "type": "VEC2" + }, + { + "bufferView": 27, + "componentType": 5123, + "count": 372, + "type": "SCALAR" + }, + { + "bufferView": 28, + "componentType": 5126, + "count": 310, + "max": [ + 3.580829620361328, + 3.040038824081421, + -0.6303668022155762 + ], + "min": [ + 3.451266050338745, + 1.6912429332733154, + -0.8207975029945374 + ], + "type": "VEC3" + }, + { + "bufferView": 29, + "componentType": 5126, + "count": 310, + "type": "VEC3" + }, + { + "bufferView": 30, + "componentType": 5126, + "count": 310, + "type": "VEC2" + }, + { + "bufferView": 31, + "componentType": 5123, + "count": 468, + "type": "SCALAR" + }, + { + "bufferView": 32, + "componentType": 5126, + "count": 276, + "max": [ + -0.4906282424926758, + 0.7340247631072998, + 1.2633558511734009 + ], + "min": [ + -4.7644548416137695, + 0.24909795820713043, + -1.2804046869277954 + ], + "type": "VEC3" + }, + { + "bufferView": 33, + "componentType": 5126, + "count": 276, + "type": "VEC3" + }, + { + "bufferView": 34, + "componentType": 5126, + "count": 276, + "type": "VEC2" + }, + { + "bufferView": 35, + "componentType": 5123, + "count": 612, + "type": "SCALAR" + }, + { + "bufferView": 36, + "componentType": 5126, + "count": 2140, + "max": [ + 4.707790374755859, + 1.1958848237991333, + 1.1814454793930054 + ], + "min": [ + 0.8599522113800049, + 0.37404865026474, + -1.1689726114273071 + ], + "type": "VEC3" + }, + { + "bufferView": 37, + "componentType": 5126, + "count": 2140, + "type": "VEC3" + }, + { + "bufferView": 38, + "componentType": 5126, + "count": 2140, + "type": "VEC2" + }, + { + "bufferView": 39, + "componentType": 5123, + "count": 4008, + "type": "SCALAR" + }, + { + "bufferView": 40, + "componentType": 5126, + "count": 2218, + "max": [ + 5.081779479980469, + 1.657672643661499, + 1.252906084060669 + ], + "min": [ + 1.0984325408935547, + 0, + -1.251814365386963 + ], + "type": "VEC3" + }, + { + "bufferView": 41, + "componentType": 5126, + "count": 2218, + "type": "VEC3" + }, + { + "bufferView": 42, + "componentType": 5126, + "count": 2218, + "type": "VEC2" + }, + { + "bufferView": 43, + "componentType": 5123, + "count": 3720, + "type": "SCALAR" + }, + { + "bufferView": 44, + "componentType": 5126, + "count": 204, + "max": [ + -0.14155960083007812, + 1.0055917501449585, + 0.9975811839103699 + ], + "min": [ + -4.950191497802734, + 0.523948073387146, + -1.047204613685608 + ], + "type": "VEC3" + }, + { + "bufferView": 45, + "componentType": 5126, + "count": 204, + "type": "VEC3" + }, + { + "bufferView": 46, + "componentType": 5126, + "count": 204, + "type": "VEC2" + }, + { + "bufferView": 47, + "componentType": 5123, + "count": 336, + "type": "SCALAR" + }, + { + "bufferView": 48, + "componentType": 5126, + "count": 2168, + "max": [ + -0.12375950813293457, + 1.9655706882476807, + 1.0775225162506104 + ], + "min": [ + -5.226062774658203, + 1.147385835647583, + -1.104768991470337 + ], + "type": "VEC3" + }, + { + "bufferView": 49, + "componentType": 5126, + "count": 2168, + "type": "VEC3" + }, + { + "bufferView": 50, + "componentType": 5126, + "count": 2168, + "type": "VEC2" + }, + { + "bufferView": 51, + "componentType": 5123, + "count": 3000, + "type": "SCALAR" + }, + { + "bufferView": 52, + "componentType": 5126, + "count": 1728, + "max": [ + -0.14714407920837402, + 1.9322506189346313, + 1.0501567125320435 + ], + "min": [ + -5.205682754516602, + 1.153428316116333, + -1.0605998039245605 + ], + "type": "VEC3" + }, + { + "bufferView": 53, + "componentType": 5126, + "count": 1728, + "type": "VEC3" + }, + { + "bufferView": 54, + "componentType": 5126, + "count": 1728, + "type": "VEC2" + }, + { + "bufferView": 55, + "componentType": 5123, + "count": 2376, + "type": "SCALAR" + }, + { + "bufferView": 56, + "componentType": 5126, + "count": 56, + "max": [ + -0.08958816528320312, + 1.1631574630737305, + 1.0992512702941895 + ], + "min": [ + -5.227677345275879, + 1.0039288997650146, + -1.1108813285827637 + ], + "type": "VEC3" + }, + { + "bufferView": 57, + "componentType": 5126, + "count": 56, + "type": "VEC3" + }, + { + "bufferView": 58, + "componentType": 5126, + "count": 56, + "type": "VEC2" + }, + { + "bufferView": 59, + "componentType": 5123, + "count": 84, + "type": "SCALAR" + }, + { + "bufferView": 60, + "componentType": 5126, + "count": 56, + "max": [ + 2.885387420654297, + 1.8057880401611328, + -0.7072991132736206 + ], + "min": [ + 2.6687498092651367, + 1.7638590335845947, + -0.7592493295669556 + ], + "type": "VEC3" + }, + { + "bufferView": 61, + "componentType": 5126, + "count": 56, + "type": "VEC3" + }, + { + "bufferView": 62, + "componentType": 5126, + "count": 56, + "type": "VEC2" + }, + { + "bufferView": 63, + "componentType": 5123, + "count": 84, + "type": "SCALAR" + }, + { + "bufferView": 64, + "componentType": 5126, + "count": 40, + "max": [ + 3.5764851570129395, + 0.8977699875831604, + -0.6982488632202148 + ], + "min": [ + 2.957261085510254, + 0.8380477428436279, + -0.9820390939712524 + ], + "type": "VEC3" + }, + { + "bufferView": 65, + "componentType": 5126, + "count": 40, + "type": "VEC3" + }, + { + "bufferView": 66, + "componentType": 5126, + "count": 40, + "type": "VEC2" + }, + { + "bufferView": 67, + "componentType": 5123, + "count": 60, + "type": "SCALAR" + }, + { + "bufferView": 68, + "componentType": 5126, + "count": 280, + "max": [ + 4.95514440536499, + 1.6582074165344238, + 0.7710216641426086 + ], + "min": [ + 4.354928970336914, + 0.9572749137878418, + -0.7201918959617615 + ], + "type": "VEC3" + }, + { + "bufferView": 69, + "componentType": 5126, + "count": 280, + "type": "VEC3" + }, + { + "bufferView": 70, + "componentType": 5126, + "count": 280, + "type": "VEC2" + }, + { + "bufferView": 71, + "componentType": 5123, + "count": 396, + "type": "SCALAR" + }, + { + "bufferView": 72, + "componentType": 5126, + "count": 192, + "max": [ + 4.974577903747559, + 1.344917893409729, + 0.6243444681167603 + ], + "min": [ + 4.91109561920166, + 1.1988099813461304, + -0.570034921169281 + ], + "type": "VEC3" + }, + { + "bufferView": 73, + "componentType": 5126, + "count": 192, + "type": "VEC3" + }, + { + "bufferView": 74, + "componentType": 5126, + "count": 192, + "type": "VEC2" + }, + { + "bufferView": 75, + "componentType": 5123, + "count": 264, + "type": "SCALAR" + } + ], + "bufferViews": [ + { + "buffer": 0, + "byteLength": 105264, + "byteOffset": 0, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 105264, + "byteOffset": 105264, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 70176, + "byteOffset": 210528, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 30576, + "byteOffset": 280704, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 17628, + "byteOffset": 311280, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 17628, + "byteOffset": 328908, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 11752, + "byteOffset": 346536, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 4854, + "byteOffset": 358288, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 1152, + "byteOffset": 363144, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1152, + "byteOffset": 364296, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 768, + "byteOffset": 365448, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 336, + "byteOffset": 366216, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 32256, + "byteOffset": 366552, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 32256, + "byteOffset": 398808, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 21504, + "byteOffset": 431064, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 9072, + "byteOffset": 452568, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 384, + "byteOffset": 461640, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 384, + "byteOffset": 462024, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 256, + "byteOffset": 462408, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 108, + "byteOffset": 462664, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 384, + "byteOffset": 462772, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 384, + "byteOffset": 463156, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 256, + "byteOffset": 463540, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 96, + "byteOffset": 463796, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 2904, + "byteOffset": 463892, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 2904, + "byteOffset": 466796, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1936, + "byteOffset": 469700, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 744, + "byteOffset": 471636, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 3720, + "byteOffset": 472380, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 3720, + "byteOffset": 476100, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 2480, + "byteOffset": 479820, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 936, + "byteOffset": 482300, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 3312, + "byteOffset": 483236, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 3312, + "byteOffset": 486548, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 2208, + "byteOffset": 489860, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1224, + "byteOffset": 492068, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 25680, + "byteOffset": 493292, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 25680, + "byteOffset": 518972, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 17120, + "byteOffset": 544652, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 561772, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 26616, + "byteOffset": 569788, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 26616, + "byteOffset": 596404, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 17744, + "byteOffset": 623020, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 7440, + "byteOffset": 640764, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 2448, + "byteOffset": 648204, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 2448, + "byteOffset": 650652, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1632, + "byteOffset": 653100, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 672, + "byteOffset": 654732, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 26016, + "byteOffset": 655404, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 26016, + "byteOffset": 681420, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 17344, + "byteOffset": 707436, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 6000, + "byteOffset": 724780, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 20736, + "byteOffset": 730780, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 20736, + "byteOffset": 751516, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 13824, + "byteOffset": 772252, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 4752, + "byteOffset": 786076, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 672, + "byteOffset": 790828, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 672, + "byteOffset": 791500, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 448, + "byteOffset": 792172, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 168, + "byteOffset": 792620, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 672, + "byteOffset": 792788, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 672, + "byteOffset": 793460, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 448, + "byteOffset": 794132, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 168, + "byteOffset": 794580, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 794748, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 795228, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 320, + "byteOffset": 795708, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 120, + "byteOffset": 796028, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 3360, + "byteOffset": 796148, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 3360, + "byteOffset": 799508, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 2240, + "byteOffset": 802868, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 792, + "byteOffset": 805108, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 2304, + "byteOffset": 805900, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 2304, + "byteOffset": 808204, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1536, + "byteOffset": 810508, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 528, + "byteOffset": 812044, + "target": 34963 + } + ], + "samplers": [ + { + "magFilter": 9729, + "minFilter": 9987 + } + ], + "buffers": [ + { + "byteLength": 812572, + "uri": "model.bin" + } + ] +} diff --git a/assets/models/custom/lowpoly_cars/tractor_a03_001/preview.png b/assets/models/custom/lowpoly_cars/tractor_a03_001/preview.png new file mode 100644 index 0000000..09377f5 Binary files /dev/null and b/assets/models/custom/lowpoly_cars/tractor_a03_001/preview.png differ diff --git a/assets/models/custom/lowpoly_cars/truck_a01_001/model.bin b/assets/models/custom/lowpoly_cars/truck_a01_001/model.bin new file mode 100644 index 0000000..ddbf149 Binary files /dev/null and b/assets/models/custom/lowpoly_cars/truck_a01_001/model.bin differ diff --git a/assets/models/custom/lowpoly_cars/truck_a01_001/model.gltf b/assets/models/custom/lowpoly_cars/truck_a01_001/model.gltf new file mode 100644 index 0000000..9029b51 --- /dev/null +++ b/assets/models/custom/lowpoly_cars/truck_a01_001/model.gltf @@ -0,0 +1,1226 @@ +{ + "asset": { + "generator": "Khronos glTF Blender I/O v4.5.51", + "version": "2.0" + }, + "extensionsUsed": [ + "KHR_materials_specular", + "KHR_materials_ior" + ], + "scene": 0, + "scenes": [ + { + "name": "Scene", + "nodes": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14 + ] + } + ], + "nodes": [ + { + "mesh": 0, + "name": "Rectangle054.001" + }, + { + "mesh": 1, + "name": "OilTank015.001" + }, + { + "mesh": 2, + "name": "Object469.001" + }, + { + "mesh": 3, + "name": "Object296.001" + }, + { + "mesh": 4, + "name": "Object295.001" + }, + { + "mesh": 5, + "name": "Object294.001" + }, + { + "mesh": 6, + "name": "Line370.001" + }, + { + "mesh": 7, + "name": "Line369.001" + }, + { + "mesh": 8, + "name": "Cylinder166.001" + }, + { + "mesh": 9, + "name": "Cylinder164.001" + }, + { + "mesh": 10, + "name": "Box2094.001" + }, + { + "mesh": 11, + "name": "Box2082.001" + }, + { + "mesh": 12, + "name": "Box2078.001" + }, + { + "mesh": 13, + "name": "Box2074.001" + }, + { + "mesh": 14, + "name": "Box2072.001" + } + ], + "materials": [ + { + "doubleSided": true, + "extensions": { + "KHR_materials_specular": { + "specularFactor": 0 + }, + "KHR_materials_ior": { + "ior": 1.4500000476837158 + } + }, + "name": "carmaterial", + "pbrMetallicRoughness": { + "baseColorTexture": { + "index": 0 + }, + "roughnessFactor": 0.858578622341156 + } + } + ], + "meshes": [ + { + "name": "Mesh.212", + "primitives": [ + { + "attributes": { + "POSITION": 0, + "NORMAL": 1, + "TEXCOORD_0": 2 + }, + "indices": 3, + "material": 0 + } + ] + }, + { + "name": "Mesh.213", + "primitives": [ + { + "attributes": { + "POSITION": 4, + "NORMAL": 5, + "TEXCOORD_0": 6 + }, + "indices": 7, + "material": 0 + } + ] + }, + { + "name": "Mesh.214", + "primitives": [ + { + "attributes": { + "POSITION": 8, + "NORMAL": 9, + "TEXCOORD_0": 10 + }, + "indices": 11, + "material": 0 + } + ] + }, + { + "name": "Mesh.215", + "primitives": [ + { + "attributes": { + "POSITION": 12, + "NORMAL": 13, + "TEXCOORD_0": 14 + }, + "indices": 15, + "material": 0 + } + ] + }, + { + "name": "Mesh.216", + "primitives": [ + { + "attributes": { + "POSITION": 16, + "NORMAL": 17, + "TEXCOORD_0": 18 + }, + "indices": 19, + "material": 0 + } + ] + }, + { + "name": "Mesh.217", + "primitives": [ + { + "attributes": { + "POSITION": 20, + "NORMAL": 21, + "TEXCOORD_0": 22 + }, + "indices": 23, + "material": 0 + } + ] + }, + { + "name": "Mesh.218", + "primitives": [ + { + "attributes": { + "POSITION": 24, + "NORMAL": 25, + "TEXCOORD_0": 26 + }, + "indices": 27, + "material": 0 + } + ] + }, + { + "name": "Mesh.219", + "primitives": [ + { + "attributes": { + "POSITION": 28, + "NORMAL": 29, + "TEXCOORD_0": 30 + }, + "indices": 31, + "material": 0 + } + ] + }, + { + "name": "Mesh.220", + "primitives": [ + { + "attributes": { + "POSITION": 32, + "NORMAL": 33, + "TEXCOORD_0": 34 + }, + "indices": 35, + "material": 0 + } + ] + }, + { + "name": "Mesh.221", + "primitives": [ + { + "attributes": { + "POSITION": 36, + "NORMAL": 37, + "TEXCOORD_0": 38 + }, + "indices": 39, + "material": 0 + } + ] + }, + { + "name": "Mesh.222", + "primitives": [ + { + "attributes": { + "POSITION": 40, + "NORMAL": 41, + "TEXCOORD_0": 42 + }, + "indices": 43, + "material": 0 + } + ] + }, + { + "name": "Mesh.223", + "primitives": [ + { + "attributes": { + "POSITION": 44, + "NORMAL": 45, + "TEXCOORD_0": 46 + }, + "indices": 47, + "material": 0 + } + ] + }, + { + "name": "Mesh.224", + "primitives": [ + { + "attributes": { + "POSITION": 48, + "NORMAL": 49, + "TEXCOORD_0": 50 + }, + "indices": 51, + "material": 0 + } + ] + }, + { + "name": "Mesh.225", + "primitives": [ + { + "attributes": { + "POSITION": 52, + "NORMAL": 53, + "TEXCOORD_0": 54 + }, + "indices": 55, + "material": 0 + } + ] + }, + { + "name": "Mesh.226", + "primitives": [ + { + "attributes": { + "POSITION": 56, + "NORMAL": 57, + "TEXCOORD_0": 58 + }, + "indices": 59, + "material": 0 + } + ] + } + ], + "textures": [ + { + "sampler": 0, + "source": 0 + } + ], + "images": [ + { + "mimeType": "image/jpeg", + "name": "LowPolyCarsCesiumTexture", + "uri": "../textures/color_512x512.jpg" + } + ], + "accessors": [ + { + "bufferView": 0, + "componentType": 5126, + "count": 1952, + "max": [ + 4.297172546386719, + 3.4983553886413574, + 1.4688677787780762 + ], + "min": [ + 0.9009904861450195, + 1.0090826749801636, + -1.3715901374816895 + ], + "type": "VEC3" + }, + { + "bufferView": 1, + "componentType": 5126, + "count": 1952, + "type": "VEC3" + }, + { + "bufferView": 2, + "componentType": 5126, + "count": 1952, + "type": "VEC2" + }, + { + "bufferView": 3, + "componentType": 5123, + "count": 3312, + "type": "SCALAR" + }, + { + "bufferView": 4, + "componentType": 5126, + "count": 1760, + "max": [ + 4.236897945404053, + 3.4411046504974365, + 1.4128129482269287 + ], + "min": [ + 0.6720714569091797, + 1.0621166229248047, + -1.3155059814453125 + ], + "type": "VEC3" + }, + { + "bufferView": 5, + "componentType": 5126, + "count": 1760, + "type": "VEC3" + }, + { + "bufferView": 6, + "componentType": 5126, + "count": 1760, + "type": "VEC2" + }, + { + "bufferView": 7, + "componentType": 5123, + "count": 2784, + "type": "SCALAR" + }, + { + "bufferView": 8, + "componentType": 5126, + "count": 2448, + "max": [ + 5.627593994140625, + 0.9253684282302856, + 1.3081995248794556 + ], + "min": [ + -5.263120651245117, + 0.35645604133605957, + -1.2439379692077637 + ], + "type": "VEC3" + }, + { + "bufferView": 9, + "componentType": 5126, + "count": 2448, + "type": "VEC3" + }, + { + "bufferView": 10, + "componentType": 5126, + "count": 2448, + "type": "VEC2" + }, + { + "bufferView": 11, + "componentType": 5123, + "count": 4716, + "type": "SCALAR" + }, + { + "bufferView": 12, + "componentType": 5126, + "count": 30, + "max": [ + 7.114168167114258, + 3.4457337856292725, + 1.6360538005828857 + ], + "min": [ + 5.487399101257324, + 2.3499319553375244, + -1.5986552238464355 + ], + "type": "VEC3" + }, + { + "bufferView": 13, + "componentType": 5126, + "count": 30, + "type": "VEC3" + }, + { + "bufferView": 14, + "componentType": 5126, + "count": 30, + "type": "VEC2" + }, + { + "bufferView": 15, + "componentType": 5123, + "count": 48, + "type": "SCALAR" + }, + { + "bufferView": 16, + "componentType": 5126, + "count": 151, + "max": [ + 3.6016159057617188, + 4.549275875091553, + 1.5554587841033936 + ], + "min": [ + -7.334519386291504, + 1.5350993871688843, + -1.5021754503250122 + ], + "type": "VEC3" + }, + { + "bufferView": 17, + "componentType": 5126, + "count": 151, + "type": "VEC3" + }, + { + "bufferView": 18, + "componentType": 5126, + "count": 151, + "type": "VEC2" + }, + { + "bufferView": 19, + "componentType": 5123, + "count": 267, + "type": "SCALAR" + }, + { + "bufferView": 20, + "componentType": 5126, + "count": 53, + "max": [ + 3.601621389389038, + 1.7881438732147217, + 1.583804726600647 + ], + "min": [ + -7.310606956481934, + 1.5350991487503052, + -1.530519962310791 + ], + "type": "VEC3" + }, + { + "bufferView": 21, + "componentType": 5126, + "count": 53, + "type": "VEC3" + }, + { + "bufferView": 22, + "componentType": 5126, + "count": 53, + "type": "VEC2" + }, + { + "bufferView": 23, + "componentType": 5123, + "count": 81, + "type": "SCALAR" + }, + { + "bufferView": 24, + "componentType": 5126, + "count": 544, + "max": [ + 7.140364170074463, + 3.232146739959717, + 1.6627243757247925 + ], + "min": [ + 6.897459506988525, + 2.332791566848755, + -1.6252517700195312 + ], + "type": "VEC3" + }, + { + "bufferView": 25, + "componentType": 5126, + "count": 544, + "type": "VEC3" + }, + { + "bufferView": 26, + "componentType": 5126, + "count": 544, + "type": "VEC2" + }, + { + "bufferView": 27, + "componentType": 5123, + "count": 864, + "type": "SCALAR" + }, + { + "bufferView": 28, + "componentType": 5126, + "count": 100, + "max": [ + 4.54844331741333, + 3.663661479949951, + 1.1919140815734863 + ], + "min": [ + 3.2067103385925293, + 1.3249750137329102, + -1.1781141757965088 + ], + "type": "VEC3" + }, + { + "bufferView": 29, + "componentType": 5126, + "count": 100, + "type": "VEC3" + }, + { + "bufferView": 30, + "componentType": 5126, + "count": 100, + "type": "VEC2" + }, + { + "bufferView": 31, + "componentType": 5123, + "count": 156, + "type": "SCALAR" + }, + { + "bufferView": 32, + "componentType": 5126, + "count": 1052, + "max": [ + 6.286876678466797, + 1.5632929801940918, + 1.4874417781829834 + ], + "min": [ + -6.550312519073486, + 0.5559541583061218, + -1.4614956378936768 + ], + "type": "VEC3" + }, + { + "bufferView": 33, + "componentType": 5126, + "count": 1052, + "type": "VEC3" + }, + { + "bufferView": 34, + "componentType": 5126, + "count": 1052, + "type": "VEC2" + }, + { + "bufferView": 35, + "componentType": 5123, + "count": 1776, + "type": "SCALAR" + }, + { + "bufferView": 36, + "componentType": 5126, + "count": 3764, + "max": [ + 5.984011650085449, + 1.2818248271942139, + 1.3729268312454224 + ], + "min": [ + -5.619540214538574, + 0, + -1.3086655139923096 + ], + "type": "VEC3" + }, + { + "bufferView": 37, + "componentType": 5126, + "count": 3764, + "type": "VEC3" + }, + { + "bufferView": 38, + "componentType": 5126, + "count": 3764, + "type": "VEC2" + }, + { + "bufferView": 39, + "componentType": 5123, + "count": 6408, + "type": "SCALAR" + }, + { + "bufferView": 40, + "componentType": 5126, + "count": 240, + "max": [ + 3.0336427688598633, + 4.416482448577881, + 1.6017358303070068 + ], + "min": [ + -6.8712358474731445, + 2.021791458129883, + -1.5312329530715942 + ], + "type": "VEC3" + }, + { + "bufferView": 41, + "componentType": 5126, + "count": 240, + "type": "VEC3" + }, + { + "bufferView": 42, + "componentType": 5126, + "count": 240, + "type": "VEC2" + }, + { + "bufferView": 43, + "componentType": 5123, + "count": 360, + "type": "SCALAR" + }, + { + "bufferView": 44, + "componentType": 5126, + "count": 916, + "max": [ + 7.383197784423828, + 2.1574277877807617, + 1.336326241493225 + ], + "min": [ + 7.13200044631958, + 0.7542243003845215, + -1.3256587982177734 + ], + "type": "VEC3" + }, + { + "bufferView": 45, + "componentType": 5126, + "count": 916, + "type": "VEC3" + }, + { + "bufferView": 46, + "componentType": 5126, + "count": 916, + "type": "VEC2" + }, + { + "bufferView": 47, + "componentType": 5123, + "count": 1428, + "type": "SCALAR" + }, + { + "bufferView": 48, + "componentType": 5126, + "count": 710, + "max": [ + 7.262113094329834, + 4.070059776306152, + 1.4536759853363037 + ], + "min": [ + 4.524575233459473, + 0.5902271270751953, + -1.4153552055358887 + ], + "type": "VEC3" + }, + { + "bufferView": 49, + "componentType": 5126, + "count": 710, + "type": "VEC3" + }, + { + "bufferView": 50, + "componentType": 5126, + "count": 710, + "type": "VEC2" + }, + { + "bufferView": 51, + "componentType": 5123, + "count": 1092, + "type": "SCALAR" + }, + { + "bufferView": 52, + "componentType": 5126, + "count": 80, + "max": [ + -7.306789398193359, + 1.9027159214019775, + 1.3431110382080078 + ], + "min": [ + -7.383476734161377, + 1.7501890659332275, + -1.3187358379364014 + ], + "type": "VEC3" + }, + { + "bufferView": 53, + "componentType": 5126, + "count": 80, + "type": "VEC3" + }, + { + "bufferView": 54, + "componentType": 5126, + "count": 80, + "type": "VEC2" + }, + { + "bufferView": 55, + "componentType": 5123, + "count": 120, + "type": "SCALAR" + }, + { + "bufferView": 56, + "componentType": 5126, + "count": 1840, + "max": [ + 3.341132640838623, + 2.041745185852051, + 1.6093329191207886 + ], + "min": [ + -7.363851547241211, + 1.644098162651062, + -1.5567857027053833 + ], + "type": "VEC3" + }, + { + "bufferView": 57, + "componentType": 5126, + "count": 1840, + "type": "VEC3" + }, + { + "bufferView": 58, + "componentType": 5126, + "count": 1840, + "type": "VEC2" + }, + { + "bufferView": 59, + "componentType": 5123, + "count": 2760, + "type": "SCALAR" + } + ], + "bufferViews": [ + { + "buffer": 0, + "byteLength": 23424, + "byteOffset": 0, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 23424, + "byteOffset": 23424, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 15616, + "byteOffset": 46848, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 6624, + "byteOffset": 62464, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 21120, + "byteOffset": 69088, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 21120, + "byteOffset": 90208, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 14080, + "byteOffset": 111328, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 5568, + "byteOffset": 125408, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 29376, + "byteOffset": 130976, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 29376, + "byteOffset": 160352, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 19584, + "byteOffset": 189728, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 9432, + "byteOffset": 209312, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 218744, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 219104, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 240, + "byteOffset": 219464, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 96, + "byteOffset": 219704, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 1812, + "byteOffset": 219800, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1812, + "byteOffset": 221612, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1208, + "byteOffset": 223424, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 534, + "byteOffset": 224632, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 636, + "byteOffset": 225168, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 636, + "byteOffset": 225804, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 424, + "byteOffset": 226440, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 162, + "byteOffset": 226864, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 6528, + "byteOffset": 227028, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 6528, + "byteOffset": 233556, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 4352, + "byteOffset": 240084, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1728, + "byteOffset": 244436, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 1200, + "byteOffset": 246164, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1200, + "byteOffset": 247364, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 800, + "byteOffset": 248564, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 312, + "byteOffset": 249364, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 12624, + "byteOffset": 249676, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 12624, + "byteOffset": 262300, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 8416, + "byteOffset": 274924, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 3552, + "byteOffset": 283340, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 45168, + "byteOffset": 286892, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 45168, + "byteOffset": 332060, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 30112, + "byteOffset": 377228, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 12816, + "byteOffset": 407340, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 2880, + "byteOffset": 420156, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 2880, + "byteOffset": 423036, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1920, + "byteOffset": 425916, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 720, + "byteOffset": 427836, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 10992, + "byteOffset": 428556, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 10992, + "byteOffset": 439548, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 7328, + "byteOffset": 450540, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 2856, + "byteOffset": 457868, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 8520, + "byteOffset": 460724, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 8520, + "byteOffset": 469244, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 5680, + "byteOffset": 477764, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 2184, + "byteOffset": 483444, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 960, + "byteOffset": 485628, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 960, + "byteOffset": 486588, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 640, + "byteOffset": 487548, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 240, + "byteOffset": 488188, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 22080, + "byteOffset": 488428, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 22080, + "byteOffset": 510508, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 14720, + "byteOffset": 532588, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 5520, + "byteOffset": 547308, + "target": 34963 + } + ], + "samplers": [ + { + "magFilter": 9729, + "minFilter": 9987 + } + ], + "buffers": [ + { + "byteLength": 552828, + "uri": "model.bin" + } + ] +} diff --git a/assets/models/custom/lowpoly_cars/truck_a01_001/preview.png b/assets/models/custom/lowpoly_cars/truck_a01_001/preview.png new file mode 100644 index 0000000..b1f2da8 Binary files /dev/null and b/assets/models/custom/lowpoly_cars/truck_a01_001/preview.png differ diff --git a/assets/models/custom/lowpoly_cars/truck_a02_001/model.bin b/assets/models/custom/lowpoly_cars/truck_a02_001/model.bin new file mode 100644 index 0000000..be1bfba Binary files /dev/null and b/assets/models/custom/lowpoly_cars/truck_a02_001/model.bin differ diff --git a/assets/models/custom/lowpoly_cars/truck_a02_001/model.gltf b/assets/models/custom/lowpoly_cars/truck_a02_001/model.gltf new file mode 100644 index 0000000..a066225 --- /dev/null +++ b/assets/models/custom/lowpoly_cars/truck_a02_001/model.gltf @@ -0,0 +1,1226 @@ +{ + "asset": { + "generator": "Khronos glTF Blender I/O v4.5.51", + "version": "2.0" + }, + "extensionsUsed": [ + "KHR_materials_specular", + "KHR_materials_ior" + ], + "scene": 0, + "scenes": [ + { + "name": "Scene", + "nodes": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14 + ] + } + ], + "nodes": [ + { + "mesh": 0, + "name": "Rectangle049.001" + }, + { + "mesh": 1, + "name": "OilTank009.001" + }, + { + "mesh": 2, + "name": "Object470.001" + }, + { + "mesh": 3, + "name": "Object290.001" + }, + { + "mesh": 4, + "name": "Object289.001" + }, + { + "mesh": 5, + "name": "Object288.001" + }, + { + "mesh": 6, + "name": "Line365.001" + }, + { + "mesh": 7, + "name": "Cylinder163.001" + }, + { + "mesh": 8, + "name": "Cylinder160.001" + }, + { + "mesh": 9, + "name": "Box2095.001" + }, + { + "mesh": 10, + "name": "Box2068.001" + }, + { + "mesh": 11, + "name": "Box2060.001" + }, + { + "mesh": 12, + "name": "Box2056.001" + }, + { + "mesh": 13, + "name": "Box2052.001" + }, + { + "mesh": 14, + "name": "Box2050.001" + } + ], + "materials": [ + { + "doubleSided": true, + "extensions": { + "KHR_materials_specular": { + "specularFactor": 0 + }, + "KHR_materials_ior": { + "ior": 1.4500000476837158 + } + }, + "name": "carmaterial", + "pbrMetallicRoughness": { + "baseColorTexture": { + "index": 0 + }, + "roughnessFactor": 0.858578622341156 + } + } + ], + "meshes": [ + { + "name": "Mesh.212", + "primitives": [ + { + "attributes": { + "POSITION": 0, + "NORMAL": 1, + "TEXCOORD_0": 2 + }, + "indices": 3, + "material": 0 + } + ] + }, + { + "name": "Mesh.213", + "primitives": [ + { + "attributes": { + "POSITION": 4, + "NORMAL": 5, + "TEXCOORD_0": 6 + }, + "indices": 7, + "material": 0 + } + ] + }, + { + "name": "Mesh.214", + "primitives": [ + { + "attributes": { + "POSITION": 8, + "NORMAL": 9, + "TEXCOORD_0": 10 + }, + "indices": 11, + "material": 0 + } + ] + }, + { + "name": "Mesh.215", + "primitives": [ + { + "attributes": { + "POSITION": 12, + "NORMAL": 13, + "TEXCOORD_0": 14 + }, + "indices": 15, + "material": 0 + } + ] + }, + { + "name": "Mesh.216", + "primitives": [ + { + "attributes": { + "POSITION": 16, + "NORMAL": 17, + "TEXCOORD_0": 18 + }, + "indices": 19, + "material": 0 + } + ] + }, + { + "name": "Mesh.217", + "primitives": [ + { + "attributes": { + "POSITION": 20, + "NORMAL": 21, + "TEXCOORD_0": 22 + }, + "indices": 23, + "material": 0 + } + ] + }, + { + "name": "Mesh.218", + "primitives": [ + { + "attributes": { + "POSITION": 24, + "NORMAL": 25, + "TEXCOORD_0": 26 + }, + "indices": 27, + "material": 0 + } + ] + }, + { + "name": "Mesh.219", + "primitives": [ + { + "attributes": { + "POSITION": 28, + "NORMAL": 29, + "TEXCOORD_0": 30 + }, + "indices": 31, + "material": 0 + } + ] + }, + { + "name": "Mesh.220", + "primitives": [ + { + "attributes": { + "POSITION": 32, + "NORMAL": 33, + "TEXCOORD_0": 34 + }, + "indices": 35, + "material": 0 + } + ] + }, + { + "name": "Mesh.221", + "primitives": [ + { + "attributes": { + "POSITION": 36, + "NORMAL": 37, + "TEXCOORD_0": 38 + }, + "indices": 39, + "material": 0 + } + ] + }, + { + "name": "Mesh.222", + "primitives": [ + { + "attributes": { + "POSITION": 40, + "NORMAL": 41, + "TEXCOORD_0": 42 + }, + "indices": 43, + "material": 0 + } + ] + }, + { + "name": "Mesh.223", + "primitives": [ + { + "attributes": { + "POSITION": 44, + "NORMAL": 45, + "TEXCOORD_0": 46 + }, + "indices": 47, + "material": 0 + } + ] + }, + { + "name": "Mesh.224", + "primitives": [ + { + "attributes": { + "POSITION": 48, + "NORMAL": 49, + "TEXCOORD_0": 50 + }, + "indices": 51, + "material": 0 + } + ] + }, + { + "name": "Mesh.225", + "primitives": [ + { + "attributes": { + "POSITION": 52, + "NORMAL": 53, + "TEXCOORD_0": 54 + }, + "indices": 55, + "material": 0 + } + ] + }, + { + "name": "Mesh.226", + "primitives": [ + { + "attributes": { + "POSITION": 56, + "NORMAL": 57, + "TEXCOORD_0": 58 + }, + "indices": 59, + "material": 0 + } + ] + } + ], + "textures": [ + { + "sampler": 0, + "source": 0 + } + ], + "images": [ + { + "mimeType": "image/jpeg", + "name": "LowPolyCarsCesiumTexture", + "uri": "../textures/color_512x512.jpg" + } + ], + "accessors": [ + { + "bufferView": 0, + "componentType": 5126, + "count": 1952, + "max": [ + 2.975274085998535, + 3.498356342315674, + 1.4666908979415894 + ], + "min": [ + 0.20918428897857666, + 1.0090835094451904, + -1.3732454776763916 + ], + "type": "VEC3" + }, + { + "bufferView": 1, + "componentType": 5126, + "count": 1952, + "type": "VEC3" + }, + { + "bufferView": 2, + "componentType": 5126, + "count": 1952, + "type": "VEC2" + }, + { + "bufferView": 3, + "componentType": 5123, + "count": 3312, + "type": "SCALAR" + }, + { + "bufferView": 4, + "componentType": 5126, + "count": 1760, + "max": [ + 2.915088653564453, + 3.4411044120788574, + 1.4107192754745483 + ], + "min": [ + -0.019612789154052734, + 1.0621147155761719, + -1.3172515630722046 + ], + "type": "VEC3" + }, + { + "bufferView": 5, + "componentType": 5126, + "count": 1760, + "type": "VEC3" + }, + { + "bufferView": 6, + "componentType": 5126, + "count": 1760, + "type": "VEC2" + }, + { + "bufferView": 7, + "componentType": 5123, + "count": 2784, + "type": "SCALAR" + }, + { + "bufferView": 8, + "componentType": 5126, + "count": 2448, + "max": [ + 4.3061394691467285, + 0.9253686666488647, + 1.308297038078308 + ], + "min": [ + -4.306629180908203, + 0.35645633935928345, + -1.2450159788131714 + ], + "type": "VEC3" + }, + { + "bufferView": 9, + "componentType": 5126, + "count": 2448, + "type": "VEC3" + }, + { + "bufferView": 10, + "componentType": 5126, + "count": 2448, + "type": "VEC2" + }, + { + "bufferView": 11, + "componentType": 5123, + "count": 4716, + "type": "SCALAR" + }, + { + "bufferView": 12, + "componentType": 5126, + "count": 30, + "max": [ + 5.792736053466797, + 3.4457342624664307, + 1.6374658346176147 + ], + "min": [ + 4.163723468780518, + 2.3499324321746826, + -1.597289800643921 + ], + "type": "VEC3" + }, + { + "bufferView": 13, + "componentType": 5126, + "count": 30, + "type": "VEC3" + }, + { + "bufferView": 14, + "componentType": 5126, + "count": 30, + "type": "VEC2" + }, + { + "bufferView": 15, + "componentType": 5123, + "count": 48, + "type": "SCALAR" + }, + { + "bufferView": 16, + "componentType": 5126, + "count": 151, + "max": [ + 2.2803969383239746, + 4.549276351928711, + 1.5538921356201172 + ], + "min": [ + -6.013265609741211, + 1.5350996255874634, + -1.5038836002349854 + ], + "type": "VEC3" + }, + { + "bufferView": 17, + "componentType": 5126, + "count": 151, + "type": "VEC3" + }, + { + "bufferView": 18, + "componentType": 5126, + "count": 151, + "type": "VEC2" + }, + { + "bufferView": 19, + "componentType": 5123, + "count": 267, + "type": "SCALAR" + }, + { + "bufferView": 20, + "componentType": 5126, + "count": 53, + "max": [ + 2.2803945541381836, + 1.7881443500518799, + 1.5822242498397827 + ], + "min": [ + -5.989447593688965, + 1.5350996255874634, + -1.532214879989624 + ], + "type": "VEC3" + }, + { + "bufferView": 21, + "componentType": 5126, + "count": 53, + "type": "VEC3" + }, + { + "bufferView": 22, + "componentType": 5126, + "count": 53, + "type": "VEC2" + }, + { + "bufferView": 23, + "componentType": 5123, + "count": 81, + "type": "SCALAR" + }, + { + "bufferView": 24, + "componentType": 5126, + "count": 100, + "max": [ + 3.2269160747528076, + 3.6636617183685303, + 1.19114089012146 + ], + "min": [ + 1.8831477165222168, + 1.3249752521514893, + -1.1800017356872559 + ], + "type": "VEC3" + }, + { + "bufferView": 25, + "componentType": 5126, + "count": 100, + "type": "VEC3" + }, + { + "bufferView": 26, + "componentType": 5126, + "count": 100, + "type": "VEC2" + }, + { + "bufferView": 27, + "componentType": 5123, + "count": 156, + "type": "SCALAR" + }, + { + "bufferView": 28, + "componentType": 5126, + "count": 1055, + "max": [ + 4.965622901916504, + 1.563293218612671, + 1.4885079860687256 + ], + "min": [ + -5.593398094177246, + 0.5559545159339905, + -1.4633136987686157 + ], + "type": "VEC3" + }, + { + "bufferView": 29, + "componentType": 5126, + "count": 1055, + "type": "VEC3" + }, + { + "bufferView": 30, + "componentType": 5126, + "count": 1055, + "type": "VEC2" + }, + { + "bufferView": 31, + "componentType": 5123, + "count": 1776, + "type": "SCALAR" + }, + { + "bufferView": 32, + "componentType": 5126, + "count": 3754, + "max": [ + 4.662542819976807, + 1.2818248271942139, + 1.3734300136566162 + ], + "min": [ + -4.663037300109863, + 0, + -1.3101471662521362 + ], + "type": "VEC3" + }, + { + "bufferView": 33, + "componentType": 5126, + "count": 3754, + "type": "VEC3" + }, + { + "bufferView": 34, + "componentType": 5126, + "count": 3754, + "type": "VEC2" + }, + { + "bufferView": 35, + "componentType": 5123, + "count": 6408, + "type": "SCALAR" + }, + { + "bufferView": 36, + "componentType": 5126, + "count": 160, + "max": [ + 1.712507963180542, + 4.416482448577881, + 1.5876420736312866 + ], + "min": [ + -5.823613166809082, + 4.293811321258545, + -1.5455678701400757 + ], + "type": "VEC3" + }, + { + "bufferView": 37, + "componentType": 5126, + "count": 160, + "type": "VEC3" + }, + { + "bufferView": 38, + "componentType": 5126, + "count": 160, + "type": "VEC2" + }, + { + "bufferView": 39, + "componentType": 5123, + "count": 240, + "type": "SCALAR" + }, + { + "bufferView": 40, + "componentType": 5126, + "count": 544, + "max": [ + 5.817855358123779, + 3.2321460247039795, + 1.664182424545288 + ], + "min": [ + 5.573487758636475, + 2.3327908515930176, + -1.6238774061203003 + ], + "type": "VEC3" + }, + { + "bufferView": 41, + "componentType": 5126, + "count": 544, + "type": "VEC3" + }, + { + "bufferView": 42, + "componentType": 5126, + "count": 544, + "type": "VEC2" + }, + { + "bufferView": 43, + "componentType": 5123, + "count": 864, + "type": "SCALAR" + }, + { + "bufferView": 44, + "componentType": 5126, + "count": 916, + "max": [ + 6.061785697937012, + 2.157428026199341, + 1.3380249738693237 + ], + "min": [ + 5.80850887298584, + 0.7542245388031006, + -1.3239994049072266 + ], + "type": "VEC3" + }, + { + "bufferView": 45, + "componentType": 5126, + "count": 916, + "type": "VEC3" + }, + { + "bufferView": 46, + "componentType": 5126, + "count": 916, + "type": "VEC2" + }, + { + "bufferView": 47, + "componentType": 5123, + "count": 1428, + "type": "SCALAR" + }, + { + "bufferView": 48, + "componentType": 5126, + "count": 710, + "max": [ + 5.9408440589904785, + 4.0700602531433105, + 1.4553767442703247 + ], + "min": [ + 3.2007877826690674, + 0.5902273654937744, + -1.416050672531128 + ], + "type": "VEC3" + }, + { + "bufferView": 49, + "componentType": 5126, + "count": 710, + "type": "VEC3" + }, + { + "bufferView": 50, + "componentType": 5126, + "count": 710, + "type": "VEC2" + }, + { + "bufferView": 51, + "componentType": 5123, + "count": 1092, + "type": "SCALAR" + }, + { + "bufferView": 52, + "componentType": 5126, + "count": 80, + "max": [ + -5.98312520980835, + 1.902716875076294, + 1.3413848876953125 + ], + "min": [ + -6.06215763092041, + 1.750190019607544, + -1.3205069303512573 + ], + "type": "VEC3" + }, + { + "bufferView": 53, + "componentType": 5126, + "count": 80, + "type": "VEC3" + }, + { + "bufferView": 54, + "componentType": 5126, + "count": 80, + "type": "VEC2" + }, + { + "bufferView": 55, + "componentType": 5123, + "count": 120, + "type": "SCALAR" + }, + { + "bufferView": 56, + "componentType": 5126, + "count": 1360, + "max": [ + 1.9666240215301514, + 2.04174542427063, + 1.607351303100586 + ], + "min": [ + -6.041466236114502, + 1.6440985202789307, + -1.557450294494629 + ], + "type": "VEC3" + }, + { + "bufferView": 57, + "componentType": 5126, + "count": 1360, + "type": "VEC3" + }, + { + "bufferView": 58, + "componentType": 5126, + "count": 1360, + "type": "VEC2" + }, + { + "bufferView": 59, + "componentType": 5123, + "count": 2040, + "type": "SCALAR" + } + ], + "bufferViews": [ + { + "buffer": 0, + "byteLength": 23424, + "byteOffset": 0, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 23424, + "byteOffset": 23424, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 15616, + "byteOffset": 46848, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 6624, + "byteOffset": 62464, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 21120, + "byteOffset": 69088, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 21120, + "byteOffset": 90208, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 14080, + "byteOffset": 111328, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 5568, + "byteOffset": 125408, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 29376, + "byteOffset": 130976, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 29376, + "byteOffset": 160352, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 19584, + "byteOffset": 189728, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 9432, + "byteOffset": 209312, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 218744, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 219104, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 240, + "byteOffset": 219464, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 96, + "byteOffset": 219704, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 1812, + "byteOffset": 219800, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1812, + "byteOffset": 221612, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1208, + "byteOffset": 223424, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 534, + "byteOffset": 224632, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 636, + "byteOffset": 225168, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 636, + "byteOffset": 225804, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 424, + "byteOffset": 226440, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 162, + "byteOffset": 226864, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 1200, + "byteOffset": 227028, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1200, + "byteOffset": 228228, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 800, + "byteOffset": 229428, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 312, + "byteOffset": 230228, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 12660, + "byteOffset": 230540, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 12660, + "byteOffset": 243200, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 8440, + "byteOffset": 255860, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 3552, + "byteOffset": 264300, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 45048, + "byteOffset": 267852, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 45048, + "byteOffset": 312900, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 30032, + "byteOffset": 357948, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 12816, + "byteOffset": 387980, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 1920, + "byteOffset": 400796, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1920, + "byteOffset": 402716, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1280, + "byteOffset": 404636, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 405916, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 6528, + "byteOffset": 406396, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 6528, + "byteOffset": 412924, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 4352, + "byteOffset": 419452, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1728, + "byteOffset": 423804, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 10992, + "byteOffset": 425532, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 10992, + "byteOffset": 436524, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 7328, + "byteOffset": 447516, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 2856, + "byteOffset": 454844, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 8520, + "byteOffset": 457700, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 8520, + "byteOffset": 466220, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 5680, + "byteOffset": 474740, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 2184, + "byteOffset": 480420, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 960, + "byteOffset": 482604, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 960, + "byteOffset": 483564, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 640, + "byteOffset": 484524, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 240, + "byteOffset": 485164, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 16320, + "byteOffset": 485404, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 16320, + "byteOffset": 501724, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 10880, + "byteOffset": 518044, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 4080, + "byteOffset": 528924, + "target": 34963 + } + ], + "samplers": [ + { + "magFilter": 9729, + "minFilter": 9987 + } + ], + "buffers": [ + { + "byteLength": 533004, + "uri": "model.bin" + } + ] +} diff --git a/assets/models/custom/lowpoly_cars/truck_a02_001/preview.png b/assets/models/custom/lowpoly_cars/truck_a02_001/preview.png new file mode 100644 index 0000000..27d7698 Binary files /dev/null and b/assets/models/custom/lowpoly_cars/truck_a02_001/preview.png differ diff --git a/assets/models/custom/lowpoly_cars/truck_a03_001/model.bin b/assets/models/custom/lowpoly_cars/truck_a03_001/model.bin new file mode 100644 index 0000000..1515fe5 Binary files /dev/null and b/assets/models/custom/lowpoly_cars/truck_a03_001/model.bin differ diff --git a/assets/models/custom/lowpoly_cars/truck_a03_001/model.gltf b/assets/models/custom/lowpoly_cars/truck_a03_001/model.gltf new file mode 100644 index 0000000..50a0c9e --- /dev/null +++ b/assets/models/custom/lowpoly_cars/truck_a03_001/model.gltf @@ -0,0 +1,1534 @@ +{ + "asset": { + "generator": "Khronos glTF Blender I/O v4.5.51", + "version": "2.0" + }, + "extensionsUsed": [ + "KHR_materials_specular", + "KHR_materials_ior" + ], + "scene": 0, + "scenes": [ + { + "name": "Scene", + "nodes": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ] + } + ], + "nodes": [ + { + "mesh": 0, + "name": "Rectangle057.001" + }, + { + "mesh": 1, + "name": "OilTank016.001" + }, + { + "mesh": 2, + "name": "Object468.001" + }, + { + "mesh": 3, + "name": "Object467.001" + }, + { + "mesh": 4, + "name": "Object302.001" + }, + { + "mesh": 5, + "name": "Object301.001" + }, + { + "mesh": 6, + "name": "Object300.001" + }, + { + "mesh": 7, + "name": "Line374.001" + }, + { + "mesh": 8, + "name": "Line373.001" + }, + { + "mesh": 9, + "name": "Cylinder189.001" + }, + { + "mesh": 10, + "name": "Cylinder169.001" + }, + { + "mesh": 11, + "name": "Cylinder168.001" + }, + { + "mesh": 12, + "name": "Box2144.001" + }, + { + "mesh": 13, + "name": "Box2142.001" + }, + { + "mesh": 14, + "name": "Box2114.001" + }, + { + "mesh": 15, + "name": "Box2104.001" + }, + { + "mesh": 16, + "name": "Box2100.001" + }, + { + "mesh": 17, + "name": "Box2097.001" + }, + { + "mesh": 18, + "name": "Box2096.001" + } + ], + "materials": [ + { + "doubleSided": true, + "extensions": { + "KHR_materials_specular": { + "specularFactor": 0 + }, + "KHR_materials_ior": { + "ior": 1.4500000476837158 + } + }, + "name": "carmaterial", + "pbrMetallicRoughness": { + "baseColorTexture": { + "index": 0 + }, + "roughnessFactor": 0.858578622341156 + } + } + ], + "meshes": [ + { + "name": "Mesh.212", + "primitives": [ + { + "attributes": { + "POSITION": 0, + "NORMAL": 1, + "TEXCOORD_0": 2 + }, + "indices": 3, + "material": 0 + } + ] + }, + { + "name": "Mesh.213", + "primitives": [ + { + "attributes": { + "POSITION": 4, + "NORMAL": 5, + "TEXCOORD_0": 6 + }, + "indices": 7, + "material": 0 + } + ] + }, + { + "name": "Mesh.214", + "primitives": [ + { + "attributes": { + "POSITION": 8, + "NORMAL": 9, + "TEXCOORD_0": 10 + }, + "indices": 11, + "material": 0 + } + ] + }, + { + "name": "Mesh.215", + "primitives": [ + { + "attributes": { + "POSITION": 12, + "NORMAL": 13, + "TEXCOORD_0": 14 + }, + "indices": 15, + "material": 0 + } + ] + }, + { + "name": "Mesh.216", + "primitives": [ + { + "attributes": { + "POSITION": 16, + "NORMAL": 17, + "TEXCOORD_0": 18 + }, + "indices": 19, + "material": 0 + } + ] + }, + { + "name": "Mesh.217", + "primitives": [ + { + "attributes": { + "POSITION": 20, + "NORMAL": 21, + "TEXCOORD_0": 22 + }, + "indices": 23, + "material": 0 + } + ] + }, + { + "name": "Mesh.218", + "primitives": [ + { + "attributes": { + "POSITION": 24, + "NORMAL": 25, + "TEXCOORD_0": 26 + }, + "indices": 27, + "material": 0 + } + ] + }, + { + "name": "Mesh.219", + "primitives": [ + { + "attributes": { + "POSITION": 28, + "NORMAL": 29, + "TEXCOORD_0": 30 + }, + "indices": 31, + "material": 0 + } + ] + }, + { + "name": "Mesh.220", + "primitives": [ + { + "attributes": { + "POSITION": 32, + "NORMAL": 33, + "TEXCOORD_0": 34 + }, + "indices": 35, + "material": 0 + } + ] + }, + { + "name": "Mesh.221", + "primitives": [ + { + "attributes": { + "POSITION": 36, + "NORMAL": 37, + "TEXCOORD_0": 38 + }, + "indices": 39, + "material": 0 + } + ] + }, + { + "name": "Mesh.222", + "primitives": [ + { + "attributes": { + "POSITION": 40, + "NORMAL": 41, + "TEXCOORD_0": 42 + }, + "indices": 43, + "material": 0 + } + ] + }, + { + "name": "Mesh.223", + "primitives": [ + { + "attributes": { + "POSITION": 44, + "NORMAL": 45, + "TEXCOORD_0": 46 + }, + "indices": 47, + "material": 0 + } + ] + }, + { + "name": "Mesh.224", + "primitives": [ + { + "attributes": { + "POSITION": 48, + "NORMAL": 49, + "TEXCOORD_0": 50 + }, + "indices": 51, + "material": 0 + } + ] + }, + { + "name": "Mesh.225", + "primitives": [ + { + "attributes": { + "POSITION": 52, + "NORMAL": 53, + "TEXCOORD_0": 54 + }, + "indices": 55, + "material": 0 + } + ] + }, + { + "name": "Mesh.226", + "primitives": [ + { + "attributes": { + "POSITION": 56, + "NORMAL": 57, + "TEXCOORD_0": 58 + }, + "indices": 59, + "material": 0 + } + ] + }, + { + "name": "Mesh.227", + "primitives": [ + { + "attributes": { + "POSITION": 60, + "NORMAL": 61, + "TEXCOORD_0": 62 + }, + "indices": 63, + "material": 0 + } + ] + }, + { + "name": "Mesh.228", + "primitives": [ + { + "attributes": { + "POSITION": 64, + "NORMAL": 65, + "TEXCOORD_0": 66 + }, + "indices": 67, + "material": 0 + } + ] + }, + { + "name": "Mesh.229", + "primitives": [ + { + "attributes": { + "POSITION": 68, + "NORMAL": 69, + "TEXCOORD_0": 70 + }, + "indices": 71, + "material": 0 + } + ] + }, + { + "name": "Mesh.230", + "primitives": [ + { + "attributes": { + "POSITION": 72, + "NORMAL": 73, + "TEXCOORD_0": 74 + }, + "indices": 75, + "material": 0 + } + ] + } + ], + "textures": [ + { + "sampler": 0, + "source": 0 + } + ], + "images": [ + { + "mimeType": "image/jpeg", + "name": "LowPolyCarsCesiumTexture", + "uri": "../textures/color_512x512.jpg" + } + ], + "accessors": [ + { + "bufferView": 0, + "componentType": 5126, + "count": 1456, + "max": [ + -0.1869957447052002, + 2.409010410308838, + 1.4051765203475952 + ], + "min": [ + -2.984696865081787, + 1.0090827941894531, + -1.456313133239746 + ], + "type": "VEC3" + }, + { + "bufferView": 1, + "componentType": 5126, + "count": 1456, + "type": "VEC3" + }, + { + "bufferView": 2, + "componentType": 5126, + "count": 1456, + "type": "VEC2" + }, + { + "bufferView": 3, + "componentType": 5123, + "count": 2472, + "type": "SCALAR" + }, + { + "bufferView": 4, + "componentType": 5126, + "count": 1320, + "max": [ + 0.03938102722167969, + 2.352205753326416, + 1.3508847951889038 + ], + "min": [ + -2.926254987716675, + 1.0621168613433838, + -1.4018986225128174 + ], + "type": "VEC3" + }, + { + "bufferView": 5, + "componentType": 5126, + "count": 1320, + "type": "VEC3" + }, + { + "bufferView": 6, + "componentType": 5126, + "count": 1320, + "type": "VEC2" + }, + { + "bufferView": 7, + "componentType": 5123, + "count": 2088, + "type": "SCALAR" + }, + { + "bufferView": 8, + "componentType": 5126, + "count": 315, + "max": [ + 3.479473114013672, + 2.177189826965332, + 1.2289999723434448 + ], + "min": [ + -1.7877782583236694, + 1.7101374864578247, + -1.35841703414917 + ], + "type": "VEC3" + }, + { + "bufferView": 9, + "componentType": 5126, + "count": 315, + "type": "VEC3" + }, + { + "bufferView": 10, + "componentType": 5126, + "count": 315, + "type": "VEC2" + }, + { + "bufferView": 11, + "componentType": 5123, + "count": 504, + "type": "SCALAR" + }, + { + "bufferView": 12, + "componentType": 5126, + "count": 2448, + "max": [ + 4.325575828552246, + 0.9253685474395752, + 1.3128949403762817 + ], + "min": [ + -4.326592445373535, + 0.35645636916160583, + -1.376184105873108 + ], + "type": "VEC3" + }, + { + "bufferView": 13, + "componentType": 5126, + "count": 2448, + "type": "VEC3" + }, + { + "bufferView": 14, + "componentType": 5126, + "count": 2448, + "type": "VEC2" + }, + { + "bufferView": 15, + "componentType": 5123, + "count": 4716, + "type": "SCALAR" + }, + { + "bufferView": 16, + "componentType": 5126, + "count": 30, + "max": [ + -4.14139461517334, + 3.4457342624664307, + 1.7299555540084839 + ], + "min": [ + -5.811878204345703, + 2.3499326705932617, + -1.5052076578140259 + ], + "type": "VEC3" + }, + { + "bufferView": 17, + "componentType": 5126, + "count": 30, + "type": "VEC3" + }, + { + "bufferView": 18, + "componentType": 5126, + "count": 30, + "type": "VEC2" + }, + { + "bufferView": 19, + "componentType": 5123, + "count": 48, + "type": "SCALAR" + }, + { + "bufferView": 20, + "componentType": 5126, + "count": 175, + "max": [ + 6.034379005432129, + 2.409464120864868, + 1.5274688005447388 + ], + "min": [ + -2.305361270904541, + 1.5350990295410156, + -1.6649874448776245 + ], + "type": "VEC3" + }, + { + "bufferView": 21, + "componentType": 5126, + "count": 175, + "type": "VEC3" + }, + { + "bufferView": 22, + "componentType": 5126, + "count": 175, + "type": "VEC2" + }, + { + "bufferView": 23, + "componentType": 5123, + "count": 315, + "type": "SCALAR" + }, + { + "bufferView": 24, + "componentType": 5126, + "count": 53, + "max": [ + 6.012200355529785, + 1.7881438732147217, + 1.5555391311645508 + ], + "min": [ + -2.30535888671875, + 1.5350990295410156, + -1.6930583715438843 + ], + "type": "VEC3" + }, + { + "bufferView": 25, + "componentType": 5126, + "count": 53, + "type": "VEC3" + }, + { + "bufferView": 26, + "componentType": 5126, + "count": 53, + "type": "VEC2" + }, + { + "bufferView": 27, + "componentType": 5123, + "count": 81, + "type": "SCALAR" + }, + { + "bufferView": 28, + "componentType": 5126, + "count": 544, + "max": [ + -5.545368194580078, + 3.2321462631225586, + 1.7573102712631226 + ], + "min": [ + -5.835032939910889, + 2.3327908515930176, + -1.5318354368209839 + ], + "type": "VEC3" + }, + { + "bufferView": 29, + "componentType": 5126, + "count": 544, + "type": "VEC3" + }, + { + "bufferView": 30, + "componentType": 5126, + "count": 544, + "type": "VEC2" + }, + { + "bufferView": 31, + "componentType": 5123, + "count": 864, + "type": "SCALAR" + }, + { + "bufferView": 32, + "componentType": 5126, + "count": 100, + "max": [ + -1.8632465600967407, + 3.663660764694214, + 1.2496825456619263 + ], + "min": [ + -3.244661331176758, + 1.3249742984771729, + -1.1418431997299194 + ], + "type": "VEC3" + }, + { + "bufferView": 33, + "componentType": 5126, + "count": 100, + "type": "VEC3" + }, + { + "bufferView": 34, + "componentType": 5126, + "count": 100, + "type": "VEC2" + }, + { + "bufferView": 35, + "componentType": 5123, + "count": 156, + "type": "SCALAR" + }, + { + "bufferView": 36, + "componentType": 5126, + "count": 4122, + "max": [ + 3.534816026687622, + 2.2338707447052, + 1.2861186265945435 + ], + "min": [ + -1.8647048473358154, + 1.6551499366760254, + -1.4168704748153687 + ], + "type": "VEC3" + }, + { + "bufferView": 37, + "componentType": 5126, + "count": 4122, + "type": "VEC3" + }, + { + "bufferView": 38, + "componentType": 5126, + "count": 4122, + "type": "VEC2" + }, + { + "bufferView": 39, + "componentType": 5123, + "count": 7128, + "type": "SCALAR" + }, + { + "bufferView": 40, + "componentType": 5126, + "count": 1052, + "max": [ + 5.604699611663818, + 1.563292384147644, + 1.5497101545333862 + ], + "min": [ + -4.98867654800415, + 0.5559544563293457, + -1.5936487913131714 + ], + "type": "VEC3" + }, + { + "bufferView": 41, + "componentType": 5126, + "count": 1052, + "type": "VEC3" + }, + { + "bufferView": 42, + "componentType": 5126, + "count": 1052, + "type": "VEC2" + }, + { + "bufferView": 43, + "componentType": 5123, + "count": 1776, + "type": "SCALAR" + }, + { + "bufferView": 44, + "componentType": 5126, + "count": 3752, + "max": [ + 4.681699752807617, + 1.2818245887756348, + 1.3855396509170532 + ], + "min": [ + -4.682696342468262, + -5.960464477539063e-08, + -1.4488285779953003 + ], + "type": "VEC3" + }, + { + "bufferView": 45, + "componentType": 5126, + "count": 3752, + "type": "VEC3" + }, + { + "bufferView": 46, + "componentType": 5126, + "count": 3752, + "type": "VEC2" + }, + { + "bufferView": 47, + "componentType": 5123, + "count": 6408, + "type": "SCALAR" + }, + { + "bufferView": 48, + "componentType": 5126, + "count": 1480, + "max": [ + 5.0217156410217285, + 2.49601411819458, + 0.929852306842804 + ], + "min": [ + 4.062245845794678, + 1.6692843437194824, + 0.17886176705360413 + ], + "type": "VEC3" + }, + { + "bufferView": 49, + "componentType": 5126, + "count": 1480, + "type": "VEC3" + }, + { + "bufferView": 50, + "componentType": 5126, + "count": 1480, + "type": "VEC2" + }, + { + "bufferView": 51, + "componentType": 5123, + "count": 2520, + "type": "SCALAR" + }, + { + "bufferView": 52, + "componentType": 5126, + "count": 1474, + "max": [ + 4.460861682891846, + 2.0842044353485107, + 1.0389468669891357 + ], + "min": [ + 3.9125962257385254, + 1.6692843437194824, + -0.056452155113220215 + ], + "type": "VEC3" + }, + { + "bufferView": 53, + "componentType": 5126, + "count": 1474, + "type": "VEC3" + }, + { + "bufferView": 54, + "componentType": 5126, + "count": 1474, + "type": "VEC2" + }, + { + "bufferView": 55, + "componentType": 5123, + "count": 2520, + "type": "SCALAR" + }, + { + "bufferView": 56, + "componentType": 5126, + "count": 160, + "max": [ + 5.847184658050537, + 2.2883780002593994, + 1.558475136756897 + ], + "min": [ + -1.738215446472168, + 2.1657066345214844, + -1.6975468397140503 + ], + "type": "VEC3" + }, + { + "bufferView": 57, + "componentType": 5126, + "count": 160, + "type": "VEC3" + }, + { + "bufferView": 58, + "componentType": 5126, + "count": 160, + "type": "VEC2" + }, + { + "bufferView": 59, + "componentType": 5123, + "count": 240, + "type": "SCALAR" + }, + { + "bufferView": 60, + "componentType": 5126, + "count": 916, + "max": [ + -5.7898173332214355, + 2.1574277877807617, + 1.4645111560821533 + ], + "min": [ + -6.080570220947266, + 0.754224419593811, + -1.1981552839279175 + ], + "type": "VEC3" + }, + { + "bufferView": 61, + "componentType": 5126, + "count": 916, + "type": "VEC3" + }, + { + "bufferView": 62, + "componentType": 5126, + "count": 916, + "type": "VEC2" + }, + { + "bufferView": 63, + "componentType": 5123, + "count": 1428, + "type": "SCALAR" + }, + { + "bufferView": 64, + "componentType": 5126, + "count": 710, + "max": [ + -3.1768012046813965, + 4.0700602531433105, + 1.5464195013046265 + ], + "min": [ + -5.963286399841309, + 0.5902273654937744, + -1.369148850440979 + ], + "type": "VEC3" + }, + { + "bufferView": 65, + "componentType": 5126, + "count": 710, + "type": "VEC3" + }, + { + "bufferView": 66, + "componentType": 5126, + "count": 710, + "type": "VEC2" + }, + { + "bufferView": 67, + "componentType": 5123, + "count": 1092, + "type": "SCALAR" + }, + { + "bufferView": 68, + "componentType": 5126, + "count": 80, + "max": [ + 6.081961631774902, + 1.9027162790298462, + 1.1787505149841309 + ], + "min": [ + 5.959327220916748, + 1.7501893043518066, + -1.483604073524475 + ], + "type": "VEC3" + }, + { + "bufferView": 69, + "componentType": 5126, + "count": 80, + "type": "VEC3" + }, + { + "bufferView": 70, + "componentType": 5126, + "count": 80, + "type": "VEC2" + }, + { + "bufferView": 71, + "componentType": 5123, + "count": 120, + "type": "SCALAR" + }, + { + "bufferView": 72, + "componentType": 5126, + "count": 1360, + "max": [ + 6.041411876678467, + 2.0417444705963135, + 1.5768061876296997 + ], + "min": [ + -1.9926624298095703, + 1.6440978050231934, + -1.708759069442749 + ], + "type": "VEC3" + }, + { + "bufferView": 73, + "componentType": 5126, + "count": 1360, + "type": "VEC3" + }, + { + "bufferView": 74, + "componentType": 5126, + "count": 1360, + "type": "VEC2" + }, + { + "bufferView": 75, + "componentType": 5123, + "count": 2040, + "type": "SCALAR" + } + ], + "bufferViews": [ + { + "buffer": 0, + "byteLength": 17472, + "byteOffset": 0, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 17472, + "byteOffset": 17472, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 11648, + "byteOffset": 34944, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 4944, + "byteOffset": 46592, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 15840, + "byteOffset": 51536, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 15840, + "byteOffset": 67376, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 10560, + "byteOffset": 83216, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 4176, + "byteOffset": 93776, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 3780, + "byteOffset": 97952, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 3780, + "byteOffset": 101732, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 2520, + "byteOffset": 105512, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1008, + "byteOffset": 108032, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 29376, + "byteOffset": 109040, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 29376, + "byteOffset": 138416, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 19584, + "byteOffset": 167792, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 9432, + "byteOffset": 187376, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 196808, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 197168, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 240, + "byteOffset": 197528, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 96, + "byteOffset": 197768, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 2100, + "byteOffset": 197864, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 2100, + "byteOffset": 199964, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1400, + "byteOffset": 202064, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 630, + "byteOffset": 203464, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 636, + "byteOffset": 204096, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 636, + "byteOffset": 204732, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 424, + "byteOffset": 205368, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 162, + "byteOffset": 205792, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 6528, + "byteOffset": 205956, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 6528, + "byteOffset": 212484, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 4352, + "byteOffset": 219012, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1728, + "byteOffset": 223364, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 1200, + "byteOffset": 225092, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1200, + "byteOffset": 226292, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 800, + "byteOffset": 227492, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 312, + "byteOffset": 228292, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 49464, + "byteOffset": 228604, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 49464, + "byteOffset": 278068, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 32976, + "byteOffset": 327532, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 14256, + "byteOffset": 360508, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 12624, + "byteOffset": 374764, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 12624, + "byteOffset": 387388, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 8416, + "byteOffset": 400012, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 3552, + "byteOffset": 408428, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 45024, + "byteOffset": 411980, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 45024, + "byteOffset": 457004, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 30016, + "byteOffset": 502028, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 12816, + "byteOffset": 532044, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 17760, + "byteOffset": 544860, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 17760, + "byteOffset": 562620, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 11840, + "byteOffset": 580380, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 5040, + "byteOffset": 592220, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 17688, + "byteOffset": 597260, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 17688, + "byteOffset": 614948, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 11792, + "byteOffset": 632636, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 5040, + "byteOffset": 644428, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 1920, + "byteOffset": 649468, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1920, + "byteOffset": 651388, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1280, + "byteOffset": 653308, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 654588, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 10992, + "byteOffset": 655068, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 10992, + "byteOffset": 666060, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 7328, + "byteOffset": 677052, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 2856, + "byteOffset": 684380, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 8520, + "byteOffset": 687236, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 8520, + "byteOffset": 695756, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 5680, + "byteOffset": 704276, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 2184, + "byteOffset": 709956, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 960, + "byteOffset": 712140, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 960, + "byteOffset": 713100, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 640, + "byteOffset": 714060, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 240, + "byteOffset": 714700, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 16320, + "byteOffset": 714940, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 16320, + "byteOffset": 731260, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 10880, + "byteOffset": 747580, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 4080, + "byteOffset": 758460, + "target": 34963 + } + ], + "samplers": [ + { + "magFilter": 9729, + "minFilter": 9987 + } + ], + "buffers": [ + { + "byteLength": 762540, + "uri": "model.bin" + } + ] +} diff --git a/assets/models/custom/lowpoly_cars/truck_a03_001/preview.png b/assets/models/custom/lowpoly_cars/truck_a03_001/preview.png new file mode 100644 index 0000000..3ea3df3 Binary files /dev/null and b/assets/models/custom/lowpoly_cars/truck_a03_001/preview.png differ diff --git a/assets/models/custom/lowpoly_cars/truck_a04_001/model.bin b/assets/models/custom/lowpoly_cars/truck_a04_001/model.bin new file mode 100644 index 0000000..54f6d33 Binary files /dev/null and b/assets/models/custom/lowpoly_cars/truck_a04_001/model.bin differ diff --git a/assets/models/custom/lowpoly_cars/truck_a04_001/model.gltf b/assets/models/custom/lowpoly_cars/truck_a04_001/model.gltf new file mode 100644 index 0000000..841b152 --- /dev/null +++ b/assets/models/custom/lowpoly_cars/truck_a04_001/model.gltf @@ -0,0 +1,1534 @@ +{ + "asset": { + "generator": "Khronos glTF Blender I/O v4.5.51", + "version": "2.0" + }, + "extensionsUsed": [ + "KHR_materials_specular", + "KHR_materials_ior" + ], + "scene": 0, + "scenes": [ + { + "name": "Scene", + "nodes": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ] + } + ], + "nodes": [ + { + "mesh": 0, + "name": "Rectangle062.001" + }, + { + "mesh": 1, + "name": "OilTank018.001" + }, + { + "mesh": 2, + "name": "Object474.001" + }, + { + "mesh": 3, + "name": "Object466.001" + }, + { + "mesh": 4, + "name": "Object465.001" + }, + { + "mesh": 5, + "name": "Object307.001" + }, + { + "mesh": 6, + "name": "Object305.001" + }, + { + "mesh": 7, + "name": "Line377.001" + }, + { + "mesh": 8, + "name": "Cylinder175.001" + }, + { + "mesh": 9, + "name": "Cylinder172.001" + }, + { + "mesh": 10, + "name": "Cylinder171.001" + }, + { + "mesh": 11, + "name": "Box2140.001" + }, + { + "mesh": 12, + "name": "Box2136.001" + }, + { + "mesh": 13, + "name": "Box2135.001" + }, + { + "mesh": 14, + "name": "Box2134.001" + }, + { + "mesh": 15, + "name": "Box2133.001" + }, + { + "mesh": 16, + "name": "Box2129.001" + }, + { + "mesh": 17, + "name": "Box2119.001" + }, + { + "mesh": 18, + "name": "Box2115.001" + } + ], + "materials": [ + { + "doubleSided": true, + "extensions": { + "KHR_materials_specular": { + "specularFactor": 0 + }, + "KHR_materials_ior": { + "ior": 1.4500000476837158 + } + }, + "name": "carmaterial", + "pbrMetallicRoughness": { + "baseColorTexture": { + "index": 0 + }, + "roughnessFactor": 0.858578622341156 + } + } + ], + "meshes": [ + { + "name": "Mesh.212", + "primitives": [ + { + "attributes": { + "POSITION": 0, + "NORMAL": 1, + "TEXCOORD_0": 2 + }, + "indices": 3, + "material": 0 + } + ] + }, + { + "name": "Mesh.213", + "primitives": [ + { + "attributes": { + "POSITION": 4, + "NORMAL": 5, + "TEXCOORD_0": 6 + }, + "indices": 7, + "material": 0 + } + ] + }, + { + "name": "Mesh.214", + "primitives": [ + { + "attributes": { + "POSITION": 8, + "NORMAL": 9, + "TEXCOORD_0": 10 + }, + "indices": 11, + "material": 0 + } + ] + }, + { + "name": "Mesh.215", + "primitives": [ + { + "attributes": { + "POSITION": 12, + "NORMAL": 13, + "TEXCOORD_0": 14 + }, + "indices": 15, + "material": 0 + } + ] + }, + { + "name": "Mesh.216", + "primitives": [ + { + "attributes": { + "POSITION": 16, + "NORMAL": 17, + "TEXCOORD_0": 18 + }, + "indices": 19, + "material": 0 + } + ] + }, + { + "name": "Mesh.217", + "primitives": [ + { + "attributes": { + "POSITION": 20, + "NORMAL": 21, + "TEXCOORD_0": 22 + }, + "indices": 23, + "material": 0 + } + ] + }, + { + "name": "Mesh.218", + "primitives": [ + { + "attributes": { + "POSITION": 24, + "NORMAL": 25, + "TEXCOORD_0": 26 + }, + "indices": 27, + "material": 0 + } + ] + }, + { + "name": "Mesh.219", + "primitives": [ + { + "attributes": { + "POSITION": 28, + "NORMAL": 29, + "TEXCOORD_0": 30 + }, + "indices": 31, + "material": 0 + } + ] + }, + { + "name": "Mesh.220", + "primitives": [ + { + "attributes": { + "POSITION": 32, + "NORMAL": 33, + "TEXCOORD_0": 34 + }, + "indices": 35, + "material": 0 + } + ] + }, + { + "name": "Mesh.221", + "primitives": [ + { + "attributes": { + "POSITION": 36, + "NORMAL": 37, + "TEXCOORD_0": 38 + }, + "indices": 39, + "material": 0 + } + ] + }, + { + "name": "Mesh.222", + "primitives": [ + { + "attributes": { + "POSITION": 40, + "NORMAL": 41, + "TEXCOORD_0": 42 + }, + "indices": 43, + "material": 0 + } + ] + }, + { + "name": "Mesh.223", + "primitives": [ + { + "attributes": { + "POSITION": 44, + "NORMAL": 45, + "TEXCOORD_0": 46 + }, + "indices": 47, + "material": 0 + } + ] + }, + { + "name": "Mesh.224", + "primitives": [ + { + "attributes": { + "POSITION": 48, + "NORMAL": 49, + "TEXCOORD_0": 50 + }, + "indices": 51, + "material": 0 + } + ] + }, + { + "name": "Mesh.225", + "primitives": [ + { + "attributes": { + "POSITION": 52, + "NORMAL": 53, + "TEXCOORD_0": 54 + }, + "indices": 55, + "material": 0 + } + ] + }, + { + "name": "Mesh.226", + "primitives": [ + { + "attributes": { + "POSITION": 56, + "NORMAL": 57, + "TEXCOORD_0": 58 + }, + "indices": 59, + "material": 0 + } + ] + }, + { + "name": "Mesh.227", + "primitives": [ + { + "attributes": { + "POSITION": 60, + "NORMAL": 61, + "TEXCOORD_0": 62 + }, + "indices": 63, + "material": 0 + } + ] + }, + { + "name": "Mesh.228", + "primitives": [ + { + "attributes": { + "POSITION": 64, + "NORMAL": 65, + "TEXCOORD_0": 66 + }, + "indices": 67, + "material": 0 + } + ] + }, + { + "name": "Mesh.229", + "primitives": [ + { + "attributes": { + "POSITION": 68, + "NORMAL": 69, + "TEXCOORD_0": 70 + }, + "indices": 71, + "material": 0 + } + ] + }, + { + "name": "Mesh.230", + "primitives": [ + { + "attributes": { + "POSITION": 72, + "NORMAL": 73, + "TEXCOORD_0": 74 + }, + "indices": 75, + "material": 0 + } + ] + } + ], + "textures": [ + { + "sampler": 0, + "source": 0 + } + ], + "images": [ + { + "mimeType": "image/jpeg", + "name": "LowPolyCarsCesiumTexture", + "uri": "../textures/color_512x512.jpg" + } + ], + "accessors": [ + { + "bufferView": 0, + "componentType": 5126, + "count": 1440, + "max": [ + -0.15657424926757812, + 2.409010410308838, + 1.4050101041793823 + ], + "min": [ + -2.9548144340515137, + 1.0090830326080322, + -1.4568431377410889 + ], + "type": "VEC3" + }, + { + "bufferView": 1, + "componentType": 5126, + "count": 1440, + "type": "VEC3" + }, + { + "bufferView": 2, + "componentType": 5126, + "count": 1440, + "type": "VEC2" + }, + { + "bufferView": 3, + "componentType": 5123, + "count": 2436, + "type": "SCALAR" + }, + { + "bufferView": 4, + "componentType": 5126, + "count": 1320, + "max": [ + 0.06976127624511719, + 2.352205753326416, + 1.3507453203201294 + ], + "min": [ + -2.896409034729004, + 1.0621168613433838, + -1.4024577140808105 + ], + "type": "VEC3" + }, + { + "bufferView": 5, + "componentType": 5126, + "count": 1320, + "type": "VEC3" + }, + { + "bufferView": 6, + "componentType": 5126, + "count": 1320, + "type": "VEC2" + }, + { + "bufferView": 7, + "componentType": 5123, + "count": 2088, + "type": "SCALAR" + }, + { + "bufferView": 8, + "componentType": 5126, + "count": 916, + "max": [ + -5.7594499588012695, + 2.1574277877807617, + 1.4655739068984985 + ], + "min": [ + -6.050848960876465, + 0.754224419593811, + -1.1970816850662231 + ], + "type": "VEC3" + }, + { + "bufferView": 9, + "componentType": 5126, + "count": 916, + "type": "VEC3" + }, + { + "bufferView": 10, + "componentType": 5126, + "count": 916, + "type": "VEC2" + }, + { + "bufferView": 11, + "componentType": 5123, + "count": 1428, + "type": "SCALAR" + }, + { + "bufferView": 12, + "componentType": 5126, + "count": 206, + "max": [ + 5.3011274337768555, + 2.114555597305298, + 0.012988805770874023 + ], + "min": [ + 0.5575804710388184, + 1.667380690574646, + -1.379243016242981 + ], + "type": "VEC3" + }, + { + "bufferView": 13, + "componentType": 5126, + "count": 206, + "type": "VEC3" + }, + { + "bufferView": 14, + "componentType": 5126, + "count": 206, + "type": "VEC2" + }, + { + "bufferView": 15, + "componentType": 5123, + "count": 378, + "type": "SCALAR" + }, + { + "bufferView": 16, + "componentType": 5126, + "count": 2448, + "max": [ + 4.355930328369141, + 0.9253685474395752, + 1.3134492635726929 + ], + "min": [ + -4.296894550323486, + 0.35645636916160583, + -1.3779546022415161 + ], + "type": "VEC3" + }, + { + "bufferView": 17, + "componentType": 5126, + "count": 2448, + "type": "VEC3" + }, + { + "bufferView": 18, + "componentType": 5126, + "count": 2448, + "type": "VEC2" + }, + { + "bufferView": 19, + "componentType": 5123, + "count": 4716, + "type": "SCALAR" + }, + { + "bufferView": 20, + "componentType": 5126, + "count": 30, + "max": [ + -4.110965728759766, + 3.4457342624664307, + 1.7309318780899048 + ], + "min": [ + -5.7821574211120605, + 2.3499326705932617, + -1.5042307376861572 + ], + "type": "VEC3" + }, + { + "bufferView": 21, + "componentType": 5126, + "count": 30, + "type": "VEC3" + }, + { + "bufferView": 22, + "componentType": 5126, + "count": 30, + "type": "VEC2" + }, + { + "bufferView": 23, + "componentType": 5123, + "count": 48, + "type": "SCALAR" + }, + { + "bufferView": 24, + "componentType": 5126, + "count": 53, + "max": [ + 6.042616844177246, + 1.7881438732147217, + 1.5555557012557983 + ], + "min": [ + -2.275742769241333, + 1.5350990295410156, + -1.6953378915786743 + ], + "type": "VEC3" + }, + { + "bufferView": 25, + "componentType": 5126, + "count": 53, + "type": "VEC3" + }, + { + "bufferView": 26, + "componentType": 5126, + "count": 53, + "type": "VEC2" + }, + { + "bufferView": 27, + "componentType": 5123, + "count": 81, + "type": "SCALAR" + }, + { + "bufferView": 28, + "componentType": 5126, + "count": 100, + "max": [ + -1.832865834236145, + 3.663660764694214, + 1.2499581575393677 + ], + "min": [ + -3.214923858642578, + 1.3249742984771729, + -1.1419118642807007 + ], + "type": "VEC3" + }, + { + "bufferView": 29, + "componentType": 5126, + "count": 100, + "type": "VEC3" + }, + { + "bufferView": 30, + "componentType": 5126, + "count": 100, + "type": "VEC2" + }, + { + "bufferView": 31, + "componentType": 5123, + "count": 156, + "type": "SCALAR" + }, + { + "bufferView": 32, + "componentType": 5126, + "count": 3086, + "max": [ + 5.32990026473999, + 2.171236038208008, + 0.08050787448883057 + ], + "min": [ + 0.4806325435638428, + 1.6123929023742676, + -1.4354114532470703 + ], + "type": "VEC3" + }, + { + "bufferView": 33, + "componentType": 5126, + "count": 3086, + "type": "VEC3" + }, + { + "bufferView": 34, + "componentType": 5126, + "count": 3086, + "type": "VEC2" + }, + { + "bufferView": 35, + "componentType": 5123, + "count": 5346, + "type": "SCALAR" + }, + { + "bufferView": 36, + "componentType": 5126, + "count": 1052, + "max": [ + 5.634919166564941, + 1.563292384147644, + 1.5504881143569946 + ], + "min": [ + -4.959024429321289, + 0.5559544563293457, + -1.595655918121338 + ], + "type": "VEC3" + }, + { + "bufferView": 37, + "componentType": 5126, + "count": 1052, + "type": "VEC3" + }, + { + "bufferView": 38, + "componentType": 5126, + "count": 1052, + "type": "VEC2" + }, + { + "bufferView": 39, + "componentType": 5123, + "count": 1776, + "type": "SCALAR" + }, + { + "bufferView": 40, + "componentType": 5126, + "count": 3752, + "max": [ + 4.7120490074157715, + 1.2818245887756348, + 1.3862228393554688 + ], + "min": [ + -4.6529927253723145, + -5.960464477539063e-08, + -1.450727939605713 + ], + "type": "VEC3" + }, + { + "bufferView": 41, + "componentType": 5126, + "count": 3752, + "type": "VEC3" + }, + { + "bufferView": 42, + "componentType": 5126, + "count": 3752, + "type": "VEC2" + }, + { + "bufferView": 43, + "componentType": 5123, + "count": 6408, + "type": "SCALAR" + }, + { + "bufferView": 44, + "componentType": 5126, + "count": 2796, + "max": [ + 0.015596091747283936, + 3.131408214569092, + 1.3793110847473145 + ], + "min": [ + -1.6239755153656006, + 1.5477638244628906, + -1.0103743076324463 + ], + "type": "VEC3" + }, + { + "bufferView": 45, + "componentType": 5126, + "count": 2796, + "type": "VEC3" + }, + { + "bufferView": 46, + "componentType": 5126, + "count": 2796, + "type": "VEC2" + }, + { + "bufferView": 47, + "componentType": 5123, + "count": 4212, + "type": "SCALAR" + }, + { + "bufferView": 48, + "componentType": 5126, + "count": 1480, + "max": [ + 4.792765140533447, + 2.028731346130371, + 1.1635985374450684 + ], + "min": [ + 3.879690170288086, + 1.6138113737106323, + -0.22121024131774902 + ], + "type": "VEC3" + }, + { + "bufferView": 49, + "componentType": 5126, + "count": 1480, + "type": "VEC3" + }, + { + "bufferView": 50, + "componentType": 5126, + "count": 1480, + "type": "VEC2" + }, + { + "bufferView": 51, + "componentType": 5123, + "count": 2520, + "type": "SCALAR" + }, + { + "bufferView": 52, + "componentType": 5126, + "count": 1474, + "max": [ + 4.995028018951416, + 2.028731346130371, + 0.9986670613288879 + ], + "min": [ + 3.3146960735321045, + 1.6138113737106323, + 0.3790534734725952 + ], + "type": "VEC3" + }, + { + "bufferView": 53, + "componentType": 5126, + "count": 1474, + "type": "VEC3" + }, + { + "bufferView": 54, + "componentType": 5126, + "count": 1474, + "type": "VEC2" + }, + { + "bufferView": 55, + "componentType": 5123, + "count": 2520, + "type": "SCALAR" + }, + { + "bufferView": 56, + "componentType": 5126, + "count": 148, + "max": [ + 6.05594539642334, + 2.153931140899658, + 1.5285427570343018 + ], + "min": [ + -2.285550355911255, + 1.5347987413406372, + -1.654268741607666 + ], + "type": "VEC3" + }, + { + "bufferView": 57, + "componentType": 5126, + "count": 148, + "type": "VEC3" + }, + { + "bufferView": 58, + "componentType": 5126, + "count": 148, + "type": "VEC2" + }, + { + "bufferView": 59, + "componentType": 5123, + "count": 228, + "type": "SCALAR" + }, + { + "bufferView": 60, + "componentType": 5126, + "count": 160, + "max": [ + 5.948660373687744, + 2.0914242267608643, + 1.5583373308181763 + ], + "min": [ + -1.7086107730865479, + 1.9687529802322388, + -1.7012280225753784 + ], + "type": "VEC3" + }, + { + "bufferView": 61, + "componentType": 5126, + "count": 160, + "type": "VEC3" + }, + { + "bufferView": 62, + "componentType": 5126, + "count": 160, + "type": "VEC2" + }, + { + "bufferView": 63, + "componentType": 5123, + "count": 240, + "type": "SCALAR" + }, + { + "bufferView": 64, + "componentType": 5126, + "count": 544, + "max": [ + -5.514850616455078, + 3.2321462631225586, + 1.7582944631576538 + ], + "min": [ + -5.805233001708984, + 2.3327910900115967, + -1.5308619737625122 + ], + "type": "VEC3" + }, + { + "bufferView": 65, + "componentType": 5126, + "count": 544, + "type": "VEC3" + }, + { + "bufferView": 66, + "componentType": 5126, + "count": 544, + "type": "VEC2" + }, + { + "bufferView": 67, + "componentType": 5123, + "count": 864, + "type": "SCALAR" + }, + { + "bufferView": 68, + "componentType": 5126, + "count": 712, + "max": [ + -3.1463463306427, + 4.0700602531433105, + 1.547493577003479 + ], + "min": [ + -5.933621883392334, + 0.5902273654937744, + -1.3688256740570068 + ], + "type": "VEC3" + }, + { + "bufferView": 69, + "componentType": 5126, + "count": 712, + "type": "VEC3" + }, + { + "bufferView": 70, + "componentType": 5126, + "count": 712, + "type": "VEC2" + }, + { + "bufferView": 71, + "componentType": 5123, + "count": 1092, + "type": "SCALAR" + }, + { + "bufferView": 72, + "componentType": 5126, + "count": 1952, + "max": [ + 6.0453596115112305, + 2.0923075675964355, + 1.5767408609390259 + ], + "min": [ + -1.9630732536315918, + 1.6112724542617798, + -1.7108901739120483 + ], + "type": "VEC3" + }, + { + "bufferView": 73, + "componentType": 5126, + "count": 1952, + "type": "VEC3" + }, + { + "bufferView": 74, + "componentType": 5126, + "count": 1952, + "type": "VEC2" + }, + { + "bufferView": 75, + "componentType": 5123, + "count": 2844, + "type": "SCALAR" + } + ], + "bufferViews": [ + { + "buffer": 0, + "byteLength": 17280, + "byteOffset": 0, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 17280, + "byteOffset": 17280, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 11520, + "byteOffset": 34560, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 4872, + "byteOffset": 46080, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 15840, + "byteOffset": 50952, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 15840, + "byteOffset": 66792, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 10560, + "byteOffset": 82632, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 4176, + "byteOffset": 93192, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 10992, + "byteOffset": 97368, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 10992, + "byteOffset": 108360, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 7328, + "byteOffset": 119352, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 2856, + "byteOffset": 126680, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 2472, + "byteOffset": 129536, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 2472, + "byteOffset": 132008, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1648, + "byteOffset": 134480, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 756, + "byteOffset": 136128, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 29376, + "byteOffset": 136884, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 29376, + "byteOffset": 166260, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 19584, + "byteOffset": 195636, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 9432, + "byteOffset": 215220, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 224652, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 225012, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 240, + "byteOffset": 225372, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 96, + "byteOffset": 225612, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 636, + "byteOffset": 225708, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 636, + "byteOffset": 226344, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 424, + "byteOffset": 226980, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 162, + "byteOffset": 227404, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 1200, + "byteOffset": 227568, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1200, + "byteOffset": 228768, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 800, + "byteOffset": 229968, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 312, + "byteOffset": 230768, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 37032, + "byteOffset": 231080, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 37032, + "byteOffset": 268112, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 24688, + "byteOffset": 305144, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 10692, + "byteOffset": 329832, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 12624, + "byteOffset": 340524, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 12624, + "byteOffset": 353148, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 8416, + "byteOffset": 365772, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 3552, + "byteOffset": 374188, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 45024, + "byteOffset": 377740, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 45024, + "byteOffset": 422764, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 30016, + "byteOffset": 467788, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 12816, + "byteOffset": 497804, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 33552, + "byteOffset": 510620, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 33552, + "byteOffset": 544172, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 22368, + "byteOffset": 577724, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 8424, + "byteOffset": 600092, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 17760, + "byteOffset": 608516, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 17760, + "byteOffset": 626276, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 11840, + "byteOffset": 644036, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 5040, + "byteOffset": 655876, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 17688, + "byteOffset": 660916, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 17688, + "byteOffset": 678604, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 11792, + "byteOffset": 696292, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 5040, + "byteOffset": 708084, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 1776, + "byteOffset": 713124, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1776, + "byteOffset": 714900, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1184, + "byteOffset": 716676, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 456, + "byteOffset": 717860, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 1920, + "byteOffset": 718316, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1920, + "byteOffset": 720236, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1280, + "byteOffset": 722156, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 723436, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 6528, + "byteOffset": 723916, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 6528, + "byteOffset": 730444, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 4352, + "byteOffset": 736972, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 1728, + "byteOffset": 741324, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 8544, + "byteOffset": 743052, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 8544, + "byteOffset": 751596, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 5696, + "byteOffset": 760140, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 2184, + "byteOffset": 765836, + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 23424, + "byteOffset": 768020, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 23424, + "byteOffset": 791444, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 15616, + "byteOffset": 814868, + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 5688, + "byteOffset": 830484, + "target": 34963 + } + ], + "samplers": [ + { + "magFilter": 9729, + "minFilter": 9987 + } + ], + "buffers": [ + { + "byteLength": 836172, + "uri": "model.bin" + } + ] +} diff --git a/assets/models/custom/lowpoly_cars/truck_a04_001/preview.png b/assets/models/custom/lowpoly_cars/truck_a04_001/preview.png new file mode 100644 index 0000000..693602e Binary files /dev/null and b/assets/models/custom/lowpoly_cars/truck_a04_001/preview.png differ diff --git a/blender/tools/split_lowpoly_cars.py b/blender/tools/split_lowpoly_cars.py new file mode 100644 index 0000000..b93658b --- /dev/null +++ b/blender/tools/split_lowpoly_cars.py @@ -0,0 +1,334 @@ +#!/usr/bin/env python3 +"""Split the downloaded LowPoly Cars Blend into a browsable, reusable asset kit. + +Run through Blender because the source Blend is not safe to open in the sandbox: + blender --factory-startup --background --python blender/tools/split_lowpoly_cars.py -- \ + --source /Users/que01/Downloads/011.+LowPoly_Cars_01_blend.blend \ + --textures /Users/que01/Downloads/textures111 \ + --output assets/models/custom/lowpoly_cars +""" + +import json +import math +import os +import shutil +import sys + +import bpy +from mathutils import Matrix, Vector + + +TEXTURE_NAME = "color_512x512.jpg" +PREVIEW_SIZE = 640 +CESIUM_ALBEDO_GAIN = 2.6 + + +def cli_args(): + argv = sys.argv[sys.argv.index("--") + 1:] if "--" in sys.argv else [] + values = {} + while argv: + key = argv.pop(0) + if not key.startswith("--"): + raise RuntimeError("Expected a --key argument, got " + key) + if not argv: + raise RuntimeError("Missing value for " + key) + values[key[2:]] = argv.pop(0) + return values + + +def require_file(path, label): + if not path or not os.path.isfile(path): + raise RuntimeError(label + " does not exist: " + str(path)) + + +def category_for(name): + return name.split("_", 1)[0] + + +def roots(): + return sorted( + (obj for obj in bpy.data.objects if obj.type == "EMPTY" and obj.children), + key=lambda obj: obj.name, + ) + + +def descendants(root): + found = [] + pending = list(root.children) + while pending: + obj = pending.pop() + found.append(obj) + pending.extend(obj.children) + return [obj for obj in found if obj.type == "MESH"] + + +def world_vertices(meshes): + return [obj.matrix_world @ vertex.co for obj in meshes for vertex in obj.data.vertices] + + +def longitudinal_angle(points): + """Align the longest ground-plane PCA axis with +X for consistent previews.""" + mean_x = sum(point.x for point in points) / len(points) + mean_y = sum(point.y for point in points) / len(points) + xx = sum((point.x - mean_x) ** 2 for point in points) + yy = sum((point.y - mean_y) ** 2 for point in points) + xy = sum((point.x - mean_x) * (point.y - mean_y) for point in points) + return 0.5 * math.atan2(2.0 * xy, xx - yy) + + +def bounds(objects): + points = [obj.matrix_world @ Vector(corner) for obj in objects for corner in obj.bound_box] + lower = Vector(tuple(min(point[axis] for point in points) for axis in range(3))) + upper = Vector(tuple(max(point[axis] for point in points) for axis in range(3))) + return lower, upper + + +def reset_temp_collection(collection): + for obj in list(collection.objects): + mesh = obj.data if obj.type == "MESH" else None + bpy.data.objects.remove(obj, do_unlink=True) + if mesh and mesh.users == 0: + bpy.data.meshes.remove(mesh) + + +def make_normalized_objects(root, collection): + source_meshes = descendants(root) + points = world_vertices(source_meshes) + if not points: + raise RuntimeError(root.name + " has no mesh descendants") + lower = Vector(tuple(min(point[axis] for point in points) for axis in range(3))) + upper = Vector(tuple(max(point[axis] for point in points) for axis in range(3))) + center = Vector(((lower.x + upper.x) / 2.0, (lower.y + upper.y) / 2.0, lower.z)) + rotation = Matrix.Rotation(-longitudinal_angle(points), 4, "Z") + transform = rotation @ Matrix.Translation(-center) + result = [] + for source in source_meshes: + mesh = source.data.copy() + mesh.transform(transform @ source.matrix_world) + obj = bpy.data.objects.new(source.name, mesh) + collection.objects.link(obj) + for material in source.data.materials: + mesh.materials.append(material) + result.append(obj) + return result + + +def select_only(objects): + bpy.ops.object.select_all(action="DESELECT") + for obj in objects: + obj.select_set(True) + bpy.context.view_layer.objects.active = objects[0] + + +def bake_cesium_texture(texture_path, output_path): + """Bake the Cesium albedo gain into the shared JPEG pixels.""" + source = bpy.data.images.load(texture_path, check_existing=False) + source.name = "LowPolyCarsSourceTexture" + result = bpy.data.images.new("LowPolyCarsCesiumTexture", source.size[0], source.size[1], alpha=False) + pixels = list(source.pixels) + for index in range(0, len(pixels), 4): + pixels[index] = min(1.0, pixels[index] * CESIUM_ALBEDO_GAIN) + pixels[index + 1] = min(1.0, pixels[index + 1] * CESIUM_ALBEDO_GAIN) + pixels[index + 2] = min(1.0, pixels[index + 2] * CESIUM_ALBEDO_GAIN) + pixels[index + 3] = 1.0 + result.pixels = pixels + result.filepath_raw = output_path + result.file_format = "JPEG" + result.save() + return result + + +def setup_material_texture(image): + # The source Blend retains a broken relative image datablock. Loading a + # fresh datablock, rather than mutating that stale reference, is required + # for both Eevee thumbnails and glTF image export. + for material in bpy.data.materials: + if not material.use_nodes or not material.node_tree: + continue + for node in material.node_tree.nodes: + if node.type == "TEX_IMAGE": + node.image = image + + +def export_gltf(objects, asset_dir): + gltf_path = os.path.join(asset_dir, "model.gltf") + select_only(objects) + bpy.ops.export_scene.gltf( + filepath=gltf_path, + export_format="GLTF_SEPARATE", + use_selection=True, + export_keep_originals=True, + export_image_format="AUTO", + ) + with open(gltf_path, "r", encoding="utf-8") as handle: + gltf = json.load(handle) + for image in gltf.get("images", []): + uri = image.get("uri") + if not uri: + continue + # Do not delete the exporter URI. Blender can write it as an absolute + # path or a relative traversal back to the user's downloaded source. + # The final manifest owns one copied texture under textures/ instead. + image["uri"] = "../textures/" + TEXTURE_NAME + with open(gltf_path, "w", encoding="utf-8") as handle: + json.dump(gltf, handle, indent=2) + handle.write("\n") + + +def render_preview(objects, path): + scene = bpy.context.scene + lower, upper = bounds(objects) + span = upper - lower + target = (lower + upper) / 2.0 + target.z = lower.z + span.z * 0.42 + camera_data = bpy.data.cameras.new("AssetPreviewCamera") + camera = bpy.data.objects.new("AssetPreviewCamera", camera_data) + scene.collection.objects.link(camera) + camera.location = Vector((span.x * 1.18, -max(span.x, span.y) * 1.42, span.z * 0.92)) + direction = target - camera.location + camera.rotation_euler = direction.to_track_quat("-Z", "Y").to_euler() + camera.data.lens = 52 + scene.camera = camera + floor_mesh = bpy.data.meshes.new("AssetPreviewFloor") + floor_mesh.from_pydata([(-20, -20, 0), (20, -20, 0), (20, 20, 0), (-20, 20, 0)], [], [(0, 1, 2, 3)]) + floor = bpy.data.objects.new("AssetPreviewFloor", floor_mesh) + scene.collection.objects.link(floor) + floor_material = bpy.data.materials.new("AssetPreviewFloor") + floor_material.diffuse_color = (0.13, 0.16, 0.18, 1.0) + floor.data.materials.append(floor_material) + for name, location, energy, size in ( + ("AssetPreviewKey", (span.x, -span.y, span.z * 2.2), 1100, 5.0), + ("AssetPreviewFill", (-span.x, -span.y * 0.5, span.z * 1.2), 650, 4.0), + ("AssetPreviewRim", (0, span.y, span.z * 2.4), 900, 3.0), + ): + data = bpy.data.lights.new(name, "AREA") + data.energy = energy + data.shape = "DISK" + data.size = size + light = bpy.data.objects.new(name, data) + scene.collection.objects.link(light) + light.location = location + light.rotation_euler = (0, 0, 0) + light.rotation_euler = (target - light.location).to_track_quat("-Z", "Y").to_euler() + scene.render.engine = "BLENDER_EEVEE_NEXT" + scene.render.resolution_x = PREVIEW_SIZE + scene.render.resolution_y = PREVIEW_SIZE + scene.render.resolution_percentage = 100 + scene.render.image_settings.file_format = "PNG" + scene.render.filepath = path + scene.world.color = (0.035, 0.045, 0.055) + bpy.ops.render.render(write_still=True) + for obj in [camera, floor] + [obj for obj in scene.objects if obj.name.startswith("AssetPreview") and obj not in {camera, floor}]: + if obj.name in bpy.data.objects: + bpy.data.objects.remove(obj, do_unlink=True) + + +def metrics(objects): + lower, upper = bounds(objects) + return { + "vertices": sum(len(obj.data.vertices) for obj in objects), + "triangles": sum(len(loop.vertices) - 2 for obj in objects for loop in obj.data.polygons), + "dimensions": [round(value, 4) for value in upper - lower], + "materials": sorted({material.name for obj in objects for material in obj.data.materials if material}), + } + + +def gallery_html(assets): + cards = "\n".join( + "
\"{name}\"

{name}

" + "

{category} · {triangles:,} tris

{dims} m

{materials}

".format( + preview=asset["preview"], name=asset["name"], category=asset["category"], + triangles=asset["metrics"]["triangles"], + dims=" x ".join(str(value) for value in asset["metrics"]["dimensions"]), + materials=", ".join(asset["metrics"]["materials"]), + ) for asset in assets + ) + return """LowPoly Cars +
""" + cards + "
\n" + + +def verify(output): + manifest_path = os.path.join(output, "manifest.json") + require_file(manifest_path, "manifest") + with open(manifest_path, "r", encoding="utf-8") as handle: + manifest = json.load(handle) + if not manifest.get("license"): + raise RuntimeError("Manifest must state the source license status") + ids = [asset["id"] for asset in manifest.get("assets", [])] + if len(ids) != len(set(ids)) or not ids: + raise RuntimeError("Manifest has missing or duplicate asset IDs") + for asset in manifest["assets"]: + for field in ("model", "bin", "preview"): + require_file(os.path.join(output, asset[field]), asset["id"] + " " + field) + if asset["metrics"]["vertices"] <= 0 or asset["metrics"]["triangles"] <= 0: + raise RuntimeError(asset["id"] + " has empty geometry") + with open(os.path.join(output, asset["model"]), "r", encoding="utf-8") as handle: + gltf = json.load(handle) + uris = [image.get("uri") for image in gltf.get("images", [])] + if uris != ["../textures/" + TEXTURE_NAME]: + raise RuntimeError(asset["id"] + " does not reference the shared texture") + require_file(os.path.join(output, "textures", TEXTURE_NAME), "shared texture") + print("LOWPOLY_CARS_VERIFY", json.dumps({"assets": len(ids), "ids": ids})) + + +def main(): + args = cli_args() + if "verify" in args: + verify(os.path.abspath(args["verify"])) + return + source = os.path.abspath(args.get("source", "")) + texture_dir = os.path.abspath(args.get("textures", "")) + output = os.path.abspath(args.get("output", "")) + require_file(source, "source Blend") + texture_path = os.path.join(texture_dir, TEXTURE_NAME) + require_file(texture_path, "required shared texture") + if os.path.exists(output): + raise RuntimeError("Output already exists; remove it only after reviewing its contents: " + output) + bpy.ops.wm.open_mainfile(filepath=source) + # The source Blend is a display lineup. Hide it before thumbnail rendering; + # the normalized temporary mesh objects remain renderable. + for obj in bpy.context.scene.objects: + obj.hide_render = True + os.makedirs(output) + shared_textures = os.path.join(output, "textures") + os.makedirs(shared_textures) + # Match the Cesium tree profile by baking the gain into the output pixels. + setup_material_texture(bake_cesium_texture(texture_path, os.path.join(shared_textures, TEXTURE_NAME))) + temp = bpy.data.collections.new("LowPolyCarsExport") + bpy.context.scene.collection.children.link(temp) + assets = [] + for root in roots(): + asset_dir = os.path.join(output, root.name) + os.makedirs(asset_dir) + objects = make_normalized_objects(root, temp) + export_gltf(objects, asset_dir) + render_preview(objects, os.path.join(asset_dir, "preview.png")) + assets.append({ + "id": root.name, + "name": root.name.replace("_", " ").title(), + "category": category_for(root.name), + "sourceRoot": root.name, + "model": root.name + "/model.gltf", + "bin": root.name + "/model.bin", + "preview": root.name + "/preview.png", + "metrics": metrics(objects), + }) + reset_temp_collection(temp) + manifest = { + "source": os.path.basename(source), + "license": "Unknown; verify the original download license before redistribution.", + "texture": "textures/" + TEXTURE_NAME, + "layout": "Each asset has model.gltf/model.bin/preview.png; the 512px color texture is shared in textures/.", + "assets": assets, + } + with open(os.path.join(output, "manifest.json"), "w", encoding="utf-8") as handle: + json.dump(manifest, handle, indent=2) + handle.write("\n") + with open(os.path.join(output, "index.html"), "w", encoding="utf-8") as handle: + handle.write(gallery_html(assets)) + verify(output) + print("LOWPOLY_CARS_DONE", json.dumps({"assets": len(assets), "output": output})) + + +if __name__ == "__main__": + main() diff --git a/scripts/build-area.js b/scripts/build-area.js index 9086473..9bdfc01 100755 --- a/scripts/build-area.js +++ b/scripts/build-area.js @@ -12,7 +12,7 @@ const { } = require("./lib/scene-layers"); const { digest: glbDigest } = require("./glb-digest"); const { buildVehicleRoute: buildPreviewVehicleRoute } = require("./lib/vehicle-route"); -const { makeVehicleGltf: makePreviewVehicleGltf } = require("./lib/vehicle-model"); +const { writePreviewVehicleLibrary } = require("./lib/vehicle-library"); const { cesiumPreviewHtml, previewSummary, @@ -468,13 +468,13 @@ function writeCesiumPreview(area) { const startedAt = new Date(started).toISOString(); fs.mkdirSync(path.dirname(htmlPath), { recursive: true }); writeVehicleRoute(area); - writeVehicleModel(area); + const vehicleModelNames = writeVehicleModel(area); writeCesiumPreviewSupportFiles(path.dirname(htmlPath)); const glbName = path.basename(area.outputs.glb); const metadataName = path.basename(area.outputs.metadata); const routeName = path.basename(area.outputs.vehicleRoute); const vehicleModelName = path.basename(area.outputs.vehicleModel); - fs.writeFileSync(htmlPath, cesiumPreviewHtml(glbName, metadataName, routeName, vehicleModelName, area.id)); + fs.writeFileSync(htmlPath, cesiumPreviewHtml(glbName, metadataName, routeName, vehicleModelName, area.id, vehicleModelNames)); console.log(`Cesium preview: ${htmlPath}`); const finished = Date.now(); writeStageManifest(area, { @@ -510,10 +510,14 @@ function writeVehicleRoute(area) { } function writeVehicleModel(area) { - const gltf = makePreviewVehicleGltf(); fs.mkdirSync(path.dirname(area.outputs.vehicleModel), { recursive: true }); - fs.writeFileSync(area.outputs.vehicleModel, `${JSON.stringify(gltf, null, 2)}\n`); - console.log(`Vehicle model: ${area.outputs.vehicleModel}`); + const outDir = path.dirname(area.outputs.vehicleModel); + const fileStem = path.basename(area.outputs.vehicleModel, ".gltf").replace(/-vehicle-car$/, ""); + const models = writePreviewVehicleLibrary(outDir, fileStem); + // Preserve the existing output/manifest contract for old preview HTML. + fs.copyFileSync(path.join(outDir, models[0]), area.outputs.vehicleModel); + console.log(`Vehicle models: ${models.length} candidates in ${path.dirname(area.outputs.vehicleModel)}`); + return models; } function sceneGeojsonRecords(area) { diff --git a/scripts/lib/area-preview.js b/scripts/lib/area-preview.js index a35eca7..d984b5c 100644 --- a/scripts/lib/area-preview.js +++ b/scripts/lib/area-preview.js @@ -13,13 +13,14 @@ function writeCesiumPreviewSupportFiles(outDir) { } } -function cesiumPreviewHtml(glbName, metadataName, routeName, vehicleModelName, areaId) { +function cesiumPreviewHtml(glbName, metadataName, routeName, vehicleModelName, areaId, vehicleModelNames = []) { const previewConfig = { areaId, glbName, metadataName, routeName, vehicleModelName, + vehicleModelNames, }; return ` diff --git a/scripts/lib/cesium-preview.js b/scripts/lib/cesium-preview.js index 55af897..8ed62f1 100644 --- a/scripts/lib/cesium-preview.js +++ b/scripts/lib/cesium-preview.js @@ -37,7 +37,7 @@ const viewer = createViewer(); setLoadingMessage("Loading model", config.glbName || ""); const assets = await loadSceneAssets(viewer, metadata, placement); - const cruise = addVehicleCruises(viewer, routeData, config.vehicleModelName); + const cruise = addVehicleCruises(viewer, routeData, config.vehicleModelNames, config.vehicleModelName); const cameras = createCameraPresets(viewer, metadata, placement, cruise); buildAssetToggles(assets); @@ -422,7 +422,7 @@ return stopFollow; } - function addVehicleCruises(viewer, routeData, vehicleModelName) { + function addVehicleCruises(viewer, routeData, vehicleModelNames, fallbackVehicleModelName) { const segments = ((routeData && (routeData.routes || routeData.segments)) || []) .filter((segment) => segment.coordinates && segment.coordinates.length >= 2) .slice(0, 5); @@ -436,7 +436,8 @@ viewer.clock.shouldAnimate = segments.length > 0; const vehicles = segments.map((segment, index) => { - const vehicle = addCruiseVehicle(viewer, segment, index, start, speed, vehicleModelName); + const vehicle = addCruiseVehicle(viewer, segment, index, start, speed, + selectedVehicleModelName(vehicleModelNames, fallbackVehicleModelName)); const option = document.createElement("option"); option.value = String(index); option.textContent = routeLabel(segment, index); @@ -450,6 +451,14 @@ }; } + function selectedVehicleModelName(modelNames, fallbackModelName) { + const choices = Array.isArray(modelNames) && modelNames.length + ? modelNames + : [fallbackModelName]; + const usable = choices.filter(Boolean); + return usable[Math.floor(Math.random() * usable.length)] || ""; + } + function addCruiseVehicle(viewer, segment, index, start, speed, vehicleModelName) { const route = prepareRoute(segment); const positions = new Cesium.CallbackProperty((time, result) => { @@ -482,9 +491,10 @@ orientation: routeOrientation(route, start, speed, 0.0), model: { uri: vehicleModelName, - scale: 1.0, - minimumPixelSize: 24, - maximumScale: 80 + // Keep the library's world scale visible. A minimum screen size made + // long trucks balloon in overview and at intersections. + scale: 0.72, + minimumPixelSize: 0 } }); return { diff --git a/scripts/lib/vehicle-library.js b/scripts/lib/vehicle-library.js new file mode 100644 index 0000000..3f4c309 --- /dev/null +++ b/scripts/lib/vehicle-library.js @@ -0,0 +1,49 @@ +"use strict"; + +const fs = require("fs"); +const path = require("path"); + +const VEHICLE_IDS = [ + "car_a01_002", + "car_a02_002", + "car_a03_001", + "truck_a01_001", + "truck_a02_001", + "truck_a03_001", +]; +const LIBRARY_ROOT = path.resolve(__dirname, "..", "..", "assets", "models", "custom", "lowpoly_cars"); +const TEXTURE_NAME = "color_512x512.jpg"; +const REVERSED_MODEL_IDS = new Set(["truck_a03_001"]); + +function writePreviewVehicleLibrary(outDir, fileStem) { + const textureOutput = `${fileStem}-vehicle-texture.jpg`; + fs.mkdirSync(outDir, { recursive: true }); + fs.copyFileSync(path.join(LIBRARY_ROOT, "textures", TEXTURE_NAME), path.join(outDir, textureOutput)); + return VEHICLE_IDS.map((id) => { + const modelName = `${fileStem}-vehicle-${id}.gltf`; + const binName = `${fileStem}-vehicle-${id}.bin`; + const sourceDir = path.join(LIBRARY_ROOT, id); + const gltf = JSON.parse(fs.readFileSync(path.join(sourceDir, "model.gltf"), "utf8")); + for (const image of gltf.images || []) image.uri = textureOutput; + for (const buffer of gltf.buffers || []) buffer.uri = binName; + if (REVERSED_MODEL_IDS.has(id)) { + // The source's longitudinal PCA axis points rearward for this truck. + for (const node of gltf.nodes || []) node.rotation = [0, 1, 0, 0]; + } + for (const material of gltf.materials || []) { + const pbr = material.pbrMetallicRoughness || (material.pbrMetallicRoughness = {}); + // Match the Cesium foliage profile: lift albedo first, then use the + // texture itself as a modest shadow-side floor. + pbr.baseColorFactor = [2.1, 2.1, 2.1, 1]; + if (pbr.baseColorTexture) { + material.emissiveTexture = { ...pbr.baseColorTexture }; + material.emissiveFactor = [0.25, 0.25, 0.25]; + } + } + fs.writeFileSync(path.join(outDir, modelName), `${JSON.stringify(gltf, null, 2)}\n`); + fs.copyFileSync(path.join(sourceDir, "model.bin"), path.join(outDir, binName)); + return modelName; + }); +} + +module.exports = { VEHICLE_IDS, REVERSED_MODEL_IDS, writePreviewVehicleLibrary }; diff --git a/scripts/test-preview-assets.js b/scripts/test-preview-assets.js index fbcf974..ac41b61 100644 --- a/scripts/test-preview-assets.js +++ b/scripts/test-preview-assets.js @@ -7,6 +7,7 @@ const os = require("os"); const path = require("path"); const { cesiumPreviewHtml } = require("./lib/area-preview"); const { makeVehicleGltf } = require("./lib/vehicle-model"); +const { VEHICLE_IDS, REVERSED_MODEL_IDS, writePreviewVehicleLibrary } = require("./lib/vehicle-library"); const { allowedTurns, buildVehicleRoute, classifyConnection } = require("./lib/vehicle-route"); const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "preview-assets-")); @@ -85,17 +86,39 @@ assert.equal( vehicle.buffers[0].byteLength, ); +const vehicleLibraryRoot = path.join(__dirname, "..", "assets", "models", "custom", "lowpoly_cars"); +if (fs.existsSync(vehicleLibraryRoot)) { + const libraryDir = path.join(tempDir, "vehicle-library"); + const models = writePreviewVehicleLibrary(libraryDir, "fixture"); + assert.deepEqual(models, VEHICLE_IDS.map((id) => `fixture-vehicle-${id}.gltf`)); + assert.equal(models.length, 6); + assert.ok(fs.existsSync(path.join(libraryDir, "fixture-vehicle-texture.jpg"))); + for (const model of models) { + const gltf = JSON.parse(fs.readFileSync(path.join(libraryDir, model), "utf8")); + assert.deepEqual(gltf.images.map((image) => image.uri), ["fixture-vehicle-texture.jpg"]); + assert.equal(gltf.buffers[0].uri, model.replace(/\.gltf$/, ".bin")); + assert.deepEqual(gltf.materials[0].pbrMetallicRoughness.baseColorFactor, [2.1, 2.1, 2.1, 1]); + assert.deepEqual(gltf.materials[0].emissiveFactor, [0.25, 0.25, 0.25]); + assert.equal(gltf.materials[0].emissiveTexture.index, gltf.materials[0].pbrMetallicRoughness.baseColorTexture.index); + const reversed = model.includes("truck_a03_001"); + assert.equal(reversed, REVERSED_MODEL_IDS.has(model.match(/vehicle-(.+)\.gltf$/)[1])); + assert.equal(gltf.nodes.every((node) => JSON.stringify(node.rotation || []) === JSON.stringify([0, 1, 0, 0])), reversed); + } +} + const html = cesiumPreviewHtml( "scene<&>.glb", "scene.json", "route.json", "vehicle.gltf", "north<&>\u2028valley", + ["car-a.gltf", "truck-a.gltf"], ); assert.match(html, /north<&>\u2028valley Cesium Preview<\/title>/); assert.match(html, /Loading scene<&>\.glb/); assert.match(html, /"areaId":"north\\u003c\\u0026\\u003e\\u2028valley"/); assert.match(html, /"glbName":"scene\\u003c\\u0026\\u003e\.glb"/); +assert.match(html, /"vehicleModelNames":\["car-a\.gltf","truck-a\.gltf"\]/); assert.match(html, /id="viewMode"/); assert.match(html, /data-view-mode="inspect"/); assert.match(html, /id="semanticToggles" class="control-subgroup hidden"/);