{"id":2326,"date":"2024-04-15T18:11:34","date_gmt":"2024-04-15T17:11:34","guid":{"rendered":"https:\/\/www.katsbits.com\/site\/?p=2326"},"modified":"2024-04-17T15:47:10","modified_gmt":"2024-04-17T14:47:10","slug":"quake-4-map","status":"publish","type":"post","link":"https:\/\/www.katsbits.com\/site\/quake-4-map\/","title":{"rendered":"Making [Q4] Kats Klorr #1"},"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\/quake-4-map\/#Preamble\" >Preamble<\/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\/quake-4-map\/#GtkRadiant_Shots\" >GtkRadiant Shots<\/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\/quake-4-map\/#Modelling_The_Level\" >Modelling The Level<\/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\/quake-4-map\/#UV_Mapping\" >UV Mapping<\/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\/quake-4-map\/#Initial_Brush-Based_Block-Out\" >Initial Brush-Based Block-Out<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.katsbits.com\/site\/quake-4-map\/#Block-Out_Level_Template\" >Block-Out Level Template<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/www.katsbits.com\/site\/quake-4-map\/#YouTube_Video\" >YouTube Video<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/www.katsbits.com\/site\/quake-4-map\/#Using_Blender_For_Some_Lighting_Tests\" >Using Blender For Some Lighting Tests<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/www.katsbits.com\/site\/quake-4-map\/#Vertex_Painting\" >Vertex Painting<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/www.katsbits.com\/site\/quake-4-map\/#Model_Collision\" >Model Collision<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/www.katsbits.com\/site\/quake-4-map\/#Player_Size\" >Player Size<\/a><\/li><\/ul><\/nav><\/div>\n<p>Developing game levels is often a long and protracted process, especially where the level and it&#8217;s contents are based on customised content, i.e., built models, textures and so on. The following is a partial walk-through of the process to build a custom level for Quake 4. All content was modelled using Blender 3D.<\/p>\n<blockquote>\n<p>The contents of this  article were originally posted several years ago to a now unavailable forum. Some minor editing for clarity has been performed.<\/p>\n<\/blockquote>\n<h3><span class=\"ez-toc-section\" id=\"Preamble\"><\/span>Preamble<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>First a few shots from  GtkRadiant (Quake 4 Edit) showing the &#8216;box out&#8217;  of the map (initial block-out of the level using simple brush volumes) which was used as is and converted to ASE (see below)  . This was then imported into Blender 3D to be used as a template from which the actual model was made (<a href=\"https:\/\/www.katsbits.com\/site\/modeling-quake-3-maps-and-levels\/\" title=\"Make a simple level\" target=\"_self\" rel=\"noopener\">using Radiant brushwork as a model template which can be used for &#8216;scale&#8217; as well as a base object to manipulate<\/a>).<\/p>\n<blockquote>\n<p><b>Design note<\/b>: using Q4Edit has the advantage of  brush volumes being directly exportable to OBJ, else the block-out has to be <a href=\"https:\/\/www.katsbits.com\/site\/make-models-from-bsp-maps-or-brushes\/\">compiled and converted the traditional way using Q3Map2<\/a>.<\/p>\n<\/blockquote>\n<p> The shots below don&#8217;t show the whole model, only a section completed and the one about to be worked on &#8211; the purple &#8216;square&#8217; section top right &#8211;  is  a section of the imported brushwork template. The advantage of using GtkRadiant brushwork converted to ASE (<a href=\"https:\/\/www.katsbits.com\/site\/make-models-from-bsp-maps-or-brushes\/\">using Q3Map2<\/a>) is that it&#8217;s &#8216;cleaner&#8217; requiring far less work to delete the often hundreds or thousands of &#8216;dead&#8217; faces that exporting to OBJ would create when using Q4Radiant.<\/p>\n<div class=\"content_images\"> <a href=\"https:\/\/www.katsbits.com\/images\/maps\/katq4dm3\/devshot1.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.katsbits.com\/images\/maps\/katq4dm3\/devshot1_sml.jpg\" alt=\"Inside the mesh showing some early details (later removed for game-play reasons)\" width=\"500\" height=\"397\" border=\"0\"><\/a><\/p>\n<p>Inside the mesh showing some early details (later removed for game-play reasons)<\/p>\n<p><a href=\"https:\/\/www.katsbits.com\/images\/maps\/katq4dm3\/devshot2.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.katsbits.com\/images\/maps\/katq4dm3\/devshot2_sml.jpg\" alt=\"Partially complete level in Blender showing 'organics' and original block-out\" width=\"500\" height=\"397\" border=\"0\"><\/a><\/p>\n<p>Partially complete level in Blender showing &#8216;organics&#8217; and original block-out<\/p>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"GtkRadiant_Shots\"><\/span>GtkRadiant Shots<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>  The following show the brushwork layout which serves the purpose of being prepped for conversion to ASE using Q3Map2 (<a href=\"https:\/\/www.katsbits.com\/site\/make-models-from-bsp-maps-or-brushes\/\">using the exact same approach used to create map object models<\/a>), with the original brush work  later being used to form the &#8216;caulk hull&#8217; into which the modeled sections will go. With a bit of judicial portal placement the &#8216;angular&#8217; design of the hull should allow a much more &#8216;calculated&#8217; effect on what&#8217;s being drawn to screen by the Doom 3\/Quake 4 engine (idTech 4).<\/p>\n<p> One of the downsides to pre-planning like this is that it can sometime make a level feel a bit too planned or premeditated. It&#8217;s necessary to do this now for level design using the Doom 3 engine however, because VIS isn&#8217;t automatic like is was with Quake 3; VISibility is managed in a way that&#8217;s essentially  akin to the manual hint brushing maps for Quake 3 powered games, which has its Pros and Cons.<\/p>\n<div class=\"content_images\"><a href=\"https:\/\/www.katsbits.com\/images\/maps\/katq4dm3\/gtk_1.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.katsbits.com\/images\/maps\/katq4dm3\/gtk_1_sml.jpg\" alt=\"Brushes textured so only the faces needed are visible\" width=\"500\" height=\"501\" border=\"0\"><\/a><\/p>\n<p> GtkRadiant &#8216;wireframe&#8217; showing the active brushes that will be exported to ASE (caulk is hidden from view revealing the necessary textured faces that will eventually be converted for use)<\/p>\n<p>  <a href=\"https:\/\/www.katsbits.com\/images\/maps\/katq4dm3\/gtk_2.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.katsbits.com\/images\/maps\/katq4dm3\/gtk_2_sml.jpg\" alt=\"The 'hull' shown ready for conversion to a Blender importable model\" width=\"500\" height=\"501\" border=\"0\"><\/a><\/p>\n<p>  GtkRadiant &#8216;wireframe&#8217; (selection wireframe highlighting) showing the larger caulk hull around the entire level required for <a href=\"https:\/\/www.katsbits.com\/site\/make-models-from-bsp-maps-or-brushes\/\">converting a BSP&#8217;d map into an ASE using Q3Map2<\/a><\/p>\n<p>  <a href=\"https:\/\/www.katsbits.com\/images\/maps\/katq4dm3\/gtk_3.gif\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.katsbits.com\/images\/maps\/katq4dm3\/gtk_3_sml.gif\" alt=\"Brush-based hull in Radiant (Q4Edit)\" width=\"500\" height=\"543\" border=\"0\"><\/a><\/p>\n<p>  GtkRadiant 2D viewport showing top down layout of the brushwork used to create the basic level structure. Not much is distinguishable due to the basic blocky layout of brushwork<\/p>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"Modelling_The_Level\"><\/span>Modelling The Level<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>The shots below show the basic contours added to the mesh to describe interesting visual features based on the type of rock surface wanted. On the extreme left can be seen a section of the original converted brush volumes, these are essentially split, cut, subdivided and then shaped to form the desired rock\/organic surfaces &#8211; initially just a few loop cuts are made allowing the block-out to be roughly reshaped to &#8216;destroy&#8217; the objects original blocky appearance, which is then further edited with more cuts and shaping to suit the desired look.<\/p>\n<div class=\"content_images\"><a href=\"https:\/\/www.katsbits.com\/images\/maps\/katq4dm3\/room_a_big.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.katsbits.com\/images\/maps\/katq4dm3\/room_a.jpg\" alt=\"Some basic loop cuts are placed and basic shape formed\" width=\"500\" height=\"397\" border=\"0\"><\/a><a href=\"https:\/\/www.katsbits.com\/images\/maps\/katq4dm3\/room_b_big.jpg\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" src=\"https:\/\/www.katsbits.com\/images\/maps\/katq4dm3\/room_b.jpg\" alt=\"Adding more loop cuts to detail the mesh\" border=\"0\"><\/a><a href=\"https:\/\/www.katsbits.com\/images\/maps\/katq4dm3\/room_c_big.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.katsbits.com\/images\/maps\/katq4dm3\/room_c.jpg\" alt=\"More loops and detail\" width=\"500\" height=\"397\" border=\"0\"><\/a><\/p>\n<p>A series of loopcuts, some obvious, other subtle, are used to redefine the appearance of the mesh so it appears more rock-like and organic<\/p>\n<p><a href=\"https:\/\/www.katsbits.com\/images\/maps\/katq4dm3\/room_d_big.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.katsbits.com\/images\/maps\/katq4dm3\/room_d.jpg\" alt=\"Block like structures being remodelled\" width=\"500\" height=\"397\" border=\"0\"><\/a><\/p>\n<p> A slightly clearer view of the final(ish) version of the room (area) shown above &#8211; it might undergo some tweaking but that&#8217;s pretty much it (note the addition of steps bottom-right)<\/p>\n<p><a href=\"https:\/\/www.katsbits.com\/images\/maps\/katq4dm3\/room_e_big.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.katsbits.com\/images\/maps\/katq4dm3\/room_e.jpg\" alt=\"Adding more organic structural detail\" width=\"500\" height=\"397\" border=\"0\" \/><\/a><\/p>\n<p>The blocky corner volume remodeled to form an smoother  organic rock-like structure<\/p>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"UV_Mapping\"><\/span>UV Mapping<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>The following screen-shots  are from the same area as shown above. Due to the  long length of the walls relative to their height, a 512&#215;1024 texture is  used (the one shown is a placeholder, ivy needs to be removed although it shows the correct style of rock). A standard Point Lamp  has been placed into the Blender  scene and a basic viewport snapshot taken showing the various shapes and forms now modelled in the same  area of the map discussed above.  Below is a lit smoothed render of the model in Blenders 3D View with this single Lamp set-up.<\/p>\n<div class=\"content_images\"> <a href=\"https:\/\/www.katsbits.com\/images\/maps\/katq4dm3\/8oct06_1.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.katsbits.com\/images\/maps\/katq4dm3\/8oct06_sml1.jpg\" alt=\"Finalised structure ready for UV mapping\" width=\"500\" height=\"396\" border=\"0\"><\/a><\/p>\n<p>Finalised structure ready for UV mapping<\/p>\n<\/div>\n<p>Below a 3D View snapshot showing the general orientation of the rock textured as UV mapped to the area. Rather than being mapped to a single  giant UV, its been broken down and split into multiple smaller sections to better facilitate the UV&#8217;s  following the structures contours in a way that loosely confirm to the way the mesh\/UV&#8217;s are split; wherever a &#8216;smooth-group&#8217; was needed, the mesh was broken. Doing this means that certain areas remain unbroken and seams are more or less hidden in joints, cracks and crevices (areas where there is an acute angle between faces not normally visible to the player (the convergence of opposing polygons is used to create\/hide a smooth group line\/edge break).<\/p>\n<blockquote>\n<p>Design note:  there&#8217;s only one Blender material being used so the textures are mapping directly onto the mesh instead of using different materials. The reason for this at this stage is that the textures  act as a guide for vertex painting (which will be done  later so the model can have blended (mixed) textures in game &#8211;  where ever a gravel texture is to appear the mesh  will be vertex painted \u00a0<b>black, <\/b> the stone\/rock textured surfaces left\u00a0default <b>white<\/b>.<\/p>\n<\/blockquote>\n<div class=\"content_images\"><a href=\"https:\/\/www.katsbits.com\/images\/maps\/katq4dm3\/8oct06_2.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.katsbits.com\/images\/maps\/katq4dm3\/8oct06_sml2.jpg\" alt=\"Initial UV unwrapping and texture application\" width=\"500\" height=\"396\" border=\"0\"><\/a><\/p>\n<p>Initial UV unwrapping and texture application<\/p>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"Initial_Brush-Based_Block-Out\"><\/span>Initial Brush-Based Block-Out<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>  It&#8217;s probably a good point here to show a couple of shots from Blender of the model as it was when first imported into the 3D application; as mentioned previously it&#8217;s just a series of boxes.<\/p>\n<p> Because I was\u00a0<b>using GtkRadiant under the Q3 settings\u00a0<\/b>(still working on a project that requires GTKRadiant to be set up like that) I could take advantage of something\u00a0<b>ASE models<\/b>\u00a0converted from a compiled BSP\u00a0<b>don&#8217;t have<\/b>\u00a0that OBJ files export directly from D3\/Q4 Edit\u00a0<b>do have<\/b>; &#8216;<b>dead faces<\/b>&#8216;.<\/p>\n<p> Converting a BSP map to ASE generally produce &#8216;clean&#8217; models; it only converts and exports the faces that are textured or haven&#8217;t been merged or culled during the compile process. Because Q3Map2 is very efficient, &#8216;dead faces&#8217; are removed from the resulting mesh conversion leaving only the faces that are actually needed.<\/p>\n<p> D3\/Q4 Radiant exported OBJ files don&#8217;t do this; every face is exported regardless as to whether it has a texture on it or not. This makes tidying the resulting model time consuming and messy because the dead faces have to be manually removed or merged.<\/p>\n<blockquote>\n<p><b>Design note<\/b>:\u00a0Be warned, if you block out in a Q3 editing environment some of the measurements are slightly different; D3 and Q4 player models are slightly wider and taller so you do have to keep that in mind, especially for architectural (man made) maps.<\/p>\n<\/blockquote>\n<div class=\"content_images\"><a href=\"https:\/\/www.katsbits.com\/images\/maps\/katq4dm3\/9oct06_2.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.katsbits.com\/images\/maps\/katq4dm3\/9oct06_sml2.jpg\" alt=\"External view of brush-based blockout in Blender\" width=\"500\" height=\"396\" border=\"0\"><\/a><\/p>\n<p>External view of brush-based block-out in Blender &#8211; This shot shows the raw model block-out &#8216;<b>template\u00a0<\/b>&#8216; which started life as brushwork (as shown on the previous images above)<\/p>\n<\/div>\n<p> The\u00a0<b>black lines<\/b>\u00a0on the box section above show the initial polygon divisions of that area; they *usually* follow the general shape and contours of the object. It&#8217;s these lines that are used to start the manipulation process, shaping the area relative to the look that&#8217;s wanted.<\/p>\n<p>The inside of this template looks like the image below, which is lit with a single point light in Blender so the shapes and general profile can be distinguished better. It is in effect the limitations or boundary where the caulk hulled brushwork will be.<\/p>\n<div class=\"content_images\"> <a href=\"https:\/\/www.katsbits.com\/images\/maps\/katq4dm3\/9oct06_1.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.katsbits.com\/images\/maps\/katq4dm3\/9oct06_sml1.jpg\" alt=\"\" width=\"500\" height=\"396\" border=\"0\" \/><\/a><\/p>\n<p>Basic block-out imported into Blender<\/p>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"Block-Out_Level_Template\"><\/span>Block-Out Level Template<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>  Although this is from a different section of the map it illustrates what happens next; the\u00a0<b>template mesh\u00a0<\/b>is duplicated and used as the basis from which to model the map itself &#8211; &#8216;green&#8217; is the template, &#8216;pink&#8217; the modelled map object. Everything is\u00a0<b>pulled inwards<\/b>\u00a0away from the walls; going outside that means re-jigging the brushwork back in the editor to fit and changes made which can be quite fiddly so it&#8217;s best to avoid doing that, essentially it&#8217;s a good idea to make sure there&#8217;s enough room in the blocked out template to allow manipulated &#8216;depth&#8217; where needed.<\/p>\n<div class=\"content_images\"> <a href=\"https:\/\/www.katsbits.com\/images\/maps\/katq4dm3\/9oct06_3.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.katsbits.com\/images\/maps\/katq4dm3\/9oct06_sml3.jpg\" alt=\"Shaping the level from brush block-out\" width=\"500\" height=\"396\" border=\"0\" \/><\/a><\/p>\n<p>Shaping the level from brush block-out<\/p>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"YouTube_Video\"><\/span>YouTube Video<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<div class=\"content_images\">\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:\/\/www.youtube.com\/embed\/Uek64h_hF20?rel=0\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/center><\/div>\n<\/div>\n<p> What you&#8217;re seeing in that video are the initial sections the mesh has been broken down in to. Right now it&#8217;s actually based on\u00a0<a href=\"https:\/\/www.katsbits.com\/site\/what-are-smooth-groups-and-mesh-smoothing-on-models\/\" title=\"What are Smoothgroups\" target=\"_blank\" rel=\"noopener\"><b>smooth-groups<\/b><\/a>\u00a0and not portal splits &#8211; that means the mesh is broken up based on getting smooth transitions over poly&#8217;s without the nasty hard edges where splits and joins occur, so a corner that perhaps wraps around from one area to another is left as one piece otherwise &#8216;breaking&#8217; it would create a hard line which would be noticeable in game.<\/p>\n<p> Because the sections *are* based on smooth groups it may mean that they may change at some point in the future depending on how they behave in relation to &#8216;overdraw&#8217; once placed inside the pre-portalled caulk hull.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Using_Blender_For_Some_Lighting_Tests\"><\/span>Using Blender For Some Lighting Tests<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>  The shot below shows how using Blenders &#8216;shaded&#8217; view can come in handy for testing some basic lighting setups.<\/p>\n<p>  One thing to keep in mind doing this is that the light approximates the way Quake 3 or &#8216;light-mapped&#8217; games would be lit, which means the light is much &#8216;softer&#8217; (vertex lit) in the 3D viewport; it doesn&#8217;t have the hardness and high contrast that Quake 4&#8217;s dynamic lights will eventually produce in game, but it&#8217;s enough to get a basic idea of where the lights should be placed.<\/p>\n<div class=\"content_images\"><a href=\"https:\/\/www.katsbits.com\/images\/maps\/katq4dm3\/13oct06_1.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.katsbits.com\/images\/maps\/katq4dm3\/13oct06_sml1.jpg\" alt=\"Basica lighting test in Blender\" width=\"500\" height=\"396\" border=\"0\"><\/a><\/p>\n<p> Use standard &#8216;lamps&#8217; for this as they roughly approximate &#8216;point lights&#8217; used in Quake 4<\/p>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"Vertex_Painting\"><\/span>Vertex Painting<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>  Where ever you want a set of textures to blend together &#8211; ground blending to grass for example &#8211; a mesh need to have vertex painting applied to it. The &#8216;trick&#8217;, if it can be called that, is to have a &#8216;common&#8217; texture that&#8217;s used as a blend with several other &#8216;main&#8217; textures; in this case &#8216;rock&#8217; and &#8216;ground&#8217;, both of which blend to a &#8216;dirt&#8217; texture. Where ever the mesh has black painted vertices one texture gets applied; where ever there is &#8216;white&#8217; the other is applied.<\/p>\n<p> For more details on this read the\u00a0<a href=\"https:\/\/www.katsbits.com\/site\/vertex-texture-blending-applied-to-models\/\" title=\"Vertex Blending\" target=\"_self\" rel=\"noopener\">texture blending tutorial<\/a>\u00a0here.<\/p>\n<p> So in the shot below the vertex painting has been done so that the &#8216;dirt&#8217; texture will be the common material between both sets. You&#8217;ll want to make sure that when you UVW map the objects that where possible both ground and rock surfaces are UV mapped together.<\/p>\n<p>The reason for this is so that the textures align properly to each other when the blending happens which makes seams in the mesh less noticeable Speaking of which, always try to &#8216;hide&#8217; seams or mesh splits in areas that you&#8217;d naturally expect to see a hard edge as this makes seeing a seam more &#8216;believable&#8217; when it is seen by the player.<\/p>\n<blockquote>\n<p> <b>Design Note :<\/b>\u00a0If you looking at this and NOT editing any id tech games then you need to look into how the game you&#8217;re editing &#8216;blends&#8217; textures, or if it does indeed do that; a fair number of games UV map unique textures to models so the image itself will have the blended transition from one type of image to the other.<\/p>\n<\/blockquote>\n<div class=\"content_images\"><a href=\"https:\/\/www.katsbits.com\/images\/maps\/katq4dm3\/13oct06_sml2.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.katsbits.com\/images\/maps\/katq4dm3\/13oct06_sml2.jpg\" alt=\"Black vertex shading used for texture blending\" width=\"500\" height=\"396\" border=\"0\"><\/a><\/p>\n<p>Black vertex shading used for texture blending<\/p>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"Model_Collision\"><\/span>Model Collision<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>  Once the main feature objects have been placed some work can begin on adding collision to the models. Although models like the steps shown below can be left &#8216;as is&#8217; for the game to work out collision (based on the data &#8216;compiled&#8217; to the *.cm file), it&#8217;s generally better to add a\u00a0<b>collision &#8216;hull&#8217;\u00a0<\/b>over the object to keep things &#8216;optimised&#8217; (read that as &#8216;simple&#8217;). The collision model is usually a fairly basic shape relative to the parent object (the wonky, broken steps in this instance) which approximates the general contours and shape of the parent mesh as closely as possible.<\/p>\n<p> The main reason for doing the collision as a model is that it&#8217;s often very difficult to shape brushes to &#8216;fit&#8217; models when they have been manipulated so the \u00a0lines, faces and profiles of the mesh no longer fit Radiant&#8217;s grid, often with the result that brushes break, or that players get stuck on tiny none-visible edges where brushes don&#8217;t match up exactly.<\/p>\n<p> There is a second reason for doing collision on certain things like this; for some reason brushes covered in any of the various &#8216;clip&#8217; materials &#8211;\u00a0<b>weaponClip<\/b>,\u00a0<b>playerClip\u00a0<\/b>and so on &#8211; often\u00a0<b>react inconsistently with copious amounts of modelled geometry\u00a0<\/b>resulting in the player being able to jump through the models and occasionally through caulk brushes and out into the void. Modelling collision hulls doesn&#8217;t fix the problem completely but it does appear to reduce it better than using clip brushes.<\/p>\n<p> The steps, as with everything else so far, were modelled from a template object converted a BSP file to an ASE model and then imported into Blender. As with the main map structure the template acts as a guide to shape the steps from. Also at this point it&#8217;s worth noting that the leading edge of each step has been &#8216;beveled&#8217; to stop it from causing bad shadow problem in game due to smooth groups\u00a0<\/p>\n<div class=\"content_images\"> <a href=\"https:\/\/www.katsbits.com\/images\/maps\/katq4dm3\/16oct06_1.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.katsbits.com\/images\/maps\/katq4dm3\/16oct06_sml1.jpg\" alt=\"visible mesh without collision\" width=\"500\" height=\"396\" border=\"0\"><\/a><a href=\"https:\/\/www.katsbits.com\/images\/maps\/katq4dm3\/16oct06_2.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.katsbits.com\/images\/maps\/katq4dm3\/16oct06_sml2.jpg\" alt=\"collision mesh in place over 'visible' mesh\" width=\"500\" height=\"396\" border=\"0\"><\/a><\/p>\n<p> The image above shows the original template duplicated and UV mapped with a &#8216;collision&#8217; place holder image. The material file for the steps in game will have the surface parameter &#8220;nonsolid&#8221; &#8211; this will allow weapon fire and\/or player movement to &#8216;pass through&#8217; the any surface marked as such &#8211; which is why the collision model is needed<\/p>\n<p><a href=\"https:\/\/www.katsbits.com\/images\/maps\/katq4dm3\/16oct06_3.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.katsbits.com\/images\/maps\/katq4dm3\/16oct06_sml3.jpg\" alt=\"primitive collision mesh\" width=\"500\" height=\"396\" border=\"0\" \/><\/a><\/p>\n<p> Shown above is the simple collision model itself. Because this is a collision model for a map object it can be a little more complex than the same sort of thing on weapons and entities, those can&#8217;t exceed a given number of triangles, using &#8216;standard&#8217; step height\/width here means physics are &#8216;normalised&#8217; &#8211; what you&#8217;d expect if running up a flight of stairs made from brushwork. As can be seen for the image below it&#8217;s nothing more than a &#8216;skin&#8217; rather than a &#8216;volume&#8217;, as would be the case if it were a brush<\/p>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"Player_Size\"><\/span>Player Size<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>  In terms of the information covered so far in this topic this should be done as part of the initial stage of production rather than using them now (relative to this topics development history); player size templates.<\/p>\n<p> Although player models have various sizes and proportions, which differ from game to game (Q4 is slightly larger than Q3 for example), it&#8217;s always a good idea to have\u00a0<b>some sort of physical representation<\/b>\u00a0present in the level as you model so you can check your general environment proportions in relation to the players width and height; this saves having to go back and readjust elements of the model later on once you start running around only to find out that you can&#8217;t actually fit through that gap in the wall you intended (<i>eat fewer donuts<\/i>\u00a0Ed.) as a shortcut to another area.<\/p>\n<p> The simplest thing to do is to load a player character into Radiant and place a brush over it (can be the actual model or the editors entity block) so that it covers the general proportions and then export that to OBJ or convert to ASE as previously mentioned. If the actual unit proportions of the player character are known then use those to draw out the template.<\/p>\n<p> Once this template is in Blender it can be duplicated and placed at strategic points to act as a constant reference for size. It doesn&#8217;t need to be textured because it&#8217;s nothing more than a &#8216;helper&#8217; and won&#8217;t be exported as part of the level.<\/p>\n<div class=\"content_images\"> <a href=\"https:\/\/www.katsbits.com\/images\/maps\/katq4dm3\/19oct06_2.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.katsbits.com\/images\/maps\/katq4dm3\/19oct06_sml2.jpg\" alt=\"player scale\" width=\"500\" height=\"396\" border=\"0\" \/><\/a><\/p>\n<p>Player &#8216;capsule&#8217; shown relative to the step model in Blender<\/p><\/div>\n<div class=\"subNav\">\n<p>[1: <a href=\"https:\/\/www.katsbits.com\/site\/quake-4-map\/\" title=\"Initial Blockout\" target=\"_self\" rel=\"noopener\">Level Blockout<\/a> | 2: <a href=\"https:\/\/www.katsbits.com\/site\/quake-4-map-modelling\/\" title=\"Blender Export\" target=\"_self\" rel=\"noopener\">Export Mesh<\/a> | 3: <a href=\"https:\/\/www.katsbits.com\/site\/quake-4-map-radiant\/\" title=\"Editor Import\" target=\"_self\" rel=\"noopener\">Level Editor<\/a> | 4: <a href=\"https:\/\/www.katsbits.com\/site\/quake-4-map-optimisation\/\" title=\"Dynamic Performance\" target=\"_self\" rel=\"noopener\">Performance<\/a>]<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":2314,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[14],"tags":[197,230,488,424,366,549,552,515,328,106,109,108,300,568,567,192,455,416],"class_list":["post-2326","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorials","tag-ase","tag-blender-2-4x","tag-brush-volumes","tag-caulk","tag-collision","tag-d3edit","tag-doomedit","tag-dynamic-light","tag-entities","tag-gtkradiant","tag-level-design","tag-level-editing","tag-mesh-smoothing","tag-q3map2","tag-q4edit","tag-quake-iv","tag-smooth-groups","tag-vertex-painting"],"post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/www.katsbits.com\/site\/wp-json\/wp\/v2\/posts\/2326","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=2326"}],"version-history":[{"count":2,"href":"https:\/\/www.katsbits.com\/site\/wp-json\/wp\/v2\/posts\/2326\/revisions"}],"predecessor-version":[{"id":2407,"href":"https:\/\/www.katsbits.com\/site\/wp-json\/wp\/v2\/posts\/2326\/revisions\/2407"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.katsbits.com\/site\/wp-json\/wp\/v2\/media\/2314"}],"wp:attachment":[{"href":"https:\/\/www.katsbits.com\/site\/wp-json\/wp\/v2\/media?parent=2326"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.katsbits.com\/site\/wp-json\/wp\/v2\/categories?post=2326"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.katsbits.com\/site\/wp-json\/wp\/v2\/tags?post=2326"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}