{
    "id": "mobile-crane-671d3f",
    "title": "Mobile Crane",
    "class": "vehicle",
    "triangles": 3091,
    "kit": "construction-site-9e40b0",
    "free": true,
    "plan": "free",
    "price_usd": 0,
    "price_note": "free: every low poly model is. The /cdn links need no account and no key (an account adds the ready-to-serve zip). The HD edition, where `hd` is not null, comes with Pro",
    "owned": true,
    "page": "https://polyfork.dev/asset/mobile-crane-671d3f",
    "thumbnail": "https://polyfork.dev/files/mobile-crane-671d3f/renders/hero.png",
    "preview_glb": "https://polyfork.dev/cdn/mobile-crane-671d3f-preview.glb",
    "hd": {
        "plan": "pro",
        "page": "https://polyfork.dev/asset/mobile-crane-671d3f?edition=hd",
        "kind": "its own high poly program with pbr materials",
        "triangles": 11850,
        "preview_glb": "https://polyfork.dev/cdn/mobile-crane-671d3f-hd-preview.glb",
        "files": "https://polyfork.dev/dl/mobile-crane-671d3f-hd.zip (Pro, with a key)"
    },
    "preview_triangles": 3091,
    "preview_fidelity": 1,
    "preview_rigged": true,
    "preview_rig": "pivots",
    "preview_pivots": [
        "outrigger-fl",
        "jack-fl",
        "outrigger-fr",
        "jack-fr",
        "outrigger-rl",
        "jack-rl",
        "outrigger-rr",
        "jack-rr",
        "steer-1l",
        "wheel-1l",
        "steer-1r",
        "wheel-1r",
        "steer-2l",
        "wheel-2l",
        "steer-2r",
        "wheel-2r",
        "wheel-3l",
        "wheel-3r",
        "wheel-4l",
        "wheel-4r",
        "turntable",
        "lift",
        "extend",
        "fall"
    ],
    "preview_note": "This preview keeps its pivots named (preview_pivots), so they turn as rigged_parts describes; its normals are stripped for flat shading. This model is free, so build with `download.glb`: the authored file, normals and node names as built.",
    "has_rig": true,
    "remixable": true,
    "has_night": true,
    "has_decals": true,
    "has_ik": true,
    "ik_type": "arm",
    "has_skeleton": false,
    "size_m": {
        "x": 6.25,
        "y": 9.38,
        "z": 13.41
    },
    "origin_y": 0,
    "mass_kg": 30000,
    "download": {
        "glb": "https://polyfork.dev/cdn/mobile-crane-671d3f.glb",
        "mjs": "https://polyfork.dev/cdn/mobile-crane-671d3f.mjs",
        "auth": "none"
    },
    "export_formats": {
        "fbx": {
            "url": "https://polyfork.dev/dl/mobile-crane-671d3f.fbx",
            "for": "Unity, Unreal, Maya, 3ds Max",
            "available": true
        },
        "usdz": {
            "url": "https://polyfork.dev/dl/mobile-crane-671d3f.usdz",
            "for": "iOS AR Quick Look, Omniverse; with UsdPhysics collision and mass",
            "available": true
        },
        "usda": {
            "url": "https://polyfork.dev/dl/mobile-crane-671d3f.usda",
            "for": "Isaac Sim, Omniverse, Blender, usdview; with UsdPhysics collision and mass",
            "available": true
        },
        "obj": {
            "url": "https://polyfork.dev/dl/mobile-crane-671d3f.obj",
            "for": "universal, geometry only, no pivots",
            "available": true,
            "also_fetch": "https://polyfork.dev/dl/mobile-crane-671d3f.mtl",
            "also_fetch_note": "save it beside the .obj as mobile-crane-671d3f.mtl: the model names that exact file and imports white without it"
        }
    },
    "export_note": "vertex colours become NAMED MATERIALS on export, named after this asset's own colour knobs; a plain format conversion would arrive white, because only three.js reads our COLOR_0. Built on first request (about a second), cached after. This model is free: these download with no account and no key (only its .mjs source asks for a free account).",
    "night": {
        "lamps": {
            "color": "#f2f7ff",
            "intensity": 1,
            "albedo": "#f2f7ff",
            "findable": true,
            "describe": "the two headlamps let into the front bumper and the work lamp on the crane cab roof, burning hard cold work-white"
        },
        "amber": {
            "color": "#ffc24a",
            "intensity": 0.6,
            "albedo": "#ffc24a",
            "findable": true,
            "describe": "the five beacon domes (carrier cab roof, crane cab roof, counterweight), the front indicators and the rear lamp clusters, glowing the kit's one warning amber"
        }
    },
    "night_note": "each zone is found by its ALBEDO in COLOR_0: match those vertices exactly, make them emissive at the zone colour and intensity, and drop your scene lights. That is the whole night look.",
    "decals": [
        {
            "name": "rest-box-l",
            "size": [
                0.56,
                0.74
            ],
            "at": [
                1.151,
                2.64,
                2.735
            ],
            "normal": [
                1,
                0,
                0
            ],
            "up": [
                0,
                1,
                0
            ],
            "describe": "the LEFT (+X) flank of the dark boom-rest box behind the carrier cab, where a crane-hire company letters the machine",
            "albedo": "#3a4146",
            "mode": "plate",
            "relief_mm": 0
        },
        {
            "name": "rest-box-r",
            "size": [
                0.56,
                0.74
            ],
            "at": [
                -1.151,
                2.64,
                2.735
            ],
            "normal": [
                -1,
                0,
                0
            ],
            "up": [
                0,
                1,
                0
            ],
            "describe": "the RIGHT (-X) flank of the boom-rest box, the mirror of rest-box-l",
            "albedo": "#3a4146",
            "mode": "plate",
            "relief_mm": 0
        },
        {
            "name": "cab-door-l",
            "size": [
                0.9,
                0.3
            ],
            "at": [
                1.251,
                2.04,
                4.3
            ],
            "normal": [
                1,
                0,
                0
            ],
            "up": [
                0,
                1,
                0
            ],
            "describe": "the LEFT (+X) carrier cab door below the side window and above the front wheel arch",
            "albedo": "#e3a31b",
            "mode": "plate",
            "relief_mm": 0
        },
        {
            "name": "cab-door-r",
            "size": [
                0.9,
                0.3
            ],
            "at": [
                -1.251,
                2.04,
                4.3
            ],
            "normal": [
                -1,
                0,
                0
            ],
            "up": [
                0,
                1,
                0
            ],
            "describe": "the RIGHT (-X) carrier cab door, the mirror of cab-door-l",
            "albedo": "#e3a31b",
            "mode": "plate",
            "relief_mm": 0
        }
    ],
    "decals_note": "flat areas you can print your own logo, sign, number or stencil on. `at` is the centre in model space (metres), `normal` points out of the surface, `up` is which way is up in the artwork, `size` is [width, height]. In three.js: bake art with https://polyfork.dev/cdn/sdf.mjs and place it with https://polyfork.dev/cdn/decal.mjs. In any other engine, a `plate` area takes a quad at `at` + `normal` * 0.002; a `projected` area is on a curved face `relief_mm` deep and the mark has to be projected onto the geometry. `albedo` is the colour of the surface underneath, so you can pick art that contrasts. Measured on the DEFAULT build: a geometry knob (a remix, a get_variant result) can move the surface by a few centimetres, and decal.mjs follows it because it raycasts the model you hand it; anywhere else, re-measure or keep the defaults.",
    "params_url": "https://polyfork.dev/cdn/mobile-crane-671d3f-params.json",
    "real_scale": {
        "at_real_size": true,
        "real_m": [
            10,
            14
        ],
        "real_dimension": "length",
        "as_built_m": 13.41,
        "scale_to_real": 1,
        "note": "built at real size: its largest dimension, 13.41 m, is inside the typical real 10-14 m (an estimate)."
    },
    "physics": {
        "mass_kg": 30000,
        "mass_source": "estimated",
        "material": "metal",
        "body": "dynamic",
        "dimensions_m": {
            "x": 6.25,
            "y": 9.188,
            "z": 13.409
        },
        "up_axis": "Y",
        "meters_per_unit": 1,
        "volume_m3": 71.580173,
        "collision": {
            "approximation": "convexDecomposition",
            "parts": 32,
            "colliders_url": "https://polyfork.dev/cdn/mobile-crane-671d3f-colliders.json"
        },
        "note": "For the default knob settings; a size knob changes all of it. dimensions_m and the colliders are measured from the model; mass_kg and material are an estimate of what the real object weighs. body \"static\" means fixed in place (give it a collider, no rigid body); \"dynamic\" means it moves. collision.approximation uses UsdPhysics terms: \"convexHull\" = one hull is a good fit, \"convexDecomposition\" = use the per-part hulls in colliders_url (the one hull would fill a gap, like the space under a table). Model space, metres, Y up, origin as the model ships."
    },
    "simready_metadata": {
        "simready_metadata_mass": 30000,
        "simready_metadata_rigid_body_count": 1,
        "usd_dimensions": [
            6.25,
            13.409,
            9.188
        ],
        "usd_up_axis": "Z",
        "usd_meters_per_unit": 1,
        "simready_metadata_validation__profile": null
    },
    "materials": 1,
    "draw_calls": 24,
    "description": "A four-axle all-terrain mobile crane, 12 m long on the road, 3.4 m to the cab roof, plant yellow with a dark grey carrier and eight block-tread wheels; a boxed telescopic boom in four stages on a slewing superstructure with a counterweight slab.",
    "palette": [
        {
            "hex": "#3a4146",
            "share": 0.338
        },
        {
            "hex": "#e3a31b",
            "share": 0.255
        },
        {
            "hex": "#9ba5ab",
            "share": 0.172
        },
        {
            "hex": "#15181a",
            "share": 0.129
        },
        {
            "hex": "#ffc24a",
            "share": 0.037
        },
        {
            "hex": "#262b2f",
            "share": 0.016
        }
    ],
    "style": "low-poly, flat-shaded vertex colors, no textures, single shared material, so any set of these merges to one draw call; shares palette and scale with its kit",
    "origin": "ground level (minY = 0): the model sits on y=0 as-is",
    "rigged_parts": {
        "turntable": {
            "axis": "y",
            "range": [
                0,
                180
            ]
        },
        "lift": {
            "axis": "x",
            "range": [
                0,
                -40
            ]
        },
        "extend": {
            "axis": "z",
            "range": [
                0,
                4.3
            ],
            "type": "slide"
        },
        "fall": {
            "axis": "x",
            "range": [
                0,
                40
            ]
        },
        "outrigger-fl": {
            "axis": "x",
            "range": [
                0,
                0.49
            ],
            "type": "slide"
        },
        "outrigger-fr": {
            "axis": "x",
            "range": [
                0,
                -0.49
            ],
            "type": "slide"
        },
        "outrigger-rl": {
            "axis": "x",
            "range": [
                0,
                0.49
            ],
            "type": "slide"
        },
        "outrigger-rr": {
            "axis": "x",
            "range": [
                0,
                -0.49
            ],
            "type": "slide"
        },
        "jack-fl": {
            "axis": "y",
            "range": [
                0,
                0.62
            ],
            "type": "slide"
        },
        "jack-fr": {
            "axis": "y",
            "range": [
                0,
                0.62
            ],
            "type": "slide"
        },
        "jack-rl": {
            "axis": "y",
            "range": [
                0,
                0.62
            ],
            "type": "slide"
        },
        "jack-rr": {
            "axis": "y",
            "range": [
                0,
                0.62
            ],
            "type": "slide"
        },
        "steer-1l": {
            "axis": "y",
            "range": [
                0,
                30
            ]
        },
        "steer-1r": {
            "axis": "y",
            "range": [
                0,
                30
            ]
        },
        "steer-2l": {
            "axis": "y",
            "range": [
                0,
                20
            ]
        },
        "steer-2r": {
            "axis": "y",
            "range": [
                0,
                20
            ]
        },
        "wheel-1l": {
            "axis": "x",
            "range": [
                0,
                140
            ]
        },
        "wheel-1r": {
            "axis": "x",
            "range": [
                0,
                140
            ]
        },
        "wheel-2l": {
            "axis": "x",
            "range": [
                0,
                140
            ]
        },
        "wheel-2r": {
            "axis": "x",
            "range": [
                0,
                140
            ]
        },
        "wheel-3l": {
            "axis": "x",
            "range": [
                0,
                140
            ]
        },
        "wheel-3r": {
            "axis": "x",
            "range": [
                0,
                140
            ]
        },
        "wheel-4l": {
            "axis": "x",
            "range": [
                0,
                140
            ]
        },
        "wheel-4r": {
            "axis": "x",
            "range": [
                0,
                140
            ]
        }
    },
    "detachable_parts": [
        "load"
    ],
    "animation": "rigged parts are named groups with the pivot at the hinge/axle: obj.getObjectByName(part) then rotation[axis] (rotate, degrees) or position[axis] (slide, meters). 0 is the pose the model is built in, which is not always shut: `range` is all the travel the part has from there, and outside it the part passes through the body. Whether the range opens or closes is in that knob's describe in params_url",
    "detaching": "detachable parts are named groups you may hide or remove: obj.getObjectByName(part).visible = false, or .removeFromParent(). The surface behind each is closed, so nothing shows a hole",
    "arm": {
        "slew": "turntable",
        "joints": [
            "lift",
            "fall"
        ],
        "upper": 12.474,
        "lower": 1.972,
        "tip": [
            0,
            -1.972,
            0
        ],
        "tip_rest": [
            0,
            7.057,
            7.364
        ],
        "base": [
            0,
            2.05,
            -2.35
        ],
        "reach": 14.446,
        "stays": [],
        "axes": {
            "slew": "y",
            "joints": "x"
        },
        "units": "metres, radians",
        "runtime": "https://polyfork.dev/cdn/walk.mjs",
        "note": "two-link chain with a slew: the same solver the legged machines use. Joint ranges in `rig` are the real limits and the tip stops at them.",
        "how": "a slew and a two-link boom: aim the tip and solve, stopping at the joint ranges in rigged_parts. three.js users import https://polyfork.dev/cdn/walk.mjs and call arm(model, { rig, detach }).reachTo(point), where rig and detach are the asset module's own exports (import { createAsset, rig, detach } from the .mjs): the arm cannot find its joints without them"
    },
    "published_at": "2026-09-28 20:50:50",
    "renders": [
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/back.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/close.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/compare.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/detail.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/front.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/hero-crop.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/hero.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/left.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/low-back.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/low.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/pose-extend.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/pose-fall.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/pose-jack-fl.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/pose-jack-fr.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/pose-jack-rl.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/pose-jack-rr.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/pose-lift.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/pose-outrigger-fl.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/pose-outrigger-fr.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/pose-outrigger-rl.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/pose-outrigger-rr.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/pose-steer-1l.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/pose-steer-1r.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/pose-steer-2l.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/pose-steer-2r.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/pose-turntable.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/pose-wheel-1l.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/pose-wheel-1r.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/pose-wheel-2l.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/pose-wheel-2r.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/pose-wheel-3l.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/pose-wheel-3r.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/pose-wheel-4l.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/pose-wheel-4r.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/proofs.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/removed-load.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/right.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/top.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/under.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/variant-boom-0.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/variant-boom-1.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/variant-colorway-clay-brown.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/variant-colorway-hire-white.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/variant-colorway-site-green.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/variant-colorway-works-grey.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/variant-extend-0.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/variant-extend-1.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/variant-hoist-0.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/variant-hoist-1.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/variant-hookPark-parked.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/variant-load-false.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/variant-outriggers-0.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/variant-outriggers-1.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/variant-slew-0.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/variant-slew-1.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/variant-wear-0.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/variant-wear-1.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/variants.png",
        "https://polyfork.dev/files/mobile-crane-671d3f/renders/views.png"
    ],
    "license": "Mesh files (GLB, FBX, USD, OBJ): CC BY 4.0 with the line in `credit`, or the Polyfork licence with no credit and no redistribution, your choice. The .mjs source and the HD edition: Polyfork licence only, commercial use, no attribution, no redistribution. https://polyfork.dev/licensing",
    "credit": "Mobile Crane by Polyfork (https://polyfork.dev/asset/mobile-crane-671d3f), CC BY 4.0",
    "access": {
        "as": "anonymous",
        "remix_bakes_per_hour": 40,
        "remix_bakes_left_this_hour": 40,
        "remix_note": "The budget is on generating NEW geometry. Variations anyone has already baked are served to everybody and never counted, so re-fetching a variant you or anyone else has made costs nothing.",
        "remix_bakes_per_month": 100,
        "remix_bakes_left_this_month": 100,
        "remix_allowance_resets": "2026-12-01",
        "remix_allowance_note": "Anonymous callers are counted per IP address, so other sessions from the same address share this. A free account raises it to 300 a WEEK on its own budget, and costs an email address.",
        "a_free_account_adds": {
            "how": "Authorization: Bearer <key>, created at https://polyfork.dev/account. Costs an email address.",
            "remix_bakes_per_hour": 100,
            "remix_bakes_per_week": 300,
            "downloads": "every low poly model's .mjs program and a ready-to-serve zip from /dl, and any kit as one zip (/dl/kit-<id>.zip). The .glb, .fbx, .usdz, .usda and .obj need no key"
        },
        "pro_adds": {
            "url": "https://polyfork.dev/pricing",
            "usd_per_year": 149,
            "hd_editions": "the HD edition of a model: the same program built finer, high poly with PBR materials generated in code, every knob still working. 1,824 models have one. Free accounts get its public preview (/cdn/<id>-hd-preview.glb) only",
            "cdn": "a per-account /c/<token>/ path for the HD files you can hotlink from a shipped build; it keeps up when an asset is rebuilt, and the token is not the API key",
            "remix_bakes_per_hour": 900,
            "remix_bakes_per_week": "uncapped: a free account gets a weekly allowance, Pro does not"
        }
    }
}
