-
Crear modificador
Hola a todos, bueno tengo una idea para crear un modificador, mi pregunta radica es quiero que este modificador me permita adjuntar controladores por decirlo así a groso modo, por ejemplo, que yo los selecciones y me los vaya guardando cómo se hace con el skin.
Alguna idea para lograr esto.
Muchas gracias. Un saludo.
-
Para crear un modificador que almacene controladores como el modificador Skin, necesitas desarrollar un plugin o script. En 3ds Max actual, la forma más robusta es usar Python con el SDK de Max (MaxPlus) o el sistema de herramientas de .NET (como C# con MaxSharp). La idea central es crear una clase de modificador personalizada que gestione una lista de nodos (tus controladores) dentro de su propio bloque de parámetros.
Primero, debes definir la estructura del modificador. Utiliza el sistema de parámetros (IParamBlock2) para declarar una lista de nodos. Este bloque de parámetros actuará como el contenedor donde se guardarán las referencias a los controladores que selecciones. Es similar a cómo el Skin guarda los huesos, pero en tu caso serán nodos arbitrarios.
Luego, implementa una interfaz de usuario en el panel del modificador. Necesitarás botones como Pick Controlador y Quitar, y una lista para mostrar los controladores añadidos. En el código del botón Pick, debes iniciar un modo de selección (pick mode) que permita al usuario elegir un nodo de la escena. Una vez seleccionado, ese nodo se añade a la lista del bloque de parámetros.
Es crucial manejar las referencias de los nodos correctamente para que se mantengan si el archivo se guarda y se reabre. El sistema de IParamBlock2 gestiona esto automáticamente si defines el tipo de parámetro como TYPE_INODE. También debes considerar la validación, como evitar duplicados o permitir la reordenación de la lista.
Para la lógica del modificador, en su método ModifyObject, debes iterar sobre la lista de nodos controladores almacenados y aplicar su transformación u otra influencia al objeto modificado. Aquí es donde defines qué hace exactamente tu modificador con cada controlador.
Recomiendo usar la plantilla de Max Scripted Plug-in en Python como punto de partida, ya que es accesible y bien documentada en la ayuda actual de 3ds Max. La documentación oficial tiene ejemplos de modificadores que gestionan listas de nodos. Busca en la ayuda de 3ds Max los temas "Scripted Modifier Plug-ins" y "Working with Parameter Blocks".
Para pruebas rápidas, podrías prototipar con MaxScript, pero para una solución estable y a largo plazo, Python o C# son superiores. Recuerda comprobar la validez de los nodos referenciados en cada evaluación, por si algún controlador ha sido borrado de la escena.