The SDK and MAXScript

3ds Max gives you two ways to write plug-in applications: the SDK, which uses C++, and MAXScript, the program's native scripting language.

Which language you choose depends partly on how you want to work, and partly on what you want your plug-in to accomplish. Both languages have their strengths and limitations, but you can develop complex applications with either of them.

MAXScript

In general, MAXScript plug-ins run more slowly than comparable plug-ins written in C++, so if performance is an issue, using the SDK is probably preferable.

On the other hand, MAXScript provides some methods that are higher level than those to be found in the C++ SDK, and supports a few 3ds Max features and capabilities that are not exposed to the SDK. If your feature needs functionality supported by MAXScript but not the SDK, then MAXScript is your only choice. In particular, exposing 3ds Max features via OLE/ActiveX/DotNet controls is easier to code in MAXScript than it is with the SDK.

MAXScript can be useful for prototyping plug-ins, developing comparatively small features, and writing test suites.

The SDK

The SDK is preferable when performance is important; in general, this is when computation rather than interactivity is the main purpose of the plug-in.

Performance is most often an issue when the plug-in handles large sets of entities such as objects, sub-objects, files, notification messages, and so on.

On the flip side, developing and especially debugging a C++ plug-in can be orders of magnitude slower as it requires often recompiling, restarting of 3ds Max and tweaking of GUI resources.

The Middle Way

In some cases, combining the positive sides of the two approaches while negating their shortcoming can be a good idea.

Implementing a hybrid system where the time-critical functionality is written using the SDK and exposed to MAXScript as Function Publishing Interfaces while the User Interface is taken care of by MAXScript can shorten the development time and even allow certain flexibility in updating features or letting the end user reconfigure the UI while using the same underlying C++ code.