{
  "checkedAt": "2026-10-19",
  "purpose": "Locally bundled 3D material assets; not product photographs",
  "assets": [
    {
      "id": "oak_veneer_01",
      "source": "https://polyhaven.com/a/oak_veneer_01",
      "license": "CC0-1.0",
      "licenseURL": "https://polyhaven.com/license",
      "files": [
        {
          "role": "Diffuse",
          "path": "装修方案研究/PBR/oak_veneer_01_diff_1k.jpg",
          "url": "https://dl.polyhaven.org/file/ph-assets/Textures/jpg/1k/oak_veneer_01/oak_veneer_01_diff_1k.jpg",
          "md5": "39a99df4e328d62d74f3122722a64a95",
          "bytes": 641756,
          "sha256": "c14681f72f59f17bff568cae7a837641443b607b899f0c279cd64a5638f877a7"
        },
        {
          "role": "nor_gl",
          "path": "装修方案研究/PBR/oak_veneer_01_nor_gl_1k.jpg",
          "url": "https://dl.polyhaven.org/file/ph-assets/Textures/jpg/1k/oak_veneer_01/oak_veneer_01_nor_gl_1k.jpg",
          "md5": "d05406f5fdaf51f0d7b115b35d9af1b7",
          "bytes": 484844,
          "sha256": "1297acf7b4476d5ccd83cc8b27be96aa6110f7a9c3a40be0bd767bf81b17db01"
        },
        {
          "role": "Rough",
          "path": "装修方案研究/PBR/oak_veneer_01_rough_1k.jpg",
          "url": "https://dl.polyhaven.org/file/ph-assets/Textures/jpg/1k/oak_veneer_01/oak_veneer_01_rough_1k.jpg",
          "md5": "a19b44176a078b9ae93314133848c9aa",
          "bytes": 865194,
          "sha256": "ca2af5649b628ef05f196793d68cdca874c12ceb6e9ae566976546d9dd5a2604"
        }
      ]
    },
    {
      "id": "white_plaster_02",
      "source": "https://polyhaven.com/a/white_plaster_02",
      "license": "CC0-1.0",
      "licenseURL": "https://polyhaven.com/license",
      "files": [
        {
          "role": "Diffuse",
          "path": "装修方案研究/PBR/white_plaster_02_diff_1k.jpg",
          "url": "https://dl.polyhaven.org/file/ph-assets/Textures/jpg/1k/white_plaster_02/white_plaster_02_diff_1k.jpg",
          "md5": "7b10c2686bcfd76d1f309a20fd06b57e",
          "bytes": 527219,
          "sha256": "a1ebbe091bd1ae93d2abd5de8d69f9003a8d0ee6532bcf9a87c2492c97051f23"
        },
        {
          "role": "nor_gl",
          "path": "装修方案研究/PBR/white_plaster_02_nor_gl_1k.jpg",
          "url": "https://dl.polyhaven.org/file/ph-assets/Textures/jpg/1k/white_plaster_02/white_plaster_02_nor_gl_1k.jpg",
          "md5": "55fc03203ebf1dc703a380fde93ff502",
          "bytes": 652310,
          "sha256": "eb572ca3630d5bfde72e2601b1f02412da23ca005cd19384dced8690be4cb783"
        },
        {
          "role": "Rough",
          "path": "装修方案研究/PBR/white_plaster_02_rough_1k.jpg",
          "url": "https://dl.polyhaven.org/file/ph-assets/Textures/jpg/1k/white_plaster_02/white_plaster_02_rough_1k.jpg",
          "md5": "8b28f263360b8c4ddbdc4f7c650c4eeb",
          "bytes": 295900,
          "sha256": "4ff1fe957cd161b07f721fe6c28a9459c8c2e8ec65627a26c16e483a07c80d85"
        }
      ]
    },
    {
      "id": "leather_white",
      "source": "https://polyhaven.com/a/leather_white",
      "license": "CC0-1.0",
      "licenseURL": "https://polyhaven.com/license",
      "files": [
        {
          "role": "Diffuse",
          "path": "装修方案研究/PBR/leather_white_diff_1k.jpg",
          "url": "https://dl.polyhaven.org/file/ph-assets/Textures/jpg/1k/leather_white/leather_white_diff_1k.jpg",
          "md5": "a580e1c45d806a56d89331f9a549ecb2",
          "bytes": 728363,
          "sha256": "4d916dfe89c9d2b88bf52e0c70c6a9798a5c29c8c2fcb6ba1ab7b7ded9ef3ed5"
        },
        {
          "role": "nor_gl",
          "path": "装修方案研究/PBR/leather_white_nor_gl_1k.jpg",
          "url": "https://dl.polyhaven.org/file/ph-assets/Textures/jpg/1k/leather_white/leather_white_nor_gl_1k.jpg",
          "md5": "4226eb91e17693722f3368cd41a3b1c9",
          "bytes": 670610,
          "sha256": "51bdac4b76da70dc54c288cffea4ecaf837ebb6ed9264664bf5c9a1fc79aa074"
        },
        {
          "role": "Rough",
          "path": "装修方案研究/PBR/leather_white_rough_1k.jpg",
          "url": "https://dl.polyhaven.org/file/ph-assets/Textures/jpg/1k/leather_white/leather_white_rough_1k.jpg",
          "md5": "db1052bac557bb6b03fdde325a853af4",
          "bytes": 675426,
          "sha256": "dbae1aeb5f9a2a46f7fe758f38811beb6a109021848462032d9a3cd63f187a66"
        }
      ]
    },
    {
      "id": "marble_01",
      "source": "https://polyhaven.com/a/marble_01",
      "license": "CC0-1.0",
      "licenseURL": "https://polyhaven.com/license",
      "files": [
        {
          "role": "Diffuse",
          "path": "装修方案研究/PBR/marble_01_diff_1k.jpg",
          "url": "https://dl.polyhaven.org/file/ph-assets/Textures/jpg/1k/marble_01/marble_01_diff_1k.jpg",
          "md5": "04325ced5018eb8a2e598a4ef69cb176",
          "bytes": 305029,
          "sha256": "b10dabea976d68baa976a0d4e8dac58789df8d26a1b50697f320106f1b00a229"
        },
        {
          "role": "nor_gl",
          "path": "装修方案研究/PBR/marble_01_nor_gl_1k.jpg",
          "url": "https://dl.polyhaven.org/file/ph-assets/Textures/jpg/1k/marble_01/marble_01_nor_gl_1k.jpg",
          "md5": "fa073d722cde733c1bd6cc6e8897c8e3",
          "bytes": 110230,
          "sha256": "77c2a9b549a6a408659f8197be91945aeb0abc33e697f1dd2ce24ee8dc7c2bc0"
        },
        {
          "role": "Rough",
          "path": "装修方案研究/PBR/marble_01_rough_1k.jpg",
          "url": "https://dl.polyhaven.org/file/ph-assets/Textures/jpg/1k/marble_01/marble_01_rough_1k.jpg",
          "md5": "59cef1be1b7376c9d0dcc7a64adf7882",
          "bytes": 91848,
          "sha256": "a3e9f373d22aebc449af73f6a18c9817e2146f17e567a083609ba8fbb62a72f5"
        }
      ]
    }
  ],
  "licenseStatement": "All selected Poly Haven assets are CC0-1.0. The official license permits commercial use and redistribution. Website example renders/logos were not downloaded or incorporated.",
  "assetUse": "These are finish texture references, not exact purchased product specifications or manufacturer CAD models.",
  "runtimeDerivation": {
    "marble_01": "Original downloaded JPEG files preserved and SHA-256 verified. Browser Canvas crops all three channels from (85,245,320,170) in the 1024x1024 original. Diffuse is blended with warm white; a 3-pixel grout edge and paired normal/roughness edges form a 600 mm square porcelain tile. Used as fine stone-pattern material reference, not as natural marble procurement specification. Warm-white overlay is 54%, floor tint remains the selected pale greige instead of being whitened, and roughness is 0.82 for a matte porcelain appearance.",
    "oak_veneer_01": "Original diffuse/OpenGL normal/roughness maps, 1.8 m scan repeat; material palette tint and low normal intensity.",
    "white_plaster_02": "Diffuse scan deliberately unused: new painted walls, ceilings, beams and warm-white furniture use a constant clean cream paint color. Only OpenGL normal and roughness are used, at true 1 m repeat and restrained normal strength 0.035–0.045. Countertop uses constant warm-white solid-surface color.",
    "leather_white": "Original diffuse/OpenGL normal/roughness maps, 0.3 m scan repeat; only visual reference for wipeable upholstery, not an assertion of actual leather procurement."
  },
  "implementation": {
    "bundle": "三维源文件/pbr-assets.js contains original JPEG bytes as data URLs. Viewer does not request external assets.",
    "lifecycle": "A module-scoped Image cache keeps each of the 12 decoded source images once. Each rebuild creates its own disposable Texture objects; disposal cancels pending listeners.",
    "geometryUV": "applyPhysicalUVs uses metre-based planar projections. Original vertices, placement and collision envelopes remain unchanged."
  }
}
