{
  "title": "Browser-game asset readiness and texture-memory worksheet",
  "createdAt": "2026-10-02T04:47:00.000Z",
  "method": "Original arithmetic and editorial checklist derived from linked public documentation. No model generation or runtime benchmark was performed.",
  "assumptions": {
    "format": "uncompressed RGBA8",
    "bytesPerTexel": 4,
    "mipmaps": "all square power-of-two levels down to 1x1",
    "unit": "MiB = 1048576 bytes",
    "formula": "bytes = 4 * sum((N / 2^i)^2 for i=0..log2(N))",
    "excluded": "GPU compression, alignment, duplicate copies, render targets, geometry, browser overhead and other resources"
  },
  "sources": [
    {
      "id": "three-game",
      "url": "https://threejs.org/manual/pages/game.html",
      "accessedAt": "2026-10-02T04:47:00.000Z"
    },
    {
      "id": "three-basics",
      "url": "https://threejs.org/manual/pages/fundamentals.html",
      "accessedAt": "2026-10-02T04:47:00.000Z"
    },
    {
      "id": "gltf-loader",
      "url": "https://threejs.org/docs/pages/GLTFLoader.html",
      "accessedAt": "2026-10-02T04:47:00.000Z"
    },
    {
      "id": "gltf-validator",
      "url": "https://github.com/KhronosGroup/glTF-Validator",
      "accessedAt": "2026-10-02T04:47:00.000Z"
    },
    {
      "id": "texture-memory",
      "url": "https://threejs.org/manual/pages/textures.html",
      "accessedAt": "2026-10-02T04:47:00.000Z"
    },
    {
      "id": "webgl-practices",
      "url": "https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/WebGL_best_practices",
      "accessedAt": "2026-10-02T04:47:00.000Z"
    },
    {
      "id": "renderer-info",
      "url": "https://threejs.org/docs/pages/WebGLRenderer.html",
      "accessedAt": "2026-10-02T04:47:00.000Z"
    }
  ],
  "rows": [
    {
      "width": 512,
      "height": 512,
      "oneTextureBytes": 1398100,
      "oneTextureMiB": 1.333332,
      "threeTexturesBytes": 4194300,
      "threeTexturesMiB": 3.999996
    },
    {
      "width": 1024,
      "height": 1024,
      "oneTextureBytes": 5592404,
      "oneTextureMiB": 5.333332,
      "threeTexturesBytes": 16777212,
      "threeTexturesMiB": 15.999996
    },
    {
      "width": 2048,
      "height": 2048,
      "oneTextureBytes": 22369620,
      "oneTextureMiB": 21.333332,
      "threeTexturesBytes": 67108860,
      "threeTexturesMiB": 63.999996
    },
    {
      "width": 4096,
      "height": 4096,
      "oneTextureBytes": 89478484,
      "oneTextureMiB": 85.333332,
      "threeTexturesBytes": 268435452,
      "threeTexturesMiB": 255.999996
    }
  ],
  "acceptanceWorksheet": [
    {
      "check": "Prove the mechanic with placeholders",
      "procedure": "Make one complete interaction work before adding final art: move, collect, win, and restart. Keep the test scene small.",
      "sourceIds": [],
      "result": null
    },
    {
      "check": "Inspect the export",
      "procedure": "Validate the file; check its visible shape, scale, orientation, and material appearance. Record failures instead of treating a successful download as acceptance.",
      "sourceIds": [
        "gltf-validator"
      ],
      "result": null
    },
    {
      "check": "Load the deployed file",
      "procedure": "Confirm the actual hosted asset loads and any required decoders are available. Test loading failures and retry behavior.",
      "sourceIds": [
        "gltf-loader"
      ],
      "result": null
    },
    {
      "check": "Check animation separately",
      "procedure": "Inspect whether the file contains the clips your design requires. Imported clips do not decide your game\u2019s movement or animation state transitions.",
      "sourceIds": [
        "gltf-loader"
      ],
      "result": null
    },
    {
      "check": "Use deliberate collision shapes",
      "procedure": "Decide which surfaces block movement and which objects trigger interactions. Visual geometry and collision behavior are different responsibilities.",
      "sourceIds": [
        "three-game"
      ],
      "result": null
    },
    {
      "check": "Check the camera view",
      "procedure": "Judge the asset at the distance and screen size the player will see, not just in a close-up preview. Simplify details that no longer contribute.",
      "sourceIds": [],
      "result": null
    },
    {
      "check": "Measure the whole scene",
      "procedure": "Record load time, frame time, draw calls, and behavior on your target devices. WebGLRenderer exposes renderer statistics; MDN recommends batching and budgeting graphics resources.",
      "sourceIds": [
        "renderer-info",
        "webgl-practices"
      ],
      "result": null
    },
    {
      "check": "Retest after art changes",
      "procedure": "Repeat the same route through the scene after changing textures, geometry, or materials. Keep the previous build for comparison and record what changed.",
      "sourceIds": [],
      "result": null
    }
  ]
}
