YouTube2Text

Konsoll 2018: Oskar Stålberg - Developing The Bad North Look — Transcript

by Konsoll · 10,311 words · 1,396 segments · language en · Watch on YouTube

Full transcript

  1. 0:00we are ready for the last talk of today
  2. 0:04and our next speaker has experience from
  3. 0:07companies like Ubisoft and us too he is
  4. 0:11the technical artist turned indie to
  5. 0:13create a very interesting game that
  6. 0:15North please welcome Oscar strolling
  7. 0:26yeah yeah as you can see I'm Oscar Saul
  8. 0:31Berg I'll just start by introducing
  9. 0:33myself I used to work for Ubisoft
  10. 0:35massive where I among as a technical
  11. 0:38artist where I did a bunch of shader
  12. 0:40work and among other things made the
  13. 0:42cool like holographic 3d map in the
  14. 0:45division I'm like one of my big
  15. 0:49interests is procedural generation and
  16. 0:51this talk is gonna be a lot about
  17. 0:53procedural general oh that's very
  18. 0:55interesting
  19. 1:01that is very there we go okay let's keep
  20. 1:04tabs on that yeah this talk is gonna be
  21. 1:08a lot about procedural generation
  22. 1:09because bad north is all about
  23. 1:11procedural generation basically all
  24. 1:12aspects of the game are procedurally
  25. 1:14generated in some kind of way here are
  26. 1:17two like earlier examples of procedural
  27. 1:19procedurally generated demos I've done
  28. 1:21one of them you get to build a little
  29. 1:23red brick house and one of them you get
  30. 1:25to terraform a sort of medieval era
  31. 1:28planet both of these you can find online
  32. 1:32and play in your browser if you just
  33. 1:33google my name and brick block for that
  34. 1:36one and just plan it for that one
  35. 1:38you'll find more just google my name
  36. 1:39you'll find them and that sort of so
  37. 1:43those I did on my spare time so that got
  38. 1:45me started round like thinking about
  39. 1:46procedural generation and more
  40. 1:47specifically thinking about kind of
  41. 1:50content driven
  42. 1:51tile based procedural generation in 3d
  43. 1:54worlds which sent the which later would
  44. 1:57turn into stuff that would become bad
  45. 2:00north so that's enough about me so what
  46. 2:04I'm gonna do in this talk is I'm going
  47. 2:06to assume gonna open up unity and take a
  48. 2:09poke around
  49. 2:10look at like what bad North looks like
  50. 2:12in the scene view in unity and like what
  51. 2:15happens when we tweak a bunch of values
  52. 2:16and stuff like that but we'll take with
  53. 2:19us some like core design principles or
  54. 2:22sort of aesthetic principles that I
  55. 2:25think permeates the design of bad north
  56. 2:28and these are mostly like these aren't
  57. 2:29things I came up with before it well
  58. 2:31some of them are but most of them aren't
  59. 2:32things I came up with before I started
  60. 2:33working on the game but things I kind of
  61. 2:35discovered and found work well as I was
  62. 2:38making the game so we'll just go through
  63. 2:40them quickly one of them that's pretty
  64. 2:42simple one
  65. 2:42borders not textures or like smooth
  66. 2:46gradients crisp lines so it's like
  67. 2:49instead of using like a tiling grass
  68. 2:51texture for example telling you over and
  69. 2:53over this is grass this is also grass
  70. 2:55this is also grass this is also grass
  71. 2:57you do most of your work defining areas
  72. 3:01like around the edges of the areas
  73. 3:03instead of like in the middle of the
  74. 3:04areas because that's that's really
  75. 3:06interesting is how things happen where
  76. 3:08different areas meet and that's where
  77. 3:10you want to put it like you can still
  78. 3:11have a texture but like tone it down and
  79. 3:13put some focus on the border since that
  80. 3:14the other one quite obvious symmetry
  81. 3:17like the idol game has an island in the
  82. 3:20middle that the camera rotates around so
  83. 3:22very natural we get the symmetric
  84. 3:23feeling for it and that's also a thing
  85. 3:25we try to play within like the
  86. 3:27iconography on the game and a lot of the
  87. 3:29like the art of the game and stuff like
  88. 3:31that it's kind of like a this kind of
  89. 3:34shining city on a hill feel to it
  90. 3:37the other one more sort of dramatic one
  91. 3:40order and chaos which sounds very
  92. 3:42dramatic and in a lot of ways we also
  93. 3:44have that very dramatically represented
  94. 3:46in bad north but if we sort of pull it
  95. 3:48down a notch we get something more like
  96. 3:50establishing patterns and breaking
  97. 3:52patterns or sort of make rules break
  98. 3:54rules which i think is a quite
  99. 3:56fundamental design principle and like
  100. 3:58all kinds of thing in game design in in
  101. 4:01art in music as well right like do
  102. 4:04things in a certain pattern and like
  103. 4:05twist it up a little bit and then when
  104. 4:07you get used to that you twist it up a
  105. 4:08little bit and there are a lot of that I
  106. 4:09think in the esthetical aspect of bad
  107. 4:12north to both on quite low levels and on
  108. 4:14slightly higher levels the next thing
  109. 4:17respect abstraction that sounds quite
  110. 4:19abstract it is will get some very very
  111. 4:21concrete examples of that though and
  112. 4:23it sort of ties into the idea of not
  113. 4:26seeing the forest for all the trees and
  114. 4:28striving to do the opposite of that and
  115. 4:30of course the next one is quite obvious
  116. 4:32minimal labour cost especially minimal
  117. 4:35repetitive labor because we are a very
  118. 4:38small team is me and one other guy
  119. 4:40full-time and then audio guy half time
  120. 4:42so like we don't have a lot of time to
  121. 4:44put into laborious workflow so the whole
  122. 4:48game is designed around everything being
  123. 4:50very fast to produce not necessarily
  124. 4:53like because sometimes obviously it can
  125. 4:55take longer time to build the system
  126. 4:57then build like do everything manually
  127. 4:59and so we don't always save time from
  128. 5:01that but it's also that very very
  129. 5:02repetitive tasks tend to get quite
  130. 5:04boring and they're also harder to tweak
  131. 5:05in the end I think that if you build
  132. 5:07very systems based things where you can
  133. 5:09like tweet individual variables and
  134. 5:10everything changes yeah so those are
  135. 5:14sort of the basic things that hopefully
  136. 5:15will keep coming back to us we take a
  137. 5:17look inside the game so yeah this is bad
  138. 5:20north how many here have played bad
  139. 5:22north so a few people how many people
  140. 5:25have seen bad north more people okay
  141. 5:28well everyone who roasts that had the
  142. 5:30second type but not the first byte yeah
  143. 5:34so this like the campaign view it's
  144. 5:35changed a little bit from the version
  145. 5:37that's out there right now and from the
  146. 5:40campaign we can enter one of the many
  147. 5:42islands and of course this is
  148. 5:44procedurally generated so we'll start
  149. 5:46taking talking a little bit about what
  150. 5:48goes into making these islands as I said
  151. 5:51they're procedurally generated they use
  152. 5:53an algorithm called wavefunction
  153. 5:57collapse which I didn't name it it's
  154. 5:59quite a weird name but it comes from
  155. 6:01sort of an idea of like building a
  156. 6:03possibility space and then sort of
  157. 6:04collapsing it until you have one final
  158. 6:06solution so the way but the way I
  159. 6:11interface with it which is actually
  160. 6:12quite easy to understand is I just give
  161. 6:14it a bunch of like tiles that I build in
  162. 6:16Maya 3d tiles that looks like this and
  163. 6:18then the algorithm figures out how to
  164. 6:20assemble them into complete levels that
  165. 6:23also ties into the very I guess I said
  166. 6:26minimal work for minimal workflow thing
  167. 6:28where I can just throw in new tile
  168. 6:31assets generate new levels and I'll get
  169. 6:33to see what those look like
  170. 6:34so obviously right now I have like quite
  171. 6:37a few tile
  172. 6:37going on here I think there's 400
  173. 6:40something like that which obviously like
  174. 6:41took a long time to build but I did that
  175. 6:44over two years time but when I was just
  176. 6:47trying out the algorithm in the
  177. 6:49beginning and like trying to nail down
  178. 6:50the basic feel of the shape of the
  179. 6:53island like how big are my bevels what
  180. 6:56are like how frequent are my detail
  181. 6:58stuff like that basically everything I
  182. 7:01worked with was like these tiles over
  183. 7:03here something like that so I needed
  184. 7:05like 10 tiles and then the algorithm
  185. 7:06figures out how to build that into
  186. 7:08separate levels so a benefit you have
  187. 7:11from that is you don't have to like
  188. 7:13sometimes with procedural content you
  189. 7:15have to make a lot of different
  190. 7:16permutations of things before it starts
  191. 7:18working but with this algorithm you
  192. 7:20don't which makes it much quicker to
  193. 7:22work with and you don't have to make all
  194. 7:23the weird like diagonal fitting pieces
  195. 7:26to work with every single use case
  196. 7:28because the kind of the tiles themselves
  197. 7:30restricts what kind of levels it can
  198. 7:32build out of them again of course if you
  199. 7:36build a game out of tiles like this or
  200. 7:38any game out of tiles that again ties
  201. 7:41into the sort of order thing where like
  202. 7:43you establish very very clear pattern so
  203. 7:45you have a tile based game grid based
  204. 7:47game and that's something we've
  205. 7:48obviously largely leaned into it is a
  206. 7:51very gridded island it looks like a like
  207. 7:53it's a more blocky than an island would
  208. 7:55look like in real life
  209. 7:56and obviously the basic gameplay of the
  210. 7:59game as well like the grid squares you
  211. 8:02move your units to are on the same grid
  212. 8:05as the game is being generated on but
  213. 8:07then of course make patterns break
  214. 8:09patterns we do a bunch of little small
  215. 8:11things just to make it like to break up
  216. 8:14the super obvious blockiness of it one
  217. 8:17of the things we do is to implement it
  218. 8:20and this is like one of also one of my
  219. 8:21contributions I think to to this because
  220. 8:23I didn't invent this algorithm but one
  221. 8:25thing that I brought to the algorithm is
  222. 8:27adding these sort of tiles that span
  223. 8:29across multiple grid squares so here's a
  224. 8:32good example of that this little tile
  225. 8:35here like actually consists of our
  226. 8:39module we call them this little module
  227. 8:40actually spans across across the two
  228. 8:42tiles which makes that we can put like a
  229. 8:44little bit more of a crack into it that
  230. 8:46like makes it a little bit larger sort
  231. 8:48of rounds off the shape a little bit
  232. 8:49more
  233. 8:50removes that super obvious sort of grid
  234. 8:53size from the rest of the game so that's
  235. 8:57a quite subtle way of doing at that that
  236. 8:59also means that we can sneak in stuff
  237. 9:02like this like this little sort of
  238. 9:03tunnel here or yeah we have some like
  239. 9:10bridge just going about some caves and
  240. 9:13bridges going on and of course having
  241. 9:14things stretch across multiple tiles
  242. 9:16also means that we can do stairs which
  243. 9:19you like you need so the game doesn't
  244. 9:20all play on take place on one level also
  245. 9:25just like from making this tool as I
  246. 9:27said workflow is very very important and
  247. 9:28when you make procedural content
  248. 9:31especially if you're not the same person
  249. 9:33writing the algorithm and doing the
  250. 9:36producing the art for it you might end
  251. 9:38up with tools that require you to put in
  252. 9:40a lot of custom data like you make some
  253. 9:42tiles export them to the game and then
  254. 9:44you have to say import them into the
  255. 9:45engine and then like mark things up to
  256. 9:47tell them what's going on in different
  257. 9:49tiles but that's all been automated here
  258. 9:50so as you see if I highlight an edge
  259. 9:54here it will highlight in yellow all the
  260. 9:56other edges that look the same so that's
  261. 9:59just like the import algorithm like
  262. 10:01looking through the mesh looping through
  263. 10:03the edges and see what fits where yeah
  264. 10:07and if I like I like this side you'll
  265. 10:08see everything with a straight edge
  266. 10:09everything with a straight horizontal
  267. 10:12edge stuff like that
  268. 10:13another little fun thing that I'm it's
  269. 10:16quite tiny but I'm quite proud of it
  270. 10:17that big breaks up the repeted
  271. 10:19repetition a little bit is like if you
  272. 10:22know is this very basic corner here it's
  273. 10:25not entirely symmetrical like this is
  274. 10:28not a 45-degree edge it's like slightly
  275. 10:29slanted which means that if you put
  276. 10:31together like a sort of pillar it will
  277. 10:38end up having slightly different like it
  278. 10:40can be a bit pointy like this or it can
  279. 10:42be a little bit duller or like it can be
  280. 10:44a little bit a symmetrical stuff like
  281. 10:45that this is a very very basic thing to
  282. 10:47break up that they're the most common
  283. 10:49parts of the level without adding
  284. 10:51additional clutter to it because that's
  285. 10:53another important thing and in addition
  286. 10:56to that I have another very tiny thing
  287. 10:58which is like these little right because
  288. 11:01that you want to intimate some
  289. 11:02additional detail too so this is a
  290. 11:03little sort of
  291. 11:04dr. piece that has a little bit of a
  292. 11:06crack in it and it flips the asymmetry
  293. 11:11so you can have like a plane going one
  294. 11:13way and then this little crack shows up
  295. 11:15and then the play goes another way so
  296. 11:16it's a way to introduce like a little
  297. 11:18bit of extra detail almost kind of a
  298. 11:20little bit of a texture to the cliff and
  299. 11:23again the tech the sort of texture crack
  300. 11:25here appears on the edge not on the side
  301. 11:28of the cliff because the site isn't an
  302. 11:30interesting place what's interesting is
  303. 11:31what happens when the cliff bends but it
  304. 11:34also produces some meaning in that it
  305. 11:35flips the the side so it sort of creates
  306. 11:37a bigger pattern than than just the
  307. 11:39crack itself this is a very small thing
  308. 11:42another thing we do to break up the
  309. 11:47tiles that's actually not in the
  310. 11:49released version of the game right now
  311. 11:51but we'll see in an update fairly soon
  312. 11:53because I've just made this the other
  313. 11:54day and I'm quite happy to show you it's
  314. 11:56quite subtle again like a lot of things
  315. 11:58in this game
  316. 11:59is this little thing here oh yeah yeah
  317. 12:08so it's very very subtle but it's a way
  318. 12:11to just like smooth out the island a
  319. 12:13little bit so this is what the release
  320. 12:14version looks like now so all the edges
  321. 12:16are straight and of course like if you
  322. 12:18work with these kind of tile based
  323. 12:20things you're like that can easily
  324. 12:22happen because of course this piece here
  325. 12:24doesn't know that the that there's going
  326. 12:27to be a like an end to it here right so
  327. 12:31it has to be purely straight but then I
  328. 12:34add this little effect afterwards and
  329. 12:37this also like it's a way to smooth out
  330. 12:39the entire thing but it does very much
  331. 12:40tie-in to the fact that the game is like
  332. 12:43voxel-based and gridded from the
  333. 12:44beginning because what happens is if we
  334. 12:47just look at the island generation and
  335. 12:50then we'll find the right Island here's
  336. 12:52the island there's like a voxel space
  337. 12:57yeah we create a voxel space from the
  338. 13:01island some of it's quite obvious it
  339. 13:03happens from the pieces but also as you
  340. 13:05can see here the trees add a little bit
  341. 13:07of sort of voxel coverage to them this
  342. 13:09is used for lighting as well we'll get
  343. 13:11more into that later but if you have a
  344. 13:13voxel space space that means that you
  345. 13:15can also drip drive normals from that
  346. 13:16and those normals you can use
  347. 13:18for the lighting but you can also use
  348. 13:20them to push the edges a little bit of
  349. 13:23the entire thing to sort of smooth out
  350. 13:24the entire thing this is quite a nice
  351. 13:27little thing very small bit quite nice
  352. 13:33yeah and to this sort of abstractions
  353. 13:36part there's a like I've tried to be
  354. 13:38very very limited in what kind of things
  355. 13:40I put into the island right there's very
  356. 13:42very few colors going on in the base
  357. 13:44island there's basically three elements
  358. 13:45here there's walkable areas non walkable
  359. 13:48areas and cliffs and that's it
  360. 13:50right so that's because that's what you
  361. 13:52care about when you play the game you're
  362. 13:53like where can my troops go where's the
  363. 13:56like and where are the where are the
  364. 13:58different layers and where are the paths
  365. 13:59between the different layers so I don't
  366. 14:01need to have a rock texture telling you
  367. 14:03over and over again there's a rock here
  368. 14:04Rock here Rock here Rock here what
  369. 14:06you're interested in it's like breaking
  370. 14:08it down what's walkable what's not
  371. 14:09walkable so that's like all I'm playing
  372. 14:11towards with yeah but the colors here
  373. 14:18and also the the forests of course play
  374. 14:25into this as well and we here we also
  375. 14:26have a very clear case of this sort of I
  376. 14:28mean in a very literal sense trying to
  377. 14:30avoid not seeing the forest for all the
  378. 14:32trees because it's a common area you can
  379. 14:33do especially maybe I said quite junior
  380. 14:35artist is you would make a very
  381. 14:36beautiful detailed tree but then you put
  382. 14:39it into an environment and then that
  383. 14:40tree is like way too complex and if you
  384. 14:43put a thousand of those trees around it
  385. 14:44becomes a very very cluttered whereas as
  386. 14:46a player you're probably just interested
  387. 14:47in like there's a forest here so my
  388. 14:49trees are like deliberately like they
  389. 14:51have a little bit of a texture to them
  390. 14:53and if you look very very closely you
  391. 14:54can see you know what kind of trees they
  392. 14:56are and you see that from the silhouette
  393. 14:57as well but mostly they just blend
  394. 14:59together in this larger blob which helps
  395. 15:02you read the entire environment faster
  396. 15:04and that also ties into the lighting
  397. 15:06where like you can see if we just get
  398. 15:11back the sunset yeah when the side comes
  399. 15:16into the side that from the side the
  400. 15:18trade again they use these kind of
  401. 15:19normals from the voxel space so when the
  402. 15:21light comes from the side they light up
  403. 15:24the trees as a blob instead of lighting
  404. 15:26up each individual tree just again a way
  405. 15:29to sort of build these larger
  406. 15:30abstractions and Shea
  407. 15:31rather than focus on the individual
  408. 15:33components another very tiny thing of
  409. 15:37sort of make patterns break patterns
  410. 15:38thing is how the when we have this
  411. 15:43little slopes in the grass here these
  412. 15:45are way patcher than the rest of the
  413. 15:47grass right we have these very calm
  414. 15:49areas that sort of marks the main areas
  415. 15:52of navigability the plains but then you
  416. 15:55have these more patchy areas that sort
  417. 15:56of draw your attention a little bit more
  418. 15:58that mark out the places where you can
  419. 16:00navigate between the different levels
  420. 16:01there's an easy way to sort of mark up
  421. 16:03those slightly more important this is
  422. 16:05also a thing that we are it doesn't look
  423. 16:08exactly like that in the released
  424. 16:10version of the game but this is coming
  425. 16:11out in a patch quite soon sort of being
  426. 16:14a bit more consistent in how we use
  427. 16:15grass and not grass to to communicate
  428. 16:20navigability yeah and of course another
  429. 16:26interesting like as I said the a very
  430. 16:29like in the borders not texture thing we
  431. 16:33have the smooth gradient sharp outlines
  432. 16:35so there's a bunch of different ways our
  433. 16:37clients are getting generated here
  434. 16:40there's a bunch of different techniques
  435. 16:41to do outlines but one thing I do for
  436. 16:43the trees here for example and this is
  437. 16:44also a thing I added very recently is we
  438. 16:46just turn off the voxels base you'll see
  439. 16:53that the like here in the perspective it
  440. 16:55looks a little bit weird but you see
  441. 16:56that each tree has like a little bit of
  442. 16:57a shadow behind it so that's that means
  443. 17:00it's drawing each tree twice and the
  444. 17:03first time it draws it it draws a darker
  445. 17:05pushed back a little bit and one pixel
  446. 17:07further out and then it draws it again
  447. 17:09in the right place and one pixel further
  448. 17:11in in the right color so that means that
  449. 17:14the outlines of the trees they will kind
  450. 17:16of form a common outline sometimes so
  451. 17:18here you can I don't know how Oh
  452. 17:19actually I think I implemented a thing
  453. 17:21too
  454. 17:22does that work yeah it kind of works so
  455. 17:31you can see that the yeah the treat like
  456. 17:33they form a common outline here and you
  457. 17:35yeah they form more of a yeah of a
  458. 17:37common blob more than individual blobs
  459. 17:38because I push them like that yeah and I
  460. 17:43mean obviously here we see also all the
  461. 17:45kinds of other
  462. 17:45techniques I use for like for the island
  463. 17:48itself I use this very I mean it's a
  464. 17:50basic very old-school technique where I
  465. 17:52just draw the mesh twice once inside out
  466. 17:55and once right side out one pixel pushed
  467. 17:58out the first time in one pixel pushed
  468. 17:59in the second time obviously when you
  469. 18:02have the pushed out as far as this this
  470. 18:04looks very artifacting you get these
  471. 18:05weird like spiky triangles at the other
  472. 18:07edges but if you pull it back to just be
  473. 18:10one pixel effect it looks it looks good
  474. 18:13especially with some interior icing on
  475. 18:15it and even more so this is a trick I'm
  476. 18:18quite proud of - you see the actually
  477. 18:21put a separate slider on that one you
  478. 18:23see the little like the shadow under the
  479. 18:26grass so that's also all done in shader
  480. 18:28and it uses a a trick like it's a it's a
  481. 18:32shader function called dvy which
  482. 18:34measures how a pixels value changes in
  483. 18:38the vertical axis of the screen and you
  484. 18:40can use that like to do things like put
  485. 18:43a tiny bit of shader underneath a tiny
  486. 18:45bit of shadow underneath something in
  487. 18:47just one pass in the shader without
  488. 18:48drawing drawing like the shadow in one
  489. 18:51polygon and then the the grass on top of
  490. 18:53that on another polygon that's also the
  491. 18:55like that also breaks up a ton around
  492. 18:58the edges of the triangles but you don't
  493. 19:01really know is that if you pull it down
  494. 19:03to just one pixel like that this is
  495. 19:06quite neat so it produced an outline but
  496. 19:07the outline gives also gives a
  497. 19:09three-dimensional feeling to it
  498. 19:10a lot of the a lot of the art in bad
  499. 19:13North tries to blur the line between 2d
  500. 19:16and 3d and that's one way we do it quite
  501. 19:20technically also for the forests and
  502. 19:23also for the units in the game we use
  503. 19:27like they of course billboard which is
  504. 19:29also something you don't really notice
  505. 19:30because they're so subtle in themselves
  506. 19:33but they are just billboarding planes
  507. 19:34and we do that billboarding in the
  508. 19:38vertex shader instead of doing it in
  509. 19:40c-sharp because that would be that would
  510. 19:41be quite slow but doing in the vertex
  511. 19:43shader is very very fast yeah and so we
  512. 19:49have the sharp lines and of course what
  513. 19:50produces most of the soft gradient in
  514. 19:52the game is the lighting which is a
  515. 19:54quite a specialized way of doing
  516. 19:57lighting that birds really well
  517. 19:59if you have a voxel-based game
  518. 20:00especially if you have very low res
  519. 20:02voxel-based game so this is what it
  520. 20:04would look like without lighting there's
  521. 20:06still a bit of normal lighting going on
  522. 20:08but I think if we because we can put in
  523. 20:11a bit of an overcast and some cloud
  524. 20:13coverage then you see there's almost
  525. 20:15there's still a tiny bit of normal
  526. 20:17lighting happening but it's very little
  527. 20:18but if we add the lighting to it like
  528. 20:20there's a nice bit of AO to it the way
  529. 20:22the AO is done is we do a sort of ray
  530. 20:26marker but a very very simplified ray
  531. 20:28marcher from a bit a little visualizer
  532. 20:30actually yesterday for it so if we
  533. 20:33sample from a position here you'll see
  534. 20:36how it's sort of a tree going out from
  535. 20:40that position so it's actually not ray
  536. 20:43marching in sharp in straight lines but
  537. 20:45it doing it in a tree structure so if it
  538. 20:47stops early it doesn't have to keep
  539. 20:48branching out from there so it doesn't
  540. 20:50produce perfect lines but it's perfectly
  541. 20:53good enough for something as soft as the
  542. 20:55shadows we use in bad north so that's
  543. 20:58also a way we're like the technical
  544. 21:00aspects of it and the technical
  545. 21:01limitations of the specific game we're
  546. 21:03making sort of tie that into the the art
  547. 21:07in a way that doesn't yeah that sort of
  548. 21:09makes them all come together as one so
  549. 21:13you'll see if I put it put that one down
  550. 21:14here you'll see how that area is darker
  551. 21:16and it is darker but because this sort
  552. 21:18of tree structure gets blocked and that
  553. 21:21also gets baked down into an AO texture
  554. 21:25so this is like a 3d texture so these
  555. 21:27are like the slices you can see the
  556. 21:28shape of of the island here and you see
  557. 21:32it's like darker here because this like
  558. 21:33underwater this is the lowest level and
  559. 21:35then it gets brighter and brighter and
  560. 21:37fewer and fewer obstacles as you as you
  561. 21:38go up from there and having having that
  562. 21:41lighting information in a very low res
  563. 21:433d texture also mean that it's really
  564. 21:45cheap to sample the lighting in all
  565. 21:47kinds of things apart from the static
  566. 21:50environment so in like the unit's
  567. 21:52walking around I can just sample the 3d
  568. 21:54textures to get their lighting the
  569. 21:55particle systems can sample this all the
  570. 21:58little rasp it's can sample this so it's
  571. 22:01a very it's very fast to to generate
  572. 22:04because it's so low resolution and it's
  573. 22:06very it's very fast to calculate as well
  574. 22:09because you just have to sample that and
  575. 22:11then map it to like an inn
  576. 22:13the value and then you have the lighting
  577. 22:14so that's one way to produce very soft
  578. 22:17gradients that give you a sense of the
  579. 22:20three dimensionality of the island
  580. 22:22without taking a lot of attention from
  581. 22:24like sharp shadows and weird shapes
  582. 22:26keying getting created by that yeah and
  583. 22:32now I thought we were gonna take a look
  584. 22:34at the units of the game it's of course
  585. 22:38a very very important part of the
  586. 22:39gameplay here we have the three or no
  587. 22:42the four basic unit types of the game so
  588. 22:44it's like you can hear a little bit get
  589. 22:48them walking around - so we got some
  590. 22:50archers we got some pike men we've got
  591. 22:52some sword and shield guys again they
  592. 22:56there's a very basic thing here tying
  593. 22:58into the idea of abstractions where the
  594. 23:00units move around in groups and they
  595. 23:04stand around in squares so it's all
  596. 23:06about trying to make the unit's read as
  597. 23:08a group and not as individual units most
  598. 23:11of the time though a lot of the time
  599. 23:13they do break up in individual units
  600. 23:14fighting together and that's sort of
  601. 23:16when you start to lean into the more
  602. 23:17chaotic aspects right so when
  603. 23:18everything's going well for you your
  604. 23:20strategy is working your defense is
  605. 23:21working your units stand around in nice
  606. 23:25squares work in unison like the the
  607. 23:27archers fire in synchrony stuff like
  608. 23:30that but when your defense strategy
  609. 23:32starts to break up like and I mean
  610. 23:33individual units are like all fending
  611. 23:35for themselves in all kinds of different
  612. 23:37part of the maps and it becomes quite
  613. 23:38like hard to read the battlefield so
  614. 23:40that's a fairly central thing of the
  615. 23:44basic drama but also to of course the
  616. 23:46design of the units is just like what
  617. 23:48the trees are they're supposed to be
  618. 23:51very simple of just a very simple
  619. 23:53silhouette so that when they stand
  620. 23:55together in a group they like blend
  621. 23:57together as a square there also because
  622. 24:01this was like making the units was
  623. 24:03actually one of the early on and like
  624. 24:05doing the basic R&D for this game
  625. 24:07figuring out a good workflow for making
  626. 24:09the units was actually one of the bigger
  627. 24:10hang-ups but it was quite difficult to
  628. 24:13figure out how to do that in a way that
  629. 24:15doesn't require a lot of work doing a
  630. 24:16lot of different animations require a
  631. 24:18very sort of labor-intensive export
  632. 24:20pipeline where you like have to do a
  633. 24:22bunch of different animations for
  634. 24:23different styles of units and export
  635. 24:25them that important
  636. 24:26unity mark up the sprites and I put the
  637. 24:28sprites into different animations stuff
  638. 24:30like that and also take like a lot of
  639. 24:33texture space doing all the animations
  640. 24:35wanted to do so we where I came up with
  641. 24:38a what I think is a fairly clever
  642. 24:41solution there were all these units the
  643. 24:45sprites they use all look like this and
  644. 24:48they are that low resolution so there
  645. 24:52are three different like animation sets
  646. 24:55being used for all units in the game
  647. 24:56it's units with no shield no sword like
  648. 25:02the guys with my archers do actually
  649. 25:05have yeah my archers and there are and
  650. 25:07my Spears and there are units with a
  651. 25:09sword in the back hand so those are the
  652. 25:11guys have a shield in the front hand and
  653. 25:12there are the units with just disorder
  654. 25:14and those get reused like throughout the
  655. 25:17game and you see that the colors are all
  656. 25:19weird here and they have like a big
  657. 25:20square blobby heads that's because the
  658. 25:23colors here are actually UV coordinates
  659. 25:25that I then used to look up a deed a
  660. 25:29more detailed texture that contains
  661. 25:31stuff like the yeah the helmet here and
  662. 25:35so the specific style so these units are
  663. 25:38all like using the same basic animations
  664. 25:40but then I swap out what texture I'm
  665. 25:42mapping to those UV coordinates that
  666. 25:44also means that I can have quite high
  667. 25:45resolution helmets and specific things
  668. 25:50that are like unique for each character
  669. 25:52but I can have very low resolution
  670. 25:55especially since they're so blobby in
  671. 25:56the shape I can have very low resolution
  672. 25:59sprites that I need to animate and of
  673. 26:02course the ones I have to animate I have
  674. 26:03to export like a bunch of different
  675. 26:04versions of so that that's really
  676. 26:05helpful yeah and also since they are so
  677. 26:11blobby in the shape we actually were not
  678. 26:13doing we're just animating them in two
  679. 26:15different directions or in one direction
  680. 26:17and then mirroring them or not doing
  681. 26:19like towards the camera and away from
  682. 26:22the camera not back in front as you can
  683. 26:25see them like as you turn the camera you
  684. 26:26see them you see these guys flipping
  685. 26:28their swords like that which is like if
  686. 26:31you are looking for it you do know is it
  687. 26:33happening but when you're playing the
  688. 26:34game you don't think about it and I've
  689. 26:35had a lot of people playing the game and
  690. 26:37when I tell them the units are too
  691. 26:39they were like okay I didn't know is
  692. 26:41that so that's quite neat because they
  693. 26:44read more as a group and the group is of
  694. 26:46course three-dimensional because there
  695. 26:47are like units and spread out in
  696. 26:49three-dimensional space in the group and
  697. 26:51because some of the units like these
  698. 26:53shield guys here also have some parts of
  699. 26:56them that are not two-dimensional but
  700. 26:58there are three-dimensional you see the
  701. 26:59shield's here just floating in front of
  702. 27:01them you're sort of tucked into them
  703. 27:03kind of clipping them but that's also
  704. 27:05since there's just one color you don't
  705. 27:07really notice that they don't have an
  706. 27:09arm properly or stuff like that and
  707. 27:11that's also because the like just the
  708. 27:14silhouettes of a guy with a sword in one
  709. 27:16hand the sword like the guys kind of
  710. 27:18symmetrical the sword is kind of
  711. 27:19symmetrical if you mirror that one you
  712. 27:21don't really know is it especially if
  713. 27:22you're standing in a group but stuff
  714. 27:24like the shield that's very very
  715. 27:26important in again sort of trying to
  716. 27:28play to the right abstractions
  717. 27:29expressing the sort of directionality of
  718. 27:31the entire group like where's the group
  719. 27:33looking what kind of enemies are the
  720. 27:35group caring about how are they moving
  721. 27:37stuff like that so that's why the the
  722. 27:40it's much more important that the three
  723. 27:42that the shield is three dimensional and
  724. 27:44the character is three dimensional and
  725. 27:45that's the same with with the arrows and
  726. 27:49the bows to like the bows are 3d because
  727. 27:54the like with the sword you can I don't
  728. 27:57know if how many of you have animated
  729. 27:58mellow things but with a sword
  730. 28:00you can get away with a lot like you
  731. 28:02just do a quick swipe in the air and it
  732. 28:04doesn't really matter in what direction
  733. 28:05and then a guy gets hit by that and you
  734. 28:07kind of buy it but with a thing like a
  735. 28:09bow if you aim pick up the bow aiming
  736. 28:11one way and release it and then the
  737. 28:12arrow fires that way like it looks it
  738. 28:14looks really weird but if we have a
  739. 28:16three-dimensional bow then that solves
  740. 28:18that quite easily
  741. 28:19another more extreme example of that is
  742. 28:22of course the spears which we've done
  743. 28:24with a separate sprite for the spear
  744. 28:26itself so we can aim it in different
  745. 28:28direction with the spear is like it's
  746. 28:30even more difficult than a boat because
  747. 28:32the bow is kind of like a gun you just
  748. 28:33need to aim it and shoot it but a spear
  749. 28:35has to have a lot of weight to it to she
  750. 28:38like aiming it in one direction and then
  751. 28:39if the unit comes from another direction
  752. 28:42you don't want it just twitching around
  753. 28:43with this pew you want to keep it in one
  754. 28:44direction you want to point in the right
  755. 28:46direction before you hit and keep
  756. 28:48pointing about the direction afterwards
  757. 28:49stuff like that so that's why the spear
  758. 28:51is a separate thing but not the sword
  759. 28:54this approached units comes with one
  760. 28:56very interesting limitations is I
  761. 28:58haven't actually figured out how to do
  762. 28:59good looking axis in the game which
  763. 29:02might sound like a word thing if you're
  764. 29:03making a very Viking themed game like
  765. 29:05you might want axes in there but I and a
  766. 29:07lot of people have said that I've tried
  767. 29:09several times but it's been really hard
  768. 29:10making good looking axes work because if
  769. 29:15you just put them into the sprite like I
  770. 29:17do with the swords they it becomes super
  771. 29:19obvious that all the accents in the game
  772. 29:21are either pointing that way or that way
  773. 29:23and you really see them flipping around
  774. 29:26you could do it in 3d possibly probably
  775. 29:28but then like when you animate things
  776. 29:31that are three-dimensional you need to
  777. 29:33put a lot more work into them looking
  778. 29:36nice and feeling weighty
  779. 29:37than when you do two-dimensional things
  780. 29:38so it's possible that an axe could work
  781. 29:41like possibly with a big enemy like a
  782. 29:44boss character something like that could
  783. 29:46possibly have a 3d axe he drags around
  784. 29:47and does some animations with then it
  785. 29:49could be more gimmicky or stuff like
  786. 29:50that but they're very like axis for
  787. 29:52regular units has been it has been very
  788. 29:54hard so we've just skipped it we do have
  789. 29:55axe throwers though but that's easier
  790. 29:57because then the axes just throw flying
  791. 29:59in the air yeah another thing that kind
  792. 30:05of ties into this abstraction idea as
  793. 30:07well is that since the game is kind of
  794. 30:10zoomed out most of the most of the kind
  795. 30:14of animation or how the game feels when
  796. 30:17it moves doesn't really come from the
  797. 30:20animation of the individual units it
  798. 30:22much more comes from the behavior of the
  799. 30:25group and how they like from writing the
  800. 30:27AI I feel like I'm doing more animation
  801. 30:29when I'm writing the AI than when I'm
  802. 30:30actually animating the sprites because
  803. 30:33it's much more important like how they
  804. 30:35react to each other when they back off
  805. 30:36when they move forward how they like
  806. 30:38flow around when they walk around stuff
  807. 30:40like that
  808. 30:41then like how the arms moving or how the
  809. 30:44legs moving stuff like that because
  810. 30:46because the game is so zoomed out I
  811. 30:48think I think that's an a good takeaway
  812. 30:51in general that when you do animations
  813. 30:53for a game it's usually much like you
  814. 30:56can make great-looking animations but if
  815. 30:57you don't put a lot of work in to claim
  816. 30:58the right animation at the right time I
  817. 31:00like moving around in the right way it's
  818. 31:02probably not gonna look good so it's
  819. 31:03probably better to have that good
  820. 31:05looking good
  821. 31:06movement then good-looking animations is
  822. 31:08probably more important to have
  823. 31:09good-looking animations than
  824. 31:10good-looking characters in that order
  825. 31:19yeah so those are kind of some of the
  826. 31:23basic ideas going on here
  827. 31:26additionally the yeah the the water the
  828. 31:29way I've done the water here is it's a
  829. 31:32fairly basic it's I get a lot of
  830. 31:34questions about it but it's really
  831. 31:35simple it's just like a mesh here that
  832. 31:38place this sort of looping wavy shader
  833. 31:40all over again it's pretty simple shader
  834. 31:42and it also ties into the idea of
  835. 31:46expressing things in borders and not in
  836. 31:48like textures not in field so the what
  837. 31:51most of the water is just completely
  838. 31:52flat but then at the edge when something
  839. 31:55meets the water I highlight that instead
  840. 31:59so I don't need to tell you like over
  841. 32:01and over its water its water its water
  842. 32:03its water its water it's more like where
  843. 32:05these two materials meet there's a
  844. 32:07coastline that's it and I thought we're
  845. 32:10gonna try and actually get some enemies
  846. 32:15in here see if that works
  847. 32:19I think it did work see what the game
  848. 32:22looks like more like in motion and how I
  849. 32:26don't know if this is gonna be a
  850. 32:27difficult level or an easy level and see
  851. 32:31more of there's also of course this yeah
  852. 32:32I mean and you get very much this
  853. 32:34symmetry idea to with like when the game
  854. 32:36actually starts playing so you have this
  855. 32:37like quite isolated level in the middle
  856. 32:40is usually kind of tall in the middle
  857. 32:42and then flatter towards the sides and
  858. 32:44you have the enemies coming in from the
  859. 32:45side yeah you see them trying to burn my
  860. 32:55house down okay this might actually be a
  861. 32:58very difficult level down house there
  862. 33:00and it also ties into the the order and
  863. 33:03chaos kind of thing where your units are
  864. 33:05like restricted to moving in grid units
  865. 33:09and defending yeah working in grid units
  866. 33:12whereas the enemies they just flow
  867. 33:14through freely and they your units are
  868. 33:16just standing standing on their grid
  869. 33:18squares where the enemies like coming
  870. 33:19from all over the place
  871. 33:20with like ships angled in all kinds of
  872. 33:22direction stuff like that the houses
  873. 33:24you're defending they are all kind of
  874. 33:27aligned to the grid whereas the enemy
  875. 33:30ships are like pointing in all kinds of
  876. 33:32different directions and of course as
  877. 33:34you keep playing the game the the island
  878. 33:36turns from this like quite orderly
  879. 33:38quaint looking nice
  880. 33:42yeah idyllic Island to this very messy
  881. 33:46bloody chaotic place so even if you win
  882. 33:48the game it still it still looks quite
  883. 33:50tragic it looks like like you won but
  884. 33:53you know it was still a pretty horrible
  885. 33:54battle and a lot of your units died and
  886. 33:56so it's been so it's been quite
  887. 33:59important this for me to like leave the
  888. 34:02corpses and bloody the level as you keep
  889. 34:04playing the game also as a way of
  890. 34:05environmental storytelling okay I think
  891. 34:10I'm going to lose this game I didn't pay
  892. 34:12attention really also a lot of the
  893. 34:16abilities in the game try to write so
  894. 34:19these units here are probably going to
  895. 34:21die pretty fast but the the abilities
  896. 34:24also I tried to make them look quite
  897. 34:26orderly so they feel like you regain
  898. 34:28control for a moment so they're like
  899. 34:31trying to hold the ground there but if I
  900. 34:33send them there they get to do this very
  901. 34:36sort of okay now it was just one guy
  902. 34:38doing it but they get to do like a very
  903. 34:39synchronized motion together where they
  904. 34:42are also involve also you're like in
  905. 34:43control for a little while until it all
  906. 34:45falls apart again yeah I'm definitely
  907. 34:49going to lose this
  908. 34:54yeah there you go yes so those are kind
  909. 35:00of the things I had them prepared we can
  910. 35:04just take a look at a few more Islands
  911. 35:07and I would be happy to take some
  912. 35:09questions from the audience and since
  913. 35:12I'm in unity you can all ask all kinds
  914. 35:13of things and I can like poke around and
  915. 35:15answer thanks if you if you want to are
  916. 35:28the islands on the world map
  917. 35:29pre-generated for that map and then they
  918. 35:32look the same with a procedural
  919. 35:34generation in 3d or is it just sort of
  920. 35:36abstract in the map and then whatever
  921. 35:39they look like no they look the right
  922. 35:40way on the map so you can you can
  923. 35:42definitely see especially if you've
  924. 35:43played the game for a bit or made the
  925. 35:45game you can like you see this really
  926. 35:46weird thing going on here if we enter
  927. 35:49that level we will definitely like we
  928. 35:51will see that shape here right so know
  929. 35:54that they're correctly they look the
  930. 35:56right way the way we do it is we Ghent
  931. 35:58like we have this cloud which also has
  932. 36:02changed look now in the campaign screen
  933. 36:05here you see right so this also again
  934. 36:09place into the like the border is quite
  935. 36:10detailed but then the this is quite flat
  936. 36:13so these are like the behind this are
  937. 36:16levels you haven't discovered yet of
  938. 36:17course you know you've played the game
  939. 36:18but we generate like we try and generate
  940. 36:21ahead of the so like the next levels
  941. 36:23will have been gotten generated now and
  942. 36:25when we generate the level we take us
  943. 36:28like a snapshot of it from above baked
  944. 36:30that down into a texture that we also
  945. 36:33then save to the same file so whenever
  946. 36:35you start up and you start up or load a
  947. 36:38game it has to generate all the levels
  948. 36:39again but if it has already generated
  949. 36:41them once then it'll they already know
  950. 36:44what they look like and they also know
  951. 36:45they also have a seed that will work
  952. 36:47with the generation so actually we will
  953. 36:49be pushing fairly soon and update to
  954. 36:51what some of the tiles look like and a
  955. 36:53few new tiles so then if you load an old
  956. 36:56save you'll see some of the islands
  957. 36:57changing shape on the world map as they
  958. 36:59load
  959. 37:09hi
  960. 37:10so the the island smoothing effect is
  961. 37:14that the verdict are you pushing the
  962. 37:16verticals around or is it the shader
  963. 37:18effect I am pushing the so the thing I
  964. 37:21did now with a slider that's something I
  965. 37:23prepared yesterday so I am actually
  966. 37:25encode like when I because I am merging
  967. 37:27all the islands into one yeah into one
  968. 37:33mesh and then I'm looping through the
  969. 37:35looping through the vertices and all
  970. 37:36pushing them the same way but it's not
  971. 37:38enough to just push the the mesh itself
  972. 37:41because there are all kinds of other
  973. 37:42things that tie into as well right when
  974. 37:44I run the grass placing algorithm for
  975. 37:46example that has to run on the same like
  976. 37:48slightly modified world and then the
  977. 37:50navmesh of will the grass runs on the
  978. 37:52navmesh but the navmesh too has to be
  979. 37:54modified in the same way as the island
  980. 37:57so here I just did like I do that but
  981. 38:00then I also saved the offset so I could
  982. 38:02then in a shader like reapply there the
  983. 38:04old offset but yeah sorry I'm taking
  984. 38:08another question are you using this both
  985. 38:10in that mesh or your own no though I
  986. 38:11built my own it's it's even like you can
  987. 38:14actually see if you look at the
  988. 38:16different like the green part here in
  989. 38:20the meshes that's actually the nav mesh
  990. 38:23so I build that in like I build the nav
  991. 38:25mesh pieces in Maya just like I would
  992. 38:27build the regular mesh then I asked when
  993. 38:30it's already built when it's built the
  994. 38:32level it takes all the navmesh pieces
  995. 38:33and type together and build a nav mesh
  996. 38:34out of that actually writing the nav
  997. 38:36mesh is really fun and I can recommend
  998. 38:38writing your own nav mission it's much
  999. 38:39more fun than you even think it is a lot
  1000. 38:41of very very small math problems how
  1001. 38:47much work in precision has to go into
  1002. 38:50making each like module to make them fit
  1003. 38:53together yet to make them victor yeah
  1004. 38:54good question so there is some there's
  1005. 38:58different ways you could do this but the
  1006. 38:59way I do this is I from side I generate
  1007. 39:02a hash value from like the positions of
  1008. 39:05the edge but then I round them somewhat
  1009. 39:07so it doesn't have to be perfect
  1010. 39:10precision but since it's a rounding
  1011. 39:12thing like if I end up if I have two
  1012. 39:14things that are almost exactly the same
  1013. 39:16but they just happen to be on opposite
  1014. 39:18like sides of the rounding then they
  1015. 39:21won't fit together so that especially in
  1016. 39:25the beginning it was a little bit of a
  1017. 39:27hassle but now I have a if you just do
  1018. 39:29the work right in Maya and you just like
  1019. 39:31if I build a new piece I copy a bunch of
  1020. 39:33old pieces that have the right sides and
  1021. 39:35then I keep those edges right and then
  1022. 39:37tie it together and then it's actually
  1023. 39:39very easy but you have to keep that in
  1024. 39:41mind and that's also why it's so
  1025. 39:42important that I have this like
  1026. 39:45visualizer here right so I can if I've
  1027. 39:48if I build some new interesting pieces I
  1028. 39:50can actually make sure that like yeah it
  1029. 39:52fits together with the old things like
  1030. 39:54it's supposed to yep if you want to get
  1031. 39:59into procedural generation where should
  1032. 40:01one start good question
  1033. 40:04well the so I showed in actually the
  1034. 40:08algorithm that built the thing in the
  1035. 40:11middle here that's a pretty good place
  1036. 40:12to start
  1037. 40:13it's called well this one's 3d so it's
  1038. 40:16called marching cubes but the 2d version
  1039. 40:19is called marching squares it's just
  1040. 40:21like it's a very simple algorithm to
  1041. 40:22place tiles on a grid or in a voxel
  1042. 40:26space it's very easy to understand and
  1043. 40:30very easy to start working that's not
  1044. 40:31the algorithm I use in bad north though
  1045. 40:33the pieces look very similar I'm not
  1046. 40:40have seen wrong but when you show the
  1047. 40:42this scene and you see the island it
  1048. 40:46looks like you flipped the island as you
  1049. 40:48get that reflection effect yeah water
  1050. 40:50yeah is that done entirely in in shaders
  1051. 40:55it's actually a model underneath the
  1052. 40:56water I mean it is like it would be the
  1053. 40:59same which way I would have done it but
  1054. 41:01it is it is a model and well it's both
  1055. 41:04actually it's because I whenever I
  1056. 41:07create like some things are marked up
  1057. 41:08that they're supposed to have an outline
  1058. 41:09or outline or they're supposed to have a
  1059. 41:11mirror and then if they're supposed to
  1060. 41:13have a mirror that I just like create
  1061. 41:15another instance of that game object
  1062. 41:16that has the mirror and then I in the
  1063. 41:18shader it then flips that upside down as
  1064. 41:22well like flipping it is obviously quite
  1065. 41:23easy but it also does some things too
  1066. 41:25like it simplifies a lot of the it just
  1067. 41:27it runs the same shader but there's a
  1068. 41:30lot of places where it skipped some
  1069. 41:31stuff
  1070. 41:31that aren't needed when it does the
  1071. 41:33mirror and of course it applies like an
  1072. 41:35almost uniform color to it as well but
  1073. 41:39you're correct in that it is a flipped
  1074. 41:40foot mesh um hi so you may call the
  1075. 41:51model components and you do all of the
  1076. 41:52coding as well would you consider
  1077. 41:54yourself a coder who does art or an
  1078. 41:57artist who does coder very much an
  1079. 42:00artist that does code because I come
  1080. 42:02very much from an art background and I
  1081. 42:03don't really do much code outside of
  1082. 42:05code that in the end will produce some
  1083. 42:07kind of art but I'm pretty far down the
  1084. 42:09rabbit hole now so yeah hey awesome by
  1085. 42:21the way it was super interesting and I
  1086. 42:23know there are a lot of students here so
  1087. 42:25I'm gonna ask the very helpful student
  1088. 42:28question what's your workflow and can
  1089. 42:32you think like everyday work day and
  1090. 42:35contribute yeah sure
  1091. 42:37so like as I said we work in a very
  1092. 42:40small team I start the day with well I
  1093. 42:45don't start the day like but when I've
  1094. 42:46been up for like three hours I do a call
  1095. 42:51with my colleague Richard who's just
  1096. 42:53woken up and then we yeah we do a
  1097. 42:56stand-up meeting that's fairly this
  1098. 42:59first standard I've done that in all
  1099. 43:01places I've been at so like just go
  1100. 43:03through like what did we do yesterday
  1101. 43:04what are we doing today are there any
  1102. 43:06news stuff like that then the rest of
  1103. 43:09the day like as I said I work from home
  1104. 43:11so I have a pretty free schedule it
  1105. 43:15really depends it can be very very
  1106. 43:17different I like some some days I spend
  1107. 43:19the entire day in visual studio writing
  1108. 43:21code sometimes I do a lot of art things
  1109. 43:23it's it's pretty much all over the place
  1110. 43:24yeah it's very something that's like a
  1111. 43:27lot of people ask me working from home
  1112. 43:29is it hard to be disciplined but it's
  1113. 43:31more the opposite it's very hard to get
  1114. 43:32away from the computer
  1115. 43:33like I I usually sleep quite badly
  1116. 43:36because I like go straight from the
  1117. 43:38computer to bed which is a very very bad
  1118. 43:40idea don't do that
  1119. 43:45to follow up on that that you're working
  1120. 43:47from home do you have a need like
  1121. 43:49techniques to stay working yeah
  1122. 43:53don't have any other hobbies than work
  1123. 44:01no but that's that's basically true like
  1124. 44:03I haven't really played any video video
  1125. 44:05games for a long time which I probably
  1126. 44:06should do but it was a long time ago so
  1127. 44:08played a video game and all my other
  1128. 44:10hobbies required like friends or
  1129. 44:12physical activity so I can't do them all
  1130. 44:14the day anyway so when I'm at home
  1131. 44:16that's like the only thing I get like
  1132. 44:17when I'm done with my choice that's the
  1133. 44:19only thing I can do do you do you in
  1134. 44:27your team have a specific goal for the
  1135. 44:29game other than just making a successful
  1136. 44:31successful game that creates brenigan
  1137. 44:34I mean yeah from for me it was very like
  1138. 44:40for me it was very much also just
  1139. 44:43designing a whole the game is very much
  1140. 44:46just designed around what I think is fun
  1141. 44:48to do and that's been I think that's a
  1142. 44:51good especially if you're a very small
  1143. 44:52team I think that's a very good approach
  1144. 44:54to because to have so because it's very
  1145. 44:57easy to especially when you're
  1146. 44:58discussing something with someone else
  1147. 45:00to fall into things that seem
  1148. 45:01objectively defensible which would be
  1149. 45:03like yeah how do we make more money or
  1150. 45:05if you have like idealistic goals that
  1151. 45:07could also be a thing but it's harder to
  1152. 45:08defend like no I want to do it this way
  1153. 45:10I think it's more fun to do that kind of
  1154. 45:12work but I think it's very important
  1155. 45:14because if it's fun to do the work
  1156. 45:15you'll do it better you'll do more of it
  1157. 45:17and like you won't be stressed out and
  1158. 45:19you'll you'll like it more so that's
  1159. 45:21been a very that's been a very big part
  1160. 45:22of bad North trying to just design a
  1161. 45:25game around the kind of things I enjoy
  1162. 45:27doing yeah yeah hi I haven't played the
  1163. 45:34game but I'm just assuming here that for
  1164. 45:37each island that you get to get an
  1165. 45:39increasingly harder that my question is
  1166. 45:41then is the procedural generation of
  1167. 45:44every island like does the island
  1168. 45:47geometry like get more difficult and how
  1169. 45:50I'll have you like program that in that
  1170. 45:52that you just tell the like the
  1171. 45:55algorithm to generate a harder level for
  1172. 45:57me like how does that actually work yeah
  1173. 46:01so no we don't do any of that we just
  1174. 46:03make them bigger because that's that's
  1175. 46:06easy but no it's quite it's quite an
  1176. 46:09abstract concept to figure out what
  1177. 46:11makes it because the shape of the island
  1178. 46:13does matter a lot for how difficult the
  1179. 46:15art especially especially depending on
  1180. 46:16your play style and what your loadout is
  1181. 46:19like are you playing a lot with archers
  1182. 46:21or with Spears or whatever but there's
  1183. 46:25those things are quite abstract and
  1184. 46:28they're quite hard to put it like first
  1185. 46:29of all I don't know if we have we have a
  1186. 46:31great grasp on that and even if we did
  1187. 46:32it's not obvious how you would evaluate
  1188. 46:35that like if you give an island like how
  1189. 46:37do you break that down and evaluate a
  1190. 46:39level and give it a difficulty score and
  1191. 46:42Eve then if we did that we would also
  1192. 46:44then have to figure out okay but how do
  1193. 46:46we then generate an island that tries to
  1194. 46:49achieve a certain level of difficulty
  1195. 46:51like that's quite an abstract and
  1196. 46:53difficult problem which like sounds
  1197. 46:54super interesting but we've just not
  1198. 46:56done any of it we do we do I mean we
  1199. 46:58just switch up also so that like the
  1200. 46:59earlier islands are less complex they
  1201. 47:02use I mean of course because they're
  1202. 47:03smaller but they also use fewer modules
  1203. 47:06I have some modules that are like marked
  1204. 47:08up so because they're themed right so
  1205. 47:10you get some themes throughout the game
  1206. 47:11that we keep switching up as well also
  1207. 47:13like a way to yeah keep breaking up the
  1208. 47:16pattern so yeah we have these I mean I
  1209. 47:20think we've seen some we've seen some
  1210. 47:23caves a level we played first had caves
  1211. 47:25also here's like some some ruin style
  1212. 47:27things with like some walls and stuff
  1213. 47:29like that those kind of things they
  1214. 47:31break up the gameplay a little bit
  1215. 47:32because like the caves or you need to
  1216. 47:34keep track of all the different weird
  1217. 47:35paths the units can take yeah but it's
  1218. 47:39mostly as an aesthetical thing yeah so
  1219. 47:45we vary the difficulty just by sending
  1220. 47:47more enemies and then hope that the
  1221. 47:49randomness from what the ways the level
  1222. 47:51looks aren't like too far out of bounds
  1223. 47:53was there any conscious reason why you
  1224. 47:56choose to develop the game in unity
  1225. 47:58instead of another engine I don't know
  1226. 48:02if I would call it a conscious reason
  1227. 48:04but I've like I've been doing pretty
  1228. 48:06projects in unity as well I quite like
  1229. 48:08it I think unity is a very good way to
  1230. 48:11get into coding that's how I got into
  1231. 48:14coding because it or my understand I
  1232. 48:19haven't worked much in unreal like I've
  1233. 48:21done some student projects in unreal but
  1234. 48:22my understanding is that the this sort
  1235. 48:25of the border between what you do in
  1236. 48:27sort of normal engine tools and what
  1237. 48:29you're doing code is moved quite far
  1238. 48:31ahead in unreal like and it's quite a
  1239. 48:33different space on the other hand you do
  1240. 48:35have the very like powerful blueprint in
  1241. 48:38their scripting system which like is
  1242. 48:39great but it's not as good as writing in
  1243. 48:41c-sharp like you can't do ask like you
  1244. 48:43can do a lot of things but you can't do
  1245. 48:44as much especially not for the same
  1246. 48:46performance right but then in an unreal
  1247. 48:50you would then instead go the extra step
  1248. 48:52after that and start rewriting the the
  1249. 48:54source code in C++ which is like a
  1250. 48:56bigger threshold so it's like it's
  1251. 48:58similar thresholds but they're moved in
  1252. 49:00quite different places and to meet it
  1253. 49:02for my current expertise it fit me very
  1254. 49:04well to write the code in C sharp which
  1255. 49:07is like a fairly easy language to learn
  1256. 49:14Hey
  1257. 49:16so you posted on Twitter a lot of your
  1258. 49:19progress and how you did things and was
  1259. 49:22that part of your marketing strategy
  1260. 49:24because it definitely got me hooked and
  1261. 49:26made me buy the game so if it was it
  1262. 49:29worked
  1263. 49:30yeah I mean I mean it obviously it
  1264. 49:33obviously was but I I didn't post on
  1265. 49:36Twitter because I wanted to do marketing
  1266. 49:38it's more like I posted on Twitter and
  1267. 49:40that's also marketing because that's
  1268. 49:42especially I really like showing things
  1269. 49:46I do but I think I come up with
  1270. 49:47something clever I want to show people
  1271. 49:49and especially since I work from home I
  1272. 49:51don't have colleagues well I can show
  1273. 49:52Richard but I don't have that many
  1274. 49:54colleagues to show so then I can post it
  1275. 49:56on Twitter and show people there instead
  1276. 49:57which is very nice when he's very it's
  1277. 50:00very encouraging to although all the
  1278. 50:02positive feedback you get and I find
  1279. 50:04also a common pattern in my workflow is
  1280. 50:07that I do something and then I sit
  1281. 50:09around tweaking it for too long but then
  1282. 50:11as soon as I make a gif and post it on
  1283. 50:14Twitter then I'm done with it and then I
  1284. 50:16move on to the next thing
  1285. 50:26yeah
  1286. 50:27so how what's the transition from
  1287. 50:31working in yourself to becoming an indie
  1288. 50:34developer and how can you use that
  1289. 50:36experience use the Ubisoft experience
  1290. 50:39yes yeah good question I mean it's a
  1291. 50:43very big difference the biggest and
  1292. 50:46nicest difference is that there's just
  1293. 50:47less time spend in meetings because
  1294. 50:50that's quite like you can be however low
  1295. 50:52level you want you're still going to
  1296. 50:53spend like a significant amount of your
  1297. 50:55work within meetings in a big company
  1298. 50:57like that and obviously it's way less
  1299. 50:59trust like the turnaround times for
  1300. 51:01everything is much quicker and obviously
  1301. 51:04I don't have to like I can take the
  1302. 51:06decision straight away I don't have to
  1303. 51:08wait for a chain of command so that's
  1304. 51:10much nicer but I do think I benefited a
  1305. 51:12lot from it because I got to meet so
  1306. 51:16many like talented senior people work
  1307. 51:20like there's just such a huge reservoir
  1308. 51:21of expertise in such a big company so
  1309. 51:24many people to learn with you get to sit
  1310. 51:26next to someone who's like been in the
  1311. 51:27industry for 15 years and learn all
  1312. 51:29kinds of things from them for me was I
  1313. 51:31feel like it was a really good place to
  1314. 51:33get started it also very good thing to
  1315. 51:35have in your CV and like if this indie
  1316. 51:37thing fails which it does for many
  1317. 51:38people yeah but I enjoy it this way more
  1318. 51:48so it was mentioned earlier just before
  1319. 51:52the last question about your posting on
  1320. 51:54your progress with that North on Twitter
  1321. 51:57have you considered like setting up like
  1322. 52:01I'm part of your website or something
  1323. 52:03like just an overview of the progress
  1324. 52:05and how each thing has been done or
  1325. 52:09would that be like I don't know no I
  1326. 52:14mean I haven't thought about that
  1327. 52:15specifically I've thought a lot about
  1328. 52:16like would it be good to gather some of
  1329. 52:19these things into more than just like
  1330. 52:21tweets I could keep sending over maybe
  1331. 52:23it would be that's also probably a lot
  1332. 52:26of work probably not I mean I don't know
  1333. 52:29I'm thinking I'm thinking about like
  1334. 52:31probably not for about north but I've
  1335. 52:33been thinking about after this I'm not
  1336. 52:35sure I will but I might do some other
  1337. 52:36more just demo projects like the the
  1338. 52:40house and the planet thing and doing it
  1339. 52:42in a way where I consciously think that
  1340. 52:45I will make like I will tutorial I some
  1341. 52:47aspects of this I would like like maybe
  1342. 52:51make sure the the code is quite clean so
  1343. 52:53I'd be happy to share it if I would have
  1344. 52:55to in the future stuff like that so not
  1345. 52:57probably not with bad north but but but
  1346. 52:59I do I do like explaining things and
  1347. 53:01show us things off but it's also it's
  1348. 53:02also a lot of work those kind of things
  1349. 53:04so yeah maybe something in the future
  1350. 53:18so I had one question about a solution
  1351. 53:22true the exes but what a solution about
  1352. 53:26the axes yeah because I don't know if
  1353. 53:30it's about the how you've planned the
  1354. 53:32aesthetic of I'm bad north but would it
  1355. 53:35be blasphemy to put in double-sided axes
  1356. 53:37yes okay all right I think I might be
  1357. 54:02deep into the the dark zone of what
  1358. 54:04you're want to say and I have to keep
  1359. 54:09quiet but have you thought about what
  1360. 54:11would be the problem of why people would
  1361. 54:14stop playing your game and what solution
  1362. 54:17would that be oh sure yeah I mean people
  1363. 54:22would stop playing it probably because
  1364. 54:23there should probably be a little bit
  1365. 54:25more content in it
  1366. 54:27we should probably wanted to put way
  1367. 54:28more like items and abilities in there
  1368. 54:30that we just hadn't had the time to make
  1369. 54:32it's probably coming for in Compton like
  1370. 54:33we have a big content up but we have all
  1371. 54:36this on Twitch okay whatever
  1372. 54:38we have a
  1373. 54:39we're gonna do some content update and
  1374. 54:42then we'll hopefully put in somewhere
  1375. 54:43those things
  1376. 54:44so that's one big thing obviously it's
  1377. 54:48also there's a little bit of a
  1378. 54:50disconnect between which I don't find
  1379. 54:51problematic myself but there's a little
  1380. 54:53bit of a disconnect between the game
  1381. 54:54looks quite sort of cute but it is quite
  1382. 54:57hard actually it is very easy to get
  1383. 54:59into and learn the controls but it does
  1384. 55:01get quite difficult and there's
  1385. 55:03permadeath in it right so there are like
  1386. 55:05definitely some people who get dragged
  1387. 55:07into the dragged into it for the
  1388. 55:11cuteness and then also find all this is
  1389. 55:13strategy game that's actually quite fun
  1390. 55:14with strategy but then like it does get
  1391. 55:16quite difficult and quite punishing and
  1392. 55:17some people definitely get surprised and
  1393. 55:20maybe put off by that after a bit yeah
  1394. 55:26all right I think we'll leave it at that
  1395. 55:29yeah thank you very much
  1396. 55:30[Applause]

About this transcript

This page contains the full transcript of Konsoll 2018: Oskar Stålberg - Developing The Bad North Look by Konsoll, generated from the public captions YouTube serves with the video. The transcript has 10,311 words across 1,396 segments, with the original timestamps preserved so you can click any line to jump to that moment in the embedded player.

What you can do with it

Use the transcript to take notes, quote the speaker, build a study guide, generate a summary with ChatGPT or Claude via the YouTube Summary tool, or export it as a timed subtitle file with YouTube to SRT. You can also re-open it in the transcriber to translate the transcript into 100+ languages.

Free YouTube transcript tool

YouTube2Text is a free YouTube transcript generator — no signup, no daily limit. Paste any YouTube link and get the full transcript instantly, with timestamps, click-to-jump, translation to 100+ languages, AI prompts for ChatGPT, Claude, and Gemini, and exports to TXT, SRT, VTT, or Markdown.