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