Git Product home page Git Product logo

noisium's Introduction

Noisium icon

Noisium

Optimises worldgen performance for a better gameplay experience.

The improvements lie between a 20-30% speedup when generating new chunks in vanilla Minecraft (benchmarked on 1.20.1 Fabric).

Noisium changes some world generation functions that other mods don't touch, to fill in the gaps left by other performance optimisation mods. Most notably, NoiseChunkGenerator#populateNoise is optimised to speed up blockstate placement when generating new chunks. There are also 3 other smaller optimisations, that increase biome population speed, chunk unlocking speed, and the speed of sampling blockstates for generation.
In NoiseChunkGenerator#populateNoise, setting the blockstate via abstractions/built-in functions is bypassed. Instead, the blocks are set directly in the palette storage, thus bypassing a lot of calculations and things Minecraft does that are normally useful when blocks are set, but when generating the world only slow it down, this is a cycle optimisation.

Noisium has full 1:1 parity with vanilla worldgen (worldgen without Noisium).

Dependencies

Required

None.

Compatibility info

Compatible mods

Noisium should be compatible with most, if not all, of the popular optimisation mods currently on Modrinth/CurseForge for Minecraft 1.20.x, since Noisium aims to fill in the gaps in performance optimisation left by other mods. This includes (but is not limited to) C2ME, Lithium, Nvidium, and Sodium.

  • C2ME: every world generation thread runs faster. The biome population multithreading is also done in a much better/more performant way in C2ME, so it's been removed from Noisium since v1.0.2. It's suggested to run C2ME alongside Noisium for even better world generation performance.
  • Distant Horizons: Noisium speeds up LOD world generation threads, since LOD generation depends on Minecraft's world generation speed.
  • ReTerraForged: RTF has built-in compatibility with Noisium, to fully utilize the optimisations during RTF world generation.

Incompatibilities

See the issue tracker for a list of incompatibilities.

Download

GitHub Modrinth CurseForge

Fabric Quilt Forge NeoForge

See the version info in the filename for the supported Minecraft versions.
Made for the Fabric, Quilt, Forge, and NeoForge modloaders. The merged JAR works on all aforementioned modloaders.
Server side.

FAQ

  • Q: Will you be backporting this mod to lower Minecraft versions?
    A: No.

  • Q: Does this mod work in multiplayer?
    A: Yes, but it'll only improve performance on the server.

  • Q: Does only the server need this mod or does the client need it too?
    A: Only the server needs this mod (but it works on the client too if you're going to host LAN or play singleplayer).

Attribution

  • Thanks to Builderb0y for giving great starting points and helping with some issues.

License

This project is licensed under LGPLv3, see LICENSE.

noisium's People

Contributors

kir-antipov avatar steveplays28 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

noisium's Issues

Incompatibility: Nether Depths

Hey there!
When I am launching my game, I am getting an incompatibility warning with the mod Nether Depths. This seems to apparently be caused by the fact that both use Mixins Injection priority 1000? Please look into it, thank you :)

Incompatibility with Lithium

Hey! I've come across some strange chunk section related issues when running Noisium together with Lithium.
An example of this is that entities will be completely unable to detect if they're in water in certain chunk sections.
Video showing this issue: https://streamable.com/4t71lf

What I'm suspecting is the cause of the issue here is that Lithium has this optimization to shortcut fluid checks based on whether or not a chunk section contains any block of a certain flag. These values are maintained here, but because of the below optimization in Noisium I believe there might be a chance this doesn't always get updated properly.

// Set the blockstate in the palette storage directly to improve performance
var blockStateId = chunkSection.blockStateContainer.data.palette.index(blockState);
chunkSection.blockStateContainer.data.storage().set(
chunkSection.blockStateContainer.paletteProvider.computeIndex(chunkSectionBlockPosX,
chunkSectionBlockPosY, chunkSectionBlockPosZ
), blockStateId);

It might also be worth noting that this isn't always easy to reproduce and can take a while to find, and that it only really seems to happen in newly generated chunks (though that would probably make sense if this is the cause of it).

These blockstate flags are also used for other optimizations, so there's a good chance it may sometimes be breaking those aswell.

Clarify vanilla parity in description

Hello! Just bumped into the modrinth page - can you clarify whether worldgen output is 1:1 with vanilla explicitly in descriptions?

It'd also be good to know whether the generation is faster as in "it takes less time to generate x chunks, but consumes the same amount of resources" (as in a scheduling optimization), or as in "it takes less resources to generate x chunks, and therefore takes less time" (as in a cycle optimization) - as that would change whether the impact to framerate stability in singleplayer is negative or positive.

Thanks!

Incompatibility with Mine Cells

Hi, I've been using this mod for a while with no issue and it works great.
However, teleporting to one of Mine Cells dimensions, Promenade of The Condemned or minecells:promenade, will result in disconnecting the player and crashing the server.

To be specific, that dimension can't be generated with Noisium.
Also, based on a crash log, it seems like the issue is related to NoiseChunkGenerator from Noisium.
Right now I have to play without Noisium since removing it solved the issue.

Crash Log: https://mclo.gs/QFFDEI0

Minecraft 1.20.1
Fabric Loader 0.15.7
Noisium 2.0.1
Mine Cells 1.7.2

Portal to Promenade of The Condemned (minecells:promenade)
2024-04-07_00 36 44

What does this mod do?

I'm pretty curious about this mod, and its performance gains, what does it do (in layman's terms)?

I've seen your explanation of replacing functions to optimize blockstate stuff, so I guess it's about filling in the chunk info faster, and not computing the structures themselves?

It's a new mod, so it's unpopular, and I love testing out new work! Especially ones uncalled for, so your project has me really curious :D. Do you have future plans for other optimizations?

[Question] Is the axis order optimization correct?

PalettedContainers store their data in YZX order. This can be confirmed by looking at PalettedContainer.Strategy#getIndex (mojmap). However, the axis order optimization in Noisium appears to be iterating in XZY order. I don't know if this actually reduces performance with the size of a modern CPU cache, but it seems unintended regardless. Ideally, I think you would want the loop to also be in YZX order (i.e. increment X, then Y, then Z), so that you are setting blocks at sequentially increasing indices. The current loop increments Y first before the other coordinates and won't do that.

Spawn-chunk limitation

Greetings! I don't know if is doable or not, and if it can be related to your mod, but is it possible to change how many chunks will generate around worldspawn upon world creation? For my world-type generation might be useful to pre-generate small amount of chunks.

If this thing you don't want to work on, you can delete this request, to so as not to clog issues

Crash when creating new chunk in ad_astra dimension

Game verison: 1.20.1
Noisum version: noisium-forge-2.0.2+mc1.20-1.20.1

how to reproduce:
take a new world from monumental's 1.20.1 modpack.
spawn yourself a launchpad and tier 2 rocket
spawn yourself 64 desh ingots and 64 desh plates, 64 steel ingots and 64 iron plates
hop into the rocket, blast off
in earth orbit, click on the plus sign and try to build a space station. Crash.
Crash log attached.
new 1.txt

Fluids not rendered until player interaction (right click)

At times, certain parts of lava or water streams can be rendered invisible. Occurs throughout both overworld and nether. Not sure if this is a mod compatibility error.
Images:
image
Part of lava stream is invisible.
image
Stays invisible after block update.

Mods list:
Health Indicator TXF https://modrinth.com/mod/health-indicator-txf
Mod Menu https://modrinth.com/mod/modmenu
NBT AutoComplete https://modrinth.com/mod/nbt-autocomplete
Dynamic FPS https://modrinth.com/mod/dynamic-fps
Xaero’s Worldmap https://modrinth.com/mod/xaeros-world-map
Zoomify https://modrinth.com/mod/zoomify
Better Statistics https://modrinth.com/mod/better-stats
BetterF3 https://modrinth.com/mod/betterf3
Debugify https://modrinth.com/mod/debugify
Chat Heads https://modrinth.com/mod/chat-heads
More Culling https://modrinth.com/mod/moreculling
Entity Culling https://modrinth.com/mod/entityculling
ModernFix https://modrinth.com/mod/modernfix
FerriteCore https://modrinth.com/mod/ferrite-core
Peek https://modrinth.com/mod/peek
Immediately Fast https://modrinth.com/mod/immediatelyfast
Status Effect Bars https://modrinth.com/mod/status-effect-bars
Who Am I? https://modrinth.com/mod/whoami
Concurrent Chunk Management Engine https://modrinth.com/mod/c2me-fabric
Thread Tweak https://modrinth.com/mod/threadtweak
Lazy Language Loader https://modrinth.com/mod/lazy-language-loader
AppleSkin https://modrinth.com/mod/appleskin
Simple Item Editor https://modrinth.com/mod/simple-item-editor
Screenshot to Clipboard https://modrinth.com/mod/screenshot-to-clipboard
Very Many Players https://modrinth.com/mod/vmp-fabric
Xaero’s Minimap (Fair Play) https://modrinth.com/mod/xaeros-minimap-fair
Better Mount HUD https://modrinth.com/mod/better-mount-hud
CustomHud https://modrinth.com/mod/customhud
Krypton https://modrinth.com/mod/krypton
Lithium https://modrinth.com/mod/lithium
Bad Optimizations https://modrinth.com/mod/badoptimizations
Fast Quit https://modrinth.com/mod/fastquit
Fast IP Ping https://modrinth.com/mod/fast-ip-ping
Paginated Advancements https://modrinth.com/mod/paginatedadvancements
Minecraft Capes https://modrinth.com/mod/minecraftcapes
Your Options Shall be Respected https://modrinth.com/mod/yosbr
e4mc https://modrinth.com/mod/e4mc
LazyDFU https://modrinth.com/mod/lazydfu
Totem Small Pop https://modrinth.com/mod/cpvp
Sodium https://modrinth.com/mod/sodium
Gamma Shifter https://modrinth.com/mod/gamma-shifter
NoFog https://modrinth.com/mod/no_fog
Noisium https://modrinth.com/mod/noisium

Using dark ui resource pack from vanillatweaks.net

1.20.1 Neoforge 47.1.101 ``Crash on Startup``

I did modpack upkeep and now I can't launch I suspect based prior reports it has to do with lost cities anyways here is log.

https://mclo.gs/XbMdM8w

The log says wrong version but that actually wasn't an issue till after this latest string of updates.

  • Domum Ornamentum [1.20-1.0.170-BETA (Updated)
  • FTBQuestsOptimizer [1.2.2-1.20.1] (Updated)
  • GeckoLib 4 [4.4.4] (Updated)
  • Iron Bookshelves [1.20.1-1.3.0-forge] (Updated)
  • LostCities [1.20-7.1.3 (Updated)
  • LostSouls [1.20-4.0.3 (Updated)
  • MineColonies [1.20.1-1.1.510-BETA] (Updated)
  • Philips Ruins [3.4] (Updated)
  • Silent Gear [3.6.0 (Updated)
  • Structurize [1.20.1-1.0.712-BETA] (Updated)

I suspect one of this causing issues.

Due to time constraints I cannot test it so I am simply removing mod for now.

Incompatibility with latest versions of Lost Cities when playing via Sinytra Connector

I've been using Noisium on Forge (4.7.2.0, running Minecraft 1.20.1) via the Sinytra connector and it doesn't seem to have any issues except an incompatibility with the latest versions (1.20.7.1.1 and 1.20.7.1.0) of Lost Cities for forge. I tried reporting on the Lost Cities issues page first, but the mod dev said it's an issue on Noisium's end with the mod reducing visibility. The specific error is "NoiseChunkGeneratorMixin from mod noisium cannot reduce visibiliy of PUBLIC target method."

Here's a latest.log with only Sinytra Connector, Connector Extras, The Lost Cities, and Noisium active:

latest(13).log

I realize that this mod is Fabric first and foremost so it's a long shot, but I figure it's worth a try. :)

My Thanks !

Incredible mod, great performance since I started using it. Before I just had C2ME and sodium, and it wasn't crazy, the generation was slow.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.