
My Isometric Voxel Engine: One Year Later - gavanwoolery
http://www.voxelquest.com/news/voxel-quest-one-year-update-roughly
======
ABS
Since the Kickstarter is not linked anywhere (not even in the blog post!) here
it is: [https://www.kickstarter.com/projects/gavan/voxel-
quest](https://www.kickstarter.com/projects/gavan/voxel-quest)

~~~
teraflop
The first line of the blog post links to it.

~~~
gavanwoolery
Yeah I added it in for convenience, thanks for the suggestion :)

------
Lambdanaut
This progress is looking fantastic. I remember when you posted about it here
last year. The dedication put towards this project is admirable.

It's good to see that the engine is near completion and that (hopefully) we'll
be seeing some custom characters running around the screen soon.

Are you building it in such a way that this will make networked multiplayer
feasible in the future? If not, what reasons do you have for letting that fall
on the wayside?

I consider myself a gamer, but I don't have a lot of time so I only spend my
time on games that I think will give me a really high quality experience. This
game is the one I am looking forward to the most.

~~~
gavanwoolery
Thanks! Networking is available, but not yet used for multiplayer. I'm not
implementing it myself, but if modders want to that is fine. I've got way too
many issues to address - as much as I would have like it in there, I had to
prune my feature list and taking out networking made everything much easier to
implement.

Yeah I myself can't waste much time on games, obviously. I only pick up ones
that I feel are good "research."

~~~
m_mueller
If anything, your procedural approach should make it easier, shouldn't it?
Instead of transmitting level files you can only transmit some seed data,
after that only transmit the updates. This should also make it possible for
all players to change the map itself through interactions, like in Minecraft.
I'm imagining something like the concept of No man's sky, applied to a low
budget / community project, where every player starts on his own island and
through exploring the world and surviving in the environment, they can slowly
get enough gear to explore the world overseas.

Btw. what's with the Swiss mug? I'm Swiss, so that made me curious :).

~~~
gavanwoolery
My initial investor was from Switzerland. As I mentioned in another comment,
we found eachother on reddit. He is just a regular guy, gamer, and programmer
- not by any means wealthy but he had enough in savings to get me some seed
funding. By coincidence, I went to Germany right after we started making a
deal (I was visiting my wife's family, who is from Germany). I made a pitstop
in Switzerland to meet my investor, and bought the mug there in Zurich. :)

Procedural approach does make it much easier to generate content. I've already
got everything in place to generate entire seamless maps with logical road,
street, city, and house placement among other things, and it is pretty easy to
extend for things like caves and dungeons.

~~~
muyuu
I understand why he invested. You have great passion and fantastic taste, I
didn't know about this project until now.

------
cpeterso
The AI and emergent plots remind me of Storybricks, the AI game tech that Sony
has licensed for their "EverQuest Next" game. Designers add personality and
need/want attributes to NPCs who then run on their own.

[http://massively.joystiq.com/2014/08/21/soe-live-2014-the-
re...](http://massively.joystiq.com/2014/08/21/soe-live-2014-the-
revolutionary-intelligence-of-storybricks-ai/)

~~~
gavanwoolery
Yep, I am twitter "friends" with some of the guys at Storybricks and others
who have been involved with EQN. I'm very excited to see what they come out
with.

------
smlacy
When I view your videos, all I can think is "oooh, he's using some kind of
page-fault type engine to pull in and dynamically generate cubical
subdivisions of space"

So, assuming that's what's happening, why not pre-render/pre-generate a larger
area than the visible area so that this faulting in process isn't as visible
for a typical viewport pan.

Also, if you were to reduce the resolution, would that make the
faulting/rendering faster? Seems like that would be a good compromise, as many
of the demos now feel like the terrain isn't generated fast enough to make a
playable game.

Oh, can you also demo destructibility in a future video?

~~~
gavanwoolery
There is some destructibility in this video, but I'll go over it more in the
future. :)

You can make it go a lot faster by lowering the resolution, as I point out a
bit down the page in the article. Every reduction of 2 in resolution ups
performance and memory usage by 4-8 times, based on if the process is 2D (post
process) or 3D related (chunk rendering). I'm continuing to add more
optimizations to make things faster as I go along.

I am also going to add in better support for caching and prerendering - right
now it all happens exclusively in GPU memory - I can easily expand the view
even further with system memory and hard disk usage.

~~~
sitkack
At the risk of having you compete with a project I would not even start, ;)
you should dynamically reduce the resolution so that it runs in WebGL and
create a backend in Akka or Erlang. You could get real funding with what you
have here.

------
programminggeek
What makes voxels better or worse than polygons for this kind of game and art
style?

~~~
gavanwoolery
With polygons, you must explicitly pass in every vertex and corresponding data
(unless you use a geometry shader). This gets huge fast - with just usually
around 12 32 bit floats per vertex (position, normal, material and tex
coords). That is 48 bytes per vertex. Not only that, but each vertex must be
processed (transformed) and the resulting polygon clipped, which is usually a
more or less order-dependent operation and thus not well designed for
multithreading on GPUs (they do use tiling though to address this I think, but
usually this means redundant calculations).

With voxels, positions are inherently stored, and guaranteed to have some
cache locality if they are uncompressed. Thus, GPUs are really good a chugging
through large amounts of bitmaps, which is what I am doing (only rendering to
bitmaps). With teraflops of compute power now, you can do trillions of flops
every second, and in my case I can render about 1-2 billion voxels per second.

Additionally, doing procedural generation with polygonal surfaces is much more
complex (I've done it, I know). Implementing stuff like voronoi patterns (used
for the rocks) is trivial with voxels. Not the case with polygons, unless you
are just wrapping voxelized data. Its the difference between evaluating a
graph at every point, and calculating the graph at only the needed points.
Voxels are implicit, polygons are explicit.

Really, you can think of VQ like a really fancy graphing calculator (in fact,
all of the structures are just an extension of superellipsoids)
([http://en.wikipedia.org/wiki/Superellipsoid](http://en.wikipedia.org/wiki/Superellipsoid))

~~~
ilolu
Any books / resources I can read ?

~~~
gavanwoolery
I actually never read any technical book beyond a few pages, and tend to avoid
papers which are typically too academic for my needs (I really just look at
raw source, if anything).

My best recommendation - dive in and start coding. You are your own best
teacher. :)

------
gavanwoolery
Also, if anyone has any questions, please let me know! I'm trying to gain some
visibility for Voxel Quest, so please spread the word if you can. Thanks!

~~~
adrianm
This is beautiful stuff. Are you looking for contributors? I'd love to work on
this with you.

~~~
mercurial
Agreed, the visuals are just fantastic. Kind of clashes with my memories of
the last Voxel game I played, one of these terribad Delta Force games.

~~~
gavanwoolery
Ah Delta Force, Commanche, Novalogic...the birthplace of my interest in
voxels. :)

------
namuol
Glad to see this on the top of HN! I saw you launch the Kickstarter campaign
on Twitter the other day and was instantly blown away by the detail in the
engine. Looking forward to watching this progress.

~~~
gavanwoolery
Thanks! I'm hoping it will get better with time, still trying to address many
(valid) complaints with the engine. :)

------
dammitcoetzee
"The following "content" is alpha, like a wolf." haha, fantastic.

~~~
gavanwoolery
I can never take myself too seriously :)

------
donutdan4114
I really hope you get this done and get stupid rich. This is amazing. Congrats
on getting this far!

~~~
gavanwoolery
Thanks!! I'd settle for a decent middle class wage at this point. Right now, I
am effectively making less than minimum wage based on the hours I work. :)

------
Htsthbjig
Well, I will put some money in the kickstarter campaign. When the source code
is released, I will put my hands on it. :-D

You can make a GPL version so you create a community of users with dual
license for commercial developers-artists so you get much more money than the
ridiculously cheap 30Ks.

You can make great engines, but probably for creating amazing content for your
engine you need artists.

~~~
gavanwoolery
Not a bad idea - I will definitely consider GPL in the meantime, before I go
to more permissive open source.

------
hyp0
Question: you're using the super-fine voxels for the aesthetic, (and it does
look amazing), but only coarse grained voxels for gameplay? I can see the
trade-off makes sense, for the reasons you mention (path-finding, monsters can
get through).

It's just that a fine-grained modifiable world would be super-amazing. It
seems to me that your rendering tech could do that just as well... if the
edits only occurred on-screen, they are manageable (and all the rest can be
rendered off-screen to bit-maps and cached, as you do now).

Of course, what I'd really love is a living world, which also changes off-
screen. e.g. erosion. But I think that may be asking too much of present-day
hardware...?

marketing advice: copy notch. Do little updates as often as you can, for every
small thing you do. It gives you energy, engages long-term followers and -
most important - is advertising, so more people know about it.

~~~
gavanwoolery
Good question - you can add in fine grained details as well. The macroscopic
chunks are used to make quick calculations. Then on top of that, it sees
whether or not the chunk contains microscopic changes, and if necessary
recalculate a path or collision or whatever.

Erosion: doable, but not something I'm going to tackle right now. I originally
built errosion in from the start to try and create realistic maps, but it
turned out to be way simpler and faster to just pull in real world heightmaps
and mix them together in patches, even if not realistic.

Marketing advice: taken. :) I'll be updating more frequently now, especially
with the KS campaign going, which is pretty much a full time job right now.

------
lelandbatey
I remember the last post about this engine and loved all the details. There's
a huge amount about voxels I don't know, and the author always has such
interesting insights.

I'm totally sold, just backed for the Platinum badge.

~~~
gavanwoolery
Thanks for backing! :)

------
lepht
This looks quite good in the video, good work!

You mention a few games as inspiring traits of Voxel Quest -- most of which
are quite obvious -- including Hearthstone. In what ways was Hearthstone an
influence? Art style, or something beyond that?

Edit: Just finished watching the entire video, it really does look fantastic.
I will say, the one off-putting part of your game design philosophy for me was
the whole "no long-term progression" thing. I find the way Rogue Legacy
handles this a beautifully rewarding mashup of the roguelike quick permadeath
and the feeling of making overall progress in the game world.

~~~
gavanwoolery
The game is largely based off of CCG mechanics, but not the way a traditional
CCG plays so much. Items, skills, classes, and monsters each add their own
unique mini-rules to the game, based off a larger set of common rules like
Hearthstone. Superficially, it plays a bit more like Dwarf Fortress.

Funny comment about the permadeath - Rogue Legacy was exactly what made me
realize I did not like unlocking. Nonetheless I'm aware of the drawbacks of
permadeath, and I will do what I can to address the communities wishes (there
may be various game modes for people who hate permadeath and want a
progressive, traditional RPG). Spelunky is, and has been, my goto design
influence for years (not the sidescrolling and platformer mechanics, but just
the pacing of the game, how it handles various design choices, etc), I still
consider it one of the best designed games of all time.

------
6581
I've been looking forward to Voxel Quest since I first read about it last year
- everything about it seems to appeal to my taste in games. Great to see all
the progress you've made!

~~~
gavanwoolery
Thank you! :)

------
arobertson
Question unrelated to the game + engine: What kind of tools do you use to help
manage your work?

Do you utilize any kind of project management software or methodology as a
solo developer?

~~~
gavanwoolery
I use Trello to manage my project. Google docs to do design documents and
other spreadsheets.

There is a section of code where I adjust some important constants frequently
(for chunk, buffer sizes, and other vars that are constrained at compile time
for now). In this section I have a commented area for quick todos and
reminders, for when they are too trivial to add to Trello or I dont want to
forget them.

For other details on my work environment:

I have 4 monitors - 3 primary ones to code on, and a forth to run the game on,
fullscreen if needed (i.e. for recording). I use Sublime Text by habit, even
though I compile in Visual Studio. I also have a bunch of batch scripts to
automate C++ stuff I don't want to deal with (LZZ for automatic header
generation is crucial for my sanity).

I also have several apps running in windows to reconfigure how the desktop
works, allowing desktop switching and other stuff (I'm on Windows 7 right
now). I used to program on a Mac, so I actually changed my keyboard to be more
mac-like (switched the control and alt keys on my keyboard and reprogrammed
them in the registry - hehe).

LZZ link: [http://www.lazycplusplus.com/](http://www.lazycplusplus.com/)

------
bkmn
I don't really understand how this is a game, but I'm more than happy to
pledge a few dollars to support talented people like you! Go voxels!

~~~
gavanwoolery
Woo! Its not really a game yet, but constructing an engine from scratch was a
decision I made with intent. I've still got three years on my projected
timeline to go, so I will be working further on making it a game. To use my
goto comparison, if you look at the early days of Minecraft, it was just a
cube-placer. Now most people call it a game. :)

------
Namrog84
Are you going to be releasing the engine and a game? Or just one? I may have
missed that. But it looks truly amazing.

~~~
gavanwoolery
Both - initially the engine source will be put out to help boost the community
and mods around the game - a game is being built so that relevant features are
added to the engine. Kind of dogfooding my own engine I guess. :)

~~~
volent
Why do you want to wait to release the engine source instead of putting it on
github right now ?

~~~
m_mueller
I'm guessing Gavan would like to protect his work a bit and not just give out
licences to do anything you want with it - if others want to commercialise, he
should get a fair cut, otherwise it's going to be a hard sell to investors.
IMO that's completely understandable. I find it sad that things like non
permissive CC licenses are regarded as so bad in the open source community -
making a project like this completely open is very hard to do as a full time
job because of that.

------
ThisIBereave
I like the look of your mountain ranges. Is that done using a published method
or something of your own devising?

~~~
gavanwoolery
Thanks! My own devising, but really based on existing techniques. Although of
course it will be "published" since source is going out. Its actually based on
just two things - one is the same heightmap used for the world, transformed
and overlayed several times to produce unique cracks (it reads this based on
the world position, and then does a whole bunch of sin calculations and stuff
to make it look random). The same map is used to add in sediment and grass,
just more permutations on the calculations. The other is voronoi patterns. It
combines these to form what turned out to be surprisingly unique and cool
looking (even I was surprised how it turned out).

------
erikb
It looks awesome. But without following this project up close it's really hard
for me to see what changed since 12-6 months ago when I saw the last video
about the engine.

And what will the actual game be about? From the video I'm not sure if there
is an actual plan yet.

~~~
gavanwoolery
You can find some more details about the game on the Kickstarter page (some
good questions answered there in the updates section as well, with a link to
the design doc), in the about section, or on the Steam Greenlight page
([http://steamcommunity.com/sharedfiles/filedetails/?id=245148...](http://steamcommunity.com/sharedfiles/filedetails/?id=245148095))

As usual, video editing and marketing are my two worst skills, so I'm not very
good at putting together all this stuff. :)

~~~
chipsy
The marketing of the game gives me honest concern. It is the quintessential
"list of features" that is indicative of technology made without acknowledging
a critical, artistic perspective - that's even true of the title "Voxel
Quest." If you can correct this and gain understanding of what the game
_represents_ and what areas you _want_ it to be critiqued on, it will become
both easier to design and to market. Narrowing always clarifies things.

There is one aspect in which you do show a definite perspective, and that is
in the use of a simulationist philosophy: Everything done in deterministic,
procedural, emergent ways. Now, one of the ways in which this philosophy gets
challenged is the issue of "you don't know what you don't know" \- if your
simulation is built upon bad premises, then it's garbage in, garbage out.

So then, if you want to find the same kind of successes with the approach as
something like Dwarf Fortress, Spelunky or Minecraft, you have to actively
acknowledge where your simulation becomes intentionalized by the assumptions
you make about how the world works. At that point you are in the business of
making critical arguments through your game and the workings of its systems:
Things like how the economy is tuned, frequency of combat, or average NPC
reactions to violence, all send unavoidable messages about the totality of the
world you make.

You can literally pick just _one_ thing that characterizes the world, consider
it in depth and tailor every other system's features around it, and have a
fine game. Even Dwarf Fortress, which is extremely deep, shows intentionality
in that the details it focuses on are descriptive and categorical(types of
rocks, individual organs) vs., for example, being spatially accurate like the
physics simulation of a racing game. What makes DF's detail cool - and what
makes it a big, complex game instead of a tiny one - isn't that it attains
atomic precision, but that everything adds up to a specific, detailed,
believable narrative about fantasy characters doing the "everyday things" we
expect to see in a fantasy world.

To put it another way: Eliminating things from the game makes it impossible to
criticize those things, and every game eliminates something! But the things a
game does show should have a ton of care put into them.

If you're doing all of this right, you'll be up at night with some fear over
the internal struggle of the design decisions, instead of the actual
production or marketing; you are already demonstrating the necessary skill to
do those two - you have very nice graphics to show off in your trailers, which
is a great entry point.

The only reason why the marketing looks hard is because there's a lack of
design intent, and thus nothing but bullet point features after you show the
graphics. But the design can act as a master plan for the marketing, as it
allows you to go on at length about the things being conveyed through the
systems, vs. what the systems are, where your effort on details is going to
go, and how you want the overall play experience to expand over the coming
months.

~~~
gavanwoolery
All good points, thanks! Many of the details I failed to convey because I
targeted my past audience (people who already saw my old updates) instead of
current audience (people who have no idea what Voxel Quest is). But even with
that in mind many of your points still hold. Thanks for the detailed,
thoughtful feedback :)

------
_random_
Looks like a dream project - so happy you can do it full-time!

 _> VQUI can be hotloaded_

What else can be hotloaded? Do you use entity-component-system type of
architecture? Any scriptable parts?

~~~
gavanwoolery
To be able to do this fulltime is really a blessing (or a curse maybe, because
it is extremely hard work). Was not easy getting there - I was turned down by
every single investor I ever approached (many), and threw a hail marry pass on
reddit of all places, met a gamer/dev there who gave me a small amount of seed
funding to get started (the rest is based on savings/severance from my old
job). Now investors are knocking on my door, rather than the other way around,
which is cool (and I really do appreciate everyone who has approached me, I
don't take it for granted).

Great question about hotloading - everything is data-driven, no realtime
scripting yet, unless you count the GLSL as scripting, which can be hotloaded.
And really, the GLSL is a huge part of the scripting process - it is simply
awesome to use for scripting, especially so in the context of voxels. It has
blazing fast compile time (I hit refresh, refresh over 40 shaders faster than
I can notice a delay) - and shaders obviously compile to be very fast. I have
intentionally avoided other scripting - for the same reason Unreal went to a
pure C++ engine.

~~~
_random_
Unreal has the Blueprint scripting system though :). But I am not going to
argue as I don't have enough of the relevant experience. Besides your About
page has cleared my questions (AI plans are quite ambitious :)).

~~~
gavanwoolery
Yeah I was just going off what I read:
[https://forums.unrealengine.com/showthread.php?2574-Why-C-
fo...](https://forums.unrealengine.com/showthread.php?2574-Why-C-for-
Unreal-4&p=16252&viewfull=1#post16252)

Did not know about Blueprint :)

Anyhow - AI is defintely ambitious, but less so once you see how simple I am
keeping everything (it is going to be quite crude - really :) )

------
malkia
Keep the good work! Looks awesome, and it was my dream to create such game
long time ago, but never happened. The tooling also looks amazing and
powerful!

~~~
gavanwoolery
Thank you! Living the dream. (if you only knew the torturous hours I worked ;)
)

------
akg
Are you using any sort of acceleration data-structures to manage your voxels
or just storing everything in plain 3D array of positions? I imagine you can
run into memory issues there if you don't account for spatial sparsity in your
voxel data?

I'd be curious to know if you're something something like run-length encoding
(RLE) or something hierarchical such as a B-Tree?

------
maikklein
Perfect timing, I just started to look at voxels yesterday.

Which resources can you recommend if I want to learn more about voxels?

~~~
gavanwoolery
See my response to ilolu - I most recommend diving in and experimenting
yourself - maybe build something that is on the CPU first since it is easier
to work with. Voxels are really intuitive, you are just manipulating a 3D
array of data (more complex once you get into compression and things like
that). I learned everything just by playing around with code. :)

------
anarchy8
This page has crashed chrome three times now, twice on one machine and once on
another. Somethings wrong here...

~~~
gavanwoolery
Blame Weebly, that is my host (aren't they a Y-Combinator company?). :)

------
bespoke_engnr
This is awesome; I don't know how I missed it last year. Donated to the
Kickstarter -- keep it up!

~~~
gavanwoolery
Thank you for backing :)

~~~
touristtam
you deserve to get it published. :)

Really impressive update since last year. :D

------
endeavour
Tiberian Sun nostalgia. Love it.

~~~
gavanwoolery
Man, I loved the old C&C games. :)

------
fgGAMI
Hey, with the way you have built this engine and/or with potential mods, is it
possible to change the camera angle to view the map out of isometric mode, for
instance in first person?

~~~
gavanwoolery
Its possible, but I have many other items prioritized above that.

