{
    "id": "tarantula-9553f9",
    "title": "Tarantula",
    "class": "animal",
    "triangles": 2142,
    "kit": null,
    "free": false,
    "plan": "pro",
    "price_usd": null,
    "price_note": "not sold separately: included in Pro, or in the one-time Founders plan. price_usd is retired and stays null for paid assets \u2014 read `plan`.",
    "owned": false,
    "page": "https://polyfork.dev/asset/tarantula-9553f9",
    "thumbnail": "https://polyfork.dev/files/tarantula-9553f9/renders/hero.png",
    "preview_glb": "https://polyfork.dev/cdn/tarantula-9553f9-preview.glb",
    "preview_triangles": 2142,
    "preview_fidelity": 1,
    "preview_rigged": true,
    "preview_rig": "skinned",
    "preview_note": "Full triangle count, and the SKELETON comes with it: the preview carries its skin and its bones, so it plays a clip as delivered. What it does NOT carry is the .mjs program \u2014 the knobs \u2014 and its normals are stripped for flat shading. On a skinned asset the upgrade is the program, not the mesh.",
    "has_rig": true,
    "remixable": true,
    "has_night": false,
    "has_decals": false,
    "has_ik": false,
    "ik_type": null,
    "has_skeleton": false,
    "size_m": {
        "x": 0.28,
        "y": 0.12,
        "z": 0.27
    },
    "origin_y": 0,
    "subscribe": {
        "plan": "Polyfork Pro",
        "usd_per_month": 15,
        "usd_per_year": 149,
        "url": "https://polyfork.dev/pricing",
        "includes": "the .mjs program for every asset, structured GLBs with named pivots and rig, a per-account CDN you can hotlink from a shipped build, the whole catalog as one download, and the largest remix-baking budget",
        "note": "once active, this endpoint returns download URLs and a /c/<token>/ CDN path. Anything downloaded while subscribed stays licensed forever."
    },
    "export_formats": {
        "fbx": {
            "url": "https://polyfork.dev/dl/tarantula-9553f9.fbx",
            "for": "Unity, Unreal, Maya, 3ds Max",
            "available": false
        },
        "usdz": {
            "url": "https://polyfork.dev/dl/tarantula-9553f9.usdz",
            "for": "iOS AR Quick Look, Omniverse",
            "available": false
        },
        "obj": {
            "url": "https://polyfork.dev/dl/tarantula-9553f9.obj",
            "for": "universal, geometry only, no pivots",
            "available": false
        }
    },
    "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. available:false means this asset is not yours yet, so these URLs answer 403. Polyfork Pro ($149 a year for the whole catalogue) makes them fetchable; the preview GLB above needs nothing.",
    "params_url": "https://polyfork.dev/cdn/tarantula-9553f9-params.json",
    "materials": 1,
    "draw_calls": 3,
    "palette": [
        {
            "hex": "#3b2a22",
            "share": 0.556
        },
        {
            "hex": "#d97a2e",
            "share": 0.19
        },
        {
            "hex": "#1e1612",
            "share": 0.143
        },
        {
            "hex": "#4a352a",
            "share": 0.088
        },
        {
            "hex": "#14100e",
            "share": 0.022
        }
    ],
    "style": "low-poly, flat-shaded vertex colors, no textures, single shared material, so any set of these merges to one draw call",
    "origin": "ground level (minY = 0): the model sits on y=0 as-is",
    "rigged_parts": {
        "LeftLeg1Hip": {
            "axis": "y",
            "range": [
                0,
                -30
            ]
        },
        "LeftLeg1Knee": {
            "axis": "z",
            "range": [
                0,
                46
            ]
        },
        "LeftLeg2Hip": {
            "axis": "y",
            "range": [
                0,
                -30
            ]
        },
        "LeftLeg2Knee": {
            "axis": "z",
            "range": [
                0,
                46
            ]
        },
        "LeftLeg3Hip": {
            "axis": "y",
            "range": [
                0,
                30
            ]
        },
        "LeftLeg3Knee": {
            "axis": "z",
            "range": [
                0,
                46
            ]
        },
        "LeftLeg4Hip": {
            "axis": "y",
            "range": [
                0,
                30
            ]
        },
        "LeftLeg4Knee": {
            "axis": "z",
            "range": [
                0,
                46
            ]
        },
        "RightLeg1Hip": {
            "axis": "y",
            "range": [
                0,
                30
            ]
        },
        "RightLeg1Knee": {
            "axis": "z",
            "range": [
                0,
                -46
            ]
        },
        "RightLeg2Hip": {
            "axis": "y",
            "range": [
                0,
                30
            ]
        },
        "RightLeg2Knee": {
            "axis": "z",
            "range": [
                0,
                -46
            ]
        },
        "RightLeg3Hip": {
            "axis": "y",
            "range": [
                0,
                -30
            ]
        },
        "RightLeg3Knee": {
            "axis": "z",
            "range": [
                0,
                -46
            ]
        },
        "RightLeg4Hip": {
            "axis": "y",
            "range": [
                0,
                -30
            ]
        },
        "RightLeg4Knee": {
            "axis": "z",
            "range": [
                0,
                -46
            ]
        },
        "Abdomen": {
            "axis": "x",
            "range": [
                0,
                -18
            ]
        },
        "LeftPedipalp": {
            "axis": "x",
            "range": [
                0,
                -30
            ]
        },
        "RightPedipalp": {
            "axis": "x",
            "range": [
                0,
                -30
            ]
        }
    },
    "detachable_parts": [],
    "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)",
    "gait": {
        "kind": "1-link",
        "step": 0.097,
        "duty": 0.825,
        "clearance": 0.008,
        "crouch": 0,
        "fitted": true,
        "legs": [
            {
                "id": "LeftLeg1",
                "hip": "LeftLeg1Knee",
                "knee": null,
                "axis": "z",
                "mount": "LeftLeg1Hip",
                "thigh": 0.119,
                "shin": 0,
                "foot": [
                    0.036,
                    -0.113,
                    0.045
                ],
                "stance": [
                    0.095,
                    0,
                    0.137
                ],
                "phase": 0.5
            },
            {
                "id": "LeftLeg2",
                "hip": "LeftLeg2Knee",
                "knee": null,
                "axis": "z",
                "mount": "LeftLeg2Hip",
                "thigh": 0.13,
                "shin": 0,
                "foot": [
                    0.06,
                    -0.115,
                    0.021
                ],
                "stance": [
                    0.136,
                    0,
                    0.072
                ],
                "phase": 0.75
            },
            {
                "id": "LeftLeg3",
                "hip": "LeftLeg3Knee",
                "knee": null,
                "axis": "z",
                "mount": "LeftLeg3Hip",
                "thigh": 0.126,
                "shin": 0,
                "foot": [
                    0.058,
                    -0.111,
                    -0.018
                ],
                "stance": [
                    0.134,
                    0,
                    -0.01
                ],
                "phase": 0
            },
            {
                "id": "LeftLeg4",
                "hip": "LeftLeg4Knee",
                "knee": null,
                "axis": "z",
                "mount": "LeftLeg4Hip",
                "thigh": 0.115,
                "shin": 0,
                "foot": [
                    0.036,
                    -0.109,
                    -0.041
                ],
                "stance": [
                    0.098,
                    0,
                    -0.079
                ],
                "phase": 0.25
            },
            {
                "id": "RightLeg1",
                "hip": "RightLeg1Knee",
                "knee": null,
                "axis": "z",
                "mount": "RightLeg1Hip",
                "thigh": 0.119,
                "shin": 0,
                "foot": [
                    -0.036,
                    -0.113,
                    0.045
                ],
                "stance": [
                    -0.095,
                    0,
                    0.137
                ],
                "phase": 0
            },
            {
                "id": "RightLeg2",
                "hip": "RightLeg2Knee",
                "knee": null,
                "axis": "z",
                "mount": "RightLeg2Hip",
                "thigh": 0.13,
                "shin": 0,
                "foot": [
                    -0.06,
                    -0.115,
                    0.021
                ],
                "stance": [
                    -0.136,
                    0,
                    0.072
                ],
                "phase": 0.25
            },
            {
                "id": "RightLeg3",
                "hip": "RightLeg3Knee",
                "knee": null,
                "axis": "z",
                "mount": "RightLeg3Hip",
                "thigh": 0.126,
                "shin": 0,
                "foot": [
                    -0.058,
                    -0.111,
                    -0.018
                ],
                "stance": [
                    -0.134,
                    0,
                    -0.01
                ],
                "phase": 0.5
            },
            {
                "id": "RightLeg4",
                "hip": "RightLeg4Knee",
                "knee": null,
                "axis": "z",
                "mount": "RightLeg4Hip",
                "thigh": 0.115,
                "shin": 0,
                "foot": [
                    -0.036,
                    -0.109,
                    -0.041
                ],
                "stance": [
                    -0.098,
                    0,
                    -0.079
                ],
                "phase": 0.75
            }
        ],
        "axes": {
            "hip": "z",
            "knee": "z",
            "mount": "y"
        },
        "units": "metres, radians, phase 0..1",
        "runtime": "https://polyfork.dev/cdn/walk.mjs",
        "how": "phase from distance travelled, not from time: foot planted for `duty` of each `step` metres, feet ordered by `phase`. three.js users import https://polyfork.dev/cdn/walk.mjs and call gait.poseAt(distance)"
    },
    "published_at": "2026-09-10 22:52:20",
    "renders": [
        "https://polyfork.dev/files/tarantula-9553f9/renders/back.png",
        "https://polyfork.dev/files/tarantula-9553f9/renders/compare.png",
        "https://polyfork.dev/files/tarantula-9553f9/renders/detail.png",
        "https://polyfork.dev/files/tarantula-9553f9/renders/front.png",
        "https://polyfork.dev/files/tarantula-9553f9/renders/hero-crop.png",
        "https://polyfork.dev/files/tarantula-9553f9/renders/hero.png",
        "https://polyfork.dev/files/tarantula-9553f9/renders/left.png",
        "https://polyfork.dev/files/tarantula-9553f9/renders/low-back.png",
        "https://polyfork.dev/files/tarantula-9553f9/renders/low.png",
        "https://polyfork.dev/files/tarantula-9553f9/renders/pose-Abdomen.png",
        "https://polyfork.dev/files/tarantula-9553f9/renders/pose-LeftLeg1Hip.png",
        "https://polyfork.dev/files/tarantula-9553f9/renders/pose-LeftLeg1Knee.png",
        "https://polyfork.dev/files/tarantula-9553f9/renders/pose-LeftLeg2Hip.png",
        "https://polyfork.dev/files/tarantula-9553f9/renders/pose-LeftLeg2Knee.png",
        "https://polyfork.dev/files/tarantula-9553f9/renders/pose-LeftLeg3Hip.png",
        "https://polyfork.dev/files/tarantula-9553f9/renders/pose-LeftLeg3Knee.png",
        "https://polyfork.dev/files/tarantula-9553f9/renders/pose-LeftLeg4Hip.png",
        "https://polyfork.dev/files/tarantula-9553f9/renders/pose-LeftLeg4Knee.png",
        "https://polyfork.dev/files/tarantula-9553f9/renders/pose-LeftPedipalp.png",
        "https://polyfork.dev/files/tarantula-9553f9/renders/pose-RightLeg1Hip.png",
        "https://polyfork.dev/files/tarantula-9553f9/renders/pose-RightLeg1Knee.png",
        "https://polyfork.dev/files/tarantula-9553f9/renders/pose-RightLeg2Hip.png",
        "https://polyfork.dev/files/tarantula-9553f9/renders/pose-RightLeg2Knee.png",
        "https://polyfork.dev/files/tarantula-9553f9/renders/pose-RightLeg3Hip.png",
        "https://polyfork.dev/files/tarantula-9553f9/renders/pose-RightLeg3Knee.png",
        "https://polyfork.dev/files/tarantula-9553f9/renders/pose-RightLeg4Hip.png",
        "https://polyfork.dev/files/tarantula-9553f9/renders/pose-RightLeg4Knee.png",
        "https://polyfork.dev/files/tarantula-9553f9/renders/pose-RightPedipalp.png",
        "https://polyfork.dev/files/tarantula-9553f9/renders/proofs.png",
        "https://polyfork.dev/files/tarantula-9553f9/renders/right.png",
        "https://polyfork.dev/files/tarantula-9553f9/renders/run.png",
        "https://polyfork.dev/files/tarantula-9553f9/renders/top.png",
        "https://polyfork.dev/files/tarantula-9553f9/renders/tpose.png",
        "https://polyfork.dev/files/tarantula-9553f9/renders/variant-belly-0.png",
        "https://polyfork.dev/files/tarantula-9553f9/renders/variant-belly-1.png",
        "https://polyfork.dev/files/tarantula-9553f9/renders/variant-colorway-black.png",
        "https://polyfork.dev/files/tarantula-9553f9/renders/variant-colorway-chestnut.png",
        "https://polyfork.dev/files/tarantula-9553f9/renders/variant-colorway-cobalt.png",
        "https://polyfork.dev/files/tarantula-9553f9/renders/variant-legs-0.85.png",
        "https://polyfork.dev/files/tarantula-9553f9/renders/variant-legs-1.15.png",
        "https://polyfork.dev/files/tarantula-9553f9/renders/variant-span-0.18.png",
        "https://polyfork.dev/files/tarantula-9553f9/renders/variant-span-0.32.png",
        "https://polyfork.dev/files/tarantula-9553f9/renders/variant-stance-0.png",
        "https://polyfork.dev/files/tarantula-9553f9/renders/variant-stance-1.png",
        "https://polyfork.dev/files/tarantula-9553f9/renders/views.png"
    ],
    "license": "Use in commercial projects, no attribution. No redistribution of the files themselves. https://polyfork.dev/licensing",
    "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-10-01",
        "remix_allowance_note": "A free account raises this to 300 a WEEK, 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 FREE asset as .glb, .mjs and a ready-to-serve zip"
        },
        "pro_adds": {
            "url": "https://polyfork.dev/pricing",
            "usd_per_year": 149,
            "module_mjs": "the createAsset() program itself \u2014 knobs evaluated in YOUR engine at runtime, no bake, no round trip, no per-variant file",
            "structured_glb": "the authored GLB: named parts, detachables, real material names, real normals. Worth most where the public preview is one joined anonymous mesh \u2014 every static asset and 186 of the 499 rigged ones. The other 313 rigged assets keep their hierarchy in the preview and can demo themselves without this; get_asset's preview_rig says which you have",
            "cdn": "a per-account /c/<token>/ path 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 \u2014 a free account gets a weekly allowance, Pro does not"
        }
    }
}
