{"id":468,"date":"2015-02-13T01:29:27","date_gmt":"2015-02-13T01:29:27","guid":{"rendered":"http:\/\/www.world-machine.com\/blog\/?p=468"},"modified":"2015-02-13T01:29:27","modified_gmt":"2015-02-13T01:29:27","slug":"whats-in-progress-at-the-moment","status":"publish","type":"post","link":"https:\/\/www.world-machine.com\/blog\/2015\/02\/whats-in-progress-at-the-moment\/","title":{"rendered":"What&#8217;s in Progress At the Moment"},"content":{"rendered":"<p>Hi folks,<\/p>\n<p>I realize things have been pretty slow\/uncommunicative lately, for which I do apologize. It&#8217;s probably well overdue for me to lift the veil a little bit and show what&#8217;s in progress.<\/p>\n<p>If there&#8217;s a theme to the next release of WM, it&#8217;s this:<\/p>\n<h1 style=\"text-align: center;\">Framework Changes:\u00a0Generalize to Specialize<\/h1>\n<p style=\"text-align: left;\">\n<p style=\"text-align: left;\">Cryptic? Here&#8217;s what it means.<\/p>\n<p style=\"text-align: left;\">All of the changes below are changes to the way World Machine works on the inside. These changes have been made to allow for new planned devices and features. <strong>Many of those new features have not been written yet,\u00a0<\/strong>but I will discuss them anyways to provide the context for why the change was made.<\/p>\n<h2>Goodbye Layout Generator?<\/h2>\n<p>One of the major framework changes is allowing many more\u00a0&#8220;Layout-type devices&#8221;, not just the Layout Generator.\u00a0In WM 2.x the layout generator and the view are intimately linked.<\/p>\n<p>No longer!<\/p>\n<p>The Layout Generator will be renamed &#8220;Layout Shapes&#8221;, reflecting that many more Layout devices will be on the way. A <strong>new &#8220;Layout&#8221; tab<\/strong> will be added to the toolbar, and any device (including plugins by other authors!) can now potentially expose a layout UI.<\/p>\n<p>This will immediately be useful in the River Generator device described later. But in the future, other exciting abilities would easily include:<\/p>\n<ul>\n<li><strong>Layout Faults<\/strong> (create specific terraces\/fault lines at a location)<\/li>\n<li><strong>Layout Roads<\/strong> (an enhancement of the path tool that could better model roads by including concepts like banked turns, etc)<\/li>\n<li><strong>Layout Segments<\/strong> (let you create segment maps interactively &#8212; for example, quickly create a mask for a particular valley by clicking anywhere in it)<\/li>\n<\/ul>\n<p>I&#8217;m sure you can think of many more specialized layout devices that would be useful! And I&#8217;d love to hear your ideas. The main thing that has held this back in the past was that the layout interface was only available to the layout generator; that will no longer be true.<\/p>\n<h2>Curve Datatype<\/h2>\n<p>This is a simple but powerful extension &#8212; there are now a variety of devices that produce and manipulate 1D curves. More will appear with time. \u00a0Eventually the existing devices will be retrofitted to accept them &#8212; making the existing Curves device much more useful since it won&#8217;t just be hand-sketching curves anymore.<\/p>\n<h2>More Macro-like things?<\/h2>\n<p>The macro device is also quite special in WM 2.x. It&#8217;s special-ness has been extracted, and can now be extended into new devices. Why would you want to do this?<\/p>\n<ul>\n<li>A <strong>Repetition (or Loop) Device<\/strong> would apply its internal network multiple times, looping the result of the first application back into the input for the next time around. This lets you do things like apply a &#8220;little bit&#8221; of erosion of one type, then a bit of another, repeated over and over to create novel effects.<\/li>\n<li>Devices can now have <strong>&#8220;internal networks.&#8221;<\/strong> This is like a mini-macro where you can override and provide\u00a0more sophisticated effects than are built in to the device &#8212; for example, the Scatter device is planned to have a &#8220;User Specified&#8221; compositing type that would let you\u00a0create\u00a0the merge operation with an internal network rather than than using the default alpha blended\/max\/etc options.<\/li>\n<\/ul>\n<h2>User-defined Datatypes<\/h2>\n<p>I can already imagine the head scratching on this one &#8212; Not exactly the kind of headline that gets you racing out of bed to use World Machine. And yet, this is a really powerful framework feature, and I&#8217;ll explain why below.<\/p>\n<p>There are lots of places within World Machine where you really need more than one piece of data to make sense of something.<\/p>\n<p>Essentially, it&#8217;s now possible to\u00a0create custom datatypes that are a bunch of existing World Machine datatypes (heightfield, RGB, parameter, etc) glued together.<\/p>\n<p>This is roughly equivalent to creating a &#8220;struct&#8221; in a regular programming language. What&#8217;s more, the same code allows for treating an arbitrary number \u00a0of the same datatype as one thing &#8212; roughly an&#8221;array&#8221; in a programming language.<\/p>\n<p>What does this enable?<\/p>\n<h4>Composite Things<\/h4>\n<p>Common things you might want to specify that previously would take two or more wires can now be carried around as a single thing. Some examples include:<\/p>\n<ul>\n<li>Distortion amounts (specified as either an X and Y distortion amount map, or angle and amount maps &#8212; what&#8217;s more, you could throw in a parameter as well to let you tell apart which one you have on your hands!)<\/li>\n<li>RGBA (RGB and an alpha mask)<\/li>\n<li>Texture weightmaps (rather than a bunch of individual wires, you can treat textures and their weights as one unit)<\/li>\n<\/ul>\n<h4>Collections of Things<\/h4>\n<p>&#8220;Collections&#8221; \u00a0of heightfields\/textures\/etc that can be treated as a single entity. This lets you do things like:<\/p>\n<ul>\n<li>&#8220;Execute for All&#8221; macro device that could perform all of its internal operations on each element of the collection. For example, if you imported a whole library of textures and want to color-correct all of them the same way (or, have each one automatically adjusted according to the network you&#8217;ve set internally). I haven&#8217;t pushed in this direction yet much at all, but it certainly would enable &#8220;batch processing&#8221; type workflows..<\/li>\n<li>Provide bulk variations to the\u00a0Instance Scatter device &#8212; if you have a whole library of individual things you want to scatter, you can just connect the library to the scatter device rather than 20 individual wires&#8230;<\/li>\n<\/ul>\n<h4>Simplication<\/h4>\n<p>How does a complex feature like this actually make your life\u00a0<strong>easier<\/strong>? In lots of ways. For example:<\/p>\n<ul>\n<li><strong>Remove clutter from the workview<\/strong> by having groups collapse all of the wires from devices in one group heading to another group into a single &#8220;cable bundle&#8221;.<\/li>\n<li>Macro and plugin authors can transfer large numbers of settings between several different devices without exposing any of them to the user, making things much cleaner and intuitive for the end user &#8212; keep all the spaghetti inside the black box where it belongs.<\/li>\n<\/ul>\n<p>So far, I&#8217;ve talked about framework changes. I should emphasize again that at least half of what I&#8217;ve talked about here is <strong>still in the future<\/strong>. What&#8217;s been made so far is the framework to enable them.<\/p>\n<p>The Loop Device doesn&#8217;t exist yet, for example, but with the new framework in place it is trivial to create. The focus so far has been in designing the generalizations that will allow better specialization in the future.<\/p>\n<p>In the next post, I&#8217;ll talk about the major new feature that inspired and leverages these changes, the River Generator&#8230;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hi folks, I realize things have been pretty slow\/uncommunicative lately, for which I do apologize. It&#8217;s probably well overdue for me to lift the veil a little bit and show what&#8217;s in progress. If there&#8217;s a theme to the next release of WM, it&#8217;s this: Framework Changes:\u00a0Generalize to Specialize Cryptic? Here&#8217;s what it means. All [&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-468","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\/468","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=468"}],"version-history":[{"count":1,"href":"https:\/\/www.world-machine.com\/blog\/wp-json\/wp\/v2\/posts\/468\/revisions"}],"predecessor-version":[{"id":469,"href":"https:\/\/www.world-machine.com\/blog\/wp-json\/wp\/v2\/posts\/468\/revisions\/469"}],"wp:attachment":[{"href":"https:\/\/www.world-machine.com\/blog\/wp-json\/wp\/v2\/media?parent=468"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.world-machine.com\/blog\/wp-json\/wp\/v2\/categories?post=468"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.world-machine.com\/blog\/wp-json\/wp\/v2\/tags?post=468"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}