{"id":843,"date":"2024-01-01T18:46:09","date_gmt":"2024-01-01T18:46:09","guid":{"rendered":"https:\/\/www.katsbits.com\/site\/?p=843"},"modified":"2024-01-01T18:46:09","modified_gmt":"2024-01-01T18:46:09","slug":"bake-normal-maps","status":"publish","type":"post","link":"https:\/\/www.katsbits.com\/site\/bake-normal-maps\/","title":{"rendered":"Bake Normal Maps from Meshes"},"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\/bake-normal-maps\/#Low-poly_mesh_Preparation\" >Low-poly mesh Preparation<\/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\/bake-normal-maps\/#High-poly_mesh_preparation\" >High-poly mesh preparation<\/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\/bake-normal-maps\/#Texture_Bake\" >Texture Bake<\/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\/bake-normal-maps\/#Save_the_Baked_Texture\" >Save the Baked Texture<\/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\/bake-normal-maps\/#Broken_renders\" >Broken renders<\/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\/bake-normal-maps\/#Baking_and_Anti-Aliasing\" >Baking and Anti-Aliasing<\/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\/bake-normal-maps\/#Mesh_Smoothing_Normal_Maps\" >Mesh Smoothing &amp; Normal Maps<\/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\/bake-normal-maps\/#Renormalising_Normal_maps_renormalisation\" >Renormalising Normal maps (renormalisation)<\/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\/bake-normal-maps\/#Summary\" >Summary<\/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\/bake-normal-maps\/#Conclusion\" >Conclusion<\/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\/bake-normal-maps\/#Video\" >Video<\/a><\/li><\/ul><\/nav><\/div>\n<p>Blenders default render engine, &#8220;<b>Blender Render<\/b>&#8221; or &#8220;<b>Blender Internal<\/b>&#8221; as it&#8217;s often called, includes a dedicated sub-system that can be used to generate various types of image map, typically of an object in of itself (direct or self-referencing), or by translating the details of one to another (indirect or inferred referencing). This latter approach is most often used to create Normal maps, a process whereby the detail of a high-resolution model is rendered down, or &#8220;<b>Baked<\/b>&#8220;, to an image UV mapped to a low resolution version of the same mesh.<\/p>\n<p>The following tutorial discusses this process, of using &#8220;Blender Render&#8221; and the &#8220;Texture Bake&#8221; sub-system to generate a Normal map from a high-resolution mesh. A basic understanding of Blender is useful but not specifically necessary to get the most from the below.<\/p>\n<blockquote><p><b>Design note<\/b>: the &amp;quot;Texture Bake&#8221; process is much the same in principle as for <a title=\"Baking Normal map in Blender 2.49\" href=\"https:\/\/www.katsbits.com\/site\/baking-normal-maps-from-models\/\" target=\"_self\" rel=\"noopener\">Blender 2.49<\/a> or using <a title=\"Baking Normal maps using Cycles render\" href=\"https:\/\/www.katsbits.com\/site\/cycles-bake-normal-maps\/\" target=\"_self\" rel=\"noopener\">Cycles Render<\/a> although it differs somewhat in process. i.e. which buttons are pressed, when and where.<\/p><\/blockquote>\n<p><a id=\"low-poly\" name=\"low-poly\"><\/a><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Low-poly_mesh_Preparation\"><\/span>Low-poly mesh Preparation<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Texture baking a mesh to produce a Normal map is usually a &#8216;like-for-like&#8217; process in that structural data from a high-resolution mesh is rendered down to an image mapped to a low-resolution facsimile. Specifically for Normal maps the process essentially means translating surface data into a series of &#8220;<b>R<\/b>&#8220;, &#8220;<b>G<\/b>&#8221; and &#8220;<b>B<\/b>&#8221; (&#8216;red&#8217;, &#8216;green&#8217; and &#8216;blue&#8217;) colour values, each representing the orientation of an individual face normal.<\/p>\n<blockquote><p><b>Design note<\/b>: the &#8220;<b>normal<\/b>&#8221; component in &#8220;<b>Normal map<\/b>&#8221; refers to &#8220;<b>X<\/b>&#8220;, &#8220;<b>Y<\/b>&#8221; and &#8220;<b>Z<\/b>&#8221; coordinate values indicating the orientation of a given &#8216;face&#8217;. In Blender this can be displayed or visualised by activating &#8220;<b>Normals<\/b>&#8221; in &#8220;<b>Mesh Display<\/b>&#8221; (&#8220;<b>View Properties<\/b>&#8220;, &#8220;<b>N<\/b>&#8220;) and selecting any one or combination of &#8220;<b>Vertex<\/b>&#8220;, &#8220;<b>Edge<\/b>&#8221; or &#8220;<b>Face<\/b>&#8221; Normals (activating normals on a high-resolution meshes may cause significant performance issues).<\/p><\/blockquote>\n<p>For texture baking to work, and RGB Normalised values be properly calculated, it&#8217;s important to ensure both high and low resolution meshes are correctly prepared beforehand. In essence both meshes need to be; 1) <b>co-located<\/b>, i.e. both in the same place; 2) have their respective <b>Origin<\/b> points similarly co-located; 3) their respective &#8220;<b>Scale:<\/b>&#8221; and &#8220;<b>Dimensions:<\/b>&#8221; data set; and 4) be (approximately) the <b>same size<\/b>.<\/p>\n<blockquote><p><b>Design note<\/b>: unfixed or otherwise disparate structures can cause issues for texture baking and other &#8216;interpretive&#8217; processes where &#8216;sameness&#8217; is the basis upon which operations are performed. As such both low and high resolution meshes should be &#8216;set&#8217; or &#8216;fixed&#8217; using &#8220;<b>Apply<\/b>&#8221; &#8211; &#8220;<b>Ctrl+A \u00bb Rotation and Scale<\/b>&#8220;. It&#8217;s also preferable to have all the above preparation done before baking to avoid issues or the need to perform additional work after the fact.<\/p><\/blockquote>\n<div class=\"content_images\">\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/cycles-normal-maps\/low-and-high-mesh.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"Low and high poly versions of the same object\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/cycles-normal-maps\/low-and-high-mesh_sml.jpg\" alt=\"Low and high poly versions of the same object\" width=\"640\" height=\"360\" border=\"0\" \/><\/a><\/p>\n<p>Before baking make sure to have both a LOW and HIGH resolution mesh available, both of which should occupy the same location, be the same size, have the same Origin points and be &#8216;fixed&#8217; (shown side-by-side in the above for clarity &#8211; at render they will be co-located and sit atop each other. &#8220;<b>Draw all Edges<\/b>&#8221; is also active, found in &#8220;<b>Object<\/b>&#8221; Properties, to highlight structural or density differences between the two versions)<\/p>\n<\/div>\n<p>In addition, the low resolution mesh <b>MUST<\/b> be fully &#8220;<b>UV Mapped<\/b>&#8221; with an &#8220;<b>Image<\/b>&#8221; assigned using either &#8216;generated&#8217; or &#8216;bitmap&#8217; based data &#8211; the map itself acts as a guide within which image data is baked, the image as the &#8216;substrate&#8217; or &#8216;canvas&#8217; to which that is done.<\/p>\n<blockquote><p><b>Design note<\/b>: the above assumes the bake process is just for the production of a Normal map independent of any Material(s) it might eventually be associated with: it can be generated without the need to assign a full Material to the mesh. If a Material is needed (because the resulting Normal map is to form part of a &#8216;live&#8217; datablock immediately after baking) &#8211; with the low resolution mesh selected click the &#8220;<b>Material<\/b>&#8221; button in Properties. The panel that appears should be blank. If it is click &#8220;<b>+ New<\/b>&#8221; to generate a populated Material slot. Leave this as is and then click the &#8220;<b>Texture<\/b>&#8221; button. Again if an entry does not exist click &#8220;<b>+ New<\/b>&#8221; to create one. Here change &#8220;<b>Type:<\/b>&#8221; to &#8220;<b>Image or Movie<\/b>&#8220;, then in the &#8220;<b>Image<\/b>&#8221; sub-section click the &#8220;<b>Browse Image to be linked<\/b>&#8221; button (button with a landscape picture icon &#8211; don&#8217;t click &#8220;+ New&#8221; or &#8220;Open&#8221;). From the drop-down menu list that appears, the image previously generated and assigned to the mesh should be available, select it to assign to the Material making it ready for baking. <a title=\"Learn about creating and setting up Materials\" href=\"https:\/\/www.katsbits.com\/site\/learning-materials-textures-images\/\" target=\"_self\" rel=\"noopener\">Further information on setting up Materials can be found here<\/a>.<\/p><\/blockquote>\n<p>To create the &#8216;image&#8217;, in the &#8220;<b>UV\/Image Editor<\/b>&#8221; click the &#8220;<b>Image<\/b>&#8221; menu option in the Header then &#8220;<b>New Image<\/b>&#8221; to access the image properties popup (alternatively click the &#8220;<b>+ New<\/b>&#8221; button also visible in the Header). Set a &#8220;<b>Name<\/b>&#8221; (or leave the auto-generated value in place, usually &#8220;<b>Untitled<\/b><i>[.n]<\/i>&#8220;), change the &#8220;<b>Width:<\/b>&#8221; and &#8220;<b>Height:<\/b>&#8221; as needed based on the shape and size of the mesh, the expected layout of the UV map (e.g. &#8220;1024&#8221; by &#8220;1024&#8221;), or the size of the image required. Set the &#8216;<i>style<\/i>&#8216; of image to be used selecting one of either &#8220;<b>Color Grid<\/b>&#8220;, &#8220;<b>UV Grid<\/b>&#8221; or &#8220;<b>Blank<\/b>&#8221; from the &#8220;<b>Generated Type<\/b>&#8221; selector, then click &#8220;<b>OK<\/b>&#8221; to confirm and generate. The new image will immediately appear in the <b>UV\/Image Editor<\/b> occupying what was previously a blank &#8220;<b>Texture Grid<\/b>&#8220;.<\/p>\n<blockquote><p><b>Design note<\/b>: the only significant difference between &#8220;<b>Color Grid<\/b>&#8220;, &#8220;<b>UV Grid<\/b>&#8221; and &#8220;<b>Blank<\/b>&#8221; is whether a pattern or a uniform (single) colour is displayed; the latter tends to make it easier to see the UV when unwrapping and editing, whereas the former make it easier to see distribution and relative image density across the mesh &#8211; ideally their respective patterns should be uniformly distributed, especially in areas immediately visible to the viewer\/player. In addition, to aid the UV editing process the different image &#8216;types&#8217; can be swapped back-and-forth to make the UV editing process easier &#8211; for example using &#8220;Blank&#8221; to see the initial UV map, then &#8220;UV Grid&#8221; to check distribution. To do this, in the <b>UV\/Image Editor<\/b> click &#8220;<b>View \u00bb Properties<\/b>&#8221; to access the Image Properties. panel (or press &#8220;<b>N<\/b>&#8221; with the cursor over the active view), then click the &#8220;<b>Color Grid<\/b>&#8220;, &#8220;<b>UV Grid<\/b>&#8221; or &#8220;<b>Blank<\/b>&#8221; buttons as needed.<\/p><\/blockquote>\n<div class=\"content_images\">\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/cycles-normal-maps\/uv-editor-new-image.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"Generating a new &quot;Image&quot; to assign directly to the low-poly mesh UV map\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/cycles-normal-maps\/uv-editor-new-image_sml.jpg\" alt=\"Generating a new &quot;Image&quot; to assign directly to the low-poly mesh UV map\" width=\"640\" height=\"360\" border=\"0\" \/><\/a><\/p>\n<p>Generating a new Image that&#8217;s assigned directly to the UV without the use of Materials; the low-resolution mesh is shown in Edit mode to display the UV Map before texture application &#8211; the map is slightly distorted due to the default &#8220;<b>Texture Space<\/b>&#8221; (grid) being square (high resolution shown with &#8220;<b>Draw all Edges<\/b>&#8221; active for clarity and to highlight structural differences)<\/p>\n<\/div>\n<p>If the mesh has not yet been unwrapped, whilst selected press &#8220;<b>Tab<\/b>&#8221; to enter <b>Edit Mode<\/b>, &#8220;<b>A<\/b>&#8221; to select everything (or from the 3D View Header click &#8220;<b>Select \u00bb (De)select All<\/b>&#8220;) before finally pressing &#8220;<b>U<\/b>&#8221; and selecting &#8220;<b>Unwrap<\/b>&#8221; from the &#8220;<b>UV Map<\/b>&#8221; pop-up menu. This generates an initial map to which the previously created image can be assigned before then editing and marking the mesh with Seams for better Unwrap.<\/p>\n<blockquote><p><b>Design note<\/b>: UV unwrapping is selection based process, only surfaces highlighted at unwrap generate a map to which an image can be assigned, else surfaces appear &#8216;white&#8217; (no Material\/UV Map) or &#8216;pink&#8217; (missing Image). Once the initial map is generated it can be edited as normal using Seams to split the UV and lay it flat.<\/p><\/blockquote>\n<div class=\"content_images\">\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/initial-uv-map-image-editor.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"Initial UV map of the low-resolution mesh (shown after editing in UV Edit screen layout)\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/initial-uv-map-image-editor_sml.jpg\" alt=\"Initial UV map of the low-resolution mesh\" width=\"640\" height=\"360\" border=\"0\" \/><\/a><\/p>\n<p>Shown in &#8220;<b>UV Editing<\/b>&#8221; layout (selected from &#8220;<b>Choose Screen Layout<\/b>&#8221; in the upper Header\/Info bar), the objects initial UV is mapped to a square grid, the UV\/Image Editors default &#8220;<b>Texture Space<\/b>&#8221; &#8211; this automatically readjusts itself one an image is associated with the mapped UV&#8217;s. Note also that as an image has yet to be assigned to the object it appears white in the 3D View<\/p>\n<\/div>\n<p>For that, whilst the mesh is still selected, in the <b>UV\/Image Editor<\/b> click the &#8220;<b>Browse Image to linked<\/b>&#8221; button in the Header (icon displaying a &#8216;photograph&#8217;) and select the previously created image from the &#8216;browse&#8217; list that emerges, assigning it to the UV map and the mesh (which will appear in the 3D View subject to being in &#8220;<b>Texture<\/b>&#8221; mode, &#8220;<b>Alt+Z<\/b>&#8220;). Once applied continue to edit the UV&#8217;s so they map to the image as needed &#8211; it&#8217;s important the low-poly object be fully unwrapped before continuing because the map itself, its shape and coverage, is used to guide the process, it acts as a template of sorts into which the RGB data from the high-resolution mesh is baked.<\/p>\n<blockquote><p><b>Design note<\/b>: the image can be assigned before or after the UV map has been generated and edited, doing one or the other is largely a matter of preference. If done after however, some adjustment to the UV map may be necessary if the image used is not square (the texture grid is square so the UV map will expand when assigned to a wider image). To aid the general process editing the UV map, enabling &#8220;<b>Snap to Pixels<\/b>&#8221; helps by making sure mesh vertices align to texture pixels &#8211; with the entire mesh selected in <b>Edit Mode<\/b> to expose the UV&#8217;s, click &#8220;<b>UV&#8217;s<\/b>&#8221; then &#8220;<b>Snap to Pixels<\/b>&#8221; in the <b>UV\/Image Editor<\/b>, then (optionally) with the entire UV selected make a minor &#8220;<b>Scale<\/b>&#8221; adjustment, &#8220;<b>S<\/b>&#8220;, to nudge individual vertices to the pixel.<\/p><\/blockquote>\n<div class=\"content_images\">\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/selecting-image-uv-editor.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"Selecting the previously generated image to assign it to the now available UV map\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/selecting-image-uv-editor_sml.jpg\" alt=\"Selecting previously created image\" width=\"640\" height=\"360\" border=\"0\" \/><\/a><\/p>\n<p>Selecting the previously generated image in the <b>UV\/Image Editor<\/b> to assign it to the initial UV map (shown contained within the default square &#8220;<b>Texture Space<\/b>&#8221; area &#8211; click the &#8220;<b>Browse Image to be linked<\/b>&#8221; button selecting the entry from the list (in this instance &#8220;<b>Untitled<\/b>&#8220;)<\/p>\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/cycles-normal-maps\/low-uv-map.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"Low-poly mesh UV mapped to the geneated image\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/cycles-normal-maps\/low-uv-map_sml.jpg\" alt=\"Low-poly mesh UV mapped to the geneated image\" width=\"640\" height=\"360\" border=\"0\" \/><\/a><\/p>\n<p>Make sure the low-poly mesh is fully UV unwrapped and has an Image assigned (a &#8220;Generated&#8221; image in the example shown above) before continuing (mesh shown in Edit Mode and selected to display the UV map and image in the UV\/Image Editor using the &#8220;<b>UV Editing<\/b>&#8221; screen layout)<\/p>\n<\/div>\n<p><a id=\"high-poly\" name=\"high-poly\"><\/a><\/p>\n<h3><span class=\"ez-toc-section\" id=\"High-poly_mesh_preparation\"><\/span>High-poly mesh preparation<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>The high-resolution mesh on the other hand needs little additional preparation other than ensuring it&#8217;s size\/dimension, position and Origin match the low-resolution facsimile &#8211; it does not require materials, images or to be UV unwrapped. High-resolution meshes can be used <i>with<\/i> or <i>without<\/i> modifiers so it&#8217;s not strictly necessary the &#8220;<b>Multires<\/b>&#8221; or &#8220;<b>Subdivision Surface<\/b>&#8221; modifiers be applied to the mesh beforehand (click &#8220;<b>Apply<\/b>&#8221; within each Modifier panel). Mesh data can be presented in its original &#8216;quadratic&#8217; form or optionally tessellated (triangulated), &#8220;<b>Ctrl+T<\/b>&#8220;, before baking. This is not absolutely necessary for the process to work however.<\/p>\n<blockquote><p><b>Design note<\/b>: for super-high resolution meshes tessellation may not offer any significant advantage because there would be far more surface volume on the mesh than is available on the assigned image for a 1:1 surface\/pixel correlation (the accuracy of the resulting Normal map relative to the data baked is defined by the size of the image mapped to the model &#8211; smaller images mean less pixel space available for baking which reduces the accuracy represented in detail and structure). Where it may be prudent to triangulate is in instances where the reference mesh is not suitably dense, which can increase the risk of bake errors where the render process has difficulty determining whether an un-split face is concave or convex, leading to incorrectly baked RGB values.<\/p><\/blockquote>\n<div class=\"content_images\">\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/cycles-normal-maps\/multires.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"The high resolution mesh can be sub-divided or assign a &quot;Multires&quot; modifier\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/cycles-normal-maps\/multires_sml.jpg\" alt=\"The high resolution mesh can be sub-divided or assign a &quot;Multires&quot; modifier\" width=\"640\" height=\"360\" border=\"0\" \/><\/a><\/p>\n<p>The high-resolution mesh (selected and shown with &#8220;<b>Draw all lines<\/b>&#8221; active) can be &#8216;sub-divided&#8217; manually (i.e. subdivided through use of the &#8220;<b>Subdivide<\/b>&#8221; button in &#8220;<b>Tools<\/b>&#8220;) or assigning the &#8220;<b>Subdivision Surface<\/b>&#8221; or &#8220;<b>Multires<\/b>&#8221; modifier, either &#8216;fixed&#8217; or &#8216;unfixed&#8217; (the modifier properties being applied and &#8216;made real&#8217;) before being baked<\/p>\n<\/div>\n<p><a id=\"bake\" name=\"bake\"><\/a><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Texture_Bake\"><\/span>Texture Bake<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Once the mesh has been UV mapped and an image assigned click the &#8220;<b>Render<\/b>&#8221; Properties button (&#8216;camera&#8217; icon). Scroll down to the &#8220;<b>Bake<\/b>&#8221; subsection at the bottom of the panel and click the black triangle to the headings left to access its respective properties and options. Here change &#8220;<b>Bake Type<\/b>:&#8221; to &#8220;<b>Normal<\/b>&#8221; (&#8220;<b>Bake Type: Normal<\/b>&#8220;, displays &#8220;<b>Full Render<\/b>&#8221; by default) and activate &#8220;<b>Selected to Active<\/b>&#8221; by clicking the checkbox so Blender knows the Normal map is to be produced using the low\/high resolution mesh pair.<\/p>\n<blockquote><p><b>Design note<\/b>: when checking &#8220;<b>Bake<\/b>&#8221; settings it&#8217;s also prudent to have &#8220;<b>Clear<\/b>&#8221; set so the process essentially wipes the image and re-bakes the data &#8216;as new&#8217; when re-baking after adjustments are made where needed. Further &#8220;<b>Margin:<\/b>&#8221; can be set to a higher value, i.e. &#8220;<b>16 px<\/b>&#8220;, to compensate for UV positions relative to each other where the resulting image is to be used with mipmaps; as mipmaps decrease in size, the distance between UV islands diminishes so a larger initial value is used to compensate for any subsequent loss of pixels due to image size reduction &#8211; this value does depend on the textures actual size, a 16px margin uses a significant amount of space on a 128 x 128 pixel image but very little on a 2048 x 2048 image. Adjust the &#8220;<b>Margin:<\/b>&#8221; value as appropriate.<\/p><\/blockquote>\n<div class=\"content_images\">\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/bake-properties.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"Default 'Bake' properties\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/bake-properties_sml.jpg\" alt=\"Default 'Bake' properties\" width=\"640\" height=\"360\" border=\"0\" \/><\/a><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/bake-properties-normals.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"Bake settings for Normal maps\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/bake-properties-normals_sml.jpg\" alt=\"Bake settings for Normal maps\" width=\"640\" height=\"360\" border=\"0\" \/><\/a><\/p>\n<p>Switch to &#8220;<b>Render<\/b>&#8221; Properties and scroll down to the very bottom to access the &#8220;<b>Bake<\/b>&#8221; systems options and settings (defaults shown first image above). Change &#8220;<b>Bake Type:<\/b>&#8221; to &#8220;<b>Normal<\/b>&#8221; and activate &#8220;<b>Selected to Active<\/b>&#8221; so Blender knows how the Normal map is to be generated. Note meshes are shown positioned as they should be for rendering, moved together so they occupy the same position on the grid, important for &#8216;like-for-like&#8217; texture baking<\/p>\n<\/div>\n<p>Finally in the 3D View make sure to double-check the <b><em>high-resolution mesh is selected FIRST<\/em><\/b> and the <b><em>low-resolution mesh LAST<\/em><\/b> &#8211; the order is important &#8211; then click the button marked &#8220;<b>Bake<\/b>&#8221; to generate the map. A progress bar will appear in the &#8220;<b>Info<\/b>&#8221; header atop the application, disappearing upon process completion.<\/p>\n<blockquote><p><b>Design note<\/b>: the order objects are selected ensures render takes place correctly; the low-resolution mesh, the item assigned the image, should always be the <b>LAST<\/b> item (multi) selected (&#8220;<b>Shift+RMB<\/b>&#8220;) else the process will error out.<\/p><\/blockquote>\n<div class=\"content_images\">\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/baked-normals.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"Click the &quot;Bake&quot; to render the high resolution down to the low-poly mapped image\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/baked-normals_sml.jpg\" alt=\"Click the &quot;Bake&quot; to render the high resolution down to the low-poly mapped image\" width=\"640\" height=\"360\" border=\"0\" \/><\/a><\/p>\n<p>Make sure the low-resolution mesh is selected LAST (should be active object) then click the &#8220;<b>Bake<\/b>&#8221; button to generate the Normal map &#8211; a progress bar appears in the &#8220;<b>Info<\/b>&#8221; header showing render status<\/p>\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/baked-normals-uv-editor.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"The resulting Cycles rendered Normal map\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/baked-normals-uv-editor_sml.jpg\" alt=\"The resulting Cycles rendered Normal map\" width=\"640\" height=\"360\" border=\"0\" \/><\/a><\/p>\n<p>The resulting Normal map baked to the image previously mapped to the low resolution mesh, which can now be saved and used as needed &#8211; mapped to an object for game use &#8211; note the image, once saved, <a title=\"Renormalising Normal maps\" href=\"#renormalisation\" target=\"_self\" rel=\"noopener\">will need to be re-normalised<\/a> to remove the grey background and ensure it only contains normalised RGB colour values, else it may cause issues when used in-game (&#8216;grey&#8217; is not a normalised colour)<\/p>\n<\/div>\n<p><a id=\"save\" name=\"save\"><\/a><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Save_the_Baked_Texture\"><\/span>Save the Baked Texture<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Once bake has finished the resulting Normal map will have appeared in the <b>UV\/Image Editor<\/b> where it can then be saved. To do this from the <b>UV\/Image Editor<\/b> Header click &#8220;<b>Image \u00bb Save as Image<\/b>&#8221; or &#8220;<b>Image \u00bb Save a Copy<\/b>&#8220;, either option opens the &#8220;<b>File Browser<\/b>&#8220;. Select a suitable image format from the &#8220;<b>Save as Image<\/b>&#8221; properties section bottom-left, preferably &#8216;loss-less&#8217; such as &#8220;<b>BMP<\/b>&#8221; or &#8220;<b>Targa RAW<\/b>&#8220;. Browse to the location the file is to be saved, and then click the &#8220;<b>Save as Image<\/b>&#8221; button top-right. Blender will pause as the temporary bake data is written to file and then return to the previous view once done.<\/p>\n<blockquote><p><b>Design note<\/b>: the difference between &#8220;<b>Save as Image<\/b>&#8221; and &#8220;<b>Save a Copy<\/b>&#8221; has the former save the baked data to a suitable format using the new file to over-ride whatever currently resides in the Material and mapped to the mesh. Whereas the latter will save a &#8216;copy&#8217; of the same bake data leaving in place whatever is active until the main *.blend file is saved or reloaded &#8211; bake data is temporary in nature, as such will be lost when doing this (dumped into a temporary data\/image buffer).<\/p><\/blockquote>\n<div class=\"content_images\">\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/save-normals-bake-image.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"Save the baked image from the UV\/Image Editor\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/save-normals-bake-image_sml.jpg\" alt=\"Save the baked image from the UV\/Image Editor\" width=\"640\" height=\"360\" border=\"0\" \/><\/a><\/p>\n<p>From the <b>UV\/Image Editor<\/b> click &#8220;<b>Image*<\/b>&#8221; then &#8220;<b>Save as Image<\/b>&#8221; or &#8220;<b>Save a Copy<\/b>&#8221; to save the data in a usable format (the &#8220;<b>*<\/b>&#8221; appended to the &#8220;<b>Image<\/b>&#8221; menu option in the Header indicates generated data has not yet been saved, removed once that has been done)<\/p>\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/save-bake-file.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"Saving the baked image using the &quot;File Browser&quot;\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/save-bake-file_sml.jpg\" alt=\"Saving the baked image using the &quot;File Browser&quot;\" width=\"640\" height=\"360\" border=\"0\" \/><\/a><\/p>\n<p>In the &#8220;<b>File Browser<\/b>&#8221; that opens select a loss-less format to save the image to from the options dialogue lower-left, &#8220;<b>BMP<\/b>&#8221; or &#8220;<b>Targa RAW<\/b>&#8221; for example, browse to a location to save the file, then click &#8220;<b>Save as Image<\/b>&#8221; top-right. Blender will then return to the previous screen once done<\/p>\n<\/div>\n<p><a id=\"broken\" name=\"broken\"><\/a><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Broken_renders\"><\/span>Broken renders<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>During the bake process it&#8217;s not uncommon for renders to exhibit artefacts as a result of disparities between the high and low resolution meshes and the origin point from which rays used to analyse mesh are cast; if the allowance is insufficient the end result is usually some form of image corruption.<\/p>\n<div class=\"content_images\">\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/bake-distance-bias.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"Compensating for differences between High and Low resolution meshes\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/bake-distance-bias_sml.jpg\" alt=\"Compensating for differences between High and Low resolution meshes\" width=\"640\" height=\"360\" border=\"0\" \/><\/a><\/p>\n<p>The difference between the Low and High resolution meshes needs to be consider for baking else the render process results in images being corrupt or exhibiting other forms of visual aberration, essentially making the Normal map unusable<\/p>\n<\/div>\n<p>In other words when making low\/high resolution mesh pairings for Normal map baking, it&#8217;s expected there will be some degree of co-planar surfacing, overlaps or protrusions &#8211; rivets, screws and other features can sit exactly at, above, or below, the low-poly mesh such that when the bake process comes across these types of structures they may be inadvertently clipped or improperly rendered because the point from which bake is initiated is too close to a surface. The result is typically a broken or incomplete rendering of structure.<\/p>\n<div class=\"content_images\">\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/baked-normals-uv-editor.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"The resulting Cycles rendered Normal map\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/baked-normals-uv-editor_sml.jpg\" alt=\"The resulting Cycles rendered Normal map\" width=\"640\" height=\"360\" border=\"0\" \/><\/a><\/p>\n<p>Using the default values to bake Normal maps may cause image artefacts (shown in the above as pattern interference, especially noticeable in the flat windowed area to the right) due to the origin point of the &#8216;ray&#8217; used to determine structure being too close to surfaces; if the tolerance is too low features above or below might not then bake correctly because they&#8217;re essentially clipped from consideration<\/p>\n<\/div>\n<p>To compensate for this disparity the distance between surfaces and the origin point of the ray-cast can be increased or decreased by adjusting &#8220;<b>Distance:<\/b>&#8221; and &#8220;<b>Bias:<\/b>&#8220;; although each performs a particular function, in practice higher values mean more of the mesh can be captured for rendering. To make adjustments; in &#8220;<b>Bake<\/b>&#8221; Properties click either &#8220;<b>Distance:<\/b>&#8220;, &#8220;<b>Bias:<\/b>&#8220;, or both in turn, and type a suitable value depending on the significance of detailing that needs to be considered, then re-bake to rebuild the Normal map.<\/p>\n<blockquote><p><b>Design note<\/b>: as a general rule-of-thumb the distance used tends to be reflective of the difference between the lowest point of the low-poly structure, meaning both &#8220;Distance&#8221; and &#8220;Bias&#8221; equal &#8220;0&#8221;, and the height\/depth of features needing to be captured on the high-resolution mesh, meaning &#8220;Distance&#8221; and &#8220;Bias&#8221; equal a value that allows the entire structure of both meshes to be fully evaluated. Although this can be determined by measuring the features in question, both &#8216;Distance&#8217; and &#8216;Bias&#8217; values are represented in Blenders <a title=\"Units of Measurement\" href=\"https:\/\/www.katsbits.com\/site\/metric-imperial-units\/\" target=\"_self\" rel=\"noopener\">Units<\/a>, some experimentation may be necessary to find the happy median &#8211; it should not be so low as to fail at preventing artefacts, but also not so high as to cause similar issues in reverse. Distance and Bias are also relative to mesh size and scale so higher values may be necessary for large objects.<\/p><\/blockquote>\n<div class=\"content_images\">\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/bake-settings-bias-distance.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"hanging &quot;Bias&quot; to include more geometry in the bake process\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/bake-settings-bias-distance_sml.jpg\" alt=\"Changing &quot;Bias&quot; to include more geometry in the bake process\" width=\"640\" height=\"360\" border=\"0\" \/><\/a><\/p>\n<p>To mitigate issues of bad or poor rendering, &#8220;<b>Bias<\/b>&#8221; and &#8220;<b>Distance<\/b>&#8221; values can be increased to include more geometry in the bake process, essentially expanding the area captured, compensating the clipping that might inadvertently occur due to the proximity of both meshes to each other and the &#8216;ray&#8217; origin used to calculate and render down those same structures<\/p>\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/baked-normals-bias.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"Increasing &quot;Ray Distance&quot; captures more detaling in the resulting texture\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/baked-normals-bias_sml.jpg\" alt=\"Increasing &quot;Ray Distance&quot; captures more detaling in the resulting texture\" width=\"640\" height=\"360\" border=\"0\" \/><\/a><\/p>\n<p>With &#8220;<b>Distance:<\/b>&#8221; and\/or &#8220;<b>Bias:<\/b>&#8221; set to appropriate (higher) values a cleaner bake is possible because all the necessary mesh structure is being fully captured for processing<\/p>\n<\/div>\n<p><a id=\"antialiasing\" name=\"antialiasing\"><\/a><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Baking_and_Anti-Aliasing\"><\/span>Baking and Anti-Aliasing<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>As with most forms of baking, &#8220;<b>Aliasing<\/b>&#8221; presents a particular problem because its reliant upon the ability of the rendering system to interpolate and &#8216;<b>anti<\/b>&#8216; aliase pixel data, and the resolution of the image being baked to. If one or both are insufficient the resulting bake exhibits &#8216;aliasing&#8217; or significant pixelation that often manifests as visible &#8216;stepping&#8217; or &#8216;jagged&#8217; edges around non-axial or non-perpendicular details and structures (e.g. rivets, screws and other curved details). In other words the bake process is not <i>inferring<\/i> or <i>averaging<\/i> pixel data with respect to generating clean edges around structural features that don&#8217;t run along the horizontal or vertical axis.<\/p>\n<blockquote><p><b>Design note<\/b>: aliasing issues tend to occur when image data is not correctly, or fully, interpolated when baked. In other words the render process is analysing structural data at at face value, i.e. as it appears to the renderer absent, or with minimal, interpreted averaging between pixels to fill in the gaps, the &#8216;<b>anti<\/b>&#8216; in &#8220;<b>anti-aliasing<\/b>&#8220;.<\/p><\/blockquote>\n<div class=\"content_images\">\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/normal-map-anti-aliasing.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"Lack of Anti-Aliasing in baked results using Cycles\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/normal-map-anti-aliasing_sml.jpg\" alt=\"Lack of Anti-Aliasing in baked results using Cycles\" width=\"640\" height=\"360\" border=\"0\" \/><\/a><\/p>\n<p>Shown in &#8220;<b>UV Editing<\/b>&#8221; layout for clarity, Normal maps baked without &#8220;<b>Anti-Aliasing<\/b>&#8221; often exhibit &#8216;jaggies&#8217;, the &#8216;stepped&#8217; or pixilated appearance of edges around non-perpendicular structures (that don&#8217;t run along the horizontal or vertical axes)<\/p>\n<\/div>\n<p>In practice, absent proper &#8220;<b>Anti-Aliasing<\/b>&#8221; or &#8220;<b>Sampling<\/b>&#8221; options, the solution is to edit the Normal map outside Blender, manually painting in what&#8217;s missing using a third-party image editing application like Photoshop, GIMP, PhotoPaint etc. (or whatever image\/photo editing software is available). Alternatively the map can be baked larger than needed then down-sized, again using a photo-editor, taking advantage of the indirect anti-aliasing that occurs when images are re-sized. Still further the map can be left in its raw state relying instead on anti-aliasing being performed at run-time when image data is re-sampled and re-drawn to differing sizes on screen.<\/p>\n<blockquote><p><b>Design note<\/b>: when manually editing Normal maps through painting it&#8217;s often better to split and edit the channels individually, correcting each of the &#8216;R&#8217; (red), &#8216;G&#8217; (green) and &#8216;B&#8217; (blue) colour channels separately rather than as a combined RGB image &#8211; channels only contain saturation data pertaining to the colour they represent, i.e. &#8220;0%&#8221; or &#8220;0&#8221; saturation, often displayed as black, represents no channel colour, whereas &#8220;100%&#8221; or &#8220;255&#8221; saturation represents full channel colour, a total range of a single colour from &#8216;black&#8217; to &#8216;full&#8217; colour &#8211; 0% to 100%, or 0 to 255 saturation. Overall this makes it less likely colour aberrations will be introduced to the image, although care still needs to be taken to match edited tones exactly else the end result is a malformed Normalised surface in-game.<\/p><\/blockquote>\n<div class=\"content_images\">\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/normal-map-low.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"Details on a Normal map rendered to 256x128\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/normal-map-low_sml.jpg\" alt=\"Details on a Normal map rendered to 256x128\" width=\"640\" height=\"360\" border=\"0\" \/><\/a><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/normal-map-medium.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"Rivet details on a Normal map rendered to 2048x1024\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/normal-map-medium_sml.jpg\" alt=\"Rivet details on a Normal map rendered to 2048x1024\" width=\"640\" height=\"360\" border=\"0\" \/><\/a><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/normal-map-high.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"Reduced aliasing as a result of baking to a 4096x2048 image\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/normal-map-high_sml.jpg\" alt=\"Reduced aliasing as a result of baking to a 4096x2048 image\" width=\"640\" height=\"360\" border=\"0\" \/><\/a><\/p>\n<p>Shown in &#8220;<b>UV Editing<\/b>&#8221; layout for clarity, the objects Normal map is baked to a 256&#215;128, 2048&#215;1024 and 4096&#215;2048 texture respectively, each of which has a differing affect on rivet detail clarity &#8211; in essence larger images mean fine details can be better defined as more pixel data is available for use, distributing aliasing across more data and in effect pseudo &#8216;anti-aliasing&#8217; the image<\/p>\n<\/div>\n<p><a id=\"smoothing\" name=\"smoothing\"><\/a><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Mesh_Smoothing_Normal_Maps\"><\/span>Mesh Smoothing &amp; Normal Maps<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>When baking Normal maps using the &#8220;<b><a href=\"#bake\">Selected to Active<\/a><\/b>&#8221; approach, &#8220;<a title=\"What is 'Mesh Smoothing'\" href=\"https:\/\/www.katsbits.com\/site\/what-are-smooth-groups-and-mesh-smoothing-on-models\/\" target=\"_self\" rel=\"noopener\"><b>Mesh Smoothing<\/b><\/a>&#8221; is determined not by edge or face splits on the low-poly mesh but instead on the high-poly using &#8220;<b>Control Loops<\/b>&#8221; or other types of &#8220;<b>Control Structures<\/b>&#8220;. Typically extra geometry placed strategically to change the density of a feature or features, it&#8217;s this data which when baked as biased RGB Normalised colours, informs the behaviour of smoothing on the low-poly mesh with respect to the high-poly geometry it directly represents. In other words meshes are typically smoothed based on the <b><em>continuity and colour of Normalised pixels<\/em><\/b> across a UV mapped surface, not the surface structure itself &#8211; modification to the latter tends to have a detrimental effect because it interferes with the former.<\/p>\n<div class=\"content_images\">\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/smoothing-mesh-structure.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"&quot;Control Loops&quot; can be used to change smoothing\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/smoothing-mesh-structure_sml.jpg\" alt=\"&quot;Control Loops&quot; can be used to change smoothing\" width=\"640\" height=\"360\" border=\"0\" \/><\/a><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/smoothing-mesh-structure-normals.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"&quot;Control Loops&quot; baked to Normals changing the way lighting behaves\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/smoothing-mesh-structure-normals_sml.jpg\" alt=\"&quot;Control Loops&quot; baked to Normals changing the way lighting behaves\" width=\"640\" height=\"360\" border=\"0\" \/><\/a><\/p>\n<p>Image-top shows how mesh density changes the way structure can be seen to curve and respond to lighting\/shading. In this way hard (1) or soft edges and curves (2) can be controlled by changing the mesh which in turn, Image-bottom, is then represented in RGB as similarly hard (1) or soft edges or curves (2), or a combination (3), thus controlling the way smoothing behaves<\/p>\n<\/div>\n<p>What this means in practice is that the conditions for baking textures to a low-poly object, and using such objects in-game differ; during bake, the low-poly mesh will typically have minimal smoothing in place, if at all, because edges, corners, crevices, bevels and so are defined by the high-resolution mesh; whereas in-game some smoothing may be necessary to augment a structure, i.e. splitting unseen faces to aid the appearance of others that are.<\/p>\n<div class=\"content_images\">\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/smoothing-solid.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"Half n' half. Left side uses a uniform Smooth, right edges suitably marked\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/smoothing-solid_sml.jpg\" alt=\"Half n' half. Left side uses a uniform Smooth, right edges suitably marked\" width=\"640\" height=\"360\" border=\"0\" \/><\/a><\/p>\n<p>Shown in &#8220;<b>UV Editing<\/b>&#8221; layout for clarity, the low-poly mesh is shown with its left side set up to use uniform smoothing, and edges marked as &#8220;<b>Sharp<\/b>&#8221; on the right. The baked Normal map, shown in the UV\/Image Editor (left side of Blender), displays the result and what affect smoothing, or not, has on Normal maps &#8211; the difference can be significant<\/p>\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/smoothing-textured.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"In Texture mode showing the affect smooth baked Normal maps have\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/smoothing-textured_sml.jpg\" alt=\"In Texture mode showing the affect smooth baked Normal maps have\" width=\"640\" height=\"360\" border=\"0\" \/><\/a><\/p>\n<p>Displayed in &#8220;<b>Texture<\/b>&#8221; mode (again shown using &#8220;<b>UV Editing<\/b>&#8221; layout) the Normal map affects the meshes appearance quite significantly &#8211; in-game this has a similar affect often causing the completed model to exhibit surface problems<\/p>\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/smoothing-normals.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"Normal map showing the difference between 'smooth' and 'no smooth'\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/smoothing-normals_sml.jpg\" alt=\"Normal map showing the difference between 'smooth' and 'no smooth'\" width=\"640\" height=\"360\" border=\"0\" \/><\/a><\/p>\n<p>Expanded view (shown full screen in the UV\/Image Editor for clarity) of the same baked Normal map with uniformly smoothed surfaces on the left of each section and edge splits on right; the difference can be quite significant depending on the type of object baked so special care should be given to Baking where &#8216;Smoothing&#8217; needs to be used<\/p>\n<\/div>\n<p>With this in mind special attention should be given to the use of Smoothing and Smooth Group like enhancements so they don&#8217;t break Normals, which for all intents and purposes means &#8220;<b>Mesh Smoothing<\/b>&#8220;, &#8220;<b>Smooth Groups<\/b>&#8221; or &#8220;<b>Hard Edges<\/b>&#8221; are to be avoided, certainly for baking purposes. In other words the low resolution mesh should be assigned a single &#8216;smoothing&#8217; value or group, or where they are needed it should be done in a way that doesn&#8217;t detract from the use of Normal maps, i.e. edges or faces marked in a way that&#8217;s not immediately obvious to the viewer.<\/p>\n<div class=\"content_images\">\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/smoothing-baked-mesh.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"Normal map with Smoothing assigned to mesh\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/smoothing-baked-mesh_sml.jpg\" alt=\"Normal map with Smoothing assigned to mesh\" width=\"640\" height=\"360\" border=\"0\" \/><\/a><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/smoothing-baked-normals.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"Normal map baked with Smoothing active\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/smoothing-baked-normals_sml.jpg\" alt=\"Normal map baked with Smoothing active\" width=\"640\" height=\"360\" border=\"0\" \/><\/a><\/p>\n<p>Smoothing can be used but care should to be taken as to the effect doing so has on the resulting Normal map (note also consideration should be given to aliasing issues where hard edges appear &#8211; another incidental reason to avoid using &#8220;<b>Mesh Smoothing<\/b>&#8221; if at all possible)<\/p>\n<\/div>\n<p><a id=\"renormalisation\" name=\"renormalisation\"><\/a><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Renormalising_Normal_maps_renormalisation\"><\/span>Renormalising Normal maps (renormalisation)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>When Bake completes Blender displays non-normalised areas of the map in the <b>UV\/Image Editor<\/b> as a flat uniform grey colour. When the map is subsequently saved it may included these depending on the completeness of what was rendered. If this is the case the entire image will need to be &#8220;<b>re-normalised<\/b>&#8221; to convert non-normalised colours to valid normalised RGB values. This is important because Normal maps should only contain RGB normalised values (each &#8220;<b>R<\/b>&#8220;, &#8220;<b>G<\/b>&#8221; and &#8220;<b>B<\/b>&#8221; using only &#8220;<b>0 \u00bb 255<\/b>&#8221; saturation), any that are not will result in an unusable Normal map (subject to engine tolerance).<\/p>\n<div class=\"content_images\">\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/normal-map-needs-renormalising.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"Baked Normal maps may contain invalid colours which needs to be removed\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/normal-map-needs-renormalising_sml.jpg\" alt=\"Baked Normal maps may contain invalid colours which needs to be removed\" width=\"640\" height=\"360\" border=\"0\" \/><\/a><\/p>\n<p>Baked Normal maps may include invalid colours which need to be removed before the map can be used in-game, else they can cause the appearance of aberrations and other types of malformed surface, if not make the map unusable (shown in Corel PhotoPaint)<\/p>\n<\/div>\n<p>The simplest way to re-normalise an image is to filter it using a tool or plugin designed specifically for that purpose (subject to availability for the application used). If one is not available some manual image editing is necessary to correct the problem. To do this open the image and, if not already masked as a result of the bake process in Blender, select all the grey areas, creating a mask or layer from the selection. Once done simply flood-filling the areas, masks or layers with the appropriate normalised colour, commonly this will be a &#8216;flat&#8217; or &#8216;mid-tone&#8217; value of RGB &#8220;<b>127, 127, 255<\/b>&#8221; or &#8220;<b>128, 128, 255<\/b>&#8221; depending on the engine used.<\/p>\n<div class=\"content_images\">\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/renormalised-photopaint.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"Manually re-normalising a Normal map in Photopaint\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/renormalised-photopaint_sml.jpg\" alt=\"Manually re-normalising a Normal map in Photopaint\" width=\"640\" height=\"360\" border=\"0\" \/><\/a><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/renormalised-gimp.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"Manually re-normalising a Normal map in GIMP\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/renormalised-gimp_sml.jpg\" alt=\"Manually re-normalising a Normal map in GIMP\" width=\"640\" height=\"360\" border=\"0\" \/><\/a><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/renormalised-photoshop-elements.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" title=\"Manually re-normalising a Normal map in Photoshop Elements\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/normal-maps\/renormalised-photoshop-elements_sml.jpg\" alt=\"Manually re-normalising a Normal map in Photoshop Elements\" width=\"640\" height=\"360\" border=\"0\" \/><\/a><\/p>\n<p>Before use Normal maps need to be &#8220;<b>Re-normalised<\/b>&#8221; wherever they contain none invalid RGB colours. How this is done varies on tool or filter availability but can be done manually by masking of aberrant areas and flood-filling them with an appropriate &#8216;mid-tone&#8217; normalised colour (&#8220;<b>127, 127, 255<\/b>&#8221; or &#8220;<b>128, 128, 255<\/b>&#8221; depending on the game engine used)<\/p>\n<\/div>\n<p><a id=\"summary\" name=\"summary\"><\/a><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Summary\"><\/span>Summary<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>The following is a basic summary of the process as a quick check-list for use.<\/p>\n<ul>\n<li>Make sure both meshes are the same size and at the same location.<\/li>\n<li>UV map low-poly mesh and assign an Image (with or without Material).<\/li>\n<li>High resolution mesh can have Subdivision or Multires modifiers active.<\/li>\n<li>Set &#8220;<b>Bake<\/b>&#8221; options &#8220;<b>Normal<\/b>&#8221; and &#8220;<b>Active to Selected<\/b>&#8220;.<\/li>\n<li>Click the &#8220;<b>Bake<\/b>&#8221; button to generate Normal map.<\/li>\n<li>Save the result to a loss-less format e.g. *.tga.<\/li>\n<\/ul>\n<p><a id=\"conclusion\" name=\"conclusion\"><\/a><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Conclusion\"><\/span>Conclusion<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Blenders internal render engine (&#8220;Blender Internal&#8221;) has long been used to bake various types of image map for meshes using the &#8220;<b>Texture Bake<\/b>&#8221; system. Although there are one or two disadvantages to Blender Render (some of which are mentioned above) its still a viable option providing consideration be given beforehand to issues that might occur. One important point to note however is that Blender Internal is no longer being actively developed or support beyond critical bug fixes as Blender Foundation focus is on <a title=\"Bake Normal maps with Blenders &quot;Cycles Render&quot;\" href=\"https:\/\/www.katsbits.com\/site\/cycles-bake-normal-maps\/\" target=\"_self\" rel=\"noopener\">Cycles Render<\/a>.<\/p>\n<p><a id=\"video\" name=\"video\"><\/a><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Video\"><\/span>Video<span class=\"ez-toc-section-end\"><\/span><\/h3>\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\/vF1pCAfuyvk?rel=0\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/center><\/div>\n<p><em>The video below shows the basic procedure discussed above.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":1091,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[14],"tags":[266,231,278,297,295,300,261,298,299,296,257,294,239,238,260],"class_list":["post-843","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorials","tag-anti-aliasing","tag-bake","tag-blender-2-7x","tag-cycles","tag-image-editor","tag-mesh-smoothing","tag-normal-maps","tag-render","tag-subdivision","tag-tessellation","tag-texture-bake","tag-un-unwrapping","tag-uv-editing","tag-uv-mapping","tag-uv-image-editor"],"post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/www.katsbits.com\/site\/wp-json\/wp\/v2\/posts\/843","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=843"}],"version-history":[{"count":3,"href":"https:\/\/www.katsbits.com\/site\/wp-json\/wp\/v2\/posts\/843\/revisions"}],"predecessor-version":[{"id":1095,"href":"https:\/\/www.katsbits.com\/site\/wp-json\/wp\/v2\/posts\/843\/revisions\/1095"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.katsbits.com\/site\/wp-json\/wp\/v2\/media\/1091"}],"wp:attachment":[{"href":"https:\/\/www.katsbits.com\/site\/wp-json\/wp\/v2\/media?parent=843"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.katsbits.com\/site\/wp-json\/wp\/v2\/categories?post=843"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.katsbits.com\/site\/wp-json\/wp\/v2\/tags?post=843"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}