Drawing the funnel

A tornado hands the renderer exactly one piece of geometry a frame: a prism, submitted under the pipeline name vortexdread_funnel, whose two programs live entirely inside shaders/core. Nothing else reaches the screen, and no Minecraft particle is declared anywhere in the mod.

The striated wall, the lifted debris ring at the foot, the lowered cloud base overhead, the tint the column takes from whatever it is eating: all four come out of a density calculation run fresh at every pixel while the camera's own ray crosses that prism. What the storm tears loose is not sprites either: every piece keeps the model of the block it used to be and falls wearing it. Turn off every shader pack and nothing changes. That is already the game's own default picture.

One box, one program

TornadoRenderer builds that prism face by face and turns every one of them inward, because the march works out its own entry and exit through the volume: the far wall has to stay in front of the eye, never the near one. The storm's own numbers ride along in vertex attributes a surface already carries: core radius and funnel height packed into UV1, ground load and the sign of the wind into Normal, tint and flash into Color.

The box is cut generously wider than the smoke it holds: the widest the condensation ever gets is 1.8 times the core radius, and the box itself adds another 50% of slack on top for the turbulence to push into. Radius and height packed into UV1 sit in sixteen bits each, accurate to 1/64 of a block, well under what an eye resolves at that range.

Wind strength is folded into a fraction of 90 m/s before it reaches the shape math, and windFraction reads 1 the moment a gust clears that floor. Below the column's own feet the box still reaches down another 0.9 core radius so dust thrown out past a ledge is never cut off mid-air, with 1.3 radii of extra width so the ring's own lobes have room to push past the nominal edge.

A funnel that never blinks out

The box used to decide whether a tornado is even worth submitting at all is stretched the same 0.9 core radius further down by getBoundingBoxForCulling, the same number as the margin under the feet: a column whose dust skirt is the only part still on screen must never vanish just because visibility was judged on the funnel alone.

The shape of the column

Inside the prism, the fragment program traces a profile that starts narrow and flares upward: 0.58 core radius at the base, another 0.78 once multiplied by the square of the height fraction, which is what turns the silhouette into a funnel instead of a pipe. The debris ring reaches out to 1.25 radii, the lowered cloud base to 2.3, and that base only hangs for 0.13 of the funnel's own height before climbing back 1.4 times its own depth so it thins out instead of ending on a hard edge.

What makes a mature column nearly opaque sits in one constant of the program, EXTINCTION, set to 0.62 per unit of density crossed.

The step counts along the eye ray and toward the light never move between runs: STEPS and LIGHT_STEPS are written straight into the program's own text rather than read from a setting, which is what keeps the worst case cost known ahead of time.

What its presence does to the screen

The effect follows the storm rather than mirroring it outright: it climbs 0.14 a tick on the way in and only falls back at 0.05 once the tornado has passed, the way a real light takes longer to fade than to appear.

Camera shake tops out at 0.85 degrees standing in the middle of an EF5, the range where any of this is felt at all reaches 2.2 times the column's own influence, and the log only speaks again once the level has moved by at least 12 hundredths since the last line it wrote.

Two separate switches. screenShake only cuts the camera wobble, and postEffect cuts everything else the storm puts on the screen without touching the shake: someone the shake bothers does not have to give up the rest of the staging to fix it.

What changes if a pack is watching

Everything just described runs the same whether a shader pack is loaded or not: it is the picture the game shows by default. What the storm becomes once Iris and a patched pack are in place, with the pack's own light and its own aerial haze, is the subject of the next page in this wiki.

The settings that move the cost

The look group, what each number here actually moves
SettingDescriptionDefault
funnelStepsSteps through the volume the fragment program takes. Under sixteen the wall starts showing visible bands.40
funnelLightStepsSteps taken toward the light for the self-shadowing inside the column. At zero the funnel goes flat.6
funnelDetailSize of the smallest condensation wisp still worth resolving, in blocks. Finer costs more steps to stay quiet.1.8
funnelRenderDistanceDistance beyond which the funnel drops out of what gets submitted at all, and the storm is left as sky and sound.1024.0
screenShakeCuts only the camera shake described above.true
postEffectCuts the darkening, the streaks and the flash carried by StormPostEffect's single pixel.true
skyGreenShare of green the sky's own colour takes under a tornado, from 0 to 1.0.55