[Edit] ah ok they clarify later as a performance enhancement. I think it was pretty integral to the algorithm, but ok. Wait why do they say painter's algorithm. Comanche and other such voxel terrain engines went front to back and never had overdraw.
Reverse painters algorithm is still painters algorithm. You trade off the cost of a full screen clear before the frame, in return for eliminating overdraw
Voxel Space (2017)
11–20 of 74 posts
Re: Voxel Space (2017)
#12Earlier quoted context omitted.
Reverse painters algorithm is still painters algorithm. You trade off the cost of a full screen clear before the frame, in return for eliminating overdraw
You could avoid a full screen clear by using the y-buffer to draw in sky segments after rendering terrain.
Re: Voxel Space (2017)
#13[Edit] ah ok they clarify later as a performance enhancement. I think it was pretty integral to the algorithm, but ok. Wait why do they say painter's algorithm. Comanche and other such voxel terrain engines went front to back and never had overdraw.
Re: Voxel Space (2017)
#14Re: Voxel Space (2017)
#15Earlier quoted context omitted.
You could avoid a full screen clear by using the y-buffer to draw in sky segments after rendering terrain.
You still need to have some sort of mask to tell you which pixels have not yet been written this frame
it tracks how tall each columns write is so you can use it to only write the diff between it and the voxel behind it, skipping writing anything at all if the voxel behind is shorter than the current height.
So once you're done rendering front-to-back, you've got a y-buffer of highest-writes you can slap your blue sky across from highest-to-screentop on each line, avoiding the need to clear by write the sky to the full screen before starting the render.
Re: Voxel Space (2017)
#16If you render columns instead of rows you can render near-to-far without a Y-buffer and with zero overdraw. :)
Re: Voxel Space (2017)
#17Earlier quoted context omitted.
You still need to have some sort of mask to tell you which pixels have not yet been written this frame
that's what the y-buffer is that the article mentions in the front-to-back rendering section. it tracks how tall each columns write is so you can use it to only write the diff between it and the voxel behind it, skipping writing anything at all if the voxel behind is shorter than the current height. So once you're done rendering front-to-back, you've got a y-buffer of highest-writes you can slap your blue sky across…
Re: Voxel Space (2017)
#18Technically this is not related to voxels ("volumetric pixels", so to say), which split the 3D space equally along all three axes. This is just a height map, a set of prisms, not entirely unlike a Doom map. Every prism has a regular fixed-size square base. For 1992, this was mind-boggling though.
Re: Voxel Space (2017)
#19I remember figuring all this out as a self-taught teenager (pre-internet) with some books, a whole lot of time, and only a high-school level understanding of trigonometry. I built different versions - first in Pascal, then C, then Assembly.
Figuring out the algorithm was hard, but one of the optimizations I was most proud of was inventing (or so I thought) lookup tables to get around the slow floating point multiplication of my 16MHz 80286 CPU. I also remember "inventing" (ha!) the old bit shift + add technique.
There was something immensely satisfying about squeezing every last drop of performance out of a machine.
Nothing ever came of it. It was more or less a demo, but man did it make me feel like I accomplished something magical. I'd give anything to have a look at that source code today, but this post is the next best thing. So thanks for sharing. This made my day.
Re: Voxel Space (2017)
#20edited, I found it: https://www.reddit.com/r/gamedev/comments/m19vl2/1d_game_pro...