skog, mjuka skuggor, jämnare övergång vatten på av avstånd

This commit is contained in:
2026-11-02 23:25:51 +01:00
parent cb5070dc1c
commit f447fe8e51
196 changed files with 5583 additions and 143 deletions

View File

@@ -121,13 +121,18 @@ Jordens `ocean`-block aktiverar ett eget vattenpass på planetens havsnivå. Try
| `enabled` | Aktivera havet; utelämnat block ger inget vatten |
| `maskFromSurfaceTexture` | Använd färgkartans blå vattenområden som kustmask; vita isområden och land förblir torra. `false` fyller terräng under havsnivån utan färgmask |
| `seaLevelMeters`, `depthMeters` | Havsnivå relativt planetradien och bottennivå i maskerade hav |
| `waveAmplitudeMeters`, `waveLengthMeters` | Den största vågens amplitud och våglängd; ytterligare elva komponenter ger finare vågor |
| `windDirectionDegrees`, `waveSpeed`, `choppiness` | Vågriktning, animationshastighet och hur spetsiga vågkammarna är |
| `waveAmplitudeMeters`, `waveLengthMeters` | Amplitudbudget och våglängd för det längsta vågbandet. Åtta band med fyra korsande komponenter vardera ger mindre vågor och krusningar |
| `windDirectionDegrees`, `windSpreadDegrees`, `waveSpeed`, `choppiness` | Vindriktning, riktningsspridning (0–180°), animationshastighet och vågkammarnas spetsighet. Ett svagare korssvall bryter upp parallella vågor |
| `rippleStrength` | Styrka på tre skalor av planetförankrade normaldetaljer, 0–3. Standard 0,8 |
| `waveGeometryDistanceMeters` | Avstånd där geometriska vågor har tonats ut helt, 500–10000 m; standard 4000. Normaler och filtrerad reflektionssträvhet fortsätter längre bort |
| `roughness`, `reflectionStrength`, `refractionStrength` | Solglittrets bredd, reflektionernas styrka och brytningens skärmförskjutning |
| `deepColor`, `shallowColor`, `absorption` | Linjära RGB-färger för djup/grunt vatten och absorption per meter för rött, grönt och blått ljus |
| `foamStrength` | Skum på vågkammar och vid grunda stränder |
| `whitecapThreshold` | Minsta vågkompression för vita vågkammar, 0,05–1; standard 0,22. Högre värde ger färre vita kammar. Strandens skum beräknas separat |
Vågspektrumet består av Gerstner-komponenter som filtreras efter pixelstorleken. Ytan söks med strålar i ett lokalt koordinatsystem förankrat i dubbelprecision, så samma hav fungerar från rymden till våghöjd. Refraktionen använder scenens färg och djup från ett separat framebuffer. Havet simulerar ingen fluiddynamik, fartygskölvatten eller bestående skumtransport.
Vågspektrumet består av 32 seedade komponenter med oberoende faser, varierade våglängder och korsande riktningar. Fasmodulering bryter upp långa vågkammar. De 16 längsta komponenterna förskjuter ytan; alla bidrar till normalerna. Vågor filtreras med ett mjukt, riktningsberoende pixelfilter. Detaljer som blir mindre än en pixel övergår till statistisk ytsträvhet, så vatten på håll behåller ett krusigt reflektionsmaterial i stället för att bli en blank spegel. Samma strävhet filtrerar både molnreserv och SSR. Diffust himmelsljus bidrar till vattnets blå färg även i molnskugga.
Ytan söks med strålar i ett lokalt koordinatsystem förankrat i dubbelprecision, så samma hav fungerar från rymden till våghöjd. Refraktionen använder scenens färg och djup från ett separat framebuffer. Havet simulerar ingen fluiddynamik, fartygskölvatten eller bestående skumtransport. Jordens profil använder ett lugnare hav med 0,6 m amplitudbudget, 36 m längsta vågband och sparsamt skum; parametrarna ändras i `solar-systems.json`.
### Skärmrymdsreflektioner på vatten
@@ -151,7 +156,7 @@ Upplösning, raymarch, kantutfasning och uppskalning mäts tillsammans som **WAT
SSR kan bara träffa geometri som finns i kamerans färg- och djupbild. Dolda objekt och objekt utanför bilden får därför en analytisk himmel/molnreserv, och övergången tonas ut. Det är inte RTX-strålspårning eller en fullständig reflektionskarta av omgivningen. Metoden bygger på perspektivkorrekt skärmsökning enligt [McGuire och Mara, Efficient GPU Screen-Space Ray Tracing](https://jcgt.org/published/0003/04/04/).
`--ocean-report` kör ett kontrollerat väggtest (även att mark inte ändras), sparar dag-/nattbilder med reflektionen av/på samt undervattens- och omloppsvyer. Jämförelser och GPU-tid skrivs till konsolen; bilder hamnar i appens `graphics-report/`.
`--ocean-report` kör ett kontrollerat väggtest (även att mark inte ändras), sparar dag-/nattbilder med reflektionen av/på, vyer från 10/100/1000/10000 meter samt undervattens- och omloppsvyer. Ett GPU-test läser ytsträvheten ur materialbufferten nära och långt bort och kontrollerar små kamerasteg genom detaljgränserna. Värdena sparas i `graphics-report/ocean-detail.json`. Jämförelser och reflektionspassets tid skrivs till konsolen; bilder hamnar i appens `graphics-report/`.
Tekniken är inspirerad av principerna i [Crests beskrivning](https://github.com/JJarvis89/crest-oceanrender#the-tech), med en egen implementation för OpenGL 3.3. Unity-paketet ingår inte som ett beroende.
@@ -340,7 +345,11 @@ Styrkan beräknas som `intensity × sqrt(luminositySolar) / (1 + (distanceAu / r
Strålar och reflexer beräknas separat för varje sol och läggs till i HDR före bloom och tonmappning. Djupbufferten samplas över solskivan: objekt framför solen dämpar eller släcker glöden. Reflexerna flyttas med solens läge på skärmen och är tydligast när solen ligger vid sidan av bildcentrum.
## Automatiska grafikrapporter
## Vegetation
Jordens `vegetation`-block aktiverar färgstyrd vegetation. Samtliga planetinställningar och växtdefinitioner beskrivs i `Content/Vegitations/README.md`. Standardkartan är `surfaceTexture`; valfri `vegetation.biomeTexture` anges relativt `KnownSolarSystem/` och använder samma UV-riktning. `enabled: false` stänger av växterna och deras biommarkmaterial. Atmosfäriska `terrestrial`-planeter kan få standardprofilen; andra fasta planeter aktiveras explicit. Gasplaneter kan inte ha vegetation.
## Grafikrapporter
Rapporterna använder appens riktiga OpenGL-shaders i ett dolt fönster och avslutas automatiskt utan att fånga musen: