{"id":432,"date":"2017-06-07T08:26:27","date_gmt":"2017-06-07T08:26:27","guid":{"rendered":"http:\/\/osiris.itabc.cnr.it\/scenebaker\/?p=432"},"modified":"2017-06-07T08:26:27","modified_gmt":"2017-06-07T08:26:27","slug":"building-procedural-instancing-tools-for-unreal-engine","status":"publish","type":"post","link":"https:\/\/osiris.itabc.cnr.it\/scenebaker\/index.php\/2017\/06\/07\/building-procedural-instancing-tools-for-unreal-engine\/","title":{"rendered":"Building Procedural Instancing Tools for Unreal Engine"},"content":{"rendered":"<p style=\"text-align: justify;\">When dealing with repeating 3D elements, a meaningful\u00a0approach is\u00a0to procedurally describe\u00a0and generate them through a <em>template<\/em> and a <em>transformation-list<\/em>. The new upcoming version of ATON 2.0 for instance (yes, pun intended) already provides built-in procedural methods in order to instantiate several 3D objects by streaming a template (e.g. a column) and a transformation-list, thus greatly reducing bandwidth. On the desktop side, a porting of such functionalities from OpenSceneGraph to Unreal Engine 4 (ver. 4.16.1) began\u00a0a week ago.<\/p>\n<p style=\"text-align: justify;\">A C++ <em>ActorComponent<\/em>\u00a0has been developed in order to read common ASCII files representing\u00a0TransformList (position, rotation and scale) and a StaticMesh representing the Template. Such functionality can be employed\u00a0into a compact and very basic\u00a0<em>Blueprint node<\/em> (see figure) offering a flexible and manageable tool for\u00a0designers, while maintaining all parsing and processing routines at C++ level. A\u00a0TransformList file can be externally updated (e.g. generated by another software) and the procedural generation automatically rebuilds <em>right inside<\/em> Unreal Editor.<\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/osiris.itabc.cnr.it\/scenebaker\/wp-content\/uploads\/2017\/06\/ue4-cpp-instancer.jpg\"><br \/>\n<\/a><a href=\"https:\/\/osiris.itabc.cnr.it\/scenebaker\/wp-content\/uploads\/2017\/06\/ue4-cpp-instancer2.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-460\" src=\"https:\/\/osiris.itabc.cnr.it\/scenebaker\/wp-content\/uploads\/2017\/06\/ue4-cpp-instancer2.jpg\" alt=\"ue4-cpp-instancer2\" width=\"1600\" height=\"757\" srcset=\"https:\/\/osiris.itabc.cnr.it\/scenebaker\/wp-content\/uploads\/2017\/06\/ue4-cpp-instancer2.jpg 1600w, https:\/\/osiris.itabc.cnr.it\/scenebaker\/wp-content\/uploads\/2017\/06\/ue4-cpp-instancer2-300x142.jpg 300w, https:\/\/osiris.itabc.cnr.it\/scenebaker\/wp-content\/uploads\/2017\/06\/ue4-cpp-instancer2-1024x484.jpg 1024w\" sizes=\"(max-width: 1600px) 100vw, 1600px\" \/><\/a><a href=\"https:\/\/osiris.itabc.cnr.it\/scenebaker\/wp-content\/uploads\/2017\/06\/ue4-cpp-instancer.jpg\"><br \/>\n<\/a>A second Instancer tool has been developed (this time, fully Blueprint) to offer a customizable tool to generate randomized instances (always in Editor) in a given radius with draping, overlapping options, scale variance and much more. The following shows an Instancer with trees (top left), another Instancer with boulders (bottom left), and a third Instancer (ferns) testing adaptive location on top of world geometries (right).<a href=\"https:\/\/osiris.itabc.cnr.it\/scenebaker\/wp-content\/uploads\/2017\/06\/ue4-inst-bp1.jpg\"><br \/>\n<\/a><\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/osiris.itabc.cnr.it\/scenebaker\/wp-content\/uploads\/2017\/06\/ue4-inst-draping2.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-452\" src=\"https:\/\/osiris.itabc.cnr.it\/scenebaker\/wp-content\/uploads\/2017\/06\/ue4-inst-draping2.jpg\" alt=\"ue4-inst-draping2\" width=\"1200\" height=\"645\" srcset=\"https:\/\/osiris.itabc.cnr.it\/scenebaker\/wp-content\/uploads\/2017\/06\/ue4-inst-draping2.jpg 1200w, https:\/\/osiris.itabc.cnr.it\/scenebaker\/wp-content\/uploads\/2017\/06\/ue4-inst-draping2-300x161.jpg 300w, https:\/\/osiris.itabc.cnr.it\/scenebaker\/wp-content\/uploads\/2017\/06\/ue4-inst-draping2-1024x550.jpg 1024w\" sizes=\"(max-width: 1200px) 100vw, 1200px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">Adding another Instancer for grass, and tweaking\u00a0of scale variance inside Unreal Editor.<\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/osiris.itabc.cnr.it\/scenebaker\/wp-content\/uploads\/2017\/06\/ue4-inst-bp-grass-c.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-447\" src=\"https:\/\/osiris.itabc.cnr.it\/scenebaker\/wp-content\/uploads\/2017\/06\/ue4-inst-bp-grass-c.jpg\" alt=\"ue4-inst-bp-grass-c\" width=\"800\" height=\"857\" srcset=\"https:\/\/osiris.itabc.cnr.it\/scenebaker\/wp-content\/uploads\/2017\/06\/ue4-inst-bp-grass-c.jpg 800w, https:\/\/osiris.itabc.cnr.it\/scenebaker\/wp-content\/uploads\/2017\/06\/ue4-inst-bp-grass-c-280x300.jpg 280w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">There are more upcoming features&#8230; Stay tuned!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>When dealing with repeating 3D elements, a meaningful\u00a0approach is\u00a0to procedurally describe\u00a0and generate them through a template and a transformation-list. The new upcoming version of ATON 2.0 for instance (yes, pun intended) already provides built-in procedural methods in order to instantiate several 3D objects by streaming a template (e.g. a column) and a transformation-list, thus greatly &#8230; <a title=\"Building Procedural Instancing Tools for Unreal Engine\" class=\"read-more\" href=\"https:\/\/osiris.itabc.cnr.it\/scenebaker\/index.php\/2017\/06\/07\/building-procedural-instancing-tools-for-unreal-engine\/\" aria-label=\"More on Building Procedural Instancing Tools for Unreal Engine\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[5],"tags":[15],"_links":{"self":[{"href":"https:\/\/osiris.itabc.cnr.it\/scenebaker\/index.php\/wp-json\/wp\/v2\/posts\/432"}],"collection":[{"href":"https:\/\/osiris.itabc.cnr.it\/scenebaker\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/osiris.itabc.cnr.it\/scenebaker\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/osiris.itabc.cnr.it\/scenebaker\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/osiris.itabc.cnr.it\/scenebaker\/index.php\/wp-json\/wp\/v2\/comments?post=432"}],"version-history":[{"count":23,"href":"https:\/\/osiris.itabc.cnr.it\/scenebaker\/index.php\/wp-json\/wp\/v2\/posts\/432\/revisions"}],"predecessor-version":[{"id":465,"href":"https:\/\/osiris.itabc.cnr.it\/scenebaker\/index.php\/wp-json\/wp\/v2\/posts\/432\/revisions\/465"}],"wp:attachment":[{"href":"https:\/\/osiris.itabc.cnr.it\/scenebaker\/index.php\/wp-json\/wp\/v2\/media?parent=432"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/osiris.itabc.cnr.it\/scenebaker\/index.php\/wp-json\/wp\/v2\/categories?post=432"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/osiris.itabc.cnr.it\/scenebaker\/index.php\/wp-json\/wp\/v2\/tags?post=432"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}