{"id":7899,"date":"2023-11-16T10:18:20","date_gmt":"2023-11-16T10:18:20","guid":{"rendered":"https:\/\/www.katsbits.com\/codex\/?p=7899"},"modified":"2023-11-20T17:29:45","modified_gmt":"2023-11-20T17:29:45","slug":"nowhere-minecraft","status":"publish","type":"post","link":"https:\/\/www.katsbits.com\/codex\/nowhere-minecraft\/","title":{"rendered":"Nowhere Minecraft Room Prep in Blender"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_83 counter-hierarchy ez-toc-counter ez-toc-light-blue ez-toc-container-direction\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<label for=\"ez-toc-cssicon-toggle-item-6a074da802b12\" class=\"ez-toc-cssicon-toggle-label\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/label><input type=\"checkbox\"  id=\"ez-toc-cssicon-toggle-item-6a074da802b12\"  aria-label=\"Toggle\" \/><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.katsbits.com\/codex\/nowhere-minecraft\/#description\" >Description<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.katsbits.com\/codex\/nowhere-minecraft\/#mesh-optimisation\" >Mesh Optimisation<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.katsbits.com\/codex\/nowhere-minecraft\/#two-sided-meshes\" >Two-Sided Meshes<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.katsbits.com\/codex\/nowhere-minecraft\/#timestamps\" >Timestamps<\/a><\/li><\/ul><\/nav><\/div>\n<div style=\"background-color: black; position: relative; padding-bottom: 56.25%; padding-top: 25px; height: 0; overflow: hidden; max-width: 100%;\"><center><iframe style=\"position: absolute; top: 0; left: 0; width: 100%; height: 100%;\" src=\"https:\/\/rumble.com\/embed\/v3pf0nd\/?pub=d3lcu\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/center><\/div>\n<h3><span class=\"ez-toc-section\" id=\"description\"><\/span>Description<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Continuing on from <a href=\"https:\/\/www.katsbits.com\/codex\/tag\/nowhere\/\">making rooms for Nowhere metaverse<\/a>, this exercise solidifies series in a finalised Minecraft style room that&#8217;s slightly larger and includes an number of Nowhere entities for some basic interaction. With scene now meshed it has to be <i>optimised<\/i> and <a href=\"https:\/\/www.katsbits.com\/codex\/nowhere-basics\/\">all hidden or non-visible (to the User) faces removed<\/a>. This applies primarily to the platforms, which are single-sided (<a href=\"https:\/\/www.katsbits.com\/codex\/backface-culling\/\">Backface Culling<\/a> enabled). For the grass, bushes and tree leaves, these are duplicated and inverted to create <a href=\"https:\/\/www.katsbits.com\/codex\/double-sided-materials\/\">two-sided objects<\/a> which ensures they illuminate and shade correctly. Once the visible elements are prepped they are duplicated and flagged as Collision objects, before finally placing <a href=\"https:\/\/www.katsbits.com\/codex\/nowhere-entities\/\">Nowhere game entities<\/a>, Screen, Content and so on.<\/p>\n<p><b>Duration<\/b>: total c. 1 hr 20 mins (01:20:00).<br \/>\n<b>Info<\/b>: 1080p.<br \/>\n<b>Suitability<\/b>: Beginner+.<br \/>\n<b>Source<\/b>: <a href=\"https:\/\/www.katsbits.com\/files\/nowhere\/katsbits_nowhere-minecraft-source.zip\">KatsBits \u2013 Nowhere Minecraft Source<\/a> (c. 250 KB \u2013 *.blend, *.gltf, *.fbx, *.png), Compatible with Blender 3.6 LTS and above.<br \/>\n<b>Room URL<\/b>: <a href=\"https:\/\/now.urnowhere.com\/invite\/sXFUZGTmfJVgKiYOrunTXQebz?spaceId=MIH8xAyQkPfOP3Bqh9pA\" rel=\"noopener\" target=\"_blank\">Nowhere Live Station<\/a>.<\/p>\n<blockquote><p><b>Design note<\/b>: when preparing rooms for Nowhere it&#8217;s critical to understand <i>optimisation<\/i>, that is, reducing meshes down to the bare minimum required to describe a scene and\/or using as few resources as possible to render it. <\/p>\n<h4><span class=\"ez-toc-section\" id=\"mesh-optimisation\"><\/span>Mesh Optimisation<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>While the platforms could be left in their original state as a series of individual blocks that just happen to be Joined into a single object, doing this means a lot of mesh data has to be processed even though it will never been seen by the User [1]. In all instances this occurs, such material should be considered <i>waste<\/i> and removed [2]. How this is done depends on the object, however, reduction is generally carried out by <a href=\"https:\/\/www.katsbits.com\/codex\/edit-mode-basics\/\">manually editing and removing offending elements<\/a>, or using <a href=\"https:\/\/www.katsbits.com\/codex\/nowhere-basics\/\">Decimate<\/a> to automate the process. In either case, and again referring context, this will result in first using <b>Join<\/b> (<b>Object \u00bb Join<\/b> or <span class=\"shortcutkey\">Ctrl<\/span> + <span class=\"shortcutkey\">J<\/span>\/<span class=\"shortcutkey\">Command<\/span> + <span class=\"shortcutkey\">J<\/span> [MacOS]) to attached blocks together forming a single mesh, then <b>Merge By Distance<\/b> (remove doubles) to collapse coincidental vertices &#8211; <i>these form as a consequence of blocks butting up to each other, vertices occupy the same coordinates while belonging to separate sub-meshes<\/i>.<\/p>\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/nowhere\/optimising-unseen-waste.jpg\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" style=\"width: 98.5%; height: auto;\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/nowhere\/optimising-unseen-waste.jpg\" alt=\"Unseen but rendered faces\" width=\"900px\" height=\"500px\" border=\"0\" \/><\/a><br \/>\n<a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/nowhere\/optimising-unseen-waste-deleted.jpg\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" style=\"width: 98.5%; height: auto;\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/nowhere\/optimising-unseen-waste-deleted.jpg\" alt=\"Deleted unseen faces\" width=\"900px\" height=\"500px\" border=\"0\" \/><\/a><br \/>\n<i>Shown in <b>Wireframe<\/b> display mode for clarity, image-top, unseen (internal) faces [1] left in place are a resource hog that consume processing power that, image-bottom, should otherwise be directed at elements that can be seen [2].<\/i><\/p>\n<h4><span class=\"ez-toc-section\" id=\"two-sided-meshes\"><\/span>Two-Sided Meshes<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Where both sides of an object are meant to be seen, and for each to be correctly lit relative to the scenes lighting, they may need to include a separate front and back face, i.e. two plains stacked back-to-back. While both sides might carry the same material and image assignment, this back-to-back approach ensures each each is lit or shaded correctly depending on their orientation towards light sources.<\/p>\n<div style=\"background-color: #eee; color: #000; width:98.5%; padding: 1.0em;\">Meshes are actually single-sided by default, appearing double-sided due to the way programs like Blender and Nowhere duplicate the available face data and flip it at run-time to create (pseudo) two-sided meshes. While Blender is clever enough to know how each face should then be lit or shaded with respect to scene lighting, game engines typically don&#8217;t. The only way to compensate for this then, is to make two-sided meshes actually two-sided, that is that both &#8216;front&#8217; and &#8216;back&#8217; sides are sperate, individual surfaces &#8211; without doing that objects often appear incorrectly lit because the duplication process also typically includes how the surfaces being replicated are lit; the lit side is flipped to the shaded side. <a href=\"https:\/\/www.katsbits.com\/codex\/double-sided-materials\/\">See here for proper two-sided materials in Blender<\/a>.<\/div>\n<p>To set up double-sided meshed correctly in Blender so they function correctly in Nowhere, make the object as normal and in Material Properties, for the assigned material(s), ensure <b>Backface Culling<\/b> [3] is <i>enabled<\/i> by clicking the checkbox under <b>Settings<\/b>. Next, select the parts of the mesh that are to be back faces and use <b>Duplicate<\/b> to copy them &#8211; <b>Mesh \u00bb Duplicate<\/b> (<span class=\"shortcutkey\">Shift<\/span> + <span class=\"shortcutkey\">D<\/span>). Press <span class=\"shortcutkey\">Esc<\/span> to release. Finally, while the new selection is still active use <b>Flip<\/b> [4] to invert them &#8211; <b><i>Mesh \u00bb Normals \u00bb Flip<\/i><\/b>. This results in a mesh that then has a &#8216;front&#8217; and &#8216;back&#8217; side that can be independently lit from one another while still using the same material assignment.<\/p>\n<div style=\"background-color: #eee; color: #000; width:98.5%; padding: 1.0em;\">When duplicating something, the elements copied move with the mouse cursor until <span class=\"shortcutkey\">Esc<\/span> is pressed (or optionally right-click) which releases and resets them back the same location as the original object they were duplicated from.<\/div>\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/nowhere\/optimising-two-sided.jpg\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" style=\"width: 98.5%; height: auto;\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/nowhere\/optimising-two-sided.jpg\" alt=\"Two-sided meshes\" width=\"900px\" height=\"500px\" border=\"0\" \/><\/a><br \/>\n<i>Two-sided meshes are an optimisation in so much that it allows an object to be correctly lit in Nowhere. Simply duplicate a mesh, enable <b>Backface Culling<\/b> [3] and then <b>Flip<\/b> [4] the faces.<\/i><\/p><\/blockquote>\n<h3><span class=\"ez-toc-section\" id=\"timestamps\"><\/span>Timestamps<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Times are approximate;<br \/>\n &#8211; 00:00 : Overview<br \/>\n &#8211; 05:00 : Optimising Platforms<br \/>\n &#8211; 17:00 : Portal, Trunks, Fences, Grass, Leaves<br \/>\n &#8211; 25:00 : Collision Meshes<br \/>\n &#8211; 42:00 : Nowhere Entities<br \/>\n &#8211; 01:00:00 : Prep, Export &#038; WorldRunner<\/p>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":7999,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[34,967,1001,230],"tags":[1053,453,559,517,1007,785,1002,842,356,560],"class_list":["post-7899","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blender","category-minecraft-2","category-nowhere-metaverse","category-tutorials","tag-alpha","tag-alpha-transparency","tag-double-sided","tag-merge-by-distance","tag-metaverse","tag-minecraft","tag-nowhere","tag-optimisation","tag-remove-doubles","tag-two-sided"],"post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/www.katsbits.com\/codex\/wp-json\/wp\/v2\/posts\/7899","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.katsbits.com\/codex\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.katsbits.com\/codex\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.katsbits.com\/codex\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.katsbits.com\/codex\/wp-json\/wp\/v2\/comments?post=7899"}],"version-history":[{"count":19,"href":"https:\/\/www.katsbits.com\/codex\/wp-json\/wp\/v2\/posts\/7899\/revisions"}],"predecessor-version":[{"id":8128,"href":"https:\/\/www.katsbits.com\/codex\/wp-json\/wp\/v2\/posts\/7899\/revisions\/8128"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.katsbits.com\/codex\/wp-json\/wp\/v2\/media\/7999"}],"wp:attachment":[{"href":"https:\/\/www.katsbits.com\/codex\/wp-json\/wp\/v2\/media?parent=7899"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.katsbits.com\/codex\/wp-json\/wp\/v2\/categories?post=7899"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.katsbits.com\/codex\/wp-json\/wp\/v2\/tags?post=7899"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}