Personal Projects

Function Libraries

MAXScript struct wrapping the Edit Poly methods using the familiar signatures of the polyop methods.
MAXScript Modifiers

MAXScript modfier

An inset-by-SG type modifier that works similar to zero-tension Chamfer modifier.

Made when max Chamfer had problems with pictured topology (fixed since 2020.1).

Polycount thread: Inset Chamfer

Advanced version of this modifier as seen in the gif is included in the KeyHydra toolset.

Up to 100x faster, supports multiple SGs per face, preserves SGs, matIDs and selections, adds options to select edge faces and override mesh SGs.

Demo mesh courtesy of Adnan Chaumette.

MAXScript modifier

A curve-controlled scripted sweep modifier. Both the Interpolation and Profile animation rollout UI items are not to be used yet and mostly work as placeholders for future options.

In its current state, it's more of a proof of concept than anything else.

MAXScript modifier

Randomize elements the easy way. Element Data is cached for faster viewport update.
Transform Mesh

MAXScript modifier

Transformation modifier with numeric input and an option to use an arbitrary scene object as a transform coordsys.

MAXScript modifier

Instead of morphing between two nodes, this modifier allows you to morph between a state of the model before adding one or multiple modifiers and after that (provided that they don't change the object's topology).
MAXScript Primitives

MAXScript primitive

Involute spur gear primitive, complete with tooth undercut and all-quad topology.

Unencrypted and fully open for further hacking.

MAXScript primitive

Another all-quad primitive, created with TurboSmooth in mind so it has an additional Outline parameter to tighten the edge loops. The flange neck is optional, reducing its thickness to zero effectively gets rid of it.

MAXScript primitive

All-quad cylinder primitive with hemispherical capping option.

MAXScript primitive

A primitive for spiral ductwork, screw threads, flexible metal tubes, circular ramps etc.

No smoothing groups are assigned, for smoother look either use Smooth modifier or add points to the spline profile.

It's also possible to pick a path to follow (especially useful for hoses and piping).


MAXScript primitive

Tetrahedron-based mesh traced along a picked spline path.

Can auto-align to the picked spline.

MAXScript primitive

Random branching extension of the tetrahedral spline.

Optional weighted selection - fully functional in max 2018+, in lower versions you'd have to add an Edit Mesh modifier and activate its Vertex subobject level.

MAXScript primitive

Hexagon pattern primitive. The size of individual hexagons is driven by a texture map.

Map colors can be saved to vertex color channel to create a hexagonal pattern.

Honeycomb Mesh

MAXScript primitive

Hexagonal mesh primitive. Aside from the hexagon radius and thickness of the lattice, you can also control width/height offsets.

MAXScript primitive

Simple regular grid, wire mesh primitive.

MAXScript primitive

Similar to Patch Grids with Point helpers used as handles.

You can animate the handles or use wire paramaters. Instead of linking use constraints.

MAXScript primitive

Similar to the CAT Muscle Strand object, only mesh-based and accepts modifiers.

MAXScript primitive

Creates surface defined by four splines that form a closed loop.

Interactive mesh update possible when modifying the splines.

MAXScript primitive

Simple fibonacci sphere primitive (poles are not capped).

Useful as a vertex-driven distribution object for strawberry seeds etc.

MAXScript primitive

Truncated icosahedron-based geosphere – there are always 12 pentagons, all the other faces are hexagons.

MAXScript primitive

Mirror ball primitve with control over tile gap/overlap.
Camera Cone

MAXScript primitive

Camera-bound geometry primitive that fills the camera field of view.

Controlled by target distance, far-clipping plane distance or custom distance (animatable).

Particularly useful for volume-select-based selections.
MAXScript Spline Primitives

MXS spline primitive

Made as a control object for rigging.

Also available as an Arrow Helper.

MXS spline primitive

Parametric oblong shape.

Made with a pulley belt path in mind, could be just as well used as a base for a bicycle chain distribution path.

MXS spline primitive

Procedural guilloché pattern.

The length of the trace is determined by the offset parameter.
Profile Shape

MXS spline primitive

Profile spline primitive to be used with classic Bevel Profile or Shell modifier as the edge profile shape, as a sweep profile and for other similar use cases. Can be rotated, flipped and reversed as needed.
NGon by Edge

MXS spline primitive

NGon shape created by dragging the first edge. Holding shift constraints to ortho, holding ctrl flips the shape.

The original idea and implementation comes from Aslan Tamjidi, see the discussion thread for further details.
Rectangle by Edge

MXS spline primitive

Rectangle shape aligned by the first two points picked in the construction plane.

MXS spline primitive

Just like the regular helix only with four bezier handles per turn (or more if you would like - you can control that with the Steps spinner) instead of 40 corner-points of the default Helix shape.
Simple Catenary

MXS spline primitive

Simple multi-point spline approximating the shape of the catenary curve, ie. the shape formed by a hanging rope. Allows for driving the point positions by scene objects, controlling the slack by absolute sag amount or relative to the length of the line between points, randomization of the slack and other options.
MCG Modfiers, Primitives and Compounds

MCG modfier

Inset mesh polygon groups by their smoothing groups, which helps to keep flat surfaces flat smoothed when chamfered instead of the usual mess.

Due to limitations of the current MCG nodes, it also splits the smoothing group edge borders.

MCG modifier

Extrude, outline and inset polygons, optionally without capping.

Doesn't work on Teapot because of its two-point faces (i.e. faces that only have two vertices, yet still have three edges).

Includes all the compunds it depends on and two example modifiers (InsetExtrudeModifier and InsetBySelectionVal).

Loops from Surface

MCG primitive

Simple example of growing loops from open-ended surface. As such, it only looks for the first border and expands from there. Here it is shown on Cylinder with caps removed. Default Advanced Sweep output or renderable spline without caps would also work.

MCG compound

Random point distribution (non-uniform).

Face size is taken into account, bigger faces may have multiple points while smaller faces none at all.
Randomize Elements

MCG modifier

Randomize mesh elements, with the possibility to specify an upnode (a reference system for all the transformations).

That means that XYZ rotation are then parallel with the object's axes, same with translation and scale.
Custom MCG Dialogs

Ever wanted a pop-up dialog for your MCG graph? Now you can have it and work with scene objects just by connecting nodes. The sample file randomizes the position of selected objects given custom limits.

As this is a MCG utility, you don't get viewport redraw and undo support by default.
Data-Channel-derived Modifiers
Grow Vertex Selection

Grow selection leveraging the Data Channel modifier. For more information, refer to the original discussion.

This is a self-contained modifier and is applied as such, it's not a Data Channel preset.
Other Scripts
Border Fill

Fills a border with quads.

Selects the newly created faces (in case you want to do an inset afterwards) and verts (in case you want to relax them).

Polycount thread: Border Fill

3ds Max Ideas topic if you want something like this in max by default: Add a method to cap with quad topology
InstantMeshes bridge

A bridge from 3ds max to instant meshes.

Without leaving max interface, it exports, remeshes and imports the remeshed object back based on the parameters in the dialog.
Spline Control

Simple animation-friendly spline control.

The main advantage over SplineIK is the easy and precise control over the tangent handles with scene helpers, and you can manipulate them in local and parent space as well.
Spline Poly Bind

Creates an empty vertex-only object that you can deform with polybrushes (or any other editable-poly-friendly tool), and the splines will follow the deformation.

You can use all the usual tools for moving its verts, like the Shift Move brush, Shift Rotate Brush, Shift Scale brush, Conform brush or even classic Soft Selection, as long as you don't add nor remove any points.
Slider Crank Setup

Automated creation of a simple slider crank setup based on a few helpers.

The animation is driven by the Crank Pin helper rotation. Since everything works in the parent space of the Master helper, you can then orient it any way you want.

For more details, check the original thread and an example .max file.
HDRi Material Override Toolbar

Simple floating 'toolbar' example where you can quickly toggle reflection override for the current viewport (any custom picked hdri map will work) and set its rotation. Since it's just a viewport override, all the materials applied to the objects will be left untouched. Comes in handy for example when checking for shading errors.
Viewport Overlay Grid

Shows an overlay grid with a variable number of horizontal/vertical subdivisions over the active viewport. Safe frames are supported as well. To be able to click-through, freeze its object. The grid can be restricted to only show in camera views or extracted as a set of spline lines.
HalftoneLines script

Create gradient ramp which goes from thin lines to thick.

The gradient can then be mapped for example to a Falloff map (Shadow/Light falloff pictured)
AdobePalette loader

Simple loader for adobe .ase palettes.

This Post needs Your Comment!


Just wanted to thanks you for your scripts, gratz ^^

Dan Moyer

Just realized like half the maxscripts I use (that I grab from scriptspot) are yours. Thank you so much for these tools. Very helpful. Have you ever considered combining your flange and gear primitives into one? Some kind of procedural Gear with holes radially placed would be super good.

Andrea Lazzarotti

the 100% of your tool its very very useful!!


In Arrow maxscript:-I need this arrowhead as a fill object with all edit features including a spinner to control arrow size also when I create arrow from the custom shape it needs to build upon spline not far form spline.
If possible please help me...
I have created a spinner for that and working on this script but didn't understand how to do this so far...
I have also commented on Scriptspot please help me...


Just a note on meshmuscle script. It looks good, nice and fast but it needs a couple improvements.

The end nodes don't link properly - it breaks the function of the muscle. I tried using position constraints but that didn't work quite right either.

The muscle needs to react to end node rotation as well, not just position, for it to be truly functional.

With these two additions it will be awesome.

I was excited when I saw it showcased on Eloi's channel, but sadly I cannot use it in its current state.


Please join 3ds max team, your tools are next level


"Please join 3ds max team, your tools are next level"

I second this! Super helpful scripts!!
Thank you so much!

Return to top