added stb, more binaryout changes"
[henge/apc.git] / stb / docs / stb_voxel_render_interview.md
1 # An interview with STB about stb_voxel_render.h
2
3 **Q:**
4 I suppose you really like Minecraft?
5
6 **A:**
7 Not really. I mean, I do own it and play it some, and
8 I do watch YouTube videos of other people playing it
9 once in a while, but I'm not saying it's that great.
10
11 But I do love voxels. I've been playing with voxel rendering
12 since the mid-late 90's when we were still doing software
13 rendering and thinking maybe polygons weren't the answer.
14 Once GPUs came along that kind of died off, at least until
15 Minecraft brought it back to attention.
16
17 **Q:**
18 Do you expect people will make a lot of Minecraft clones
19 with this?
20
21 **A:**
22 I hope not!
23
24 For one thing, it's a terrible idea for the
25 developer. Remember before Minecraft was on the Xbox 360,
26 there were a ton of "indie" clones (some maybe making
27 decent money even), but then the real Minecraft came out
28 and just crushed them (as far as I know). It's just not
29 something you really want to compete with.
30
31 The reason I made this library is because I'd like
32 to see more games with Minecraft's *art style*, not
33 necessary its *gameplay*.
34
35 I can understand the urge to clone the gameplay. When
36 you have a world made of voxels/blocks, there are a
37 few things that become incredibly easy to do that would
38 otherwise be very hard (at least for an indie) to do in 3D.
39 One thing is that procedural generation becomes much easier.
40 Another is that destructible environments are easy. Another
41 is that you have a world where your average user can build
42 stuff that they find satisfactory.
43
44 Minecraft is at a sort of local maximum, a sweet spot, where
45 it leverages all of those easy-to-dos. And so I'm sure it's
46 hard to look at the space of 'games using voxels' and move
47 away from that local maximum, to give up some of that.
48 But I think that's what people should do.
49
50 **Q:**
51 So what else can people do with stb_voxel_render?
52
53 **A:**
54 All of those benefits I mentioned above are still valid even
55 if you stay away from the sweet spot. You can make a 3D roguelike
56 without player-creation/destruction that uses procedural generation.
57 You could make a shooter with pre-designed maps but destructible
58 environments.
59
60 And I'm sure there are other possible benefits to using voxels/blocks.
61 Hopefully this will make it easier for people to explore the space.
62
63 The library has a pretty wide range of features to allow
64 people to come up with some distinctive looks. For example,
65 the art style of Continue?9876543210 was one of the inspirations
66 for trying to make the multitexturing capabilities flexible.
67 I'm terrible at art, so this isn't really something I can
68 come up with myself, but I tried to put in flexible
69 technology that could be used multiple ways.
70
71 One thing I did intentionally was try to make it possible to
72 make nicer looking ground terrain, using the half-height
73 slopes and "weird slopes". There are Minecraft mods with
74 drivable cars and they just go up these blocky slopes and,
75 like, what? So I wanted you to be able to make smoother
76 terrain, either just for the look, or for vehicles etc.
77 Also, you can spatially cross-fade between two ground textures for
78 that classic bad dirt/grass transition that has shipped
79 in plenty of professional games. Of course, you could
80 just use a separate non-voxel ground renderer for all of
81 this. But this way, you can seamlessly integrate everything
82 else with it. E.g. in your authoring tool (or procedural
83 generation) you can make smooth ground and then cut a
84 sharp-edged hole in it for a building's basement or whatever.
85
86 Another thing you can do is work at a very different scale.
87 In Minecraft, a person is just under 2 blocks tall. In
88 Ace of Spades, a person is just under 3 blocks tall. Why
89 not 4 or 6? Well, partly because you just need a lot more
90 voxels; if a meter is 2 voxels in Mineraft and 4 voxels in
91 your game, and you draw the same number of voxels due to
92 hardware limits, then your game has half the view distance
93 of Minecraft. Since stb_voxel_render is designed to keep
94 the meshes small and render efficiently, you can push the
95 view distance out further than Minecraft--or use a similar
96 view distance and a higher voxel resolution. You could also
97 stop making infinite worlds and work at entirely different
98 scales; where Minecraft is 1 voxel per meter, you could
99 have 20 voxels per meter and make a small arena that's
100 50 meters wide and 5 meters tall.
101
102 Back when the voxel game Voxatron was announced, the weekend
103 after the trailer came out I wrote my own little GPU-accelerated
104 version of the engine and thought that was pretty cool. I've
105 been tempted many times to extract that and release it
106 as a library, but
107 I don't want to steal Voxatron's thunder so I've avoided
108 it. You could use this engine to do the same kind of thing,
109 although it won't be as efficient as an engine dedicated to
110 that style of thing would be.
111
112 **Q:**
113 What one thing would you really like to see somebody do?
114
115 **A:**
116 Before Unity, 3D has seemed deeply problematic in the indie
117 space. Software like GameMaker has tried to support 3D but
118 it seems like little of note has been done with it.
119
120 Minecraft has shown that people can build worlds with the
121 Minecraft toolset far more easily than we've ever seen from those
122 other tools. Obviously people have done great things with
123 Unity, but those people are much closer to professional
124 developers; typically they still need real 3D modelling
125 and all of that stuff.
126
127 So what I'd really like to see is someone build some kind
128 of voxel-game-construction-set. Start with stb_voxel_render,
129 maybe expose all the flexibility of stb_voxel_render (so
130 people can do different things). Thrown in lua or something
131 else for scripting, make some kind of editor that feels
132 at least as good as Minecraft and Infinifactory, and see
133 where that gets you.
134
135 **Q:**
136 Why'd you make this library?
137
138 **A:**
139 Mainly as a way of releasing this technology I've been working
140 on since 2011 and seemed unlikely to ever ship myself. In 2011
141 I was playing the voxel shooter Ace of Spades. One of the maps
142 that we played on was a partial port of Broville (which is the
143 first Minecraft map in stb_voxel_render release trailer). I'd
144 made a bunch of procedural level generators for the game, and
145 I started trying to make a city generator inspired by Broville.
146
147 But I realized it would be a lot of work, and of very little
148 value (most of my maps didn't get much play because people
149 preferred to play on maps where they could charge straight
150 at the enemies and shoot them as fast as possible). So I
151 wrote my own voxel engine and started working on a procedural
152 city game. But I got bogged down after I finally got the road
153 generator working and never got anywhere with building
154 generation or gameplay.
155
156 stb_voxel_render is actually a complete rewrite from scratch,
157 but it's based a lot on what I learned from that previous work.
158
159 **Q:**
160 About the release video... how long did that take to edit?
161
162 **A:**
163 About seven or eight hours. I had the first version done in
164 maybe six or seven hours, but then I realized I'd left out
165 one clip, and when I went back to add it I also gussied up
166 a couple other moments in the video. But there was something
167 basically identical to it that was done in around six.
168
169 **Q:**
170 Ok, that's it. Thanks, me.
171
172 **A:**
173 Thanks *me!*