0.10.0-alpha.2
Pre-releaseFull Changelog: 0.10.0-alpha...0.10.0-alpha.2
The second alpha, published to be reported against rather than because it is
finished. Everything below was flown on one machine, on Linux, with an NVIDIA
card, and nowhere else. Windows and AMD are untried in this build.
If you are on the first alpha, this one will tell you about itself. That did
not work before: a build on the way to a version was asking for the latest
finished release, which by definition is never another alpha.
The pass that was not about creatures
renderEntities reads as a loop over creatures and is not one. It walks every
section on screen — some 17 700 at thirty-two chunks, of which about 2 700 hold
any blocks at all — and asks the world which chunk each one belongs to before
finding out whether anything is standing in it. Held to a fixed scene of five
drawn creatures it costs 0.07 ms a frame at eight chunks and 1.10 at
thirty-two, and the half of it that draws block entities grows the same way
with none drawn at all.
So the loop is turned inside out: sixty entities each name the section they are
filed in, and the visibility search answers in one array read whether that
section is on screen. The same creatures are drawn, in the same order.
| At 32 chunks, flying | Before | After |
|---|---|---|
renderEntities |
1.12 ms/frame | 0.01 ms/frame |
| Frame rate along the route | 305–354 | 512–513 |
| Worst frame on the route | 225 | 353 |
At 24 chunks it gains one per cent and at 8 nothing at all, which is the same
statement from the other side: below thirty-two the frame is not waiting on that
thread.
A chunk vertex in 16 bytes instead of 28
Off by default, under Advanced → Pack Chunk Vertices, effective on the next
start.
The terrain pass was measured against render distance and against window size,
and the two answers name what it waits for: 0.048 ms per million vertices, and
no change at all between a small window and a very large one. Nine million
vertices at twenty-eight bytes is 252 MB of vertex reading a frame.
The position keeps a 2048th of a block — 128 times finer than one pixel of a
block texture, on a lattice neighbouring chunks share exactly. The light is
exact. The colour, which carries the shading in corners, is untouched.
- the card's terrain time: 0.49 ms → 0.42 ms
- the fixed route: 521 → 547 frames a second
- this mod's copy of the world: 428 MiB of video memory → 240
The memory is the larger half of that, and it is what decides whether a long
render distance fits at all. Ray tracing works with it.
Smaller things
- The layer filter gets a short list too (Optimisation → Short Layer Filter
List, off by default). It removes real work — 0.72 ms a frame down to 0.45 —
and buys no frames at all on the machine it was measured on, because after the
entity passes were shortened the frame stopped waiting on that thread. The
setting says exactly that rather than leaving it to be discovered. - The frame is now timed on the card as well as on the thread, by name,
using the phases the game already declares for its own profiler.
What this alpha still does not know
It has not been run on Windows, on an AMD card, or on a heavily modded pack.
Faults go to the issue tracker, and logs/latest.log is worth more than a
description of what happened.
You also need MixinBooter
10.7 or newer. No launcher installs it for you.