Relacion entre Componentes
Como se conectan y comunican los 12 componentes del sistema Menu Radial.
Diagrama General
Menu Radial esta compuesto por 12 componentes organizados en una jerarquia clara. MRMenuRadial es el punto de entrada que coordina todo el sistema:
Tres Capas del Sistema
El sistema se organiza en tres capas con responsabilidades claras. Cada capa depende de la anterior:
Capa 1: Orquestacion
MRMenuRadial es el punto de entrada. Su responsabilidad es:
- Propagar el avatar a todos los componentes hijos automaticamente.
- Coordinar la deteccion ejecutando el escaneo de cada componente de preparacion.
- Generar la estructura del menu basandose en las piezas detectadas.
- Sincronizar cambios cuando se agrega o quita ropa del avatar.
Capa 2: Preparacion del Avatar
5 componentes que analizan y preparan el avatar. Se ejecutan al asignar el avatar o al hacer clic en "Sincronizar":
- MRCoserRopa — Detecta piezas de ropa, mapea huesos entre armatures, clasifica piezas como Ropa/Pelo/Pieza. Durante el build NDMF, cose los armatures de ropa al esqueleto del avatar.
- MROrganizaPB — Escanea PhysBones y Colliders, los reorganiza en contenedores que luego se pueden vincular a frames para activarlos/desactivarlos con la ropa.
- MRAjustarBounds — Calcula un bounding box unificado que envuelve todo el avatar, evitando que partes desaparezcan por frustum culling.
- MRAnalisisColision — Identifica componentes de Modular Avatar que interfieren con MR (como MA Mesh Settings) y los marca para destruccion automatica.
- MRPesoTexturas — Analiza el peso VRAM de las texturas del avatar. Detecta texturas sin Mip Streaming (requerido por VRChat).
Capa 3: Sistema de Menu
6 componentes que definen la estructura del menu VRChat y generan las animaciones:
- MRMenuControl — Orquesta hasta 8 slots de menu. Genera el FX Controller, Expression Parameters y Expressions Menu de VRChat.
- MRUnificarObjetos — Agrupa frames y genera la animacion correspondiente (OnOff, AB o Linear) segun la cantidad de frames.
- MRAgruparObjetos — Captura un estado del avatar como "frame": que objetos estan activos, que materiales se usan y que blendshapes se aplican.
- MRUnificarMateriales — Agrupa intercambios de materiales en una animacion Linear, permitiendo cambiar materiales con un slider.
- MRAgruparMateriales — Define los slots de material y grupos de materiales alternativos para cada prenda.
- MRIluminacionRadial — Controla propiedades de iluminacion de shaders lilToon mediante un slider radial.
Flujo de Datos
Los datos fluyen en una direccion clara, desde la asignacion del avatar hasta la generacion de archivos VRChat:
- El usuario asigna el avatar → MRMenuRadial propaga la referencia a todos los componentes hijos.
- Cada componente de preparacion escanea independientemente → MRCoserRopa detecta piezas, MROrganizaPB detecta PhysBones, etc.
- Auto-generar crea la estructura de MRMenuControl → Basandose en las piezas detectadas por MRCoserRopa.
- MRUnificarObjetos crea MRAgruparObjetos → Un frame por cada pieza de ropa o peluca detectada.
- MRUnificarMateriales crea MRAgruparMateriales → Un agrupador por cada prenda con materiales intercambiables.
- Durante el build NDMF, MRMenuControl genera los archivos finales → FX Controller, Parameters, Menu. Estos se mezclan con los archivos existentes del avatar.
Orden de Ejecucion NDMF
Durante el build, los plugins de MR se ejecutan en un orden especifico. Este orden es critico para que todo funcione correctamente:
| Fase | Componentes | Que Hace |
|---|---|---|
| Resolving (antes de MA) | MRAnalisisColision, MROrganizaPB | Desactiva componentes conflictivos de MA, organiza PhysBones en contenedores. |
| Transforming (antes de MA) | MRCoserRopa, MRMenuRadial | Cose armatures de ropa, mezcla FX Controller, Parameters y Menu con los del avatar. |
| Modular Avatar procesa | — | MA aplica MergeArmature, BoneProxy, ShapeChanger. ShapeChanger detecta los toggles generados por MR. |
| Transforming (despues de MA) | MRAjustarBounds, Cleanup | Aplica bounds unificados a todos los meshes. Limpia componentes de MR del avatar final. |
Dependencias entre Componentes
Esta tabla muestra de que depende cada componente y a que otros componentes alimenta con datos:
| Componente | Depende de | Alimenta a |
|---|---|---|
| MRMenuRadial | Avatar | Todos los demas |
| MRCoserRopa | Avatar | MRMenuControl (piezas detectadas) |
| MROrganizaPB | Avatar, MRCoserRopa (piezas) | MRAgruparObjetos (contenedores PB) |
| MRAjustarBounds | Avatar | Ninguno (proceso independiente) |
| MRAnalisisColision | Avatar, MRCoserRopa | Ninguno (solo informativo) |
| MRPesoTexturas | Avatar, MRCoserRopa | Ninguno (solo informativo) |
| MRMenuControl | MRMenuRadial | Archivos VRChat (FX, Parameters, Menu) |
| MRUnificarObjetos | MRAgruparObjetos (frames) | MRMenuControl (slot) |
| MRAgruparObjetos | Objetos del avatar | MRUnificarObjetos (frame data) |
| MRUnificarMateriales | MRAgruparMateriales | MRMenuControl (slot) |
| MRAgruparMateriales | Renderers del avatar | MRUnificarMateriales |
| MRIluminacionRadial | Materiales lilToon | MRMenuControl (slot) |
