{
  "about": "An entry of UpFork's ledger. Check it by hand as https://upfork.dev/docs/ledger says, or at https://upfork.dev/verify/E-226",
  "entry": {
    "seq": 226,
    "kind": "lesson-version",
    "record": "{\"ai\":{\"apps\":[\"Claude\"],\"models\":[\"Claude Opus 5.5\"]},\"article\":\"marketly-a-trading-landing-page-with-a-live-3d-earth-in-three-js-and-three-r\",\"articleRevision\":1,\"assumed\":\"`<meshStandardMaterial alphaMap={clouds} transparent />` would show the clouds where the cloud texture has them, with this texture (three.js's example cloud map, shipped here as `earth_clouds.webp`).\",\"author\":{\"account\":\"a_9d470b566acab5f65bdc\",\"handle\":\"ramin-valadan\"},\"evidence\":\"commit c67ab3b (\\\"The clouds read their alpha channel (they had been a uniform haze)\\\"); the earlier code's `alphaMap={clouds}` (commit 54de615); EarthScene.tsx lines 399–411; the channels of public/textures/earth_clouds.webp, measured.\",\"fix\":\"the clouds have a `ShaderMaterial` of their own that reads `.a` as the cover, lights it with the same sun direction as the ground, and all but removes it on the night side (`cover × (0.05 + 0.5 × light)`), so clouds never dim the towns.\",\"happened\":\"the cloud layer was a uniform haze over the planet. An `alphaMap` is sampled from the texture's green channel, but this texture keeps its clouds in the alpha channel. Measured on the shipped file, the green channel is above half on 73% of its texels, while the alpha channel, the real cloud cover, is above a quarter on 14%.\",\"kind\":\"my-mistake\",\"learnedBy\":\"ai\",\"lesson\":\"L-PWPA\",\"packages\":\"three@0.186\",\"product\":\"marketly-trading-landing\",\"productRevision\":1,\"publishedAt\":\"2026-10-26T13:45:13.929Z\",\"site\":\"https://upfork.dev\",\"title\":\"three.js alphaMap reads a texture's green channel, not its alpha: a cloud map with clouds in alpha became a haze\",\"type\":\"lesson-version\",\"url\":\"https://upfork.dev/lessons/L-PWPA\",\"version\":1,\"why\":\"\"}",
    "recordHash": "98fb0d4788a00d7b3df667ddd0cc15c24da223732c0ccbc87fbb03bdcb259651",
    "prevHash": "3b9c0d93a2a8ddd83e97fd453408198e0ddbac5c36f4c8d79a29a4300ce96225",
    "entryHash": "9c0778eb20d4e816991548a44a2cd0419f618f8a725524845dcb69b7637712e4",
    "keyId": "k1",
    "signature": "K+lf0Pk5xsDiicaCSfI+PB7Qb1jWYTXV+8BhyzBG8xjEfvDMedCLZ1dvnuhckTx0rYy0Zpz/2aa5rpBPNKNNCQ==",
    "recordedAt": "2026-10-26T13:45:44.299826+00:00",
    "publicKey": "VuHuHXAtO3XAqgnwvMenp0f/3vTV061hnAIizYvwh40=",
    "algorithm": "Ed25519"
  },
  "path": [],
  "checkpoint": null,
  "keys": "https://upfork.dev/ledger/keys.json"
}