{"id":1648,"date":"2024-01-20T17:29:48","date_gmt":"2024-01-20T17:29:48","guid":{"rendered":"https:\/\/www.katsbits.com\/site\/?p=1648"},"modified":"2024-01-21T06:10:46","modified_gmt":"2024-01-21T06:10:46","slug":"map-meshes","status":"publish","type":"post","link":"https:\/\/www.katsbits.com\/site\/map-meshes\/","title":{"rendered":"Map &#8211; Meshes (#2)"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_80 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><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><\/span><\/a><\/span><\/div>\n<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\/site\/map-meshes\/#Prefabs_edge_length_making_a_room\" >Prefabs, edge length &amp; making a room<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.katsbits.com\/site\/map-meshes\/#Duplicating_objects_finishing_the_room\" >Duplicating objects &amp; finishing the room<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.katsbits.com\/site\/map-meshes\/#Pivot_points_mirroring_layers\" >Pivot points, mirroring &amp; layers<\/a><\/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\/site\/map-meshes\/#Reusing_objects_finishing_the_second_room\" >Reusing objects &amp; finishing the second room<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.katsbits.com\/site\/map-meshes\/#Adding_a_corridor_between_rooms\" >Adding a corridor between rooms<\/a><\/li><\/ul><\/nav><\/div>\n<p>In the <a title=\"Making a map in Blender\" href=\"https:\/\/www.katsbits.com\/site\/map\/\" target=\"_self\" rel=\"noopener\">previous chapter<\/a> we learnt the basic but essential information needed for .map based level design in Blender.<\/p>\n<p>We discussed grid settings, matching the properties between Blender and level editor to ensure objects are the same size, shape etc.<\/p>\n<p>We also learnt that because of the way the .map format works, we are better off making maps using simple blocks &#8211; primitive cubes and &#8216;regular&#8217; shapes &#8211; because these types of object work best within the formats expectations. In this next section we&#8217;ll put this into practice and build a simple level.<\/p>\n<p>Note that a basic understanding of Blender is required from here on in as we won&#8217;t discuss in any specific detail common actions like moving, navigating and manipulating objects which have been covered in previous tutorials <a title=\"Understanding Blender by making a simple chair\" href=\"https:\/\/www.katsbits.com\/site\/chair\/\" target=\"_self\" rel=\"noopener\">here<\/a> and <a title=\"Understanding Blender by making a simple sword\" href=\"https:\/\/www.katsbits.com\/site\/sword\/\" target=\"_self\" rel=\"noopener\">here<\/a>.<\/p>\n<blockquote style=\"background-color: #ddecf3; color: #000;\"><p><strong>Download<\/strong>: <a title=\"Tutorial source files (ZIP)\" href=\"https:\/\/www.katsbits.com\/files\/tutorials\/katsbits_map-blender-source.zip\">KatsBits &#8211; Map Source<\/a> (c. 10 MB | *.blend, *.map, *.obj, *.mtl, *.jpg,).<\/p><\/blockquote>\n<blockquote class=\"menu_resources\"><p><strong>Resources<\/strong><br \/>\n&#8211; <a title=\"Download the Blender .map Entity Helper Kit\" href=\"https:\/\/www.katsbits.com\/site\/radiant-entity-blender\/\">Blender Entity Helper Kit<\/a><br \/>\n&#8211; <a title=\"Making .maps with Blender 2.49\" href=\"https:\/\/www.katsbits.com\/site\/exporting-models-as-bsp-maps\/\" target=\"_self\" rel=\"noopener\">Blender 2.49 .map making<\/a><br \/>\n&#8211; <a title=\"Quake III editing manual\" href=\"http:\/\/robotrenegade.com\/radiant\/manual\/index.htm\" target=\"_blank\" rel=\"noopener\">Quake III Manual<\/a><br \/>\n&#8211; <a title=\"Download GTK Radiant\" href=\"http:\/\/radiant.robotrenegade.com\/\" target=\"_self\" rel=\"noopener\">GtkRadiant download<\/a><\/p><\/blockquote>\n<p><a id=\"prefabs\" name=\"prefabs\"><\/a><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Prefabs_edge_length_making_a_room\"><\/span>Prefabs, edge length &amp; making a room<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>The easiest way to work with Blender within the context of .map based level design is to use &#8220;<b>prefabs<\/b>&#8220;. These are simple predetermined shapes, usually basic blocks or panels of set dimensions that can be duplicated, reused and\/or resized to suit. As an example, shown below is one such prefab, a <b>128x16x256<\/b> &#8216;panel&#8217; made by resizing the default scene cube in &#8220;<b>Object<\/b>&#8221; rather then &#8220;<b>Edit<\/b>&#8221; mode &#8211; the reason for resizing this way is simply that it&#8217;s often the most straightforward way to change the basic shape of a mesh when we&#8217;re not making complex forms, just <b>RMB<\/b> select the object and open the &#8220;<b>View Properties<\/b>&#8221; toolshelf panel (&#8220;<b>N<\/b>&#8220;), in the &#8220;<b>Dimensions:<\/b>&#8221; subsection change the &#8220;<b>X<\/b>&#8220;, &#8220;<b>Y<\/b>&#8221; and &#8220;<b>Z<\/b>&#8221; values to fit the shape required.<\/p>\n<div class=\"content_images\">\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/blender-make-maps-levels\/map-first-panel.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"Resizing the default cube to make the first panel\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/blender-make-maps-levels\/map-first-panel_sml.jpg\" alt=\"Resizing the default cube to make the first panel\" width=\"640\" height=\"400\" border=\"0\" \/><\/a><\/p>\n<p>Resize the default cube to make an initial panel; based on the type of map to be made this will be the basic initial block from which others will be duplicated (but not linked) and resized and shaped as the map is built <b class=\"blenderFileRef\">[see *.blend &#8220;1&#8221;]<\/b><\/p>\n<\/div>\n<p>If we do want to change a mesh in &#8220;Edit&#8221; mode, because we&#8217;re using objects of a &#8216;measured&#8217; size, then ideally we need to change a few options so we know how big the mesh actually is (&#8220;<b>Dimensions:<\/b>&#8221; values are not displayed the same way in Edit mode). Select the mesh and &#8220;<b>Tab<\/b>&#8221; into Edit mode. First we need to turn on &#8220;<b>Edge Length<\/b>&#8220;. In the &#8220;<b>View Properties<\/b>&#8221; toolshelf (&#8220;<b>N<\/b>&#8220;) scroll down to the &#8220;<b>Numerics:<\/b>&#8221; subsection and activate &#8220;<b>Edge Length<\/b>&#8220;, a series of numbers should appear, if not select a face or edge to check &#8211; visibility is based on active selections. Next we need to switch to a &#8220;<b>Global<\/b>&#8221; display of measurement. Scroll back up to the &#8220;<b>Median:<\/b>&#8221; subsection and click &#8220;<b>Global<\/b>&#8221; &#8211; this changes the measurement system to use &#8216;global&#8217; values so the numbers will change to represent their actual &#8216;physical&#8217; or &#8216;real&#8217; size relative to the scene rather than &#8216;local&#8217; object sizing.<\/p>\n<div class=\"content_images\">\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/blender-make-maps-levels\/map-basic-edge-length.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"Turn on &quot;Edge Length&quot; to check object sizing\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/blender-make-maps-levels\/map-basic-edge-length_sml.jpg\" alt=\"Turn on &quot;Edge Length&quot; to check object sizing\" width=\"640\" height=\"400\" border=\"0\" \/><\/a><\/p>\n<p>In order to see how big the mesh is in Edit mode turn on &#8220;<b>Edge Length<\/b>&#8221; &#8211; this displays selected element sizing information <b class=\"blenderFileRef\">[see *.blend &#8220;1b&#8221;]<\/b><\/p>\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/blender-make-maps-levels\/map-basic-global-measurement.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"Use &quot;Global&quot; settings to display 'actual size' measurements\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/blender-make-maps-levels\/map-basic-global-measurement_sml.jpg\" alt=\"Use &quot;Global&quot; settings to display 'actual size' measurements\" width=\"640\" height=\"400\" border=\"0\" \/><\/a><\/p>\n<p>Using &#8220;<b>Global<\/b>&#8221; measurement values means the objects size will be displayed as it actually is rather than a &#8216;scaled&#8217; value &#8211; the original cube has been scale up by various values so leaving &#8220;<b>Local<\/b>&#8221; active means we see size relative to &#8216;scale&#8217;<\/p>\n<\/div>\n<p>With the initial prefab made it can be duplicated using &#8220;<b>Shift+D<\/b>&#8221; (&#8220;<b>Object \u00bb Duplicate Objects<\/b>&#8220;) to create an &#8216;<b>unlinked<\/b>&#8216; copy of the original. This new object can then be resized to <b>512x16x256<\/b>, creating another prefab that can be used for longer wall sections.<\/p>\n<blockquote><p><b>Design note<\/b>: &#8220;<b>Duplicate Objects<\/b>&#8221; creates copies of an original item including its properties that can be edited independently or the original. &#8220;<b>Duplicate Linked<\/b>&#8220;, &#8220;<b>Alt+D<\/b>&#8221; &#8211; &#8220;<b>Object &gt; Duplicate Linked<\/b>&#8220;, on the other hand keeps the properties <i>and<\/i> changes both the copy and original when either one is edited or altered. Note also that when moving or manipulating objects we need to press and hold &#8220;<b>Ctrl<\/b>&#8221; to ensure proper grid snapping in Blender.<\/p><\/blockquote>\n<div class=\"content_images\">\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/blender-make-maps-levels\/map-duplicate-block.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"Use &quot;Shift+D&quot; to make an unlinked duplicate object\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/blender-make-maps-levels\/map-duplicate-block_sml.jpg\" alt=\"Use &quot;Shift+D&quot; to make an unlinked duplicate object\" width=\"640\" height=\"400\" border=\"0\" \/><\/a><\/p>\n<p>Use &#8220;<b>Shift+D<\/b>&#8221; to make an &#8220;<b>Unlinked Duplicate<\/b>&#8221; of the first object and resize it using the &#8220;<b>XYZ<\/b>&#8221; settings of the objects &#8220;<b>Dimension<\/b>&#8221; properties to form the longer section of a wall <b class=\"blenderFileRef\">[see *.blend &#8220;2&#8221;]<\/b><\/p>\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/blender-make-maps-levels\/map-reshape-object-edit-mode.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"Alternatively, reshape the duplicate objects in Edit mode using the widget handles\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/blender-make-maps-levels\/map-reshape-object-edit-mode_sml.jpg\" alt=\"Alternatively, reshape the duplicate objects in Edit mode using the widget handles\" width=\"640\" height=\"400\" border=\"0\" \/><\/a><\/p>\n<p>Or alternatively reshape the blocks in edit mode by manipulating the mesh as would be done for any object. Hold &#8220;<b>Ctrl<\/b>&#8221; whilst doing so to ensure grid snapping when using the widgets arms (RGB arrows)<\/p>\n<\/div>\n<p><a id=\"duplication\" name=\"duplication\"><\/a><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Duplicating_objects_finishing_the_room\"><\/span>Duplicating objects &amp; finishing the room<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Duplicate the prefabs previously made and position them to make the basic &#8216;block out&#8217; of a room that&#8217;s <b>256<\/b> units high, <b>512<\/b> units long and <b>384<\/b> units wide along the inside faces (shown below), i.e. use two of the longer &#8216;512&#8217; unit blocks for the walls on either side, three of the original &#8216;128&#8217; unit blocks to form the front and back walls, and allow a gap for a passage at one end (delete one of the 128 units), we&#8217;ll be making use of this later. This forms the basic structure of the room, the &#8216;<b>walls<\/b>&#8216;, in much the same as would be done in a level editor, it&#8217;s this single principle that is key to using Blender for .map based design because it replicates what we would otherwise be doing in said tools.<\/p>\n<blockquote><p><b>Design note<\/b>: remember that whenever objects are moved and\/or rotated in Object mode, and\/or resized in Edit mode, to hold down the &#8220;<b>Ctrl<\/b>&#8221; so any action is properly snapped to the grid &#8211; this ensure correct alignment of brushwork when the eventual scene is exported out as a .map.<\/p><\/blockquote>\n<div class=\"content_images\">\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/blender-make-maps-levels\/map-room-walls.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"Duplicating and editing the prefab to build the room walls\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/blender-make-maps-levels\/map-room-walls_sml.jpg\" alt=\"Duplicating and editing the prefab to build the room walls\" width=\"640\" height=\"400\" border=\"0\" \/><\/a><\/p>\n<p>Duplicating objects to make the remaining walls. Note the back wall is made using the first block three times, this can be joined at a later stage it needed <b class=\"blenderFileRef\">[see *.blend &#8220;3&#8221;]<\/b><\/p>\n<\/div>\n<p>&#8216;Cap&#8217; this initial block-out top and bottom by duplicating and resizing the original prefab (or other mesh) to create &#8216;<b>floor<\/b>&#8216; and &#8216;<b>ceiling<\/b>&#8216; units that are both <b>16x384x512<\/b> height, width, length (shown below). This completes &#8216;room 1&#8217;.<\/p>\n<blockquote><p><b>Design note<\/b>: we&#8217;re defining the room based on the relationships between blocks. This means as we place each object next to it&#8217;s neighbour we create either &#8220;<b>negative<\/b>&#8221; or &#8220;<b>positive<\/b>&#8221; space &#8211; &#8220;<b>inside<\/b>&#8221; or &#8220;<b>outside<\/b>&#8220;. As the active area of the room is defined by a &#8216;negative&#8217; relationship in this instance, that means the inward facing surfaces of each object is important in creating the &#8216;room&#8217; itself.<\/p><\/blockquote>\n<div class=\"content_images\">\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/blender-make-maps-levels\/map-floor-ceiling.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"Making floor and ceiling units by duplicating and resizing the prefab\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/blender-make-maps-levels\/map-floor-ceiling_sml.jpg\" alt=\"Making floor and ceiling units by duplicating and resizing the prefab\" width=\"640\" height=\"400\" border=\"0\" \/><\/a><\/p>\n<p>Make a floor and ceiling unit by duplicating and resizing to fit the space, make sure only the inward facing edge is matched to the wall top and bottom (it&#8217;s not absolutely necessary or required to overlap the floor and ceiling blocks) <b class=\"blenderFileRef\">[see *.blend &#8220;4&#8221;]<\/b><\/p>\n<\/div>\n<p><a id=\"pivotpoint\" name=\"pivotpoint\"><\/a><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Pivot_points_mirroring_layers\"><\/span>Pivot points, mirroring &amp; layers<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>With the first room built we&#8217;ll use it to make a second room through its duplication and mirroring around a fixed point. We&#8217;ll then shift this new material to another layer to help manage the project better. First we need to fix a point around which the duplicated objects will be mirrored. To do this, press &#8220;<b>.<\/b>&#8221; (&#8216;full stop&#8217;\/&#8217;period&#8217;) or from the header menu click the &#8220;<b>Pivot Point<\/b>&#8221; icon and select &#8220;<b>3D Cursor<\/b>&#8221; (shown below), this will cause the &#8220;<b>3D Widget<\/b>&#8221; (the object with RGB directional arrows) to change its position to where-ever the 3D Cursor is located in the scene.<\/p>\n<blockquote><p><b>Design note<\/b>: the default pivot is &#8220;<b>Median Point<\/b>&#8220;.<\/p><\/blockquote>\n<div class=\"content_images\">\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/blender-make-maps-levels\/map-pivot-point.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"Setting the Pivot Point to the cursors location\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/blender-make-maps-levels\/map-pivot-point_sml.jpg\" alt=\"Setting the Pivot Point to the cursors location\" width=\"640\" height=\"400\" border=\"0\" \/><\/a><\/p>\n<p>Before duplicating the object to make the new room set the &#8220;<b>Pivot Point<\/b>&#8220;, the location around which any subsequent action is orientated, by pressing &#8220;.&#8221; (period\/full stop)<\/p>\n<\/div>\n<p>We now need to make sure the cursor is placed correctly relative to what we&#8217;re about to use it for; pivoting some objects around it. In the &#8220;<b>View Properties<\/b>&#8221; panel (&#8220;<b>N<\/b>&#8220;), find the &#8220;<b>3D Cursor Location:<\/b>&#8221; subsection and change each of the &#8220;<b>X<\/b>&#8220;, &#8220;<b>Y<\/b>&#8220;, and &#8220;<b>Z<\/b>&#8221; values to &#8220;<b>0.0000<\/b>&#8220;, this ensures the cursor is located dead-centre of the grid (and of the objects as we&#8217;re working on them).<\/p>\n<div class=\"content_images\">\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/blender-make-maps-levels\/map-widget-cursor-snap.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"Snapping the 3D Widget to cursor\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/blender-make-maps-levels\/map-widget-cursor-snap_sml.jpg\" alt=\"Snapping the 3D Widget to cursor\" width=\"640\" height=\"400\" border=\"0\" \/><\/a><\/p>\n<p>Press &#8220;<b>.<\/b>&#8221; or set the &#8220;<b>Pivot Point<\/b>&#8221; from the menu selection forcing the widget to reposition itself relative to the cursors location which should be set using the &#8220;<b>3D Cursor Location:<\/b>&#8221; settings &#8211; be sure to use only whole numbers <b class=\"blenderFileRef\">[see *.blend &#8220;5&#8221;]<\/b><\/p>\n<\/div>\n<p>Next, using an &#8216;either\/or&#8217; combination of &#8220;<b>Shift+RMB<\/b>&#8220;, &#8220;<b>B<\/b>&#8221; to border select or &#8220;<b>A<\/b>&#8221; to select everything in the scene, press &#8220;<b>Shift+D<\/b>&#8221; to make an unlinked duplication of the group. <b>RMB<\/b> click to &#8216;release&#8217; the new objects, and whilst they are still selected use &#8220;<b>Ctrl+M<\/b>&#8221; to initiate &#8220;<b>Mirror<\/b>&#8220;, pressing &#8220;<b>Y<\/b>&#8221; to set the axis around which this should be done (&#8220;<b>Object \u00bb Mirror \u00bb Y Global<\/b>&#8220;), this will flip the entire section to the opposite side of the cursor. <b>LMB<\/b> click to set the action.<\/p>\n<blockquote><p><b>Design note<\/b>: the actual axis used may vary depending on the orientation of the original room &#8211; if it was originally built using a &#8220;<b>Front<\/b>&#8221; perspective the axis will be different to said-same being built from a &#8220;<b>Right<\/b>&#8221; (or &#8220;<b>Side<\/b>&#8220;) point of view so be sure to use the correct axis, &#8220;<b>X<\/b>&#8221; or &#8220;<b>Y<\/b>&#8221; relative to the originals orientation.<\/p><\/blockquote>\n<div class=\"content_images\">\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/blender-make-maps-levels\/map-duplicate-mirror.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"Duplicate the room and then mirror it along the Y axis\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/blender-make-maps-levels\/map-duplicate-mirror_sml.jpg\" alt=\"Duplicate the room and then mirror it along the Y axis\" width=\"640\" height=\"400\" border=\"0\" \/><\/a><\/p>\n<p>Duplicate (&#8220;<b>Shift+D<\/b>&#8220;) the previously made room and mirror it (&#8220;<b>Ctrl+M<\/b>&#8220;) along the &#8220;<b>Y<\/b>&#8221; axis to create the new room<\/p>\n<\/div>\n<p>Once mirrored move the entire section to a new &#8220;<b>Layer<\/b>&#8221; by pressing &#8220;<b>M<\/b>&#8221; to open the &#8220;<b>Move to Layer<\/b>&#8221; menu. Click one of the buttons (button two, top-left is shown being used below). The meshes will disappear from view and be placed in the chosen layer which can then be viewed independently by clicking the appropriate &#8220;<b>Layers<\/b>&#8221; button\/s in the menu header, or as part of a group by holding &#8220;<b>Shift<\/b>&#8221; whilst clicking various layers to de\/activate them.<\/p>\n<div class=\"content_images\">\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/blender-make-maps-levels\/map-move-to-layer.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"Move to Layer the new objects for easier management of mesh\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/blender-make-maps-levels\/map-move-to-layer_sml.jpg\" alt=\"Move to Layer the new objects for easier management of mesh\" width=\"640\" height=\"400\" border=\"0\" \/><\/a><\/p>\n<p>Use &#8220;Move to Layer&#8221; (&#8220;<b>M<\/b>&#8220;) to place new objects into another layer for easier management of the meshes and project <b class=\"blenderFileRef\">[see *.blend &#8220;6&#8221;]<\/b><\/p>\n<\/div>\n<p><a id=\"reusing\" name=\"reusing\"><\/a><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Reusing_objects_finishing_the_second_room\"><\/span>Reusing objects &amp; finishing the second room<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Because .map based levels are constructed largely from blocks, it means we&#8217;re actually defining architectural structures through the relationship between objects in a scene rather than the creation of individually complex shapes. For the most part then, the design process is simply one of changing the locations and\/or positions of objects relative to their neighbours. We&#8217;ll use this principle to make room 2 &#8216;bigger&#8217;.<\/p>\n<p>Activate the layer housing the objects we just made by clicking the associated layer button in the &#8220;<b>Layers<\/b>&#8221; menu, then holding &#8220;<b>Ctrl<\/b>&#8221; to snap actions to the grid, <b>RMB<\/b> click select and move one of the longer walls approximately <b>256<\/b> units away to one side. Duplicate or reuse one of the back wall segments and alter it&#8217;s size so that it fills the gap &#8211; the gap itself is &#8220;<b>256<\/b>&#8221; units wide so the duplicate will need to be changed so it too is &#8220;<b>256<\/b>&#8221; units in width. Alternatively, edit one of the meshes along the back wall, it should be approximately &#8220;<b>384<\/b>&#8221; units wide (its original &#8220;<i>128<\/i>&#8221; width plus the additional &#8220;<i>256<\/i>&#8221; of the gap).<\/p>\n<div class=\"content_images\">\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/blender-make-maps-levels\/map-second-room-walls.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"Move the outer wall and fill the gap with another wall object\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/blender-make-maps-levels\/map-second-room-walls_sml.jpg\" alt=\"Move the outer wall and fill the gap with another wall object\" width=\"640\" height=\"400\" border=\"0\" \/><\/a><\/p>\n<p>Move the outer wall to one side and fill the resulting gap with a new object that&#8217;s either a resized duplicate of another section or edit one of the current back wall sections to fit the gap <b class=\"blenderFileRef\">[see *.blend &#8220;7&#8221;]<\/b><\/p>\n<\/div>\n<p>Similarly, resize both the ceiling and floor meshes by changing the &#8216;object&#8217; size or manipulating the meshes in Edit mode so the gap between old and new is also closed (shown below). They should be approximately &#8220;<b>640<\/b>&#8221; units wide, their original &#8216;length&#8217; (&#8220;512&#8221; units) remains untouched.<\/p>\n<blockquote><p><b>Design note<\/b>: changing the size of something in &#8220;<b>Object<\/b>&#8221; mode will often mean having to move or reposition items as the resize is based on the location of the objects &#8220;<b>Point of Origin<\/b>&#8221; (the small sphere often seen when selecting objects).<\/p><\/blockquote>\n<div class=\"content_images\">\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/blender-make-maps-levels\/map-second-room-ceiling-floor.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"Resize floor and ceiling objects\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/blender-make-maps-levels\/map-second-room-ceiling-floor_sml.jpg\" alt=\"Resize floor and ceiling objects\" width=\"640\" height=\"400\" border=\"0\" \/><\/a><\/p>\n<p>When editing meshes the origin point stays in it&#8217;s original location, so long as it and the mesh stay locked to the grid this shouldn&#8217;t cause too many issues <b class=\"blenderFileRef\">[see *.blend &#8220;8&#8221;]<\/b><\/p>\n<\/div>\n<p>Then finally, along the &#8216;front&#8217; end of the room (where the hole for the passage is) the gap created by moving the outer wall can be filled by moving and\/or resizing one of the blocks previous located on either side of the doorway\/passage opening. This will also be &#8220;<b>256<\/b>&#8221; units in width.<\/p>\n<blockquote><p><b>Design note<\/b>: remember that resizing or reshaping objects can be done by simply changing &#8220;<b>Dimensions:<\/b>&#8221; data in &#8220;<b>View Properties<\/b>&#8221; or by physically altering the mesh in Edit mode.<\/p><\/blockquote>\n<div class=\"content_images\">\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/blender-make-maps-levels\/map-second-room-reuse.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"Reuse an object not needed and fill the gap\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/blender-make-maps-levels\/map-second-room-reuse_sml.jpg\" alt=\"Reuse an object not needed and fill the gap\" width=\"640\" height=\"400\" border=\"0\" \/><\/a><\/p>\n<p>Reusing a mesh object that&#8217;s no longer needed, putting it to use elsewhere and filling the gap along the &#8216;front&#8217; wall <b class=\"blenderFileRef\">[see *.blend &#8220;9&#8221;]<\/b><\/p>\n<\/div>\n<p>With these changes to room two done we&#8217;ve completed blocking out using the relatively quick and simple process of reusing previously made objects (prefabs).<\/p>\n<div class=\"content_images\">\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/blender-make-maps-levels\/map-room-1.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"Room 1\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/blender-make-maps-levels\/map-room-1_sml.jpg\" alt=\"Room 1\" width=\"640\" height=\"400\" border=\"0\" \/><\/a><\/p>\n<p>Room 1. Note &#8220;<b>Wire&#8217;<\/b> is active so individual brushes can be seen properly where more than one is used as part of the same area <b class=\"blenderFileRef\">[see *.blend &#8220;10&#8221;]<\/b><\/p>\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/blender-make-maps-levels\/map-room-2.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"Room 2\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/blender-make-maps-levels\/map-room-2_sml.jpg\" alt=\"Room 2\" width=\"640\" height=\"400\" border=\"0\" \/><\/a><\/p>\n<p>Room 2. &#8220;<b>Wire<\/b>&#8221; mode also enabled for the same reason mentioned above <b class=\"blenderFileRef\">[see *.blend &#8220;11&#8221;]<\/b><\/p>\n<\/div>\n<p><a id=\"corridor\" name=\"corridor\"><\/a><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Adding_a_corridor_between_rooms\"><\/span>Adding a corridor between rooms<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Next we&#8217;re going to add a corridor between the two rooms. To make this easier to do it&#8217;s best to use layers so we can properly focus on each group of objects in turn without over-selecting. First we need to move the rooms a short distance apart to allow placement of the corridor. Press &#8220;<b>numPad5<\/b>&#8221; then &#8220;<b>numPad7<\/b>&#8221; to switch to &#8220;<b>Top<\/b>&#8221; orthogonal view then click the corresponding layer button for &#8216;room 1&#8217; to isolate the contents. Select all (&#8220;<b>A<\/b>&#8220;) and move (&#8220;<b>G<\/b>&#8220;) everything so the <b>inner face<\/b> of the side with the opening sits <i>on the blue grid axis marke<\/i>r (shown below). This minor adjustment makes sure that major structural features are (ideally) &#8216;grid snapped&#8217; &#8211; because of the way this first room was built, whilst the initial prefab was centred on the grid, the resulting room isn&#8217;t and should be fixed. Use &#8220;<b>Ctrl<\/b>&#8221; to help &#8216;snap&#8217; whilst doing this and where necessary &#8220;<b>MMB+scroll<\/b>&#8221; to <b>zoom<\/b> into the scene allowing for movement using smaller grid increments.<\/p>\n<blockquote><p><b>Design note<\/b>: using <b>MMB+scroll<\/b> to zoom into or out from the 3D view increases or decreases the size of grid snapping relative to the view whilst keeping the actual grid properties set in the &#8220;<b>View Properties<\/b>&#8221; panel the same. Alternatively, press and hold &#8220;<b>Ctrl+Shift+drag<\/b>&#8221; to use &#8216;macro&#8217; movement.<\/p><\/blockquote>\n<p>With the adjustment to &#8216;room 1&#8217; done, repeat for &#8216;room 2&#8217;; switch to the corresponding layer, select everything and holding &#8220;<b>Ctrl<\/b>&#8220;, this time move the objects <b>128<\/b> units &#8216;down&#8217; (as we&#8217;re looking at the scene from the &#8216;top&#8217;) from it&#8217;s current position &#8211; 128 units is effectively two major grid segments &#8211; making sure to keep it aligned so the opening between rooms are parallel to each other. To check, &#8220;<b>Shift+LMB<\/b>&#8221; select layers &#8220;1&#8221; and &#8220;2&#8221; so the contents of both can be seen and compared, it should be similar to the image below.<\/p>\n<div class=\"content_images\">\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/blender-make-maps-levels\/map-grid-snap-major.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"Make sure inner faces are snapped to major grid\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/blender-make-maps-levels\/map-grid-snap-major_sml.jpg\" alt=\"Make sure inner faces are snapped to major grid\" width=\"640\" height=\"400\" border=\"0\" \/><\/a><\/p>\n<p>With both Layers active so both rooms can be seen at the same time, move room 2 away from room one a short distance (128 units in this instance). Move Room 1 slightly so the inner faces of the area are aligned to the major grid <b class=\"blenderFileRef\">[see *.blend &#8220;12 &amp; 13&#8221;]<\/b><\/p>\n<\/div>\n<p>With the rooms suitably positioned we can now add the short corridor. Because of the way the rooms were built we had what appeared to be a number of unnecessary meshes, we can put these to use now. Exit orthogonal view if still in it from previous, &#8220;<b>numPad5<\/b>&#8220;, and select one of the passage walls from &#8216;room 1&#8217;. Enter Edit mode (&#8220;<b>Tab<\/b>&#8220;) and holding &#8220;<b>Ctrl<\/b>&#8221; click the corresponding widget handle (green in this instance) to reshaped the mesh from it&#8217;s original <b>16x128x256<\/b> to <b>128x128x256<\/b> units in size, filling the gap between the rooms. Exit Edit mode. With this done on one side repeat the process for the opposite by again selecting one of the unused objects and reshaping it also to make a block that&#8217;s <b>128x128x256<\/b> units in size. Together each individual element now functions as a &#8216;wall&#8217; that defines the end of each room <i>and<\/i> the those of the corridor.<\/p>\n<div class=\"content_images\">\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/blender-make-maps-levels\/map-using-blocks-effectively.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"Making the corridor from pre-exisitng blocks\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/blender-make-maps-levels\/map-using-blocks-effectively_sml.jpg\" alt=\"Making the corridor from pre-exisitng blocks\" width=\"640\" height=\"400\" border=\"0\" \/><\/a><\/p>\n<p>Reusing and resizing one of the end blocks from room 1 to create the corridor, this will be done on both sides <b class=\"blenderFileRef\">[see *.blend &#8220;14&#8221;]<\/b><\/p>\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/blender-make-maps-levels\/map-mesh-bad-use.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"Using several mesh object per 'wall' that's needed to add a corridor section\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/blender-make-maps-levels\/map-mesh-bad-use_sml.jpg\" alt=\"Using several mesh object per 'wall' that's needed to add a corridor section\" width=\"640\" height=\"400\" border=\"0\" \/><\/a><\/p>\n<p>Using separate objects for each side of the passage means using more items than is strictly necessary <b class=\"blenderFileRef\">[see *.blend &#8220;11b&#8221;]<\/b><\/p>\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/blender-make-maps-levels\/map-mesh-good-use.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"Using a single mesh with each face functioning as a wall\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/blender-make-maps-levels\/map-mesh-good-use_sml.jpg\" alt=\"Using a single mesh with each face functioning as a wall\" width=\"640\" height=\"400\" border=\"0\" \/><\/a><\/p>\n<p>Excess can be reduced by using mesh blocks more efficiently so that one single item can perform several functions at any one time <b class=\"blenderFileRef\">[see *.blend &#8220;11c&#8221;]<\/b><\/p>\n<\/div>\n<p>For the ceiling and floor units, use the final remaining object and resize to <b>128x128x16<\/b> units, then duplicate and reposition it as either the &#8216;ceiling&#8217; or &#8216;floor&#8217; unit depending on which was done first. Once all the blocks are in place this should leave us with something similar to the image below and the basic level done.<\/p>\n<div class=\"content_images\">\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/blender-make-maps-levels\/map-reuse-blocks.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"Resizing an unused block to make a floor and ceiling unit\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/blender-make-maps-levels\/map-reuse-blocks_sml.jpg\" alt=\"Resizing an unused block to make a floor and ceiling unit\" width=\"640\" height=\"400\" border=\"0\" \/><\/a><\/p>\n<p>Reusing and resizing another of the unused blocks to create a unit that can be used for both the floor and ceiling (once duplicated) <b class=\"blenderFileRef\">[see *.blend &#8220;15&#8221;]<\/b><\/p>\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/blender-make-maps-levels\/map-corridor-complete.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"Completed corridor section from reused blocks\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/blender-make-maps-levels\/map-corridor-complete_sml.jpg\" alt=\"Completed corridor section from reused blocks\" width=\"640\" height=\"400\" border=\"0\" \/><\/a><\/p>\n<p>The completed corridor made by reusing and resizing some of the unused elements created when making the initial rooms <b class=\"blenderFileRef\">[see *.blend &#8220;16 &amp; 18&#8221;]<\/b><\/p>\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/blender-make-maps-levels\/map-final-structure.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"Basic map structure finished\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/blender-make-maps-levels\/map-final-structure_sml.jpg\" alt=\"Basic map structure finished\" width=\"640\" height=\"400\" border=\"0\" \/><\/a><\/p>\n<p>The basic structure of the two room level finished ready for textures and feature details (architectural) <b class=\"blenderFileRef\">[see *.blend &#8220;17&#8221;]<\/b><\/p>\n<\/div>\n<p>Providing we stick to the way the .map format works in terms of it using blocks and simple shapes, making a level is relatively straightforward and doesn&#8217;t require some of the normal complexities associated with making models, a project can be developed and basic shapes and architecture blocked out quite quickly. <a title=\"Adding curves to a .map based level\" href=\"https:\/\/www.katsbits.com\/site\/map-curves\/\" target=\"_self\" rel=\"noopener\">Next we&#8217;ll go on to learn how to add and use curves<\/a>.<br \/>\n<\/p>\n<div class=\"subNav\">[<a title=\"The basics of making maps in Blender\" href=\"https:\/\/www.katsbits.com\/site\/map\/\" target=\"_self\" rel=\"noopener\">1: basics<\/a> | <a title=\"Making a .map based level\" href=\"https:\/\/www.katsbits.com\/site\/map-meshes\/\" target=\"_self\" rel=\"noopener\">2: making<\/a> | <a title=\"Adding curves to a .map based level\" href=\"https:\/\/www.katsbits.com\/site\/map-curves\/\" target=\"_self\" rel=\"noopener\">3: curves<\/a> | <a title=\"Materials, Textures and images\" href=\"https:\/\/www.katsbits.com\/site\/map-materials\/\" target=\"_self\" rel=\"noopener\">4: textures<\/a> | <a title=\"Entities, prepping and export\" href=\"https:\/\/www.katsbits.com\/site\/map-entities\/\" target=\"_self\" rel=\"noopener\">5: entities<\/a> | <a title=\"Opening the map in a level editor\" href=\"https:\/\/www.katsbits.com\/site\/map-level-editor\/\" target=\"_self\" rel=\"noopener\">6: level editor<\/a> | <a title=\".map based level design extras\" href=\"https:\/\/www.katsbits.com\/site\/map-extras\/\" target=\"_self\" rel=\"noopener\">7: extras<\/a>]<\/div>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":1609,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[14],"tags":[327,276,277,278,331,106,108,421,29],"class_list":["post-1648","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorials","tag-map","tag-blender-2-5x","tag-blender-2-6x","tag-blender-2-7x","tag-bsp","tag-gtkradiant","tag-level-editing","tag-map-basics","tag-tutorials"],"post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/www.katsbits.com\/site\/wp-json\/wp\/v2\/posts\/1648","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.katsbits.com\/site\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.katsbits.com\/site\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.katsbits.com\/site\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.katsbits.com\/site\/wp-json\/wp\/v2\/comments?post=1648"}],"version-history":[{"count":3,"href":"https:\/\/www.katsbits.com\/site\/wp-json\/wp\/v2\/posts\/1648\/revisions"}],"predecessor-version":[{"id":1662,"href":"https:\/\/www.katsbits.com\/site\/wp-json\/wp\/v2\/posts\/1648\/revisions\/1662"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.katsbits.com\/site\/wp-json\/wp\/v2\/media\/1609"}],"wp:attachment":[{"href":"https:\/\/www.katsbits.com\/site\/wp-json\/wp\/v2\/media?parent=1648"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.katsbits.com\/site\/wp-json\/wp\/v2\/categories?post=1648"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.katsbits.com\/site\/wp-json\/wp\/v2\/tags?post=1648"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}