Cashies tool library: dealgod photos -> TRELLIS -> shuntable paddock props
The dealgod.pro products database holds ~82k secondhand tool listings with photos (69k cached on the VPS). This turns the good ones into game assets: 15 tool classes curated from 45 candidates (socket set, air compressor, chain block, car ramp, OBD reader, trolley jack, engine crane, engine stand, toolbox, angle grinder, welder, jerry can, battery charger, jack stands, grease gun), each run through the MODELBEAST farm by the new tools/cc_to_glb.py: bg_remove_local cutout, then trellis_mac image->3D (1024 tier). Retries with backoff after a transient queue 401; the jerry can made trellis_mac exit 2 on two different photos and went through hunyuan3d_mlx instead (--operator flag), which ate it happily. Raw TRELLIS output is ~20MB per prop, so tools/slim_glb.py (headless Blender) decimates to 18k tris and re-exports with 1024 JPEG textures: the library lands at 27MB total for 15 props instead of ~300MB. The Willowbank paddock strews the whole library as RigidBodies -- TOOL_SPECS in dragway.gd gives each class its real-world size (TRELLIS output is unit-ish; the AABB is measured live and scaled) and an honest mass, so clipping the 70kg engine crane is a different event to punting the grease gun. The loader is directory-driven: drop a new GLB into assets/tools/ and it appears in the paddock next boot. Textures inherit whatever branding was in the source photos -- fine for secondhand background clutter, flagged in the README for anything that gets promoted to hero status. Smoke suite asserts every GLB in the library spawns as a prop. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
17
README.md
@ -299,6 +299,23 @@ Two things worth knowing before you re-prompt:
|
||||
The builder box-projects UVs at a per-material metres-per-tile scale; facades
|
||||
pick glass/brick/concrete/heritage/sandstone by height, building tag and id hash.
|
||||
|
||||
### Cashies tool props (dealgod → TRELLIS)
|
||||
|
||||
`assets/tools/*.glb` are real secondhand-shop stock: photos pulled from the
|
||||
dealgod.pro products database (~82k tool listings with images), curated one
|
||||
clean shot per class, then run through the MODELBEAST farm with
|
||||
[tools/cc_to_glb.py](tools/cc_to_glb.py) — `bg_remove_local` cutout first
|
||||
(the farm's own docs call that the big quality jump), then `trellis_mac`
|
||||
image→3D (1024 tier, 1024 texture ≈ prop-grade, a few MB each). The dragway
|
||||
paddock strews the whole library as shuntable RigidBodies via
|
||||
`TOOL_SPECS` in [dragway.gd](levels/willowbank_dragway/dragway.gd) — real-world
|
||||
size per class (TRELLIS output is unit-ish) and honest masses, so clipping the
|
||||
70 kg engine crane at speed is a different event to punting a grease gun.
|
||||
The library is deliberately game-agnostic: photo in, scaled GLB out — reusable
|
||||
for every future project. Textures inherit whatever branding was in the source
|
||||
photo (they're secondhand listings), which is fine for props but don't promote
|
||||
one to hero-asset status without checking what's written on it.
|
||||
|
||||
`woolies_carpark` is the one level still built in GDScript rather than as a GLB
|
||||
([carpark.gd](levels/woolies_carpark/carpark.gd)) — its parked shitboxes have to
|
||||
stay shuntable RigidBodies, which a static GLB can't carry. It picks its parked
|
||||
|
||||
BIN
assets/tools/angle_grinder.glb
Normal file
45
assets/tools/angle_grinder.glb.import
Normal file
@ -0,0 +1,45 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://nl02b6k7v026"
|
||||
path="res://.godot/imported/angle_grinder.glb-55059b4166594232ecf7a3548514d48d.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/tools/angle_grinder.glb"
|
||||
dest_files=["res://.godot/imported/angle_grinder.glb-55059b4166594232ecf7a3548514d48d.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/root_script=null
|
||||
mesh_library/use_node_names_as_mesh_names=false
|
||||
array_mesh/deduplicate_surfaces=true
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_name_suffixes=true
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
materials/extract=0
|
||||
materials/extract_format=0
|
||||
materials/extract_path=""
|
||||
_subresources={}
|
||||
gltf/naming_version=2
|
||||
gltf/embedded_image_handling=1
|
||||
gltf/texture_map_mode=1
|
||||
BIN
assets/tools/angle_grinder_Image_0.jpg
Normal file
|
After Width: | Height: | Size: 182 KiB |
43
assets/tools/angle_grinder_Image_0.jpg.import
Normal file
@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bgx7y3c36ld0x"
|
||||
path="res://.godot/imported/angle_grinder_Image_0.jpg-01d706181e0a16553e17624264d50e4e.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "3c8d3ff771986047ee9ac1af7c646bbc"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/tools/angle_grinder_Image_0.jpg"
|
||||
dest_files=["res://.godot/imported/angle_grinder_Image_0.jpg-01d706181e0a16553e17624264d50e4e.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
BIN
assets/tools/angle_grinder_Image_1.jpg
Normal file
|
After Width: | Height: | Size: 158 KiB |
43
assets/tools/angle_grinder_Image_1.jpg.import
Normal file
@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dorfsjgt6yl47"
|
||||
path="res://.godot/imported/angle_grinder_Image_1.jpg-143b0e4e30c41e14a6234f83dc87d3a3.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "5b944766a4c6dfe2aa2adbf9c5a582af"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/tools/angle_grinder_Image_1.jpg"
|
||||
dest_files=["res://.godot/imported/angle_grinder_Image_1.jpg-143b0e4e30c41e14a6234f83dc87d3a3.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
BIN
assets/tools/batt_charger.glb
Normal file
45
assets/tools/batt_charger.glb.import
Normal file
@ -0,0 +1,45 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://cn7tm7t6j3k4w"
|
||||
path="res://.godot/imported/batt_charger.glb-4bfc7982feef035e86c27453ef3d96b6.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/tools/batt_charger.glb"
|
||||
dest_files=["res://.godot/imported/batt_charger.glb-4bfc7982feef035e86c27453ef3d96b6.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/root_script=null
|
||||
mesh_library/use_node_names_as_mesh_names=false
|
||||
array_mesh/deduplicate_surfaces=true
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_name_suffixes=true
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
materials/extract=0
|
||||
materials/extract_format=0
|
||||
materials/extract_path=""
|
||||
_subresources={}
|
||||
gltf/naming_version=2
|
||||
gltf/embedded_image_handling=1
|
||||
gltf/texture_map_mode=1
|
||||
BIN
assets/tools/batt_charger_Image_0.jpg
Normal file
|
After Width: | Height: | Size: 194 KiB |
43
assets/tools/batt_charger_Image_0.jpg.import
Normal file
@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cymxkheiy2rfd"
|
||||
path="res://.godot/imported/batt_charger_Image_0.jpg-8b4e3e836229345b275629702f6203c6.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "88575dfbed853e78b667b91487ea2d88"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/tools/batt_charger_Image_0.jpg"
|
||||
dest_files=["res://.godot/imported/batt_charger_Image_0.jpg-8b4e3e836229345b275629702f6203c6.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
BIN
assets/tools/batt_charger_Image_1.jpg
Normal file
|
After Width: | Height: | Size: 142 KiB |
43
assets/tools/batt_charger_Image_1.jpg.import
Normal file
@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bs64ncysdksj"
|
||||
path="res://.godot/imported/batt_charger_Image_1.jpg-cc7a67f6df02f2a612591b0afe61c1e5.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "c0b458f5c133c03a4ae5ba6023a759fc"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/tools/batt_charger_Image_1.jpg"
|
||||
dest_files=["res://.godot/imported/batt_charger_Image_1.jpg-cc7a67f6df02f2a612591b0afe61c1e5.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
BIN
assets/tools/car_ramps.glb
Normal file
45
assets/tools/car_ramps.glb.import
Normal file
@ -0,0 +1,45 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://bmxdn8s3yet72"
|
||||
path="res://.godot/imported/car_ramps.glb-937a6dce99e241509a43a26bd927e6f3.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/tools/car_ramps.glb"
|
||||
dest_files=["res://.godot/imported/car_ramps.glb-937a6dce99e241509a43a26bd927e6f3.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/root_script=null
|
||||
mesh_library/use_node_names_as_mesh_names=false
|
||||
array_mesh/deduplicate_surfaces=true
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_name_suffixes=true
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
materials/extract=0
|
||||
materials/extract_format=0
|
||||
materials/extract_path=""
|
||||
_subresources={}
|
||||
gltf/naming_version=2
|
||||
gltf/embedded_image_handling=1
|
||||
gltf/texture_map_mode=1
|
||||
BIN
assets/tools/car_ramps_Image_0.jpg
Normal file
|
After Width: | Height: | Size: 149 KiB |
43
assets/tools/car_ramps_Image_0.jpg.import
Normal file
@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://x5vk1ha30n0u"
|
||||
path="res://.godot/imported/car_ramps_Image_0.jpg-d7cb5a962164eee0316d8498949fa52e.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "d456a4fe21c1996b993ee305e8a4565f"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/tools/car_ramps_Image_0.jpg"
|
||||
dest_files=["res://.godot/imported/car_ramps_Image_0.jpg-d7cb5a962164eee0316d8498949fa52e.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
BIN
assets/tools/car_ramps_Image_1.jpg
Normal file
|
After Width: | Height: | Size: 52 KiB |
43
assets/tools/car_ramps_Image_1.jpg.import
Normal file
@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://b0uflhp2880ar"
|
||||
path="res://.godot/imported/car_ramps_Image_1.jpg-0bd3ced5f977e6dddce1f1feb8893bd4.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "10d5274b465c7affc2aacf4ab2ff1845"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/tools/car_ramps_Image_1.jpg"
|
||||
dest_files=["res://.godot/imported/car_ramps_Image_1.jpg-0bd3ced5f977e6dddce1f1feb8893bd4.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
BIN
assets/tools/chain_hoist.glb
Normal file
45
assets/tools/chain_hoist.glb.import
Normal file
@ -0,0 +1,45 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://chemjried8rn2"
|
||||
path="res://.godot/imported/chain_hoist.glb-e21c615a9371afeedd18d42fc9d11cf2.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/tools/chain_hoist.glb"
|
||||
dest_files=["res://.godot/imported/chain_hoist.glb-e21c615a9371afeedd18d42fc9d11cf2.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/root_script=null
|
||||
mesh_library/use_node_names_as_mesh_names=false
|
||||
array_mesh/deduplicate_surfaces=true
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_name_suffixes=true
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
materials/extract=0
|
||||
materials/extract_format=0
|
||||
materials/extract_path=""
|
||||
_subresources={}
|
||||
gltf/naming_version=2
|
||||
gltf/embedded_image_handling=1
|
||||
gltf/texture_map_mode=1
|
||||
BIN
assets/tools/chain_hoist_Image_0.png
Normal file
|
After Width: | Height: | Size: 2.1 MiB |
43
assets/tools/chain_hoist_Image_0.png.import
Normal file
@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dkv4xbobefkqd"
|
||||
path="res://.godot/imported/chain_hoist_Image_0.png-7653ef3f90c8ecda3ddd581d462b37a7.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "af73461a51e13d9942cb7157910a70a0"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/tools/chain_hoist_Image_0.png"
|
||||
dest_files=["res://.godot/imported/chain_hoist_Image_0.png-7653ef3f90c8ecda3ddd581d462b37a7.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
BIN
assets/tools/chain_hoist_Image_1.jpg
Normal file
|
After Width: | Height: | Size: 235 KiB |
43
assets/tools/chain_hoist_Image_1.jpg.import
Normal file
@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cp8o65ytvyht1"
|
||||
path="res://.godot/imported/chain_hoist_Image_1.jpg-1bab81e14574a95db05c4b9bd16743a5.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "027fe5079386eabe89cdbbeb95bf0d5d"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/tools/chain_hoist_Image_1.jpg"
|
||||
dest_files=["res://.godot/imported/chain_hoist_Image_1.jpg-1bab81e14574a95db05c4b9bd16743a5.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
BIN
assets/tools/compressor.glb
Normal file
45
assets/tools/compressor.glb.import
Normal file
@ -0,0 +1,45 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://we30xc0b3ges"
|
||||
path="res://.godot/imported/compressor.glb-144fa350d613f3d6027156cd8e840d70.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/tools/compressor.glb"
|
||||
dest_files=["res://.godot/imported/compressor.glb-144fa350d613f3d6027156cd8e840d70.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/root_script=null
|
||||
mesh_library/use_node_names_as_mesh_names=false
|
||||
array_mesh/deduplicate_surfaces=true
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_name_suffixes=true
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
materials/extract=0
|
||||
materials/extract_format=0
|
||||
materials/extract_path=""
|
||||
_subresources={}
|
||||
gltf/naming_version=2
|
||||
gltf/embedded_image_handling=1
|
||||
gltf/texture_map_mode=1
|
||||
BIN
assets/tools/compressor_Image_0.jpg
Normal file
|
After Width: | Height: | Size: 309 KiB |
43
assets/tools/compressor_Image_0.jpg.import
Normal file
@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bt3kii4185ts0"
|
||||
path="res://.godot/imported/compressor_Image_0.jpg-ff007f62a391c1897868691c6ba7a03f.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "515de464d5c773f7bd68ee27b3cf4f37"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/tools/compressor_Image_0.jpg"
|
||||
dest_files=["res://.godot/imported/compressor_Image_0.jpg-ff007f62a391c1897868691c6ba7a03f.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
BIN
assets/tools/compressor_Image_1.jpg
Normal file
|
After Width: | Height: | Size: 177 KiB |
43
assets/tools/compressor_Image_1.jpg.import
Normal file
@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://17rxupgmmobu"
|
||||
path="res://.godot/imported/compressor_Image_1.jpg-8472be13eb5b4dbb58b0a6b1f5bc5129.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "a0412a18a0f51c4c3aaecdbee0c2e351"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/tools/compressor_Image_1.jpg"
|
||||
dest_files=["res://.godot/imported/compressor_Image_1.jpg-8472be13eb5b4dbb58b0a6b1f5bc5129.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
BIN
assets/tools/engine_crane.glb
Normal file
45
assets/tools/engine_crane.glb.import
Normal file
@ -0,0 +1,45 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://dgqx77jjjqmh6"
|
||||
path="res://.godot/imported/engine_crane.glb-e5bdc9b3abf4cd563f960dc0732315f9.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/tools/engine_crane.glb"
|
||||
dest_files=["res://.godot/imported/engine_crane.glb-e5bdc9b3abf4cd563f960dc0732315f9.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/root_script=null
|
||||
mesh_library/use_node_names_as_mesh_names=false
|
||||
array_mesh/deduplicate_surfaces=true
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_name_suffixes=true
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
materials/extract=0
|
||||
materials/extract_format=0
|
||||
materials/extract_path=""
|
||||
_subresources={}
|
||||
gltf/naming_version=2
|
||||
gltf/embedded_image_handling=1
|
||||
gltf/texture_map_mode=1
|
||||
BIN
assets/tools/engine_crane_Image_0.png
Normal file
|
After Width: | Height: | Size: 2.0 MiB |
43
assets/tools/engine_crane_Image_0.png.import
Normal file
@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cg16h5061m0wk"
|
||||
path="res://.godot/imported/engine_crane_Image_0.png-f43d70b6783298e3dd1c9c8e19cc084f.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "f0bb13ca2165a52512dbc6a9663a4ed5"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/tools/engine_crane_Image_0.png"
|
||||
dest_files=["res://.godot/imported/engine_crane_Image_0.png-f43d70b6783298e3dd1c9c8e19cc084f.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
BIN
assets/tools/engine_crane_Image_1.jpg
Normal file
|
After Width: | Height: | Size: 239 KiB |
43
assets/tools/engine_crane_Image_1.jpg.import
Normal file
@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://n82efm8h2rt6"
|
||||
path="res://.godot/imported/engine_crane_Image_1.jpg-80d830c1a9dd74f18c0a9df6bc077966.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "c772d233045fa35123e85253c0d4b353"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/tools/engine_crane_Image_1.jpg"
|
||||
dest_files=["res://.godot/imported/engine_crane_Image_1.jpg-80d830c1a9dd74f18c0a9df6bc077966.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
BIN
assets/tools/engine_stand.glb
Normal file
45
assets/tools/engine_stand.glb.import
Normal file
@ -0,0 +1,45 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://c1q6aaao2hhwh"
|
||||
path="res://.godot/imported/engine_stand.glb-31279a7651ca5f0edf057a974da9462d.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/tools/engine_stand.glb"
|
||||
dest_files=["res://.godot/imported/engine_stand.glb-31279a7651ca5f0edf057a974da9462d.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/root_script=null
|
||||
mesh_library/use_node_names_as_mesh_names=false
|
||||
array_mesh/deduplicate_surfaces=true
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_name_suffixes=true
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
materials/extract=0
|
||||
materials/extract_format=0
|
||||
materials/extract_path=""
|
||||
_subresources={}
|
||||
gltf/naming_version=2
|
||||
gltf/embedded_image_handling=1
|
||||
gltf/texture_map_mode=1
|
||||
BIN
assets/tools/engine_stand_Image_0.jpg
Normal file
|
After Width: | Height: | Size: 274 KiB |
43
assets/tools/engine_stand_Image_0.jpg.import
Normal file
@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://djfxjhgy61kxm"
|
||||
path="res://.godot/imported/engine_stand_Image_0.jpg-5e424208efb2ed4f9f80bac8fc0eff53.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "d15f78047a4d9e5debcb167e107b7942"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/tools/engine_stand_Image_0.jpg"
|
||||
dest_files=["res://.godot/imported/engine_stand_Image_0.jpg-5e424208efb2ed4f9f80bac8fc0eff53.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
BIN
assets/tools/engine_stand_Image_1.jpg
Normal file
|
After Width: | Height: | Size: 162 KiB |
43
assets/tools/engine_stand_Image_1.jpg.import
Normal file
@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bxcb1dc40t7dy"
|
||||
path="res://.godot/imported/engine_stand_Image_1.jpg-ca3af820dfcfc11c6fd12a3cf4c71d77.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "ac85add3b5a8162d956314812c5802d8"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/tools/engine_stand_Image_1.jpg"
|
||||
dest_files=["res://.godot/imported/engine_stand_Image_1.jpg-ca3af820dfcfc11c6fd12a3cf4c71d77.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
BIN
assets/tools/grease_gun.glb
Normal file
45
assets/tools/grease_gun.glb.import
Normal file
@ -0,0 +1,45 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://p3ncu7jigxhu"
|
||||
path="res://.godot/imported/grease_gun.glb-3e19a4633da76389e901beff9da1567b.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/tools/grease_gun.glb"
|
||||
dest_files=["res://.godot/imported/grease_gun.glb-3e19a4633da76389e901beff9da1567b.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/root_script=null
|
||||
mesh_library/use_node_names_as_mesh_names=false
|
||||
array_mesh/deduplicate_surfaces=true
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_name_suffixes=true
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
materials/extract=0
|
||||
materials/extract_format=0
|
||||
materials/extract_path=""
|
||||
_subresources={}
|
||||
gltf/naming_version=2
|
||||
gltf/embedded_image_handling=1
|
||||
gltf/texture_map_mode=1
|
||||
BIN
assets/tools/grease_gun_Image_0.png
Normal file
|
After Width: | Height: | Size: 2.0 MiB |
43
assets/tools/grease_gun_Image_0.png.import
Normal file
@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dki6lxfncbfq4"
|
||||
path="res://.godot/imported/grease_gun_Image_0.png-4bf0c6a9a837cbcdf929323832fc23e6.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "ea6cb80364caa61a9f1254705387f2d3"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/tools/grease_gun_Image_0.png"
|
||||
dest_files=["res://.godot/imported/grease_gun_Image_0.png-4bf0c6a9a837cbcdf929323832fc23e6.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
BIN
assets/tools/grease_gun_Image_1.jpg
Normal file
|
After Width: | Height: | Size: 228 KiB |
43
assets/tools/grease_gun_Image_1.jpg.import
Normal file
@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://ch4xxps2y7ny2"
|
||||
path="res://.godot/imported/grease_gun_Image_1.jpg-e1cbeb72b9691e760a4cd6e5c0f1d45d.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "6a6dec0503e73b8470f5d516d980731c"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/tools/grease_gun_Image_1.jpg"
|
||||
dest_files=["res://.godot/imported/grease_gun_Image_1.jpg-e1cbeb72b9691e760a4cd6e5c0f1d45d.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
BIN
assets/tools/jack_stands.glb
Normal file
45
assets/tools/jack_stands.glb.import
Normal file
@ -0,0 +1,45 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://ctci8e71qlci"
|
||||
path="res://.godot/imported/jack_stands.glb-e26275ee9fbb1ee9ea01434f70b2bdae.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/tools/jack_stands.glb"
|
||||
dest_files=["res://.godot/imported/jack_stands.glb-e26275ee9fbb1ee9ea01434f70b2bdae.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/root_script=null
|
||||
mesh_library/use_node_names_as_mesh_names=false
|
||||
array_mesh/deduplicate_surfaces=true
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_name_suffixes=true
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
materials/extract=0
|
||||
materials/extract_format=0
|
||||
materials/extract_path=""
|
||||
_subresources={}
|
||||
gltf/naming_version=2
|
||||
gltf/embedded_image_handling=1
|
||||
gltf/texture_map_mode=1
|
||||
BIN
assets/tools/jack_stands_Image_0.jpg
Normal file
|
After Width: | Height: | Size: 216 KiB |
43
assets/tools/jack_stands_Image_0.jpg.import
Normal file
@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bxobkifxtk3cm"
|
||||
path="res://.godot/imported/jack_stands_Image_0.jpg-9ef1102596a984f9f7f1cbfd3930db25.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "8b2aa8982fc2819407775ecde5128e18"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/tools/jack_stands_Image_0.jpg"
|
||||
dest_files=["res://.godot/imported/jack_stands_Image_0.jpg-9ef1102596a984f9f7f1cbfd3930db25.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
BIN
assets/tools/jack_stands_Image_1.jpg
Normal file
|
After Width: | Height: | Size: 180 KiB |
43
assets/tools/jack_stands_Image_1.jpg.import
Normal file
@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dpvc1nw472b2k"
|
||||
path="res://.godot/imported/jack_stands_Image_1.jpg-9ef9ab8f508c2b6dd7d0b17beca6b9ed.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "77a462d75f0952c032b15d59c5723e34"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/tools/jack_stands_Image_1.jpg"
|
||||
dest_files=["res://.godot/imported/jack_stands_Image_1.jpg-9ef9ab8f508c2b6dd7d0b17beca6b9ed.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
BIN
assets/tools/jerry_can.glb
Normal file
45
assets/tools/jerry_can.glb.import
Normal file
@ -0,0 +1,45 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://cd11yxrypnwm6"
|
||||
path="res://.godot/imported/jerry_can.glb-499227af7db3e1ce657019c0dba475d1.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/tools/jerry_can.glb"
|
||||
dest_files=["res://.godot/imported/jerry_can.glb-499227af7db3e1ce657019c0dba475d1.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/root_script=null
|
||||
mesh_library/use_node_names_as_mesh_names=false
|
||||
array_mesh/deduplicate_surfaces=true
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_name_suffixes=true
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
materials/extract=0
|
||||
materials/extract_format=0
|
||||
materials/extract_path=""
|
||||
_subresources={}
|
||||
gltf/naming_version=2
|
||||
gltf/embedded_image_handling=1
|
||||
gltf/texture_map_mode=1
|
||||
BIN
assets/tools/jerry_can_Image_0.jpg
Normal file
|
After Width: | Height: | Size: 158 KiB |
43
assets/tools/jerry_can_Image_0.jpg.import
Normal file
@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://d0vntu4g1cqqg"
|
||||
path="res://.godot/imported/jerry_can_Image_0.jpg-dd4838135c2a727153dcb84e0805e5fe.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "71a8060fe1beb71ea3a3a9a231fd2fa9"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/tools/jerry_can_Image_0.jpg"
|
||||
dest_files=["res://.godot/imported/jerry_can_Image_0.jpg-dd4838135c2a727153dcb84e0805e5fe.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
BIN
assets/tools/jerry_can_Image_1.jpg
Normal file
|
After Width: | Height: | Size: 138 KiB |
43
assets/tools/jerry_can_Image_1.jpg.import
Normal file
@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bjxbtoo73g2kt"
|
||||
path="res://.godot/imported/jerry_can_Image_1.jpg-890570ced5ebba20cbeed118fd60742f.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "912f77677a6030103dc7a08690b36c10"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/tools/jerry_can_Image_1.jpg"
|
||||
dest_files=["res://.godot/imported/jerry_can_Image_1.jpg-890570ced5ebba20cbeed118fd60742f.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
BIN
assets/tools/obd_reader.glb
Normal file
45
assets/tools/obd_reader.glb.import
Normal file
@ -0,0 +1,45 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://bmh6jl16n3od"
|
||||
path="res://.godot/imported/obd_reader.glb-f7a868a0013f3ddab52cf1fa4ce1909d.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/tools/obd_reader.glb"
|
||||
dest_files=["res://.godot/imported/obd_reader.glb-f7a868a0013f3ddab52cf1fa4ce1909d.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/root_script=null
|
||||
mesh_library/use_node_names_as_mesh_names=false
|
||||
array_mesh/deduplicate_surfaces=true
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_name_suffixes=true
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
materials/extract=0
|
||||
materials/extract_format=0
|
||||
materials/extract_path=""
|
||||
_subresources={}
|
||||
gltf/naming_version=2
|
||||
gltf/embedded_image_handling=1
|
||||
gltf/texture_map_mode=1
|
||||
BIN
assets/tools/obd_reader_Image_0.jpg
Normal file
|
After Width: | Height: | Size: 251 KiB |
43
assets/tools/obd_reader_Image_0.jpg.import
Normal file
@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://clabcoc0sfyvm"
|
||||
path="res://.godot/imported/obd_reader_Image_0.jpg-19d2d499dacb352e3aafa443ecc92a64.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "cd2fd38f31cc5d03778f1c27de640246"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/tools/obd_reader_Image_0.jpg"
|
||||
dest_files=["res://.godot/imported/obd_reader_Image_0.jpg-19d2d499dacb352e3aafa443ecc92a64.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
BIN
assets/tools/obd_reader_Image_1.jpg
Normal file
|
After Width: | Height: | Size: 113 KiB |
43
assets/tools/obd_reader_Image_1.jpg.import
Normal file
@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://b6mtxrvmfclfw"
|
||||
path="res://.godot/imported/obd_reader_Image_1.jpg-cc916e9184bb8708e4d5852f294ed702.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "ece2bf7873618226f2ef3a172633376d"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/tools/obd_reader_Image_1.jpg"
|
||||
dest_files=["res://.godot/imported/obd_reader_Image_1.jpg-cc916e9184bb8708e4d5852f294ed702.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
BIN
assets/tools/socket_set.glb
Normal file
45
assets/tools/socket_set.glb.import
Normal file
@ -0,0 +1,45 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://bgoglks48d1kn"
|
||||
path="res://.godot/imported/socket_set.glb-1075b20f6515439e0f19c61f6b0d67fd.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/tools/socket_set.glb"
|
||||
dest_files=["res://.godot/imported/socket_set.glb-1075b20f6515439e0f19c61f6b0d67fd.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/root_script=null
|
||||
mesh_library/use_node_names_as_mesh_names=false
|
||||
array_mesh/deduplicate_surfaces=true
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_name_suffixes=true
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
materials/extract=0
|
||||
materials/extract_format=0
|
||||
materials/extract_path=""
|
||||
_subresources={}
|
||||
gltf/naming_version=2
|
||||
gltf/embedded_image_handling=1
|
||||
gltf/texture_map_mode=1
|
||||
BIN
assets/tools/socket_set_Image_0.jpg
Normal file
|
After Width: | Height: | Size: 190 KiB |
43
assets/tools/socket_set_Image_0.jpg.import
Normal file
@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bt5gd0a8c4448"
|
||||
path="res://.godot/imported/socket_set_Image_0.jpg-58a5cf4dbc573e312a01cd02961254dc.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "b8cf1b6039bf18c764ac2ff892f3d734"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/tools/socket_set_Image_0.jpg"
|
||||
dest_files=["res://.godot/imported/socket_set_Image_0.jpg-58a5cf4dbc573e312a01cd02961254dc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
BIN
assets/tools/socket_set_Image_1.jpg
Normal file
|
After Width: | Height: | Size: 212 KiB |
43
assets/tools/socket_set_Image_1.jpg.import
Normal file
@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://d4ktkmskly7kq"
|
||||
path="res://.godot/imported/socket_set_Image_1.jpg-0bcba31ea8eab1902fa829cdea74cba2.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "daffb23cc08459d112a7c445f234e3d4"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/tools/socket_set_Image_1.jpg"
|
||||
dest_files=["res://.godot/imported/socket_set_Image_1.jpg-0bcba31ea8eab1902fa829cdea74cba2.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
BIN
assets/tools/toolbox.glb
Normal file
45
assets/tools/toolbox.glb.import
Normal file
@ -0,0 +1,45 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://crm5hfhikocsu"
|
||||
path="res://.godot/imported/toolbox.glb-483649963f97f821c79617f72a7bf500.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/tools/toolbox.glb"
|
||||
dest_files=["res://.godot/imported/toolbox.glb-483649963f97f821c79617f72a7bf500.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/root_script=null
|
||||
mesh_library/use_node_names_as_mesh_names=false
|
||||
array_mesh/deduplicate_surfaces=true
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_name_suffixes=true
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
materials/extract=0
|
||||
materials/extract_format=0
|
||||
materials/extract_path=""
|
||||
_subresources={}
|
||||
gltf/naming_version=2
|
||||
gltf/embedded_image_handling=1
|
||||
gltf/texture_map_mode=1
|
||||
BIN
assets/tools/toolbox_Image_0.jpg
Normal file
|
After Width: | Height: | Size: 228 KiB |
43
assets/tools/toolbox_Image_0.jpg.import
Normal file
@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dlvqsohjv4g5t"
|
||||
path="res://.godot/imported/toolbox_Image_0.jpg-b88e5ae81c1c52d90df3a2645d5d8253.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "f6cf6fa3f3aac55d15d000995d20a84b"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/tools/toolbox_Image_0.jpg"
|
||||
dest_files=["res://.godot/imported/toolbox_Image_0.jpg-b88e5ae81c1c52d90df3a2645d5d8253.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
BIN
assets/tools/toolbox_Image_1.jpg
Normal file
|
After Width: | Height: | Size: 85 KiB |
43
assets/tools/toolbox_Image_1.jpg.import
Normal file
@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bm2oocbpub7c4"
|
||||
path="res://.godot/imported/toolbox_Image_1.jpg-01d3635a9032c3c86c29837c0d9e5cfc.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "c079412f11fc608e7939054cd1b1bcda"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/tools/toolbox_Image_1.jpg"
|
||||
dest_files=["res://.godot/imported/toolbox_Image_1.jpg-01d3635a9032c3c86c29837c0d9e5cfc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
BIN
assets/tools/trolley_jack.glb
Normal file
45
assets/tools/trolley_jack.glb.import
Normal file
@ -0,0 +1,45 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://coe4tpykcwpu"
|
||||
path="res://.godot/imported/trolley_jack.glb-808c7f8d0e225535e497b21ff121d21b.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/tools/trolley_jack.glb"
|
||||
dest_files=["res://.godot/imported/trolley_jack.glb-808c7f8d0e225535e497b21ff121d21b.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/root_script=null
|
||||
mesh_library/use_node_names_as_mesh_names=false
|
||||
array_mesh/deduplicate_surfaces=true
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_name_suffixes=true
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
materials/extract=0
|
||||
materials/extract_format=0
|
||||
materials/extract_path=""
|
||||
_subresources={}
|
||||
gltf/naming_version=2
|
||||
gltf/embedded_image_handling=1
|
||||
gltf/texture_map_mode=1
|
||||
BIN
assets/tools/trolley_jack_Image_0.jpg
Normal file
|
After Width: | Height: | Size: 162 KiB |
43
assets/tools/trolley_jack_Image_0.jpg.import
Normal file
@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://pundlpl3xipt"
|
||||
path="res://.godot/imported/trolley_jack_Image_0.jpg-e9782c0a42c5249795555a7030843434.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "21f57150c31bdaa5a703141766c9bea6"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/tools/trolley_jack_Image_0.jpg"
|
||||
dest_files=["res://.godot/imported/trolley_jack_Image_0.jpg-e9782c0a42c5249795555a7030843434.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
BIN
assets/tools/trolley_jack_Image_1.jpg
Normal file
|
After Width: | Height: | Size: 213 KiB |
43
assets/tools/trolley_jack_Image_1.jpg.import
Normal file
@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://od8g6nv31mio"
|
||||
path="res://.godot/imported/trolley_jack_Image_1.jpg-723d6e0df7a187ed306d05c3c875ce16.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "24e69ffd41a715524dd94ad03af85e1f"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/tools/trolley_jack_Image_1.jpg"
|
||||
dest_files=["res://.godot/imported/trolley_jack_Image_1.jpg-723d6e0df7a187ed306d05c3c875ce16.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
BIN
assets/tools/welder.glb
Normal file
45
assets/tools/welder.glb.import
Normal file
@ -0,0 +1,45 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://dw2ynuvnfm3k2"
|
||||
path="res://.godot/imported/welder.glb-9b6889ab8a792c988e68c235d9d2cee6.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/tools/welder.glb"
|
||||
dest_files=["res://.godot/imported/welder.glb-9b6889ab8a792c988e68c235d9d2cee6.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/root_script=null
|
||||
mesh_library/use_node_names_as_mesh_names=false
|
||||
array_mesh/deduplicate_surfaces=true
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_name_suffixes=true
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
materials/extract=0
|
||||
materials/extract_format=0
|
||||
materials/extract_path=""
|
||||
_subresources={}
|
||||
gltf/naming_version=2
|
||||
gltf/embedded_image_handling=1
|
||||
gltf/texture_map_mode=1
|
||||
BIN
assets/tools/welder_Image_0.jpg
Normal file
|
After Width: | Height: | Size: 199 KiB |
43
assets/tools/welder_Image_0.jpg.import
Normal file
@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://crh8mxwskqydu"
|
||||
path="res://.godot/imported/welder_Image_0.jpg-e15c19429fbf0df66b1bd2fe7c6793ef.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "d06d868e58761075d9a99e7a670a546b"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/tools/welder_Image_0.jpg"
|
||||
dest_files=["res://.godot/imported/welder_Image_0.jpg-e15c19429fbf0df66b1bd2fe7c6793ef.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
BIN
assets/tools/welder_Image_1.jpg
Normal file
|
After Width: | Height: | Size: 20 KiB |
43
assets/tools/welder_Image_1.jpg.import
Normal file
@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dg8m0ngt5axqh"
|
||||
path="res://.godot/imported/welder_Image_1.jpg-d24b90967117c4c52c9b64dc6296dcbc.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "441e51a4dbeaa7206080c3ccbafb8067"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/tools/welder_Image_1.jpg"
|
||||
dest_files=["res://.godot/imported/welder_Image_1.jpg-d24b90967117c4c52c9b64dc6296dcbc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
@ -14,6 +14,27 @@ const STRIP_HALF := 12.0 # wall-to-wall half width
|
||||
const FINISH := -402.0
|
||||
const SHUTDOWN_END := -640.0
|
||||
|
||||
## Real Cashies stock, TRELLIS'd into GLBs (tools/cc_to_glb.py). Scale is the
|
||||
## longest dimension in metres; mass makes clipping an engine crane at 80
|
||||
## a different event to punting a grease gun.
|
||||
const TOOL_SPECS := {
|
||||
"angle_grinder": {"size": 0.35, "mass": 3.0},
|
||||
"batt_charger": {"size": 0.28, "mass": 4.0},
|
||||
"car_ramps": {"size": 0.95, "mass": 9.0},
|
||||
"chain_hoist": {"size": 0.45, "mass": 12.0},
|
||||
"compressor": {"size": 0.55, "mass": 14.0},
|
||||
"engine_crane": {"size": 1.6, "mass": 70.0},
|
||||
"engine_stand": {"size": 0.95, "mass": 30.0},
|
||||
"grease_gun": {"size": 0.4, "mass": 2.0},
|
||||
"jack_stands": {"size": 0.45, "mass": 8.0},
|
||||
"jerry_can": {"size": 0.48, "mass": 6.0},
|
||||
"obd_reader": {"size": 0.22, "mass": 1.0},
|
||||
"socket_set": {"size": 0.4, "mass": 5.0},
|
||||
"toolbox": {"size": 0.7, "mass": 18.0},
|
||||
"trolley_jack": {"size": 0.65, "mass": 20.0},
|
||||
"welder": {"size": 0.5, "mass": 16.0},
|
||||
}
|
||||
|
||||
func _ready() -> void:
|
||||
var rng := RandomNumberGenerator.new()
|
||||
rng.seed = 1320 # a respectable ET
|
||||
@ -77,6 +98,7 @@ func _ready() -> void:
|
||||
add_child(m)
|
||||
|
||||
_gums(rng)
|
||||
_paddock_tools(rng)
|
||||
_race_path()
|
||||
|
||||
func _mat(tex: String, scale: float, rough := 0.9) -> StandardMaterial3D:
|
||||
@ -246,6 +268,57 @@ func _gums(rng: RandomNumberGenerator) -> void:
|
||||
crown.position = at + Vector3(0, cm.height + sm.radius * 0.4, 0)
|
||||
add_child(crown)
|
||||
|
||||
func _paddock_tools(rng: RandomNumberGenerator) -> void:
|
||||
## Strew the paddock with the TRELLIS'd Cashies tool library -- real
|
||||
## secondhand clutter, every piece a shuntable RigidBody. Scale comes from
|
||||
## TOOL_SPECS (TRELLIS output is unit-ish), base sat on the ground.
|
||||
var dir := DirAccess.open("res://assets/tools")
|
||||
if dir == null:
|
||||
return
|
||||
var names: Array[String] = []
|
||||
for f in dir.get_files():
|
||||
if f.ends_with(".glb"):
|
||||
names.append(f.get_basename())
|
||||
names.sort() # deterministic layout
|
||||
var i := 0
|
||||
for n in names:
|
||||
var scene := load("res://assets/tools/%s.glb" % n) as PackedScene
|
||||
if scene == null:
|
||||
continue
|
||||
var spec: Dictionary = TOOL_SPECS.get(n, {"size": 0.5, "mass": 8.0})
|
||||
var model := scene.instantiate() as Node3D
|
||||
add_child(model) # into the tree first so global AABBs are real
|
||||
var aabb := AABB()
|
||||
var first := true
|
||||
for mi in model.find_children("*", "MeshInstance3D", true, false):
|
||||
var b: AABB = (mi as MeshInstance3D).global_transform * (mi as MeshInstance3D).get_aabb()
|
||||
aabb = b if first else aabb.merge(b)
|
||||
first = false
|
||||
remove_child(model)
|
||||
if first:
|
||||
model.queue_free()
|
||||
continue
|
||||
var s: float = float(spec["size"]) / maxf(aabb.size.x, maxf(aabb.size.y, aabb.size.z))
|
||||
var body := RigidBody3D.new()
|
||||
body.mass = float(spec["mass"])
|
||||
body.set_meta("cc_tool", n)
|
||||
var cs := CollisionShape3D.new()
|
||||
var box := BoxShape3D.new()
|
||||
box.size = (aabb.size * s).clamp(Vector3.ONE * 0.08, Vector3.ONE * 3.0)
|
||||
cs.shape = box
|
||||
cs.position = aabb.get_center() * s
|
||||
body.add_child(cs)
|
||||
model.scale = Vector3.ONE * s
|
||||
body.add_child(model)
|
||||
add_child(body)
|
||||
var spot := Vector3(24.0 + (i % 4) * 4.5 + rng.randf_range(-0.8, 0.8),
|
||||
0.02 - aabb.position.y * s,
|
||||
-16.0 - float(i / 4) * 7.0 + rng.randf_range(-0.8, 0.8))
|
||||
body.global_position = spot
|
||||
body.rotate_y(rng.randf() * TAU)
|
||||
body.sleeping = true
|
||||
i += 1
|
||||
|
||||
func _race_path() -> void:
|
||||
# loop for cruise traffic: down the strip, back up the return road
|
||||
var path := Path3D.new()
|
||||
|
||||
10
push18.log
Normal file
@ -0,0 +1,10 @@
|
||||
Enumerating objects: 21, done.
|
||||
Counting objects: 4% (1/21)
Counting objects: 9% (2/21)
Counting objects: 14% (3/21)
Counting objects: 19% (4/21)
Counting objects: 23% (5/21)
Counting objects: 28% (6/21)
Counting objects: 33% (7/21)
Counting objects: 38% (8/21)
Counting objects: 42% (9/21)
Counting objects: 47% (10/21)
Counting objects: 52% (11/21)
Counting objects: 57% (12/21)
Counting objects: 61% (13/21)
Counting objects: 66% (14/21)
Counting objects: 71% (15/21)
Counting objects: 76% (16/21)
Counting objects: 80% (17/21)
Counting objects: 85% (18/21)
Counting objects: 90% (19/21)
Counting objects: 95% (20/21)
Counting objects: 100% (21/21)
Counting objects: 100% (21/21), done.
|
||||
Delta compression using up to 32 threads
|
||||
Compressing objects: 8% (1/12)
Compressing objects: 16% (2/12)
Compressing objects: 25% (3/12)
Compressing objects: 33% (4/12)
Compressing objects: 41% (5/12)
Compressing objects: 50% (6/12)
Compressing objects: 58% (7/12)
Compressing objects: 66% (8/12)
Compressing objects: 75% (9/12)
Compressing objects: 83% (10/12)
Compressing objects: 91% (11/12)
Compressing objects: 100% (12/12)
Compressing objects: 100% (12/12), done.
|
||||
Writing objects: 7% (1/13)
Writing objects: 15% (2/13)
Writing objects: 23% (3/13)
Writing objects: 30% (4/13)
Writing objects: 38% (5/13)
Writing objects: 46% (6/13)
Writing objects: 53% (7/13)
Writing objects: 61% (8/13)
Writing objects: 69% (9/13)
Writing objects: 76% (10/13)
Writing objects: 84% (11/13)
Writing objects: 92% (12/13)
Writing objects: 100% (13/13)
Writing objects: 100% (13/13), 10.48 KiB | 10.48 MiB/s, done.
|
||||
Total 13 (delta 8), reused 0 (delta 0), pack-reused 0 (from 0)
|
||||
remote: . Processing 1 references
|
||||
remote: Processed 1 references in total
|
||||
To ssh://100.71.119.27:222/monster/burnoutinfinityshitbox.git
|
||||
927b3a9..4f91b34 main -> main
|
||||
@ -215,6 +215,19 @@ func _run() -> void:
|
||||
_check(game.rivals[0].stats.resource_path.contains("morry"),
|
||||
"rung 0 rival isn't Nanna (%s)" % game.rivals[0].stats.resource_path)
|
||||
_check(game._tree_bulbs.size() == 6, "christmas tree bulbs missing (%d)" % game._tree_bulbs.size())
|
||||
# TRELLIS'd cashies tools: once the library exists, the paddock is strewn
|
||||
var tool_dir := DirAccess.open("res://assets/tools")
|
||||
if tool_dir != null:
|
||||
var glbs := 0
|
||||
for f in tool_dir.get_files():
|
||||
if f.ends_with(".glb"):
|
||||
glbs += 1
|
||||
if glbs > 0:
|
||||
var strewn := 0
|
||||
for n in game.find_children("*", "RigidBody3D", true, false):
|
||||
if n.has_meta("cc_tool"):
|
||||
strewn += 1
|
||||
_check(strewn == glbs, "tool library has %d GLBs but %d spawned" % [glbs, strewn])
|
||||
await physics_frame
|
||||
_check(game.rivals[0].power_scale == 0.0, "rival not held at the tree")
|
||||
# burnout in the box: DRIFT+GAS warms the tyres and must NOT roll the beams
|
||||
|
||||
169
tools/cc_to_glb.py
Normal file
@ -0,0 +1,169 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Cashies photo -> game prop: bg_remove_local then trellis_mac on MODELBEAST.
|
||||
|
||||
Usage: cc_to_glb.py <name=image> [name=image ...] [--out DIR] [--workers N]
|
||||
|
||||
For each input image: upload -> bg_remove_local (clean cutout; the op's own
|
||||
docs call this the big quality jump before image->3D) -> trellis_mac
|
||||
(1024 tier, 1024 texture: prop-grade, keeps GLBs a few MB) -> download the
|
||||
GLB to <out>/<name>.glb. Progress lines are grep-friendly: "DONE name" /
|
||||
"FAIL name reason". Queue + token per ~/.claude/skills/fleet/SKILL.md; the
|
||||
guest token allows 4 active jobs, so keep --workers at 2 (each worker holds
|
||||
one job at a time, bg+trellis are sequential per item).
|
||||
|
||||
Job log JSON carries raw control chars -- scrub before json.loads.
|
||||
"""
|
||||
import json
|
||||
import mimetypes
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
import threading
|
||||
import time
|
||||
import urllib.request
|
||||
import uuid
|
||||
|
||||
HOST = os.environ.get("MB_HOST", "http://100.89.131.57:8777")
|
||||
ENVS = ["~/Documents/fluxgod-work/.env", "~/Documents/backnforth/.env"]
|
||||
|
||||
|
||||
def token():
|
||||
for p in ENVS:
|
||||
p = os.path.expanduser(p)
|
||||
if not os.path.exists(p):
|
||||
continue
|
||||
for line in open(p):
|
||||
if line.startswith("MB_TOKEN"):
|
||||
return line.split("=", 1)[1].strip().strip("'\"")
|
||||
sys.exit("no MB_TOKEN found on disk")
|
||||
|
||||
|
||||
TOK = token()
|
||||
|
||||
|
||||
def call(path, data=None, headers=None, raw=False, tries=4):
|
||||
# the queue occasionally throws a transient 401/5xx mid-batch (seen live:
|
||||
# one 401 between a working bg job and a working trellis submit) -- retry
|
||||
# with backoff before declaring an item dead
|
||||
h = {"Authorization": "Bearer " + TOK}
|
||||
h.update(headers or {})
|
||||
last = None
|
||||
for attempt in range(tries):
|
||||
try:
|
||||
req = urllib.request.Request(HOST + path, data=data, headers=h)
|
||||
blob = urllib.request.urlopen(req, timeout=180).read()
|
||||
if raw:
|
||||
return blob
|
||||
return json.loads(re.sub(r"[\x00-\x1f]", "", blob.decode("utf-8", "replace")))
|
||||
except Exception as e:
|
||||
last = e
|
||||
time.sleep(4 * (attempt + 1))
|
||||
raise last
|
||||
|
||||
|
||||
def upload(path):
|
||||
boundary = uuid.uuid4().hex
|
||||
ctype = mimetypes.guess_type(path)[0] or "application/octet-stream"
|
||||
body = (
|
||||
f'--{boundary}\r\nContent-Disposition: form-data; name="file"; '
|
||||
f'filename="{os.path.basename(path)}"\r\nContent-Type: {ctype}\r\n\r\n'
|
||||
).encode() + open(path, "rb").read() + f"\r\n--{boundary}--\r\n".encode()
|
||||
a = call("/api/assets", data=body,
|
||||
headers={"Content-Type": f"multipart/form-data; boundary={boundary}"})
|
||||
return a.get("id") or (a.get("items") or [a])[0].get("id")
|
||||
|
||||
|
||||
def run_job(operator, asset_id, params, timeout_s):
|
||||
j = call("/api/jobs", data=json.dumps(
|
||||
{"operator": operator, "asset_id": asset_id, "params": params}).encode(),
|
||||
headers={"Content-Type": "application/json"})
|
||||
jid = j["id"]
|
||||
t0 = time.time()
|
||||
while time.time() - t0 < timeout_s:
|
||||
time.sleep(10)
|
||||
st = call("/api/jobs/%s" % jid)
|
||||
if st.get("status") in ("done", "error", "cancelled"):
|
||||
if st["status"] != "done":
|
||||
raise RuntimeError("%s job %s: %s (%s)" % (
|
||||
operator, jid, st["status"], str(st.get("error", ""))[:160]))
|
||||
return jid
|
||||
raise RuntimeError("%s job %s timed out after %ds" % (operator, jid, timeout_s))
|
||||
|
||||
|
||||
def job_asset(jid, suffix=None):
|
||||
# jobs don't back-link outputs: list assets, match parent_job (mb_recon contract)
|
||||
a = call("/api/assets?limit=100")
|
||||
items = a if isinstance(a, list) else a.get("items", [])
|
||||
mine = [x for x in items if x.get("parent_job") == jid]
|
||||
if suffix:
|
||||
mine = [x for x in mine
|
||||
if str(x.get("filename", x.get("name", ""))).endswith(suffix)]
|
||||
if not mine:
|
||||
raise RuntimeError("job %s produced no %s asset" % (jid, suffix or ""))
|
||||
return mine[0]["id"]
|
||||
|
||||
|
||||
MESH_OP = "trellis_mac"
|
||||
MESH_PARAMS = {
|
||||
# jerry cans made trellis_mac exit 2 on two different photos; hunyuan3d_mlx
|
||||
# chewed the same cutout happily -- keep both dialled in
|
||||
"trellis_mac": {"pipeline_type": "1024", "texture_size": 1024},
|
||||
"hunyuan3d_mlx": {"texture_size": 1024},
|
||||
}
|
||||
|
||||
|
||||
def one(name, img, outdir):
|
||||
try:
|
||||
aid = upload(img)
|
||||
print("UPLOADED %s -> %s" % (name, aid), flush=True)
|
||||
bj = run_job("bg_remove_local", aid, {"resolution": 1024}, 600)
|
||||
cut = job_asset(bj)
|
||||
print("CUTOUT %s" % name, flush=True)
|
||||
tj = run_job(MESH_OP, cut, MESH_PARAMS.get(MESH_OP, {}), 3600)
|
||||
gid = job_asset(tj, ".glb")
|
||||
out = os.path.join(outdir, name + ".glb")
|
||||
open(out, "wb").write(call("/api/assets/%s/file" % gid, raw=True))
|
||||
print("DONE %s (%dKB)" % (name, os.path.getsize(out) // 1024), flush=True)
|
||||
except Exception as e:
|
||||
print("FAIL %s %s" % (name, str(e)[:200]), flush=True)
|
||||
|
||||
|
||||
def main():
|
||||
args = sys.argv[1:]
|
||||
outdir = "assets/tools"
|
||||
workers = 2
|
||||
if "--out" in args:
|
||||
i = args.index("--out")
|
||||
outdir = args[i + 1]
|
||||
del args[i:i + 2]
|
||||
if "--workers" in args:
|
||||
i = args.index("--workers")
|
||||
workers = int(args[i + 1])
|
||||
del args[i:i + 2]
|
||||
if "--operator" in args:
|
||||
i = args.index("--operator")
|
||||
global MESH_OP
|
||||
MESH_OP = args[i + 1]
|
||||
del args[i:i + 2]
|
||||
os.makedirs(outdir, exist_ok=True)
|
||||
queue = [a.split("=", 1) for a in args if "=" in a]
|
||||
lock = threading.Lock()
|
||||
|
||||
def worker():
|
||||
while True:
|
||||
with lock:
|
||||
if not queue:
|
||||
return
|
||||
name, img = queue.pop(0)
|
||||
one(name, img, outdir)
|
||||
|
||||
threads = [threading.Thread(target=worker) for _ in range(workers)]
|
||||
for t in threads:
|
||||
t.start()
|
||||
for t in threads:
|
||||
t.join()
|
||||
print("BATCH_COMPLETE", flush=True)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
75
tools/slim_glb.py
Normal file
@ -0,0 +1,75 @@
|
||||
"""Slim TRELLIS GLBs to prop grade, in place.
|
||||
|
||||
/Applications/Blender.app/Contents/MacOS/Blender -b -P tools/slim_glb.py -- <dir> [max_tris] [tex_px]
|
||||
|
||||
TRELLIS ships ~200k-face meshes with PNG textures -- 20MB+ per prop, which is
|
||||
lovely and also insane for background clutter. Per GLB: decimate every mesh
|
||||
down to max_tris (default 18k), scale every image to tex_px (default 1024),
|
||||
re-export with JPEG textures. Typical result is a 10x size drop with no
|
||||
visible cost at prop distance. Prints "SLIM name before->after KB" per file.
|
||||
"""
|
||||
import os
|
||||
import sys
|
||||
|
||||
import bpy
|
||||
|
||||
argv = sys.argv[sys.argv.index("--") + 1:] if "--" in sys.argv else []
|
||||
DIR = argv[0] if argv else "assets/tools"
|
||||
MAX_TRIS = int(argv[1]) if len(argv) > 1 else 18000
|
||||
TEX = int(argv[2]) if len(argv) > 2 else 1024
|
||||
|
||||
|
||||
def reset():
|
||||
bpy.ops.wm.read_factory_settings(use_empty=True)
|
||||
|
||||
|
||||
def tri_count(obj):
|
||||
m = obj.evaluated_get(bpy.context.evaluated_depsgraph_get()).to_mesh()
|
||||
n = len(m.loop_triangles)
|
||||
obj.evaluated_get(bpy.context.evaluated_depsgraph_get()).to_mesh_clear()
|
||||
return n
|
||||
|
||||
|
||||
def slim(path):
|
||||
reset()
|
||||
before = os.path.getsize(path) // 1024
|
||||
bpy.ops.import_scene.gltf(filepath=path)
|
||||
meshes = [o for o in bpy.data.objects if o.type == "MESH"]
|
||||
total = 0
|
||||
for o in meshes:
|
||||
o.data.calc_loop_triangles()
|
||||
total += len(o.data.loop_triangles)
|
||||
if total > MAX_TRIS:
|
||||
ratio = MAX_TRIS / float(total)
|
||||
for o in meshes:
|
||||
bpy.context.view_layer.objects.active = o
|
||||
mod = o.modifiers.new("slim", "DECIMATE")
|
||||
mod.ratio = ratio
|
||||
bpy.ops.object.modifier_apply(modifier=mod.name)
|
||||
for img in bpy.data.images:
|
||||
if img.size[0] > TEX or img.size[1] > TEX:
|
||||
img.scale(min(img.size[0], TEX), min(img.size[1], TEX))
|
||||
kwargs = {
|
||||
"filepath": path,
|
||||
"export_format": "GLB",
|
||||
"export_image_format": "JPEG",
|
||||
"export_yup": True,
|
||||
}
|
||||
# quality kwarg name moved between Blender versions; feed whichever exists
|
||||
props = bpy.ops.export_scene.gltf.get_rna_type().properties.keys()
|
||||
for k in ("export_jpeg_quality", "export_image_quality"):
|
||||
if k in props:
|
||||
kwargs[k] = 80
|
||||
bpy.ops.export_scene.gltf(**kwargs)
|
||||
print("SLIM %s %d->%dKB (%d tris)" % (
|
||||
os.path.basename(path), before, os.path.getsize(path) // 1024,
|
||||
min(total, MAX_TRIS)), flush=True)
|
||||
|
||||
|
||||
for f in sorted(os.listdir(DIR)):
|
||||
if f.endswith(".glb"):
|
||||
try:
|
||||
slim(os.path.join(DIR, f))
|
||||
except Exception as e: # keep the batch alive; one dud mustn't kill it
|
||||
print("SLIM_FAIL %s %s" % (f, str(e)[:160]), flush=True)
|
||||
print("SLIM_COMPLETE", flush=True)
|
||||