-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfeed.xml
253 lines (156 loc) · 48.2 KB
/
feed.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><generator uri="https://jekyllrb.com/" version="3.7.3">Jekyll</generator><link href="http://localhost:4000/feed.xml" rel="self" type="application/atom+xml" /><link href="http://localhost:4000/" rel="alternate" type="text/html" hreflang="en" /><updated>2018-05-22T01:00:34+08:00</updated><id>http://localhost:4000/</id><title type="html">Harry Kilian</title><subtitle>Personal blog to post experiments.
</subtitle><author><name>Harry Kilian</name></author><entry><title type="html">1:32 Scale Model Of ‘Betty’</title><link href="http://localhost:4000/modelmaking/2018/01/27/betty-model.html" rel="alternate" type="text/html" title="1:32 Scale Model Of 'Betty'" /><published>2018-01-27T05:18:37+08:00</published><updated>2018-01-27T05:18:37+08:00</updated><id>http://localhost:4000/modelmaking/2018/01/27/betty-model</id><content type="html" xml:base="http://localhost:4000/modelmaking/2018/01/27/betty-model.html"><h2 id="plan">Plan</h2>
<p>This was a personal project to build ‘Betty’, transport ship from the movie ‘Alien Resurrection’, and probably my favourite spaceship design ever.
I built 1:36 scale model replica of the spaceship from acrylic, chemiwood, resin and ABS.
For the paint finish I used airbrushed enamel and washes of acrylic to create an aged effect.</p>
<h4 id="screens-from-the-film">Screens From The film</h4>
<p><img src="/assets/betty/thumbs/ref1.png" alt="screenshot" height="190px" width="190px" class="rounded" />
<img src="/assets/betty/thumbs/ref2.png" alt="screenshot" height="190px" width="190px" class="rounded" />
<img src="/assets/betty/thumbs/ref3.png" alt="screenshot" height="190px" width="190px" class="rounded" />
<img src="/assets/betty/thumbs/ref4.png" alt="screenshot" height="190px" width="190px" class="rounded" /></p>
<h4 id="technical-drawing">Technical Drawing</h4>
<p><img src="/assets/betty/bettydesign.jpg" alt="screenshot" class="rounded" /></p>
<h2 id="blockout">Blockout</h2>
<p><img src="/assets/betty/build1.jpg" alt="screenshot" class="rounded" /></p>
<p><img src="/assets/betty/build2.jpg" alt="screenshot" class="rounded" /></p>
<p><img src="/assets/betty/build3.jpg" alt="screenshot" class="rounded" /></p>
<p><img src="/assets/betty/buildcockpit.jpg" alt="screenshot" class="rounded" /></p>
<h2 id="details">Details</h2>
<p><img src="/assets/betty/details1.jpg" alt="screenshot" class="rounded" /></p>
<p><img src="/assets/betty/details4.jpg" alt="screenshot" class="rounded" width="380px" />
<img src="/assets/betty/details3.jpg" alt="screenshot" class="rounded" width="380px" /></p>
<p><img src="/assets/betty/details2.jpg" alt="screenshot" class="rounded" /></p>
<p><img src="/assets/betty/details6.jpg" alt="screenshot" class="rounded" /></p>
<p><img src="/assets/betty/details7.jpg" alt="screenshot" class="rounded" /></p>
<p><img src="/assets/betty/details8.jpg" alt="screenshot" class="rounded" /></p>
<p><img src="/assets/betty/detailswings.jpg" alt="screenshot" class="rounded" /></p>
<h2 id="paint">Paint</h2>
<p><img src="/assets/betty/paint1.jpg" alt="screenshot" class="rounded" /></p>
<p><img src="/assets/betty/paint2.jpg" alt="screenshot" class="rounded" /></p>
<p><img src="/assets/betty/paint3.jpg" alt="screenshot" class="rounded" /></p>
<p><img src="/assets/betty/paint4.jpg" alt="screenshot" class="rounded" /></p>
<p><img src="/assets/betty/paint5.jpg" alt="screenshot" class="rounded" /></p>
<p><img src="/assets/betty/paintwings.jpg" alt="screenshot" class="rounded" /></p>
<h2 id="finishing">Finishing</h2>
<p><img src="/assets/betty/weathering1.jpg" alt="screenshot" class="rounded" /></p>
<p><img src="/assets/betty/weathering2.jpg" alt="screenshot" class="rounded" /></p>
<p><img src="/assets/betty/weathering3.jpg" alt="screenshot" class="rounded" /></p></content><author><name>Harry Kilian</name></author><summary type="html">Plan This was a personal project to build ‘Betty’, transport ship from the movie ‘Alien Resurrection’, and probably my favourite spaceship design ever. I built 1:36 scale model replica of the spaceship from acrylic, chemiwood, resin and ABS. For the paint finish I used airbrushed enamel and washes of acrylic to create an aged effect. Screens From The film Technical Drawing Blockout Details Paint Finishing</summary></entry><entry><title type="html">From Wordpress to Jekyll</title><link href="http://localhost:4000/jekyll/2018/01/27/From-wordpress-to-Jekyll.html" rel="alternate" type="text/html" title="From Wordpress to Jekyll" /><published>2018-01-27T05:18:37+08:00</published><updated>2018-01-27T05:18:37+08:00</updated><id>http://localhost:4000/jekyll/2018/01/27/From%20wordpress%20to%20Jekyll</id><content type="html" xml:base="http://localhost:4000/jekyll/2018/01/27/From-wordpress-to-Jekyll.html"><p>Decided to move the blog from <a href="wordpress.com">wordpress.com</a> managed hosting over to github.io pages using the <a href="https://jekyllrb.com/">jekyll</a> static site generator.
My primary motivation was that I want to be able to embed any content on the blog, perhaps some canvas/opengl stuff in the future.
I could have gone the self-hosted wordpress route but of course you have to pay a hosting fee and there is set-up involved in doing that.</p>
<p>So far I’m really impressed with github.io, all you need to do is setup a git repo and push any .html file, and right away you have a functioning site.
There are limitations, you cant have database or any server-side scripting, but for a normal blog type website like I’m running it serves just fine.
Best of all its free.</p>
<p>My only complaint so far is with the <a href="https://jekyllrb.com/">jekyll</a> migration process. It provides a migration solution for wordpress.com sites however the html in dumped in the <code class="highlighter-rouge">/_posts</code>
folder where all posts reside, was pretty rubbish. Not in markdown format and showed weird metadata above each post, also it didnt copy over images in galleries or anything like that.
I had to go through and fix them up, and in the end I just opted to make .markdown files out of each one, which did take a while.</p>
<p>Overall I’m pretty excited to start blogging again. I’m hoping to embed some cool graphics experiments in the blog and play around with demoing some c++ with emscripten.</p>
<h3 id="update">Update</h3>
<p>I have since learnt that github pages only supports a very limited number of jekyll plugins. Not only that but the error reporting for failed builds is not so great.
Took quite a bit of searching around before I realised that a youtube plug-in was causing the build work fine locally but fail on github.
A solution is to build all the files locally with the needed plugins and then just send output .html files to the remote repo.</p>
<h3 id="update-2">Update 2</h3>
<p>I’ve now got the site working with my jekyll plugins. The solution was to have 2 git repos. One which had the jekyll markdown files and another which only has the html output
from jekyll. Basically I build the site myself and send just the html files to github.</p></content><author><name>Harry Kilian</name></author><summary type="html">Decided to move the blog from wordpress.com managed hosting over to github.io pages using the jekyll static site generator. My primary motivation was that I want to be able to embed any content on the blog, perhaps some canvas/opengl stuff in the future. I could have gone the self-hosted wordpress route but of course you have to pay a hosting fee and there is set-up involved in doing that. So far I’m really impressed with github.io, all you need to do is setup a git repo and push any .html file, and right away you have a functioning site. There are limitations, you cant have database or any server-side scripting, but for a normal blog type website like I’m running it serves just fine. Best of all its free. My only complaint so far is with the jekyll migration process. It provides a migration solution for wordpress.com sites however the html in dumped in the /_posts folder where all posts reside, was pretty rubbish. Not in markdown format and showed weird metadata above each post, also it didnt copy over images in galleries or anything like that. I had to go through and fix them up, and in the end I just opted to make .markdown files out of each one, which did take a while. Overall I’m pretty excited to start blogging again. I’m hoping to embed some cool graphics experiments in the blog and play around with demoing some c++ with emscripten. Update I have since learnt that github pages only supports a very limited number of jekyll plugins. Not only that but the error reporting for failed builds is not so great. Took quite a bit of searching around before I realised that a youtube plug-in was causing the build work fine locally but fail on github. A solution is to build all the files locally with the needed plugins and then just send output .html files to the remote repo. Update 2 I’ve now got the site working with my jekyll plugins. The solution was to have 2 git repos. One which had the jekyll markdown files and another which only has the html output from jekyll. Basically I build the site myself and send just the html files to github.</summary></entry><entry><title type="html">Progress 17: Depth, Volumes and CPU Picking</title><link href="http://localhost:4000/progress/2017/05/31/progress-17-volumes-cpu-picking2.html" rel="alternate" type="text/html" title="Progress 17: Depth, Volumes and CPU Picking" /><published>2017-05-31T14:34:53+08:00</published><updated>2017-05-31T14:34:53+08:00</updated><id>http://localhost:4000/progress/2017/05/31/progress-17-volumes-cpu-picking2</id><content type="html" xml:base="http://localhost:4000/progress/2017/05/31/progress-17-volumes-cpu-picking2.html"><h2 id="landscapedepth">Landscape Depth</h2>
<p>The landscape now has information in the Y axis(downward), as you dig the tiles change from soil to stone to granite. It’s kept quite simple at the moment but later I want to add further noise manipulation into the algorithm so that the player can find pockets of different types of rock as they dig.</p>
<p><img src="/assets/screenshot_mon_may_29_00_18_50_2017.png" alt="screenshot" /></p>
<h2 id="excavation-tool">Excavation Tool</h2>
<p>I made some progress on creating tools which the player can use to manipulate the landscape. The excavation tool allows a player to select a rectangular region to dig downward on. At the moment the excavation is done instantly but later it will be dug out by players game units.</p>
<h2 id="volumes">Volumes</h2>
<p>I’ve added rudimentary support for voxel volumes.</p>
<p><img src="/assets/screenshot_tue_may_30_18_28_47_2017.png" alt="screenshot" /></p>
<h2 id="cpu-picking">CPU Picking</h2>
<p>I had wrote before about GPU picking which worked reasonably well as a temp solution. However the problem is that because the cpu is just reading the positions buffer on gpu, you can’t pick any locations that are not visible on screen. As I was using the excavation tool this became problematic and made the tool unintuitive. Not only that, on my old and useless macbook pro the PBO(pixel buffer object) was still stalling the cpu despite PBO’s being non blocking. The new solution involves casting a ray from the camera through the terrain and calculating where there is an intersection. Works a treat, don’t know why I didn’t just do this before really.</p>
<h2 id="other-additionschanges">Other Additions/Changes</h2>
<ul>
<li>Refactored the worldgen noise sampler.</li>
<li>Refactored the precipice mesh generator</li>
<li>Fixed a bug where the world tiles were actually be rendered mirrored on the Z axis.</li>
<li>Fixed the camera fog distance from showing unrendered geometry when zoomed in.</li>
<li>Oncreen nodes now hold a component which links to the underlying world object.</li>
</ul></content><author><name>Harry Kilian</name></author><summary type="html">Landscape Depth The landscape now has information in the Y axis(downward), as you dig the tiles change from soil to stone to granite. It’s kept quite simple at the moment but later I want to add further noise manipulation into the algorithm so that the player can find pockets of different types of rock as they dig. Excavation Tool I made some progress on creating tools which the player can use to manipulate the landscape. The excavation tool allows a player to select a rectangular region to dig downward on. At the moment the excavation is done instantly but later it will be dug out by players game units. Volumes I’ve added rudimentary support for voxel volumes. CPU Picking I had wrote before about GPU picking which worked reasonably well as a temp solution. However the problem is that because the cpu is just reading the positions buffer on gpu, you can’t pick any locations that are not visible on screen. As I was using the excavation tool this became problematic and made the tool unintuitive. Not only that, on my old and useless macbook pro the PBO(pixel buffer object) was still stalling the cpu despite PBO’s being non blocking. The new solution involves casting a ray from the camera through the terrain and calculating where there is an intersection. Works a treat, don’t know why I didn’t just do this before really. Other Additions/Changes Refactored the worldgen noise sampler. Refactored the precipice mesh generator Fixed a bug where the world tiles were actually be rendered mirrored on the Z axis. Fixed the camera fog distance from showing unrendered geometry when zoomed in. Oncreen nodes now hold a component which links to the underlying world object.</summary></entry><entry><title type="html">Update 16: AO, Trees and the Perspective Camera</title><link href="http://localhost:4000/graphics/progress/2017/05/20/update-16-ao-and-perspective-cameras.html" rel="alternate" type="text/html" title="Update 16: AO, Trees and the Perspective Camera" /><published>2017-05-20T19:52:47+08:00</published><updated>2017-05-20T19:52:47+08:00</updated><id>http://localhost:4000/graphics/progress/2017/05/20/update-16-ao-and-perspective-cameras</id><content type="html" xml:base="http://localhost:4000/graphics/progress/2017/05/20/update-16-ao-and-perspective-cameras.html"><h2 id="orthographic-vs-perspective">Orthographic vs Perspective</h2>
<p>Up until now I’ve had the game camera set up as an <a href="https://en.wikipedia.org/wiki/Orthographic_projection">orthographic projection</a>. Which gives a similar style to an isometric game but in 3D. I went for this initially because I wanted it to be reminiscent of games like <a href="https://en.wikipedia.org/wiki/Age_of_Empires">Age Of Empires</a> and <a href="https://en.wikipedia.org/wiki/RollerCoaster_Tycoon">RCT</a>. It wasn’t until I started working on the construction tools that I realised how it was becoming difficult to visually understand the terrain and where to place objects. It really doesnt work all that well. Because orthographic cameras have a fixed depth you essentially lose some important information regarding the position and shape of the 3D objects. It makes them slightly harder to understand and also makes it difficult to judge distances in the game world. Games like <a href="https://en.wikipedia.org/wiki/Monument_Valley_(video_game)">Monument Valley</a> take advantage of this to create optical illusions and interesting puzzles. For this game though, I don’t want illusions, the most important thing is that the player can understand quickly what is happening in the game.</p>
<p>A slight problem with using perspective camera is that the method for <a href="/graphics/progress/2017/02/17/update-8-grass-rendering.html">grass rendering</a> I was using did not work as well. As I was using shell rendering It only looks decent when looking downward on the world, with a perspective camera it just didn’t work. Rendering the grass that way was quite costly anyhow, so I had no problem removing it.</p>
<p><img src="/assets/screenshot_sat_may_20_13_49_52_2017.png" alt="screenshot" /></p>
<h2 id="daynightcycle">Day/Night Cycle</h2>
<p>I put a little time into getting a working visible day and night cycle. In free floating camera mode you can see the sun in the sky at the correct position. The sky itself now changes color according to the time of day, so for example it will turn orange near sunset. At night the distance fog is changed to give some atmosphere. At night time the focal point of the camera emits light, this makes it so you can still see the surrounding area as well as giving an eerie atmosphere.</p>
<p><img src="/assets/day-night-cycle.png" alt="screenshot" /></p>
<h2 id="ambient-occlusion">Ambient Occlusion</h2>
<p>I wrote last update about <a href="/graphics/progress/2017/05/11/update-15-ao-experiments.html">screen space ambient occlusion</a> and how the performance hit was too large to justify the effect. I’ve been playing around with some other methods with some success. I can’t bake occlusion into the mesh because the terrain itself is actually just a <a href="https://en.wikipedia.org/wiki/Displacement_mapping">displacement map</a>. What I thought of doing however is to calculate the AO by sampling the adjacent pixels from within the displace map for each vertex. You can see the results in the day/night pictures above.</p>
<h2 id="trees">Trees</h2>
<p>A bit of time was put into the ECS which will manage all the world objects. I put together a placeholder tree model and spawned 10,000 of them around the map. The viewing distance for the trees is not to great in floating camera mode but in normal construction mode It works fine.</p>
<p><img src="/assets/screenshot_sat_may_20_14_55_07_2017.png" alt="screenshot" /></p></content><author><name>Harry Kilian</name></author><summary type="html">Orthographic vs Perspective Up until now I’ve had the game camera set up as an orthographic projection. Which gives a similar style to an isometric game but in 3D. I went for this initially because I wanted it to be reminiscent of games like Age Of Empires and RCT. It wasn’t until I started working on the construction tools that I realised how it was becoming difficult to visually understand the terrain and where to place objects. It really doesnt work all that well. Because orthographic cameras have a fixed depth you essentially lose some important information regarding the position and shape of the 3D objects. It makes them slightly harder to understand and also makes it difficult to judge distances in the game world. Games like Monument Valley take advantage of this to create optical illusions and interesting puzzles. For this game though, I don’t want illusions, the most important thing is that the player can understand quickly what is happening in the game. A slight problem with using perspective camera is that the method for grass rendering I was using did not work as well. As I was using shell rendering It only looks decent when looking downward on the world, with a perspective camera it just didn’t work. Rendering the grass that way was quite costly anyhow, so I had no problem removing it. Day/Night Cycle I put a little time into getting a working visible day and night cycle. In free floating camera mode you can see the sun in the sky at the correct position. The sky itself now changes color according to the time of day, so for example it will turn orange near sunset. At night the distance fog is changed to give some atmosphere. At night time the focal point of the camera emits light, this makes it so you can still see the surrounding area as well as giving an eerie atmosphere. Ambient Occlusion I wrote last update about screen space ambient occlusion and how the performance hit was too large to justify the effect. I’ve been playing around with some other methods with some success. I can’t bake occlusion into the mesh because the terrain itself is actually just a displacement map. What I thought of doing however is to calculate the AO by sampling the adjacent pixels from within the displace map for each vertex. You can see the results in the day/night pictures above. Trees A bit of time was put into the ECS which will manage all the world objects. I put together a placeholder tree model and spawned 10,000 of them around the map. The viewing distance for the trees is not to great in floating camera mode but in normal construction mode It works fine.</summary></entry><entry><title type="html">Update 15: SSAO Experiments</title><link href="http://localhost:4000/graphics/progress/2017/05/11/update-15-ao-experiments.html" rel="alternate" type="text/html" title="Update 15: SSAO Experiments" /><published>2017-05-11T02:09:04+08:00</published><updated>2017-05-11T02:09:04+08:00</updated><id>http://localhost:4000/graphics/progress/2017/05/11/update-15-ao-experiments</id><content type="html" xml:base="http://localhost:4000/graphics/progress/2017/05/11/update-15-ao-experiments.html"><h2 id="screen-space-ambient-occlusion">Screen Space Ambient Occlusion</h2>
<p>Small update this time. I have started working a day job again and so haven’t spent much time on the game. For a bit of fun I’ve been thinking about implementing screen space ambient occlusion, something I haven’t written before. As I’ve been developing and experimenting with the game I’ve noticed issues with my eye being unable identify height and depth of the tiles. Often 2 tiles will sit at different heights but the same orientation, meaning they will be lit exactly the same. Take a look at this example.</p>
<p><img src="/assets/screenshot_sat_may__6_14_17_47_2017.png" alt="screenshot" /></p>
<p>The tile in middle is shaded the same as the tile behind. While it’s not difficult to understand what tile is where, It really shouldnt require any thinking. To solve this I started looking into ambient occlusion techniques, I had a form of AO in the game before using an AO value baked into the terrain verts. However, Now I have redone the terrain mesh system making that no longer an attractive option. The most common AO in games is SSAO (Screen Space Ambient Occlusion), there are different implementations but essentially you would use the positions and normals buffer to sample surrounding pixels and calculate if they occlude the current pixels.</p>
<p>I put together a shader which does just that. The results are decent however there is a significant performance hit. I’m using a half size AO buffer and 16 samples, then a 4x4 blur. Framerate goes from about 160 to just about keeping up at 60. I’m sure I could optimize further and improve the method, however I have played round tweaking parameter and even at high sample counts the results are not that great. I think I am going to take another look at baked AO.</p>
<p>Before
<img src="/assets/screenshot_sat_may__6_13_31_49_2017.png" alt="screenshot" /></p>
<p>After
<img src="/assets/screenshot_sat_may__6_13_31_40_2017.png" alt="screenshot" /></p>
<h2 id="other-changes">Other changes:</h2>
<ul>
<li>Added a way to recompile shaders at runtime so I can make modifications to shader code and see results instantly (Very useful, should have done this ages ago!)</li>
<li>Improved pipeline for adding 3d models.</li>
<li>Made headway on ECS for managing game objects.</li>
</ul></content><author><name>Harry Kilian</name></author><summary type="html">Screen Space Ambient Occlusion Small update this time. I have started working a day job again and so haven’t spent much time on the game. For a bit of fun I’ve been thinking about implementing screen space ambient occlusion, something I haven’t written before. As I’ve been developing and experimenting with the game I’ve noticed issues with my eye being unable identify height and depth of the tiles. Often 2 tiles will sit at different heights but the same orientation, meaning they will be lit exactly the same. Take a look at this example. The tile in middle is shaded the same as the tile behind. While it’s not difficult to understand what tile is where, It really shouldnt require any thinking. To solve this I started looking into ambient occlusion techniques, I had a form of AO in the game before using an AO value baked into the terrain verts. However, Now I have redone the terrain mesh system making that no longer an attractive option. The most common AO in games is SSAO (Screen Space Ambient Occlusion), there are different implementations but essentially you would use the positions and normals buffer to sample surrounding pixels and calculate if they occlude the current pixels. I put together a shader which does just that. The results are decent however there is a significant performance hit. I’m using a half size AO buffer and 16 samples, then a 4x4 blur. Framerate goes from about 160 to just about keeping up at 60. I’m sure I could optimize further and improve the method, however I have played round tweaking parameter and even at high sample counts the results are not that great. I think I am going to take another look at baked AO. Before After Other changes: Added a way to recompile shaders at runtime so I can make modifications to shader code and see results instantly (Very useful, should have done this ages ago!) Improved pipeline for adding 3d models. Made headway on ECS for managing game objects.</summary></entry><entry><title type="html">Update 14: Minor Improvements</title><link href="http://localhost:4000/graphics/progress/2017/04/30/update-14-minor-improvements.html" rel="alternate" type="text/html" title="Update 14: Minor Improvements" /><published>2017-04-30T15:52:38+08:00</published><updated>2017-04-30T15:52:38+08:00</updated><id>http://localhost:4000/graphics/progress/2017/04/30/update-14-minor-improvements</id><content type="html" xml:base="http://localhost:4000/graphics/progress/2017/04/30/update-14-minor-improvements.html"><p>Nothing too major this update, I’ve been working on some other personal things the last month so I haven’t done anything major on the game.</p>
<h2 id="updates">Updates</h2>
<ul>
<li>Made it so an individual tile will highlight when hovered over with the mouse.</li>
<li>You can now make square box selections with the mouse by clicking and dragging.</li>
<li>Added a distance fog for when using the free floating camera</li>
<li>Replaced black sky color with blue.</li>
<li>Fixed a z-clipping issue where the ocean mesh intersected the land mesh.</li>
<li>Optimized terrain rendering for free floating camera. Camera used to sit in the middle of the terrain chunk, now any terrain behind the camera is not calculated.</li>
<li>Shaders now recompile when using free floating camera and implement a different type of z-buffer.</li>
<li>In debug mode I can now switch from game camera to free floating camera at click of a button.</li>
<li>Added more robust terrain tile painting tools</li>
<li>When a grass tile is sloped above a certain threshold it becomes a dirt tile.</li>
</ul>
<h2 id="pictures">Pictures</h2>
<p><img src="/assets/screenshot_sat_apr_29_19_48_20_2017.png" alt="screenshot" /></p>
<p><img src="/assets/screenshot_sat_apr_29_18_49_34_2017.png" alt="screenshot" /></p>
<p><img src="/assets/screenshot_sat_apr_29_23_18_34_2017.png" alt="screenshot" /></p>
<h2 id="flyover-video">Flyover Video</h2>
<p>Here is a low framerate fly over of the terrain using the free floating camera.</p>
<style>.embed-container { position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; max-width: 100%; } .embed-container iframe, .embed-container object, .embed-container embed { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }</style>
<div class="embed-container"> <iframe title="YouTube video player" width="640" height="390" src="//www.youtube.com/embed/" frameborder="0" allowfullscreen=""></iframe></div></content><author><name>Harry Kilian</name></author><summary type="html">Nothing too major this update, I’ve been working on some other personal things the last month so I haven’t done anything major on the game. Updates Made it so an individual tile will highlight when hovered over with the mouse. You can now make square box selections with the mouse by clicking and dragging. Added a distance fog for when using the free floating camera Replaced black sky color with blue. Fixed a z-clipping issue where the ocean mesh intersected the land mesh. Optimized terrain rendering for free floating camera. Camera used to sit in the middle of the terrain chunk, now any terrain behind the camera is not calculated. Shaders now recompile when using free floating camera and implement a different type of z-buffer. In debug mode I can now switch from game camera to free floating camera at click of a button. Added more robust terrain tile painting tools When a grass tile is sloped above a certain threshold it becomes a dirt tile. Pictures Flyover Video Here is a low framerate fly over of the terrain using the free floating camera.</summary></entry><entry><title type="html">Update 13: Simple Rivers</title><link href="http://localhost:4000/graphics/procedural/progress/2017/04/29/update-12-simple-rivers.html" rel="alternate" type="text/html" title="Update 13: Simple Rivers" /><published>2017-04-29T19:11:28+08:00</published><updated>2017-04-29T19:11:28+08:00</updated><id>http://localhost:4000/graphics/procedural/progress/2017/04/29/update-12-simple-rivers</id><content type="html" xml:base="http://localhost:4000/graphics/procedural/progress/2017/04/29/update-12-simple-rivers.html"><p>For me, one of the most important parts of the world generation has to be the rivers. I feel like I rarely see genuine flowing rivers in games, especially not procedurally generated ones. Minecraft and NoMansSky have ‘rivers’ but they don’t really follow any logic, they don’t really flow, and have no clear end and start. This is because the world of minecraft is on an infinite plane and NoMansSky has infinite planets. The terrain has no hard limits, so it’s not possible to do an actual simulation of erosion or rainfall. For me, rivers created from noise generation just don’t cut it, even a very simple simulation of rainfall and erosion is much more interesting.</p>
<p>I always like to get something working as soon as possible. So I started with a dead simple rainfall model. I attach a ‘water level’ value to each tile, then to simulate rain I increment the ‘water level’ for each tile every step of the simulation. Higher points will get slightly more rain. Then, if the water level on an adjacent tile is lower, I move a fraction of water from the current tile to that adjacent tile. I also evaporate water on each tile by a constant amount each step.</p>
<p><img src="/assets/screenshot_sat_mar_18_20_28_26_2017.png" alt="screenshot" /></p>
<p>Initial results are quite decent, the noise generation already has decent river like formations and valleys carved into it. So the water just flows into the valleys and looks quite natural.</p>
<p><img src="/assets/screenshot_sat_mar_18_18_07_04_2017.png" alt="screenshot" /></p>
<p>Simple beginnings, next step will be to add an erosion model and actually mesh the rivers. Right now, any tile that’s above a water threshold is blue, there is no depth to water, it’s just flat.</p></content><author><name>Harry Kilian</name></author><category term="rivers" /><category term="simulation" /><category term="water" /><summary type="html">For me, one of the most important parts of the world generation has to be the rivers. I feel like I rarely see genuine flowing rivers in games, especially not procedurally generated ones. Minecraft and NoMansSky have ‘rivers’ but they don’t really follow any logic, they don’t really flow, and have no clear end and start. This is because the world of minecraft is on an infinite plane and NoMansSky has infinite planets. The terrain has no hard limits, so it’s not possible to do an actual simulation of erosion or rainfall. For me, rivers created from noise generation just don’t cut it, even a very simple simulation of rainfall and erosion is much more interesting. I always like to get something working as soon as possible. So I started with a dead simple rainfall model. I attach a ‘water level’ value to each tile, then to simulate rain I increment the ‘water level’ for each tile every step of the simulation. Higher points will get slightly more rain. Then, if the water level on an adjacent tile is lower, I move a fraction of water from the current tile to that adjacent tile. I also evaporate water on each tile by a constant amount each step. Initial results are quite decent, the noise generation already has decent river like formations and valleys carved into it. So the water just flows into the valleys and looks quite natural. Simple beginnings, next step will be to add an erosion model and actually mesh the rivers. Right now, any tile that’s above a water threshold is blue, there is no depth to water, it’s just flat.</summary></entry><entry><title type="html">Update 12: Terrain Generation Experiments</title><link href="http://localhost:4000/graphics/procedural/progress/2017/03/16/update-12-terrain-generation-experiments.html" rel="alternate" type="text/html" title="Update 12: Terrain Generation Experiments" /><published>2017-03-16T22:57:11+08:00</published><updated>2017-03-16T22:57:11+08:00</updated><id>http://localhost:4000/graphics/procedural/progress/2017/03/16/update-12-terrain-generation-experiments</id><content type="html" xml:base="http://localhost:4000/graphics/procedural/progress/2017/03/16/update-12-terrain-generation-experiments.html"><p>I talked before about the <a href="/procedural/progress/2017/03/14/update-11-world-generation-refactor.html">improved noise system</a>. I’ve been playing around and experimenting with different parameters, getting some interesting results. The difference between a real island and my fake video game island is that of scale. I want mountains, sweeping rivers, wildly different biomes, all on one island that spans maybe only 1.5 miles coast to coast. So it wouldn’t make sense for my islands to perfectly imitate the natural forming islands of earth. I wouldn’t say the terrain of the islands below look realistic, however these islands might not have even been created using the same tectonic processes. I’ve thought a bit about how far a fantasy world can really deviate from the real world. I think, that If the world looks like it was formed by some sort of natural process then it gets a pass. The real question is weather these maps are fun to play and build on. They definitely provide some nice variation across seeds with each map having some distinctive features.</p>
<p><img src="/assets/terrain-gen-4-tiles.png" alt="4 different seeds" /></p>
<h2 id="changing-lacunarity">Changing lacunarity</h2>
<p>Below I’ve demonstrated the effect of changing lacunarity on an FBM noise which acts as an input to the frequency of a Ridged Multi noise. So thats one set of noise acting as an input on another noise. Lacunarity starts at 0.0 and increments by 0.1 to a final value of 2.5.</p>
<p><img src="/assets/set1272-1.png" alt="Effect of changing lacunarity" /></p>
<h2 id="changing-frequency">Changing frequency</h2>
<p>Below you can see the effect of changing the frequency of the input noise.</p>
<p><img src="/assets/set2416.png" alt="Effect of changing lacunarity" /></p>
<p>The problem with this noise generation is that quite often I get a dud seed, especially when using noise of lower frequency. Sometimes an island will be very small, or overly large. I’m thinking of writing a function which discards maps based on total landmass, then keeps trying new maps until it finds a good fit. I would only need to sample the noise few times, maybe 200 samples, to get a reasonably accurate landmass approximation.</p>
<h2 id="changing-intensity">Changing intensity</h2>
<p>Below is the effect of changing intensity on the input noise. It starts as a sphere because there is a radial gradient subtracted from the noise to act as a falloff. With our input noise having 0 intensity it means that the main noise has a frequency of 0, the noise becomes just a flat color.</p>
<p><img src="/assets/set4752.png" alt="Effect of changing lacunarity" /></p>
<p><img src="/assets/set4216.png" alt="Effect of changing lacunarity" /></p>
<p><img src="/assets/image-3496.png" alt="Effect of changing lacunarity" /></p></content><author><name>Harry Kilian</name></author><summary type="html">I talked before about the improved noise system. I’ve been playing around and experimenting with different parameters, getting some interesting results. The difference between a real island and my fake video game island is that of scale. I want mountains, sweeping rivers, wildly different biomes, all on one island that spans maybe only 1.5 miles coast to coast. So it wouldn’t make sense for my islands to perfectly imitate the natural forming islands of earth. I wouldn’t say the terrain of the islands below look realistic, however these islands might not have even been created using the same tectonic processes. I’ve thought a bit about how far a fantasy world can really deviate from the real world. I think, that If the world looks like it was formed by some sort of natural process then it gets a pass. The real question is weather these maps are fun to play and build on. They definitely provide some nice variation across seeds with each map having some distinctive features. Changing lacunarity Below I’ve demonstrated the effect of changing lacunarity on an FBM noise which acts as an input to the frequency of a Ridged Multi noise. So thats one set of noise acting as an input on another noise. Lacunarity starts at 0.0 and increments by 0.1 to a final value of 2.5. Changing frequency Below you can see the effect of changing the frequency of the input noise. The problem with this noise generation is that quite often I get a dud seed, especially when using noise of lower frequency. Sometimes an island will be very small, or overly large. I’m thinking of writing a function which discards maps based on total landmass, then keeps trying new maps until it finds a good fit. I would only need to sample the noise few times, maybe 200 samples, to get a reasonably accurate landmass approximation. Changing intensity Below is the effect of changing intensity on the input noise. It starts as a sphere because there is a radial gradient subtracted from the noise to act as a falloff. With our input noise having 0 intensity it means that the main noise has a frequency of 0, the noise becomes just a flat color.</summary></entry><entry><title type="html">Update 11: World Generation Refactor</title><link href="http://localhost:4000/procedural/progress/2017/03/14/update-11-world-generation-refactor.html" rel="alternate" type="text/html" title="Update 11: World Generation Refactor" /><published>2017-03-14T22:31:26+08:00</published><updated>2017-03-14T22:31:26+08:00</updated><id>http://localhost:4000/procedural/progress/2017/03/14/update-11-world-generation-refactor</id><content type="html" xml:base="http://localhost:4000/procedural/progress/2017/03/14/update-11-world-generation-refactor.html"><p>I’ve spent some time refactoring the world generation and building a useful world generation editor. I think having an actual visual interface to preview the generation in real time will be massively useful. Before, I would make changes to the algorithm in c++, then have to wait while it compiles and launches to see the changes. This is obviously painfully slow and make makes it very difficult to experiment. Now I can manipulate noise parameters in a custom editor and see the changes right away.</p>
<h2 id="noise">Noise</h2>
<p>Before, all I could do with noise was stack them on top of each other with a blending function (Add, Subtract, Avg, Multiply..). However to get more exciting results the noise parameters need to be deviated by another noise value. So for example, now I can plug ‘Billow’ noise into the frequency parameter of an ‘FBM ‘noise. This kind of perturbation can get really interesting results.</p>
<p><img src="/assets/image-5238.png" alt="screenshot" /></p>
<p><img src="/assets/image-4873.png" alt="screenshot" /></p>
<p><img src="/assets/image-3671.png" alt="screenshot" /></p>
<h2 id="biomes">Biomes</h2>
<p>In all but the first post I ever made on the game you can’t see any biomes on the map. I actually disabled biomes because of a bug in the code. I’ve gone and fixed the bug and tweaked the whole biome generation system. I also wrote a script which takes the current world generation parameters and outputs one large image containg lots of maps using different seeds.</p>
<p><img src="/assets/set3.png" alt="screenshot" /></p>
<p><img src="/assets/seeds.png" alt="screenshot" /></p>
<p>These maps above are using the old noise system. The mountains are just kind of splatted on top of the base noise. Next step will be to play around with the new noise system to create more natural looking mountains which blend into the terrain.</p></content><author><name>Harry Kilian</name></author><summary type="html">I’ve spent some time refactoring the world generation and building a useful world generation editor. I think having an actual visual interface to preview the generation in real time will be massively useful. Before, I would make changes to the algorithm in c++, then have to wait while it compiles and launches to see the changes. This is obviously painfully slow and make makes it very difficult to experiment. Now I can manipulate noise parameters in a custom editor and see the changes right away. Noise Before, all I could do with noise was stack them on top of each other with a blending function (Add, Subtract, Avg, Multiply..). However to get more exciting results the noise parameters need to be deviated by another noise value. So for example, now I can plug ‘Billow’ noise into the frequency parameter of an ‘FBM ‘noise. This kind of perturbation can get really interesting results. Biomes In all but the first post I ever made on the game you can’t see any biomes on the map. I actually disabled biomes because of a bug in the code. I’ve gone and fixed the bug and tweaked the whole biome generation system. I also wrote a script which takes the current world generation parameters and outputs one large image containg lots of maps using different seeds. These maps above are using the old noise system. The mountains are just kind of splatted on top of the base noise. Next step will be to play around with the new noise system to create more natural looking mountains which blend into the terrain.</summary></entry><entry><title type="html">Procedural Planets</title><link href="http://localhost:4000/graphics/procedural/2017/03/08/procedural-planets.html" rel="alternate" type="text/html" title="Procedural Planets" /><published>2017-03-08T01:35:15+08:00</published><updated>2017-03-08T01:35:15+08:00</updated><id>http://localhost:4000/graphics/procedural/2017/03/08/procedural-planets</id><content type="html" xml:base="http://localhost:4000/graphics/procedural/2017/03/08/procedural-planets.html"><p>I put together a little planet generator a few months ago, thought I would share. The generation is based on several parameters like temperature(distance to sun), size, population etc… then it churns out these neat little pixel art planets. Pretty simple but a cool result, this was done in Unity3D.</p>
<p><img src="/assets/planet1.png" alt="screenshot" /></p>
<p><img src="/assets/planet2.png" alt="screenshot" /></p>
<p><img src="/assets/planet3.png" alt="screenshot" /></p>
<p><img src="/assets/planet5.png" alt="screenshot" /></p>
<p><img src="/assets/6.png" alt="screenshot" /></p>
<p><img src="/assets/7.png" alt="screenshot" /></p>
<p><img src="/assets/8.png" alt="screenshot" /></p>
<p><img src="/assets/9.png" alt="screenshot" /></p>
<p><img src="/assets/10.png" alt="screenshot" /></p>
<p><img src="/assets/11.png" alt="screenshot" /></p>
<p><img src="/assets/12.png" alt="screenshot" /></p>
<p><img src="/assets/planetgen.png" alt="screenshot" /></p></content><author><name>Harry Kilian</name></author><summary type="html">I put together a little planet generator a few months ago, thought I would share. The generation is based on several parameters like temperature(distance to sun), size, population etc… then it churns out these neat little pixel art planets. Pretty simple but a cool result, this was done in Unity3D.</summary></entry></feed>