{"id":576,"date":"2017-12-01T00:06:08","date_gmt":"2017-12-01T00:06:08","guid":{"rendered":"http:\/\/www.world-machine.com\/blog\/?p=576"},"modified":"2017-12-01T00:44:27","modified_gmt":"2017-12-01T00:44:27","slug":"build-3018-whats-in-a-name","status":"publish","type":"post","link":"https:\/\/www.world-machine.com\/blog\/2017\/12\/build-3018-whats-in-a-name\/","title":{"rendered":"Build 3018.. What&#8217;s in a Name?"},"content":{"rendered":"<p>Build 3018 should be available tonight, and it will mark a significant milestone for World Machine&#8230;. without even considering what it contains!<\/p>\n<p>Specifically,\u00a0 3018 will become the basis for the next Release Channel build.\u00a0 Although it&#8217;s natural to think of this as &#8220;World Machine 3&#8221;, we&#8217;re moving away from Big Number Releases entirely. In a world where quarterly+ dev channel feature releases and constant improvements are happening to World Machine, Big Number releases simply lose their meaning (<em>unless you like Mozilla-style versions like &#8216;Firefox 53&#8217;&#8230;I sure don&#8217;t.<\/em>)<\/p>\n<p>Instead, World Machine will simply be branded as&#8230;<\/p>\n<p><strong>World Machine<\/strong>.<\/p>\n<p>Whatever build number it may be.<\/p>\n<p>Of course, some releases are still much more important than others, and it&#8217;s helpful to have a way to refer to them. Following in the footprints of Apple, Intel, and others,\u00a0when a World Machine build contains major new features it will also receive a build name. We&#8217;re adopting a whimsical but appropriate version naming system; the build names will be notable mountains or natural features in the Pacific Northwest part of the US, my home.<\/p>\n<p>And so, I introduce to you:<\/p>\n<h1>Build 3018 &#8216;Mailbox Peak&#8217;<\/h1>\n<figure id=\"attachment_586\" aria-describedby=\"caption-attachment-586\" style=\"width: 700px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.world-machine.com\/blog\/?attachment_id=586\" rel=\"attachment wp-att-586\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-586\" src=\"http:\/\/www.world-machine.com\/blog\/wp-content\/uploads\/2017\/12\/Real-Mailbox-Peak.jpg\" alt=\"\" width=\"700\" height=\"467\" srcset=\"https:\/\/www.world-machine.com\/blog\/wp-content\/uploads\/2017\/12\/Real-Mailbox-Peak.jpg 700w, https:\/\/www.world-machine.com\/blog\/wp-content\/uploads\/2017\/12\/Real-Mailbox-Peak-300x200.jpg 300w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/a><figcaption id=\"caption-attachment-586\" class=\"wp-caption-text\">The actual Mailbox Peak, midwinter.<\/figcaption><\/figure>\n<p>Mailbox Peak is a local mountain near to Seattle that is beautiful in its own right, but serves especially as notorious training for mountaineers aspiring to larger summits. It&#8217;s a fitting name for this build&#8230;<\/p>\n<p>Which more than anything, is about getting <strong>faster<\/strong>.<\/p>\n<p>Let&#8217;s talk about:<\/p>\n<ol>\n<li>Speed<\/li>\n<li>UI Improvements<\/li>\n<li>New Coastal Erosion Device<\/li>\n<li>Many small changes<\/li>\n<\/ol>\n<hr \/>\n<h1>Speed<\/h1>\n<p>Build 3018&#8217;s primary focus is improving build speed for large worlds on modern, many-cored machines.<\/p>\n<p>The subtext here is that I finally updated my 2012-era dev workstation to a modern, high performance machine &#8212; one of AMD&#8217;s new Threadripper processors. This thing is a beast, with 16\/32 cores available, and it was immediately obvious that World Machine was not always putting such parallelism to work. So I set about to change that. You&#8217;ll certainly still notice the benefits even on more humble workstations.<\/p>\n<p>Here&#8217;s a performance comparison on a selection of example worlds between 3017 and 3018:<a href=\"http:\/\/www.world-machine.com\/blog\/?attachment_id=579\" rel=\"attachment wp-att-579\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-579\" src=\"http:\/\/www.world-machine.com\/blog\/wp-content\/uploads\/2017\/11\/Build-3018-Improvement.png\" alt=\"\" width=\"910\" height=\"660\" srcset=\"https:\/\/www.world-machine.com\/blog\/wp-content\/uploads\/2017\/11\/Build-3018-Improvement.png 910w, https:\/\/www.world-machine.com\/blog\/wp-content\/uploads\/2017\/11\/Build-3018-Improvement-300x218.png 300w, https:\/\/www.world-machine.com\/blog\/wp-content\/uploads\/2017\/11\/Build-3018-Improvement-768x557.png 768w\" sizes=\"auto, (max-width: 910px) 100vw, 910px\" \/><\/a> <a href=\"http:\/\/www.world-machine.com\/blog\/?attachment_id=580\" rel=\"attachment wp-att-580\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-580\" src=\"http:\/\/www.world-machine.com\/blog\/wp-content\/uploads\/2017\/11\/Performance-Scaling.png\" alt=\"\" width=\"910\" height=\"660\" srcset=\"https:\/\/www.world-machine.com\/blog\/wp-content\/uploads\/2017\/11\/Performance-Scaling.png 910w, https:\/\/www.world-machine.com\/blog\/wp-content\/uploads\/2017\/11\/Performance-Scaling-300x218.png 300w, https:\/\/www.world-machine.com\/blog\/wp-content\/uploads\/2017\/11\/Performance-Scaling-768x557.png 768w\" sizes=\"auto, (max-width: 910px) 100vw, 910px\" \/><\/a><\/p>\n<p>Build 3018 is faster across the board, even where 3017 already did quite well. In certainly very common cases, it&#8217;s dramatically faster.<\/p>\n<p>As you can see from the above, not only does 3018 bring sometimes-dramatic improvements in speed, but World Machine now scales quite well to high core count machines. Individual easily-scaled devices like Noise show completely linear improvement, while entire world builds aren&#8217;t that far behind.<\/p>\n<p>How?<\/p>\n<h4>Multicore everything<\/h4>\n<p>Virtually all* devices are now multithreaded. Many of these are relatively fast devices like the Combiner that on smaller worlds have a negligible effect. Nonetheless, when building large worlds, speeding up these common devices shaves seconds-to-minutes off the build times.<\/p>\n<p><em>For completeness, the following devices received multithreading support:<\/em><\/p>\n<p><em>Coastal Erosion, Equalizer, Clamp, Height Curves, Height Select, Slope Select, Select Convexity, Select Aspect, Select Hue, Combiner, Chooser , Channel Combiner, Channel Splitter, Circular Gradient, Constant Height, Constant Color, Height Combiner, Height Splitter, Normal Maker, Splat Converter, Local Placer, Local Scatter, File Input.<\/em><\/p>\n<p>*The only remaining 1x devices are essentially just the parameter devices and the Tiled File Input device, which has a separate set of improvements in progress that needed to be coordinated with. That will happen later&#8230;<\/p>\n<h4>Optimized Implementations<\/h4>\n<p>Some optimizations have been made to the Erosion, Advanced Perlin, Snow, and Layout Generator devices. In addition, many internal core operations including mesh creation, grid resizing,\u00a0 etc now use all processor resources.<\/p>\n<p>In particular, the Layout Generator device benefits, now being able to use all threads to build a single shape whereas before each shape was only built by a single thread. In worlds that heavily use layout shapes, this will be a massive speed win.<\/p>\n<h4>New Compiler<\/h4>\n<p>World Machine has finally been moved to a modern compiler &#8212; Visual Studio 2017. This brings with it improved optimizations that on their own improve performance between 0-15%. It should also make writing plugins easier, as the old compiler was difficult to get a hold of these days.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>This alone would be enough to merit a new release.<\/p>\n<p>But.. there&#8217;s more.<\/p>\n<h1>Workview Improvements + Dark-theme<\/h1>\n<p>The workview has gained many small tweaks, most notably a new &#8220;dark&#8221; color scheme.<\/p>\n<p><a href=\"http:\/\/www.world-machine.com\/blog\/wp-content\/uploads\/2017\/11\/DarkUI.jpg\" rel=\"attachment wp-att-581\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-581 size-full\" src=\"http:\/\/www.world-machine.com\/blog\/wp-content\/uploads\/2017\/11\/DarkUI.jpg\" alt=\"\" width=\"1233\" height=\"639\" srcset=\"https:\/\/www.world-machine.com\/blog\/wp-content\/uploads\/2017\/11\/DarkUI.jpg 1233w, https:\/\/www.world-machine.com\/blog\/wp-content\/uploads\/2017\/11\/DarkUI-300x155.jpg 300w, https:\/\/www.world-machine.com\/blog\/wp-content\/uploads\/2017\/11\/DarkUI-768x398.jpg 768w, https:\/\/www.world-machine.com\/blog\/wp-content\/uploads\/2017\/11\/DarkUI-1024x531.jpg 1024w\" sizes=\"auto, (max-width: 1233px) 100vw, 1233px\" \/><\/a><\/p>\n<p>If you don&#8217;t like dark colors, you can switch back to the old default light scheme in program options. Due to the old framework that WM is built on, full dark throughout the UI will have to wait, but all of the OpenGL viewports use the new color scheme.<\/p>\n<p>Also, a new option for wirecolor-by-group has been added. Just like the dark scheme, you can switch back to color-by-type if you&#8217;d like, but I think you&#8217;ll find that it&#8217;s very helpful to be able to color a set of wires according to a purpose.<\/p>\n<p>In addition, various other bits of the workview UI large and small have been tweaked, including:<\/p>\n<ul>\n<li>Improved grid\/snap behavior &#8212; this is actually quite helpful as you can finally consistently line devices and groups up properly.<\/li>\n<li>New &#8220;Snap All to Grid&#8221; to fix old worlds \ud83d\ude09 and for those who don&#8217;t use a grid normally.<\/li>\n<li>Some improvements to wire routing, highlighting<\/li>\n<li>Removed device deletion warning thanks to having Undo now<\/li>\n<li>Pan using arrow keys in Device View<\/li>\n<li>Default left-mouse drag action is now panning instead of box-select (use shift or ctrl for that)<\/li>\n<\/ul>\n<p>In general, I spent some time revisiting the Device Workview to try to make its operation more understandable for new users.<\/p>\n<h1>New Coastal Erosion Device<\/h1>\n<p>The Coastal Erosion device has been improved for 3018. Although operating on essentially the same principles as the previous version (mostly based on modifying height curves appropriately), you&#8217;ll find it that it creates more pleasing results as well as being easier to understand and use.<\/p>\n<p><a href=\"http:\/\/www.world-machine.com\/blog\/wp-content\/uploads\/2017\/11\/New-Coastal.jpg\" rel=\"attachment wp-att-582\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-582 size-full\" src=\"http:\/\/www.world-machine.com\/blog\/wp-content\/uploads\/2017\/11\/New-Coastal.jpg\" alt=\"\" width=\"1213\" height=\"776\" srcset=\"https:\/\/www.world-machine.com\/blog\/wp-content\/uploads\/2017\/11\/New-Coastal.jpg 1213w, https:\/\/www.world-machine.com\/blog\/wp-content\/uploads\/2017\/11\/New-Coastal-300x192.jpg 300w, https:\/\/www.world-machine.com\/blog\/wp-content\/uploads\/2017\/11\/New-Coastal-768x491.jpg 768w, https:\/\/www.world-machine.com\/blog\/wp-content\/uploads\/2017\/11\/New-Coastal-1024x655.jpg 1024w\" sizes=\"auto, (max-width: 1213px) 100vw, 1213px\" \/><\/a><\/p>\n<p>The main goals here were:<\/p>\n<ul>\n<li>Simplify the parameters, as many of the old ones were not obvious how to best manipulate together<\/li>\n<li>Create higher quality output, in particular the way that terrain above waterlevel was affected.<\/li>\n<li>Fix problems that made masks output from the old device hard to work with<\/li>\n<\/ul>\n<p>Pursuing the first goal, the number of parameters was reduced to the essentials:<\/p>\n<p><a href=\"http:\/\/www.world-machine.com\/blog\/?attachment_id=583\" rel=\"attachment wp-att-583\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-583\" src=\"http:\/\/www.world-machine.com\/blog\/wp-content\/uploads\/2017\/11\/New-Coastal-UI.jpg\" alt=\"\" width=\"605\" height=\"267\" srcset=\"https:\/\/www.world-machine.com\/blog\/wp-content\/uploads\/2017\/11\/New-Coastal-UI.jpg 605w, https:\/\/www.world-machine.com\/blog\/wp-content\/uploads\/2017\/11\/New-Coastal-UI-300x132.jpg 300w\" sizes=\"auto, (max-width: 605px) 100vw, 605px\" \/><\/a><\/p>\n<p>While hopefully the first image shows the kinds of results that you can now more easily achieve!<\/p>\n<h1>Smaller Things<\/h1>\n<p>Finally, a number of things large and small\u00a0 have been tweaked:<\/p>\n<ul>\n<li>Build Estimator lower bound improved<\/li>\n<li>River Device goes directly to layout view<\/li>\n<li>Entering river\/layout devices scrolls to the render extents<\/li>\n<li>Left-side preview says what device is being displayed<\/li>\n<li>Checkpoint device now auto-names from the input names if nothing else is provided<\/li>\n<li>Height Curve now lets you specify that it affects only a certain height range. This is <strong>incredibly useful<\/strong>! In addition, you can fade the curve effect.<\/li>\n<li>Height Selector falloff is now specified in meters<\/li>\n<li>3D View now uses anisotropic filtering for improved graphics quality, and is smoother and more responsive<\/li>\n<li>Build Statistics now update faster<\/li>\n<li>Bugfixes, including &#8220;Disable group instead of device&#8221; and &#8220;3D View doesn&#8217;t update when view is frozen&#8221;<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>Build 3018 will go live tonight, hopefully.<\/p>\n<p>The Release Channel version will follow along as quickly as I can make happen &#8212; it will contain reworked examples, etc, as it will also become the default choice for new Basic Edition downloads, and that will take some time. And then the WM website in general is getting a refresh to go with it. So there&#8217;s lots happening, but Dev Channel people get the action first!<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Build 3018 should be available tonight, and it will mark a significant milestone for World Machine&#8230;. without even considering what it contains! Specifically,\u00a0 3018 will become the basis for the next Release Channel build.\u00a0 Although it&#8217;s natural to think of this as &#8220;World Machine 3&#8221;, we&#8217;re moving away from Big Number Releases entirely. In a [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"publish_to_discourse":"","publish_post_category":"","wpdc_auto_publish_overridden":"","wpdc_topic_tags":"","wpdc_pin_topic":"","wpdc_pin_until":"","discourse_post_id":"","discourse_permalink":"","wpdc_publishing_response":"","wpdc_publishing_error":"","footnotes":""},"categories":[2],"tags":[],"class_list":["post-576","post","type-post","status-publish","format-standard","hentry","category-world-machine-development-news"],"_links":{"self":[{"href":"https:\/\/www.world-machine.com\/blog\/wp-json\/wp\/v2\/posts\/576","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.world-machine.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.world-machine.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.world-machine.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.world-machine.com\/blog\/wp-json\/wp\/v2\/comments?post=576"}],"version-history":[{"count":10,"href":"https:\/\/www.world-machine.com\/blog\/wp-json\/wp\/v2\/posts\/576\/revisions"}],"predecessor-version":[{"id":592,"href":"https:\/\/www.world-machine.com\/blog\/wp-json\/wp\/v2\/posts\/576\/revisions\/592"}],"wp:attachment":[{"href":"https:\/\/www.world-machine.com\/blog\/wp-json\/wp\/v2\/media?parent=576"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.world-machine.com\/blog\/wp-json\/wp\/v2\/categories?post=576"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.world-machine.com\/blog\/wp-json\/wp\/v2\/tags?post=576"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}