尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Procedurally generated landscapes under other suns - every colour computed from a spectrum. Star and exoplanet presets, per-spectral-type leaf colours, pigment absorption charts, PNG/JPG/PDF export.
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗Procedurally generated landscapes under other suns, where every colour on screen is computed from a spectrum rather than chosen by hand.
Pick a star, an exoplanet and an atmosphere, and the page works out what the sky, the ground, the water and — if anything can live there — the vegetation would actually look like. Then it shows you the spectra behind that answer and lets you export the whole thing as a data sheet.
No build step, no dependencies, no network calls. It is a handful of ES modules and a canvas.
Nothing here is art-directed. Each colour is the result of an integral.
The star is treated as a blackbody at its effective temperature. Planck's law gives the emitted spectrum, an atmospheric transmission profile attenuates it, and the result is integrated against the CIE 1931 2° standard observer to get tristimulus XYZ, then converted to sRGB through the D65 primaries and the sRGB transfer function. This path is ported from starlight-filter, which uses the same integral to drive a display's gamma ramp.
Because Beer's law is exponential in path length, a lower star simply means the zenith transmission raised to the air mass. That one relationship is why the same model produces a blue noon and a red sunset without being told about either.
A Rayleigh atmosphere scatters short wavelengths out of the beam, so the sky glows with exactly what the beam lost. Dust and haze absorb rather than scatter, so those skies take the transmitted tint instead of its complement — which is why Mars is butterscotch rather than blue.
Ground colour is the total downwelling light (direct beam plus skylight) times a mineral reflectance curve, integrated the same way. Out-of-gamut results are tone-mapped on luminance with the chromaticity preserved, so a deep Rayleigh sky comes out pale blue instead of clipping to flat white.
Photosynthesis is a quantum process, so the model counts photons, not energy. A reaction-centre pigment is chosen by weighing three things against each other:
1/λ_trap, because
energy above the trap is dumped as heat. This is what stops far-red pigments
winning under every star.Antenna pigments are then layered on, constrained by what can physically attach to what: a chlorophyll photosystem accepts chlorophyll b, carotenoids and phycobiliproteins, while a rhodopsin accepts only a carotenoid and bacteriorhodopsin runs bare. Phycobiliproteins carry a heavy cost penalty because a phycobilisome can run to half a cell's protein — which is why land plants never took that option, and without it the model paints Earth's forests red.
The leaf's reflectance is what survives that absorption, scaled by a structural reflectance term that reproduces the red edge. Its colour is the illuminant times that reflectance. Calibration check: Earth under the Sun comes out green, reflectance peaking near 550 nm with a red edge at ~705 nm, which is what real vegetation does.
This is a worldbuilding and teaching tool, not a radiative-transfer code.
The reasoning behind the leaf-colour model follows Kiang et al. (2007), Spectral signatures of photosynthesis.
There is nothing to install, but the page uses ES modules, so it needs to be served over HTTP rather than opened from the filesystem:
python -m http.server 8123
Then open http://localhost:8123.
| File | What lives there |
|---|---|
src/cie.js | CIE 1931 CMF table, Planck's law, XYZ → sRGB, tone mapping |
src/stars.js | Stellar presets, habitable zone, angular diameter, insolation |
src/planets.js | Atmospheric transmission, exoplanet presets, biome classifier |
src/pigments.js | Pigment spectra, suite selection, leaf reflectance solver |
src/scene.js | Ties it together — every derived quantity and colour |
src/landscape.js | The procedural renderer; shape only, no physics |
src/charts.js | Spectrum, absorption and reflectance charts |
src/exporter.js | Data sheet composition, PNG/JPG, and a hand-rolled PDF writer |
src/noise.js | Seeded PRNG and fBm |
src/main.js | UI wiring |
fonts/ | Atkinson Hyperlegible Next, self-hosted (SIL OFL 1.1, see fonts/OFL.txt) |
Seeds are deterministic: the same seed always redraws the same terrain at any resolution, so an exported sheet can be reproduced exactly.
MIT.