Ultimate sculpting solution in Unity engine. Upgrade your workflow to another level.
Compatible with all possible platforms.
Supports Unity 2018 and newer.
Features
Sculpting Pro is a complete, multiplatform solution of mesh sculpting in Unity Engine. Manipulate with any kind of meshes with user-friendly tools directly in Unity editor or at runtime. Available for Unity 2018 & newer.

> Complete mesh sculpting in editor/ at runtime
> Well-known brush tools (Raise, Lower, Grab, Smooth…)
> Advanced mesh features (Subdivision, Smooth, Flip…)
> Multiplatform support (PC, VR, Mobile)
> Fully multithreaded
> History feature
> Procedural primitives
> Full API with accessible methods
> User-friendly example content
> Vertex-seam handler

Upgrade your level design experience even higher and bring a new perspective to your workflow.
Documentation
The Sculpting Pro contains a full visual documentation which describes each component.
APi
Application programming interface for each component in the plugin. Just click to collapse.
Essential component for sculpting at runtime application
Available Methods
public void SPR_OnProcessSculpting()
Process sculpting by specified settings in the inspector (This is the general method to process sculpting - required while using custom sculpting feature)
public void SPR_OnStopSculpting()
Stop sculpting (used mostly on 'MouseUp' event) - refreshes mesh collider and sets all the other required parameters (required while using custom sculpting feature)
public void SPR_OnEnableDisableSculpting()
Enable or Disable sculpting and script in general (safer way - don't use 'enabled = value')
public void SPR_OnCustomSculpting(PARAMETERS)
Do custom sculpting by specified settings in the method brackets; this method allows you to detaily specify custom sculpting point, intensity and feature

public void SPR_ChangeRadius(float or UI.Slider value)
Change sculpting radius by the custom value
public void SPR_ChangeIntensity(float or UI.Slider value)
Change sculpting intensity by the custom value
public void SPR_ChangeBrushState(int state)
Change sculpting brush state by the existing option [None = 0, Raise = 1, Lower = 2, Revert = 3, Grab = 4, Noise = 5, Smooth = 6, Stylize = 7]

public void SPR_ChangeSculptingType(int sculptingType)
Change sculpting type by the existing option [VertexNormal = 0, VertexDirection = 1, SurfaceNormal = 2, CustomDirection = 3, CustomObjectForwardDirection = 4]
public void SPR_ChangeNoiseDirection(int directionType)
Change noise direction by the existing option [XYZ = 0, XZ = 1, XY = 2, YZ = 3, Z = 4, Y = 5, X = 6, Centrical = 7, VertexNormal = 8]
public void SPR_ChangeSmoothingType(int smoothingType)
Change smoothing type by the existing option [LaplacianFilter = 0, HCFilter = 1]
public void SPR_ChangeRadiusType(int radiusType)
Change radius type by the existing option [Expontential = 0, Linear = 1]
public void SPR_EnableDisableDistanceLimit(bool activationValue)
Enable/Disable distance limitation feature by the custom boolean value
public void SPR_ChangeDistanceLimit(float or UI.Slider value)
Change distance limitation by the custom value

public void SPR_OnUndo()
Process undo action (if possible)
public void SPR_OnRestoreTarget()
Restore locked target to its original/ initial mesh data
public void SPR_SubdivideTarget()
Process a subdivision on a locked target model
public void SPR_SmoothTarget()
Process a smooth function on a locked target model
public void SPR_FlipTarget()
Process a flip function on a locked target model
public void SPR_TryCloseSeamsTarget(float distanceApproach)
Try to close broken seams on a locked target model (the value in the brackets tells the script what can be the maximum distance of vertices on the similar position)
public void SPR_TryAutoCloseSeamsTarget(bool trueFalse)
Process sculpting by specified settings in the inspector (This is the general method to process sculpting - required while using custom sculpting feature)
Example
using UnityEngine;
using SculptingPro;

// Example script for custom sculpting - process your own sculpting method with multiple purposes
// Create even a multi-symmetrical sculpting (The script below does not demonstrate the symmetrical sculpting)
public class ExampleCustomSculptingMonoBehaviour
{
     public SculptingPro_Model targetModel; // Assign the proper object - this is your target for sculpting
     public Camera mainCam; // Assign the proper object
     public SculptingPro_Realtime realtimeSculpting; // Assign the proper object
     public bool lowerBrush = false; // If false, the brush will be raising the mesh
     public float customRadius = 1.0f;
     public float customIntensity = 0.1f;
     private bool doingSculpting = false;

     private void Update()
     {
            Ray r = mainCam.ScreenPointToRay(Input.mousePosition);

            // The sculpting method itself
           if (Physics.Raycast(r, out RaycastHit hit, Mathf.Infinity))
           {
               if (hit.collider)
               {
                   // Customize inner parameters for the final custom sculpting method
                   realtimeSculpting.SPR_OnCustomSculpting(targetModel, hit.point, Vector3.up, !lowerBrush, customRadius, customIntensity);
                   doingSculpting = true;
               }
               else ReleaseSculpting();
           }
           else ReleaseSculpting();     
       }

       // Called if the sculpting process is stopped (this method is REQUIRED)
       private void ReleaseSculpting()    
       {        
               // Return if no sculpting is processed
              if (!doingSculpting) return;        

              // Required method to call when the sculpting ends!        
              realtimeSculpting.SPR_OnStopSculpting();      
              doingSculpting = false;    
        }
}
Essential component for sculpting-ready meshes
Available Methods
public void ManuallyResetComponent()
Reset current model and register its initial data (This resets the whole component - safer way than Component->Reset)
public void RegisterModel(bool includeInitialData = false)
Initialize & register current model for sculpting (If the parameter in the brackets is true, the very initial data [since the component was added] will be rewritten)
public void RegisterSeams(bool includeInitialData = false)
Register vertex seams manually (If the parameter in the brackets is true, the very initial data [since the component was added] will be rewritten)

public void RecordHistory(bool deepHistory = false, bool restore = false)
Record current mesh state to the history list (if 'deepHistory' is true, the history will record all the other parameters such as UVs, Triangles, Normals and Bounds; If 'restore' is true, the history will record a step that the target mesh was eventually restored)
public void UndoHistory()
Make a step back in history list (if there are any data recorded)
public void ClearHistory()
Clear the whole history list

public void RefreshVertices()
Refresh current mesh vertices
public void RefreshNormals(bool forceRefreshNormals = false)
Refresh current mesh normals (This does not recalculates the normals. The method assigns proceeded normals to the mesh normals array)
public void RecalculateBounds()
Recalculate current mesh bounds
public void RecalculateNormals(bool forceRecalculateNormals = false)
Recalculate current mesh normals (This recalculates the mesh normals, how the lighting reacts with the mesh)

public void RefreshEntireMesh(bool trisGoFirst = true)
Refresh entire mesh with triangles, uvs, normals etc (The method refreshes the whole mesh. If the parameter in the brackets is true, the triangles will be assigned first, before the vertices. This is required in some cases)
public void RefreshMeshCollider()
Try to update the mesh collider
public void RestoreOriginalMesh()
Restore current mesh to its original/initial state
Example
using UnityEngine;
using SculptingPro;

public class ExampleMonoBehaviour
{
     public SculptingPro_Model spm; // Assign the proper object

    // Call this function to make a step backward
     public void MakeUndoStep()
     {
          spm.UndoHistory(); // Goes back for a one step
          print("I made a step back!");
     }
}
Complete collection of procedural primitives
Available Methods
public static GameObject Generate()
Generate new gameObject with procedural primitives, returns new gameObject. This gameObject will already contain the SculptingPro_ProceduralPrimitives script.

public void ProcedShapes_Generate(ShapeType shape)
Generate specific shape with current inspector settings (Available shapes : enum = Plane, Cube, Sphere, Torus)
Example
using UnityEngine;
using SculptingPro;

public class ExampleMonoBehaviour
{
     public SculptingPro_ProceduralPrimitives sppp; // Assign the proper object

     public void GenerateShapeCube()
     {
          sppp.ProcedShapes_Generate(ShapeType.Cube);
     }
}