Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
98c48ce
Etna 0.8.1: solid water reflections, thin shoreline foam
claude Oct 10, 2026
a3e3e4a
Merge main (benchmark steps for the 0.8.0 effects) into 0.8.1
claude Oct 10, 2026
61d40dc
Etna 0.8.1: shadows that soften with distance, fainter low-sun shadows
claude Oct 10, 2026
f7d3861
Etna 0.8.1: keep the casters the wider shadow blur reads
claude Oct 10, 2026
094dcca
Merge remote-tracking branch 'origin/main' into claude/etna-081
claude Oct 11, 2026
cf8126f
Etna 0.8.1: steadier, cheaper soft shadows; own shadow warp and Fresnel
claude Oct 11, 2026
3109fe8
Render scale, with Etna's own anti-aliasing and upscaler
claude Oct 11, 2026
638e989
Merge remote-tracking branch 'etna/claude/etna-081' into claude/proje…
claude Oct 11, 2026
26034ac
Etna 0.9.0: no code from other shader packs
claude Oct 11, 2026
34805a1
Etna 0.8.1: shadows on water from the water under the surface
claude Oct 11, 2026
47303a7
Etna 0.8.1: steadier water reflections
claude Oct 11, 2026
ad1da08
Merge remote-tracking branch 'etna/claude/etna-081' into claude/proje…
claude Oct 11, 2026
34c3ba0
Move the terrain's shared light functions into etna_light.glsl
claude Oct 11, 2026
3118e9b
Entity and item shaders lit like the terrain
claude Oct 11, 2026
db755a1
Light mobs, block entities, items and the hand like the terrain
claude Oct 11, 2026
5fe6268
Changelog and credits for the entity lighting
claude Oct 11, 2026
c90ccf3
EtnaShadows: a benchmark hook that holds a fade at its middle
claude Oct 11, 2026
0411e5c
Merge remote-tracking branch 'etna/claude/etna-081' into claude/proje…
claude Oct 11, 2026
a92e549
Benchmark: a step that holds a shadow map fade at its middle
claude Oct 11, 2026
d341ea3
Merge branch 'etna-wave2' into claude/project-thread-5pxz6a
claude Oct 11, 2026
4d5ca75
Docs: the benchmark now has 23 steps and takes about 150 seconds
claude Oct 11, 2026
10f1337
Etna 0.8.1: review fixes for the water shadow and reflection history
claude Oct 11, 2026
1b813d9
Merge branch 'claude/etna-081' of https://github.com/atomsk-debug/etn…
claude Oct 11, 2026
c5e5c15
Entity lighting: compile the copies ahead, no allocation per draw, to…
claude Oct 11, 2026
b14c106
Auto Resolution: hold a frame rate by steering the world's resolution
claude Oct 11, 2026
859faa6
Auto Resolution: reach the floor exactly, steer without the HUD, pred…
claude Oct 11, 2026
86371a9
Etna 0.8.1: the shadow map's middle follows the camera in 2-block steps
claude Oct 11, 2026
bcaa65b
Etna 0.8.1: a point off the shadow map counts as past its edge
claude Oct 11, 2026
c1131fa
Merge branch 'claude/etna-081' of https://github.com/atomsk-debug/etn…
claude Oct 11, 2026
d56e7fc
Etna 0.8.1: leaves and plants sway in the shadow map only near the ca…
claude Oct 11, 2026
e5d316f
Merge branch 'claude/etna-081' of https://github.com/atomsk-debug/etn…
claude Oct 11, 2026
de2c0ab
Sky: finer Milky Way grain
claude Oct 11, 2026
98af66f
Etna 0.8.1: water shade lines up with the bottom; far water less white
claude Oct 11, 2026
4d9912d
Merge branch 'claude/etna-081' of https://github.com/atomsk-debug/etn…
claude Oct 11, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,31 @@

Every release is for Minecraft 26.4-snapshot-3 with Fabric. Versions: the middle number goes up for new features, the last one for fixes. Jars are on the [Releases](https://github.com/Atomsk-debug/Etna/releases) page.

## 0.9.0 (unreleased)

Faster with World Resolution, and Etna's own anti-aliasing.

* **Mobs, chests, armour, items and your hand in Etna's light.** They kept Minecraft's flat two-light shading while the land around them had Etna's golden sun, blue shade, shadows and warm torches, so they looked pasted in. Now they are lit the way the land is: the sun and the sky's colour on each face, the shadow map and the clouds' shadows, the warm torch light, the cave light and the distance haze, so a mob under a tree stands in its shade and a white block entity is as bright as the white ground it stands on. Your hand takes the shade of whatever stands over you. Enchantment glints, the hurt flash and the fog stay as they were, and the inventory and other menus keep Minecraft's own light. Entity Lighting (new, Lighting & Shadows page) turns it off; the benchmark has a step for it. With Improved Transparency on, translucent mobs and items keep Minecraft's light for now.
* **World Resolution (new, General page, 50 to 100%).** Draws the world at fewer pixels and builds the full-size picture back up in Etna's anti-aliasing, which moves the camera by a different fraction of a pixel every frame and puts the frames together at full size. Most of Etna's cost is per pixel, so at 75% the world shades a little over half the pixels. Textures keep their full-size detail, and the hand, the menus and the HUD stay sharp at full size. Needs anti-aliasing, which every Quality but Low has. The benchmark has a step for it.
* **Auto Resolution (new, General page, off by default).** Pick a frame rate (60, 90, 120, 144 or 165 fps) and Etna lowers the world's resolution by itself where a scene is too heavy to hold it (a dense forest, a wide view, a storm), then raises it back once there's room. It steers by how long the graphics card takes per frame, so VSync doesn't fool it, and it never goes below World Resolution (70% when that is at 100%). It drops quickly and climbs back slowly, so it doesn't swing up and down. The performance log shows the resolution it picked.
* **New anti-aliasing, Etna's own.** Steadier and sharper than 0.8's: in Etna's test bench about a third less flicker and error, edges closer to a supersampled picture, and less trailing behind moving things. Glints and sparkles brighter than white no longer flash through it.
* **No code from other shader packs any more.** The anti-aliasing and the light shafts' pixel order were the last parts from Photon Shaders; with 0.8.1's own shadow warp and water Fresnel, Etna is now entirely its own code (and Minecraft's shaders it builds on), so it can go on Modrinth and CurseForge. `LICENSE-PHOTON.txt` is gone.

## 0.8.1 (unreleased)

Fixes for 0.8.0's water, and shadows that soften with distance.

* **Shadows soften with distance, as real ones do.** A shadow is sharp where it meets what casts it and blurs the further it reaches: a tree's shadow is crisp at the trunk and a soft smudge at its far end, and long evening shadows lose their detail and fade towards the tip. Before, every shadow edge had the same blur. Shadow Softness now also sets how quickly they soften; at its lowest, edges stay hard everywhere.
* **Steadier, cheaper soft shadows.** The test build turned its shadow reads every frame and gave up where its few reads found nothing, so the softened edges shimmered and cost up to 2.5 ms a frame. Now the search for what casts a shadow reads the same spots every frame, open ground and the inside of shadows skip the wide blur, and only very wide evening blurs still turn, gently. In Etna's shadow test bench the flicker after anti-aliasing is 35 to 65 % lower than the test build's and, with the sun low, lower than 0.8.0's too.
* **Sharper far shadows.** The shadow map is spread over the land in a new way: about as sharp round you as before, two to five times sharper towards the corners of the shadowed area, and the whole map is used (before, about 6 % of it was never filled).
* **Long low-sun shadows are fainter.** Below about 20 degrees the sky fills shadows in a little, up to a third lighter at the horizon.
* Far shadows fade out instead of stopping at a straight line about 180 blocks away when looking towards or away from a low sun, and ground more than 320 blocks below the camera along the light (far away under a low sun, or seen from very high up) no longer turns dark.

* **Reflections keep their shapes.** The shore, trees and hills mirrored in the water came out as scattered dark dots. Each reflected ray now takes the same fixed steps every frame and counts as a hit only where it really runs into something, rays that find nothing are averaged in instead of dropped, and the mirror image follows a calmer copy of the waves, so it wobbles as a whole instead of breaking up.
* **Steadier reflections.** Reflections in the water no longer flicker where a reflected edge (a tree, a roof, the shore) only just meets the water's ray: each spot of the water now blends its reflection over the last few frames, and the rays are traced from where the picture really is, not from where the anti-aliasing has moved it this frame.
* **Shadows on water make sense.** The water's own colour now takes the shade of the water under the surface, where its light comes from: on clear shallow water a tree's shadow is the one on the bottom, seen through the water, and on deep or murky water a soft shadow in the water itself. Before, the surface carried a second, sharp copy of each shadow next to the one on the bottom, and the two crossed each other out in strange shapes. Water in a wide shade (under a cliff, a big tree or a roof) also keeps the clarity of the water around it instead of turning murky in the shadow's shape.
* **Foam, redone.** Only a thin, faint, bubbly line where still water meets the shore, in a pale colour that no longer glows. Shallow water stays clear (0.8.0 foamed every floor just under the surface into a milky haze), and water flowing down a slope has no foam.

## 0.8.0 (2026-10-10), "Enchanted"

Magic, and closing the gap with the most popular shader packs. Every new effect has its own setting, none of them is part of the Look, and with Etna off none of them is left.
Expand Down
43 changes: 29 additions & 14 deletions CREDITS.md
Original file line number Diff line number Diff line change
@@ -1,29 +1,31 @@
# Credits

Etna is original code under the MIT licence (`LICENSE`), with these exceptions: the temporal anti-aliasing
pass, the shadow map distortion and the water's Fresnel function are ported from another shader pack, under
that pack's own licence; the sky's star hash is David Hoskins's, under the MIT licence; and the terrain and
cloud shaders are based on Minecraft's own, which Etna's licence doesn't cover.
Etna is original code under the MIT licence (`LICENSE`), with these exceptions: the sky's star hash is David
Hoskins's, under the MIT licence; and the terrain, cloud, weather, entity and item shaders are based on Minecraft's
own, which Etna's licence doesn't cover. No code from other shader packs is used.

## Code ported from other projects

| Etna file | Source | Licence |
|---|---|---|
| `src/main/resources/assets/etna/shaders/post/taa.fsh` | [Photon Shaders](https://github.com/sixthsurge/photon) by SixthSurge: `program/c4_taa_exposure.fsh` (TAA, neighbourhood and variance clipping, offcenter rejection) and `include/utility/bicubic.glsl` (fast Catmull-Rom history filter), adapted to Minecraft's reversed depth buffer and Etna's camera matrices | Photon Shaders License, see `LICENSE-PHOTON.txt` |
| `src/main/resources/assets/etna/shaders/include/shadow_distortion.glsl`: `etnaShadowFactor`, used in `src/main/resources/assets/etna/shaders/core/terrain.vsh` (shadow pass), `src/main/resources/assets/etna/shaders/include/terrain_shadow.glsl` (shadow map lookups) and `src/main/resources/assets/etna/shaders/post/shafts.fsh` (the light shafts' lookups) | [Photon Shaders](https://github.com/sixthsurge/photon) by SixthSurge: `include/lighting/shadows/distortion.glsl` (quartic-length shadow map distortion) | Photon Shaders License, see `LICENSE-PHOTON.txt` |
| `src/main/resources/assets/etna/shaders/core/sky.fsh`: `hash33` (where the stars sit, how bright they are, their colour) | "Hash without Sine" by David Hoskins ([shadertoy.com/view/4djSRW](https://www.shadertoy.com/view/4djSRW)), `hash33`, unchanged | MIT, Copyright (c) 2014 David Hoskins, licence text as in `LICENSE` |
| `src/main/resources/assets/etna/shaders/core/sky.vsh`: `hash41` (when and where a shooting star flares, which way it falls) | "Hash without Sine" by David Hoskins ([shadertoy.com/view/4djSRW](https://www.shadertoy.com/view/4djSRW)), `hash41`, unchanged | MIT, Copyright (c) 2014 David Hoskins, licence text as in `LICENSE` |
| `src/main/resources/assets/etna/shaders/include/terrain_water.glsl`: `fresnelDielectric` | [Photon Shaders](https://github.com/sixthsurge/photon) by SixthSurge: `include/lighting/bsdf.glsl`, `fresnel_dielectric_n` (Fresnel reflectance with total internal reflection, for Snell's window seen from under water), with floored divisors and a clamp added | Photon Shaders License, see `LICENSE-PHOTON.txt` |
| `src/main/resources/assets/etna/shaders/post/shafts.fsh`: `SUBPIXEL` (the order in which the light shafts' half-resolution pixels take turns) | [Photon Shaders](https://github.com/sixthsurge/photon) by SixthSurge: `checkerboard.glsl`, the same 2×2 order | Photon Shaders License, see `LICENSE-PHOTON.txt` |
| `src/main/resources/assets/etna/shaders/core/terrain.vsh`, `terrain.fsh`, `clouds.vsh`, `clouds.fsh`, `weather.vsh`, `weather.fsh` | Minecraft's vanilla `terrain`, `clouds` and `particle` core shaders, which Etna replaces while it is on and extends (`weather` is made from `particle`, which vanilla draws rain and snow with) | Based on Minecraft's vanilla shader, (c) Mojang AB, not covered by Etna's MIT licence |

The Photon Shaders License allows redistributing modified portions, except on platforms that pay creators
(Modrinth, CurseForge) without SixthSurge's written permission, and never for money. Builds of Etna that
contain these parts fall under those terms; publishing Etna on Modrinth or CurseForge needs that permission
first, or original replacements for them.
| `src/main/resources/assets/etna/shaders/core/terrain.vsh`, `terrain.fsh`, `clouds.vsh`, `clouds.fsh`, `weather.vsh`, `weather.fsh`, `entity.vsh`, `entity.fsh`, `item.vsh`, `item.fsh` | Minecraft's vanilla `terrain`, `clouds`, `particle`, `entity` and `item` core shaders, which Etna replaces while it is on and extends (`weather` is made from `particle`, which vanilla draws rain and snow with; `entity` and `item` keep everything of vanilla's but the light) | Based on Minecraft's vanilla shader, (c) Mojang AB, not covered by Etna's MIT licence |

## Techniques Etna's own code follows

* Temporal anti-aliasing and upsampling (`taa.fsh`, since 0.9.0 Etna's own; before, a port from Photon Shaders):
each frame rebuilt from the 3x3 level pixels around the screen pixel, weighted by their jittered distance to its
centre (Yang, Nehab, Sander, Sitthi-amorn, Lawrence and Hoppe, "Amortized Supersampling", 2009; Unreal Engine's
TAAU), the history's weight kept in alpha; nearest-depth reprojection and YCoCg (Brian Karis, "High Quality
Temporal Supersampling", SIGGRAPH 2014), a 1 / (1 + luma) weighted blend (Karis 2014), the variance box (Marco
Salvi, "An Excursion in Temporal Supersampling", GDC 2016), clipping along a line (Lasse Jon Fuglsang Pedersen,
"Temporal Reprojection Anti-Aliasing in INSIDE", GDC 2016), Catmull-Rom history from five bilinear reads (Jorge
Jimenez, "Filmic SMAA", SIGGRAPH 2016). Jitter steps for a smaller render after AMD FidelityFX Super Resolution 2's
documentation (MIT).
* Light shafts' half-resolution order (`shafts.fsh`): the 2x2 cells of Bryce Bayer's ordered-dither matrix
("An optimum method for two-level rendition of continuous-tone pictures", 1973).

* Ambient occlusion (`world_light.fsh`): disc sampling in the surface plane with an elevation-angle weight, after
Photon's SSAO (`include/lighting/ao/ssao.glsl`).
* Bloom (`bloom_*.fsh`): 13-tap downsampling filter and tent upsampling from "Next Generation
Expand Down Expand Up @@ -59,6 +61,14 @@ first, or original replacements for them.
depth buffer, signed so each line falls on the nearer side. The pack families and their colour traits come
from Etna's own study of the packs' published screenshots; no pack assets are used.
* Noise: interleaved gradient noise (Jorge Jimenez, 2014).
* Shadows (`shadow_distortion.glsl`, `terrain_shadow.glsl`, 0.8.1): the shadow map's distortion is Etna's
own. A texel's size grows as (r + c)², which keeps up with the ground's foreshortening away from the camera
(the classic perspective-matching idea of shadow map warping); r is sqrt(1 - (1 - x²)(1 - y²)), which is
the plain distance from the map's centre near it and reaches 1 all along the map's square edge, so the
whole map is used and it never folds over. The soft edges are an area-weighted box of texels against a
receiver plane, and contact hardening follows percentage-closer soft shadows (Randima Fernando,
"Percentage-Closer Soft Shadows", NVIDIA, 2005), with a fixed search pattern and a disc turned only where
it is wide.
* Shadow casters (`EtnaShadows.java`): only the chunk sections whose shadow can fall on something the
camera sees are drawn into the shadow map. The view is extruded towards the light: the sides of the view
that face away from the light, and a plane along the light through each edge where such a side meets one
Expand Down Expand Up @@ -98,6 +108,11 @@ first, or original replacements for them.
depth as the guide (Johannes Kopf, Michael F. Cohen, Dani Lischinski and Matt Uyttendaele, "Joint Bilateral
Upsampling", SIGGRAPH 2007). The mist's look (valley mist at dawn and dusk, haze at night and in rain, cave
fog) follows Complementary Reimagined; no code from it.
* Water Fresnel (`terrain_water.glsl`, `fresnelDielectric`, 0.8.1): the exact Fresnel reflectance of
unpolarised light at a dielectric boundary, in the form Robert Cook and Kenneth Torrance give ("A
Reflectance Model for Computer Graphics", 1982; also Walter, Marschner, Li and Torrance, "Microfacet
Models for Refraction through Rough Surfaces", 2007, eq. 22), with total internal reflection for
Snell's window seen from under water.
* Under water (`terrain_water.glsl`), ideas after Photon with Etna's own code: the phase function of the
light shafts, 0.7 × Henyey-Greenstein (g = 0.5) + 0.3 isotropic, as Photon's water; caustics as the
change in area of light refracted by the surface (the idea of Photon's `program/shadow.fsh`,
Expand Down
2 changes: 0 additions & 2 deletions LICENSE
Original file line number Diff line number Diff line change
Expand Up @@ -19,5 +19,3 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

Some files are under other licences: see CREDITS.md (Photon Shaders License, Mojang).
19 changes: 0 additions & 19 deletions LICENSE-PHOTON.txt

This file was deleted.

12 changes: 5 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -106,9 +106,9 @@ Lower presets are faster; Low has no shadows and no anti-aliasing. See [docs/ben
Yes. Etna replaces none of the game's files: with F7 off it draws with the game's own shaders, textures and
models. On a Mac, Half resolution applies only when Etna is on as the game starts.

**Why isn't it on Modrinth or CurseForge?**
A few parts come from Photon Shaders, whose licence doesn't allow those sites without its author's permission.
Releases are here on GitHub.
**Is it on Modrinth or CurseForge?**
Not yet. Releases are here on GitHub. Since 0.9.0 Etna has no code from other shader packs, so nothing stands in
the way.

**Something looks wrong.**
Press F7: if it goes away, it's Etna. Note where and when it happens (time of day, near or far, which blocks) and
Expand All @@ -120,8 +120,6 @@ No. Etna works on its own; Vesuvio makes the game, and Etna's shadows, faster.
## Credits and licence

Etna's own code is under the MIT licence, see [LICENSE](LICENSE). Its terrain and cloud shaders are based on
Minecraft's vanilla shaders (© Mojang AB), which Etna's licence doesn't cover. A few small parts are ported from
[Photon Shaders](https://github.com/sixthsurge/photon) by SixthSurge (temporal anti-aliasing, shadow map
distortion, the water's Fresnel function) and stay under the Photon Shaders License (`LICENSE-PHOTON.txt`).
Complementary Reimagined inspired the look; none of its code is used. Everything taken from other projects and
Minecraft's vanilla shaders (© Mojang AB), which Etna's licence doesn't cover. No code from other shader packs
is used. Complementary Reimagined inspired the look; none of its code is used. Everything taken from other projects and
every technique Etna follows is listed in [CREDITS.md](CREDITS.md).
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ jar {
def projectName = project.name
inputs.property "projectName", projectName

from(["LICENSE", "LICENSE-PHOTON.txt", "CREDITS.md"]) {
from(["LICENSE", "CREDITS.md"]) {
rename { "${it}_$projectName" }
}
}
2 changes: 1 addition & 1 deletion docs/benchmark.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ Both tools are on the **General** page of Options > Etna Shaders...
* **Performance log**: set it to Summary, and every 5 seconds a line goes to `logs/latest.log` with the frame
rate, the frame time and where it goes, on the CPU and on the GPU (each pass of Etna timed on one frame in
eight), and the draw calls.
* **Run benchmark**: about 130 seconds, hands off, inside a world. Etna measures itself off, as set, and with each
* **Run benchmark**: about 150 seconds, hands off, inside a world. Etna measures itself off, as set, and with each
costly feature off in turn, then writes a table of what each one costs to `logs/latest.log` and puts every
setting back as it was. The sun and the weather hold still while it runs, so every step sees the same shadows
(the rain the server sent comes back when it ends). If the scene still changes (chunks loading, mobs walking
Expand Down
Loading