# Table of Contents - [Common Settings - normalMagic](#common-settings-normalmagic) - [Examples - normalMagic](#examples-normalmagic) - [Licensing - normalMagic](#licensing-normalmagic) - [Tools Overview - normalMagic](#tools-overview-normalmagic) - [Pro Add-on - normalMagic](#pro-add-on-normalmagic) - [Troubleshooting - normalMagic](#troubleshooting-normalmagic) - [Instance Objects - normalMagic](#instance-objects-normalmagic) - [Modifier References - normalMagic](#modifier-references-normalmagic) - [Modifier Header - normalMagic](#modifier-header-normalmagic) - [Modifier Defaults - normalMagic](#modifier-defaults-normalmagic) - [Object Display - normalMagic](#object-display-normalmagic) - [Preferences - normalMagic](#preferences-normalmagic) - [Recalculate Normals - normalMagic](#recalculate-normals-normalmagic) - [Manual Tools - normalMagic](#manual-tools-normalmagic) - [Surface Integration - normalMagic](#surface-integration-normalmagic) - [Boolean Extrude - normalMagic](#boolean-extrude-normalmagic) - [Boolean Pro - normalMagic](#boolean-pro-normalmagic) - [Cut Groove - normalMagic](#cut-groove-normalmagic) - [Offset Surface - normalMagic](#offset-surface-normalmagic) - [Mesh Modifiers - normalMagic](#mesh-modifiers-normalmagic) - [Surface Project - normalMagic](#surface-project-normalmagic) - [Boolean Trim - normalMagic](#boolean-trim-normalmagic) - [Solidify Pro - normalMagic](#solidify-pro-normalmagic) - [Project to Surface - normalMagic](#project-to-surface-normalmagic) - [Symmetrize - normalMagic](#symmetrize-normalmagic) - [Add Custom Normals - normalMagic](#add-custom-normals-normalmagic) - [Normal Modifiers - normalMagic](#normal-modifiers-normalmagic) - [Boolean Pro - normalMagic](#boolean-pro-normalmagic) - [Bent Normals - normalMagic](#bent-normals-normalmagic) - [Face Weighted Normals - normalMagic](#face-weighted-normals-normalmagic) - [Lock Normals - normalMagic](#lock-normals-normalmagic) - [Normal Transfer - normalMagic](#normal-transfer-normalmagic) - [Repair Mirrored Normals - normalMagic](#repair-mirrored-normals-normalmagic) - [Repair Boolean Normals - normalMagic](#repair-boolean-normals-normalmagic) - [Smooth Normals - normalMagic](#smooth-normals-normalmagic) - [Repair Bevel Normals - normalMagic](#repair-bevel-normals-normalmagic) - [Other Modifiers - normalMagic](#other-modifiers-normalmagic) - [Auto-Flip Faces - normalMagic](#auto-flip-faces-normalmagic) - [Instance Object - normalMagic](#instance-object-normalmagic) - [Change Materials - normalMagic](#change-materials-normalmagic) - [Mark Sharp - normalMagic](#mark-sharp-normalmagic) - [Sharp Edges to Attribute - normalMagic](#sharp-edges-to-attribute-normalmagic) - [Visualize Modifiers - normalMagic](#visualize-modifiers-normalmagic) - [View Normals - normalMagic](#view-normals-normalmagic) - [View Sharp - normalMagic](#view-sharp-normalmagic) - [normalMagic 2.0 - normalMagic](#normalmagic-2-0-normalmagic) - [Changelog - normalMagic](#changelog-normalmagic) - [Install - normalMagic](#install-normalmagic) - [Surface Insert - normalMagic](#surface-insert-normalmagic) - [normalMagic](#normalmagic) - [normalMagic](#normalmagic) - [normalMagic 2.0 - normalMagic](#normalmagic-2-0-normalmagic) - [Tools Overview - normalMagic](#tools-overview-normalmagic) - [Licensing - normalMagic](#licensing-normalmagic) - [Boolean Pro - normalMagic](#boolean-pro-normalmagic) - [Surface Project - normalMagic](#surface-project-normalmagic) - [Mesh Modifiers - normalMagic](#mesh-modifiers-normalmagic) - [Examples - normalMagic](#examples-normalmagic) - [Common Settings - normalMagic](#common-settings-normalmagic) - [Normal Modifiers - normalMagic](#normal-modifiers-normalmagic) - [Normal Transfer - normalMagic](#normal-transfer-normalmagic) - [Tools Overview - normalMagic](#tools-overview-normalmagic) - [Smooth Normals - normalMagic](#smooth-normals-normalmagic) - [Install - normalMagic](#install-normalmagic) - [Common Settings - normalMagic](#common-settings-normalmagic) - [Surface Insert - normalMagic](#surface-insert-normalmagic) - [Install - normalMagic](#install-normalmagic) - [Face Weighted Normals - normalMagic](#face-weighted-normals-normalmagic) - [Bent Normals - normalMagic](#bent-normals-normalmagic) - [Examples - normalMagic](#examples-normalmagic) - [Repair Bevel Normals - normalMagic](#repair-bevel-normals-normalmagic) - [Changelog - normalMagic](#changelog-normalmagic) - [Repair Boolean Normals - normalMagic](#repair-boolean-normals-normalmagic) - [Tools Overview πŸ— - normalMagic](#tools-overview-normalmagic) - [Licensing - normalMagic](#licensing-normalmagic) - [Common Settings πŸ— - normalMagic](#common-settings-normalmagic) - [Install ⚠ - normalMagic](#install-normalmagic) - [Examples πŸ— - normalMagic](#examples-normalmagic) - [Mesh Modifiers - normalMagic](#mesh-modifiers-normalmagic) - [Surface Blend ⚠ - normalMagic](#surface-blend-normalmagic) - [Boolean Pro πŸ— - normalMagic](#boolean-pro-normalmagic) - [Manual Tools - normalMagic](#manual-tools-normalmagic) - [Recalculate Normals ⚠ - normalMagic](#recalculate-normals-normalmagic) - [Sharp Edges to Attribute ⚠ - normalMagic](#sharp-edges-to-attribute-normalmagic) - [Normal Transfer ⚠ - normalMagic](#normal-transfer-normalmagic) - [Normal Modifiers - normalMagic](#normal-modifiers-normalmagic) - [Smooth Normals ⚠ - normalMagic](#smooth-normals-normalmagic) - [Bent Normals ⚠ - normalMagic](#bent-normals-normalmagic) - [Repair Mirrored Normals - normalMagic](#repair-mirrored-normals-normalmagic) - [View Normals ⚠ - normalMagic](#view-normals-normalmagic) - [Visualize Modifiers - normalMagic](#visualize-modifiers-normalmagic) - [View Sharp ⚠ - normalMagic](#view-sharp-normalmagic) - [Other Modifiers ⚠ - normalMagic](#other-modifiers-normalmagic) - [Instance Object ⚠ - normalMagic](#instance-object-normalmagic) - [Repair Mirrored Normals - normalMagic](#repair-mirrored-normals-normalmagic) - [Weighted Normals ⚠ - normalMagic](#weighted-normals-normalmagic) - [Repair Bevel Normals - normalMagic](#repair-bevel-normals-normalmagic) - [Repair Boolean Normals πŸ— - normalMagic](#repair-boolean-normals-normalmagic) - [normalMagic Add-on - normalMagic](#normalmagic-add-on-normalmagic) - [Auto-Flip Faces - normalMagic](#auto-flip-faces-normalmagic) - [Mark Sharp - normalMagic](#mark-sharp-normalmagic) - [Boolean Pro ⚠ - normalMagic](#boolean-pro-normalmagic) - [Visualize Modifiers - normalMagic](#visualize-modifiers-normalmagic) - [Surface Insert πŸ— - normalMagic](#surface-insert-normalmagic) - [Recalculate Weighted - normalMagic](#recalculate-weighted-normalmagic) - [View Normals - normalMagic](#view-normals-normalmagic) - [Manual Tools - normalMagic](#manual-tools-normalmagic) - [Preferences - normalMagic](#preferences-normalmagic) - [Other Modifiers - normalMagic](#other-modifiers-normalmagic) - [View Sharp - normalMagic](#view-sharp-normalmagic) - [Instance Object - normalMagic](#instance-object-normalmagic) - [Mark Sharp - normalMagic](#mark-sharp-normalmagic) - [Instance Objects - normalMagic](#instance-objects-normalmagic) - [Auto-Flip Faces - normalMagic](#auto-flip-faces-normalmagic) - [Sharp Edges to Attribute - normalMagic](#sharp-edges-to-attribute-normalmagic) - [Boolean Pro - normalMagic](#boolean-pro-normalmagic) - [normalMagic Add-on - normalMagic](#normalmagic-add-on-normalmagic) - [Mesh Modifiers - normalMagic](#mesh-modifiers-normalmagic) - [normalMagic](#normalmagic) - [normalMagic](#normalmagic) - [Boolean Pro - normalMagic](#boolean-pro-normalmagic) - [Normal Modifiers - normalMagic](#normal-modifiers-normalmagic) - [Visualize Modifiers - normalMagic](#visualize-modifiers-normalmagic) - [Other Modifiers - normalMagic](#other-modifiers-normalmagic) - [Manual Tools - normalMagic](#manual-tools-normalmagic) - [Surface Project - normalMagic](#surface-project-normalmagic) - [Lock Normals - normalMagic](#lock-normals-normalmagic) - [View Sharp - normalMagic](#view-sharp-normalmagic) - [Mark Sharp - normalMagic](#mark-sharp-normalmagic) - [Add Custom Normals - normalMagic](#add-custom-normals-normalmagic) - [Auto-Flip Faces - normalMagic](#auto-flip-faces-normalmagic) - [Preferences - normalMagic](#preferences-normalmagic) - [Smooth Normals - normalMagic](#smooth-normals-normalmagic) - [Symmetrize - normalMagic](#symmetrize-normalmagic) - [Normal Transfer - normalMagic](#normal-transfer-normalmagic) - [Face Weighted Normals - normalMagic](#face-weighted-normals-normalmagic) - [Repair Bevel Normals - normalMagic](#repair-bevel-normals-normalmagic) - [Bent Normals - normalMagic](#bent-normals-normalmagic) - [Repair Boolean Normals - normalMagic](#repair-boolean-normals-normalmagic) - [Repair Mirrored Normals - normalMagic](#repair-mirrored-normals-normalmagic) - [View Normals - normalMagic](#view-normals-normalmagic) - [Instance Object - normalMagic](#instance-object-normalmagic) - [Sharp Edges to Attribute - normalMagic](#sharp-edges-to-attribute-normalmagic) - [Recalculate Weighted - normalMagic](#recalculate-weighted-normalmagic) - [Change Materials - normalMagic](#change-materials-normalmagic) - [Instance Objects - normalMagic](#instance-objects-normalmagic) - [Boolean Pro - normalMagic](#boolean-pro-normalmagic) - [normalMagic Add-on - normalMagic](#normalmagic-add-on-normalmagic) - [Surface Insert - normalMagic](#surface-insert-normalmagic) - [normalMagic](#normalmagic) - [normalMagic](#normalmagic) - [normalMagic](#normalmagic) - [normalMagic](#normalmagic) - [normalMagic](#normalmagic) - [normalMagic](#normalmagic) - [normalMagic](#normalmagic) - [normalMagic](#normalmagic) - [normalMagic](#normalmagic) - [normalMagic](#normalmagic) - [normalMagic](#normalmagic) - [normalMagic](#normalmagic) - [normalMagic](#normalmagic) - [normalMagic](#normalmagic) - [normalMagic](#normalmagic) - [normalMagic](#normalmagic) - [normalMagic](#normalmagic) - [normalMagic](#normalmagic) --- # Common Settings - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/2.0/common_settings/#common-settings) Common Settings[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/common_settings/#common-settings "Permanent link") ===================================================================================================================== Many tools share common options. They are listed on this page for reference. * [Mask Falloff](https://spaghetmenot.github.io/normalmagic/2.0/common_settings/#mask-falloff) * [Selection](https://spaghetmenot.github.io/normalmagic/2.0/common_settings/#selection) * [Even Thickness](https://spaghetmenot.github.io/normalmagic/2.0/common_settings/#even-thickness) * * * Mask Falloff[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/common_settings/#mask-falloff "Permanent link") --------------------------------------------------------------------------------------------------------------- When two sets of data blend together there are often falloff controls. These can be found across normalMagic in tools such as [Normal Transfer](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/normal_transfer/) , [Surface Insert](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/surface_insert/) and [Surface Project](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/surface_project/) . ### Masking Type[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/common_settings/#masking-type "Permanent link") #### Boundary Edge Expand[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/common_settings/#boundary-edge-expand "Permanent link") Select vertices on the boundary edge and expand selection inwards with a linear falloff. * **Expand Iterations:** How many iterations to expand mask inwards. [![Expand Boundary](https://spaghetmenot.github.io/normalmagic/2.0/assets/selection/expand_boundary.gif)](https://spaghetmenot.github.io/normalmagic/2.0/assets/selection/expand_boundary.gif) #### Boundary Edge Distance[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/common_settings/#boundary-edge-distance "Permanent link") Select vertices based on their distance to a boundary edge with a linear falloff. * **Start Distance:** Distance at which vertices will get a value of 1. * **End Distance:** Distance at which vertices will get a value of 0. [![Boundary Distance](https://spaghetmenot.github.io/normalmagic/2.0/assets/selection/boundary_distance.gif)](https://spaghetmenot.github.io/normalmagic/2.0/assets/selection/boundary_distance.gif) #### Surface Distance[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/common_settings/#surface-distance "Permanent link") Select vertices based on their distance to the target geometry. * **Start Distance:** Distance at which vertices will get a value of 1. * **End Distance:** Distance at which vertices will get a value of 0. [![Target Distance](https://spaghetmenot.github.io/normalmagic/2.0/assets/selection/surface_falloff.gif)](https://spaghetmenot.github.io/normalmagic/2.0/assets/selection/surface_falloff.gif) ### Base Falloff[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/common_settings/#base-falloff "Permanent link") The falloff used for values between 0-1. Here it is being used in [Surface Project](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/surface_project/) : [![Base Falloff](https://spaghetmenot.github.io/normalmagic/2.0/assets/selection/base_falloff.gif)](https://spaghetmenot.github.io/normalmagic/2.0/assets/selection/base_falloff.gif) ### Falloff Curve[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/common_settings/#falloff-curve "Permanent link") Bias the selection towards 1. Here it is being used in [Surface Project](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/surface_project/) : [![Falloff Curve](https://spaghetmenot.github.io/normalmagic/2.0/assets/selection/falloff_curve.gif)](https://spaghetmenot.github.io/normalmagic/2.0/assets/selection/falloff_curve.gif) * * * Selection[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/common_settings/#selection "Permanent link") --------------------------------------------------------------------------------------------------------- Often we'll want to limit the effects of modifiers to certain areas. The "Selection" section is the same for many tools. It allows for partial selection and, when normals are stored on face corners, hard boundaries. * **Vertex Group:** Specify a vertex group to limit modifier's effect. * **Face Group (Face Corner Selection Only):** Specify a vertex group that will have hard boundaries. * **Material:** Limit the modifier's effect to a specific material. * **Invert:** Invert selection. Here we can see how **Vertex Group** and **Face Group** can be combined: [![Selection Demo](https://spaghetmenot.github.io/normalmagic/2.0/assets/selection/selection.gif)](https://spaghetmenot.github.io/normalmagic/2.0/assets/selection/selection.gif) * * * Even Thickness[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/common_settings/#even-thickness "Permanent link") ------------------------------------------------------------------------------------------------------------------- Many operations involve offsetting the surface of a mesh. These settings will determine how the offset is calculated. * [![offset_even](https://spaghetmenot.github.io/normalmagic/2.0/assets/offset_even/offset_even.gif)](https://spaghetmenot.github.io/normalmagic/2.0/assets/offset_even/offset_even.gif) * * **None:** Points are offset the same distance regardless of face angles. * **Simple:** Distance of offset is limited to attempt even thickness with neighboring faces. * **Constraints:** Distance of offset is projected to attempt even thickness with neighboring faces. ### Constraints Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/common_settings/#constraints-options "Permanent link") * **Clamp Multiplier:** Limit offset distance to a multiple of specified distance. This keeps "explosion error" limited. * **Boundary:** How to offset points on the mesh boundary: * **Normal:** No change in offset direction. * **Flat:** Flatten the offset direction at mesh boundaries. * **Boundary Angle:** Make offset perpendicular to angle of boundary edges. This exposes a setting for how many edges to check to gain an average boundary angle. See the "Constraint Boundary Shape" Solidify Pro example in the [examples file](https://spaghetmenot.github.io/normalmagic/2.0/examples/#solidify-pro) . [![boundary_shape](https://spaghetmenot.github.io/normalmagic/2.0/assets/offset_even/boundary_shape.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/offset_even/boundary_shape.png) . --- # Examples - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/2.0/examples/#examples) Examples[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/examples/#examples "Permanent link") ================================================================================================ Example Scenes[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/examples/#example-scenes "Permanent link") ------------------------------------------------------------------------------------------------------------ Examples for all tools can be found in the "Examples" file, available as a separate download on the store page: **_normalMagic \[version\] Examples.blend_** This file contains several scenes, each showing different categories of tools. [![Scene Selector](https://spaghetmenot.github.io/normalmagic/2.0/assets/examples/scene_selector.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/examples/scene_selector.png) Boolean Pro[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/examples/#boolean-pro "Permanent link") ------------------------------------------------------------------------------------------------------ Examples for [Boolean Pro](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_pro/) and [Repair Boolean Normals](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/repair_boolean_normals/) . [![booleans](https://spaghetmenot.github.io/normalmagic/2.0/assets/examples/booleans.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/examples/booleans.png) Boolean Extrude/Trim[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/examples/#boolean-extrudetrim "Permanent link") ----------------------------------------------------------------------------------------------------------------------- Examples for [Boolean Extrude](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_extrude/) and [Boolean Trim](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_trim/) . [![boolean_extrude_trim](https://spaghetmenot.github.io/normalmagic/2.0/assets/examples/boolean_extrude_trim.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/examples/boolean_extrude_trim.png) Cut Groove[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/examples/#cut-groove "Permanent link") ---------------------------------------------------------------------------------------------------- Examples for [Cut Groove](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/cut_groove/) . [![cut groove](https://spaghetmenot.github.io/normalmagic/2.0/assets/examples/cut_groove.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/examples/cut_groove.png) Solidify Pro[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/examples/#solidify-pro "Permanent link") -------------------------------------------------------------------------------------------------------- Examples for [Solidify Pro](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/solidify_pro/) . [![solidify_pro](https://spaghetmenot.github.io/normalmagic/2.0/assets/examples/solidify_pro.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/examples/solidify_pro.png) Surface Insert / Project to Surface[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/examples/#surface-insert-project-to-surface "Permanent link") ---------------------------------------------------------------------------------------------------------------------------------------------------- Examples for various uses of [Surface Insert](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/surface_insert/) and [Project to Surface](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/project_to_surface/) . [![surface_project_insert](https://spaghetmenot.github.io/normalmagic/2.0/assets/examples/surface_project_insert.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/examples/surface_project_insert.png) Normal Modifiers[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/examples/#normal-modifiers "Permanent link") ---------------------------------------------------------------------------------------------------------------- Examples for normal modifiers in use: [Repair Bevel Normals](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/repair_bevel_normals/) , [Bent Normals](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/bent_normals/) , [Face Weighted Normals](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/face_weighted_normals/) , [Repair Mirrored Normals](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/repair_mirrored_normals/) , [Normal Transfer](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/normal_transfer/) . [![normal_modifiers](https://spaghetmenot.github.io/normalmagic/2.0/assets/examples/normal_modifiers.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/examples/normal_modifiers.png) Other Modifiers[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/examples/#other-modifiers "Permanent link") -------------------------------------------------------------------------------------------------------------- Examples for "other" modifiers in use: [Mark Sharp](https://spaghetmenot.github.io/normalmagic/2.0/other_tools/mark_sharp/) , [Auto-Flip Faces](https://spaghetmenot.github.io/normalmagic/2.0/other_tools/auto-flip_faces/) , [Instance Object](https://spaghetmenot.github.io/normalmagic/2.0/other_tools/instance_object/) . [![other_modifiers](https://spaghetmenot.github.io/normalmagic/2.0/assets/examples/other_modifiers.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/examples/other_modifiers.png) Smooth Normals[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/examples/#smooth-normals "Permanent link") ------------------------------------------------------------------------------------------------------------ Examples for various uses of [Smooth Normals](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/smooth_normals/) . [![smooth_normals](https://spaghetmenot.github.io/normalmagic/2.0/assets/examples/smooth_normals.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/examples/smooth_normals.png) Visualize Modifiers[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/examples/#visualize-modifiers "Permanent link") ---------------------------------------------------------------------------------------------------------------------- Examples for [View Normals](https://spaghetmenot.github.io/normalmagic/2.0/visualize_tools/view_normals/) and [View Sharp](https://spaghetmenot.github.io/normalmagic/2.0/visualize_tools/view_sharp/) . [![view_modifiers](https://spaghetmenot.github.io/normalmagic/2.0/assets/examples/view_modifiers.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/examples/view_modifiers.png) Workflows 1[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/examples/#workflows-1 "Permanent link") ------------------------------------------------------------------------------------------------------ Examples for creating panels/panel lines using normalMagic modifiers. More examples are covered in [Workflows 2](https://spaghetmenot.github.io/normalmagic/2.0/examples/#workflows-2) . [![panel_methods](https://spaghetmenot.github.io/normalmagic/2.0/assets/examples/panel_methods.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/examples/panel_methods.png) Workflows 2[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/examples/#workflows-2 "Permanent link") ------------------------------------------------------------------------------------------------------ Three approaches to a non-destructive canopy and example of how to offset cutters. [![workflows_1](https://spaghetmenot.github.io/normalmagic/2.0/assets/examples/workflow_1.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/examples/workflow_1.png) --- # Licensing - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/2.0/licensing/#licensing) Licensing[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/licensing/#licensing "Permanent link") =================================================================================================== Individual Licenses[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/licensing/#individual-licenses "Permanent link") ----------------------------------------------------------------------------------------------------------------------- For an individual purchasing normalMagic, licenses are as follows: * Base Version (Asset Library Only): [Standard Royalty Free License](https://spaghetmenot.github.io/normalmagic/2.0/licensing/#standard-royalty-free-license) . * Pro Version: * Add-on Python Code: [GNU General Public License](https://www.gnu.org/licenses/gpl-3.0.html) . * Asset Library: [Standard Royalty Free License](https://spaghetmenot.github.io/normalmagic/2.0/licensing/#standard-royalty-free-license) . Team / Studio Licenses[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/licensing/#team-studio-licenses "Permanent link") --------------------------------------------------------------------------------------------------------------------------- For teams/studios the number of people that use normalMagic is limited by the version purchased. The following team sizes are available: * Small Studio: up to 9 users. * Large Studio: 10-20 users. For teams that exceed 20 users, additional licenses should be purchased. This only applies to the asset library's [Standard Royalty Free License](https://spaghetmenot.github.io/normalmagic/2.0/licensing/#standard-royalty-free-license) . The licensing is as follows: * Asset Library: [Standard Royalty Free License](https://spaghetmenot.github.io/normalmagic/2.0/licensing/#standard-royalty-free-license) . * Add-on Python Code: [GNU General Public License](https://www.gnu.org/licenses/gpl-3.0.html) . Early Access Customers For Studios that bought early access copies: individual licenses can be transferred into a studio license per request. This will discount the studio license by the price paid for each individual license. Enterprise License[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/licensing/#enterprise-license "Permanent link") --------------------------------------------------------------------------------------------------------------------- For unlimited users across a large organization please reach out via email: spaghetmenot@gmail.com Standard Royalty Free License[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/licensing/#standard-royalty-free-license "Permanent link") ------------------------------------------------------------------------------------------------------------------------------------------- The Standard Royalty Free license grants you, the purchaser, the ability to make use of the purchased product for personal, educational, or commercial purposes as long as those purposes do not violate the following: * You may not resell, redistribute, or repackage the purchased product without explicit permission from the original author. GNU General Public License[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/licensing/#gnu-general-public-license "Permanent link") ------------------------------------------------------------------------------------------------------------------------------------- Please find the GNU/GPL license here: [https://www.gnu.org/licenses/gpl-3.0.html](https://www.gnu.org/licenses/gpl-3.0.html) . --- # Tools Overview - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/2.0/tools_overview/#tools-overview) Tools Overview[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/tools_overview/#tools-overview "Permanent link") ================================================================================================================== Custom Normals Most of these tools create or edit **_custom normals_**. These can be unintuitive to work with if you're unfamiliar with them. Once custom normals exist on a mesh, some default Blender tools/modifiers might not behave as expected. Tools are included to fix situations such as [mirroring](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/repair_mirrored_normals/) or [beveling](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/repair_bevel_normals/) but it is something to be aware of. Asset Library[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/tools_overview/#asset-library "Permanent link") ---------------------------------------------------------------------------------------------------------------- The core of normalMagic is an asset library. You will find links to all the tools in the sidebar under the following categories: * [Mesh Modifiers](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/) * [Normal Modifiers](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/) * [Visualize Modifiers](https://spaghetmenot.github.io/normalmagic/2.0/visualize_tools/) * [Other Modifiers](https://spaghetmenot.github.io/normalmagic/2.0/other_tools/) * [Manual Tools](https://spaghetmenot.github.io/normalmagic/2.0/manual_tools/) Add-on[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/tools_overview/#add-on "Permanent link") -------------------------------------------------------------------------------------------------- Included with the Pro version, the add-on makes it easier to set up some of the modifiers. [Add-on Documentation](https://spaghetmenot.github.io/normalmagic/2.0/add-on/) --- # Pro Add-on - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/2.0/add-on/#pro-add-on) Pro Add-on[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/add-on/#pro-add-on "Permanent link") ================================================================================================== This add-on is included with the **Pro** version of normalMagic. It streamlines workflows and makes working with certain modifiers easier. * [Install Add-on](https://spaghetmenot.github.io/normalmagic/2.0/install/#pro-version-add-on) * [Preferences](https://spaghetmenot.github.io/normalmagic/2.0/add-on/preferences/) * [Boolean Pro](https://spaghetmenot.github.io/normalmagic/2.0/add-on/boolean_pro/) * * * [![bpro panel](https://spaghetmenot.github.io/normalmagic/2.0/assets/add-on/bpro_panel.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/add-on/bpro_panel.png) Set up Boolean modifiers with one click: * [Boolean Pro](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_pro/) * [Boolean Extrude](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_extrude/) * [Boolean Trim](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_trim/) * [Cut Groove](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/cut_groove/) * [Modifier References](https://spaghetmenot.github.io/normalmagic/2.0/add-on/modifier_references/) * * * [![modifier reference panel](https://spaghetmenot.github.io/normalmagic/2.0/assets/add-on/modifier_reference_panel.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/add-on/modifier_reference_panel.png) Manage complex non-destructive scenes with many cutters, inserts, and other objects referenced by modifiers. * [Surface Integration](https://spaghetmenot.github.io/normalmagic/2.0/add-on/surface_integration/) * * * [![surface integration](https://spaghetmenot.github.io/normalmagic/2.0/assets/add-on/surface_integration.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/add-on/surface_integration.png) Set up modifiers with one click: * [Surface Insert](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/surface_insert/) * [Project to Surface](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/project_to_surface/) * [Instance Objects](https://spaghetmenot.github.io/normalmagic/2.0/add-on/instance_objects/) * * * [![instance panel](https://spaghetmenot.github.io/normalmagic/2.0/assets/add-on/instance_panel.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/add-on/instance_panel.png) Duplicate objects as instances using the [Instance Object](https://spaghetmenot.github.io/normalmagic/2.0/other_tools/instance_object/) modifier with one click. * [Object Display](https://spaghetmenot.github.io/normalmagic/2.0/add-on/object_display/) * * * [![object display panel](https://spaghetmenot.github.io/normalmagic/2.0/assets/add-on/object_display_panel.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/add-on/object_display_panel.png) Instantly make objects "Viewport Only", hiding them from all renders. --- # Troubleshooting - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/2.0/troubleshooting/#troubleshooting) Troubleshooting[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/troubleshooting/#troubleshooting "Permanent link") ===================================================================================================================== Normals broken? Meshes exploding? Nothing happening? Here are some things to try Custom Normals and "Auto Smooth"[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/troubleshooting/#custom-normals-and-auto-smooth "Permanent link") ----------------------------------------------------------------------------------------------------------------------------------------------------- Using "Shade Auto Smooth" in Blender --- # Instance Objects - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/2.0/add-on/instance_objects/#instance-objects) Instance Objects[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/add-on/instance_objects/#instance-objects "Permanent link") =============================================================================================================================== [![instance panel](https://spaghetmenot.github.io/normalmagic/2.0/assets/add-on/instance_panel.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/add-on/instance_panel.png) These tools make it easier to use the [Instance Object](https://spaghetmenot.github.io/normalmagic/2.0/other_tools/instance_object/) modifier. Duplicate Instanced[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/add-on/instance_objects/#duplicate-instanced "Permanent link") ------------------------------------------------------------------------------------------------------------------------------------- This operator that acts like Blender's built-in [Duplicate Linked](https://docs.blender.org/manual/en/latest/scene_layout/object/editing/duplicate_linked.html) but also copies the results of all modifiers: [![duplicate instanced](https://spaghetmenot.github.io/normalmagic/2.0/assets/add-on/duplicate_instanced.gif)](https://spaghetmenot.github.io/normalmagic/2.0/assets/add-on/duplicate_instanced.gif) The **instanced** object can be duplicated with any existing methods e.g. Shift+D and will keep the same behavior. Using this operator on an object that already is using a "Instance Object" as it's last modifier will instance the original object to keep things simple. ### What it does[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/add-on/instance_objects/#what-it-does "Permanent link") For each selected object: 1. Create a new object with the same mesh data as selected object. This is so you can still enter "Edit Mode" on the instance. 2. Add [Instance Object](https://spaghetmenot.github.io/normalmagic/2.0/other_tools/instance_object/) modifier and specify selected object. 3. Select instance object and deselect original. Select Source[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/add-on/instance_objects/#select-source "Permanent link") ------------------------------------------------------------------------------------------------------------------------- Selects the source object(s) being instanced by selected object(s). This is useful when you wish to edit the mesh or change modifiers on the original object. --- # Modifier References - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/2.0/add-on/modifier_references/#modifier-references) Modifier References[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/add-on/modifier_references/#modifier-references "Permanent link") ======================================================================================================================================== Use this panel to manage complex non-destructive scenes with many cutters, inserts, or other objects referenced by modifiers. Active Object This panel shows modifiers for the **active object** only i.e. modifiers that show up in Blender's modifiers panel. [![Modifier Reference Panel](https://spaghetmenot.github.io/normalmagic/2.0/assets/add-on/modifier_reference_panel.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/add-on/modifier_reference_panel.png) Instantly select, show or hide objects that are referenced by the active object's modifiers. UI Breakdown[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/add-on/modifier_references/#ui-breakdown "Permanent link") -------------------------------------------------------------------------------------------------------------------------- The main list displays every modifier on the active object that references other objects. Selecting a modifier will also select it in the object's modifier panel and display it's individual references below. * [![Modifier Reference Panel Annotated](https://spaghetmenot.github.io/normalmagic/2.0/assets/add-on/modifier_reference_panel_annotated.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/add-on/modifier_reference_panel_annotated.png) * **1.** **Hide/Show All:** Hide or show all referenced objects for the active object. Filter the modifier list below. **2.** **Modifier List:** Each entry here is a modifier on the active object: \- **Toggle** modifier \- **Show/Hide** referenced objects \- **Select/Deselect** referenced objects **3.** **Modifier Defaults:** Set the default settings for the highlighted modifier. See [here](https://spaghetmenot.github.io/normalmagic/2.0/add-on/modifier_defaults/) for more information. **4.** **Apply/Remove Modifier:** Apply or remove the highlighted modifier with an option to delete referenced objects. **5.** **Referenced Objects:** Displays referenced objects, you can rename them here. --- # Modifier Header - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/2.0/add-on/modifier_header/#modifier-header) Modifier Header[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/add-on/modifier_header/#modifier-header "Permanent link") ============================================================================================================================ [![modifier header](https://spaghetmenot.github.io/normalmagic/2.0/assets/add-on/modifier_header.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/add-on/modifier_header.png) The optional modifier header bar gives quick access to several normalMagic features without using the sidebar. From left to right: ### Expand Arrow[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/add-on/modifier_header/#expand-arrow "Permanent link") Show the [Modifier References](https://spaghetmenot.github.io/normalmagic/2.0/add-on/modifier_references/) panel below. ### Operators Bar[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/add-on/modifier_header/#operators-bar "Permanent link") A row of buttons for quickly adding normalMagic operators. These can configured in [preferences](https://spaghetmenot.github.io/normalmagic/2.0/add-on/preferences/) . All of these allow for multi-object selection, for assigning cutters for example. ### Modifier Defaults[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/add-on/modifier_header/#modifier-defaults "Permanent link") Saves all the settings for the active modifier. This will be used any time a modifier of the same type is added via the add-on. See [here](https://spaghetmenot.github.io/normalmagic/2.0/add-on/modifier_defaults/) for more info. --- # Modifier Defaults - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/2.0/add-on/modifier_defaults/#modifier-defaults) Modifier Defaults[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/add-on/modifier_defaults/#modifier-defaults "Permanent link") ================================================================================================================================== You can save default settings for any modifier added via normalMagic operators. Note This will have no effect on modifiers added through the "Add Modifier" menu. This is achieved through the **Modifier Defaults** menu, available in the [Modifier Header](https://spaghetmenot.github.io/normalmagic/2.0/add-on/modifier_header/) bar and the [Modifier References](https://spaghetmenot.github.io/normalmagic/2.0/add-on/modifier_references/) panel. [![modifier defaults locations](https://spaghetmenot.github.io/normalmagic/2.0/assets/add-on/modifier_defaults.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/add-on/modifier_defaults.png) --- # Object Display - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/2.0/add-on/object_display/#object-display) Object Display[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/add-on/object_display/#object-display "Permanent link") ========================================================================================================================= [![Object Display Panel](https://spaghetmenot.github.io/normalmagic/2.0/assets/add-on/object_display_panel.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/add-on/object_display_panel.png) This panel helps manage object's visibility. Assigning a mesh as **_Viewport Only_** will hide it from all renders but keep it visible in the viewport. This is particularly useful for objects referenced by [Mesh Modifiers](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/) such as [Surface Insert](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/surface_insert/) [![Object Display GIF](https://spaghetmenot.github.io/normalmagic/2.0/assets/add-on/object_display.gif)](https://spaghetmenot.github.io/normalmagic/2.0/assets/add-on/object_display.gif) Rendered[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/add-on/object_display/#rendered "Permanent link") ------------------------------------------------------------------------------------------------------------- Show object in renders and viewport. Applies default "visible" object properties. Display in viewport as either **Wire**, **Solid** (default), or **Textured**. Viewport Only[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/add-on/object_display/#viewport-only "Permanent link") ----------------------------------------------------------------------------------------------------------------------- Hides object from all renders but keeps it visible in the viewport. Display in viewport as either **Bounds**, **Wire** (default), or **Solid**. --- # Preferences - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/2.0/add-on/preferences/#preferences) Preferences[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/add-on/preferences/#preferences "Permanent link") ================================================================================================================ These options show up under **_Edit/Preferences/Add-ons/normalMagic_** UI Preferences[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/add-on/preferences/#ui-preferences "Permanent link") ---------------------------------------------------------------------------------------------------------------------- * **Show Sidebar Panel.** Enable/disable the add-on's sidebar panel. Expand to specify it's category (default is "Normal Magic") * **Show Modifier Header.** Enable/disable the [modifier header](https://spaghetmenot.github.io/normalmagic/2.0/add-on/modifier_header/) . Expand to choose which modifiers show in the quick bar. Preferred Smooth Modifier[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/add-on/preferences/#preferred-smooth-modifier "Permanent link") -------------------------------------------------------------------------------------------------------------------------------------------- Choose which smooth modifier gets added with Boolean Pro's cutter "Auto-Smooth" option. Asset Library[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/add-on/preferences/#asset-library "Permanent link") -------------------------------------------------------------------------------------------------------------------- Checks if asset library exists and lists the path. * **Automatic Install:** When no asset library is detected, install the asset library from the add-on (recommended). * **Refresh Asset Library Location:** When manually moving the asset library, detect the new path for the add-on to use. * **Enable Asset Library:** When a normalMagic asset library exists but is disabled, you can enable from here. --- # Recalculate Normals - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/2.0/manual_tools/recalculate_normals/#recalculate-normals) Recalculate Normals[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/manual_tools/recalculate_normals/#recalculate-normals "Permanent link") ============================================================================================================================================== [![recalculate_weighted](https://spaghetmenot.github.io/normalmagic/2.0/assets/icons/recalculate_normals.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/icons/recalculate_normals.png) Found in the **Mesh/Normals** alt + N menu in "Edit Mode". Calculated weighted normals and mark sharp for selected geometry. This is a tool version of the [Face Weighted Normals](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/face_weighted_normals/) and [Mark Sharp](https://spaghetmenot.github.io/normalmagic/2.0/other_tools/mark_sharp/) modifiers. --- # Manual Tools - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/2.0/manual_tools/#manual-tools) Manual Tools[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/manual_tools/#manual-tools "Permanent link") ============================================================================================================ These tools are available as destructive operations in "Edit" mode. There isn't much here yet, if you wish to see more modifiers become manual tools please reach out! * [Recalculate Normals](https://spaghetmenot.github.io/normalmagic/2.0/manual_tools/recalculate_normals/) * [Add Custom Normals](https://spaghetmenot.github.io/normalmagic/2.0/manual_tools/add_custom_normals/) --- # Surface Integration - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/2.0/add-on/surface_integration/#surface-integration) Surface Integration[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/add-on/surface_integration/#surface-integration "Permanent link") ======================================================================================================================================== [![surface_integration](https://spaghetmenot.github.io/normalmagic/2.0/assets/add-on/surface_integration.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/add-on/surface_integration.png) This panel contains operators to quickly add [Surface Insert](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/surface_insert/) and [Project to Surface](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/project_to_surface/) modifiers. Surface Insert[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/add-on/surface_integration/#surface-insert "Permanent link") ------------------------------------------------------------------------------------------------------------------------------ Add a [Surface Insert](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/surface_insert/) modifier to the active object. ### How to Use[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/add-on/surface_integration/#how-to-use "Permanent link") 1. (Optional) Select 1-6 insert meshes 2. Select surface mesh last 3. Press the Surface Insert button ### Insert mesh options[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/add-on/surface_integration/#insert-mesh-options "Permanent link") Similar to the Boolean [cutters](https://spaghetmenot.github.io/normalmagic/2.0/add-on/boolean_pro/#cutter-behavior) menu, there are options for what to do with insert meshes. [![insert_mesh_options](https://spaghetmenot.github.io/normalmagic/2.0/assets/add-on/insert_mesh_options.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/add-on/insert_mesh_options.png) Project to Surface[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/add-on/surface_integration/#project-to-surface "Permanent link") -------------------------------------------------------------------------------------------------------------------------------------- Add a [Project to Surface](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/project_to_surface/) modifier to all selected objects but the last selected. ### How to Use[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/add-on/surface_integration/#how-to-use_1 "Permanent link") 1. Select one or more objects you wish to project 2. Select the surface mesh last 3. Press the Project to Surface button ### Projection Mesh Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/add-on/surface_integration/#projection-mesh-options "Permanent link") Similar to the Boolean [cutters](https://spaghetmenot.github.io/normalmagic/2.0/add-on/boolean_pro/#cutter-behavior) menu, there are options for what to do with the projected meshes. [![projection_mesh_options](https://spaghetmenot.github.io/normalmagic/2.0/assets/add-on/project_to_surface_options.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/add-on/project_to_surface_options.png) Modifier Settings[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/add-on/surface_integration/#modifier-settings "Permanent link") ------------------------------------------------------------------------------------------------------------------------------------ To change default modifier settings for either modifier, see [modifier defaults](https://spaghetmenot.github.io/normalmagic/2.0/add-on/modifier_defaults/) . [![defaults](https://spaghetmenot.github.io/normalmagic/2.0/assets/add-on/modifer_defaults_generic.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/add-on/modifer_defaults_generic.png) --- # Boolean Extrude - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_extrude/#boolean-extrude) Boolean Extrude[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_extrude/#boolean-extrude "Permanent link") ================================================================================================================================ [![Boolean Extrude Icon](https://spaghetmenot.github.io/normalmagic/2.0/assets/icons/boolean_extrude_5.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/icons/boolean_extrude_5.png) Cuts and extrudes where cutter meshes intersect. Extrusion Operation[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_extrude/#extrusion-operation "Permanent link") ---------------------------------------------------------------------------------------------------------------------------------------- * #### **Emboss**[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_extrude/#emboss "Permanent link") [![emboss](https://spaghetmenot.github.io/normalmagic/2.0/assets/booleans/boolean_extrude_emboss.gif)](https://spaghetmenot.github.io/normalmagic/2.0/assets/booleans/boolean_extrude_emboss.gif) Slice mesh and extrude intersection faces in or out. * #### **Panel**[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_extrude/#panel "Permanent link") [![panel](https://spaghetmenot.github.io/normalmagic/2.0/assets/booleans/boolean_extrude_panel.gif)](https://spaghetmenot.github.io/normalmagic/2.0/assets/booleans/boolean_extrude_panel.gif) Perform an "Intersect" Boolean and extrude the result into a solid panel. Equal and Opposite These two operations are essentially the inverse of each other. Duplicating the object and using opposite operations with different outsets can create interesting effects. [![Boolean Extrude Combined](https://spaghetmenot.github.io/normalmagic/2.0/assets/booleans/bool_extrude_combined.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/booleans/bool_extrude_combined.png) Examples[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_extrude/#examples "Permanent link") ------------------------------------------------------------------------------------------------------------------ Please check out the [examples file](https://spaghetmenot.github.io/normalmagic/2.0/examples/) to see Boolean Extrude in action. [![bool_trim_examples](https://spaghetmenot.github.io/normalmagic/2.0/assets/examples/boolean_extrude_trim.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/examples/boolean_extrude_trim.png) Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_extrude/#options "Permanent link") ---------------------------------------------------------------------------------------------------------------- ### Cutters[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_extrude/#cutters "Permanent link") This section specifies which cutters to use. * **Objects/Collection:** Choose individual mesh objects or a collection containing mesh objects. * **Object Count:** How many cutter mesh objects to use (when in **_Objects_** mode). * **Cutter Outset:** Expands the cutter mesh with options for [even thickness](https://spaghetmenot.github.io/normalmagic/2.0/common_settings/#even-thickness) . ### Extrude[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_extrude/#extrude "Permanent link") Control the extrude operation. * **Operation:** Choose between Emboss/Panel operations: * **Emboss Surface:** Slice mesh and extrude intersection faces in or out. * **Panel:** Perform an "Intersect" Boolean and extrude the result into a solid panel. * **Amount:** Distance to extrude. * **Extrusion Method:** How to generate extrusion: * **Extrude Faces:** Extrude intersection area(s) along surface normal. The rim is a strip of quads perpendicular to original surface with options to inset the cut area. * **Offset Boolean:** Offset surface and cut with Boolean cutter(s). The rim is aligned to cutter(s) and there are no options to inset the cut area. * **Offset Even:** Use [even thickness](https://spaghetmenot.github.io/normalmagic/2.0/common_settings/#even-thickness) settings on extrusion. * **Boolean Solver:** Boolean solver to use internally. ### Inset[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_extrude/#inset "Permanent link") (**_Extrude Faces_** mode only). Inset the front of the extrude operation. * **Scale:** Scale extruded faces around their average position. * **Inset:** Inset extruded faces away from the extrusion boundary. * **Edge Falloff:** Falloff distance from the edge of the inset. Use to smooth errors at the edge of the inset. ### Normals[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_extrude/#normals "Permanent link") * **Transfer Normals:** Transfer normals from source geometry. Produces the best normals. * **Rim Sharp Angle:** Mark edges as sharp on the extrusion rim if they exceed this angle. ### Weld[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_extrude/#weld "Permanent link") Weld points by distance --- # Boolean Pro - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_pro/#boolean-pro) Boolean Pro[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_pro/#boolean-pro "Permanent link") ==================================================================================================================== [![Boolean Pro Icon](https://spaghetmenot.github.io/normalmagic/2.0/assets/icons/boolean_cut_7_sparkles.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/icons/boolean_cut_7_sparkles.png) Boolean Pro is designed to act as a replacement for Blender's built-in boolean modifier that provides extra functionality. For reference, documentation for Blender's built-in modifier can be found [here](https://docs.blender.org/manual/en/latest/modeling/modifiers/generate/booleans.html) . Add-on The [normalMagic Add-on](https://spaghetmenot.github.io/normalmagic/2.0/add-on/) includes operators to quickly set up the Boolean Pro modifier, similar to the Bool Tool add-on. The most powerful feature is transferring the normals automatically from boolean inputs for perfect boolean normals: [![Perfect Boolean Normals](https://spaghetmenot.github.io/normalmagic/2.0/assets/bool_pro_1.gif)](https://spaghetmenot.github.io/normalmagic/2.0/assets/bool_pro_1.gif) The cutter object can be given an outset (expanded) with even thickness before cutting: [![Expand Boolean](https://spaghetmenot.github.io/normalmagic/2.0/assets/booleans/bool_expand.gif)](https://spaghetmenot.github.io/normalmagic/2.0/assets/booleans/bool_expand.gif) There is also a **_Slice_** operation with optional inset: | Intersect | Union | Difference | Slice | | --- | --- | --- | --- | | [![Intersect](https://spaghetmenot.github.io/normalmagic/2.0/assets/booleans/bool_intersect.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/booleans/bool_intersect.png) | [![Union](https://spaghetmenot.github.io/normalmagic/2.0/assets/booleans/bool_union.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/booleans/bool_union.png) | [![Difference](https://spaghetmenot.github.io/normalmagic/2.0/assets/booleans/bool_diff.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/booleans/bool_diff.png) | [![Slice](https://spaghetmenot.github.io/normalmagic/2.0/assets/booleans/bool_slice.gif)](https://spaghetmenot.github.io/normalmagic/2.0/assets/booleans/bool_slice.gif) | Examples[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_pro/#examples "Permanent link") -------------------------------------------------------------------------------------------------------------- Be sure to check out the [examples file](https://spaghetmenot.github.io/normalmagic/2.0/examples/) to see Boolean Pro in action. [![boolean_pro_examples](https://spaghetmenot.github.io/normalmagic/2.0/assets/examples/booleans.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/examples/booleans.png) Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_pro/#options "Permanent link") ------------------------------------------------------------------------------------------------------------ ### Cutters[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_pro/#cutters "Permanent link") Specify cutter geometry. You can specify up to 6 objects or use a collection. ### Cutters[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_pro/#cutters_1 "Permanent link") This section specifies which cutters to use. * **Objects/Collection:** Choose individual mesh objects or a collection containing mesh objects. * **Object Count:** How many cutter mesh objects to use (when in **_Objects_** mode). * **Outset:** Expands the cutter mesh with options for [even thickness](https://spaghetmenot.github.io/normalmagic/2.0/common_settings/#even-thickness) . ### Boolean[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_pro/#boolean "Permanent link") * **Operation:** Which boolean operation to perform. * **Intersect:** Keep the part of the mesh that is shared between inputs. * **Union:** Combine input meshes into a single mesh. * **Difference:** (Default) Subtract input meshes from source mesh. * **Slice:** Slice source mesh with input meshes. This combines "Intersect" and "Difference" into the same output. * **Solver:** * **Float:** Simple solver with good performance. * **Exact:** Slower solver with best results on coplanar faces. * **Manifold:** (Default) Fastest solver that only works on manifold meshes, but gives better results. * **Inset (Slice Mode):** Offsets the cutter inwards for the intersect boolean to give a gap between meshes. ### Weld[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_pro/#weld "Permanent link") * **Merge by Distance:** Merge vertices based on distance. * **Distance:** Distance at which to merge vertices. ### Shading[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_pro/#shading "Permanent link") * **Materials:** How to assign materials to new faces. * **Index Based:** Match material index from boolean meshes. * **Specify:** Specify a material to apply to all new faces. * **Transfer:** Transfer materials from boolean meshes. This might not be accurate when using collections. * **Transfer Normals:** Use normals from input meshes. Produces the best normals. * **Mark Sharp:** Mark all intersection edges between meshes as sharp. ### Solver Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_pro/#solver-options "Permanent link") * **Result:** Whether to output a solid object or a cut surface. * **Solid:** Output full Boolean result. * **Surface:** Output a cut surface with open edges where new faces would appear. * **Sequential (Float solver only):** Perform Booleans one mesh island at a time. This often gives better results but can be slower. * **Self Intersection (Exact solver only):** Correctly calculates cases when one or both operands have self-intersections. This involves more calculations making the node slower. * **Hole Tolerant:** Optimizes the Boolean output for non-manifold geometry at the cost of increased computational time. Because of the performance impact, this option should only be enabled when the solver demonstrates errors with non-manifold geometry. --- # Cut Groove - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/cut_groove/#cut-groove) Cut Groove[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/cut_groove/#cut-groove "Permanent link") ================================================================================================================= [![Cut Groove Icon](https://spaghetmenot.github.io/normalmagic/2.0/assets/icons/cut_groove_2.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/icons/cut_groove_2.png) Cut a v-shaped groove or a gap into a surface along the intersection of cutter objects. How it works[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/cut_groove/#how-it-works "Permanent link") --------------------------------------------------------------------------------------------------------------------- The **Cut Groove** Modifier performs the following steps: 1. Generate a curve from the intersection of cutter objects. 2. Convert the curve to a 'ribbon' mesh that follows the surface closely. 3. Extrude the 'ribbon' mesh with a v-shaped profile to create a solid 'groove cutter'. 4. Cut the 'groove cutter' from the original surface using a difference Boolean. Viewing Steps You can view the result of each of the above steps using the [Debug panel](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/cut_groove/#debug) Examples[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/cut_groove/#examples "Permanent link") ------------------------------------------------------------------------------------------------------------- Be sure to check out the [examples file](https://spaghetmenot.github.io/normalmagic/2.0/examples/) to see Cut Groove in action. [![cut_groove_examples](https://spaghetmenot.github.io/normalmagic/2.0/assets/examples/cut_groove.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/examples/cut_groove.png) Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/cut_groove/#options "Permanent link") ----------------------------------------------------------------------------------------------------------- ### Cut Operation[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/cut_groove/#cut-operation "Permanent link") * **Groove:** Cut a V-shape channel into geometry where cutters intersect. This should keep meshes manifold. * **Gap:** Cut a gap of even width where cutters intersect. This will create non-manifold geometry. [![operation_gif](https://spaghetmenot.github.io/normalmagic/2.0/assets/cut_groove/cut_groove_2.gif)](https://spaghetmenot.github.io/normalmagic/2.0/assets/cut_groove/cut_groove_2.gif) ### Cutter Objects[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/cut_groove/#cutter-objects "Permanent link") This section specifies which cutters to use. * **Objects/Collection:** Choose individual mesh objects or a collection containing mesh objects. * **Object Count:** How many cutter mesh objects to use (when in **_Objects_** mode). * **Cutter Outset:** Expands the cutter mesh with options for [even thickness](https://spaghetmenot.github.io/normalmagic/2.0/common_settings/#even-thickness) . ### Cutter Geometry[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/cut_groove/#cutter-geometry "Permanent link") Control how the groove cutter is generated. This can be previewed using the "Final Cutters" [debug view](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/cut_groove/#debug) . * **Width:** Width of the cut. * **Groove/Cutter Depth:** How deep to make the cutter. * **Cutter Boundary Weld:** Distance at which to weld points along the cutter boundary. This is useful for avoiding bad shading and mesh errors along the cut boundary. * **Edge Slide Angle:** Slide cutter edges along base mesh edges if they are within this angle. ### Intersection Curve[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/cut_groove/#intersection-curve "Permanent link") Control over the curve generated at cutter intersection. This can be previewed using the "Intersection Curve" [debug view](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/cut_groove/#debug) . * **Line Solver:** Which Boolean solver to use to generate the curve. * **Simplify Curve:** Remove inline points from curve. * **Distance Weld:** Weld points closer than this threshold. ### Boolean[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/cut_groove/#boolean "Permanent link") Settings for final Boolean where groove mesh is cut into the object's surface. * **Non-Manifold Solver:** Which Boolean solver to use when one or more inputs is not manifold. * **Merge By Distance:** Merge Vertices by distance after Boolean operation. ### Normals[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/cut_groove/#normals "Permanent link") How to calculate normals. * **Transfer Normals:** Transfer normals with the Boolean operation. It is recommended to keep this on to avoid shading artifacts. * **Match Boundary Normals:** Match the normals on the edge of the groove. This makes the sharp edge appear rounded. [![normals](https://spaghetmenot.github.io/normalmagic/2.0/assets/cut_groove/boundary_normals.gif)](https://spaghetmenot.github.io/normalmagic/2.0/assets/cut_groove/boundary_normals.gif) * **Groove Sharp Angle:** Angle at which to mark edges as sharp on the groove faces. ### Groove UVs[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/cut_groove/#groove-uvs "Permanent link") For "Groove" operation only. * **Method:** How to generate UVs: * **Inherit Surface UVs:** Project UVs from original surface. * **UV Strip:** Generate new UVs in a strip along the groove. * **UV Map:** UV Map to write to. ### Debug[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/cut_groove/#debug "Permanent link") This section lets you inspect the [steps](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/cut_groove/#how-it-works) of the process if the modifier isn't behaving as expected. * **View.** Outputs geometry from different points in the node graph. Warning This changes the output of the graph, make sure to turn off when you're done inspecting. * **Intersection Curve:** Output the curve generated by the Boolean intersection. * **Ribbon:** Output the extruded curve or "ribbon". * **Final Cutters:** Output the 'groove cutter' extruded from the 'ribbon'. --- # Offset Surface - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/offset_surface/#offset-surface) Offset Surface[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/offset_surface/#offset-surface "Permanent link") ============================================================================================================================= [![offset_surface](https://spaghetmenot.github.io/normalmagic/2.0/assets/icons/offset_surface.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/icons/offset_surface.png) Offset the surface of a mesh in or out with options for even thickness. Re-using cutters This can be useful when re-using the same mesh object to perform multiple cuts/operations. Here we're using the same basic cutter to perform two cuts: * The base mesh has a bevel and is used for a [Cut Groove](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/cut_groove/) modifier. * A linked duplicate is then using Offset Surface before the bevel then a [Solidify Pro](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/solidify_pro/) and is used for a [Boolean Extrude](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_extrude/) modifier. [![offset_cutters](https://spaghetmenot.github.io/normalmagic/2.0/assets/offset_even/offset_cut.gif)](https://spaghetmenot.github.io/normalmagic/2.0/assets/offset_even/offset_cut.gif) Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/offset_surface/#options "Permanent link") --------------------------------------------------------------------------------------------------------------- * **Distance:** Distance to offset surface. * **Even thickness:** Method for [even thickness](https://spaghetmenot.github.io/normalmagic/2.0/common_settings/#even-thickness) . * **Direction:** Direction of offset: * **Normal:** Normal stored on geometry. Will use custom normals if they exist. * **True Normal:** Geometric normal (ignores custom normals). * **Custom:** Custom direction (Specify). ### Selection[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/offset_surface/#selection "Permanent link") See [selection settings](https://spaghetmenot.github.io/normalmagic/2.0/common_settings/#selection) . --- # Mesh Modifiers - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/#mesh-modifiers) Mesh Modifiers[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/#mesh-modifiers "Permanent link") ============================================================================================================== These modifiers affect normals, underlying geometry and other attributes such as UVs. * [Boolean Pro](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_pro/) : Replacement for Blender's built-in boolean modifier with extra options and accurate normals. * [Boolean Trim](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_trim/) : Cut and 'Trim' a mesh using a single-sided cutter object. * [Boolean Extrude](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_extrude/) : Cuts and extrudes where cutter meshes intersect. * [Surface Project](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/surface_project/) : Projects and blends mesh edges onto other mesh surfaces. * [Surface Insert](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/surface_insert/) : Projects, cuts, blends and welds other mesh objects into the surface of a mesh. * [Symmetrize](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/symmetrize/) : Single axis mirror modifier with extra options and works with custom normals. * [Solidify Pro](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/solidify_pro/) : Solidify Meshes with advanced profile control. Supports custom normals. * [Offset Surface](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/offset_surface/) : Offset the surface of a mesh with options for even thickness. * [Cut Groove](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/cut_groove/) :Cuts and extrudes where cutter meshes intersect. --- # Surface Project - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/surface_project/#surface-project) Surface Project[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/surface_project/#surface-project "Permanent link") ================================================================================================================================ [![Surface Project](https://spaghetmenot.github.io/normalmagic/2.0/assets/icons/surface_blend_9.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/icons/surface_blend_9.png) Modifier Renamed This modifier is now called [Project to Surface](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/project_to_surface/) . --- # Boolean Trim - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_trim/#boolean-trim) Boolean Trim[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_trim/#boolean-trim "Permanent link") ======================================================================================================================= [![Boolean Trim Icon](https://spaghetmenot.github.io/normalmagic/2.0/assets/icons/boolean_trim.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/icons/boolean_trim.png) Cut and 'Trim' a mesh using single-sided cutter object(s). * [![Boolean Trim GIF](https://spaghetmenot.github.io/normalmagic/2.0/assets/booleans/boolean_trim.gif)](https://spaghetmenot.github.io/normalmagic/2.0/assets/booleans/boolean_trim.gif) Trim plane(s) can turn corners * [![Boolean Trim Multiple GIF](https://spaghetmenot.github.io/normalmagic/2.0/assets/booleans/boolean_trim_multiple.gif)](https://spaghetmenot.github.io/normalmagic/2.0/assets/booleans/boolean_trim_multiple.gif) Multiple trim planes can be used with one modifier Requirements[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_trim/#requirements "Permanent link") ----------------------------------------------------------------------------------------------------------------------- * Trim plane(s) must be single sided. * Trim plane(s) must extend through the entire mesh. Examples[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_trim/#examples "Permanent link") --------------------------------------------------------------------------------------------------------------- Please check out the [examples file](https://spaghetmenot.github.io/normalmagic/2.0/examples/) to see Boolean Trim in action. [![bool_trim_examples](https://spaghetmenot.github.io/normalmagic/2.0/assets/examples/boolean_extrude_trim.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/examples/boolean_extrude_trim.png) Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_trim/#options "Permanent link") ------------------------------------------------------------------------------------------------------------- ### Trim Planes[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_trim/#trim-planes "Permanent link") * **Objects/Collection:** Choose individual mesh objects or a collection containing mesh objects. * **Object Count:** How many mesh objects to insert (when in **_Objects_** mode). ### Trim[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_trim/#trim "Permanent link") * **Reverse Trim Direction.** Trim faces on the opposite side of the trim plane(s). * **Solver.** The Boolean solver to use for the trim operation. * **Un-Sliced Islands.** What to do with mesh islands that aren't sliced by the Boolean operation: * **Trim Per Island.** Delete un-sliced mesh islands based on the direction of the nearest cutting plane(s). * **Keep All.** Keep all un-sliced mesh islands. * **Remove All.** Remove all un-sliced mesh islands. * **Offset.** Offset the trim plane(s) with even offset. * **Result.** * **Solid.** Output solid mesh if possible. Trimmed section is filled. * **Surface.** Output single-sided mesh. Trimmed section is removed. ### Advanced[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_trim/#advanced "Permanent link") * **Plane Extrusion.** How much the trim plane is extruded before the Boolean operation. How it Works[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_trim/#how-it-works "Permanent link") ----------------------------------------------------------------------------------------------------------------------- 1. Trim planes are extruded into solid shapes by a tiny amount in the opposite direction to the trim operation. 2. These shapes are used for a difference Boolean on the main mesh. 3. Mesh islands on the trimmed side are deleted. --- # Solidify Pro - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/solidify_pro/#solidify-pro) Solidify Pro[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/solidify_pro/#solidify-pro "Permanent link") ======================================================================================================================= [![Solidify Pro Icon](https://spaghetmenot.github.io/normalmagic/2.0/assets/icons/solidify_pro_5.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/icons/solidify_pro_5.png) **Solidify Pro** offers several advantages to Blender's [Solidify Modifier](https://docs.blender.org/manual/en/latest/modeling/modifiers/generate/solidify.html) : 1. Custom normal support. 2. Edge loops. 3. Custom profile control. 4. Inset control. 5. More creasing control on the rim. 6. Match Boundary normals. 7. UV settings. 8. Front/Back/Rim exclusion/output attributes. Examples[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/solidify_pro/#examples "Permanent link") --------------------------------------------------------------------------------------------------------------- Be sure to check out the [examples file](https://spaghetmenot.github.io/normalmagic/2.0/examples/) to see Solidify Pro in action. [![solidify_pro_examples](https://spaghetmenot.github.io/normalmagic/2.0/assets/examples/solidify_pro.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/examples/solidify_pro.png) Current Limitations[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/solidify_pro/#current-limitations "Permanent link") ------------------------------------------------------------------------------------------------------------------------------------- Not all the settings of Blender's native "Solidify" modifier have been replicated yet. The notable exclusions are: * Cannot solidify edges with more than two faces. This is possible with "Complex" mode in the native modifier. [![3faceedge](https://spaghetmenot.github.io/normalmagic/2.0/assets/solidify_pro/3_face_edge.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/solidify_pro/3_face_edge.png) * Float control of **Bevel Weight**. Bevel weight can be set on/off by using the output attribute **_Boundary Edges_**. This attribute can then be specified in a subsequent bevel modifier. Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/solidify_pro/#options "Permanent link") ------------------------------------------------------------------------------------------------------------- * **Thickness:** Thickness of solidify operation. * **Offset:** Offset the thickness from the center. * **Direction:** Direction to extrude: * **Normal:** Normal stored on geometry. Will use custom normals if they exist. * **True Normal:** Geometric normal (ignores custom normals). * **Custom:** Custom direction (Specify). * **Even Thickness:** Method for calculating even thickness. See [even thickness settings](https://spaghetmenot.github.io/normalmagic/2.0/common_settings/#even-thickness) for more information. [![even_thickness](https://spaghetmenot.github.io/normalmagic/2.0/assets/offset_even/offset_even.gif)](https://spaghetmenot.github.io/normalmagic/2.0/assets/offset_even/offset_even.gif) ### Output Geometry[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/solidify_pro/#output-geometry "Permanent link") In this section you can choose which parts of the solidify operation to keep. Offset Surface If you only plan on keeping the front/back of the solidify operation, consider using [Offset Surface](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/offset_surface/) as it's much faster. [![groups](https://spaghetmenot.github.io/normalmagic/2.0/assets/solidify_pro/groups.gif)](https://spaghetmenot.github.io/normalmagic/2.0/assets/solidify_pro/groups.gif) ### Inset[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/solidify_pro/#inset "Permanent link") Inset the front or back faces from their boundary edge. * **Amount:** Distance to inset faces. * **Edge Falloff:** Falloff distance from the edge of the inset. Use to smooth errors at the edge of the inset. * **Scale:** Scale faces around their average position. More stable than insetting but can be harder to control. ### Rim Geometry[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/solidify_pro/#rim-geometry "Permanent link") Control the shape of the geometry created along the rim. * **Rim Profile:** Shape of the rim profile: * **Linear:** Flat rim with even edge loops. * **V-Shape:** Specify an angle for a "v-shape" profile. * **Round:** Round profile with even edge loops. * **Custom Curve:** Provide a curve object to apply as a rim profile. * **Invert:** Invert the height of the profile. * **Reverse:** Reverse the profile curve (swap left/right). #### Profile Geometry[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/solidify_pro/#profile-geometry "Permanent link") * **Profile Height:** How height is calculated along the rim profile: * **Consistent:** Rim profile is consistent height based on the specified thickness. * **Relative:** Rim profile will scale locally based on the distance between points. * **Specify:** Specify a value for profile height. ### Crease[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/solidify_pro/#crease "Permanent link") Apply crease values to the rim. - **Front:** Crease value to apply on the front boundary. - **Back:** Crease value to apply on the back boundary. - **Rim Crease:** Method for creasing perpendicular rim edges: - **Edge Angle:** Apply creases by edge angle. - **Signed Edge Angle:** Apply creases by convex/concave angles. - **Vertex Crease:** Use Vertex creaes values for edge creases. - **Rim:** Crease value to apply to selected rim edges. ### Normals[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/solidify_pro/#normals "Permanent link") Control normals and sharp edges. - **Mark Sharp:** Mark solidified edges sharp. - **Profile Angle:** Angle along the profile curve to mark sharp (along the rim). - **Rim Angle:** Angle to mark sharp across the rim. - **Extend Sharpness:** Extend sharp edges across the rim. - **Match Boundary Normals:** Match normals along the rim boundary. Requires at least one edge loop. ### Materials[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/solidify_pro/#materials "Permanent link") Specify material to use on rim, you can either set material by index or specify a material. ### UVs[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/solidify_pro/#uvs "Permanent link") Choose whether and how to generate UVs on rim faces ### Selection[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/solidify_pro/#selection "Permanent link") Which faces to solidify. See [selection settings](https://spaghetmenot.github.io/normalmagic/2.0/common_settings/#selection) for more information. --- # Project to Surface - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/project_to_surface/#project-to-surface) Project to Surface[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/project_to_surface/#project-to-surface "Permanent link") ========================================================================================================================================= [![Surface Project](https://spaghetmenot.github.io/normalmagic/2.0/assets/icons/surface_blend_9.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/icons/surface_blend_9.png) Project and blend geometry onto other mesh surfaces. Transfer normals and UVs for a seamless blend. Similar to [Surface Insert](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/surface_insert/) but this modifier is added to the "decal/patch" mesh, not the main surface. It's the faster option if you don't need to weld the meshes together. * [![Surface Project 1](https://spaghetmenot.github.io/normalmagic/2.0/assets/surface_project/surface_blend_1.gif)](https://spaghetmenot.github.io/normalmagic/2.0/assets/surface_project/surface_blend_1.gif) Blend a mesh object to other surfaces. Multiple other mesh surfaces can be specified. * [![Surface Project 2](https://spaghetmenot.github.io/normalmagic/2.0/assets/surface_project/surface_blend_2.gif)](https://spaghetmenot.github.io/normalmagic/2.0/assets/surface_project/surface_blend_2.gif) Project mesh as a "Decal" onto other objects. This flattens the geometry but keeps the original normals. Open Edges This modifier works best on meshes with "open edges", i.e. non-solid objects. These edges are used as the base for most [masking methods](https://spaghetmenot.github.io/normalmagic/2.0/common_settings/#mask-falloff) . [![open_edges](https://spaghetmenot.github.io/normalmagic/2.0/assets/surface_project/open_edges.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/surface_project/open_edges.png) Examples[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/project_to_surface/#examples "Permanent link") --------------------------------------------------------------------------------------------------------------------- Be sure to check out the [examples file](https://spaghetmenot.github.io/normalmagic/2.0/examples/) to see Project to Surface in action. [![project_to_surface_examples](https://spaghetmenot.github.io/normalmagic/2.0/assets/examples/surface_project_insert.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/examples/surface_project_insert.png) Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/project_to_surface/#options "Permanent link") ------------------------------------------------------------------------------------------------------------------- ### Projection Targets[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/project_to_surface/#projection-targets "Permanent link") Choose which meshes to project to. * **Target Objects:** How many mesh objects to project to. * **Objects:** Choose individual mesh objects to project to. * **Collection:** Choose a collection containing mesh objects to project to. ### Projection[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/project_to_surface/#projection "Permanent link") Define how mesh is projected to surfaces. * **Method:** Method for vertex projection: [![Method GIF](https://spaghetmenot.github.io/normalmagic/2.0/assets/surface_project/projection_methods.gif)](https://spaghetmenot.github.io/normalmagic/2.0/assets/surface_project/projection_methods.gif) * **Wrap to Surface:** Wrap mesh to target surface. Points will be projected to target surface and re-displaced based on their calculated height. * **Blend with Surface:** Project points to target surface then blend between original and projected positions. * **Project Decal:** Flatten geometry to target surface while keeping original normals. Ideal for "floaters" intended for baking. * **Surface Offset:** Move projected vertices a fixed amount towards or away from the target surface. #### Projection Direction[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/project_to_surface/#projection-direction "Permanent link") Control the direction and properties of surface projection. * **Project Direction:** Define direction of projection rays: * **Object Direction:** Direction in object space (default -Z). * **World Direction:** Direction in world space (default -Z). * **Mesh Normal:** Use individual point normals. * **Mesh Island Normal:** Use the average normal of each mesh island. * **Mesh Tangent:** Use individual point tangents. * **Surface Normal:** Use the normal of the closest part of target surface. * **Base Height:** How height is calculated for **_Wrap to Surface_** and **_Project Decal_** projection methods: * **Boundary Center:** Calculate height from a plane defined by the center of the boundary and the projection direction. * **Object Origin:** Calculate height from a plane defined by the objects origin and the projection direction. * **Re-Displace:** When using **_Wrap to Surface_**. Direction to apply calculated height: * **Projection:** Apply height displacement using the projection direction. * **Surface Normal:** Apply height displacement using the normal of the target surface. * **Ray Length:** Maximum distance rays will collide with target surface. Best to keep at a large enough value that all points collide. * **No Hit:** Change behavior of vertices when projection rays miss: * **Unchanged:** Do not move vertex. * **Closest Surface to Max Dist:** Move vertex to the maximum distance in ray direction then snap to closest point on target surface. #### Projection Masking[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/project_to_surface/#projection-masking "Permanent link") Control how projection is masked. See [Mask Falloff](https://spaghetmenot.github.io/normalmagic/2.0/common_settings/#mask-falloff) . [![falloff](https://spaghetmenot.github.io/normalmagic/2.0/assets/surface_insert/falloff.gif)](https://spaghetmenot.github.io/normalmagic/2.0/assets/surface_insert/falloff.gif) * **Vertex Group:** Choose a vertex group to project. ### Transfer Normals[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/project_to_surface/#transfer-normals "Permanent link") Transfer normals from target surfaces. Internally this uses [Normal Transfer](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/normal_transfer/) . Normals are transferred after vertex projection, using the closest target surface. * **Normal Domain:** Whether normals are stored on points (smooth) or face corners (allows sharp edges). * **Normal Masking:** How to mask the normal transfer: * **Projection Mask:** Use the same mask used for vertex [projection](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/project_to_surface/#projection-masking) . * **New Mask:** Create a new mask using [mask falloff](https://spaghetmenot.github.io/normalmagic/2.0/common_settings/#mask-falloff) . * **Vertex Group:** Limit all normal transfer to a vertex group. ### Transfer UVs[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/project_to_surface/#transfer-uvs "Permanent link") Transfer UVs from target surface. * **UV Map From:** Which UV Map to transfer from the **surface**. * **UV Map To:** Which UV Map to write to on this object. --- # Symmetrize - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/symmetrize/#symmetrize) Symmetrize[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/symmetrize/#symmetrize "Permanent link") ================================================================================================================= [![Icon](https://spaghetmenot.github.io/normalmagic/2.0/assets/icons/symmetrize.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/icons/symmetrize.png) Mirrors a mesh on a single axis. Similar to Blender's [Mirror Modifier](https://docs.blender.org/manual/en/latest/modeling/modifiers/generate/mirror.html) but with the following improvements: 1. Correctly mirrors custom normals. 2. Optional gizmo for displaying the symmetry plane and direction. 3. Output attribute for mirrored faces. 4. Global space option without having to use another object. [![Symmetrize GIF](https://spaghetmenot.github.io/normalmagic/2.0/assets/symmetrize/symmetrize.gif)](https://spaghetmenot.github.io/normalmagic/2.0/assets/symmetrize/symmetrize.gif) Current Limitations[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/symmetrize/#current-limitations "Permanent link") ----------------------------------------------------------------------------------------------------------------------------------- * Limited to a single axis. This can easily be overcome by using another symmetrize modifier. * You can't edit the mirrored side when "On Cage" is turned on like with the default mirror modifier. Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/symmetrize/#options "Permanent link") ----------------------------------------------------------------------------------------------------------- * **Symmetry Space:** Coordinate space to use for symmetry. * **Local:** Symmetrize in object's local space (default mirror modifier behavior). * **Global:** Symmetrize in global space based on the world origin. * **Object:** Symmetrize using another objects position and rotation. * **Axis:** Which axis to symmetrize on, relative to the **_Symmetry Space_**. * **Flip Axis:** Reverse direction of symmetry operation. * **Show Axis:** Display location and direction of symmetry operation. * **Clipping:** Clip geometry on the mirrored side of the symmetry plane. * **None:** No Clipping. All geometry will be mirrored across the symmetry plane. * **Snap Points:** Points on the mirrored side will be snapped to the symmetry plane. * **Cut Geometry:** Geometry will be sliced on the symmetry plane. ### Merge Points[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/symmetrize/#merge-points "Permanent link") Merge points by distance after symmetry operation. ### UVs[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/symmetrize/#uvs "Permanent link") Options to flip and offset UVs. * **UV Map:** Name of UV Map to edit. * **Flip U:** Flip mirrored UVs horizontally. * **Flip V:** Flip mirrored UVs vertically. * **Offset:** Offset mirrored UVs. ### Center Normals[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/symmetrize/#center-normals "Permanent link") * **Mark Sharp:** Mark center edges as sharp based on angle. * **Angle:** Minimum angle for a sharp edge. * **Unify Custom Normals:** Face corner normals on center points will average. Sharp edges will be preserved. Only applies if custom normals exist on mesh. --- # Add Custom Normals - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/2.0/manual_tools/add_custom_normals/#add-custom-normals) Add Custom Normals[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/manual_tools/add_custom_normals/#add-custom-normals "Permanent link") =========================================================================================================================================== [![Icon](https://spaghetmenot.github.io/normalmagic/2.0/assets/icons/add_custom_normals_object.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/icons/add_custom_normals_object.png) Found in the **Object** menu. Adds custom normals to selected mesh objects. Internally uses the [Lock Normals](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/lock_normals/) tool. Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/manual_tools/add_custom_normals/#options "Permanent link") --------------------------------------------------------------------------------------------------------------------- * **Normal Type:** How to store custom normals: * **Free:** Store custom normals as simple vectors in the local space of the mesh. This is efficient and fast to evaluate but does not support deformation. * **Tangent Space:** Store normals in a deformation dependent custom transformation space. This method is slower, but can be better when subsequent operations change the mesh without handling normals specifically. * **Normal Domain:** When **_Custom Normal Type_** is set to **_Free_**: * **Face Corner.** Store normals on face corners, allows for sharp edges. * **Point.** Store normals on points, cannot have sharp edges. --- # Normal Modifiers - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/#normal-modifiers) Normal Modifiers[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/#normal-modifiers "Permanent link") ==================================================================================================================== These modifiers effect the normals of a mesh and nothing else. * [Normal Transfer](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/normal_transfer/) * [Smooth Normals](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/smooth_normals/) * [Face Weighted Normals](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/face_weighted_normals/) * [Bent Normals](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/bent_normals/) * [Repair Bevel Normals](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/repair_bevel_normals/) * [Repair Boolean Normals](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/repair_boolean_normals/) * [Repair Mirrored Normals](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/repair_mirrored_normals/) * [Lock Normals](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/lock_normals/) --- # Boolean Pro - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/2.0/add-on/boolean_pro/#boolean-pro) Boolean Pro[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/add-on/boolean_pro/#boolean-pro "Permanent link") ================================================================================================================ [![bpro panel](https://spaghetmenot.github.io/normalmagic/2.0/assets/add-on/bpro_panel.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/add-on/bpro_panel.png) This panel lets you quickly set up Boolean modifiers on selected geometry. Modifiers are added to the active object, other selected objects will be added as cutters. There are operators for adding the following modifiers: * [Boolean Pro](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_pro/) * [Boolean Extrude](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_extrude/) * [Boolean Trim](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_trim/) * [Cut Groove](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/cut_groove/) * ### How to use[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/add-on/boolean_pro/#how-to-use "Permanent link") [![bool diff](https://spaghetmenot.github.io/normalmagic/2.0/assets/add-on/boolean_difference.gif)](https://spaghetmenot.github.io/normalmagic/2.0/assets/add-on/boolean_difference.gif) **1.** Select cutter object(s). **2.** Select the object you wish to cut. **3.** Perform Boolean operation using the buttons. Boolean Pro Operators[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/add-on/boolean_pro/#boolean-pro-operators "Permanent link") ------------------------------------------------------------------------------------------------------------------------------------ The top of the panel contains operators for all Boolean Pro modes. ### Operations[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/add-on/boolean_pro/#operations "Permanent link") | Intersect | Union | Difference | Slice | | --- | --- | --- | --- | | [![Intersect](https://spaghetmenot.github.io/normalmagic/2.0/assets/booleans/bool_intersect.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/booleans/bool_intersect.png) | [![Union](https://spaghetmenot.github.io/normalmagic/2.0/assets/booleans/bool_union.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/booleans/bool_union.png) | [![Difference](https://spaghetmenot.github.io/normalmagic/2.0/assets/booleans/bool_diff.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/booleans/bool_diff.png) | [![Slice](https://spaghetmenot.github.io/normalmagic/2.0/assets/booleans/bool_slice.gif)](https://spaghetmenot.github.io/normalmagic/2.0/assets/booleans/bool_slice.gif) | ### Split[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/add-on/boolean_pro/#split "Permanent link") The "Split" Operator will duplicate the object: * The original will get a **Difference** Boolean * The duplicate will get a **Intersect** Boolean. * The duplicate can be a linked copy by toggling the link option next to the button. Advanced Boolean Operators[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/add-on/boolean_pro/#advanced-boolean-operators "Permanent link") ---------------------------------------------------------------------------------------------------------------------------------------------- The "Advanced Booleans" section lets you add the following modifiers: * [Boolean Extrude](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_extrude/) * [Boolean Trim](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_trim/) * [Cut Groove](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/cut_groove/) Modifier Settings[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/add-on/boolean_pro/#modifier-settings "Permanent link") ---------------------------------------------------------------------------------------------------------------------------- To change the default settings for any modifier, use the [Modifier Defaults](https://spaghetmenot.github.io/normalmagic/2.0/add-on/modifier_defaults/) menu to save defaults from a modifier. Cutter Behavior[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/add-on/boolean_pro/#cutter-behavior "Permanent link") ------------------------------------------------------------------------------------------------------------------------ This section lets you choose what happens to objects when you add a Boolean. * **Display As.** Change the display mode of the cutter object: * **Wireframe.** Display cutter as wireframe. * **Bounds.** Display cutter as bounding box. * **Collection.** When enabled, specify the name of a collection to add cutter objects to. If the collection doesn't exist one will be created. * **Deselect.** Which objects get deselected after the boolean operation: * **None.** Keep all objects selected. * **Main Object.** Deselect the object that receives the modifier. * **Cutters.** Deselect cutter object(s) * **Parent to Object.** Parent the cutter object(s) to the main object. This will transform them together when you move the main object. * **Link Split Mesh.** When performing the [Split](https://spaghetmenot.github.io/normalmagic/2.0/add-on/boolean_pro/#split) operation, link the intersected mesh to the original so editing one mesh edits the other too. * **Auto-Smooth.** Apply Blender's "Smooth By Angle" modifier to objects in Boolean operation if they don't have one already: * **Cutters.** Apply smoothing to cutter object(s). * **All.** Apply smoothing to all objects involved in the Boolean. * **None.** Don't apply smoothing to any objects. * **Angle.** Angle to set auto-smoothing at when "Auto-Smooth" is turned on. Convert Existing Booleans[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/add-on/boolean_pro/#convert-existing-booleans "Permanent link") -------------------------------------------------------------------------------------------------------------------------------------------- Where is this operator? There is no longer a button for this operator but you can search for it with the F3 operator search: [![convert booleans](https://spaghetmenot.github.io/normalmagic/2.0/assets/add-on/convert_booleans.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/add-on/convert_booleans.png) Will convert all 'Boolean' modifiers on selected objects to 'Boolean Pro'. All relevant settings will be transferred. --- # Bent Normals - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/bent_normals/#bent-normals) Bent Normals[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/bent_normals/#bent-normals "Permanent link") ========================================================================================================================= [![Bent Normals Icon](https://spaghetmenot.github.io/normalmagic/2.0/assets/icons/bent_normals_1.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/icons/bent_normals_1.png) Bent normals can improve how surfaces react to ambient lighting, especially in non-path-traced renderers such as game engines. Usually bent normals are baked to a texture but this modifier will calculate bent normals **directly on geometry**. A cone of rays is cast from each point and the normals are sampled and averaged to find the average direction of ambient light. * [![bent off](https://spaghetmenot.github.io/normalmagic/2.0/assets/bent/bent_off.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/bent/bent_off.png) **Bent normals off** Unnaturally dark shadows. * [![bent on](https://spaghetmenot.github.io/normalmagic/2.0/assets/bent/bent_on.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/bent/bent_on.png) **Bent normals on** Fake bounce light added to shadow areas. Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/bent_normals/#options "Permanent link") --------------------------------------------------------------------------------------------------------------- * **Factor.** How much bent normals are mixed in with existing normals. ### Collision Geometry[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/bent_normals/#collision-geometry "Permanent link") Collide with other objects in the scene. * **Object.** Object to collide rays with. * **Collection.** Collection to collide rays with. ### RayCast[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/bent_normals/#raycast "Permanent link") Control the distribution of rays used to calculate the bent normals. * **Ray Count.** How many rays are cast. * **Ray Length.** How long to cast each ray. * **Cone Angle.** The angle of the cone that rays are distributed in using a Fibonacci distribution. --- # Face Weighted Normals - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/face_weighted_normals/#face-weighted-normals) Face Weighted Normals[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/face_weighted_normals/#face-weighted-normals "Permanent link") ==================================================================================================================================================== [![Face Weighted Normals Icon](https://spaghetmenot.github.io/normalmagic/2.0/assets/icons/weighted_normals2.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/icons/weighted_normals2.png) Calculate face weighted normals for a mesh. This is similar to Blender's built-in [Weighted Normals Modifier](https://docs.blender.org/manual/en/latest/modeling/modifiers/normals/weighted_normal.html) but with some differences: * Selection Panel lets you limit weighted normals to a specific part of your mesh. * Options are designed to be more intuitive and easier to use. * [![weighted off](https://spaghetmenot.github.io/normalmagic/2.0/assets/weighted/weighted_off.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/weighted/weighted_off.png) Un-weighted normals * [![weighted on](https://spaghetmenot.github.io/normalmagic/2.0/assets/weighted/weighted_on.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/weighted/weighted_on.png) Weighted normals Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/face_weighted_normals/#options "Permanent link") ------------------------------------------------------------------------------------------------------------------------ * **Normal Domain.** Whether normals are stored on points (smooth) or face corners (allows sharp edges). * **Weight.** Derive normal weights from: * **Face Area.** Faces with larger area have more influence over normals. * **Face Strength.** Use the "Face Strength" attribute. [Official Documentation](https://docs.blender.org/manual/en/latest/modeling/meshes/editing/mesh/normals.html#set-face-strength) * **Attribute.** Define an attribute to use for normal weighting. * **Keep Sharp.** Keep sharp edges on face corners. * **Corner Angle Weights.** Include corner angles in weighting. Produces better normals for non -quads. ### Area Weights[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/face_weighted_normals/#area-weights "Permanent link") Have more control over area-weighted normals. * **Area Bias.** Bend normals towards faces with larger areas. 1 = Direct weight based on area. Higher values will weight more aggressively to larger areas. * **Area Cutoff.** Ignores normals from smaller faces. Cutoff is a percentage of face area compared to the largest connected face. Selection[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/face_weighted_normals/#selection "Permanent link") ---------------------------------------------------------------------------------------------------------------------------- See [Selection](https://spaghetmenot.github.io/normalmagic/2.0/common_settings/#selection) options. --- # Lock Normals - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/lock_normals/#lock-normals) Lock Normals[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/lock_normals/#lock-normals "Permanent link") ========================================================================================================================= [![Icon](https://spaghetmenot.github.io/normalmagic/2.0/assets/icons/lock_normals.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/icons/lock_normals.png) Creates custom normals for a mesh if none exist. Can also be used to convert between "Free" and "Tangent Space" normals, see the [Blender Docs](https://docs.blender.org/manual/en/latest/modeling/geometry_nodes/mesh/write/set_mesh_normal.html#properties) . Collapsing Meshes Tangent Space normals make manual edits to geometry with custom normals much easier. Apply this modifier or use [Add Custom Normals](https://spaghetmenot.github.io/normalmagic/2.0/manual_tools/add_custom_normals/) to achieve this. Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/lock_normals/#options "Permanent link") --------------------------------------------------------------------------------------------------------------- * **Custom Normal Type:** How to store custom normals: * **Free:** Store custom normals as simple vectors in the local space of the mesh. This is efficient and fast to evaluate but does not support deformation. * **Tangent Space:** Store normals in a deformation dependent custom transformation space. This method is slower, but can be better when subsequent operations change the mesh without handling normals specifically. * **Normal Domain:** When **_Custom Normal Type_** is set to **_Free_**: * **Face Corner.** Store normals on face corners, allows for sharp edges. * **Point.** Store normals on points, cannot have sharp edges. --- # Normal Transfer - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/normal_transfer/#normal-transfer) Normal Transfer[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/normal_transfer/#normal-transfer "Permanent link") ================================================================================================================================== [![Normal Transfer Icon](https://spaghetmenot.github.io/normalmagic/2.0/assets/icons/normal_transfer_4.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/icons/normal_transfer_4.png) Transfer Normals from other mesh objects. This can be useful in a variety of situations: * [![blend](https://spaghetmenot.github.io/normalmagic/2.0/assets/normal_transfer/blend.gif)](https://spaghetmenot.github.io/normalmagic/2.0/assets/normal_transfer/blend.gif) Blend between meshes without affecting geometry. * [![fix](https://spaghetmenot.github.io/normalmagic/2.0/assets/normal_transfer/fix.gif)](https://spaghetmenot.github.io/normalmagic/2.0/assets/normal_transfer/fix.gif) Fix / smooth shading of bad topology. See also [Smooth Normals](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/smooth_normals/) and [Boolean Pro](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_pro/) * [![foliage](https://spaghetmenot.github.io/normalmagic/2.0/assets/normal_transfer/foliage.gif)](https://spaghetmenot.github.io/normalmagic/2.0/assets/normal_transfer/foliage.gif) Create better shading for foliage cards. * [![floater](https://spaghetmenot.github.io/normalmagic/2.0/assets/normal_transfer/floater.gif)](https://spaghetmenot.github.io/normalmagic/2.0/assets/normal_transfer/floater.gif) Match normals of "floater" decals. See also [Surface Project](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/surface_project/) Examples[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/normal_transfer/#examples "Permanent link") -------------------------------------------------------------------------------------------------------------------- Examples can be found in the **Normal Modifiers** scene in the [example file](https://spaghetmenot.github.io/normalmagic/2.0/examples/) [![examples](https://spaghetmenot.github.io/normalmagic/2.0/assets/examples/normal_modifiers.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/examples/normal_modifiers.png) Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/normal_transfer/#options "Permanent link") ------------------------------------------------------------------------------------------------------------------ * **Normal Domain.** Whether normals are stored on points (smooth) or face corners (allows sharp edges). ### Transfer Geometry[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/normal_transfer/#transfer-geometry "Permanent link") Choose which meshes to transfer normals from. * **Object Count.** How many mesh objects to transfer normals from. * **Objects.** Choose individual mesh objects to transfer normals from. * **Collection.** Choose a collection containing mesh objects to transfer normals from. ### Transfer[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/normal_transfer/#transfer "Permanent link") * **Method.** How to sample the normal from target surface: * **Closest Surface.** Sample normal at closest target surface. * **Project Object Direction.** Raycast-sample target geometry in object space. * **Project Island Normal.** Raycast-sample target geometry along the average mesh island normal. * **Project Source Normals.** Raycast-sample target geometry along mesh normals of this object. * **Ray Length (Project Methods).** Maximum length of raycast to target surface. * **Direction (Project Object Direction Only).** Direction in object space to raycast (default is -Z). * **Automatic Masking.** Mask falloff for transferring normals, see [Mask Falloff](https://spaghetmenot.github.io/normalmagic/2.0/common_settings/#mask-falloff) ### Selection[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/normal_transfer/#selection "Permanent link") See [Selection](https://spaghetmenot.github.io/normalmagic/2.0/common_settings/#selection) options. --- # Repair Mirrored Normals - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/repair_mirrored_normals/#repair-mirrored-normals) Repair Mirrored Normals[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/repair_mirrored_normals/#repair-mirrored-normals "Permanent link") ========================================================================================================================================================== [![Repair Mirrored Normals](https://spaghetmenot.github.io/normalmagic/2.0/assets/icons/repair_mirrored.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/icons/repair_mirrored.png) Mirroring a mesh with custom normals will not mirror the normals. This leads to incorrect normals on the mirrored geometry. This modifier can repair these normals by flipping them in the correct direction. Symmetrize Try the [Symmetrize](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/symmetrize/) modifier instead for mirroring with custom normals. * [![Mirrored Flipped](https://spaghetmenot.github.io/normalmagic/2.0/assets/mirrored_flipped.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/mirrored_flipped.png) Unmirrored Custom Normals * [![Mirrored Unflipped](https://spaghetmenot.github.io/normalmagic/2.0/assets/mirrored_unflipped.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/mirrored_unflipped.png) Mirrored Custom Normals Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/repair_mirrored_normals/#options "Permanent link") -------------------------------------------------------------------------------------------------------------------------- * **Normal Domain:** Whether normals are stored on points (smooth) or face corners (allows sharp edges) * **Method:** Choose which faces get mirrored normals: * **Detect:** Faces and axes will be determined automatically, this should work in most cases. * **[Side of Origin:](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/repair_mirrored_normals/#side-of-origin) ** Select and mirror normals based on axis and object origin. * **[Specify:](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/repair_mirrored_normals/#specify) ** Specify which faces to flip normals and which axes to flip them on. * **Mirror Object:** If using a mirror object, specify it here. ### Side of Origin[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/repair_mirrored_normals/#side-of-origin "Permanent link") Flip normals for faces on the "mirrored" side. Use this method when using "Bisect" on a mirror modifier or when original geometry doesn't cross the mirror plane(s). * **Recalculate Center Normals:** Recalculate Normals for points at the center of specified axes. * **Mirror Axis:** Which axes to select and mirror normals on. * **Flip Axis:** Flip the direction of the selection of normals to mirror. ### Specify[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/repair_mirrored_normals/#specify "Permanent link") Choose which faces have flipped normals and what axis to flip them on. Use when geometry is mirrored across both sides of the mirror plane(s) and "Bisect" is turned off. * **Mirror Axis:** Which axes to select and mirror normals on. * **Selection:** See [Selection Options](https://spaghetmenot.github.io/normalmagic/2.0/common_settings/#selection) --- # Repair Boolean Normals - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/repair_boolean_normals/#repair-boolean-normals) Repair Boolean Normals[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/repair_boolean_normals/#repair-boolean-normals "Permanent link") ======================================================================================================================================================= [![Repair Boolean Icon](https://spaghetmenot.github.io/normalmagic/2.0/assets/icons/repair_boolean_normals_1.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/icons/repair_boolean_normals_1.png) This tool attempts to fix bad normals caused by booleans. This is intended for destructively applied booleans, for boolean modifiers please consider using [Boolean Pro](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_pro/) as it provides much more accurate and consistent results. * [![Bool Normals Default](https://spaghetmenot.github.io/normalmagic/2.0/assets/booleans/bool_unrepaired.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/booleans/bool_unrepaired.png) Default Boolean Normals * [![Bool Normals Repaired](https://spaghetmenot.github.io/normalmagic/2.0/assets/booleans/bool_repaired.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/booleans/bool_repaired.png) Repaired Boolean Normals Requirements[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/repair_boolean_normals/#requirements "Permanent link") ----------------------------------------------------------------------------------------------------------------------------------- 1. Mesh object with destructive booleans applied. 2. Mesh is un-triangulated i.e. boolean operations have created ngons. 3. Mesh has sharp edges on boolean seams. Even if a mesh meets all these requirements it isn't 100% guaranteed to fix all it's normals Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/repair_boolean_normals/#options "Permanent link") ------------------------------------------------------------------------------------------------------------------------- ### Error Correct Distance[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/repair_boolean_normals/#error-correct-distance "Permanent link") Welds vertices on the proxy mesh that normals are transferred from. This can fix normal issues but will also introduce more issues as the value increases. There should be a sweet spot where there aren't any issues ### Selection Panel[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/repair_boolean_normals/#selection-panel "Permanent link") See [Selection](https://spaghetmenot.github.io/normalmagic/2.0/common_settings/#selection) options How it Works[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/repair_boolean_normals/#how-it-works "Permanent link") ----------------------------------------------------------------------------------------------------------------------------------- 1. Splitting the mesh on sharp edges, producing a surface for each "normal island" 2. Detecting points on the boundary that don't join to any edges inside the island 3. Re-creating a version of each island without those points 4. Transferring normals per newly created island back up to the unaltered geometry --- # Smooth Normals - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/smooth_normals/#smooth-normals) Smooth Normals[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/smooth_normals/#smooth-normals "Permanent link") =============================================================================================================================== [![Smooth Normals Icon](https://spaghetmenot.github.io/normalmagic/2.0/assets/icons/smooth_normals_1.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/icons/smooth_normals_1.png) Smooth Normals will smooth mesh normals without smoothing mesh topology. This can be useful in a variety of situations. * [![fix_bad_shading](https://spaghetmenot.github.io/normalmagic/2.0/assets/smooth/fix%20bad_shading.gif)](https://spaghetmenot.github.io/normalmagic/2.0/assets/smooth/fix%20bad_shading.gif) Achieve good shading on difficult topology. (Pinched, uneven or distorted normals). * [![cel_shading](https://spaghetmenot.github.io/normalmagic/2.0/assets/smooth/cel_contour.gif)](https://spaghetmenot.github.io/normalmagic/2.0/assets/smooth/cel_contour.gif) Simplify cel shading contours. * [![smooth_flatten](https://spaghetmenot.github.io/normalmagic/2.0/assets/smooth/smooth_flatten.gif)](https://spaghetmenot.github.io/normalmagic/2.0/assets/smooth/smooth_flatten.gif) Smooth and/or completely flatten normal islands. * [![mix_point_normals](https://spaghetmenot.github.io/normalmagic/2.0/assets/smooth/mix_point_normals.gif)](https://spaghetmenot.github.io/normalmagic/2.0/assets/smooth/mix_point_normals.gif) Mix smoothed point normals for a unique effect (cheap SSS shading). Examples[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/smooth_normals/#examples "Permanent link") ------------------------------------------------------------------------------------------------------------------- Be sure to check out the [examples file](https://spaghetmenot.github.io/normalmagic/2.0/examples/) to see Smooth Normals in action. [![smooth_normals_examples](https://spaghetmenot.github.io/normalmagic/2.0/assets/examples/smooth_normals.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/examples/smooth_normals.png) Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/smooth_normals/#options "Permanent link") ----------------------------------------------------------------------------------------------------------------- * **Normal Domain.** Whether normals are stored on points (smooth) or face corners (allows sharp edges). * **Keep Sharp.** Keep edges marked as sharp when normals are on face corners. ### Smoothed Proxy Mesh[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/smooth_normals/#smoothed-proxy-mesh "Permanent link") Generate a smoothed version of the mesh to transfer normals from. The mesh is split on sharp edges before smoothing, you can preview this mesh from the debug panel. [![smoothed_proxy](https://spaghetmenot.github.io/normalmagic/2.0/assets/smooth/smoothed_proxy.gif)](https://spaghetmenot.github.io/normalmagic/2.0/assets/smooth/smoothed_proxy.gif) * **Transfer Method.** How to transfer the normals from the smoothed mesh. * **Closest Surface.** Transfer normals from the closest point of the smoothed mesh. * **Point Index.** Transfer normals by their original point index. * **Iterations.** How many iterations of smoothing to perform. ### Smooth Normals[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/smooth_normals/#smooth-normals_1 "Permanent link") Controls methods of directly smoothing mesh normals. * **Smooth Method.** How to smooth normals: * **None.** Don't perform any direct normal smoothing. * **Blur Normals.** Fastest Method of smoothing at the cost of being less accurate and not preserving shape as well. * **Smooth Normals.** Iterative smooth function of normals. Slower than blur but can produce better results. * **Smooth/Blur Iterations.** How many iterations of smoothing to apply to normals. * **Face Weight Influence.** Cheap approximation of face weighted normals, lessens the contribution of smaller faces. ### Flatten Normal Islands[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/smooth_normals/#flatten-normal-islands "Permanent link") Calculate the average normal direction for entire normal islands (defined by sharp edges). * **Amount.** How much to blend to the completely flat island normals. ### Mix Point Normals[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/smooth_normals/#mix-point-normals "Permanent link") Mix in smoothed point normals. This can achieve a unique effect, somewhat like sub-surface scattering. * **Amount.** How much to blend to the smoothed point normals. * **Blur Iterations.** Perform blur iterations on the point normals. ### Selection[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/smooth_normals/#selection "Permanent link") See [Selection](https://spaghetmenot.github.io/normalmagic/2.0/common_settings/#selection) options --- # Repair Bevel Normals - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/repair_bevel_normals/#repair-bevel-normals) Repair Bevel Normals[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/repair_bevel_normals/#repair-bevel-normals "Permanent link") ================================================================================================================================================= [![Repair Bevel Normals Icon](https://spaghetmenot.github.io/normalmagic/2.0/assets/icons/repair_bevel.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/icons/repair_bevel.png) Beveling a mesh with custom normals can lead to unexpected behavior. This tool identifies bevels and replicates Blender's "Harden Normals" functionality found on the bevel modifier. * [![default_bevel](https://spaghetmenot.github.io/normalmagic/2.0/assets/bevel_custom_default.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/bevel_custom_default.png) Bevel with custom normals * [![repaired_bevel](https://spaghetmenot.github.io/normalmagic/2.0/assets/bevel_custom_repaired.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/bevel_custom_repaired.png) Repaired Normals Examples[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/repair_bevel_normals/#examples "Permanent link") ------------------------------------------------------------------------------------------------------------------------- Be sure to check out the [examples file](https://spaghetmenot.github.io/normalmagic/2.0/examples/) to see Repair Bevel Normals in action. [![normal_examples](https://spaghetmenot.github.io/normalmagic/2.0/assets/examples/normal_modifiers.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/examples/normal_modifiers.png) Requirements[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/repair_bevel_normals/#requirements "Permanent link") --------------------------------------------------------------------------------------------------------------------------------- * Mesh object with beveled faces you wish to fix * (Recommended) Set **Face Strength** to "Affected" or "All" on the bevel modifier [![Face Strength](https://spaghetmenot.github.io/normalmagic/2.0/assets/bevel_face_strength.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/bevel_face_strength.png) Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/repair_bevel_normals/#options "Permanent link") ----------------------------------------------------------------------------------------------------------------------- ### Bevel Detection[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/repair_bevel_normals/#bevel-detection "Permanent link") How to detect bevelled faces. * **Face Strength.** Recommended option. Requires setting face strength on bevel modifier to "Affected" or "All" * **Sharp Bevel Edge.** Apply sharp edges to bevel's outer edges. * **Sharp Bevel Corners.** Apply sharp edges to bevel's corners. * **Face Area.** Select bevels by their face area. * **Max Bevel Area.** Faces with area below this value will be treated as bevels * **Attribute.** Use an attribute or vertex group to select beveled faces. ### Area Weighting[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/repair_bevel_normals/#area-weighting "Permanent link") For weighting normals **inside** the bevel. Available when [Bevel Detection](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/repair_bevel_normals/#bevel-detection) is set to **Face Area** or **Attribute** * **Area Bias.** Bend normals towards faces with larger areas. 1 = Direct weight based on area. Higher values will weight more aggressively to larger areas. * **Area Cutoff.** Ignores normals from smaller faces. Cutoff is a percentage of face area compared to the largest connected face ### Selection Panel[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/repair_bevel_normals/#selection-panel "Permanent link") See [Selection](https://spaghetmenot.github.io/normalmagic/2.0/common_settings/#selection) options --- # Other Modifiers - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/2.0/other_tools/#other-modifiers) Other Modifiers[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/other_tools/#other-modifiers "Permanent link") ================================================================================================================= These modifiers change things that are related to normals such as sharp edges or face orientation: * [Mark Sharp](https://spaghetmenot.github.io/normalmagic/2.0/other_tools/mark_sharp/) * [Auto-Flip Faces](https://spaghetmenot.github.io/normalmagic/2.0/other_tools/auto-flip_faces/) * [Sharp Edges to Attribute](https://spaghetmenot.github.io/normalmagic/2.0/other_tools/sharp_edges_to_attribute/) * [Instance Object](https://spaghetmenot.github.io/normalmagic/2.0/other_tools/instance_object/) * [Change Materials](https://spaghetmenot.github.io/normalmagic/2.0/other_tools/change_materials/) --- # Auto-Flip Faces - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/2.0/other_tools/auto-flip_faces/#auto-flip-faces) Auto-Flip Faces[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/other_tools/auto-flip_faces/#auto-flip-faces "Permanent link") ================================================================================================================================= [![Auto-Flip Faces Icon](https://spaghetmenot.github.io/normalmagic/2.0/assets/icons/auto-flip.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/icons/auto-flip.png) Flipped faces on meshes can cause multiple issues. Traditionally you would check for flipped faces by using the the 'Face Orientation' overlay and resolve areas of flipped faces one by one. This modifier will detect flipped faces and fix them automatically. * [![Faces Flipped](https://spaghetmenot.github.io/normalmagic/2.0/assets/suzanne_flipped.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/suzanne_flipped.png) Faces Flipped * [![Faces Unflipped](https://spaghetmenot.github.io/normalmagic/2.0/assets/suzanne_unflipped.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/suzanne_unflipped.png) Faces Un-flipped Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/other_tools/auto-flip_faces/#options "Permanent link") ----------------------------------------------------------------------------------------------------------------- * **Invert.** Change direction of entire mesh from outside to inside * **Hit Rate.** Tune the detection of flipped faces. Higher values will detect more but increase the risk of false positives. --- # Instance Object - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/2.0/other_tools/instance_object/#instance-object) Instance Object[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/other_tools/instance_object/#instance-object "Permanent link") ================================================================================================================================= Instances another object (after modifiers) to replace or append to the current objects geometry. This can be particularly useful for re-using details. [![Instance](https://spaghetmenot.github.io/normalmagic/2.0/assets/other_tools/instance.gif)](https://spaghetmenot.github.io/normalmagic/2.0/assets/other_tools/instance.gif) Create duplicates of an object without needing to sync all modifier settings to the duplicates. [![Instance Append](https://spaghetmenot.github.io/normalmagic/2.0/assets/other_tools/instance_append.gif)](https://spaghetmenot.github.io/normalmagic/2.0/assets/other_tools/instance_append.gif) Append to and nest modular pieces. Such as these bolt inserts, these can be instanced themselves and used with [Surface Insert](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/surface_insert/) on larger meshes. Add-on The normalMagic [Add-on](https://spaghetmenot.github.io/normalmagic/2.0/add-on/) has instance operators to make working with this modifier easier: [![addonpanel](https://spaghetmenot.github.io/normalmagic/2.0/assets/add-on/instance_panel.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/add-on/instance_panel.png) * Create a linked duplicate of an object(s), replace all modifiers with **Instance Object** * Select original object being instanced See [add-on docs](https://spaghetmenot.github.io/normalmagic/2.0/add-on/instance_objects/) for more information. Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/other_tools/instance_object/#options "Permanent link") ----------------------------------------------------------------------------------------------------------------- * **Object.** Object to instance * **As Instance.** When turned off, will copy object's geometry. Turned on will instance the object [Official Documentation](https://docs.blender.org/manual/en/latest/modeling/geometry_nodes/instances.html) * **Replace / Append.** Replace will replace current objects geometry with that of the instance. Append will keep geometry and append the instanced object with additional transform options. ### Transform Instance[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/other_tools/instance_object/#transform-instance "Permanent link") When appending the instance, these settings allow you to transform the instance relative to the objects origin. --- # Change Materials - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/2.0/other_tools/change_materials/#change-materials) Change Materials[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/other_tools/change_materials/#change-materials "Permanent link") ==================================================================================================================================== [![Icon](https://spaghetmenot.github.io/normalmagic/2.0/assets/icons/change_materials.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/icons/change_materials.png) Assign materials or material indices to face selections. [![Demo](https://spaghetmenot.github.io/normalmagic/2.0/assets/change_materials/change_materials_demo.gif)](https://spaghetmenot.github.io/normalmagic/2.0/assets/change_materials/change_materials_demo.gif) Up to 6 materials can be assigned per modifier. Selections can be driven by existing material/index or arbitrary vertex/face groups. Many normalMagic [mesh modifiers](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/) output attributes that work well with Change Materials. Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/other_tools/change_materials/#options "Permanent link") ------------------------------------------------------------------------------------------------------------------ * **Materials to Apply:** The number of materials to apply. This will show a panel for each material with a checkbox to enable/disable. ### Material #[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/other_tools/change_materials/#material "Permanent link") The panel for each material assignment, contains two sub-panels: One for selecting faces and one for specifying the material/index. #### Selection[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/other_tools/change_materials/#selection "Permanent link") Choose which faces to apply a material to. * **Face Group:** Specify a vertex/face group to apply materials to. * **Material:** Select faces by a specific material. * **Material Index:** Select faces by their material index. * **Invert:** Invert selection #### Material[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/other_tools/change_materials/#material_1 "Permanent link") Which material to apply to selected faces. * **Set:** Whether to set a specific material or material index. * **Material:** Which specific material to apply. * **Material Index:** Which material index to apply. --- # Mark Sharp - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/2.0/other_tools/mark_sharp/#mark-sharp) Mark Sharp[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/other_tools/mark_sharp/#mark-sharp "Permanent link") ================================================================================================================== [![Mark Sharp Icon](https://spaghetmenot.github.io/normalmagic/2.0/assets/icons/mark_sharp.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/icons/mark_sharp.png) Mark Sharp will mark edges as sharp based on edge angle. This is similar to Blender's [Smooth By Angle](https://docs.blender.org/manual/en/latest/modeling/geometry_nodes/normals/smooth_by_angle.html) modifier but with extra options. There are options to remove and/or add custom normals. * [![Smooth By Angle](https://spaghetmenot.github.io/normalmagic/2.0/assets/mark_sharp_off.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/mark_sharp_off.png) **Smooth By Angle** One angle for all edges * [![Mark Sharp](https://spaghetmenot.github.io/normalmagic/2.0/assets/mark_sharp_on.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/mark_sharp_on.png) **Mark Sharp** Separate angles for convex/concave edges Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/other_tools/mark_sharp/#options "Permanent link") ------------------------------------------------------------------------------------------------------------ * **Keep Existing:** Keep edges already marked as sharp. * **Angle Type:** * **Absolute Angle:** Use a single angle regardless off convexity. This behaves like "Smooth By Angle". * **Convex / Concave:** Specify different angles depending whether edges are convex or concave. * **Edge Creases:** Mark creased edges as sharp. * **Custom Normal Seams:** Detect seams in custom normals and mark as sharp. * **Remove Custom Normals:** Will remove any custom normals from geometry and use default normal calculation from sharp edges. --- # Sharp Edges to Attribute - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/2.0/other_tools/sharp_edges_to_attribute/#sharp-edges-to-attribute) Sharp Edges to Attribute[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/other_tools/sharp_edges_to_attribute/#sharp-edges-to-attribute "Permanent link") ============================================================================================================================================================ [![Sharp Edges to Attribute Icon](https://spaghetmenot.github.io/normalmagic/2.0/assets/icons/sharp_to_attribute.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/icons/sharp_to_attribute.png) Write edge and point attributes based on sharp edges or other arbitrary edge attributes. * Edge attributes can be used for: * Mark sharp edges as UV seams. * Add a bevel weight to sharp edges. * Detect sharp edges from custom normals and mark them as sharp. * Point attributes can be used for: * Creating a vertex group for selection in another modifier from sharp edges. * Expanding selection with or without a falloff. Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/other_tools/sharp_edges_to_attribute/#options "Permanent link") -------------------------------------------------------------------------------------------------------------------------- ### Sharp Edge Detection[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/other_tools/sharp_edges_to_attribute/#sharp-edge-detection "Permanent link") How to specify edges to write to attribute(s) * **Detect From Markup.** Use smooth shading attributes to define sharp edges. This might miss sharp edges defined by custom normals. * **Detect Custom.** Detect sharp edges from normals. This will detect sharp edges created from custom normals but can have a small amount of error. * **Tolerance (When "Detect Custom" is on).** Change the normal angle difference at which edges will be marked as sharp. ### Expand Points[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/other_tools/sharp_edges_to_attribute/#expand-points "Permanent link") Expand point selection. Can be useful in [Selection Panel](https://spaghetmenot.github.io/normalmagic/2.0/common_settings/#selection) of other modifiers. * **Point Values.** How selection is expanded: * **Float.** Each expansion gets a lower value creating a falloff. * **Bool.** Each expansion is set to 1. * **Expand Iterations.** How many edges to expand point selection. * **Falloff (When Point Values are "Float").** Falloff of point selection. similar to [mask falloff](https://spaghetmenot.github.io/normalmagic/2.0/common_settings/#base-falloff) ### Output Attributes[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/other_tools/sharp_edges_to_attribute/#output-attributes "Permanent link") What to name Edge / Point attributes. **Leaving blank will not write to any attributes.** --- # Visualize Modifiers - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/2.0/visualize_tools/#visualize-modifiers) Visualize Modifiers[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/visualize_tools/#visualize-modifiers "Permanent link") ============================================================================================================================= These modifiers will produce geometry to visualize normals and related attributes: * [View Normals](https://spaghetmenot.github.io/normalmagic/2.0/visualize_tools/view_normals/) * [View Sharp](https://spaghetmenot.github.io/normalmagic/2.0/visualize_tools/view_sharp/) --- # View Normals - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/2.0/visualize_tools/view_normals/#view-normals) View Normals[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/visualize_tools/view_normals/#view-normals "Permanent link") ============================================================================================================================ [![View Normals](https://spaghetmenot.github.io/normalmagic/2.0/assets/icons/view_normals_eye_1.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/icons/view_normals_eye_1.png) View Normals creates geometry to visualize mesh normals on objects. * Normals will show up in object mode * Normal Colors are currently only available in [Material Preview](https://docs.blender.org/manual/en/latest/editors/3dview/display/shading.html#material-preview) and [Rendered](https://docs.blender.org/manual/en/latest/editors/3dview/display/shading.html#rendered) viewport shading. Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/visualize_tools/view_normals/#options "Permanent link") ------------------------------------------------------------------------------------------------------------------ * **Length.** The object-space length of displayed normals * **Normal Domain.** Display normals on: * **Points.** One line will be generated per point. * **Face Corners.** One line will be generated per face corner. * **Faces.** One line will be generated per face. * **View.** Specify which normal to visualize: * **Normal.** Display the normal stored on the geometry, custom normals will be included here. * **True Normal.** Display the normal defined by topology, custom normals will be ignored. * **Attribute.** Specify an arbitrary attribute to use. ### Style[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/visualize_tools/view_normals/#style "Permanent link") This section defines how the normal line mesh is generated: Line [![line](https://spaghetmenot.github.io/normalmagic/2.0/assets/view/normal_line.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/view/normal_line.png) Display normals as a single line. This is the most efficient but can't be colored. Cylinder / Tapered Cylinder [![line](https://spaghetmenot.github.io/normalmagic/2.0/assets/view/normal_cylinder.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/view/normal_cylinder.png) Display Normals as mesh cylinders with a width and color that will show up in [Material Preview](https://docs.blender.org/manual/en/latest/editors/3dview/display/shading.html#material-preview) and [Rendered](https://docs.blender.org/manual/en/latest/editors/3dview/display/shading.html#rendered) viewport shading #### Colors[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/visualize_tools/view_normals/#colors "Permanent link") (When in Cylinder / Tapered Cylinder mode) * **Color.** Color to display normals. * **Show Default.** Colors normals differently if they match default "Smooth Shading" normals: [![Show Default](https://spaghetmenot.github.io/normalmagic/2.0/assets/view/normal_default.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/view/normal_default.png) --- # View Sharp - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/2.0/visualize_tools/view_sharp/#view-sharp) View Sharp[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/visualize_tools/view_sharp/#view-sharp "Permanent link") ====================================================================================================================== [![View Sharp Icon](https://spaghetmenot.github.io/normalmagic/2.0/assets/icons/view_sharp.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/icons/view_sharp.png) View sharp generates geometry to visualize sharp edges on a mesh. Similar to [View Normals](https://spaghetmenot.github.io/normalmagic/2.0/visualize_tools/view_normals/) colors are currently only available in [Material Preview](https://docs.blender.org/manual/en/latest/editors/3dview/display/shading.html#material-preview) and [Rendered](https://docs.blender.org/manual/en/latest/editors/3dview/display/shading.html#rendered) viewport shading. [![View Sharp](https://spaghetmenot.github.io/normalmagic/2.0/assets/view/view_sharp.gif)](https://spaghetmenot.github.io/normalmagic/2.0/assets/view/view_sharp.gif) Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/visualize_tools/view_sharp/#options "Permanent link") ---------------------------------------------------------------------------------------------------------------- * **Detect Sharp.** How to detect sharp edges: * **From Markup.** Use smooth shading attributes to define sharp edges. This might miss sharp edges defined by custom normals. * **From Normals.** Detect sharp edges from normals. This will detect sharp edges created from custom normals but can have a small amount of error. * **Both.** Combine both methods above to detect sharp edges. * **Tolerance (When "From Normals" is used).** Change the normal angle difference at which edges will be marked as sharp. * **Width.** Width of pipe geometry created in object-space. * **Color.** Color to apply to sharp edge visualization. --- # normalMagic 2.0 - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/2.0/#normalmagic-20) normalMagic 2.0[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/#normalmagic-20 "Permanent link") ==================================================================================================== Welcome to the **normalMagic** documentation. Here you'll find everything there is to know about the tools. Blender 5.0 Required normalMagic 2.0 requires **Blender 5.0** or higher. For 4.5 support please use version [1.1](https://spaghetmenot.github.io/normalmagic/1.1/) * [Install normalMagic](https://spaghetmenot.github.io/normalmagic/2.0/install/) * [Examples](https://spaghetmenot.github.io/normalmagic/2.0/examples/) Quick Links[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/#quick-links "Permanent link") --------------------------------------------------------------------------------------------- * [Mesh Modifiers](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/) * [Normal Modifiers](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/) * [Visualize Modifiers](https://spaghetmenot.github.io/normalmagic/2.0/visualize_tools/) * [Other Modifiers](https://spaghetmenot.github.io/normalmagic/2.0/other_tools/) What is normalMagic?[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/#what-is-normalmagic "Permanent link") -------------------------------------------------------------------------------------------------------------- normalMagic is a collection of tools for [Blender](https://www.blender.org/) that offer powerful new modelling workflows and advanced control over mesh normals. [![all_tools](https://spaghetmenot.github.io/normalmagic/2.0/assets/all_tools_2.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/all_tools_2.png) Controlling normals can be essential for creating high quality 3D artwork. Hard surfaces, organic shapes, foliage, hair and fur can benefit from modifying normals. Sometimes it's the only way to get surfaces shading the way you want. Custom Normals Most of these tools create or edit **_custom normals_**. Once custom normals exist on a mesh, some default Blender tools/modifiers might not behave as expected. Tools are included to fix situations such as [mirroring](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/repair_mirrored_normals/) or [beveling](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/repair_bevel_normals/) but it is something to be aware of. See this video for more information: [Custom Normal Issues](https://youtu.be/NoISc01URHg?si=s6NedSzDIFr30zOe) [Buy on Superhive](https://superhivemarket.com/products/normalmagic) [Buy on Gumroad](https://spaghetmenot.gumroad.com/l/normalmagic) Tool Highlights[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/#tool-highlights "Permanent link") ----------------------------------------------------------------------------------------------------- ### **Advanced Booleans, perfect normals**[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/#advanced-booleans-perfect-normals "Permanent link") * Completely avoid boolean normal issues with [Boolean Pro](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_pro/) . * Repair normals on previously cut geometry with [Repair Boolean Normals](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/repair_boolean_normals/) . * Perform advanced Boolean operations with [Boolean Extrude](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_extrude/) , [Boolean Trim](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_trim/) and [Cut Groove](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/cut_groove/) . ### **Seamlessly blend surfaces**[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/#seamlessly-blend-surfaces "Permanent link") * Project positions, normals and UVs with [Project to Surface](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/project_to_surface/) . * Merge, cut and weld projected meshes into a surface with [Surface Insert](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/surface_insert/) . Convenient auto-masking options means no need for creating and managing vertex groups. Sharp edges can be preserved and transferred. ### **Smooth and Transfer Normals**[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/#smooth-and-transfer-normals "Permanent link") * Smooth and flatten normals normals to improve shading, achieve good toon lighting or for cheap subsurface scattering effects with [Smooth Normals](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/smooth_normals/) . * Transfer and blend normals between unconnected meshes using [Normal Transfer](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/normal_transfer/) . What's New in 2.0?[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/#whats-new-in-20 "Permanent link") -------------------------------------------------------------------------------------------------------- Contact[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/#contact "Permanent link") ------------------------------------------------------------------------------------- If anything is unclear or missing, please reach out! [spaghetTools Discord](https://discord.gg/CtpZWGHFhG) [spaghetmenot@gmail.com](mailto:spaghetmenot@gmail.com) [@spaghetmenot.bsky.social](https://bsky.app/profile/spaghetmenot.bsky.social) [@SpaghetMeNot@mastodon.social](https://mastodon.social/@SpaghetMeNot) --- # Changelog - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/2.0/changelog/#changelog) Changelog[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/changelog/#changelog "Permanent link") =================================================================================================== 2.0.2[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/changelog/#202 "Permanent link") ----------------------------------------------------------------------------------------- ### Asset Library[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/changelog/#asset-library "Permanent link") * [Solidify Pro](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/solidify_pro/) : * Fixed bevel weights getting broken on resulting mesh (tooling to control this coming in 2.1). * [Symmetrize](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/symmetrize/) : * Fixed incorrect normals when custom normals are stored as tangents. 2.0.0[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/changelog/#200 "Permanent link") ----------------------------------------------------------------------------------------- ### New Modifiers[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/changelog/#new-modifiers "Permanent link") * [Cut Groove](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/cut_groove/) : Cuts a V-shaped groove or gap where other meshes intersect. * [Solidify Pro](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/solidify_pro/) : Solidify meshes with advanced profile control. Supports custom normals. * [Offset Surface](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/offset_surface/) : Offset the surface of a mesh. * [Boolean Extrude](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_extrude/) : Extrude area of Boolean intersection area in or out. * [Boolean Trim](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_trim/) : Cut and 'trim' a mesh with single-sided cutter objects. ### Existing Modifiers[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/changelog/#existing-modifiers "Permanent link") * Surface Project renamed to [Project to Surface](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/project_to_surface/) : * Added Color debug options for projection and normal masks. * [Surface Insert](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/surface_insert/) : * Added "Instances" option to insert mesh panel. You can now: * Realize instances and insert using their local transform (if applicable). * Realize instances and insert using their parent insert object's transform (if applicable). * Keep instances, maintain their relative position to the nearest insert geometry. * Debug Color for projection and normal masks. * Surface Boolean is now optional. * Added "Boolean Caps" menu to help with certain edge cases. * [Boolean Pro](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_pro/) : * Has multi-object input like other mesh modifiers. * New "Non-manifold fallback" solver option. * Output attributes for boundary edges and slice faces. * [Face Weighted Normals](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/face_weighted_normals/) : * Now takes into account corner angle. Triangulated meshes now have better weighting. * [Symmetrize](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/symmetrize/) : * Added support for mirroring instances. * Added option to convert geometry to an instance before mirroring. This works well when using the object as an insert mesh with [Surface Insert](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/surface_insert/) . ### Pro Add-on[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/changelog/#pro-add-on "Permanent link") * Single file download/install for normalMagic Pro (Asset library is now packaged with the add-on) * [Surface Integration](https://spaghetmenot.github.io/normalmagic/2.0/add-on/surface_integration/) . New panel, contains operators for: * [Surface Insert](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/surface_insert/) * [Project to Surface](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/project_to_surface/) * [Modifier References](https://spaghetmenot.github.io/normalmagic/2.0/add-on/modifier_references/) . New panel: show/hide, select/deselect, apply/delete objects referenced by modfiers on the active object. * [Object Display](https://spaghetmenot.github.io/normalmagic/2.0/add-on/object_display/) . New panel to manage object visibility. * [Boolean Pro Panel](https://spaghetmenot.github.io/normalmagic/2.0/add-on/boolean_pro/) * "Advanced Boolean" sub-panel contains new operators: * [Boolean Extrude](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_extrude/) * [Boolean Trim](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/boolean_trim/) * [Cut Groove](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/cut_groove/) * Modifier Settings now handled by the [modifier defaults](https://spaghetmenot.github.io/normalmagic/2.0/add-on/modifier_defaults/) system. * [Modifier Header Bar](https://spaghetmenot.github.io/normalmagic/2.0/add-on/modifier_header/) . Quickly apply modifiers and manage modifier references from the modifier properties panel. * [Modifier Defaults](https://spaghetmenot.github.io/normalmagic/2.0/add-on/modifier_defaults/) . Save default settings for modifiers added via the add-on. * Added [Symmetrize](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/symmetrize/) and [Mark Sharp](https://spaghetmenot.github.io/normalmagic/2.0/other_tools/mark_sharp/) operators. They are in the modifier header bar by default. * All operators now support more than 6 cutters/inserts at a time. * * * 1.1[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/changelog/#11 "Permanent link") -------------------------------------------------------------------------------------- ### Asset Library[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/changelog/#asset-library_1 "Permanent link") * [Surface Project](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/surface_project/) : Complete refactor to better match the options on Surface Insert. * Introduced "Wrap" Mode. * Option to turn off normal transfer. * [Surface Insert](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/surface_insert/) : * Renamed "Projection Origin" to "Base Height". * "Base Height" no longer shows when in "Blend to Surface" mode. * Fixed Cases where cutters would be flipped when generated causing several bugs. * Refactored height calculation β€” should be no change to behavior. * Added Debug for projection direction. * Cleaned up all attributes created by modifier. * New Modifier: [Symmetrize](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/symmetrize/) : * Mirror-like modifier for single axis symmetry. * Works with custom normals. * Local/Global/Object space mirroring. * [Repair Mirrored Normals](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/repair_mirrored_normals/) : * Added Mirror Object option. * New Modifier: [Change Materials](https://spaghetmenot.github.io/normalmagic/2.0/other_tools/change_materials/) : * Assign materials or material indices to face selections. * New Modifier: [Lock Normals](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/lock_normals/) : * Creates custom normals if none exist. * Allows converting normals to "Tangent Space" which allows for deformation after setting. * New Manual Tool: [Add Custom Normals](https://spaghetmenot.github.io/normalmagic/2.0/manual_tools/add_custom_normals/) : * Tool version of "Lock Normals" for Object and Edit Mesh modes. * [Normal Transfer](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/normal_transfer/) : * Improving sharp edges appearing when transferring normals on small meshes. * [Smooth Normals](https://spaghetmenot.github.io/normalmagic/2.0/normal_tools/smooth_normals/) : * Fixed broken normals on very small meshes. ### Add-on[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/changelog/#add-on "Permanent link") * Moved "Link Split Mesh" next to the "Split" Button. * Moved "Refresh" button above "Add Asset Library" to encourage use. * "Add Asset Library" now runs the "Refresh" operator to avoid adding the same library twice. * Fixed error when cutter collection is hidden/disabled. * Added "No Change" option to cutter display options. * Fixed cutters moving when using the redo panel. This occurred when parenting was on. * Now allows example file to live in the same folder as the asset library. --- # Install - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/2.0/install/#install) Install[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/install/#install "Permanent link") ============================================================================================= To install normalMagic please see the relevant section for your version: [**Base Version**](https://spaghetmenot.github.io/normalmagic/2.0/install/#base-version-asset-library) is installed as an **asset library.** [**Pro Version**](https://spaghetmenot.github.io/normalmagic/2.0/install/#pro-version-add-on) is installed as an **add-on** (that is packaged with the asset library). Base Version (Asset Library)[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/install/#base-version-asset-library "Permanent link") ------------------------------------------------------------------------------------------------------------------------------------- The Base version of normalMagic is installed as an **asset library**, not an add-on. TLDR Download the **.zip**, extract to a folder, add the folder as an asset library. For more detailed instructions see below. For more information on asset libraries you can check Blender's [Official Documentation](https://docs.blender.org/manual/en/dev/files/asset_libraries/introduction.html#introduction) ### First Time Install[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/install/#first-time-install "Permanent link") 1. Download latest .zip file for the closest Blender version (_normalMagic 4.5 v1.0.blend_). 2. Unzip/extract to a folder in your desired location. 3. Open Blender and go to **Edit/Preferences/File Paths/Asset Libraries.** 4. Click + Add Asset Library. [![install_1](https://spaghetmenot.github.io/normalmagic/2.0/assets/install/install_1.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/install/install_1.png) 5. Navigate to the unzipped folder and press **Add Asset Library**. [![install_2](https://spaghetmenot.github.io/normalmagic/2.0/assets/install/install_2.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/install/install_2.png) 6. You should now see "normalMagic" in your asset libraries. **Optional**: Here you can choose how the data is imported by default. Setting this to **Pack** or **Link** will make it easier to update versions. **Link** will also reduce file sizes. See the [Official Documentation](https://docs.blender.org/manual/en/latest/editors/asset_browser.html#import-settings) for more information. [![install_3](https://spaghetmenot.github.io/normalmagic/2.0/assets/install/install_3.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/install/install_3.png) normalMagic should now be installed. Modifiers will now show up under the **Add Modifier** menu: [![install_check](https://spaghetmenot.github.io/normalmagic/2.0/assets/install/add_modifier.gif)](https://spaghetmenot.github.io/normalmagic/2.0/assets/install/add_modifier.gif) ### Update Asset Library[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/install/#update-asset-library "Permanent link") To update to a newer version of the normalMagic asset library: 1. Remove existing asset library under **Edit/Preferences/File Paths/Asset Libraries.** 2. Repeat [install instructions](https://spaghetmenot.github.io/normalmagic/2.0/install/#first-time-install) to add new version. Alternatively you could replace the files in the existing library with the newer ones. * * * Pro Version (Add-on)[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/install/#pro-version-add-on "Permanent link") --------------------------------------------------------------------------------------------------------------------- The Pro version of normalMagic is installed as an add-on. The asset library is now packaged with the add-on and can be set up with a single click. TLDR * Download the add-on **.zip** file and drag it into Blender's viewport. * Click "Automatic Install" to set up the asset library. (Recommended) Remove Existing Asset Libraries Updating from 1.x versions will require removing the existing asset library from **Edit/Preference/File Paths/Asset Libraries**. ### Install Add-on[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/install/#install-add-on "Permanent link") To install/update the add-on simply: 1. Download the latest "addon" .zip file. 2. Drag the .zip file into Blender and press OK. [![install_addon](https://spaghetmenot.github.io/normalmagic/2.0/assets/install/install_addon.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/install/install_addon.png) You should now see a "Normal Magic" tab in the sidebar of the 3D viewport. [![addon panel](https://spaghetmenot.github.io/normalmagic/2.0/assets/install/sidebar_1.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/install/sidebar_1.png) 3. Press Automatic Install to install the asset library from the add-on\* (recommended). or Open Preferences to add the asset library from elsewhere (See the next section). \* if you don't see this option make sure to remove old versions of the asset library before repeating the install steps. ### Custom Asset Library Location[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/install/#custom-asset-library-location "Permanent link") It is advised to install the asset library from the add-on to keep them in sync. However, if you want your asset library imported from another location follow the instructions below. 1. Remove any existing normalMagic asset libraries from **Edit/Preferences/Filepaths**. 2. Install the asset library. * Through the Choose Asset Library button in the add-on's Preferences. * Through **Edit/Preferences/Filepaths** (see [Base Version](https://spaghetmenot.github.io/normalmagic/2.0/install/#base-version-asset-library) instructions). 3. Refresh Asset library location. (Alternatively you can disable/re-enable the add-on or restart Blender). [![refresh](https://spaghetmenot.github.io/normalmagic/2.0/assets/install/refresh_library.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/install/refresh_library.png) ### Update Add-on[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/install/#update-add-on "Permanent link") 1. Drag the new .zip file into Blender, this will update the existing version. 2. Press "Automatic Install" to set up the new asset library. If you are using a custom asset library location this will need updating manually. * * * Update Existing Scenes[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/install/#update-existing-scenes "Permanent link") --------------------------------------------------------------------------------------------------------------------------- Modifiers that already exist in scenes might need updating depending on your asset library setup. ### Linked/Packed Library[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/install/#linkedpacked-library "Permanent link") Update modifiers in existing scenes if **library is set to "Link"**: 1. Go to the outliner and change the view to "Blend File". 2. Locate the normalMagic file. 3. Right Click/Relocate. 4. Select .blend file in the current asset library path. [![Relocate Library](https://spaghetmenot.github.io/normalmagic/2.0/assets/install/relocate_library.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/install/relocate_library.png) ### Appended Library[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/install/#appended-library "Permanent link") Update modifiers in existing scenes if **library is set to "Append"**: 1. Add new version of modifier somewhere in your scene. 2. Go to the outliner and change the view to "Blend File". 3. Find the modifier under "Node Groups". 4. Right Click/Remap Users. 5. Select the newer version (most likely called ".001"). [![Remap Modifiers](https://spaghetmenot.github.io/normalmagic/2.0/assets/install/remap_modifiers.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/install/remap_modifiers.png) --- # Surface Insert - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/surface_insert/#surface-insert) Surface Insert[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/surface_insert/#surface-insert "Permanent link") ============================================================================================================================= [![Surface Insert Icon](https://spaghetmenot.github.io/normalmagic/2.0/assets/icons/surface_insert6.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/icons/surface_insert6.png) Seamlessly join **insert meshes** into the surface of a mesh. Unlike [Project to Surface](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/project_to_surface/) , this modifier is added to the main surface in order to be able to cut and weld the surface geometry. An **insert mesh** can be thought of as a "decal", "patch" or "plug". Examples[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/surface_insert/#examples "Permanent link") ----------------------------------------------------------------------------------------------------------------- Be sure to check out the [examples file](https://spaghetmenot.github.io/normalmagic/2.0/examples/) to see Project to Surface in action. [![project_to_surface_examples](https://spaghetmenot.github.io/normalmagic/2.0/assets/examples/surface_project_insert.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/examples/surface_project_insert.png) Overview[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/surface_insert/#overview "Permanent link") ----------------------------------------------------------------------------------------------------------------- There are two primary ways of performing the insert operation: * [![Wrap to Surface](https://spaghetmenot.github.io/normalmagic/2.0/assets/surface_insert/wrap_to_surface.gif)](https://spaghetmenot.github.io/normalmagic/2.0/assets/surface_insert/wrap_to_surface.gif) **Wrap to Surface** Warp geometry to match the underlying surface. * [![Mirrored Unflipped](https://spaghetmenot.github.io/normalmagic/2.0/assets/surface_insert/blend_to_surface.gif)](https://spaghetmenot.github.io/normalmagic/2.0/assets/surface_insert/blend_to_surface.gif) **Blend to Surface** Keep world position of geometry and blend to surface via masking. This allows you to keep flat surfaces inside the insert mesh. The **Surface Insert** Modifier performs the following steps: 1. Insert meshes are projected to surface geometry using one of the above methods. 2. Normals, materials and UVs are transferred from the original surface to the insert meshes. 3. The surface is cut and removed where insert mesh open edges are. 4. Vertices are matched on both sides of the seam and welded. Mesh Islands Insert meshes are performed per mesh island. Only mesh islands with **open edges** will be cut and welded into the original surface. * Manifold (solid) mesh islands can be projected but won't affect the underlying surface geometry. * Mesh islands that miss a raycast will be skipped entirely and a warning will show on the modifier. Requirements[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/surface_insert/#requirements "Permanent link") ------------------------------------------------------------------------------------------------------------------------- 1. A receiving mesh object. This will have the modifier on it. 2. An insert mesh with open edges. This will be projected, cut and welded into the surface of the receiving mesh. 3. Insert mesh cannot partially cut into surface, it has to be fully surrounded. Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/surface_insert/#options "Permanent link") --------------------------------------------------------------------------------------------------------------- ### Insert Meshes[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/surface_insert/#insert-meshes "Permanent link") This section specifies which meshes to insert. * **Objects/Collection:** Choose individual mesh objects or a collection containing mesh objects. * **Object Count:** How many mesh objects to insert (when in **_Objects_** mode). * **Instances:** How to handle instances in insert geometry: * **Realize, Use Transforms:** Realize instances and use their local transforms (if projection direction is "Insert Direction"). * **Realize, Ignore Transforms:** Realize instances and use their parent insert object's transform (if projection direction is "Insert Direction"). * **Stick to Insert Mesh:** Keep instances and maintain their relative position to the nearest insert geometry. ### Insert Mesh Projection[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/surface_insert/#insert-mesh-projection "Permanent link") * **Method:** How to project the insert meshes to the underlying surface: * **Wrap to Surface:** Warp geometry to match the underlying surface. * **Blend with Surface:** Warp geometry to match the underlying surface. * **Projection Direction:** Which direction to project insert mesh(es). * **Mesh Island Normal:** Use average mesh island normal * **Insert Direction:** Specify a direction in the space of each insert object. * **Object Direction:** Specify a direction in the space of receiving object. * **Base Height.** Where to use as the origin of the insert object. This will affect how the objects height is calculated for re-projection. * **Boundary Center:** Use average position of mesh boundary. * **Object Origin:** Use insert mesh origin. * **Height Offset.** Offsets insert mesh away from surface by a specified height. * **Ray Length.** Maximum distance an insert mesh can have an effect. Increase #### Projection Masking[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/surface_insert/#projection-masking "Permanent link") This section controls masking the projection of insert meshes to the surface. This is most useful when using **_Blend with Surface_**. [![falloff](https://spaghetmenot.github.io/normalmagic/2.0/assets/surface_insert/falloff.gif)](https://spaghetmenot.github.io/normalmagic/2.0/assets/surface_insert/falloff.gif) Controlling falloff is covered [here](https://spaghetmenot.github.io/normalmagic/2.0/common_settings/#mask-falloff) #### Insert Mesh Normals[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/surface_insert/#insert-mesh-normals "Permanent link") This section controls how much of the surface normals are transferred to the insert mesh. This is most useful when using **_Blend with Surface_**. * **Normal Masking** * **Projection Mask**. Use the same mask falloff as the projection * **New Mask**. Create a new mask for normals * **Recalculate Blend Normals.** Only available when using **Blend with Surface**. This will recalculate the normals on the blended portion of the insert mesh before transferring any from the surface. * **Match Boundary Normals.** When choosing **_New Mask_** this will make sure the boundary edge of the insert mesh matches the normals on the underlying surface. Turn off to create a hard edge. If **_New Mask_** is chosen, the settings for the falloff will appear below. Controlling falloff is covered [here](https://spaghetmenot.github.io/normalmagic/2.0/common_settings/#mask-falloff) ### Surface Boolean[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/surface_insert/#surface-boolean "Permanent link") This section controls how the surface is cut for the insert mesh. Turn off if you don't wish to merge surface, this will make the modifier act like [Project to Surface](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/project_to_surface/) . To avoid guess-work it's often best to tweak these settings when viewing the "Boolean Cutters" [debug view](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/surface_insert/#debug) . * **Weld Surfaces.** Welds vertices between the surface and insert mesh. Turning this off will leave them as separate mesh islands. * **Weld Distance.** Distance at which to weld vertices, this takes effect at several points during the process, not just the final weld between surface and insert mesh. * **Triangulate Blend Polys:** Triangulate ngons created between the original surface and insert geometry. * **Cutting Edges:** Edge group that, if present, will limit which edges will cut into the surface. By default all open edges will cut but you can use an edge group to specify edges. * **Boolean Caps:** How to generate boolean end caps. This can allow for complex insert meshes: * **Allow Holes:** Allow insert geometry to have holes. E.g.A circular strip of mesh to make a panel line where the center remains the original surface. * **Allow Tubes:** Insert geometry joins the surface at multiple points. E.g. A handle that joins the surface in two places. * **Flatten Insert Mesh:** Flatten and use insert geometry as the boolean end caps. Can break when there are overhangs but can handle curvature in tight spaces better than the other methods. * **Boolean Extrusion.** How far to extrude the cutter shape from the surface. You might need to increase this value if the insert mesh covers a large area of curvature. You can preview cutters in the [Debug](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/surface_insert/#debug) panel. [![Boolean Extrusion](https://spaghetmenot.github.io/normalmagic/2.0/assets/surface_insert/boolean_extrusion.gif)](https://spaghetmenot.github.io/normalmagic/2.0/assets/surface_insert/boolean_extrusion.gif) * **Boolean Offset.** Offset the Boolean cutter outside the surface. This only effects the "top" of the cutter and will also help when an insert mesh covers a large area of curvature. You can preview cutters in the [Debug](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/surface_insert/#debug) panel. * **Non-Manifold Solver.** Which boolean solver to use when surface mesh is not manifold. Keep this as **_Float_** for most situations. * **Float.** Faster and in a lot of cases more accurate when matching surface points. * **Exact.** Much slower and rarely better. Included "just in case" it helps in rare cases. ### Materials[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/surface_insert/#materials "Permanent link") This section controls how materials and UVs are transferred from the surface to the insert meshes * **Transfer Surface Material.** How to transfer materials from the surface to the insert mesh. * **None.** Don't transfer any materials. * **Boundary Material.** Transfer the material island(s) that touch open edges. * **All.** Overwrite all insert mesh materials with those on the surface. * **Transfer Material UVs.** Transfer UV Maps for the transferred materials. * **UV Map.** Which UV map to transfer. ### Debug[ΒΆ](https://spaghetmenot.github.io/normalmagic/2.0/mesh_tools/surface_insert/#debug "Permanent link") This section lets you inspect steps of the process if the modifier isn't behaving as expected. * **View.** Outputs geometry from different points in the node graph. Warning This changes the output of the graph, make sure to turn off when done inspecting. * **None.** Output standard result, no debugging. * **Boolean Cutters.** Output the shapes used to cut the surface. * **Skipped Insert Islands.** Output any mesh islands that did not project due to missed ray casts. * [![Boolean Cutters](https://spaghetmenot.github.io/normalmagic/2.0/assets/surface_insert/debug_cutters.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/surface_insert/debug_cutters.png) Debug Cutters * [![Skipped Islands](https://spaghetmenot.github.io/normalmagic/2.0/assets/surface_insert/debug_skipped_islands.png)](https://spaghetmenot.github.io/normalmagic/2.0/assets/surface_insert/debug_skipped_islands.png) Debug Skipped Insert Islands --- # normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.0/#normalmagic-home) normalMagic Home[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/#normalmagic-home "Permanent link") ======================================================================================================= Welcome to the **normalMagic** documentation. Here you'll find everything there is to know about the tools. * [Install normalMagic](https://spaghetmenot.github.io/normalmagic/1.0/install/) * [Examples](https://spaghetmenot.github.io/normalmagic/1.0/examples/) What is normalMagic?[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/#what-is-normalmagic "Permanent link") -------------------------------------------------------------------------------------------------------------- normalMagic is a collection of tools for [Blender](https://www.blender.org/) that offer powerful new modelling workflows and advanced control over mesh normals. [![all_tools](https://spaghetmenot.github.io/normalmagic/1.0/assets/all_tools.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/all_tools.png) Controlling normals can be essential for creating high quality 3D artwork. Hard surfaces, organic shapes, foliage, hair and fur can benefit from modifying normals. Sometimes it's the only way to get surfaces shading the way you want. Custom Normals Most of these tools create or edit **_custom normals_**. Once custom normals exist on a mesh, some default Blender tools/modifiers might not behave as expected. Tools are included to fix situations such as [mirroring](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/repair_mirrored_normals/) or [beveling](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/repair_bevel_normals/) but it is something to be aware of. See this video for more information: [Custom Normal Issues](https://youtu.be/NoISc01URHg?si=s6NedSzDIFr30zOe) [Buy on Superhive](https://spaghetmenot.gumroad.com/l/normalmagic) [Buy on Gumroad](https://spaghetmenot.gumroad.com/l/normalmagic) Tool Highlights[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/#tool-highlights "Permanent link") ----------------------------------------------------------------------------------------------------- ### **Perfect boolean normals**[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/#perfect-boolean-normals "Permanent link") * Completely avoid boolean normal issues with [Boolean Pro](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/boolean_pro/) . * Repair normals on previously cut geometry with [Repair Boolean Normals](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/repair_boolean_normals/) . ### **Seamlessly blend surfaces**[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/#seamlessly-blend-surfaces "Permanent link") * Project positions, normals and UVs with [Surface Project](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/surface_project/) . * Merge, cut and weld projected meshes into a surface with [Surface Insert](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/surface_insert/) . Convenient auto-masking options means no need for creating and managing vertex groups. Sharp edges can be preserved and transferred. ### **Smooth and Transfer Normals**[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/#smooth-and-transfer-normals "Permanent link") * Smooth and flatten normals normals to improve shading, achieve good toon lighting or for cheap subsurface scattering effects with [Smooth Normals](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/smooth_normals/) . * Transfer and blend normals between unconnected meshes using [Normal Transfer](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/normal_transfer/) . Contact[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/#contact "Permanent link") ------------------------------------------------------------------------------------- If anything is unclear or missing, please reach out! [spaghetTools Discord](https://discord.gg/CtpZWGHFhG) [spaghetmenot@gmail.com](mailto:spaghetmenot@gmail.com) [@spaghetmenot.bsky.social](https://bsky.app/profile/spaghetmenot.bsky.social) [@SpaghetMeNot@mastodon.social](https://mastodon.social/@SpaghetMeNot) --- # normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.1/#normalmagic-home) normalMagic Home[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/#normalmagic-home "Permanent link") ======================================================================================================= Welcome to the **normalMagic** documentation. Here you'll find everything there is to know about the tools. * [Install normalMagic](https://spaghetmenot.github.io/normalmagic/1.1/install/) * [Examples](https://spaghetmenot.github.io/normalmagic/1.1/examples/) What is normalMagic?[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/#what-is-normalmagic "Permanent link") -------------------------------------------------------------------------------------------------------------- normalMagic is a collection of tools for [Blender](https://www.blender.org/) that offer powerful new modelling workflows and advanced control over mesh normals. [![all_tools](https://spaghetmenot.github.io/normalmagic/1.1/assets/all_tools.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/all_tools.png) Controlling normals can be essential for creating high quality 3D artwork. Hard surfaces, organic shapes, foliage, hair and fur can benefit from modifying normals. Sometimes it's the only way to get surfaces shading the way you want. Custom Normals Most of these tools create or edit **_custom normals_**. Once custom normals exist on a mesh, some default Blender tools/modifiers might not behave as expected. Tools are included to fix situations such as [mirroring](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/repair_mirrored_normals/) or [beveling](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/repair_bevel_normals/) but it is something to be aware of. See this video for more information: [Custom Normal Issues](https://youtu.be/NoISc01URHg?si=s6NedSzDIFr30zOe) [Buy on Superhive](https://superhivemarket.com/products/normalmagic) [Buy on Gumroad](https://spaghetmenot.gumroad.com/l/normalmagic) Tool Highlights[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/#tool-highlights "Permanent link") ----------------------------------------------------------------------------------------------------- ### **Perfect boolean normals**[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/#perfect-boolean-normals "Permanent link") * Completely avoid boolean normal issues with [Boolean Pro](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/boolean_pro/) . * Repair normals on previously cut geometry with [Repair Boolean Normals](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/repair_boolean_normals/) . ### **Seamlessly blend surfaces**[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/#seamlessly-blend-surfaces "Permanent link") * Project positions, normals and UVs with [Surface Project](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/surface_project/) . * Merge, cut and weld projected meshes into a surface with [Surface Insert](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/surface_insert/) . Convenient auto-masking options means no need for creating and managing vertex groups. Sharp edges can be preserved and transferred. ### **Smooth and Transfer Normals**[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/#smooth-and-transfer-normals "Permanent link") * Smooth and flatten normals normals to improve shading, achieve good toon lighting or for cheap subsurface scattering effects with [Smooth Normals](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/smooth_normals/) . * Transfer and blend normals between unconnected meshes using [Normal Transfer](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/normal_transfer/) . Contact[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/#contact "Permanent link") ------------------------------------------------------------------------------------- If anything is unclear or missing, please reach out! [spaghetTools Discord](https://discord.gg/CtpZWGHFhG) [spaghetmenot@gmail.com](mailto:spaghetmenot@gmail.com) [@spaghetmenot.bsky.social](https://bsky.app/profile/spaghetmenot.bsky.social) [@SpaghetMeNot@mastodon.social](https://mastodon.social/@SpaghetMeNot) --- # normalMagic 2.0 - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/#normalmagic-20) normalMagic 2.0[ΒΆ](https://spaghetmenot.github.io/normalmagic/#normalmagic-20 "Permanent link") ================================================================================================ Welcome to the **normalMagic** documentation. Here you'll find everything there is to know about the tools. Blender 5.0 Required normalMagic 2.0 requires **Blender 5.0** or higher. For 4.5 support please use version [1.1](https://spaghetmenot.github.io/normalmagic/1.1/) * [Install normalMagic](https://spaghetmenot.github.io/normalmagic/install/) * [Examples](https://spaghetmenot.github.io/normalmagic/examples/) Quick Links[ΒΆ](https://spaghetmenot.github.io/normalmagic/#quick-links "Permanent link") ----------------------------------------------------------------------------------------- * [Mesh Modifiers](https://spaghetmenot.github.io/normalmagic/mesh_tools/) * [Normal Modifiers](https://spaghetmenot.github.io/normalmagic/normal_tools/) * [Visualize Modifiers](https://spaghetmenot.github.io/normalmagic/visualize_tools/) * [Other Modifiers](https://spaghetmenot.github.io/normalmagic/other_tools/) What is normalMagic?[ΒΆ](https://spaghetmenot.github.io/normalmagic/#what-is-normalmagic "Permanent link") ---------------------------------------------------------------------------------------------------------- normalMagic is a collection of tools for [Blender](https://www.blender.org/) that offer powerful new modelling workflows and advanced control over mesh normals. [![all_tools](https://spaghetmenot.github.io/normalmagic/assets/all_tools_2.png)](https://spaghetmenot.github.io/normalmagic/assets/all_tools_2.png) Controlling normals can be essential for creating high quality 3D artwork. Hard surfaces, organic shapes, foliage, hair and fur can benefit from modifying normals. Sometimes it's the only way to get surfaces shading the way you want. Custom Normals Most of these tools create or edit **_custom normals_**. Once custom normals exist on a mesh, some default Blender tools/modifiers might not behave as expected. Tools are included to fix situations such as [mirroring](https://spaghetmenot.github.io/normalmagic/normal_tools/repair_mirrored_normals/) or [beveling](https://spaghetmenot.github.io/normalmagic/normal_tools/repair_bevel_normals/) but it is something to be aware of. See this video for more information: [Custom Normal Issues](https://youtu.be/NoISc01URHg?si=s6NedSzDIFr30zOe) [Buy on Superhive](https://superhivemarket.com/products/normalmagic) [Buy on Gumroad](https://spaghetmenot.gumroad.com/l/normalmagic) Tool Highlights[ΒΆ](https://spaghetmenot.github.io/normalmagic/#tool-highlights "Permanent link") ------------------------------------------------------------------------------------------------- ### **Advanced Booleans, perfect normals**[ΒΆ](https://spaghetmenot.github.io/normalmagic/#advanced-booleans-perfect-normals "Permanent link") * Completely avoid boolean normal issues with [Boolean Pro](https://spaghetmenot.github.io/normalmagic/mesh_tools/boolean_pro/) . * Repair normals on previously cut geometry with [Repair Boolean Normals](https://spaghetmenot.github.io/normalmagic/normal_tools/repair_boolean_normals/) . * Perform advanced Boolean operations with [Boolean Extrude](https://spaghetmenot.github.io/normalmagic/mesh_tools/boolean_extrude/) , [Boolean Trim](https://spaghetmenot.github.io/normalmagic/mesh_tools/boolean_trim/) and [Cut Groove](https://spaghetmenot.github.io/normalmagic/mesh_tools/cut_groove/) . ### **Seamlessly blend surfaces**[ΒΆ](https://spaghetmenot.github.io/normalmagic/#seamlessly-blend-surfaces "Permanent link") * Project positions, normals and UVs with [Project to Surface](https://spaghetmenot.github.io/normalmagic/mesh_tools/project_to_surface/) . * Merge, cut and weld projected meshes into a surface with [Surface Insert](https://spaghetmenot.github.io/normalmagic/mesh_tools/surface_insert/) . Convenient auto-masking options means no need for creating and managing vertex groups. Sharp edges can be preserved and transferred. ### **Smooth and Transfer Normals**[ΒΆ](https://spaghetmenot.github.io/normalmagic/#smooth-and-transfer-normals "Permanent link") * Smooth and flatten normals normals to improve shading, achieve good toon lighting or for cheap subsurface scattering effects with [Smooth Normals](https://spaghetmenot.github.io/normalmagic/normal_tools/smooth_normals/) . * Transfer and blend normals between unconnected meshes using [Normal Transfer](https://spaghetmenot.github.io/normalmagic/normal_tools/normal_transfer/) . What's New in 2.0?[ΒΆ](https://spaghetmenot.github.io/normalmagic/#whats-new-in-20 "Permanent link") ---------------------------------------------------------------------------------------------------- Contact[ΒΆ](https://spaghetmenot.github.io/normalmagic/#contact "Permanent link") --------------------------------------------------------------------------------- If anything is unclear or missing, please reach out! [spaghetTools Discord](https://discord.gg/CtpZWGHFhG) [spaghetmenot@gmail.com](mailto:spaghetmenot@gmail.com) [@spaghetmenot.bsky.social](https://bsky.app/profile/spaghetmenot.bsky.social) [@SpaghetMeNot@mastodon.social](https://mastodon.social/@SpaghetMeNot) --- # Tools Overview - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.0/tools_overview/#tools-overview) Tools Overview[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/tools_overview/#tools-overview "Permanent link") ================================================================================================================== Custom Normals Most of these tools create or edit **_custom normals_**. These can be unintuitive to work with if you're unfamiliar with them. Once custom normals exist on a mesh, some default Blender tools/modifiers might not behave as expected. Tools are included to fix situations such as [mirroring](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/repair_mirrored_normals/) or [beveling](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/repair_bevel_normals/) but it is something to be aware of. Asset Library[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/tools_overview/#asset-library "Permanent link") ---------------------------------------------------------------------------------------------------------------- The core of normalMagic is an asset library. You will find links to all the tools in the sidebar under the following categories: * [Mesh Modifiers](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/) * [Normal Modifiers](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/) * [Visualize Modifiers](https://spaghetmenot.github.io/normalmagic/1.0/visualize_tools/) * [Other Modifiers](https://spaghetmenot.github.io/normalmagic/1.0/other_tools/) * [Manual Tools](https://spaghetmenot.github.io/normalmagic/1.0/manual_tools/) Add-on[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/tools_overview/#add-on "Permanent link") -------------------------------------------------------------------------------------------------- Included with the Pro version, the add-on makes it easier to set up some of the modifiers. [Add-on Documentation](https://spaghetmenot.github.io/normalmagic/1.0/add-on/) --- # Licensing - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.0/licensing/#licensing) Licensing[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/licensing/#licensing "Permanent link") =================================================================================================== Individual Licenses[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/licensing/#individual-licenses "Permanent link") ----------------------------------------------------------------------------------------------------------------------- For an individual purchasing normalMagic, licenses are as follows: * Asset Library: [Standard Royalty Free License](https://spaghetmenot.github.io/normalmagic/1.0/licensing/#standard-royalty-free-license) . * Add-on (Pro version): [GNU General Public License](https://www.gnu.org/licenses/gpl-3.0.html) . Team / Studio Licenses[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/licensing/#team-studio-licenses "Permanent link") --------------------------------------------------------------------------------------------------------------------------- For teams/studios the number of people that use normalMagic is limited by the version purchased. The following team sizes are available: * Small Studio: up to 9 users. * Large Studio: 10-20 users. For teams that exceed 20 users, additional licenses should be purchased. This only applies to the asset library's [Standard Royalty Free License](https://spaghetmenot.github.io/normalmagic/1.0/licensing/#standard-royalty-free-license) . The licensing is as follows: * Asset Library: [Standard Royalty Free License](https://spaghetmenot.github.io/normalmagic/1.0/licensing/#standard-royalty-free-license) . * Add-on: [GNU General Public License](https://www.gnu.org/licenses/gpl-3.0.html) . Early Access Customers For Studios that bought early access copies: individual licenses can be transferred into a studio license per request. This will discount the studio license by the price paid for each individual license. Standard Royalty Free License[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/licensing/#standard-royalty-free-license "Permanent link") ------------------------------------------------------------------------------------------------------------------------------------------- The Standard Royalty Free license grants you, the purchaser, the ability to make use of the purchased product for personal, educational, or commercial purposes as long as those purposes do not violate the following: * You may not resell, redistribute, or repackage the purchased product without explicit permission from the original author. GNU General Public License[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/licensing/#gnu-general-public-license "Permanent link") ------------------------------------------------------------------------------------------------------------------------------------- Please find the GNU/GPL license here: [https://www.gnu.org/licenses/gpl-3.0.html](https://www.gnu.org/licenses/gpl-3.0.html) . --- # Boolean Pro - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/boolean_pro/#boolean-pro) Boolean Pro[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/boolean_pro/#boolean-pro "Permanent link") ==================================================================================================================== [![Boolean Pro Icon](https://spaghetmenot.github.io/normalmagic/1.0/assets/icons/boolean_cut_7_sparkles.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/icons/boolean_cut_7_sparkles.png) Boolean Pro is designed to act as a replacement for Blender's built-in boolean modifier, and provides extra functionality. For reference, documentation for Blender's built-in modifier can be found [here](https://docs.blender.org/manual/en/latest/modeling/modifiers/generate/booleans.html) . Add-on The [normalMagic Add-on](https://spaghetmenot.github.io/normalmagic/1.0/add-on/) includes operators to quickly set up the Boolean Pro modifier, similar to the Bool Tool add-on. The most powerful feature is transferring the normals automatically from boolean inputs for perfect boolean normals: [![Perfect Boolean Normals](https://spaghetmenot.github.io/normalmagic/1.0/assets/bool_pro_1.gif)](https://spaghetmenot.github.io/normalmagic/1.0/assets/bool_pro_1.gif) The cutter object can be given an outset (expanded) with even thickness before cutting: [![Expand Boolean](https://spaghetmenot.github.io/normalmagic/1.0/assets/booleans/bool_expand.gif)](https://spaghetmenot.github.io/normalmagic/1.0/assets/booleans/bool_expand.gif) There is also a **_Slice_** operation with optional inset: | Intersect | Union | Difference | Slice | | --- | --- | --- | --- | | [![Intersect](https://spaghetmenot.github.io/normalmagic/1.0/assets/booleans/bool_intersect.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/booleans/bool_intersect.png) | [![Union](https://spaghetmenot.github.io/normalmagic/1.0/assets/booleans/bool_union.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/booleans/bool_union.png) | [![Difference](https://spaghetmenot.github.io/normalmagic/1.0/assets/booleans/bool_diff.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/booleans/bool_diff.png) | [![Slice](https://spaghetmenot.github.io/normalmagic/1.0/assets/booleans/bool_slice.gif)](https://spaghetmenot.github.io/normalmagic/1.0/assets/booleans/bool_slice.gif) | Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/boolean_pro/#options "Permanent link") ------------------------------------------------------------------------------------------------------------ ### Main[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/boolean_pro/#main "Permanent link") * **Operation:** Which boolean operation to perform. * **Intersect:** Keep the part of the mesh that is shared between inputs. * **Union:** Combine input meshes into a single mesh. * **Difference:** (Default) Subtract input meshes from source mesh. * **Slice:** Slice source mesh with input meshes. This combines "Intersect" and "Difference" into the same output. * **Object:** Mesh object to use for boolean operation. * **Collection:** Collection containing mesh objects to use for boolean operation. * **Solver:** * **Float:** Simple solver with good performance. * **Exact:** Slower solver with best results on coplanar faces. * **Manifold:** (Default) Fastest solver that only works on manifold meshes, but gives better results. * **Outset:** Expands the cutter mesh with even thickness. * **Inset (Slice Mode):** Offsets the cutter inwards for the intersect boolean to give a gap between meshes. ### Weld[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/boolean_pro/#weld "Permanent link") * **Merge by Distance:** Merge vertices based on distance. * **Distance:** Distance at which to merge vertices. ### Shading[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/boolean_pro/#shading "Permanent link") * **Materials:** How to assign materials to new faces. * **Index Based:** Match material index from boolean meshes. * **Specify:** Specify a material to apply to all new faces. * **Transfer:** Transfer materials from boolean meshes. This might not be accurate when using collections. * **Transfer Normals:** Use normals from input meshes. Produces the best normals. * **Mark Sharp:** Mark all intersection edges between meshes as sharp. ### Solver Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/boolean_pro/#solver-options "Permanent link") * **Result:** Whether to output a solid object or a cut surface. * **Solid:** Output full Boolean result. * **Surface:** Output a cut surface with open edges where new faces would appear. * **Sequential (Float solver only):** Perform Booleans one mesh island at a time. This often gives better results but can be slower. * **Self Intersection (Exact solver only):** Correctly calculates cases when one or both operands have self-intersections. This involves more calculations making the node slower. * **Hole Tolerant:** Optimizes the Boolean output for non-manifold geometry at the cost of increased computational time. Because of the performance impact, this option should only be enabled when the solver demonstrates errors with non-manifold geometry. --- # Surface Project - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/surface_project/#surface-project) Surface Project[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/surface_project/#surface-project "Permanent link") ================================================================================================================================ [![Surface Project](https://spaghetmenot.github.io/normalmagic/1.0/assets/icons/surface_blend_9.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/icons/surface_blend_9.png) Project and blend geometry onto other mesh surfaces. Transfer normals and UVs for a seamless blend. * [![Surface Project 1](https://spaghetmenot.github.io/normalmagic/1.0/assets/surface_project/surface_blend_1.gif)](https://spaghetmenot.github.io/normalmagic/1.0/assets/surface_project/surface_blend_1.gif) Blend a mesh object to other surfaces. Multiple other mesh surfaces can be specified. * [![Surface Project 2](https://spaghetmenot.github.io/normalmagic/1.0/assets/surface_project/surface_blend_2.gif)](https://spaghetmenot.github.io/normalmagic/1.0/assets/surface_project/surface_blend_2.gif) Project mesh as a "Decal" onto other objects. This flattens the geometry but keeps the original normals. Open Edges This modifier works best on meshes with "open edges", i.e. non-solid objects. These edges are used as the base for most [masking methods](https://spaghetmenot.github.io/normalmagic/1.0/common_settings/#mask-falloff) . [![open_edges](https://spaghetmenot.github.io/normalmagic/1.0/assets/surface_project/open_edges.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/surface_project/open_edges.png) Examples[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/surface_project/#examples "Permanent link") ------------------------------------------------------------------------------------------------------------------ Examples can be found in the **Surface Project/Insert** scene in the [example file](https://spaghetmenot.github.io/normalmagic/1.0/examples/) . [![examples](https://spaghetmenot.github.io/normalmagic/1.0/assets/examples/surface_project_insert.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/examples/surface_project_insert.png) Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/surface_project/#options "Permanent link") ---------------------------------------------------------------------------------------------------------------- ### Transfer Objects[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/surface_project/#transfer-objects "Permanent link") Choose which meshes to project to. * **Object Count:** How many mesh objects to project to. * **Objects:** Choose individual mesh objects to project to. * **Collection:** Choose a collection containing mesh objects to project to. ### Shrinkwrap[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/surface_project/#shrinkwrap "Permanent link") Define how mesh is projected to surfaces. * **Wrap Method:** Method for vertex projection: * **Nearest Surface:** Move vertices towards the closest point on target surface. * **Project:** Project rays to collide with target surface. * **Project Decal:** Project rays to collide with target surface and flatten geometry while keeping normals. Excludes projection masking options. * **Surface Offset:** Move projected vertices a fixed amount towards or away from the target surface. #### Projection Settings[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/surface_project/#projection-settings "Permanent link") * **Projection Direction:** Define direction to project rays: * **Object Direction:** Direction in object space (default is -Z). * **World Direction:** Direction in global space (default is -Z). * **Surface Normal:** Surface normal of the closest target surface. * **Mesh Island Normal:** Use the average normal of each mesh island. * **Surface Tangent:** Direction of surface at edge boundaries. * **Ray Length:** Maximum distance rays will collide with target surface. * **No Hit:** Change behavior of vertices when projection rays miss: * **Unchanged:** Do not move vertex. * **Closest Surface to Max Dist:** Move vertex to the maximum distance in ray direction then snap to closest point on target surface. #### Masking[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/surface_project/#masking "Permanent link") Control how projection is masked. See [Mask Falloff](https://spaghetmenot.github.io/normalmagic/1.0/common_settings/#mask-falloff) . [![falloff](https://spaghetmenot.github.io/normalmagic/1.0/assets/surface_insert/falloff.gif)](https://spaghetmenot.github.io/normalmagic/1.0/assets/surface_insert/falloff.gif) * **Vertex Group:** Choose a vertex group to project. ### Normals[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/surface_project/#normals "Permanent link") Define how normals are transferred from target surfaces. This uses [Normal Transfer](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/normal_transfer/) internally. Normals are transferred after vertex projection, using the closest target surface. * **Normal Domain:** Whether normals are stored on points (smooth) or face corners (allows sharp edges). * **Use Shrinkwrap Amount:** Use the same mask used for vertex [projection](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/surface_project/#masking) . * **Amount:** Specify a vertex group or single value to choose how much normals are transferred. * **Automatic Masking:** Use [mask falloff](https://spaghetmenot.github.io/normalmagic/1.0/common_settings/#mask-falloff) settings to make a new mask for transferring normals. ### UVs[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/surface_project/#uvs "Permanent link") Transfer UVs from target surface. * **Transfer UVs:** Turn UV transfer on/off. * **UV Map From:** Which UV Map to transfer from the **surface**. * **UV Map To:** Which UV Map to write to on this object. #### Selection[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/surface_project/#selection "Permanent link") Limit UV transfer to specific faces. * **Selection:** Which faces to modify UVs for. Defaults to "on", applying to every face. * **Material:** Limit UV modification to a specific material. * **Invert Selection:** Inverts the selection to modify UVs on every face that is not selected using the above options. --- # Mesh Modifiers - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/#mesh-modifiers) Mesh Modifiers[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/#mesh-modifiers "Permanent link") ============================================================================================================== These modifiers affect normals, underlying geometry and other attributes such as UVs. * [Boolean Pro](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/boolean_pro/) : Replacement for Blender's built-in boolean modifier with extra options and accurate normals. * [Surface Project](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/surface_project/) : Projects and blends mesh edges onto other mesh surfaces. * [Surface Insert](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/surface_insert/) : Projects, cuts, blends and welds other mesh objects into the surface of a mesh. --- # Examples - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.0/examples/#examples) Examples[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/examples/#examples "Permanent link") ================================================================================================ Example Scenes[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/examples/#example-scenes "Permanent link") ------------------------------------------------------------------------------------------------------------ Examples for all tools can be found in the "Examples" file, available as a separate download on the store page: **_normalMagic \[version\] Examples.blend_** This file contains several scenes, each showing different categories of tools. [![Scene Selector](https://spaghetmenot.github.io/normalmagic/1.0/assets/examples/scene_selector.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/examples/scene_selector.png) Booleans[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/examples/#booleans "Permanent link") ------------------------------------------------------------------------------------------------ Examples for various uses of [Boolean Pro](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/boolean_pro/) and [Repair Boolean Normals](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/repair_boolean_normals/) . [![booleans](https://spaghetmenot.github.io/normalmagic/1.0/assets/examples/booleans.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/examples/booleans.png) Normal Modifiers[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/examples/#normal-modifiers "Permanent link") ---------------------------------------------------------------------------------------------------------------- Examples for normal modifiers in use: [Repair Bevel Normals](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/repair_bevel_normals/) , [Bent Normals](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/bent_normals/) , [Face Weighted Normals](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/face_weighted_normals/) , [Repair Mirrored Normals](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/repair_mirrored_normals/) , [Normal Transfer](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/normal_transfer/) . [![normal_modifiers](https://spaghetmenot.github.io/normalmagic/1.0/assets/examples/normal_modifiers.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/examples/normal_modifiers.png) Other Modifiers[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/examples/#other-modifiers "Permanent link") -------------------------------------------------------------------------------------------------------------- Examples for "other" modifiers in use: [Mark Sharp](https://spaghetmenot.github.io/normalmagic/1.0/other_tools/mark_sharp/) , [Auto-Flip Faces](https://spaghetmenot.github.io/normalmagic/1.0/other_tools/auto-flip_faces/) , [Instance Object](https://spaghetmenot.github.io/normalmagic/1.0/other_tools/instance_object/) . [![other_modifiers](https://spaghetmenot.github.io/normalmagic/1.0/assets/examples/other_modifiers.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/examples/other_modifiers.png) Smooth Normals[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/examples/#smooth-normals "Permanent link") ------------------------------------------------------------------------------------------------------------ Examples for various uses of [Smooth Normals](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/smooth_normals/) . [![smooth_normals](https://spaghetmenot.github.io/normalmagic/1.0/assets/examples/smooth_normals.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/examples/smooth_normals.png) Surface Project/Insert[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/examples/#surface-projectinsert "Permanent link") --------------------------------------------------------------------------------------------------------------------------- Examples for various uses of [Surface Project](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/surface_project/) and [Surface Insert](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/surface_insert/) . [![surface_project_insert](https://spaghetmenot.github.io/normalmagic/1.0/assets/examples/surface_project_insert.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/examples/surface_project_insert.png) Visualize Modifiers[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/examples/#visualize-modifiers "Permanent link") ---------------------------------------------------------------------------------------------------------------------- Examples for [View Normals](https://spaghetmenot.github.io/normalmagic/1.0/visualize_tools/view_normals/) and [View Sharp](https://spaghetmenot.github.io/normalmagic/1.0/visualize_tools/view_sharp/) . [![view_modifiers](https://spaghetmenot.github.io/normalmagic/1.0/assets/examples/view_modifiers.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/examples/view_modifiers.png) --- # Common Settings - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.0/common_settings/#common-settings) Common Settings[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/common_settings/#common-settings "Permanent link") ===================================================================================================================== Many tools share common options. They are listed on this page for reference. * * * Mask Falloff[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/common_settings/#mask-falloff "Permanent link") --------------------------------------------------------------------------------------------------------------- When two sets of data blend together there are often falloff controls. These can be found across normalMagic in tools such as [Normal Transfer](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/normal_transfer/) , [Surface Insert](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/surface_insert/) and [Surface Project](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/surface_project/) . ### Masking Type[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/common_settings/#masking-type "Permanent link") #### Boundary Edge Expand[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/common_settings/#boundary-edge-expand "Permanent link") Select vertices on the boundary edge and expand selection inwards with a linear falloff. * **Expand Iterations:** How many iterations to expand mask inwards. [![Expand Boundary](https://spaghetmenot.github.io/normalmagic/1.0/assets/selection/expand_boundary.gif)](https://spaghetmenot.github.io/normalmagic/1.0/assets/selection/expand_boundary.gif) #### Boundary Edge Distance[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/common_settings/#boundary-edge-distance "Permanent link") Select vertices based on their distance to a boundary edge with a linear falloff. * **Start Distance:** Distance at which vertices will get a value of 1. * **End Distance:** Distance at which vertices will get a value of 0. [![Boundary Distance](https://spaghetmenot.github.io/normalmagic/1.0/assets/selection/boundary_distance.gif)](https://spaghetmenot.github.io/normalmagic/1.0/assets/selection/boundary_distance.gif) #### Surface Distance[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/common_settings/#surface-distance "Permanent link") Select vertices based on their distance to the target geometry. * **Start Distance:** Distance at which vertices will get a value of 1. * **End Distance:** Distance at which vertices will get a value of 0. [![Target Distance](https://spaghetmenot.github.io/normalmagic/1.0/assets/selection/surface_falloff.gif)](https://spaghetmenot.github.io/normalmagic/1.0/assets/selection/surface_falloff.gif) ### Base Falloff[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/common_settings/#base-falloff "Permanent link") The falloff used for values between 0-1. Here it is being used in [Surface Project](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/surface_project/) : [![Base Falloff](https://spaghetmenot.github.io/normalmagic/1.0/assets/selection/base_falloff.gif)](https://spaghetmenot.github.io/normalmagic/1.0/assets/selection/base_falloff.gif) ### Falloff Curve[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/common_settings/#falloff-curve "Permanent link") Bias the selection towards 1. Here it is being used in [Surface Project](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/surface_project/) : [![Falloff Curve](https://spaghetmenot.github.io/normalmagic/1.0/assets/selection/falloff_curve.gif)](https://spaghetmenot.github.io/normalmagic/1.0/assets/selection/falloff_curve.gif) * * * Selection[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/common_settings/#selection "Permanent link") --------------------------------------------------------------------------------------------------------- Often we'll want to limit the effects of modifiers to certain areas. The "Selection" section is the same for many tools. It allows for partial selection and, when normals are stored on face corners, hard boundaries. * **Vertex Group:** Specify a vertex group to limit modifier's effect. * **Face Group (Face Corner Only):** Specify a vertex group that will have hard boundaries. * **Material:** Limit the modifier's effect to a specific material. * **Invert:** Invert selection. Here we can see how **Vertex Group** and **Face Group** can be combined: [![Selection Demo](https://spaghetmenot.github.io/normalmagic/1.0/assets/selection/selection.gif)](https://spaghetmenot.github.io/normalmagic/1.0/assets/selection/selection.gif) --- # Normal Modifiers - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/#normal-modifiers) Normal Modifiers[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/#normal-modifiers "Permanent link") ==================================================================================================================== These modifiers effect the normals of a mesh and nothing else. * [Normal Transfer](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/normal_transfer/) * [Smooth Normals](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/smooth_normals/) * [Face Weighted Normals](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/face_weighted_normals/) * [Bent Normals](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/bent_normals/) * [Repair Bevel Normals](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/repair_bevel_normals/) * [Repair Boolean Normals](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/repair_boolean_normals/) * [Repair Mirrored Normals](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/repair_mirrored_normals/) --- # Normal Transfer - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/normal_transfer/#normal-transfer) Normal Transfer[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/normal_transfer/#normal-transfer "Permanent link") ================================================================================================================================== [![Normal Transfer Icon](https://spaghetmenot.github.io/normalmagic/1.0/assets/icons/normal_transfer_4.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/icons/normal_transfer_4.png) Transfer Normals from other mesh objects. This can be useful in a variety of situations: * [![blend](https://spaghetmenot.github.io/normalmagic/1.0/assets/normal_transfer/blend.gif)](https://spaghetmenot.github.io/normalmagic/1.0/assets/normal_transfer/blend.gif) Blend between meshes without affecting geometry. * [![fix](https://spaghetmenot.github.io/normalmagic/1.0/assets/normal_transfer/fix.gif)](https://spaghetmenot.github.io/normalmagic/1.0/assets/normal_transfer/fix.gif) Fix / smooth shading of bad topology. See also [Smooth Normals](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/smooth_normals/) and [Boolean Pro](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/boolean_pro/) * [![foliage](https://spaghetmenot.github.io/normalmagic/1.0/assets/normal_transfer/foliage.gif)](https://spaghetmenot.github.io/normalmagic/1.0/assets/normal_transfer/foliage.gif) Create better shading for foliage cards. * [![floater](https://spaghetmenot.github.io/normalmagic/1.0/assets/normal_transfer/floater.gif)](https://spaghetmenot.github.io/normalmagic/1.0/assets/normal_transfer/floater.gif) Match normals of "floater" decals. See also [Surface Project](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/surface_project/) Examples[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/normal_transfer/#examples "Permanent link") -------------------------------------------------------------------------------------------------------------------- Examples can be found in the **Normal Modifiers** scene in the [example file](https://spaghetmenot.github.io/normalmagic/1.0/examples/) [![examples](https://spaghetmenot.github.io/normalmagic/1.0/assets/examples/normal_modifiers.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/examples/normal_modifiers.png) Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/normal_transfer/#options "Permanent link") ------------------------------------------------------------------------------------------------------------------ * **Normal Domain.** Whether normals are stored on points (smooth) or face corners (allows sharp edges). ### Transfer Geometry[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/normal_transfer/#transfer-geometry "Permanent link") Choose which meshes to transfer normals from. * **Object Count.** How many mesh objects to transfer normals from. * **Objects.** Choose individual mesh objects to transfer normals from. * **Collection.** Choose a collection containing mesh objects to transfer normals from. ### Transfer[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/normal_transfer/#transfer "Permanent link") * **Method.** How to sample the normal from target surface: * **Closest Surface.** Sample normal at closest target surface. * **Project Object Direction.** Raycast-sample target geometry in object space. * **Project Island Normal.** Raycast-sample target geometry along the average mesh island normal. * **Project Source Normals.** Raycast-sample target geometry along mesh normals of this object. * **Ray Length (Project Methods).** Maximum length of raycast to target surface. * **Direction (Project Object Direction Only).** Direction in object space to raycast (default is -Z). * **Automatic Masking.** Mask falloff for transferring normals, see [Mask Falloff](https://spaghetmenot.github.io/normalmagic/1.0/common_settings/#mask-falloff) ### Selection[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/normal_transfer/#selection "Permanent link") See [Selection](https://spaghetmenot.github.io/normalmagic/1.0/common_settings/#selection) options. --- # Tools Overview - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.1/tools_overview/#tools-overview) Tools Overview[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/tools_overview/#tools-overview "Permanent link") ================================================================================================================== Custom Normals Most of these tools create or edit **_custom normals_**. These can be unintuitive to work with if you're unfamiliar with them. Once custom normals exist on a mesh, some default Blender tools/modifiers might not behave as expected. Tools are included to fix situations such as [mirroring](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/repair_mirrored_normals/) or [beveling](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/repair_bevel_normals/) but it is something to be aware of. Asset Library[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/tools_overview/#asset-library "Permanent link") ---------------------------------------------------------------------------------------------------------------- The core of normalMagic is an asset library. You will find links to all the tools in the sidebar under the following categories: * [Mesh Modifiers](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/) * [Normal Modifiers](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/) * [Visualize Modifiers](https://spaghetmenot.github.io/normalmagic/1.1/visualize_tools/) * [Other Modifiers](https://spaghetmenot.github.io/normalmagic/1.1/other_tools/) * [Manual Tools](https://spaghetmenot.github.io/normalmagic/1.1/manual_tools/) Add-on[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/tools_overview/#add-on "Permanent link") -------------------------------------------------------------------------------------------------- Included with the Pro version, the add-on makes it easier to set up some of the modifiers. [Add-on Documentation](https://spaghetmenot.github.io/normalmagic/1.1/add-on/) --- # Smooth Normals - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/smooth_normals/#smooth-normals) Smooth Normals[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/smooth_normals/#smooth-normals "Permanent link") =============================================================================================================================== [![Smooth Normals Icon](https://spaghetmenot.github.io/normalmagic/1.0/assets/icons/smooth_normals_1.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/icons/smooth_normals_1.png) Smooth Normals will smooth mesh normals without smoothing mesh topology. This can be useful in a variety of situations. * [![fix_bad_shading](https://spaghetmenot.github.io/normalmagic/1.0/assets/smooth/fix%20bad_shading.gif)](https://spaghetmenot.github.io/normalmagic/1.0/assets/smooth/fix%20bad_shading.gif) Achieve good shading on difficult topology. (Pinched, uneven or distorted normals). * [![cel_shading](https://spaghetmenot.github.io/normalmagic/1.0/assets/smooth/cel_contour.gif)](https://spaghetmenot.github.io/normalmagic/1.0/assets/smooth/cel_contour.gif) Simplify cel shading contours. * [![smooth_flatten](https://spaghetmenot.github.io/normalmagic/1.0/assets/smooth/smooth_flatten.gif)](https://spaghetmenot.github.io/normalmagic/1.0/assets/smooth/smooth_flatten.gif) Smooth and/or completely flatten normal islands. * [![mix_point_normals](https://spaghetmenot.github.io/normalmagic/1.0/assets/smooth/mix_point_normals.gif)](https://spaghetmenot.github.io/normalmagic/1.0/assets/smooth/mix_point_normals.gif) Mix smoothed point normals for a unique effect (cheap SSS shading). Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/smooth_normals/#options "Permanent link") ----------------------------------------------------------------------------------------------------------------- * **Normal Domain.** Whether normals are stored on points (smooth) or face corners (allows sharp edges). * **Keep Sharp.** Keep edges marked as sharp when normals are on face corners. ### Smoothed Proxy Mesh[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/smooth_normals/#smoothed-proxy-mesh "Permanent link") Generate a smoothed version of the mesh to transfer normals from. The mesh is split on sharp edges before smoothing, you can preview this mesh from the debug panel. [![smoothed_proxy](https://spaghetmenot.github.io/normalmagic/1.0/assets/smooth/smoothed_proxy.gif)](https://spaghetmenot.github.io/normalmagic/1.0/assets/smooth/smoothed_proxy.gif) * **Transfer Method.** How to transfer the normals from the smoothed mesh. * **Closest Surface.** Transfer normals from the closest point of the smoothed mesh. * **Point Index.** Transfer normals by their original point index. * **Iterations.** How many iterations of smoothing to perform. ### Smooth Normals[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/smooth_normals/#smooth-normals_1 "Permanent link") Controls methods of directly smoothing mesh normals. * **Smooth Method.** How to smooth normals: * **None.** Don't perform any direct normal smoothing. * **Blur Normals.** Fastest Method of smoothing at the cost of being less accurate and not preserving shape as well. * **Smooth Normals.** Iterative smooth function of normals. Slower than blur but can produce better results. * **Smooth/Blur Iterations.** How many iterations of smoothing to apply to normals. * **Face Weight Influence.** Cheap approximation of face weighted normals, lessens the contribution of smaller faces. ### Flatten Normal Islands[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/smooth_normals/#flatten-normal-islands "Permanent link") Calculate the average normal direction for entire normal islands (defined by sharp edges). * **Amount.** How much to blend to the completely flat island normals. ### Mix Point Normals[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/smooth_normals/#mix-point-normals "Permanent link") Mix in smoothed point normals. This can achieve a unique effect, somewhat like sub-surface scattering. * **Amount.** How much to blend to the smoothed point normals. * **Blur Iterations.** Perform blur iterations on the point normals. ### Selection[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/smooth_normals/#selection "Permanent link") See [Selection](https://spaghetmenot.github.io/normalmagic/1.0/common_settings/#selection) options --- # Install - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.0/install/#install) Install[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/install/#install "Permanent link") ============================================================================================= normalMagic is installed as an **asset library** in Blender. There is an optional **add-on** included with the Pro version which makes it easier and faster to set up certain modifiers. Timestamped install video: Asset Library[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/install/#asset-library "Permanent link") --------------------------------------------------------------------------------------------------------- TLDR Download the **.zip**, extract to a folder, add the folder as an asset library. For more detailed instructions see below. For more information on asset libraries you can check Blender's [Official Documentation](https://docs.blender.org/manual/en/dev/files/asset_libraries/introduction.html#introduction) ### First Time Install[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/install/#first-time-install "Permanent link") 1. Download latest .zip file for the closest Blender version (_normalMagic 4.5 v1.0.blend_). 2. Unzip/extract to a folder in your desired location. 3. Open Blender and go to **Edit/Preferences/File Paths/Asset Libraries.** 4. Click + Add Asset Library. [![install_1](https://spaghetmenot.github.io/normalmagic/1.0/assets/install/install_1.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/install/install_1.png) 5. Navigate to the unzipped folder and press **Add Asset Library**. [![install_2](https://spaghetmenot.github.io/normalmagic/1.0/assets/install/install_2.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/install/install_2.png) 6. You should now see "normalMagic" in your asset libraries. **Optional**: Here you can choose how the data is imported by default. Setting this to 'Link' will reduce file sizes and make it easier to update versions. See the [Official Documentation](https://docs.blender.org/manual/en/latest/editors/asset_browser.html#import-settings) for more information. [![install_3](https://spaghetmenot.github.io/normalmagic/1.0/assets/install/install_3.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/install/install_3.png) normalMagic should now be installed. Modifiers will now show up under the **Add Modifier** menu. [![install_check](https://spaghetmenot.github.io/normalmagic/1.0/assets/install/install_check.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/install/install_check.png) ### Update Version[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/install/#update-version "Permanent link") To update to a newer version of normalMagic: 1. Remove existing asset library under **Edit/Preferences/File Paths/Asset Libraries.** 2. Repeat [install instructions](https://spaghetmenot.github.io/normalmagic/1.0/install/#first-time-install) to add new version. ### Update Existing Modifiers[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/install/#update-existing-modifiers "Permanent link") #### Linked Library[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/install/#linked-library "Permanent link") Update modifiers in existing scenes if **library is set to "Link"**: 1. Go to the outliner and change the view to "Blend File". 2. Locate the normalMagic file. 3. Right Click/Relocate. 4. Select .blend file in the current asset library path. [![Relocate Library](https://spaghetmenot.github.io/normalmagic/1.0/assets/install/relocate_library.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/install/relocate_library.png) #### Appended Library[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/install/#appended-library "Permanent link") Update modifiers in existing scenes if **library is set to "Append"**: 1. Add new version of modifier somewhere in your scene. 2. Go to the outliner and change the view to "Blend File". 3. Find the modifier under "Node Groups". 4. Right Click/Remap Users. 5. Select the newer version (most likely called ".001"). [![Remap Modifiers](https://spaghetmenot.github.io/normalmagic/1.0/assets/install/remap_modifiers.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/install/remap_modifiers.png) Add-on[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/install/#add-on "Permanent link") ------------------------------------------------------------------------------------------- Pro version The normalMagic add-on is available to the **Pro** tier only. [Add-on Documentation](https://spaghetmenot.github.io/normalmagic/1.0/add-on/) To install/update the add-on simply: 1. Download the latest "addon" .zip file. 2. Drag the .zip file into Blender and press OK. [![install_addon](https://spaghetmenot.github.io/normalmagic/1.0/assets/install/install_addon.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/install/install_addon.png) You should now see a "Normal Magic" tab in the sidebar of the 3D viewport. [![addon panel](https://spaghetmenot.github.io/normalmagic/1.0/assets/add-on/addon_panel.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/add-on/addon_panel.png) --- # Common Settings - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.1/common_settings/#common-settings) Common Settings[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/common_settings/#common-settings "Permanent link") ===================================================================================================================== Many tools share common options. They are listed on this page for reference. * * * Mask Falloff[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/common_settings/#mask-falloff "Permanent link") --------------------------------------------------------------------------------------------------------------- When two sets of data blend together there are often falloff controls. These can be found across normalMagic in tools such as [Normal Transfer](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/normal_transfer/) , [Surface Insert](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/surface_insert/) and [Surface Project](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/surface_project/) . ### Masking Type[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/common_settings/#masking-type "Permanent link") #### Boundary Edge Expand[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/common_settings/#boundary-edge-expand "Permanent link") Select vertices on the boundary edge and expand selection inwards with a linear falloff. * **Expand Iterations:** How many iterations to expand mask inwards. [![Expand Boundary](https://spaghetmenot.github.io/normalmagic/1.1/assets/selection/expand_boundary.gif)](https://spaghetmenot.github.io/normalmagic/1.1/assets/selection/expand_boundary.gif) #### Boundary Edge Distance[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/common_settings/#boundary-edge-distance "Permanent link") Select vertices based on their distance to a boundary edge with a linear falloff. * **Start Distance:** Distance at which vertices will get a value of 1. * **End Distance:** Distance at which vertices will get a value of 0. [![Boundary Distance](https://spaghetmenot.github.io/normalmagic/1.1/assets/selection/boundary_distance.gif)](https://spaghetmenot.github.io/normalmagic/1.1/assets/selection/boundary_distance.gif) #### Surface Distance[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/common_settings/#surface-distance "Permanent link") Select vertices based on their distance to the target geometry. * **Start Distance:** Distance at which vertices will get a value of 1. * **End Distance:** Distance at which vertices will get a value of 0. [![Target Distance](https://spaghetmenot.github.io/normalmagic/1.1/assets/selection/surface_falloff.gif)](https://spaghetmenot.github.io/normalmagic/1.1/assets/selection/surface_falloff.gif) ### Base Falloff[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/common_settings/#base-falloff "Permanent link") The falloff used for values between 0-1. Here it is being used in [Surface Project](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/surface_project/) : [![Base Falloff](https://spaghetmenot.github.io/normalmagic/1.1/assets/selection/base_falloff.gif)](https://spaghetmenot.github.io/normalmagic/1.1/assets/selection/base_falloff.gif) ### Falloff Curve[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/common_settings/#falloff-curve "Permanent link") Bias the selection towards 1. Here it is being used in [Surface Project](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/surface_project/) : [![Falloff Curve](https://spaghetmenot.github.io/normalmagic/1.1/assets/selection/falloff_curve.gif)](https://spaghetmenot.github.io/normalmagic/1.1/assets/selection/falloff_curve.gif) * * * Selection[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/common_settings/#selection "Permanent link") --------------------------------------------------------------------------------------------------------- Often we'll want to limit the effects of modifiers to certain areas. The "Selection" section is the same for many tools. It allows for partial selection and, when normals are stored on face corners, hard boundaries. * **Vertex Group:** Specify a vertex group to limit modifier's effect. * **Face Group (Face Corner Only):** Specify a vertex group that will have hard boundaries. * **Material:** Limit the modifier's effect to a specific material. * **Invert:** Invert selection. Here we can see how **Vertex Group** and **Face Group** can be combined: [![Selection Demo](https://spaghetmenot.github.io/normalmagic/1.1/assets/selection/selection.gif)](https://spaghetmenot.github.io/normalmagic/1.1/assets/selection/selection.gif) --- # Surface Insert - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/surface_insert/#surface-insert) Surface Insert[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/surface_insert/#surface-insert "Permanent link") ============================================================================================================================= [![Surface Insert Icon](https://spaghetmenot.github.io/normalmagic/1.0/assets/icons/surface_insert6.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/icons/surface_insert6.png) Seamlessly join **insert meshes** into the surface of a mesh. An **insert mesh** can be thought of as a "decal", "patch" or "plug". There are two primary ways of performing the insert operation: * [![Wrap to Surface](https://spaghetmenot.github.io/normalmagic/1.0/assets/surface_insert/wrap_to_surface.gif)](https://spaghetmenot.github.io/normalmagic/1.0/assets/surface_insert/wrap_to_surface.gif) **Wrap to Surface** Warp geometry to match the underlying surface. * [![Mirrored Unflipped](https://spaghetmenot.github.io/normalmagic/1.0/assets/surface_insert/blend_to_surface.gif)](https://spaghetmenot.github.io/normalmagic/1.0/assets/surface_insert/blend_to_surface.gif) **Blend to Surface** Keep world position of geometry and blend to surface via masking. This allows you to keep flat surfaces inside the insert mesh. The **Surface Insert** Modifier performs the following steps: 1. Insert meshes are projected to surface geometry using one of the above methods. 2. Normals, materials and UVs are transferred from the original surface to the insert meshes. 3. The surface is cut and removed where insert mesh open edges are. 4. Vertices are matched on both sides of the seam and welded. Mesh Islands Insert meshes are performed per mesh island. Only mesh islands with **open edges** will be cut and welded into the original surface. * Manifold (solid) mesh islands can be projected but won't affect the underlying surface geometry. * Mesh islands that miss a raycast will be skipped entirely and a warning will show on the modifier. Requirements[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/surface_insert/#requirements "Permanent link") ------------------------------------------------------------------------------------------------------------------------- 1. A receiving mesh object. This will have the modifier on it. 2. An insert mesh with open edges. This will be projected, cut and welded into the surface of the receiving mesh. 3. Insert mesh cannot partially cut into surface, it has to be fully surrounded. Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/surface_insert/#options "Permanent link") --------------------------------------------------------------------------------------------------------------- ### Insert Meshes[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/surface_insert/#insert-meshes "Permanent link") This section specifies which meshes to insert. * **Objects/Collection:** Choose individual mesh objects or a collection containing mesh objects. * **Object Count:** How many mesh objects to insert (when in **_Objects_** mode). ### Insert Mesh Projection[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/surface_insert/#insert-mesh-projection "Permanent link") * **Method:** How to project the insert meshes to the underlying surface: * **Wrap to Surface:** Warp geometry to match the underlying surface. * **Blend with Surface:** Warp geometry to match the underlying surface. * **Projection Direction:** Which direction to project insert mesh(es). * **Mesh Island Normal:** Use average mesh island normal * **Insert Direction:** Specify a direction in the space of each insert object. * **Object Direction:** Specify a direction in the space of receiving object. * **Projection Origin.** Where to use as the origin of the insert object. This will affect how the objects height is calculated for re-projection. * **Height Offset.** Offsets insert mesh away from surface by a specified height. * **Ray Length.** Maximum distance an insert mesh can have an effect. #### Projection Masking[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/surface_insert/#projection-masking "Permanent link") This section controls masking the projection of insert meshes to the surface. This is most useful when using **_Blend with Surface_**. [![falloff](https://spaghetmenot.github.io/normalmagic/1.0/assets/surface_insert/falloff.gif)](https://spaghetmenot.github.io/normalmagic/1.0/assets/surface_insert/falloff.gif) Controlling falloff is covered [here](https://spaghetmenot.github.io/normalmagic/1.0/common_settings/#mask-falloff) #### Normals[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/surface_insert/#normals "Permanent link") This section controls how much of the surface normals are transferred to the insert mesh. This is most useful when using **_Blend with Surface_**. * **Normal Masking** * **Projection Mask**. Use the same mask falloff as the projection * **New Mask**. Create a new mask for normals * **Recalculate Blend Normals.** Only available when using **Blend with Surface**. This will recalculate the normals on the blended portion of the insert mesh before transferring any from the surface. * **Match Boundary Normals.** When choosing **_New Mask_** this will make sure the boundary edge of the insert mesh matches the normals on the underlying surface. Turn off to create a hard edge. If **_New Mask_** is chosen, the settings for the falloff will appear below. Controlling falloff is covered [here](https://spaghetmenot.github.io/normalmagic/1.0/common_settings/#mask-falloff) ### Surface Boolean[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/surface_insert/#surface-boolean "Permanent link") This section controls how the surface is cut for the insert mesh. * **Weld Surface.** Welds vertices between the surface and insert mesh. Turning this off will leave them as separate mesh islands. * **Weld Distance.** Distance at which to weld vertices, this takes effect at several points during the process, not just the final weld between surface and insert mesh. * **Boolean Extrusion.** How far to extrude the cutter shape from the surface. You might need to increase this value if the insert mesh covers a large area of curvature. You can preview cutters in the [Debug](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/surface_insert/#debug) panel. [![Boolean Extrusion](https://spaghetmenot.github.io/normalmagic/1.0/assets/surface_insert/boolean_extrusion.gif)](https://spaghetmenot.github.io/normalmagic/1.0/assets/surface_insert/boolean_extrusion.gif) * **Boolean Offset.** Offset the Boolean cutter outside the surface. This only effects the "top" of the cutter and will also help when an insert mesh covers a large area of curvature. You can preview cutters in the [Debug](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/surface_insert/#debug) panel. * **Non-Manifold Solver.** Which boolean solver to use when surface mesh is not manifold. Keep this as **_Float_** for most situations. * **Float.** Faster and in a lot of cases more accurate when matching surface points. * **Exact.** Much slower and rarely better. Included "just in case" it helps in rare cases. ### Materials[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/surface_insert/#materials "Permanent link") This section controls how materials and UVs are transferred from the surface to the insert meshes * **Transfer Surface Material.** How to transfer materials from the surface to the insert mesh. * **None.** Don't transfer any materials. * **Boundary Material.** Transfer the material island(s) that touch open edges. * **All.** Overwrite all insert mesh materials with those on the surface. * **Transfer Material UVs.** Transfer UV Maps for the transferred materials. * **UV Map.** Which UV map to transfer. ### Debug[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/surface_insert/#debug "Permanent link") This section lets you inspect certain points along the process if the modifier isn't behaving as expected. * **View.** Outputs geometry from different points in the node graph. Warning This changes the output of the graph, make sure to turn off when done inspecting. * **None.** Output standard result, no debugging. * **Boolean Cutters.** Output the shapes used to cut the surface. * **Skipped Insert Islands.** Output any mesh islands that did not project due to missed ray casts. * [![Boolean Cutters](https://spaghetmenot.github.io/normalmagic/1.0/assets/surface_insert/debug_cutters.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/surface_insert/debug_cutters.png) Debug Cutters * [![Skipped Islands](https://spaghetmenot.github.io/normalmagic/1.0/assets/surface_insert/debug_skipped_islands.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/surface_insert/debug_skipped_islands.png) Debug Skipped Insert Islands --- # Install - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.1/install/#install) Install[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/install/#install "Permanent link") ============================================================================================= normalMagic is installed as an **asset library** in Blender. There is an optional **add-on** included with the Pro version which makes it easier and faster to set up certain modifiers. Timestamped install video: Asset Library[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/install/#asset-library "Permanent link") --------------------------------------------------------------------------------------------------------- TLDR Download the **.zip**, extract to a folder, add the folder as an asset library. For more detailed instructions see below. For more information on asset libraries you can check Blender's [Official Documentation](https://docs.blender.org/manual/en/dev/files/asset_libraries/introduction.html#introduction) ### First Time Install[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/install/#first-time-install "Permanent link") 1. Download latest .zip file for the closest Blender version (_normalMagic 4.5 v1.0.blend_). 2. Unzip/extract to a folder in your desired location. 3. Open Blender and go to **Edit/Preferences/File Paths/Asset Libraries.** 4. Click + Add Asset Library. [![install_1](https://spaghetmenot.github.io/normalmagic/1.1/assets/install/install_1.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/install/install_1.png) 5. Navigate to the unzipped folder and press **Add Asset Library**. [![install_2](https://spaghetmenot.github.io/normalmagic/1.1/assets/install/install_2.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/install/install_2.png) 6. You should now see "normalMagic" in your asset libraries. **Optional**: Here you can choose how the data is imported by default. Setting this to 'Link' will reduce file sizes and make it easier to update versions. See the [Official Documentation](https://docs.blender.org/manual/en/latest/editors/asset_browser.html#import-settings) for more information. [![install_3](https://spaghetmenot.github.io/normalmagic/1.1/assets/install/install_3.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/install/install_3.png) normalMagic should now be installed. Modifiers will now show up under the **Add Modifier** menu. [![install_check](https://spaghetmenot.github.io/normalmagic/1.1/assets/install/install_check.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/install/install_check.png) ### Update Version[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/install/#update-version "Permanent link") To update to a newer version of normalMagic: 1. Remove existing asset library under **Edit/Preferences/File Paths/Asset Libraries.** 2. Repeat [install instructions](https://spaghetmenot.github.io/normalmagic/1.1/install/#first-time-install) to add new version. ### Update Existing Modifiers[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/install/#update-existing-modifiers "Permanent link") #### Linked Library[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/install/#linked-library "Permanent link") Update modifiers in existing scenes if **library is set to "Link"**: 1. Go to the outliner and change the view to "Blend File". 2. Locate the normalMagic file. 3. Right Click/Relocate. 4. Select .blend file in the current asset library path. [![Relocate Library](https://spaghetmenot.github.io/normalmagic/1.1/assets/install/relocate_library.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/install/relocate_library.png) #### Appended Library[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/install/#appended-library "Permanent link") Update modifiers in existing scenes if **library is set to "Append"**: 1. Add new version of modifier somewhere in your scene. 2. Go to the outliner and change the view to "Blend File". 3. Find the modifier under "Node Groups". 4. Right Click/Remap Users. 5. Select the newer version (most likely called ".001"). [![Remap Modifiers](https://spaghetmenot.github.io/normalmagic/1.1/assets/install/remap_modifiers.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/install/remap_modifiers.png) Add-on[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/install/#add-on "Permanent link") ------------------------------------------------------------------------------------------- Pro version The normalMagic add-on is available to the **Pro** tier only. [Add-on Documentation](https://spaghetmenot.github.io/normalmagic/1.1/add-on/) To install/update the add-on simply: 1. Download the latest "addon" .zip file. 2. Drag the .zip file into Blender and press OK. [![install_addon](https://spaghetmenot.github.io/normalmagic/1.1/assets/install/install_addon.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/install/install_addon.png) You should now see a "Normal Magic" tab in the sidebar of the 3D viewport. [![addon panel](https://spaghetmenot.github.io/normalmagic/1.1/assets/add-on/addon_panel.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/add-on/addon_panel.png) --- # Face Weighted Normals - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/face_weighted_normals/#face-weighted-normals) Face Weighted Normals[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/face_weighted_normals/#face-weighted-normals "Permanent link") ==================================================================================================================================================== [![Face Weighted Normals Icon](https://spaghetmenot.github.io/normalmagic/1.0/assets/icons/weighted_normals2.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/icons/weighted_normals2.png) Calculate face weighted normals for a mesh. This is similar to Blender's built-in [Weighted Normals Modifier](https://docs.blender.org/manual/en/latest/modeling/modifiers/normals/weighted_normal.html) but with some differences: * Selection Panel lets you limit weighted normals to a specific part of your mesh. * Options are designed to be more intuitive. "Corner Angle" weighting is not yet implemented This can create some odd shading on certain topology and is planned for a future update. * [![weighted off](https://spaghetmenot.github.io/normalmagic/1.0/assets/weighted/weighted_off.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/weighted/weighted_off.png) Un-weighted normals * [![weighted on](https://spaghetmenot.github.io/normalmagic/1.0/assets/weighted/weighted_on.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/weighted/weighted_on.png) Weighted normals Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/face_weighted_normals/#options "Permanent link") ------------------------------------------------------------------------------------------------------------------------ * **Normal Domain.** Whether normals are stored on points (smooth) or face corners (allows sharp edges). * **Weight.** Derive normal weights from: * **Face Area.** Faces with larger area have more influence over normals. * **Face Strength.** Use the "Face Strength" attribute. [Official Documentation](https://docs.blender.org/manual/en/latest/modeling/meshes/editing/mesh/normals.html#set-face-strength) * **Attribute.** Define an attribute to use for normal weighting. * **Keep Sharp.** Keep sharp edges on face corners. ### Area Weights[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/face_weighted_normals/#area-weights "Permanent link") Have more control over area-weighted normals. * **Area Bias.** Bend normals towards faces with larger areas. 1 = Direct weight based on area. Higher values will weight more aggressively to larger areas. * **Area Cutoff.** Ignores normals from smaller faces. Cutoff is a percentage of face area compared to the largest connected face. Selection[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/face_weighted_normals/#selection "Permanent link") ---------------------------------------------------------------------------------------------------------------------------- See [Selection](https://spaghetmenot.github.io/normalmagic/1.0/common_settings/#selection) options. --- # Bent Normals - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/bent_normals/#bent-normals) Bent Normals[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/bent_normals/#bent-normals "Permanent link") ========================================================================================================================= [![Bent Normals Icon](https://spaghetmenot.github.io/normalmagic/1.0/assets/icons/bent_normals_1.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/icons/bent_normals_1.png) Bent normals can improve how surfaces react to ambient lighting, especially in non-path-traced renderers such as game engines. Usually bent normals are baked to a texture but this modifier will calculate bent normals **directly on geometry**. A cone of rays is cast from each point and the normals are sampled and averaged to find the average direction of ambient light. * [![bent off](https://spaghetmenot.github.io/normalmagic/1.0/assets/bent/bent_off.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/bent/bent_off.png) **Bent normals off** Unnaturally dark shadows. * [![bent on](https://spaghetmenot.github.io/normalmagic/1.0/assets/bent/bent_on.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/bent/bent_on.png) **Bent normals on** Fake bounce light added to shadow areas. Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/bent_normals/#options "Permanent link") --------------------------------------------------------------------------------------------------------------- * **Factor.** How much bent normals are mixed in with existing normals. ### Collision Geometry[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/bent_normals/#collision-geometry "Permanent link") Collide with other objects in the scene. * **Object.** Object to collide rays with. * **Collection.** Collection to collide rays with. ### RayCast[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/bent_normals/#raycast "Permanent link") Control the distribution of rays used to calculate the bent normals. * **Ray Count.** How many rays are cast. * **Ray Length.** How long to cast each ray. * **Cone Angle.** The angle of the cone that rays are distributed in using a Fibonacci distribution. --- # Examples - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.1/examples/#examples) Examples[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/examples/#examples "Permanent link") ================================================================================================ Example Scenes[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/examples/#example-scenes "Permanent link") ------------------------------------------------------------------------------------------------------------ Examples for all tools can be found in the "Examples" file, available as a separate download on the store page: **_normalMagic \[version\] Examples.blend_** This file contains several scenes, each showing different categories of tools. [![Scene Selector](https://spaghetmenot.github.io/normalmagic/1.1/assets/examples/scene_selector.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/examples/scene_selector.png) Booleans[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/examples/#booleans "Permanent link") ------------------------------------------------------------------------------------------------ Examples for various uses of [Boolean Pro](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/boolean_pro/) and [Repair Boolean Normals](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/repair_boolean_normals/) . [![booleans](https://spaghetmenot.github.io/normalmagic/1.1/assets/examples/booleans.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/examples/booleans.png) Normal Modifiers[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/examples/#normal-modifiers "Permanent link") ---------------------------------------------------------------------------------------------------------------- Examples for normal modifiers in use: [Repair Bevel Normals](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/repair_bevel_normals/) , [Bent Normals](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/bent_normals/) , [Face Weighted Normals](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/face_weighted_normals/) , [Repair Mirrored Normals](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/repair_mirrored_normals/) , [Normal Transfer](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/normal_transfer/) . [![normal_modifiers](https://spaghetmenot.github.io/normalmagic/1.1/assets/examples/normal_modifiers.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/examples/normal_modifiers.png) Other Modifiers[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/examples/#other-modifiers "Permanent link") -------------------------------------------------------------------------------------------------------------- Examples for "other" modifiers in use: [Mark Sharp](https://spaghetmenot.github.io/normalmagic/1.1/other_tools/mark_sharp/) , [Auto-Flip Faces](https://spaghetmenot.github.io/normalmagic/1.1/other_tools/auto-flip_faces/) , [Instance Object](https://spaghetmenot.github.io/normalmagic/1.1/other_tools/instance_object/) . [![other_modifiers](https://spaghetmenot.github.io/normalmagic/1.1/assets/examples/other_modifiers.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/examples/other_modifiers.png) Smooth Normals[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/examples/#smooth-normals "Permanent link") ------------------------------------------------------------------------------------------------------------ Examples for various uses of [Smooth Normals](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/smooth_normals/) . [![smooth_normals](https://spaghetmenot.github.io/normalmagic/1.1/assets/examples/smooth_normals.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/examples/smooth_normals.png) Surface Project/Insert[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/examples/#surface-projectinsert "Permanent link") --------------------------------------------------------------------------------------------------------------------------- Examples for various uses of [Surface Project](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/surface_project/) and [Surface Insert](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/surface_insert/) . [![surface_project_insert](https://spaghetmenot.github.io/normalmagic/1.1/assets/examples/surface_project_insert.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/examples/surface_project_insert.png) Visualize Modifiers[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/examples/#visualize-modifiers "Permanent link") ---------------------------------------------------------------------------------------------------------------------- Examples for [View Normals](https://spaghetmenot.github.io/normalmagic/1.1/visualize_tools/view_normals/) and [View Sharp](https://spaghetmenot.github.io/normalmagic/1.1/visualize_tools/view_sharp/) . [![view_modifiers](https://spaghetmenot.github.io/normalmagic/1.1/assets/examples/view_modifiers.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/examples/view_modifiers.png) --- # Repair Bevel Normals - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/repair_bevel_normals/#repair-bevel-normals) Repair Bevel Normals[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/repair_bevel_normals/#repair-bevel-normals "Permanent link") ================================================================================================================================================= [![Repair Bevel Normals Icon](https://spaghetmenot.github.io/normalmagic/1.0/assets/icons/repair_bevel.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/icons/repair_bevel.png) Beveling a mesh with custom normals can lead to unexpected behavior. This tool identifies bevels and replicates Blender's "Harden Normals" functionality found on the bevel modifier. * [![default_bevel](https://spaghetmenot.github.io/normalmagic/1.0/assets/bevel_custom_default.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/bevel_custom_default.png) Bevel with custom normals * [![repaired_bevel](https://spaghetmenot.github.io/normalmagic/1.0/assets/bevel_custom_repaired.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/bevel_custom_repaired.png) Repaired Normals Requirements[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/repair_bevel_normals/#requirements "Permanent link") --------------------------------------------------------------------------------------------------------------------------------- * Mesh object with beveled faces you wish to fix * (Recommended) Set **Face Strength** to "Affected" or "All" on the bevel modifier [![Face Strength](https://spaghetmenot.github.io/normalmagic/1.0/assets/bevel_face_strength.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/bevel_face_strength.png) Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/repair_bevel_normals/#options "Permanent link") ----------------------------------------------------------------------------------------------------------------------- ### Bevel Detection[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/repair_bevel_normals/#bevel-detection "Permanent link") How to detect bevelled faces. * **Face Strength.** Recommended option. Requires setting face strength on bevel modifier to "Affected" or "All" * **Sharp Bevel Edge.** Apply sharp edges to bevel's outer edges. * **Sharp Bevel Corners.** Apply sharp edges to bevel's corners. * **Face Area.** Select bevels by their face area. * **Max Bevel Area.** Faces with area below this value will be treated as bevels * **Attribute.** Use an attribute or vertex group to select beveled faces. ### Area Weighting[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/repair_bevel_normals/#area-weighting "Permanent link") For weighting normals **inside** the bevel. Available when [Bevel Detection](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/repair_bevel_normals/#bevel-detection) is set to **Face Area** or **Attribute** * **Area Bias.** Bend normals towards faces with larger areas. 1 = Direct weight based on area. Higher values will weight more aggressively to larger areas. * **Area Cutoff.** Ignores normals from smaller faces. Cutoff is a percentage of face area compared to the largest connected face ### Selection Panel[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/repair_bevel_normals/#selection-panel "Permanent link") See [Selection](https://spaghetmenot.github.io/normalmagic/1.0/common_settings/#selection) options --- # Changelog - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.1/changelog/#changelog) Changelog[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/changelog/#changelog "Permanent link") =================================================================================================== 1.1.2[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/changelog/#112 "Permanent link") ----------------------------------------------------------------------------------------- ### Add-on[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/changelog/#add-on "Permanent link") * Fix For Blender 5.0 moving the "Smooth by Angle" modifier 1.1[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/changelog/#11 "Permanent link") -------------------------------------------------------------------------------------- ### Asset Library[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/changelog/#asset-library "Permanent link") * [Surface Project](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/surface_project/) : Complete refactor to better match the options on Surface Insert. * Introduced "Wrap" Mode. * Option to turn off normal transfer. * [Surface Insert](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/surface_insert/) : * Renamed "Projection Origin" to "Base Height". * "Base Height" no longer shows when in "Blend to Surface" mode. * Fixed Cases where cutters would be flipped when generated causing several bugs. * Refactored height calculation β€” should be no change to behavior. * Added Debug for projection direction. * Cleaned up all attributes created by modifier. * New Modifier: [Symmetrize](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/symmetrize/) : * Mirror-like modifier for single axis symmetry. * Works with custom normals. * Local/Global/Object space mirroring. * [Repair Mirrored Normals](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/repair_mirrored_normals/) : * Added Mirror Object option. * New Modifier: [Change Materials](https://spaghetmenot.github.io/normalmagic/1.1/other_tools/change_materials/) : * Assign materials or material indices to face selections. * New Modifier: [Lock Normals](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/lock_normals/) : * Creates custom normals if none exist. * Allows converting normals to "Tangent Space" which allows for deformation after setting. * New Manual Tool: [Add Custom Normals](https://spaghetmenot.github.io/normalmagic/1.1/manual_tools/add_custom_normals/) : * Tool version of "Lock Normals" for Object and Edit Mesh modes. * [Normal Transfer](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/normal_transfer/) : * Improving sharp edges appearing when transferring normals on small meshes. * [Smooth Normals](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/smooth_normals/) : * Fixed broken normals on very small meshes. ### Add-on[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/changelog/#add-on_1 "Permanent link") * Moved "Link Split Mesh" next to the "Split" Button. * Moved "Refresh" button above "Add Asset Library" to encourage use. * "Add Asset Library" now runs the "Refresh" operator to avoid adding the same library twice. * Fixed error when cutter collection is hidden/disabled. * Added "No Change" option to cutter display options. * Fixed cutters moving when using the redo panel. This occurred when parenting was on. * Now allows example file to live in the same folder as the asset library. --- # Repair Boolean Normals - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/repair_boolean_normals/#repair-boolean-normals) Repair Boolean Normals[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/repair_boolean_normals/#repair-boolean-normals "Permanent link") ======================================================================================================================================================= [![Repair Boolean Icon](https://spaghetmenot.github.io/normalmagic/1.0/assets/icons/repair_boolean_normals_1.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/icons/repair_boolean_normals_1.png) This tool attempts to fix bad normals caused by booleans. This is intended for destructively applied booleans, for boolean modifiers please consider using [Boolean Pro](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/boolean_pro/) as it provides much more accurate and consistent results. * [![Bool Normals Default](https://spaghetmenot.github.io/normalmagic/1.0/assets/booleans/bool_unrepaired.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/booleans/bool_unrepaired.png) Default Boolean Normals * [![Bool Normals Repaired](https://spaghetmenot.github.io/normalmagic/1.0/assets/booleans/bool_repaired.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/booleans/bool_repaired.png) Repaired Boolean Normals Requirements[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/repair_boolean_normals/#requirements "Permanent link") ----------------------------------------------------------------------------------------------------------------------------------- 1. Mesh object with destructive booleans applied. 2. Mesh is un-triangulated i.e. boolean operations have created ngons. 3. Mesh has sharp edges on boolean seams. Even if a mesh meets all these requirements it isn't 100% guaranteed to fix all it's normals Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/repair_boolean_normals/#options "Permanent link") ------------------------------------------------------------------------------------------------------------------------- ### Error Correct Distance[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/repair_boolean_normals/#error-correct-distance "Permanent link") Welds vertices on the proxy mesh that normals are transferred from. This can fix normal issues but will also introduce more issues as the value increases. There should be a sweet spot where there aren't any issues ### Selection Panel[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/repair_boolean_normals/#selection-panel "Permanent link") See [Selection](https://spaghetmenot.github.io/normalmagic/1.0/common_settings/#selection) options How it Works[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/repair_boolean_normals/#how-it-works "Permanent link") ----------------------------------------------------------------------------------------------------------------------------------- 1. Splitting the mesh on sharp edges, producing a surface for each "normal island" 2. Detecting points on the boundary that don't join to any edges inside the island 3. Re-creating a version of each island without those points 4. Transferring normals per newly created island back up to the unaltered geometry --- # Tools Overview πŸ— - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/tools_overview/#tools-overview) Tools Overview ![πŸ—](https://cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f3d7.svg ":construction_site:")[ΒΆ](https://spaghetmenot.github.io/normalmagic/tools_overview/#tools-overview "Permanent link") =================================================================================================================================================================================================================== normalMagic is comprised of several tools. Some modify normals, some modify geometry and normals, and some visualize normals and related attributes. Custom Normals Most of these tools create or edit **_custom normals_**. These can be unintuitive to work with if you're unfamiliar Once custom normals exist on a mesh, some default Blender tools/modifiers might not behave as expected. Tools are included to fix situations such as [mirroring](https://spaghetmenot.github.io/normalmagic/normal_tools/repair_mirrored_normals/) or [beveling](https://spaghetmenot.github.io/normalmagic/normal_tools/repair_bevel_normals/) but it's something to be aware of. --- # Licensing - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.1/licensing/#licensing) Licensing[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/licensing/#licensing "Permanent link") =================================================================================================== Individual Licenses[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/licensing/#individual-licenses "Permanent link") ----------------------------------------------------------------------------------------------------------------------- For an individual purchasing normalMagic, licenses are as follows: * Asset Library: [Standard Royalty Free License](https://spaghetmenot.github.io/normalmagic/1.1/licensing/#standard-royalty-free-license) . * Add-on (Pro version): [GNU General Public License](https://www.gnu.org/licenses/gpl-3.0.html) . Team / Studio Licenses[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/licensing/#team-studio-licenses "Permanent link") --------------------------------------------------------------------------------------------------------------------------- For teams/studios the number of people that use normalMagic is limited by the version purchased. The following team sizes are available: * Small Studio: up to 9 users. * Large Studio: 10-20 users. For teams that exceed 20 users, additional licenses should be purchased. This only applies to the asset library's [Standard Royalty Free License](https://spaghetmenot.github.io/normalmagic/1.1/licensing/#standard-royalty-free-license) . The licensing is as follows: * Asset Library: [Standard Royalty Free License](https://spaghetmenot.github.io/normalmagic/1.1/licensing/#standard-royalty-free-license) . * Add-on: [GNU General Public License](https://www.gnu.org/licenses/gpl-3.0.html) . Early Access Customers For Studios that bought early access copies: individual licenses can be transferred into a studio license per request. This will discount the studio license by the price paid for each individual license. Standard Royalty Free License[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/licensing/#standard-royalty-free-license "Permanent link") ------------------------------------------------------------------------------------------------------------------------------------------- The Standard Royalty Free license grants you, the purchaser, the ability to make use of the purchased product for personal, educational, or commercial purposes as long as those purposes do not violate the following: * You may not resell, redistribute, or repackage the purchased product without explicit permission from the original author. GNU General Public License[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/licensing/#gnu-general-public-license "Permanent link") ------------------------------------------------------------------------------------------------------------------------------------- Please find the GNU/GPL license here: [https://www.gnu.org/licenses/gpl-3.0.html](https://www.gnu.org/licenses/gpl-3.0.html) . --- # Common Settings πŸ— - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/common_settings/#common-settings) Common Settings ![πŸ—](https://cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f3d7.svg ":construction_site:")[ΒΆ](https://spaghetmenot.github.io/normalmagic/common_settings/#common-settings "Permanent link") ====================================================================================================================================================================================================================== Many tools share common options, for reference they are listed on this page. * * * Mask Falloff[ΒΆ](https://spaghetmenot.github.io/normalmagic/common_settings/#mask-falloff "Permanent link") ----------------------------------------------------------------------------------------------------------- When two sets of data blend together there are often falloff controls. These can be found across normalMagic in tools such as [Normal Transfer](https://spaghetmenot.github.io/normalmagic/normal_tools/normal_transfer/) , [Surface Insert](https://spaghetmenot.github.io/normalmagic/mesh_tools/surface_insert/) and [Surface Blend](https://spaghetmenot.github.io/normalmagic/mesh_tools/surface_blend/) . ### Boundary Edge Expand[ΒΆ](https://spaghetmenot.github.io/normalmagic/common_settings/#boundary-edge-expand "Permanent link") TODO ### Boundary Edge Distance[ΒΆ](https://spaghetmenot.github.io/normalmagic/common_settings/#boundary-edge-distance "Permanent link") TODO ### Surface Distance[ΒΆ](https://spaghetmenot.github.io/normalmagic/common_settings/#surface-distance "Permanent link") TODO * * * Selection[ΒΆ](https://spaghetmenot.github.io/normalmagic/common_settings/#selection "Permanent link") ----------------------------------------------------------------------------------------------------- Often we'll want to limit the effects of modifiers to certain areas. The "Selection" section is the same for many tools. ### Selection[ΒΆ](https://spaghetmenot.github.io/normalmagic/common_settings/#selection_1 "Permanent link") --- # Install ⚠ - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/install/#install) Install ![⚠](https://cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/26a0.svg ":warning:")[ΒΆ](https://spaghetmenot.github.io/normalmagic/install/#install "Permanent link") ================================================================================================================================================================================== --- # Examples πŸ— - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/examples/#examples) Examples ![πŸ—](https://cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f3d7.svg ":construction_site:")[ΒΆ](https://spaghetmenot.github.io/normalmagic/examples/#examples "Permanent link") ================================================================================================================================================================================================= Examples can be found in **_examples.blend_** which is included as a separate download. There is a different scene for different categories in the same file. Boolean Examples[ΒΆ](https://spaghetmenot.github.io/normalmagic/examples/#boolean-examples "Permanent link") ------------------------------------------------------------------------------------------------------------ Surface Blend Examples[ΒΆ](https://spaghetmenot.github.io/normalmagic/examples/#surface-blend-examples "Permanent link") ------------------------------------------------------------------------------------------------------------------------ Normal Tool Examples[ΒΆ](https://spaghetmenot.github.io/normalmagic/examples/#normal-tool-examples "Permanent link") -------------------------------------------------------------------------------------------------------------------- Visualize Examples[ΒΆ](https://spaghetmenot.github.io/normalmagic/examples/#visualize-examples "Permanent link") ---------------------------------------------------------------------------------------------------------------- --- # Mesh Modifiers - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/mesh_tools/#mesh-modifiers) Mesh Modifiers[ΒΆ](https://spaghetmenot.github.io/normalmagic/mesh_tools/#mesh-modifiers "Permanent link") ========================================================================================================== These modifiers effect normals, underlying geometry and other attributes such as UVs. * [Boolean Pro](https://spaghetmenot.github.io/normalmagic/mesh_tools/boolean_pro/) . Replacement for Blender's built-in boolean modifier with extra options and accurate normals. * [Surface Blend](https://spaghetmenot.github.io/normalmagic/mesh_tools/surface_blend/) . Projects and blends mesh edges onto another mesh. * [Surface Insert](https://spaghetmenot.github.io/normalmagic/mesh_tools/surface_insert/) . Projects, cuts and welds other meshes into surface of mesh. --- # Surface Blend ⚠ - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/mesh_tools/surface_blend/#surface-blend) Surface Blend ![⚠](https://cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/26a0.svg ":warning:")[ΒΆ](https://spaghetmenot.github.io/normalmagic/mesh_tools/surface_blend/#surface-blend "Permanent link") =============================================================================================================================================================================================================== --- # Boolean Pro πŸ— - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/mesh_tools/boolean_pro/#boolean-pro) Boolean Pro ![πŸ—](https://cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f3d7.svg ":construction_site:")[ΒΆ](https://spaghetmenot.github.io/normalmagic/mesh_tools/boolean_pro/#boolean-pro "Permanent link") ===================================================================================================================================================================================================================== [![Boolean Pro Icon](https://spaghetmenot.github.io/normalmagic/assets/icons/boolean_cut_7_sparkles.png)](https://spaghetmenot.github.io/normalmagic/assets/icons/boolean_cut_7_sparkles.png) Boolean Pro is designed to act as a replacement for Blender's built-in boolean modifier with extra functionality. The most powerful feature is transferring the normals automatically from boolean inputs for perfect boolean normals: [![Perfect Boolean Normals](https://spaghetmenot.github.io/normalmagic/assets/bool_pro_1.gif)](https://spaghetmenot.github.io/normalmagic/assets/bool_pro_1.gif) Add-on The normalMagic add-on (Pro version) includes operators to quickly set up the Boolean Pro modifier, similar the the Bool Tool add-on. [normalMagic Add-on](https://spaghetmenot.github.io/normalmagic/add-on/) --- # Manual Tools - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/manual_tools/#manual-tools) Manual Tools[ΒΆ](https://spaghetmenot.github.io/normalmagic/manual_tools/#manual-tools "Permanent link") ======================================================================================================== --- # Recalculate Normals ⚠ - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/manual_tools/recalculate_normals/#recalculate-normals) Recalculate Normals ![⚠](https://cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/26a0.svg ":warning:")[ΒΆ](https://spaghetmenot.github.io/normalmagic/manual_tools/recalculate_normals/#recalculate-normals "Permanent link") =================================================================================================================================================================================================================================== --- # Sharp Edges to Attribute ⚠ - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/other_tools/sharp_edges_to_attribute/#sharp-edges-to-attribute) Sharp Edges to Attribute ![⚠](https://cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/26a0.svg ":warning:")[ΒΆ](https://spaghetmenot.github.io/normalmagic/other_tools/sharp_edges_to_attribute/#sharp-edges-to-attribute "Permanent link") ================================================================================================================================================================================================================================================= --- # Normal Transfer ⚠ - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/normal_tools/normal_transfer/#normal-transfer) Normal Transfer ![⚠](https://cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/26a0.svg ":warning:")[ΒΆ](https://spaghetmenot.github.io/normalmagic/normal_tools/normal_transfer/#normal-transfer "Permanent link") ======================================================================================================================================================================================================================= --- # Normal Modifiers - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/normal_tools/#normal-modifiers) Normal Modifiers[ΒΆ](https://spaghetmenot.github.io/normalmagic/normal_tools/#normal-modifiers "Permanent link") ================================================================================================================ These modifiers effect the normals of a mesh and nothing else. * [Normal Transfer](https://spaghetmenot.github.io/normalmagic/normal_tools/normal_transfer/) * [Smooth Normals](https://spaghetmenot.github.io/normalmagic/normal_tools/smooth_normals/) * [Weighted Normals](https://spaghetmenot.github.io/normalmagic/normal_tools/weighted_normals/) * [Bent Normals](https://spaghetmenot.github.io/normalmagic/normal_tools/bent_normals/) * [Repair Bevel Normals](https://spaghetmenot.github.io/normalmagic/normal_tools/repair_bevel_normals/) * [Repair Boolean Normals](https://spaghetmenot.github.io/normalmagic/normal_tools/repair_boolean_normals/) * [Repair Mirrored Normals](https://spaghetmenot.github.io/normalmagic/normal_tools/repair_mirrored_normals/) --- # Smooth Normals ⚠ - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/normal_tools/smooth_normals/#smooth-normals) Smooth Normals ![⚠](https://cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/26a0.svg ":warning:")[ΒΆ](https://spaghetmenot.github.io/normalmagic/normal_tools/smooth_normals/#smooth-normals "Permanent link") ==================================================================================================================================================================================================================== --- # Bent Normals ⚠ - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/normal_tools/bent_normals/#bent-normals) Bent Normals ![⚠](https://cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/26a0.svg ":warning:")[ΒΆ](https://spaghetmenot.github.io/normalmagic/normal_tools/bent_normals/#bent-normals "Permanent link") ============================================================================================================================================================================================================== --- # Repair Mirrored Normals - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/normal_tools/repair_mirrored_normals/#repair-mirrored-normals) Repair Mirrored Normals[ΒΆ](https://spaghetmenot.github.io/normalmagic/normal_tools/repair_mirrored_normals/#repair-mirrored-normals "Permanent link") ====================================================================================================================================================== Mirroring a mesh with custom normals will not mirror the normals. This leads to incorrect normals on the mirrored geometry. This modifier will detect mesh islands with flipped normals and what axis they need flipping on. * [![Mirrored Flipped](https://spaghetmenot.github.io/normalmagic/assets/mirrored_flipped.png)](https://spaghetmenot.github.io/normalmagic/assets/mirrored_flipped.png) Unmirrored Custom Normals * [![Mirrored Unflipped](https://spaghetmenot.github.io/normalmagic/assets/mirrored_unflipped.png)](https://spaghetmenot.github.io/normalmagic/assets/mirrored_unflipped.png) Mirrored Custom Normals Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/normal_tools/repair_mirrored_normals/#options "Permanent link") ---------------------------------------------------------------------------------------------------------------------- * **Normal Domain.** Whether normals are stored on points (smooth) or face corners (allows sharp edges) * **Method.** Choose which faces get mirrored normals: * **Detect.** Faces and axes will be determined automatically, this should work in most cases. * **Specify.** Specify which faces to flip normals and which axes to flip them on. --- # View Normals ⚠ - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/visualize_tools/view_normals/#view-normals) View Normals ![⚠](https://cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/26a0.svg ":warning:")[ΒΆ](https://spaghetmenot.github.io/normalmagic/visualize_tools/view_normals/#view-normals "Permanent link") ================================================================================================================================================================================================================= --- # Visualize Modifiers - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/visualize_tools/#visualize-modifiers) Visualize Modifiers[ΒΆ](https://spaghetmenot.github.io/normalmagic/visualize_tools/#visualize-modifiers "Permanent link") ========================================================================================================================= These modifiers will produce geometry to visualize normals and related attributes: * [View Normals](https://spaghetmenot.github.io/normalmagic/visualize_tools/view_normals/) * [View Sharp](https://spaghetmenot.github.io/normalmagic/visualize_tools/view_sharp/) --- # View Sharp ⚠ - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/visualize_tools/view_sharp/#view-sharp) View Sharp ![⚠](https://cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/26a0.svg ":warning:")[ΒΆ](https://spaghetmenot.github.io/normalmagic/visualize_tools/view_sharp/#view-sharp "Permanent link") =========================================================================================================================================================================================================== --- # Other Modifiers ⚠ - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/other_tools/#other-modifiers) Other Modifiers ![⚠](https://cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/26a0.svg ":warning:")[ΒΆ](https://spaghetmenot.github.io/normalmagic/other_tools/#other-modifiers "Permanent link") ====================================================================================================================================================================================================== --- # Instance Object ⚠ - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/other_tools/instance_object/#instance-object) Instance Object ![⚠](https://cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/26a0.svg ":warning:")[ΒΆ](https://spaghetmenot.github.io/normalmagic/other_tools/instance_object/#instance-object "Permanent link") ====================================================================================================================================================================================================================== --- # Repair Mirrored Normals - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/repair_mirrored_normals/#repair-mirrored-normals) Repair Mirrored Normals[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/repair_mirrored_normals/#repair-mirrored-normals "Permanent link") ========================================================================================================================================================== [![Repair Mirrored Normals](https://spaghetmenot.github.io/normalmagic/1.0/assets/icons/repair_mirrored.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/icons/repair_mirrored.png) Mirroring a mesh with custom normals will not mirror the normals. This leads to incorrect normals on the mirrored geometry. This modifier will detect mesh islands with flipped normals and what axis they need flipping on. * [![Mirrored Flipped](https://spaghetmenot.github.io/normalmagic/1.0/assets/mirrored_flipped.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/mirrored_flipped.png) Unmirrored Custom Normals * [![Mirrored Unflipped](https://spaghetmenot.github.io/normalmagic/1.0/assets/mirrored_unflipped.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/mirrored_unflipped.png) Mirrored Custom Normals Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/repair_mirrored_normals/#options "Permanent link") -------------------------------------------------------------------------------------------------------------------------- * **Normal Domain.** Whether normals are stored on points (smooth) or face corners (allows sharp edges) * **Method.** Choose which faces get mirrored normals: * **Detect.** Faces and axes will be determined automatically, this should work in most cases. * **Side of Origin.** Select and mirror normals based on axis and object origin. * **Specify.** Specify which faces to flip normals and which axes to flip them on. ### Side of Origin[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/repair_mirrored_normals/#side-of-origin "Permanent link") When using this method, other options become available: * **Recalculate Center Normals.** Recalculate Normals for points at the center of specified axes * **Mirror Axis.** Which axes to select and mirror normals on. * **Flip Axis.** Flip the direction of the selection of normals to mirror. ### Selection[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/repair_mirrored_normals/#selection "Permanent link") See [Selection Options](https://spaghetmenot.github.io/normalmagic/1.0/common_settings/#selection) --- # Weighted Normals ⚠ - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/normal_tools/weighted_normals/#weighted-normals) Weighted Normals ![⚠](https://cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/26a0.svg ":warning:")[ΒΆ](https://spaghetmenot.github.io/normalmagic/normal_tools/weighted_normals/#weighted-normals "Permanent link") ========================================================================================================================================================================================================================== --- # Repair Bevel Normals - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/normal_tools/repair_bevel_normals/#repair-bevel-normals) Repair Bevel Normals[ΒΆ](https://spaghetmenot.github.io/normalmagic/normal_tools/repair_bevel_normals/#repair-bevel-normals "Permanent link") ============================================================================================================================================= [![Repair Bevel Normals Icon](https://spaghetmenot.github.io/normalmagic/assets/icons/repair_bevel.png)](https://spaghetmenot.github.io/normalmagic/assets/icons/repair_bevel.png) Beveling a mesh with custom normals can lead to unexpected behavior. This tool identifies bevels and replicates Blender's "Harden Normals" functionality found on the bevel modifier. * [![default_bevel](https://spaghetmenot.github.io/normalmagic/assets/bevel_custom_default.png)](https://spaghetmenot.github.io/normalmagic/assets/bevel_custom_default.png) Bevel with custom normals * [![repaired_bevel](https://spaghetmenot.github.io/normalmagic/assets/bevel_custom_repaired.png)](https://spaghetmenot.github.io/normalmagic/assets/bevel_custom_repaired.png) Repaired Normals Requirements[ΒΆ](https://spaghetmenot.github.io/normalmagic/normal_tools/repair_bevel_normals/#requirements "Permanent link") ----------------------------------------------------------------------------------------------------------------------------- * Mesh object with beveled faces you wish to fix * (Recommended) Set **Face Strength** to "Affected" or "All" on the bevel modifier [![Face Strength](https://spaghetmenot.github.io/normalmagic/assets/bevel_face_strength.png)](https://spaghetmenot.github.io/normalmagic/assets/bevel_face_strength.png) Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/normal_tools/repair_bevel_normals/#options "Permanent link") ------------------------------------------------------------------------------------------------------------------- ### Bevel Detection[ΒΆ](https://spaghetmenot.github.io/normalmagic/normal_tools/repair_bevel_normals/#bevel-detection "Permanent link") How to detect bevelled faces. * **Face Strength.** Recommended option. Requires setting face strength on bevel modifier to "Affected" or "All" * **Sharp Bevel Edge.** Apply sharp edges to bevel's outer edges. * **Sharp Bevel Corners.** Apply sharp edges to bevel's corners. * **Face Area.** Select bevels by their face area. * **Max Bevel Area.** Faces with area below this value will be treated as bevels * **Attribute.** Use an attribute or vertex group to select beveled faces. ### Area Weighting[ΒΆ](https://spaghetmenot.github.io/normalmagic/normal_tools/repair_bevel_normals/#area-weighting "Permanent link") For weighting normals **inside** the bevel. Available when [Bevel Detection](https://spaghetmenot.github.io/normalmagic/normal_tools/repair_bevel_normals/#bevel-detection) is set to **Face Area** or **Attribute** * **Area Bias.** Bend normals towards faces with larger areas. 1 = Direct weight based on area. Higher values will weight more aggressively to larger areas. * **Area Cutoff.** Ignores normals from smaller faces. Cutoff is a percentage of face area compared to the largest connected face ### Selection Panel[ΒΆ](https://spaghetmenot.github.io/normalmagic/normal_tools/repair_bevel_normals/#selection-panel "Permanent link") See [Selection](https://spaghetmenot.github.io/normalmagic/common_settings/#selection) options --- # Repair Boolean Normals πŸ— - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/normal_tools/repair_boolean_normals/#repair-boolean-normals) Repair Boolean Normals ![πŸ—](https://cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f3d7.svg ":construction_site:")[ΒΆ](https://spaghetmenot.github.io/normalmagic/normal_tools/repair_boolean_normals/#repair-boolean-normals "Permanent link") ======================================================================================================================================================================================================================================================== [![Repair Boolean Icon](https://spaghetmenot.github.io/normalmagic/assets/icons/repair_boolean_normals_1.png)](https://spaghetmenot.github.io/normalmagic/assets/icons/repair_boolean_normals_1.png) This tool attempts to fix bad normals caused by booleans. This is intended for destructively applied booleans, for boolean modifiers please consider using [Boolean Pro](https://spaghetmenot.github.io/normalmagic/mesh_tools/boolean_pro/) as it provides much more accurate and consistent results. * [![Bool Normals Default](https://spaghetmenot.github.io/normalmagic/assets/booleans/bool_unrepaired.png)](https://spaghetmenot.github.io/normalmagic/assets/booleans/bool_unrepaired.png) Default Boolean Normals * [![Bool Normals Repaired](https://spaghetmenot.github.io/normalmagic/assets/booleans/bool_repaired.png)](https://spaghetmenot.github.io/normalmagic/assets/booleans/bool_repaired.png) Repaired Boolean Normals Requirements[ΒΆ](https://spaghetmenot.github.io/normalmagic/normal_tools/repair_boolean_normals/#requirements "Permanent link") ------------------------------------------------------------------------------------------------------------------------------- 1. Mesh object with destructive booleans applied. 2. Mesh is un-triangulated i.e. boolean operations have created ngons. 3. Mesh has sharp edges on boolean seams. Even if a mesh meets all these requirements it isn't 100% guaranteed to fix all it's normals Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/normal_tools/repair_boolean_normals/#options "Permanent link") --------------------------------------------------------------------------------------------------------------------- ### Error Correct Distance[ΒΆ](https://spaghetmenot.github.io/normalmagic/normal_tools/repair_boolean_normals/#error-correct-distance "Permanent link") Welds vertices on the proxy mesh that normals are transferred from. This can fix normal issues but will also introduce more issues as the value increases. There should be a sweet spot where there aren't any issues ### Selection Panel[ΒΆ](https://spaghetmenot.github.io/normalmagic/normal_tools/repair_boolean_normals/#selection-panel "Permanent link") See [Selection](https://spaghetmenot.github.io/normalmagic/common_settings/#selection) options How it Works[ΒΆ](https://spaghetmenot.github.io/normalmagic/normal_tools/repair_boolean_normals/#how-it-works "Permanent link") ------------------------------------------------------------------------------------------------------------------------------- 1. Splitting the mesh on sharp edges, producing a surface for each "normal island" 2. Detecting points on the boundary that don't join to any edges inside the island 3. Re-creating a version of each island without those points 4. Transferring normals per newly created island back up to the unaltered geometry --- # normalMagic Add-on - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/add-on/#normalmagic-add-on) normalMagic Add-on[ΒΆ](https://spaghetmenot.github.io/normalmagic/add-on/#normalmagic-add-on "Permanent link") ============================================================================================================== --- # Auto-Flip Faces - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/other_tools/auto-flip_faces/#auto-flip-faces) Auto-Flip Faces[ΒΆ](https://spaghetmenot.github.io/normalmagic/other_tools/auto-flip_faces/#auto-flip-faces "Permanent link") ============================================================================================================================= [![Auto-Flip Faces Icon](https://spaghetmenot.github.io/normalmagic/assets/icons/auto-flip.png)](https://spaghetmenot.github.io/normalmagic/assets/icons/auto-flip.png) Flipped faces on meshes can cause multiple issues. Traditionally you would check for flipped faces by using the the 'Face Orientation' overlay and resolve areas of flipped faces one by one. This modifier will detect flipped faces and fix them automatically. * [![Faces Flipped](https://spaghetmenot.github.io/normalmagic/assets/suzanne_flipped.png)](https://spaghetmenot.github.io/normalmagic/assets/suzanne_flipped.png) Faces Flipped * [![Faces Unflipped](https://spaghetmenot.github.io/normalmagic/assets/suzanne_unflipped.png)](https://spaghetmenot.github.io/normalmagic/assets/suzanne_unflipped.png) Faces Un-flipped Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/other_tools/auto-flip_faces/#options "Permanent link") ------------------------------------------------------------------------------------------------------------- * **Invert.** Change direction of entire mesh from outside to inside * **Hit Rate.** Tune the detection of flipped faces. Higher values will detect more but increase the risk of false positives. --- # Mark Sharp - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/other_tools/mark_sharp/#mark-sharp) Mark Sharp[ΒΆ](https://spaghetmenot.github.io/normalmagic/other_tools/mark_sharp/#mark-sharp "Permanent link") ============================================================================================================== [![Mark Sharp Icon](https://spaghetmenot.github.io/normalmagic/assets/icons/mark_sharp.png)](https://spaghetmenot.github.io/normalmagic/assets/icons/mark_sharp.png) Mark Sharp will mark edges as sharp based on edge angle. This is similar to Blender's [Smooth By Angle](https://docs.blender.org/manual/en/latest/modeling/geometry_nodes/normals/smooth_by_angle.html) modifier but with extra options. There is also the option to remove custom normals. * [![Smooth By Angle](https://spaghetmenot.github.io/normalmagic/assets/mark_sharp_off.png)](https://spaghetmenot.github.io/normalmagic/assets/mark_sharp_off.png) **Smooth By Angle** One angle for all edges * [![Mark Sharp](https://spaghetmenot.github.io/normalmagic/assets/mark_sharp_on.png)](https://spaghetmenot.github.io/normalmagic/assets/mark_sharp_on.png) **Mark Sharp** Separate angles for convex/concave edges Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/other_tools/mark_sharp/#options "Permanent link") -------------------------------------------------------------------------------------------------------- * **Keep Existing.** Keep edges marked as sharp. * **Angle Type.** * **Absolute Angle.** Use a single angle regardless off convexity. This behaves like "Smooth By Angle". * **Convex / Concave.** Specify different angles depending whether edges are convex or concave. * **Remove Custom Normals.** Will remove any custom normals from geometry and use default normal calculation from sharp edges. --- # Boolean Pro ⚠ - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/add-on/boolean_pro/#boolean-pro) Boolean Pro ![⚠](https://cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/26a0.svg ":warning:")[ΒΆ](https://spaghetmenot.github.io/normalmagic/add-on/boolean_pro/#boolean-pro "Permanent link") ===================================================================================================================================================================================================== --- # Visualize Modifiers - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.0/visualize_tools/#visualize-modifiers) Visualize Modifiers[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/visualize_tools/#visualize-modifiers "Permanent link") ============================================================================================================================= These modifiers will produce geometry to visualize normals and related attributes: * [View Normals](https://spaghetmenot.github.io/normalmagic/1.0/visualize_tools/view_normals/) * [View Sharp](https://spaghetmenot.github.io/normalmagic/1.0/visualize_tools/view_sharp/) --- # Surface Insert πŸ— - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/mesh_tools/surface_insert/#surface-insert) Surface Insert ![πŸ—](https://cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f3d7.svg ":construction_site:")[ΒΆ](https://spaghetmenot.github.io/normalmagic/mesh_tools/surface_insert/#surface-insert "Permanent link") ============================================================================================================================================================================================================================== Seamlessly join **insert meshes** into a mesh's surface. An **insert mesh** can be thought of as a "decal", "patch" or "plug". There are two primary ways of performing the insert operation: * [![Wrap to Surface](https://spaghetmenot.github.io/normalmagic/assets/surface_insert/wrap_to_surface.gif)](https://spaghetmenot.github.io/normalmagic/assets/surface_insert/wrap_to_surface.gif) **Wrap to Surface** Warp geometry to match the underlying surface. * [![Mirrored Unflipped](https://spaghetmenot.github.io/normalmagic/assets/surface_insert/blend_to_surface.gif)](https://spaghetmenot.github.io/normalmagic/assets/surface_insert/blend_to_surface.gif) **Blend to Surface** Keep world position of geometry and blend to surface via masking. This allows you to keep flat surfaces inside the insert mesh. The **Surface Insert** Modifier performs the following steps: 1. Insert meshes are projected to surface geometry using one of the above methods. 2. Normals, materials and UVs are transferred from the original surface to the insert meshes. 3. The surface is cut and removed where insert mesh open edges are. 4. Vertices are matched on both sides of the seam and welded. Mesh Islands Insert meshes are performed per mesh island. Only mesh islands with open edges will be cut and welded into the original surface. * Manifold (solid) mesh islands can be projected but won't affect the underlying surface geometry. * Mesh islands that miss a raycast will be skipped entirely and a warning will show on the modifier. Requirements[ΒΆ](https://spaghetmenot.github.io/normalmagic/mesh_tools/surface_insert/#requirements "Permanent link") --------------------------------------------------------------------------------------------------------------------- 1. A receiving mesh object. This will have the modifier on it. 2. An insert mesh with open edges. This will be projected, cut and welded into the surface of the receiving mesh. Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/mesh_tools/surface_insert/#options "Permanent link") ----------------------------------------------------------------------------------------------------------- ### Insert Meshes[ΒΆ](https://spaghetmenot.github.io/normalmagic/mesh_tools/surface_insert/#insert-meshes "Permanent link") This section specifies which meshes to insert * **Objects/Collection.** Choose individual mesh objects or a collection containing mesh objects * **Object Count.** How many mesh objects to insert (when in **_Objects_** mode) ### Insert Mesh Projection[ΒΆ](https://spaghetmenot.github.io/normalmagic/mesh_tools/surface_insert/#insert-mesh-projection "Permanent link") * **Method.** How to project the insert meshes to the underlying surface * **Wrap to Surface.** Warp geometry to match the underlying surface. * **Blend with Surface.** Warp geometry to match the underlying surface. * **Projection Direction.** Which direction to project insert mesh(es) * **Mesh Island Normal.** Use average mesh island normal * **Insert Direction.** Specify a direction in the space of each insert object * **Object Direction.** Specify a direction in the space of receiving object * **Projection Origin.** Where to use as the origin of the insert object. This will affect how the objects height is calculated for re-projection. * **Height Offset.** Offsets insert mesh away from surface by a specified height. * **Ray Length.** Maximum distance an insert mesh can have an effect. #### Projection Masking[ΒΆ](https://spaghetmenot.github.io/normalmagic/mesh_tools/surface_insert/#projection-masking "Permanent link") This section controls masking the projection of insert meshes to the surface. This is most useful when using **_Blend with Surface_**. [![falloff](https://spaghetmenot.github.io/normalmagic/assets/surface_insert/falloff.gif)](https://spaghetmenot.github.io/normalmagic/assets/surface_insert/falloff.gif) Controlling falloff is covered [here](https://spaghetmenot.github.io/normalmagic/common_settings/#mask-falloff) #### Normals[ΒΆ](https://spaghetmenot.github.io/normalmagic/mesh_tools/surface_insert/#normals "Permanent link") This section controls how much of the surface normals are transferred to the insert mesh. This is most useful when using **_Blend with Surface_**. * **Normal Masking** * **Projection Mask**. Use the same mask falloff as the projection * **New Mask**. Create a new mask for normals * **Recalculate Blend Normals.** Only available when using **Blend with Surface**. This will recalculate the normals on the blended portion of the insert mesh before transferring any from the surface. * **Match Boundary Normals.** When choosing **_New Mask_** this will make sure the boundary edge of the insert mesh matches the normals on the underlying surface. Turn off to create a hard edge. If **_New Mask_** is chosen, the settings for the falloff will appear below. Controlling falloff is covered [here](https://spaghetmenot.github.io/normalmagic/common_settings/#mask-falloff) ### Surface Boolean[ΒΆ](https://spaghetmenot.github.io/normalmagic/mesh_tools/surface_insert/#surface-boolean "Permanent link") This section controls how the surface is cut for the insert mesh. * **Weld Surface.** Welds vertices between the surface and insert mesh. Turning this off will leave them as separate mesh islands. * **Weld Distance.** Distance at which to weld vertices, this takes effect at several points during the process, not just the final weld between surface and insert mesh. * **Boolean Extrusion.** How far to extrude the cutter shape from the surface. You might need to increase this value if the insert mesh covers a large area of curvature. You can preview cutters in the [Debug](https://spaghetmenot.github.io/normalmagic/mesh_tools/surface_insert/#debug) panel. [![Boolean Extrusion](https://spaghetmenot.github.io/normalmagic/assets/surface_insert/boolean_extrusion.gif)](https://spaghetmenot.github.io/normalmagic/assets/surface_insert/boolean_extrusion.gif) * **Non-Manifold Solver.** Which boolean solver to use when surface mesh is not manifold. Keep this as **_Float_** for most situations. * **Float.** Faster and in a lot of cases more accurate when matching surface points. * **Exact.** Much slower and rarely better. Included "just in case" it helps in rare cases. ### Materials[ΒΆ](https://spaghetmenot.github.io/normalmagic/mesh_tools/surface_insert/#materials "Permanent link") This section controls how materials and UVs are transferred from the surface to the insert meshes * **Transfer Surface Material.** How to transfer materials from the surface to the insert mesh. * **None.** Don't transfer any materials. * **Boundary Material.** Transfer the material island(s) that touch open edges. * **All.** Overwrite all insert mesh materials with those on the surface. * **Transfer Material UVs.** Transfer UV Maps for the transferred materials. * **UV Map.** Which UV map to transfer. ### Debug[ΒΆ](https://spaghetmenot.github.io/normalmagic/mesh_tools/surface_insert/#debug "Permanent link") This section lets you inspect certain points along the process if the modifier isn't behaving as expected. * **View.** Outputs geometry from different points in the node graph. Warning This changes the output of the graph, make sure to turn off when done inspecting. * **None.** Output standard result, no debugging. * **Boolean Cutters.** Output the shapes used to cut the surface. * **Skipped Insert Islands.** Output any mesh islands that did not project due to missed ray casts. * [![Boolean Cutters](https://spaghetmenot.github.io/normalmagic/assets/surface_insert/debug_cutters.png)](https://spaghetmenot.github.io/normalmagic/assets/surface_insert/debug_cutters.png) Debug Cutters * [![Skipped Islands](https://spaghetmenot.github.io/normalmagic/assets/surface_insert/debug_skipped_islands.png)](https://spaghetmenot.github.io/normalmagic/assets/surface_insert/debug_skipped_islands.png) Debug Skipped Insert Islands --- # Recalculate Weighted - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.0/manual_tools/recalculate_weighted/#recalculate-weighted) Recalculate Weighted[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/manual_tools/recalculate_weighted/#recalculate-weighted "Permanent link") ================================================================================================================================================= [![recalculate_weighted](https://spaghetmenot.github.io/normalmagic/1.0/assets/icons/recalculate_normals.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/icons/recalculate_normals.png) Calculated weighted normals for selected geometry in "Edit Mode". This is a tool version of the [Face Weighted Normals](https://spaghetmenot.github.io/normalmagic/1.0/normal_tools/face_weighted_normals/) modifier. This can be found in the **Normal Magic** Menu when editing meshes. --- # View Normals - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.0/visualize_tools/view_normals/#view-normals) View Normals[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/visualize_tools/view_normals/#view-normals "Permanent link") ============================================================================================================================ [![View Normals](https://spaghetmenot.github.io/normalmagic/1.0/assets/icons/view_normals_eye_1.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/icons/view_normals_eye_1.png) View Normals creates geometry to visualize mesh normals on objects. * Normals will show up in object mode * Normal Colors are currently only available in [Material Preview](https://docs.blender.org/manual/en/latest/editors/3dview/display/shading.html#material-preview) and [Rendered](https://docs.blender.org/manual/en/latest/editors/3dview/display/shading.html#rendered) viewport shading. Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/visualize_tools/view_normals/#options "Permanent link") ------------------------------------------------------------------------------------------------------------------ * **Length.** The object-space length of displayed normals * **Normal Domain.** Display normals on: * **Points.** One line will be generated per point. * **Face Corners.** One line will be generated per face corner. * **Faces.** One line will be generated per face. * **View.** Specify which normal to visualize: * **Normal.** Display the normal stored on the geometry, custom normals will be included here. * **True Normal.** Display the normal defined by topology, custom normals will be ignored. * **Attribute.** Specify an arbitrary attribute to use. ### Style[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/visualize_tools/view_normals/#style "Permanent link") This section defines how the normal line mesh is generated: Line [![line](https://spaghetmenot.github.io/normalmagic/1.0/assets/view/normal_line.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/view/normal_line.png) Display normals as a single line. This is the most efficient but can't be colored. Cylinder / Tapered Cylinder [![line](https://spaghetmenot.github.io/normalmagic/1.0/assets/view/normal_cylinder.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/view/normal_cylinder.png) Display Normals as mesh cylinders with a width and color that will show up in [Material Preview](https://docs.blender.org/manual/en/latest/editors/3dview/display/shading.html#material-preview) and [Rendered](https://docs.blender.org/manual/en/latest/editors/3dview/display/shading.html#rendered) viewport shading #### Colors[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/visualize_tools/view_normals/#colors "Permanent link") (When in Cylinder / Tapered Cylinder mode) * **Color.** Color to display normals. * **Show Default.** Colors normals differently if they match default "Smooth Shading" normals: [![Show Default](https://spaghetmenot.github.io/normalmagic/1.0/assets/view/normal_default.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/view/normal_default.png) --- # Manual Tools - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.0/manual_tools/#manual-tools) Manual Tools[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/manual_tools/#manual-tools "Permanent link") ============================================================================================================ These tools are available as destructive operations in "Edit" mode. There isn't much here yet, if you wish to see more modifiers become manual tools please reach out! * [Recalculate Weighted](https://spaghetmenot.github.io/normalmagic/1.0/manual_tools/recalculate_weighted/) --- # Preferences - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.0/add-on/preferences/#preferences) Preferences[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/add-on/preferences/#preferences "Permanent link") ================================================================================================================ These options show up under **_Edit/Preferences/Add-ons/normalMagic_** * **Show Sidebar Panel.** Enable/Disable the add-on's sidebar panel * **Category.** Choose which sidebar category the panel is located in --- # Other Modifiers - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.0/other_tools/#other-modifiers) Other Modifiers[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/other_tools/#other-modifiers "Permanent link") ================================================================================================================= These modifiers change things that are related to normals such as sharp edges or face orientation: * [Mark Sharp](https://spaghetmenot.github.io/normalmagic/1.0/other_tools/mark_sharp/) * [Auto-Flip Faces](https://spaghetmenot.github.io/normalmagic/1.0/other_tools/auto-flip_faces/) * [Sharp Edges to Attribute](https://spaghetmenot.github.io/normalmagic/1.0/other_tools/sharp_edges_to_attribute/) * [Instance Object](https://spaghetmenot.github.io/normalmagic/1.0/other_tools/instance_object/) --- # View Sharp - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.0/visualize_tools/view_sharp/#view-sharp) View Sharp[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/visualize_tools/view_sharp/#view-sharp "Permanent link") ====================================================================================================================== [![View Sharp Icon](https://spaghetmenot.github.io/normalmagic/1.0/assets/icons/view_sharp.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/icons/view_sharp.png) View sharp generates geometry to visualize sharp edges on a mesh. Similar to [View Normals](https://spaghetmenot.github.io/normalmagic/1.0/visualize_tools/view_normals/) colors are currently only available in [Material Preview](https://docs.blender.org/manual/en/latest/editors/3dview/display/shading.html#material-preview) and [Rendered](https://docs.blender.org/manual/en/latest/editors/3dview/display/shading.html#rendered) viewport shading. [![View Sharp](https://spaghetmenot.github.io/normalmagic/1.0/assets/view/view_sharp.gif)](https://spaghetmenot.github.io/normalmagic/1.0/assets/view/view_sharp.gif) Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/visualize_tools/view_sharp/#options "Permanent link") ---------------------------------------------------------------------------------------------------------------- * **Detect Sharp.** How to detect sharp edges: * **From Markup.** Use smooth shading attributes to define sharp edges. This might miss sharp edges defined by custom normals. * **From Normals.** Detect sharp edges from normals. This will detect sharp edges created from custom normals but can have a small amount of error. * **Both.** Combine both methods above to detect sharp edges. * **Tolerance (When "From Normals" is used).** Change the normal angle difference at which edges will be marked as sharp. * **Width.** Width of pipe geometry created in object-space. * **Color.** Color to apply to sharp edge visualization. --- # Instance Object - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.0/other_tools/instance_object/#instance-object) Instance Object[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/other_tools/instance_object/#instance-object "Permanent link") ================================================================================================================================= Instances another object (after modifiers) to replace or append to the current objects geometry. This can be particularly useful for re-using details. [![Instance](https://spaghetmenot.github.io/normalmagic/1.0/assets/other_tools/instance.gif)](https://spaghetmenot.github.io/normalmagic/1.0/assets/other_tools/instance.gif) Create duplicates of an object without needing to sync all modifier settings to the duplicates. [![Instance Append](https://spaghetmenot.github.io/normalmagic/1.0/assets/other_tools/instance_append.gif)](https://spaghetmenot.github.io/normalmagic/1.0/assets/other_tools/instance_append.gif) Append to and nest modular pieces. Such as these bolt inserts, these can be instanced themselves and used with [Surface Insert](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/surface_insert/) on larger meshes. Add-on The normalMagic [Add-on](https://spaghetmenot.github.io/normalmagic/1.0/add-on/) has instance operators to make working with this modifier easier: [![addonpanel](https://spaghetmenot.github.io/normalmagic/1.0/assets/add-on/instance_panel.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/add-on/instance_panel.png) * Create a linked duplicate of an object(s), replace all modifiers with **Instance Object** * Select original object being instanced Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/other_tools/instance_object/#options "Permanent link") ----------------------------------------------------------------------------------------------------------------- * **Object.** Object to instance * **As Instance.** When turned off, will copy object's geometry. Turned on will instance the object [Official Documentation](https://docs.blender.org/manual/en/latest/modeling/geometry_nodes/instances.html) * **Replace / Append.** Replace will replace current objects geometry with that of the instance. Append will keep geometry and append the instanced object with additional transform options. ### Transform Instance[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/other_tools/instance_object/#transform-instance "Permanent link") When appending the instance, these settings allow you to transform the instance relative to the objects origin. --- # Mark Sharp - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.0/other_tools/mark_sharp/#mark-sharp) Mark Sharp[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/other_tools/mark_sharp/#mark-sharp "Permanent link") ================================================================================================================== [![Mark Sharp Icon](https://spaghetmenot.github.io/normalmagic/1.0/assets/icons/mark_sharp.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/icons/mark_sharp.png) Mark Sharp will mark edges as sharp based on edge angle. This is similar to Blender's [Smooth By Angle](https://docs.blender.org/manual/en/latest/modeling/geometry_nodes/normals/smooth_by_angle.html) modifier but with extra options. There is also the option to remove custom normals. * [![Smooth By Angle](https://spaghetmenot.github.io/normalmagic/1.0/assets/mark_sharp_off.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/mark_sharp_off.png) **Smooth By Angle** One angle for all edges * [![Mark Sharp](https://spaghetmenot.github.io/normalmagic/1.0/assets/mark_sharp_on.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/mark_sharp_on.png) **Mark Sharp** Separate angles for convex/concave edges Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/other_tools/mark_sharp/#options "Permanent link") ------------------------------------------------------------------------------------------------------------ * **Keep Existing.** Keep edges marked as sharp. * **Angle Type.** * **Absolute Angle.** Use a single angle regardless off convexity. This behaves like "Smooth By Angle". * **Convex / Concave.** Specify different angles depending whether edges are convex or concave. * **Remove Custom Normals.** Will remove any custom normals from geometry and use default normal calculation from sharp edges. --- # Instance Objects - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.0/add-on/instance_objects/#instance-objects) Instance Objects[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/add-on/instance_objects/#instance-objects "Permanent link") =============================================================================================================================== [![instance panel](https://spaghetmenot.github.io/normalmagic/1.0/assets/add-on/instance_panel.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/add-on/instance_panel.png) These tools make it easier to use the [Instance Object](https://spaghetmenot.github.io/normalmagic/1.0/other_tools/instance_object/) modifier. Duplicate Instanced[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/add-on/instance_objects/#duplicate-instanced "Permanent link") ------------------------------------------------------------------------------------------------------------------------------------- This operator that acts like Blender's built-in [Duplicate Linked](https://docs.blender.org/manual/en/latest/scene_layout/object/editing/duplicate_linked.html) but also copies the results of all modifiers: [![duplicate instanced](https://spaghetmenot.github.io/normalmagic/1.0/assets/add-on/duplicate_instanced.gif)](https://spaghetmenot.github.io/normalmagic/1.0/assets/add-on/duplicate_instanced.gif) The **instanced** object can be duplicated with any existing methods e.g. Shift+D and will keep the same behavior. Using this operator on an object that already is using a "Instance Object" as it's last modifier will instance the original object to keep things simple. ### What it does[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/add-on/instance_objects/#what-it-does "Permanent link") For each selected object: 1. Create a new object with the same mesh data as selected object. This is so you can still enter "Edit Mode" on the instance. 2. Add [Instance Object](https://spaghetmenot.github.io/normalmagic/1.0/other_tools/instance_object/) modifier and specify selected object. 3. Select instance object and deselect original. Select Original[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/add-on/instance_objects/#select-original "Permanent link") ----------------------------------------------------------------------------------------------------------------------------- Selects the original object(s) being instanced by selected object(s). This is useful when you wish to change modifier behavior on the original. --- # Auto-Flip Faces - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.0/other_tools/auto-flip_faces/#auto-flip-faces) Auto-Flip Faces[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/other_tools/auto-flip_faces/#auto-flip-faces "Permanent link") ================================================================================================================================= [![Auto-Flip Faces Icon](https://spaghetmenot.github.io/normalmagic/1.0/assets/icons/auto-flip.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/icons/auto-flip.png) Flipped faces on meshes can cause multiple issues. Traditionally you would check for flipped faces by using the the 'Face Orientation' overlay and resolve areas of flipped faces one by one. This modifier will detect flipped faces and fix them automatically. * [![Faces Flipped](https://spaghetmenot.github.io/normalmagic/1.0/assets/suzanne_flipped.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/suzanne_flipped.png) Faces Flipped * [![Faces Unflipped](https://spaghetmenot.github.io/normalmagic/1.0/assets/suzanne_unflipped.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/suzanne_unflipped.png) Faces Un-flipped Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/other_tools/auto-flip_faces/#options "Permanent link") ----------------------------------------------------------------------------------------------------------------- * **Invert.** Change direction of entire mesh from outside to inside * **Hit Rate.** Tune the detection of flipped faces. Higher values will detect more but increase the risk of false positives. --- # Sharp Edges to Attribute - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.0/other_tools/sharp_edges_to_attribute/#sharp-edges-to-attribute) Sharp Edges to Attribute[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/other_tools/sharp_edges_to_attribute/#sharp-edges-to-attribute "Permanent link") ============================================================================================================================================================ [![Sharp Edges to Attribute Icon](https://spaghetmenot.github.io/normalmagic/1.0/assets/icons/sharp_to_attribute.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/icons/sharp_to_attribute.png) Write edge and point attributes based on sharp edges or other arbitrary edge attributes. * Edge attributes can be used for: * Mark sharp edges as UV seams. * Add a bevel weight to sharp edges. * Detect sharp edges from custom normals and mark them as sharp. * Point attributes can be used for: * Creating a vertex group for selection in another modifier from sharp edges. * Expanding selection with or without a falloff. Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/other_tools/sharp_edges_to_attribute/#options "Permanent link") -------------------------------------------------------------------------------------------------------------------------- ### Sharp Edge Detection[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/other_tools/sharp_edges_to_attribute/#sharp-edge-detection "Permanent link") How to specify edges to write to attribute(s) * **Detect From Markup.** Use smooth shading attributes to define sharp edges. This might miss sharp edges defined by custom normals. * **Detect Custom.** Detect sharp edges from normals. This will detect sharp edges created from custom normals but can have a small amount of error. * **Tolerance (When "Detect Custom" is on).** Change the normal angle difference at which edges will be marked as sharp. ### Expand Points[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/other_tools/sharp_edges_to_attribute/#expand-points "Permanent link") Expand point selection. Can be useful in [Selection Panel](https://spaghetmenot.github.io/normalmagic/1.0/common_settings/#selection) of other modifiers. * **Point Values.** How selection is expanded: * **Float.** Each expansion gets a lower value creating a falloff. * **Bool.** Each expansion is set to 1. * **Expand Iterations.** How many edges to expand point selection. * **Falloff (When Point Values are "Float").** Falloff of point selection. similar to [mask falloff](https://spaghetmenot.github.io/normalmagic/1.0/common_settings/#base-falloff) ### Output Attributes[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/other_tools/sharp_edges_to_attribute/#output-attributes "Permanent link") What to name Edge / Point attributes. **Leaving blank will not write to any attributes.** --- # Boolean Pro - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.0/add-on/boolean_pro/#boolean-pro) Boolean Pro[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/add-on/boolean_pro/#boolean-pro "Permanent link") ================================================================================================================ [![bpro panel](https://spaghetmenot.github.io/normalmagic/1.0/assets/add-on/bpro_panel.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/add-on/bpro_panel.png) These tools make it easier to use the [Boolean Pro](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/boolean_pro/) modifier. Top Panel Operators[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/add-on/boolean_pro/#top-panel-operators "Permanent link") -------------------------------------------------------------------------------------------------------------------------------- The top of the panel contains operators for all Boolean Pro modes. * ### How to use[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/add-on/boolean_pro/#how-to-use "Permanent link") [![bool diff](https://spaghetmenot.github.io/normalmagic/1.0/assets/add-on/boolean_difference.gif)](https://spaghetmenot.github.io/normalmagic/1.0/assets/add-on/boolean_difference.gif) **1.** Select cutter object(s). **2.** Select the object you wish to cut. **3.** Perform Boolean operation using the buttons. ### Operations[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/add-on/boolean_pro/#operations "Permanent link") | Intersect | Union | Difference | Slice | | --- | --- | --- | --- | | [![Intersect](https://spaghetmenot.github.io/normalmagic/1.0/assets/booleans/bool_intersect.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/booleans/bool_intersect.png) | [![Union](https://spaghetmenot.github.io/normalmagic/1.0/assets/booleans/bool_union.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/booleans/bool_union.png) | [![Difference](https://spaghetmenot.github.io/normalmagic/1.0/assets/booleans/bool_diff.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/booleans/bool_diff.png) | [![Slice](https://spaghetmenot.github.io/normalmagic/1.0/assets/booleans/bool_slice.gif)](https://spaghetmenot.github.io/normalmagic/1.0/assets/booleans/bool_slice.gif) | ### Split[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/add-on/boolean_pro/#split "Permanent link") The "Split" Operator will duplicate the object: * The original will get a **Difference** Boolean * The duplicate will get a **Intersect** Boolean. There is an option under [Cutter Behavior](https://spaghetmenot.github.io/normalmagic/1.0/add-on/boolean_pro/#cutter-behavior) to make the intersection object linked. Modifier Settings[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/add-on/boolean_pro/#modifier-settings "Permanent link") ---------------------------------------------------------------------------------------------------------------------------- This section lets you change what settings the Boolean Pro modifiers get **before being added** (Settings for existing modifiers won't be updated). All options in this section are covered on the [Boolean Pro modifier](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/boolean_pro/) page. Cutter Behavior[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/add-on/boolean_pro/#cutter-behavior "Permanent link") ------------------------------------------------------------------------------------------------------------------------ This section lets you choose what happens to objects when you add a Boolean. * **Display As.** Change the display mode of the cutter object: * **Wireframe.** Display cutter as wireframe. * **Bounds.** Display cutter as bounding box. * **Collection.** When enabled, specify the name of a collection to add cutter objects to. If the collection doesn't exist one will be created. * **Deselect.** Which objects get deselected after the boolean operation: * **None.** Keep all objects selected. * **Main Object.** Deselect the object that receives the modifier. * **Cutters.** Deselect cutter object(s) * **Parent to Object.** Parent the cutter object(s) to the main object. This will transform them together when you move the main object. * **Link Split Mesh.** When performing the [Split](https://spaghetmenot.github.io/normalmagic/1.0/add-on/boolean_pro/#split) operation, link the intersected mesh to the original so editing one mesh edits the other too. * **Auto-Smooth.** Apply Blender's "Smooth By Angle" modifier to objects in Boolean operation if they don't have one already: * **Cutters.** Apply smoothing to cutter object(s). * **All.** Apply smoothing to all objects involved in the Boolean. * **None.** Don't apply smoothing to any objects. * **Angle.** Angle to set auto-smoothing at when "Auto-Smooth" is turned on. Convert Existing Booleans[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/add-on/boolean_pro/#convert-existing-booleans "Permanent link") -------------------------------------------------------------------------------------------------------------------------------------------- Will convert all 'Boolean' modifiers on selected objects to 'Boolean Pro'. All relevant settings will be transferred. --- # normalMagic Add-on - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.0/add-on/#normalmagic-add-on) normalMagic Add-on[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.0/add-on/#normalmagic-add-on "Permanent link") ================================================================================================================== This add-on is included with the **Pro** version of normalMagic and makes working with certain modifiers easier. * [Install Add-on](https://spaghetmenot.github.io/normalmagic/1.0/install/#add-on) * [Preferences](https://spaghetmenot.github.io/normalmagic/1.0/add-on/preferences/) * [Boolean Pro](https://spaghetmenot.github.io/normalmagic/1.0/add-on/boolean_pro/) * * * [![bpro panel](https://spaghetmenot.github.io/normalmagic/1.0/assets/add-on/bpro_panel.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/add-on/bpro_panel.png) Set up booleans using the Boolean Pro [modifier](https://spaghetmenot.github.io/normalmagic/1.0/mesh_tools/boolean_pro/) with one click and convert existing booleans. * [Instance Objects](https://spaghetmenot.github.io/normalmagic/1.0/add-on/instance_objects/) * * * [![instance panel](https://spaghetmenot.github.io/normalmagic/1.0/assets/add-on/instance_panel.png)](https://spaghetmenot.github.io/normalmagic/1.0/assets/add-on/instance_panel.png) Duplicate objects as instances using the Instance Object [modifier](https://spaghetmenot.github.io/normalmagic/1.0/other_tools/instance_object/) with one click. --- # Mesh Modifiers - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/#mesh-modifiers) Mesh Modifiers[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/#mesh-modifiers "Permanent link") ============================================================================================================== These modifiers affect normals, underlying geometry and other attributes such as UVs. * [Boolean Pro](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/boolean_pro/) : Replacement for Blender's built-in boolean modifier with extra options and accurate normals. * [Surface Project](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/surface_project/) : Projects and blends mesh edges onto other mesh surfaces. * [Surface Insert](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/surface_insert/) : Projects, cuts, blends and welds other mesh objects into the surface of a mesh. * [Symmetrize](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/symmetrize/) : Single axis mirror modifier with extra options and works with custom normals. --- # normalMagic 404 - Not found =============== --- # normalMagic 404 - Not found =============== --- # Boolean Pro - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/boolean_pro/#boolean-pro) Boolean Pro[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/boolean_pro/#boolean-pro "Permanent link") ==================================================================================================================== [![Boolean Pro Icon](https://spaghetmenot.github.io/normalmagic/1.1/assets/icons/boolean_cut_7_sparkles.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/icons/boolean_cut_7_sparkles.png) Boolean Pro is designed to act as a replacement for Blender's built-in boolean modifier, and provides extra functionality. For reference, documentation for Blender's built-in modifier can be found [here](https://docs.blender.org/manual/en/latest/modeling/modifiers/generate/booleans.html) . Add-on The [normalMagic Add-on](https://spaghetmenot.github.io/normalmagic/1.1/add-on/) includes operators to quickly set up the Boolean Pro modifier, similar to the Bool Tool add-on. The most powerful feature is transferring the normals automatically from boolean inputs for perfect boolean normals: [![Perfect Boolean Normals](https://spaghetmenot.github.io/normalmagic/1.1/assets/bool_pro_1.gif)](https://spaghetmenot.github.io/normalmagic/1.1/assets/bool_pro_1.gif) The cutter object can be given an outset (expanded) with even thickness before cutting: [![Expand Boolean](https://spaghetmenot.github.io/normalmagic/1.1/assets/booleans/bool_expand.gif)](https://spaghetmenot.github.io/normalmagic/1.1/assets/booleans/bool_expand.gif) There is also a **_Slice_** operation with optional inset: | Intersect | Union | Difference | Slice | | --- | --- | --- | --- | | [![Intersect](https://spaghetmenot.github.io/normalmagic/1.1/assets/booleans/bool_intersect.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/booleans/bool_intersect.png) | [![Union](https://spaghetmenot.github.io/normalmagic/1.1/assets/booleans/bool_union.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/booleans/bool_union.png) | [![Difference](https://spaghetmenot.github.io/normalmagic/1.1/assets/booleans/bool_diff.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/booleans/bool_diff.png) | [![Slice](https://spaghetmenot.github.io/normalmagic/1.1/assets/booleans/bool_slice.gif)](https://spaghetmenot.github.io/normalmagic/1.1/assets/booleans/bool_slice.gif) | Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/boolean_pro/#options "Permanent link") ------------------------------------------------------------------------------------------------------------ ### Main[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/boolean_pro/#main "Permanent link") * **Operation:** Which boolean operation to perform. * **Intersect:** Keep the part of the mesh that is shared between inputs. * **Union:** Combine input meshes into a single mesh. * **Difference:** (Default) Subtract input meshes from source mesh. * **Slice:** Slice source mesh with input meshes. This combines "Intersect" and "Difference" into the same output. * **Object:** Mesh object to use for boolean operation. * **Collection:** Collection containing mesh objects to use for boolean operation. * **Solver:** * **Float:** Simple solver with good performance. * **Exact:** Slower solver with best results on coplanar faces. * **Manifold:** (Default) Fastest solver that only works on manifold meshes, but gives better results. * **Outset:** Expands the cutter mesh with even thickness. * **Inset (Slice Mode):** Offsets the cutter inwards for the intersect boolean to give a gap between meshes. ### Weld[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/boolean_pro/#weld "Permanent link") * **Merge by Distance:** Merge vertices based on distance. * **Distance:** Distance at which to merge vertices. ### Shading[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/boolean_pro/#shading "Permanent link") * **Materials:** How to assign materials to new faces. * **Index Based:** Match material index from boolean meshes. * **Specify:** Specify a material to apply to all new faces. * **Transfer:** Transfer materials from boolean meshes. This might not be accurate when using collections. * **Transfer Normals:** Use normals from input meshes. Produces the best normals. * **Mark Sharp:** Mark all intersection edges between meshes as sharp. ### Solver Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/boolean_pro/#solver-options "Permanent link") * **Result:** Whether to output a solid object or a cut surface. * **Solid:** Output full Boolean result. * **Surface:** Output a cut surface with open edges where new faces would appear. * **Sequential (Float solver only):** Perform Booleans one mesh island at a time. This often gives better results but can be slower. * **Self Intersection (Exact solver only):** Correctly calculates cases when one or both operands have self-intersections. This involves more calculations making the node slower. * **Hole Tolerant:** Optimizes the Boolean output for non-manifold geometry at the cost of increased computational time. Because of the performance impact, this option should only be enabled when the solver demonstrates errors with non-manifold geometry. --- # Normal Modifiers - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/#normal-modifiers) Normal Modifiers[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/#normal-modifiers "Permanent link") ==================================================================================================================== These modifiers effect the normals of a mesh and nothing else. * [Normal Transfer](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/normal_transfer/) * [Smooth Normals](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/smooth_normals/) * [Face Weighted Normals](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/face_weighted_normals/) * [Bent Normals](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/bent_normals/) * [Repair Bevel Normals](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/repair_bevel_normals/) * [Repair Boolean Normals](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/repair_boolean_normals/) * [Repair Mirrored Normals](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/repair_mirrored_normals/) * [Lock Normals](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/lock_normals/) --- # Visualize Modifiers - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.1/visualize_tools/#visualize-modifiers) Visualize Modifiers[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/visualize_tools/#visualize-modifiers "Permanent link") ============================================================================================================================= These modifiers will produce geometry to visualize normals and related attributes: * [View Normals](https://spaghetmenot.github.io/normalmagic/1.1/visualize_tools/view_normals/) * [View Sharp](https://spaghetmenot.github.io/normalmagic/1.1/visualize_tools/view_sharp/) --- # Other Modifiers - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.1/other_tools/#other-modifiers) Other Modifiers[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/other_tools/#other-modifiers "Permanent link") ================================================================================================================= These modifiers change things that are related to normals such as sharp edges or face orientation: * [Mark Sharp](https://spaghetmenot.github.io/normalmagic/1.1/other_tools/mark_sharp/) * [Auto-Flip Faces](https://spaghetmenot.github.io/normalmagic/1.1/other_tools/auto-flip_faces/) * [Sharp Edges to Attribute](https://spaghetmenot.github.io/normalmagic/1.1/other_tools/sharp_edges_to_attribute/) * [Instance Object](https://spaghetmenot.github.io/normalmagic/1.1/other_tools/instance_object/) * [Change Materials](https://spaghetmenot.github.io/normalmagic/1.1/other_tools/change_materials/) --- # Manual Tools - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.1/manual_tools/#manual-tools) Manual Tools[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/manual_tools/#manual-tools "Permanent link") ============================================================================================================ These tools are available as destructive operations in "Edit" mode. There isn't much here yet, if you wish to see more modifiers become manual tools please reach out! * [Recalculate Weighted](https://spaghetmenot.github.io/normalmagic/1.1/manual_tools/recalculate_weighted/) * [Add Custom Normals](https://spaghetmenot.github.io/normalmagic/1.1/manual_tools/add_custom_normals/) --- # Surface Project - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/surface_project/#surface-project) Surface Project[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/surface_project/#surface-project "Permanent link") ================================================================================================================================ [![Surface Project](https://spaghetmenot.github.io/normalmagic/1.1/assets/icons/surface_blend_9.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/icons/surface_blend_9.png) Project and blend geometry onto other mesh surfaces. Transfer normals and UVs for a seamless blend. * [![Surface Project 1](https://spaghetmenot.github.io/normalmagic/1.1/assets/surface_project/surface_blend_1.gif)](https://spaghetmenot.github.io/normalmagic/1.1/assets/surface_project/surface_blend_1.gif) Blend a mesh object to other surfaces. Multiple other mesh surfaces can be specified. * [![Surface Project 2](https://spaghetmenot.github.io/normalmagic/1.1/assets/surface_project/surface_blend_2.gif)](https://spaghetmenot.github.io/normalmagic/1.1/assets/surface_project/surface_blend_2.gif) Project mesh as a "Decal" onto other objects. This flattens the geometry but keeps the original normals. Open Edges This modifier works best on meshes with "open edges", i.e. non-solid objects. These edges are used as the base for most [masking methods](https://spaghetmenot.github.io/normalmagic/1.1/common_settings/#mask-falloff) . [![open_edges](https://spaghetmenot.github.io/normalmagic/1.1/assets/surface_project/open_edges.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/surface_project/open_edges.png) Examples[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/surface_project/#examples "Permanent link") ------------------------------------------------------------------------------------------------------------------ Examples can be found in the **Surface Project/Insert** scene in the [example file](https://spaghetmenot.github.io/normalmagic/1.1/examples/) . [![examples](https://spaghetmenot.github.io/normalmagic/1.1/assets/examples/surface_project_insert.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/examples/surface_project_insert.png) Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/surface_project/#options "Permanent link") ---------------------------------------------------------------------------------------------------------------- ### Projection Targets[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/surface_project/#projection-targets "Permanent link") Choose which meshes to project to. * **Target Objects:** How many mesh objects to project to. * **Objects:** Choose individual mesh objects to project to. * **Collection:** Choose a collection containing mesh objects to project to. ### Projection[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/surface_project/#projection "Permanent link") Define how mesh is projected to surfaces. * **Method:** Method for vertex projection: [![Method GIF](https://spaghetmenot.github.io/normalmagic/1.1/assets/surface_project/projection_methods.gif)](https://spaghetmenot.github.io/normalmagic/1.1/assets/surface_project/projection_methods.gif) * **Wrap to Surface:** Wrap mesh to target surface. Points will be projected to target surface and re-displaced based on their calculated height. * **Blend with Surface:** Project points to target surface then blend between original and projected positions. * **Project Decal:** Flatten geometry to target surface while keeping original normals. Ideal for "floaters" intended for baking. * **Surface Offset:** Move projected vertices a fixed amount towards or away from the target surface. #### Projection Direction[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/surface_project/#projection-direction "Permanent link") Control the direction and properties of surface projection. * **Project Direction:** Define direction of projection rays: * **Object Direction:** Direction in object space (default -Z). * **World Direction:** Direction in world space (default -Z). * **Mesh Normal:** Use individual point normals. * **Mesh Island Normal:** Use the average normal of each mesh island. * **Mesh Tangent:** Use individual point tangents. * **Surface Normal:** Use the normal of the closest part of target surface. * **Base Height:** How height is calculated for **_Wrap to Surface_** and **_Project Decal_** projection methods: * **Boundary Center:** Calculate height from a plane defined by the center of the boundary and the projection direction. * **Object Origin:** Calculate height from a plane defined by the objects origin and the projection direction. * **Re-Displace:** When using **_Wrap to Surface_**. Direction to apply calculated height: * **Projection:** Apply height displacement using the projection direction. * **Surface Normal:** Apply height displacement using the normal of the target surface. * **Ray Length:** Maximum distance rays will collide with target surface. Best to keep at a large enough value that all points collide. * **No Hit:** Change behavior of vertices when projection rays miss: * **Unchanged:** Do not move vertex. * **Closest Surface to Max Dist:** Move vertex to the maximum distance in ray direction then snap to closest point on target surface. #### Projection Masking[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/surface_project/#projection-masking "Permanent link") Control how projection is masked. See [Mask Falloff](https://spaghetmenot.github.io/normalmagic/1.1/common_settings/#mask-falloff) . [![falloff](https://spaghetmenot.github.io/normalmagic/1.1/assets/surface_insert/falloff.gif)](https://spaghetmenot.github.io/normalmagic/1.1/assets/surface_insert/falloff.gif) * **Vertex Group:** Choose a vertex group to project. ### Transfer Normals[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/surface_project/#transfer-normals "Permanent link") Transfer normals from target surfaces. Internally this uses [Normal Transfer](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/normal_transfer/) . Normals are transferred after vertex projection, using the closest target surface. * **Normal Domain:** Whether normals are stored on points (smooth) or face corners (allows sharp edges). * **Normal Masking:** How to mask the normal transfer: * **Projection Mask:** Use the same mask used for vertex [projection](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/surface_project/#projection-masking) . * **New Mask:** Create a new mask using [mask falloff](https://spaghetmenot.github.io/normalmagic/1.1/common_settings/#mask-falloff) . * **Vertex Group:** Limit all normal transfer to a vertex group. ### Transfer UVs[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/surface_project/#transfer-uvs "Permanent link") Transfer UVs from target surface. * **UV Map From:** Which UV Map to transfer from the **surface**. * **UV Map To:** Which UV Map to write to on this object. --- # Lock Normals - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/lock_normals/#lock-normals) Lock Normals[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/lock_normals/#lock-normals "Permanent link") ========================================================================================================================= [![Icon](https://spaghetmenot.github.io/normalmagic/1.1/assets/icons/lock_normals.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/icons/lock_normals.png) Creates custom normals for a mesh if none exist. Can also be used to convert between "Free" and "Tangent Space" normals, see the [Blender Docs](https://docs.blender.org/manual/en/latest/modeling/geometry_nodes/mesh/write/set_mesh_normal.html#properties) : Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/lock_normals/#options "Permanent link") --------------------------------------------------------------------------------------------------------------- * **Custom Normal Type:** How to store custom normals: * **Free:** Store custom normals as simple vectors in the local space of the mesh. This is efficient and fast to evaluate but does not support deformation. * **Tangent Space:** Store normals in a deformation dependent custom transformation space. This method is slower, but can be better when subsequent operations change the mesh without handling normals specifically. * **Normal Domain:** When **_Custom Normal Type_** is set to **_Free_**: * **Face Corner.** Store normals on face corners, allows for sharp edges. * **Point.** Store normals on points, cannot have sharp edges. --- # View Sharp - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.1/visualize_tools/view_sharp/#view-sharp) View Sharp[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/visualize_tools/view_sharp/#view-sharp "Permanent link") ====================================================================================================================== [![View Sharp Icon](https://spaghetmenot.github.io/normalmagic/1.1/assets/icons/view_sharp.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/icons/view_sharp.png) View sharp generates geometry to visualize sharp edges on a mesh. Similar to [View Normals](https://spaghetmenot.github.io/normalmagic/1.1/visualize_tools/view_normals/) colors are currently only available in [Material Preview](https://docs.blender.org/manual/en/latest/editors/3dview/display/shading.html#material-preview) and [Rendered](https://docs.blender.org/manual/en/latest/editors/3dview/display/shading.html#rendered) viewport shading. [![View Sharp](https://spaghetmenot.github.io/normalmagic/1.1/assets/view/view_sharp.gif)](https://spaghetmenot.github.io/normalmagic/1.1/assets/view/view_sharp.gif) Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/visualize_tools/view_sharp/#options "Permanent link") ---------------------------------------------------------------------------------------------------------------- * **Detect Sharp.** How to detect sharp edges: * **From Markup.** Use smooth shading attributes to define sharp edges. This might miss sharp edges defined by custom normals. * **From Normals.** Detect sharp edges from normals. This will detect sharp edges created from custom normals but can have a small amount of error. * **Both.** Combine both methods above to detect sharp edges. * **Tolerance (When "From Normals" is used).** Change the normal angle difference at which edges will be marked as sharp. * **Width.** Width of pipe geometry created in object-space. * **Color.** Color to apply to sharp edge visualization. --- # Mark Sharp - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.1/other_tools/mark_sharp/#mark-sharp) Mark Sharp[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/other_tools/mark_sharp/#mark-sharp "Permanent link") ================================================================================================================== [![Mark Sharp Icon](https://spaghetmenot.github.io/normalmagic/1.1/assets/icons/mark_sharp.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/icons/mark_sharp.png) Mark Sharp will mark edges as sharp based on edge angle. This is similar to Blender's [Smooth By Angle](https://docs.blender.org/manual/en/latest/modeling/geometry_nodes/normals/smooth_by_angle.html) modifier but with extra options. There is also the option to remove custom normals. * [![Smooth By Angle](https://spaghetmenot.github.io/normalmagic/1.1/assets/mark_sharp_off.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/mark_sharp_off.png) **Smooth By Angle** One angle for all edges * [![Mark Sharp](https://spaghetmenot.github.io/normalmagic/1.1/assets/mark_sharp_on.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/mark_sharp_on.png) **Mark Sharp** Separate angles for convex/concave edges Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/other_tools/mark_sharp/#options "Permanent link") ------------------------------------------------------------------------------------------------------------ * **Keep Existing.** Keep edges marked as sharp. * **Angle Type.** * **Absolute Angle.** Use a single angle regardless off convexity. This behaves like "Smooth By Angle". * **Convex / Concave.** Specify different angles depending whether edges are convex or concave. * **Remove Custom Normals.** Will remove any custom normals from geometry and use default normal calculation from sharp edges. --- # Add Custom Normals - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.1/manual_tools/add_custom_normals/#add-custom-normals) Add Custom Normals[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/manual_tools/add_custom_normals/#add-custom-normals "Permanent link") =========================================================================================================================================== [![Icon](https://spaghetmenot.github.io/normalmagic/1.1/assets/icons/add_custom_normals.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/icons/add_custom_normals.png) Adds custom normals to selected mesh object. Internally uses the [Lock Normals](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/lock_normals/) tool. Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/manual_tools/add_custom_normals/#options "Permanent link") --------------------------------------------------------------------------------------------------------------------- * **Normal Type:** How to store custom normals: * **Free:** Store custom normals as simple vectors in the local space of the mesh. This is efficient and fast to evaluate but does not support deformation. * **Tangent Space:** Store normals in a deformation dependent custom transformation space. This method is slower, but can be better when subsequent operations change the mesh without handling normals specifically. * **Normal Domain:** When **_Custom Normal Type_** is set to **_Free_**: * **Face Corner.** Store normals on face corners, allows for sharp edges. * **Point.** Store normals on points, cannot have sharp edges. --- # Auto-Flip Faces - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.1/other_tools/auto-flip_faces/#auto-flip-faces) Auto-Flip Faces[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/other_tools/auto-flip_faces/#auto-flip-faces "Permanent link") ================================================================================================================================= [![Auto-Flip Faces Icon](https://spaghetmenot.github.io/normalmagic/1.1/assets/icons/auto-flip.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/icons/auto-flip.png) Flipped faces on meshes can cause multiple issues. Traditionally you would check for flipped faces by using the the 'Face Orientation' overlay and resolve areas of flipped faces one by one. This modifier will detect flipped faces and fix them automatically. * [![Faces Flipped](https://spaghetmenot.github.io/normalmagic/1.1/assets/suzanne_flipped.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/suzanne_flipped.png) Faces Flipped * [![Faces Unflipped](https://spaghetmenot.github.io/normalmagic/1.1/assets/suzanne_unflipped.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/suzanne_unflipped.png) Faces Un-flipped Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/other_tools/auto-flip_faces/#options "Permanent link") ----------------------------------------------------------------------------------------------------------------- * **Invert.** Change direction of entire mesh from outside to inside * **Hit Rate.** Tune the detection of flipped faces. Higher values will detect more but increase the risk of false positives. --- # Preferences - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.1/add-on/preferences/#preferences) Preferences[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/add-on/preferences/#preferences "Permanent link") ================================================================================================================ These options show up under **_Edit/Preferences/Add-ons/normalMagic_** * **Show Sidebar Panel.** Enable/Disable the add-on's sidebar panel * **Category.** Choose which sidebar category the panel is located in --- # Smooth Normals - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/smooth_normals/#smooth-normals) Smooth Normals[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/smooth_normals/#smooth-normals "Permanent link") =============================================================================================================================== [![Smooth Normals Icon](https://spaghetmenot.github.io/normalmagic/1.1/assets/icons/smooth_normals_1.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/icons/smooth_normals_1.png) Smooth Normals will smooth mesh normals without smoothing mesh topology. This can be useful in a variety of situations. * [![fix_bad_shading](https://spaghetmenot.github.io/normalmagic/1.1/assets/smooth/fix%20bad_shading.gif)](https://spaghetmenot.github.io/normalmagic/1.1/assets/smooth/fix%20bad_shading.gif) Achieve good shading on difficult topology. (Pinched, uneven or distorted normals). * [![cel_shading](https://spaghetmenot.github.io/normalmagic/1.1/assets/smooth/cel_contour.gif)](https://spaghetmenot.github.io/normalmagic/1.1/assets/smooth/cel_contour.gif) Simplify cel shading contours. * [![smooth_flatten](https://spaghetmenot.github.io/normalmagic/1.1/assets/smooth/smooth_flatten.gif)](https://spaghetmenot.github.io/normalmagic/1.1/assets/smooth/smooth_flatten.gif) Smooth and/or completely flatten normal islands. * [![mix_point_normals](https://spaghetmenot.github.io/normalmagic/1.1/assets/smooth/mix_point_normals.gif)](https://spaghetmenot.github.io/normalmagic/1.1/assets/smooth/mix_point_normals.gif) Mix smoothed point normals for a unique effect (cheap SSS shading). Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/smooth_normals/#options "Permanent link") ----------------------------------------------------------------------------------------------------------------- * **Normal Domain.** Whether normals are stored on points (smooth) or face corners (allows sharp edges). * **Keep Sharp.** Keep edges marked as sharp when normals are on face corners. ### Smoothed Proxy Mesh[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/smooth_normals/#smoothed-proxy-mesh "Permanent link") Generate a smoothed version of the mesh to transfer normals from. The mesh is split on sharp edges before smoothing, you can preview this mesh from the debug panel. [![smoothed_proxy](https://spaghetmenot.github.io/normalmagic/1.1/assets/smooth/smoothed_proxy.gif)](https://spaghetmenot.github.io/normalmagic/1.1/assets/smooth/smoothed_proxy.gif) * **Transfer Method.** How to transfer the normals from the smoothed mesh. * **Closest Surface.** Transfer normals from the closest point of the smoothed mesh. * **Point Index.** Transfer normals by their original point index. * **Iterations.** How many iterations of smoothing to perform. ### Smooth Normals[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/smooth_normals/#smooth-normals_1 "Permanent link") Controls methods of directly smoothing mesh normals. * **Smooth Method.** How to smooth normals: * **None.** Don't perform any direct normal smoothing. * **Blur Normals.** Fastest Method of smoothing at the cost of being less accurate and not preserving shape as well. * **Smooth Normals.** Iterative smooth function of normals. Slower than blur but can produce better results. * **Smooth/Blur Iterations.** How many iterations of smoothing to apply to normals. * **Face Weight Influence.** Cheap approximation of face weighted normals, lessens the contribution of smaller faces. ### Flatten Normal Islands[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/smooth_normals/#flatten-normal-islands "Permanent link") Calculate the average normal direction for entire normal islands (defined by sharp edges). * **Amount.** How much to blend to the completely flat island normals. ### Mix Point Normals[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/smooth_normals/#mix-point-normals "Permanent link") Mix in smoothed point normals. This can achieve a unique effect, somewhat like sub-surface scattering. * **Amount.** How much to blend to the smoothed point normals. * **Blur Iterations.** Perform blur iterations on the point normals. ### Selection[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/smooth_normals/#selection "Permanent link") See [Selection](https://spaghetmenot.github.io/normalmagic/1.1/common_settings/#selection) options --- # Symmetrize - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/symmetrize/#symmetrize) Symmetrize[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/symmetrize/#symmetrize "Permanent link") ================================================================================================================= [![Icon](https://spaghetmenot.github.io/normalmagic/1.1/assets/icons/symmetrize.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/icons/symmetrize.png) Mirrors a mesh on a single axis. Similar to Blender's [Mirror Modifier](https://docs.blender.org/manual/en/latest/modeling/modifiers/generate/mirror.html) but with the following improvements: 1. Correctly mirrors custom normals. 2. Optional gizmo for displaying the symmetry plane and direction. 3. Output attribute for mirrored faces. 4. Global space option without having to use another object. [![Symmetrize GIF](https://spaghetmenot.github.io/normalmagic/1.1/assets/symmetrize/symmetrize.gif)](https://spaghetmenot.github.io/normalmagic/1.1/assets/symmetrize/symmetrize.gif) The one disadvantage of Symmetrize is the limitation to a single axis. However, this can easily be overcome by using another symmetrize modifier. Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/symmetrize/#options "Permanent link") ----------------------------------------------------------------------------------------------------------- * **Symmetry Space:** Coordinate space to use for symmetry. * **Local:** Symmetrize in object's local space (default mirror modifier behavior). * **Global:** Symmetrize in global space based on the world origin. * **Object:** Symmetrize using another objects position and rotation. * **Axis:** Which axis to symmetrize on, relative to the **_Symmetry Space_**. * **Flip Axis:** Reverse direction of symmetry operation. * **Show Axis:** Display location and direction of symmetry operation. * **Clipping:** Clip geometry on the mirrored side of the symmetry plane. * **None:** No Clipping. All geometry will be mirrored across the symmetry plane. * **Snap Points:** Points on the mirrored side will be snapped to the symmetry plane. * **Cut Geometry:** Geometry will be sliced on the symmetry plane. ### Merge Points[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/symmetrize/#merge-points "Permanent link") Merge points by distance after symmetry operation. ### UVs[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/symmetrize/#uvs "Permanent link") Options to flip and offset UVs. * **UV Map:** Name of UV Map to edit. * **Flip U:** Flip mirrored UVs horizontally. * **Flip V:** Flip mirrored UVs vertically. * **Offset:** Offset mirrored UVs. ### Center Normals[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/symmetrize/#center-normals "Permanent link") * **Mark Sharp:** Mark center edges as sharp based on angle. * **Angle:** Minimum angle for a sharp edge. * **Unify Custom Normals:** Face corner normals on center points will average. Sharp edges will be preserved. Only applies if custom normals exist on mesh. --- # Normal Transfer - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/normal_transfer/#normal-transfer) Normal Transfer[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/normal_transfer/#normal-transfer "Permanent link") ================================================================================================================================== [![Normal Transfer Icon](https://spaghetmenot.github.io/normalmagic/1.1/assets/icons/normal_transfer_4.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/icons/normal_transfer_4.png) Transfer Normals from other mesh objects. This can be useful in a variety of situations: * [![blend](https://spaghetmenot.github.io/normalmagic/1.1/assets/normal_transfer/blend.gif)](https://spaghetmenot.github.io/normalmagic/1.1/assets/normal_transfer/blend.gif) Blend between meshes without affecting geometry. * [![fix](https://spaghetmenot.github.io/normalmagic/1.1/assets/normal_transfer/fix.gif)](https://spaghetmenot.github.io/normalmagic/1.1/assets/normal_transfer/fix.gif) Fix / smooth shading of bad topology. See also [Smooth Normals](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/smooth_normals/) and [Boolean Pro](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/boolean_pro/) * [![foliage](https://spaghetmenot.github.io/normalmagic/1.1/assets/normal_transfer/foliage.gif)](https://spaghetmenot.github.io/normalmagic/1.1/assets/normal_transfer/foliage.gif) Create better shading for foliage cards. * [![floater](https://spaghetmenot.github.io/normalmagic/1.1/assets/normal_transfer/floater.gif)](https://spaghetmenot.github.io/normalmagic/1.1/assets/normal_transfer/floater.gif) Match normals of "floater" decals. See also [Surface Project](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/surface_project/) Examples[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/normal_transfer/#examples "Permanent link") -------------------------------------------------------------------------------------------------------------------- Examples can be found in the **Normal Modifiers** scene in the [example file](https://spaghetmenot.github.io/normalmagic/1.1/examples/) [![examples](https://spaghetmenot.github.io/normalmagic/1.1/assets/examples/normal_modifiers.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/examples/normal_modifiers.png) Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/normal_transfer/#options "Permanent link") ------------------------------------------------------------------------------------------------------------------ * **Normal Domain.** Whether normals are stored on points (smooth) or face corners (allows sharp edges). ### Transfer Geometry[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/normal_transfer/#transfer-geometry "Permanent link") Choose which meshes to transfer normals from. * **Object Count.** How many mesh objects to transfer normals from. * **Objects.** Choose individual mesh objects to transfer normals from. * **Collection.** Choose a collection containing mesh objects to transfer normals from. ### Transfer[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/normal_transfer/#transfer "Permanent link") * **Method.** How to sample the normal from target surface: * **Closest Surface.** Sample normal at closest target surface. * **Project Object Direction.** Raycast-sample target geometry in object space. * **Project Island Normal.** Raycast-sample target geometry along the average mesh island normal. * **Project Source Normals.** Raycast-sample target geometry along mesh normals of this object. * **Ray Length (Project Methods).** Maximum length of raycast to target surface. * **Direction (Project Object Direction Only).** Direction in object space to raycast (default is -Z). * **Automatic Masking.** Mask falloff for transferring normals, see [Mask Falloff](https://spaghetmenot.github.io/normalmagic/1.1/common_settings/#mask-falloff) ### Selection[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/normal_transfer/#selection "Permanent link") See [Selection](https://spaghetmenot.github.io/normalmagic/1.1/common_settings/#selection) options. --- # Face Weighted Normals - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/face_weighted_normals/#face-weighted-normals) Face Weighted Normals[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/face_weighted_normals/#face-weighted-normals "Permanent link") ==================================================================================================================================================== [![Face Weighted Normals Icon](https://spaghetmenot.github.io/normalmagic/1.1/assets/icons/weighted_normals2.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/icons/weighted_normals2.png) Calculate face weighted normals for a mesh. This is similar to Blender's built-in [Weighted Normals Modifier](https://docs.blender.org/manual/en/latest/modeling/modifiers/normals/weighted_normal.html) but with some differences: * Selection Panel lets you limit weighted normals to a specific part of your mesh. * Options are designed to be more intuitive. "Corner Angle" weighting is not yet implemented This can create some odd shading on certain topology and is planned for a future update. * [![weighted off](https://spaghetmenot.github.io/normalmagic/1.1/assets/weighted/weighted_off.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/weighted/weighted_off.png) Un-weighted normals * [![weighted on](https://spaghetmenot.github.io/normalmagic/1.1/assets/weighted/weighted_on.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/weighted/weighted_on.png) Weighted normals Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/face_weighted_normals/#options "Permanent link") ------------------------------------------------------------------------------------------------------------------------ * **Normal Domain.** Whether normals are stored on points (smooth) or face corners (allows sharp edges). * **Weight.** Derive normal weights from: * **Face Area.** Faces with larger area have more influence over normals. * **Face Strength.** Use the "Face Strength" attribute. [Official Documentation](https://docs.blender.org/manual/en/latest/modeling/meshes/editing/mesh/normals.html#set-face-strength) * **Attribute.** Define an attribute to use for normal weighting. * **Keep Sharp.** Keep sharp edges on face corners. ### Area Weights[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/face_weighted_normals/#area-weights "Permanent link") Have more control over area-weighted normals. * **Area Bias.** Bend normals towards faces with larger areas. 1 = Direct weight based on area. Higher values will weight more aggressively to larger areas. * **Area Cutoff.** Ignores normals from smaller faces. Cutoff is a percentage of face area compared to the largest connected face. Selection[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/face_weighted_normals/#selection "Permanent link") ---------------------------------------------------------------------------------------------------------------------------- See [Selection](https://spaghetmenot.github.io/normalmagic/1.1/common_settings/#selection) options. --- # Repair Bevel Normals - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/repair_bevel_normals/#repair-bevel-normals) Repair Bevel Normals[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/repair_bevel_normals/#repair-bevel-normals "Permanent link") ================================================================================================================================================= [![Repair Bevel Normals Icon](https://spaghetmenot.github.io/normalmagic/1.1/assets/icons/repair_bevel.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/icons/repair_bevel.png) Beveling a mesh with custom normals can lead to unexpected behavior. This tool identifies bevels and replicates Blender's "Harden Normals" functionality found on the bevel modifier. * [![default_bevel](https://spaghetmenot.github.io/normalmagic/1.1/assets/bevel_custom_default.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/bevel_custom_default.png) Bevel with custom normals * [![repaired_bevel](https://spaghetmenot.github.io/normalmagic/1.1/assets/bevel_custom_repaired.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/bevel_custom_repaired.png) Repaired Normals Requirements[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/repair_bevel_normals/#requirements "Permanent link") --------------------------------------------------------------------------------------------------------------------------------- * Mesh object with beveled faces you wish to fix * (Recommended) Set **Face Strength** to "Affected" or "All" on the bevel modifier [![Face Strength](https://spaghetmenot.github.io/normalmagic/1.1/assets/bevel_face_strength.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/bevel_face_strength.png) Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/repair_bevel_normals/#options "Permanent link") ----------------------------------------------------------------------------------------------------------------------- ### Bevel Detection[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/repair_bevel_normals/#bevel-detection "Permanent link") How to detect bevelled faces. * **Face Strength.** Recommended option. Requires setting face strength on bevel modifier to "Affected" or "All" * **Sharp Bevel Edge.** Apply sharp edges to bevel's outer edges. * **Sharp Bevel Corners.** Apply sharp edges to bevel's corners. * **Face Area.** Select bevels by their face area. * **Max Bevel Area.** Faces with area below this value will be treated as bevels * **Attribute.** Use an attribute or vertex group to select beveled faces. ### Area Weighting[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/repair_bevel_normals/#area-weighting "Permanent link") For weighting normals **inside** the bevel. Available when [Bevel Detection](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/repair_bevel_normals/#bevel-detection) is set to **Face Area** or **Attribute** * **Area Bias.** Bend normals towards faces with larger areas. 1 = Direct weight based on area. Higher values will weight more aggressively to larger areas. * **Area Cutoff.** Ignores normals from smaller faces. Cutoff is a percentage of face area compared to the largest connected face ### Selection Panel[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/repair_bevel_normals/#selection-panel "Permanent link") See [Selection](https://spaghetmenot.github.io/normalmagic/1.1/common_settings/#selection) options --- # Bent Normals - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/bent_normals/#bent-normals) Bent Normals[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/bent_normals/#bent-normals "Permanent link") ========================================================================================================================= [![Bent Normals Icon](https://spaghetmenot.github.io/normalmagic/1.1/assets/icons/bent_normals_1.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/icons/bent_normals_1.png) Bent normals can improve how surfaces react to ambient lighting, especially in non-path-traced renderers such as game engines. Usually bent normals are baked to a texture but this modifier will calculate bent normals **directly on geometry**. A cone of rays is cast from each point and the normals are sampled and averaged to find the average direction of ambient light. * [![bent off](https://spaghetmenot.github.io/normalmagic/1.1/assets/bent/bent_off.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/bent/bent_off.png) **Bent normals off** Unnaturally dark shadows. * [![bent on](https://spaghetmenot.github.io/normalmagic/1.1/assets/bent/bent_on.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/bent/bent_on.png) **Bent normals on** Fake bounce light added to shadow areas. Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/bent_normals/#options "Permanent link") --------------------------------------------------------------------------------------------------------------- * **Factor.** How much bent normals are mixed in with existing normals. ### Collision Geometry[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/bent_normals/#collision-geometry "Permanent link") Collide with other objects in the scene. * **Object.** Object to collide rays with. * **Collection.** Collection to collide rays with. ### RayCast[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/bent_normals/#raycast "Permanent link") Control the distribution of rays used to calculate the bent normals. * **Ray Count.** How many rays are cast. * **Ray Length.** How long to cast each ray. * **Cone Angle.** The angle of the cone that rays are distributed in using a Fibonacci distribution. --- # Repair Boolean Normals - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/repair_boolean_normals/#repair-boolean-normals) Repair Boolean Normals[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/repair_boolean_normals/#repair-boolean-normals "Permanent link") ======================================================================================================================================================= [![Repair Boolean Icon](https://spaghetmenot.github.io/normalmagic/1.1/assets/icons/repair_boolean_normals_1.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/icons/repair_boolean_normals_1.png) This tool attempts to fix bad normals caused by booleans. This is intended for destructively applied booleans, for boolean modifiers please consider using [Boolean Pro](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/boolean_pro/) as it provides much more accurate and consistent results. * [![Bool Normals Default](https://spaghetmenot.github.io/normalmagic/1.1/assets/booleans/bool_unrepaired.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/booleans/bool_unrepaired.png) Default Boolean Normals * [![Bool Normals Repaired](https://spaghetmenot.github.io/normalmagic/1.1/assets/booleans/bool_repaired.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/booleans/bool_repaired.png) Repaired Boolean Normals Requirements[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/repair_boolean_normals/#requirements "Permanent link") ----------------------------------------------------------------------------------------------------------------------------------- 1. Mesh object with destructive booleans applied. 2. Mesh is un-triangulated i.e. boolean operations have created ngons. 3. Mesh has sharp edges on boolean seams. Even if a mesh meets all these requirements it isn't 100% guaranteed to fix all it's normals Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/repair_boolean_normals/#options "Permanent link") ------------------------------------------------------------------------------------------------------------------------- ### Error Correct Distance[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/repair_boolean_normals/#error-correct-distance "Permanent link") Welds vertices on the proxy mesh that normals are transferred from. This can fix normal issues but will also introduce more issues as the value increases. There should be a sweet spot where there aren't any issues ### Selection Panel[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/repair_boolean_normals/#selection-panel "Permanent link") See [Selection](https://spaghetmenot.github.io/normalmagic/1.1/common_settings/#selection) options How it Works[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/repair_boolean_normals/#how-it-works "Permanent link") ----------------------------------------------------------------------------------------------------------------------------------- 1. Splitting the mesh on sharp edges, producing a surface for each "normal island" 2. Detecting points on the boundary that don't join to any edges inside the island 3. Re-creating a version of each island without those points 4. Transferring normals per newly created island back up to the unaltered geometry --- # Repair Mirrored Normals - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/repair_mirrored_normals/#repair-mirrored-normals) Repair Mirrored Normals[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/repair_mirrored_normals/#repair-mirrored-normals "Permanent link") ========================================================================================================================================================== [![Repair Mirrored Normals](https://spaghetmenot.github.io/normalmagic/1.1/assets/icons/repair_mirrored.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/icons/repair_mirrored.png) Mirroring a mesh with custom normals will not mirror the normals. This leads to incorrect normals on the mirrored geometry. This modifier can repair these normals by flipping them in the correct direction. Alternatively the [Symmetrize](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/symmetrize/) modifier is a better option when only mirroring on one axis. * [![Mirrored Flipped](https://spaghetmenot.github.io/normalmagic/1.1/assets/mirrored_flipped.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/mirrored_flipped.png) Unmirrored Custom Normals * [![Mirrored Unflipped](https://spaghetmenot.github.io/normalmagic/1.1/assets/mirrored_unflipped.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/mirrored_unflipped.png) Mirrored Custom Normals Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/repair_mirrored_normals/#options "Permanent link") -------------------------------------------------------------------------------------------------------------------------- * **Normal Domain:** Whether normals are stored on points (smooth) or face corners (allows sharp edges) * **Method:** Choose which faces get mirrored normals: * **Detect:** Faces and axes will be determined automatically, this should work in most cases. * **[Side of Origin:](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/repair_mirrored_normals/#side-of-origin) ** Select and mirror normals based on axis and object origin. * **[Specify:](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/repair_mirrored_normals/#specify) ** Specify which faces to flip normals and which axes to flip them on. * **Mirror Object:** If using a mirror object, specify it here. ### Side of Origin[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/repair_mirrored_normals/#side-of-origin "Permanent link") Flip normals for faces on the "mirrored" side. Use this method when using "Bisect" on a mirror modifier or when original geometry doesn't cross the mirror plane(s). * **Recalculate Center Normals:** Recalculate Normals for points at the center of specified axes. * **Mirror Axis:** Which axes to select and mirror normals on. * **Flip Axis:** Flip the direction of the selection of normals to mirror. ### Specify[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/repair_mirrored_normals/#specify "Permanent link") Choose which faces have flipped normals and what axis to flip them on. Use when geometry is mirrored across both sides of the mirror plane(s) and "Bisect" is turned off. * **Mirror Axis:** Which axes to select and mirror normals on. * **Selection:** See [Selection Options](https://spaghetmenot.github.io/normalmagic/1.1/common_settings/#selection) --- # View Normals - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.1/visualize_tools/view_normals/#view-normals) View Normals[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/visualize_tools/view_normals/#view-normals "Permanent link") ============================================================================================================================ [![View Normals](https://spaghetmenot.github.io/normalmagic/1.1/assets/icons/view_normals_eye_1.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/icons/view_normals_eye_1.png) View Normals creates geometry to visualize mesh normals on objects. * Normals will show up in object mode * Normal Colors are currently only available in [Material Preview](https://docs.blender.org/manual/en/latest/editors/3dview/display/shading.html#material-preview) and [Rendered](https://docs.blender.org/manual/en/latest/editors/3dview/display/shading.html#rendered) viewport shading. Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/visualize_tools/view_normals/#options "Permanent link") ------------------------------------------------------------------------------------------------------------------ * **Length.** The object-space length of displayed normals * **Normal Domain.** Display normals on: * **Points.** One line will be generated per point. * **Face Corners.** One line will be generated per face corner. * **Faces.** One line will be generated per face. * **View.** Specify which normal to visualize: * **Normal.** Display the normal stored on the geometry, custom normals will be included here. * **True Normal.** Display the normal defined by topology, custom normals will be ignored. * **Attribute.** Specify an arbitrary attribute to use. ### Style[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/visualize_tools/view_normals/#style "Permanent link") This section defines how the normal line mesh is generated: Line [![line](https://spaghetmenot.github.io/normalmagic/1.1/assets/view/normal_line.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/view/normal_line.png) Display normals as a single line. This is the most efficient but can't be colored. Cylinder / Tapered Cylinder [![line](https://spaghetmenot.github.io/normalmagic/1.1/assets/view/normal_cylinder.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/view/normal_cylinder.png) Display Normals as mesh cylinders with a width and color that will show up in [Material Preview](https://docs.blender.org/manual/en/latest/editors/3dview/display/shading.html#material-preview) and [Rendered](https://docs.blender.org/manual/en/latest/editors/3dview/display/shading.html#rendered) viewport shading #### Colors[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/visualize_tools/view_normals/#colors "Permanent link") (When in Cylinder / Tapered Cylinder mode) * **Color.** Color to display normals. * **Show Default.** Colors normals differently if they match default "Smooth Shading" normals: [![Show Default](https://spaghetmenot.github.io/normalmagic/1.1/assets/view/normal_default.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/view/normal_default.png) --- # Instance Object - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.1/other_tools/instance_object/#instance-object) Instance Object[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/other_tools/instance_object/#instance-object "Permanent link") ================================================================================================================================= Instances another object (after modifiers) to replace or append to the current objects geometry. This can be particularly useful for re-using details. [![Instance](https://spaghetmenot.github.io/normalmagic/1.1/assets/other_tools/instance.gif)](https://spaghetmenot.github.io/normalmagic/1.1/assets/other_tools/instance.gif) Create duplicates of an object without needing to sync all modifier settings to the duplicates. [![Instance Append](https://spaghetmenot.github.io/normalmagic/1.1/assets/other_tools/instance_append.gif)](https://spaghetmenot.github.io/normalmagic/1.1/assets/other_tools/instance_append.gif) Append to and nest modular pieces. Such as these bolt inserts, these can be instanced themselves and used with [Surface Insert](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/surface_insert/) on larger meshes. Add-on The normalMagic [Add-on](https://spaghetmenot.github.io/normalmagic/1.1/add-on/) has instance operators to make working with this modifier easier: [![addonpanel](https://spaghetmenot.github.io/normalmagic/1.1/assets/add-on/instance_panel.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/add-on/instance_panel.png) * Create a linked duplicate of an object(s), replace all modifiers with **Instance Object** * Select original object being instanced Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/other_tools/instance_object/#options "Permanent link") ----------------------------------------------------------------------------------------------------------------- * **Object.** Object to instance * **As Instance.** When turned off, will copy object's geometry. Turned on will instance the object [Official Documentation](https://docs.blender.org/manual/en/latest/modeling/geometry_nodes/instances.html) * **Replace / Append.** Replace will replace current objects geometry with that of the instance. Append will keep geometry and append the instanced object with additional transform options. ### Transform Instance[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/other_tools/instance_object/#transform-instance "Permanent link") When appending the instance, these settings allow you to transform the instance relative to the objects origin. --- # Sharp Edges to Attribute - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.1/other_tools/sharp_edges_to_attribute/#sharp-edges-to-attribute) Sharp Edges to Attribute[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/other_tools/sharp_edges_to_attribute/#sharp-edges-to-attribute "Permanent link") ============================================================================================================================================================ [![Sharp Edges to Attribute Icon](https://spaghetmenot.github.io/normalmagic/1.1/assets/icons/sharp_to_attribute.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/icons/sharp_to_attribute.png) Write edge and point attributes based on sharp edges or other arbitrary edge attributes. * Edge attributes can be used for: * Mark sharp edges as UV seams. * Add a bevel weight to sharp edges. * Detect sharp edges from custom normals and mark them as sharp. * Point attributes can be used for: * Creating a vertex group for selection in another modifier from sharp edges. * Expanding selection with or without a falloff. Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/other_tools/sharp_edges_to_attribute/#options "Permanent link") -------------------------------------------------------------------------------------------------------------------------- ### Sharp Edge Detection[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/other_tools/sharp_edges_to_attribute/#sharp-edge-detection "Permanent link") How to specify edges to write to attribute(s) * **Detect From Markup.** Use smooth shading attributes to define sharp edges. This might miss sharp edges defined by custom normals. * **Detect Custom.** Detect sharp edges from normals. This will detect sharp edges created from custom normals but can have a small amount of error. * **Tolerance (When "Detect Custom" is on).** Change the normal angle difference at which edges will be marked as sharp. ### Expand Points[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/other_tools/sharp_edges_to_attribute/#expand-points "Permanent link") Expand point selection. Can be useful in [Selection Panel](https://spaghetmenot.github.io/normalmagic/1.1/common_settings/#selection) of other modifiers. * **Point Values.** How selection is expanded: * **Float.** Each expansion gets a lower value creating a falloff. * **Bool.** Each expansion is set to 1. * **Expand Iterations.** How many edges to expand point selection. * **Falloff (When Point Values are "Float").** Falloff of point selection. similar to [mask falloff](https://spaghetmenot.github.io/normalmagic/1.1/common_settings/#base-falloff) ### Output Attributes[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/other_tools/sharp_edges_to_attribute/#output-attributes "Permanent link") What to name Edge / Point attributes. **Leaving blank will not write to any attributes.** --- # Recalculate Weighted - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.1/manual_tools/recalculate_weighted/#recalculate-weighted) Recalculate Weighted[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/manual_tools/recalculate_weighted/#recalculate-weighted "Permanent link") ================================================================================================================================================= [![recalculate_weighted](https://spaghetmenot.github.io/normalmagic/1.1/assets/icons/recalculate_normals.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/icons/recalculate_normals.png) Calculated weighted normals for selected geometry in "Edit Mode". This is a tool version of the [Face Weighted Normals](https://spaghetmenot.github.io/normalmagic/1.1/normal_tools/face_weighted_normals/) modifier. This can be found in the **Normal Magic** Menu when editing meshes. --- # Change Materials - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.1/other_tools/change_materials/#change-materials) Change Materials[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/other_tools/change_materials/#change-materials "Permanent link") ==================================================================================================================================== [![Icon](https://spaghetmenot.github.io/normalmagic/1.1/assets/icons/change_materials.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/icons/change_materials.png) Assign materials or material indices to face selections. [![Demo](https://spaghetmenot.github.io/normalmagic/1.1/assets/change_materials/change_materials_demo.gif)](https://spaghetmenot.github.io/normalmagic/1.1/assets/change_materials/change_materials_demo.gif) Up to 6 materials can be assigned per modifier. Selections can be driven by existing material/index or arbitrary vertex/face groups. Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/other_tools/change_materials/#options "Permanent link") ------------------------------------------------------------------------------------------------------------------ * **Materials to Apply:** The number of materials to apply. This will show a panel for each material with a checkbox to enable/disable. ### Material \*[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/other_tools/change_materials/#material "Permanent link") Panel for each material assignment, contains two panels: One for selecting faces and one for specifying material/index. #### Selection[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/other_tools/change_materials/#selection "Permanent link") Choose which faces to apply a material to. * **Face Group:** Specify a vertex/face group to apply materials to. * **Material:** Select faces by a specific material. * **Material Index:** Select faces by their material index. * **Invert:** Invert selection #### Material[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/other_tools/change_materials/#material_1 "Permanent link") Which material to apply to selected faces. * **Set:** Whether to set a specific material or material index. * **Material:** Which specific material to apply. * **Material Index:** Which material index to apply. --- # Instance Objects - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.1/add-on/instance_objects/#instance-objects) Instance Objects[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/add-on/instance_objects/#instance-objects "Permanent link") =============================================================================================================================== [![instance panel](https://spaghetmenot.github.io/normalmagic/1.1/assets/add-on/instance_panel.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/add-on/instance_panel.png) These tools make it easier to use the [Instance Object](https://spaghetmenot.github.io/normalmagic/1.1/other_tools/instance_object/) modifier. Duplicate Instanced[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/add-on/instance_objects/#duplicate-instanced "Permanent link") ------------------------------------------------------------------------------------------------------------------------------------- This operator that acts like Blender's built-in [Duplicate Linked](https://docs.blender.org/manual/en/latest/scene_layout/object/editing/duplicate_linked.html) but also copies the results of all modifiers: [![duplicate instanced](https://spaghetmenot.github.io/normalmagic/1.1/assets/add-on/duplicate_instanced.gif)](https://spaghetmenot.github.io/normalmagic/1.1/assets/add-on/duplicate_instanced.gif) The **instanced** object can be duplicated with any existing methods e.g. Shift+D and will keep the same behavior. Using this operator on an object that already is using a "Instance Object" as it's last modifier will instance the original object to keep things simple. ### What it does[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/add-on/instance_objects/#what-it-does "Permanent link") For each selected object: 1. Create a new object with the same mesh data as selected object. This is so you can still enter "Edit Mode" on the instance. 2. Add [Instance Object](https://spaghetmenot.github.io/normalmagic/1.1/other_tools/instance_object/) modifier and specify selected object. 3. Select instance object and deselect original. Select Original[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/add-on/instance_objects/#select-original "Permanent link") ----------------------------------------------------------------------------------------------------------------------------- Selects the original object(s) being instanced by selected object(s). This is useful when you wish to change modifier behavior on the original. --- # Boolean Pro - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.1/add-on/boolean_pro/#boolean-pro) Boolean Pro[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/add-on/boolean_pro/#boolean-pro "Permanent link") ================================================================================================================ [![bpro panel](https://spaghetmenot.github.io/normalmagic/1.1/assets/add-on/bpro_panel.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/add-on/bpro_panel.png) These tools make it easier to use the [Boolean Pro](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/boolean_pro/) modifier. Top Panel Operators[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/add-on/boolean_pro/#top-panel-operators "Permanent link") -------------------------------------------------------------------------------------------------------------------------------- The top of the panel contains operators for all Boolean Pro modes. * ### How to use[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/add-on/boolean_pro/#how-to-use "Permanent link") [![bool diff](https://spaghetmenot.github.io/normalmagic/1.1/assets/add-on/boolean_difference.gif)](https://spaghetmenot.github.io/normalmagic/1.1/assets/add-on/boolean_difference.gif) **1.** Select cutter object(s). **2.** Select the object you wish to cut. **3.** Perform Boolean operation using the buttons. ### Operations[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/add-on/boolean_pro/#operations "Permanent link") | Intersect | Union | Difference | Slice | | --- | --- | --- | --- | | [![Intersect](https://spaghetmenot.github.io/normalmagic/1.1/assets/booleans/bool_intersect.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/booleans/bool_intersect.png) | [![Union](https://spaghetmenot.github.io/normalmagic/1.1/assets/booleans/bool_union.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/booleans/bool_union.png) | [![Difference](https://spaghetmenot.github.io/normalmagic/1.1/assets/booleans/bool_diff.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/booleans/bool_diff.png) | [![Slice](https://spaghetmenot.github.io/normalmagic/1.1/assets/booleans/bool_slice.gif)](https://spaghetmenot.github.io/normalmagic/1.1/assets/booleans/bool_slice.gif) | ### Split[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/add-on/boolean_pro/#split "Permanent link") The "Split" Operator will duplicate the object: * The original will get a **Difference** Boolean * The duplicate will get a **Intersect** Boolean. There is an option under [Cutter Behavior](https://spaghetmenot.github.io/normalmagic/1.1/add-on/boolean_pro/#cutter-behavior) to make the intersection object linked. Modifier Settings[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/add-on/boolean_pro/#modifier-settings "Permanent link") ---------------------------------------------------------------------------------------------------------------------------- This section lets you change what settings the Boolean Pro modifiers get **before being added** (Settings for existing modifiers won't be updated). All options in this section are covered on the [Boolean Pro modifier](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/boolean_pro/) page. Cutter Behavior[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/add-on/boolean_pro/#cutter-behavior "Permanent link") ------------------------------------------------------------------------------------------------------------------------ This section lets you choose what happens to objects when you add a Boolean. * **Display As.** Change the display mode of the cutter object: * **Wireframe.** Display cutter as wireframe. * **Bounds.** Display cutter as bounding box. * **Collection.** When enabled, specify the name of a collection to add cutter objects to. If the collection doesn't exist one will be created. * **Deselect.** Which objects get deselected after the boolean operation: * **None.** Keep all objects selected. * **Main Object.** Deselect the object that receives the modifier. * **Cutters.** Deselect cutter object(s) * **Parent to Object.** Parent the cutter object(s) to the main object. This will transform them together when you move the main object. * **Link Split Mesh.** When performing the [Split](https://spaghetmenot.github.io/normalmagic/1.1/add-on/boolean_pro/#split) operation, link the intersected mesh to the original so editing one mesh edits the other too. * **Auto-Smooth.** Apply Blender's "Smooth By Angle" modifier to objects in Boolean operation if they don't have one already: * **Cutters.** Apply smoothing to cutter object(s). * **All.** Apply smoothing to all objects involved in the Boolean. * **None.** Don't apply smoothing to any objects. * **Angle.** Angle to set auto-smoothing at when "Auto-Smooth" is turned on. Convert Existing Booleans[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/add-on/boolean_pro/#convert-existing-booleans "Permanent link") -------------------------------------------------------------------------------------------------------------------------------------------- Will convert all 'Boolean' modifiers on selected objects to 'Boolean Pro'. All relevant settings will be transferred. --- # normalMagic Add-on - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.1/add-on/#normalmagic-add-on) normalMagic Add-on[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/add-on/#normalmagic-add-on "Permanent link") ================================================================================================================== This add-on is included with the **Pro** version of normalMagic and makes working with certain modifiers easier. * [Install Add-on](https://spaghetmenot.github.io/normalmagic/1.1/install/#add-on) * [Preferences](https://spaghetmenot.github.io/normalmagic/1.1/add-on/preferences/) * [Boolean Pro](https://spaghetmenot.github.io/normalmagic/1.1/add-on/boolean_pro/) * * * [![bpro panel](https://spaghetmenot.github.io/normalmagic/1.1/assets/add-on/bpro_panel.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/add-on/bpro_panel.png) Set up booleans using the Boolean Pro [modifier](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/boolean_pro/) with one click and convert existing booleans. * [Instance Objects](https://spaghetmenot.github.io/normalmagic/1.1/add-on/instance_objects/) * * * [![instance panel](https://spaghetmenot.github.io/normalmagic/1.1/assets/add-on/instance_panel.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/add-on/instance_panel.png) Duplicate objects as instances using the Instance Object [modifier](https://spaghetmenot.github.io/normalmagic/1.1/other_tools/instance_object/) with one click. --- # Surface Insert - normalMagic [Skip to content](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/surface_insert/#surface-insert) Surface Insert[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/surface_insert/#surface-insert "Permanent link") ============================================================================================================================= [![Surface Insert Icon](https://spaghetmenot.github.io/normalmagic/1.1/assets/icons/surface_insert6.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/icons/surface_insert6.png) Seamlessly join **insert meshes** into the surface of a mesh. An **insert mesh** can be thought of as a "decal", "patch" or "plug". There are two primary ways of performing the insert operation: * [![Wrap to Surface](https://spaghetmenot.github.io/normalmagic/1.1/assets/surface_insert/wrap_to_surface.gif)](https://spaghetmenot.github.io/normalmagic/1.1/assets/surface_insert/wrap_to_surface.gif) **Wrap to Surface** Warp geometry to match the underlying surface. * [![Mirrored Unflipped](https://spaghetmenot.github.io/normalmagic/1.1/assets/surface_insert/blend_to_surface.gif)](https://spaghetmenot.github.io/normalmagic/1.1/assets/surface_insert/blend_to_surface.gif) **Blend to Surface** Keep world position of geometry and blend to surface via masking. This allows you to keep flat surfaces inside the insert mesh. The **Surface Insert** Modifier performs the following steps: 1. Insert meshes are projected to surface geometry using one of the above methods. 2. Normals, materials and UVs are transferred from the original surface to the insert meshes. 3. The surface is cut and removed where insert mesh open edges are. 4. Vertices are matched on both sides of the seam and welded. Mesh Islands Insert meshes are performed per mesh island. Only mesh islands with **open edges** will be cut and welded into the original surface. * Manifold (solid) mesh islands can be projected but won't affect the underlying surface geometry. * Mesh islands that miss a raycast will be skipped entirely and a warning will show on the modifier. Requirements[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/surface_insert/#requirements "Permanent link") ------------------------------------------------------------------------------------------------------------------------- 1. A receiving mesh object. This will have the modifier on it. 2. An insert mesh with open edges. This will be projected, cut and welded into the surface of the receiving mesh. 3. Insert mesh cannot partially cut into surface, it has to be fully surrounded. Options[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/surface_insert/#options "Permanent link") --------------------------------------------------------------------------------------------------------------- ### Insert Meshes[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/surface_insert/#insert-meshes "Permanent link") This section specifies which meshes to insert. * **Objects/Collection:** Choose individual mesh objects or a collection containing mesh objects. * **Object Count:** How many mesh objects to insert (when in **_Objects_** mode). ### Insert Mesh Projection[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/surface_insert/#insert-mesh-projection "Permanent link") * **Method:** How to project the insert meshes to the underlying surface: * **Wrap to Surface:** Warp geometry to match the underlying surface. * **Blend with Surface:** Warp geometry to match the underlying surface. * **Projection Direction:** Which direction to project insert mesh(es). * **Mesh Island Normal:** Use average mesh island normal * **Insert Direction:** Specify a direction in the space of each insert object. * **Object Direction:** Specify a direction in the space of receiving object. * **Projection Origin.** Where to use as the origin of the insert object. This will affect how the objects height is calculated for re-projection. * **Height Offset.** Offsets insert mesh away from surface by a specified height. * **Ray Length.** Maximum distance an insert mesh can have an effect. #### Projection Masking[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/surface_insert/#projection-masking "Permanent link") This section controls masking the projection of insert meshes to the surface. This is most useful when using **_Blend with Surface_**. [![falloff](https://spaghetmenot.github.io/normalmagic/1.1/assets/surface_insert/falloff.gif)](https://spaghetmenot.github.io/normalmagic/1.1/assets/surface_insert/falloff.gif) Controlling falloff is covered [here](https://spaghetmenot.github.io/normalmagic/1.1/common_settings/#mask-falloff) #### Normals[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/surface_insert/#normals "Permanent link") This section controls how much of the surface normals are transferred to the insert mesh. This is most useful when using **_Blend with Surface_**. * **Normal Masking** * **Projection Mask**. Use the same mask falloff as the projection * **New Mask**. Create a new mask for normals * **Recalculate Blend Normals.** Only available when using **Blend with Surface**. This will recalculate the normals on the blended portion of the insert mesh before transferring any from the surface. * **Match Boundary Normals.** When choosing **_New Mask_** this will make sure the boundary edge of the insert mesh matches the normals on the underlying surface. Turn off to create a hard edge. If **_New Mask_** is chosen, the settings for the falloff will appear below. Controlling falloff is covered [here](https://spaghetmenot.github.io/normalmagic/1.1/common_settings/#mask-falloff) ### Surface Boolean[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/surface_insert/#surface-boolean "Permanent link") This section controls how the surface is cut for the insert mesh. * **Weld Surface.** Welds vertices between the surface and insert mesh. Turning this off will leave them as separate mesh islands. * **Weld Distance.** Distance at which to weld vertices, this takes effect at several points during the process, not just the final weld between surface and insert mesh. * **Boolean Extrusion.** How far to extrude the cutter shape from the surface. You might need to increase this value if the insert mesh covers a large area of curvature. You can preview cutters in the [Debug](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/surface_insert/#debug) panel. [![Boolean Extrusion](https://spaghetmenot.github.io/normalmagic/1.1/assets/surface_insert/boolean_extrusion.gif)](https://spaghetmenot.github.io/normalmagic/1.1/assets/surface_insert/boolean_extrusion.gif) * **Boolean Offset.** Offset the Boolean cutter outside the surface. This only effects the "top" of the cutter and will also help when an insert mesh covers a large area of curvature. You can preview cutters in the [Debug](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/surface_insert/#debug) panel. * **Non-Manifold Solver.** Which boolean solver to use when surface mesh is not manifold. Keep this as **_Float_** for most situations. * **Float.** Faster and in a lot of cases more accurate when matching surface points. * **Exact.** Much slower and rarely better. Included "just in case" it helps in rare cases. ### Materials[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/surface_insert/#materials "Permanent link") This section controls how materials and UVs are transferred from the surface to the insert meshes * **Transfer Surface Material.** How to transfer materials from the surface to the insert mesh. * **None.** Don't transfer any materials. * **Boundary Material.** Transfer the material island(s) that touch open edges. * **All.** Overwrite all insert mesh materials with those on the surface. * **Transfer Material UVs.** Transfer UV Maps for the transferred materials. * **UV Map.** Which UV map to transfer. ### Debug[ΒΆ](https://spaghetmenot.github.io/normalmagic/1.1/mesh_tools/surface_insert/#debug "Permanent link") This section lets you inspect certain points along the process if the modifier isn't behaving as expected. * **View.** Outputs geometry from different points in the node graph. Warning This changes the output of the graph, make sure to turn off when done inspecting. * **None.** Output standard result, no debugging. * **Boolean Cutters.** Output the shapes used to cut the surface. * **Skipped Insert Islands.** Output any mesh islands that did not project due to missed ray casts. * [![Boolean Cutters](https://spaghetmenot.github.io/normalmagic/1.1/assets/surface_insert/debug_cutters.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/surface_insert/debug_cutters.png) Debug Cutters * [![Skipped Islands](https://spaghetmenot.github.io/normalmagic/1.1/assets/surface_insert/debug_skipped_islands.png)](https://spaghetmenot.github.io/normalmagic/1.1/assets/surface_insert/debug_skipped_islands.png) Debug Skipped Insert Islands --- # normalMagic 404 - Not found =============== --- # normalMagic 404 - Not found =============== --- # normalMagic 404 - Not found =============== --- # normalMagic 404 - Not found =============== --- # normalMagic 404 - Not found =============== --- # normalMagic 404 - Not found =============== --- # normalMagic 404 - Not found =============== --- # normalMagic 404 - Not found =============== --- # normalMagic 404 - Not found =============== --- # normalMagic 404 - Not found =============== --- # normalMagic 404 - Not found =============== --- # normalMagic 404 - Not found =============== --- # normalMagic 404 - Not found =============== --- # normalMagic 404 - Not found =============== --- # normalMagic 404 - Not found =============== --- # normalMagic 404 - Not found =============== --- # normalMagic 404 - Not found =============== --- # normalMagic 404 - Not found =============== ---