A companion mod for Nova Reimagined that provides accurate snow-biome detection, snow texture variants, and shader-published DH material textures for texture-led distant terrain.
Nova Reimagined includes a shader-driven snow system that applies a snow appearance to
surfaces in snowy biomes. Without this mod, the shader uses inSnowy - a player-position-based smoothed value - which causes snow tinting to visibly bleed across biome borders into adjacent warm biomes.
Nova Reimagined Snow solves that by building a biome snow eligibility texture that the shader samples in exact world space. It also resolves resource-pack textures and publishes them under stable IDs for the shader to use.
When used alongside Distant Horizons, the mod can also publish resource-pack textures for supported DH terrain materials so the shader can drive texture-led distant terrain.
inSnowycompsnow-<version>.jar in your mods/ folderThe mod publishes two textures for exact snow-biome eligibility:
compsnow:snow_biome_mapcompsnow:snow_biome_metaThe shader samples these in world space to determine whether a surface should receive snow treatment.
The config file is created automatically at config/compsnow_snow_variants.json on
first launch. Changes take effect after reloading resource packs (F3+T) - a full
restart is not required.
Paths follow the standard Minecraft resource identifier format:
namespace:textures/path/to/texture.png
The namespace is usually minecraft for vanilla-replacing resource packs, or a
pack-specific namespace. The path is relative to the assets/ root of the pack.
The mod resolves up to four snow surface textures and publishes them to the shader as:
compsnow:snow_variant_0compsnow:snow_variant_1compsnow:snow_variant_2compsnow:snow_variant_3The shader hashes world position to assign one of the four variants across terrain.
Auto (default)
Scans your active resource pack stack for snow textures and fills the four slots
automatically. Any unfilled slots fall back to vanilla minecraft:textures/block/snow.png.
Manual_Override
You specify exactly which texture fills each of the four slots. Any slot left as ""
falls back to vanilla snow.
Set "mode": "Manual_Override" and fill "manualVariants" with four paths — one per
slot. The shader uses whichever texture is in each slot for that position's hash bucket,
so slot order matters.
If your resource pack has fewer than four snow textures, repeat the textures you do have to fill all four slots. The mod does not auto-propagate snow variants — any slot with an empty string or a path that fails to resolve falls back to vanilla snow instead.
| Textures you have | How to fill the four slots |
|---|---|
| 1 | Repeat it in all four slots |
| 2 | Alternate: [A, B, A, B] |
| 3 | Repeat one: [A, B, C, A] |
| 4 | Fill normally: [A, B, C, D] |
Example with two snow textures:
{
"mode": "Manual_Override",
"manualVariants": [
"minecraft:textures/block/nature/snow/snow_1.png",
"minecraft:textures/block/nature/snow/snow_2.png",
"minecraft:textures/block/nature/snow/snow_2.png",
"minecraft:textures/block/nature/snow/snow_1.png"
]
}
When used with Distant Horizons, the mod publishes resource-pack textures for supported DH terrain materials.
Grass variants (8 slots):
compsnow:dh_lod_grass_0 through compsnow:dh_lod_grass_7Single material textures:
compsnow:dh_lod_snowcompsnow:dh_lod_dirtcompsnow:dh_lod_stonecompsnow:dh_lod_deepslatecompsnow:dh_lod_sandThe shader uses these textures on the DH terrain path only. Because DH LOD terrain does not provide normal block-face UVs, the shader uses projected / world-space sampling rather than exact vanilla block mapping.
Grass uses projected texturing with up to 8 variants; selection is driven by a stable world-space noise field. Snow, dirt, stone, deepslate, and sand use their corresponding resolved textures. The shader remains texture-led but still supports optional seasonal grass tinting if paired with SSDH season metadata.
The dhLodTextures section of config/compsnow_snow_variants.json controls these slots.
Single-slot materials (snow, dirt, stone, deepslate, sand) each take one
path. If a path is empty or fails to resolve, a neutral white 1×1 pixel is used instead
(the shader effectively ignores the slot).
Grass variants take up to eight paths. Unlike snow variants, the mod automatically propagates whichever grass paths successfully resolve across all eight shader slots. You only need to list the textures you actually have — the mod wraps them via modulo to fill the remaining slots.
| Textures you have | What to put in grassVariants | Result |
|---|---|---|
| 1 | ["path_to_A.png"] | A fills all 8 slots |
| 2 | ["path_to_A.png", "path_to_B.png"] | A, B, A, B, A, B, A, B |
| 4 | Four paths | Each repeated twice |
| 8 | Eight paths | Used as configured |
If none of the configured grass paths resolve successfully, all eight slots fall back to a neutral 1×1 white texture.
Example with four grass textures:
{
"dhLodTextures": {
"enabled": true,
"grassVariants": [
"minecraft:textures/block/nature/grass/gt_1.png",
"minecraft:textures/block/nature/grass/gt_2.png",
"minecraft:textures/block/nature/grass/gt_3.png",
"minecraft:textures/block/nature/grass/gt_4.png"
],
"snow": "minecraft:textures/block/nature/snow/snow_1.png",
"dirt": "minecraft:textures/block/soils/dirt/dirt.png",
"stone": "minecraft:textures/block/stone/stone_top_1.png",
"deepslate": "minecraft:textures/block/stone/deepslate/top.png",
"sand": "minecraft:textures/block/soils/sand/sand.png"
}
}
| Environment | Status |
|---|---|
| Singleplayer | Yes |
| Multiplayer (no server mod) | Yes - client-side only |
| Distant Horizons | Yes - DH terrain texturing supported |
| Season Cache | Yes - server-authoritative snow coverage when present |
| Serene Seasons + SSDH | Yes - optional seasonal grass tinting |
| Shader pack without mod | Yes - falls back to inSnowy for snow logic |
| Forge / NeoForge | No - Fabric only |
| OptiFine | No - Iris only |
ssdh:season_meta texture.MIT - see LICENSE
A companion mod for Nova Reimagined shader pack that provides accurate per-block biome snow detection and snow texture variant support.
Nova Reimagined includes a shader-driven snow system that applies a snow appearance to surfaces in snowy biomes. Without this mod, the shader uses inSnowy - a player-position-based smoothed value - which causes snow tinting to visibly bleed across biome borders into adjacent warm biomes.
Nova Reimagined Snow solves this by building a per-block-column biome eligibility map on the GPU each time chunks load. The shader samples this map using exact world XZ coordinates, giving pixel-accurate biome boundaries with zero bleed.
The mod resolves up to four snow surface textures from your active resource pack stack and publishes them for the shader to use when painting snow onto terrain surfaces, paths, and other accent blocks.
inSnowycompsnow-<version>.jar in your mods/ folderThe mod resolves up to four snow surface textures and publishes them to the shader as:
compsnow:snow_variant_0compsnow:snow_variant_1compsnow:snow_variant_2compsnow:snow_variant_3The shader hashes each block's world position to assign one of the four variants, distributing them naturally across the terrain. All four slots are used if populated - slot order matters.
Texture sourcing is configured via config/compsnow_snow_variants.json, which is created automatically on first launch.
Auto (default)
The mod scans your active resource pack stack for snow textures and fills the four slots automatically. This is the recommended mode for most users - install a snow resource pack and the mod handles the rest. Any unfilled slots fall back to vanilla minecraft:textures/block/snow.png.
Manual_Override
You specify exactly which textures fill each slot using resource identifier paths. Useful if Auto picks up the wrong textures, or if you want to mix textures from different packs. Any slot left as "" falls back to vanilla snow.
Paths follow the standard Minecraft resource identifier format:
namespace:textures/path/to/texture.png
The namespace is the resource pack's namespace (usually minecraft for vanilla-replacing packs, or a mod/pack-specific namespace). The path is relative to the root of the pack's assets/ folder.
Example using Alacrity snow textures:
{
"mode": "Manual_Override",
"manualVariants": [
"minecraft:textures/block/nature/snow/snow_1.png",
"minecraft:textures/block/nature/snow/snow_2.png",
"minecraft:textures/block/nature/snow/snow_3.png",
"minecraft:textures/block/nature/snow/snow_4.png"
]
}
Changes take effect after reloading resource packs (F3+T) - a full restart is not required.