Greeble für cinema?

Azrael Crusader

Erfahrenes Mitglied
Hy alle miteinander,

bin grad etwas durch den Showroom geschlendert und da fand ich folgendes Bild Und der Designer dieses bildes schreibt, dass er ein PlugIn namens Greeble für max verwendet hat, um Aufbauten auf Raumschiffe aufzubringen. Gibt es sowas auch für Cinema?

Mfg

Azrael
 
Jaaaa! :-)

So gefällt mir das! Das Who needs Greeble ist genau das richtige! Werd das mal zu Hause testen, hoffentlich funktionierts auch.

Danke dir!

Mfg

Azrael
 
Hi!

Ich weiß, Thread ist "erledigt", aber die "Aufgabe" hat mich so gereizt ;)
Anbei mal ein Spaß-Coffee-Script ... wenig komfortabel, schlechter Algorithmus und nichteinmal ein PlugIn (;)), aber vielleicht macht es ja jemandem Spaß, damit zu spielen und eine schönere Variante zu erstellen (mir fehlt leider die Zeit) :)

Anleitung:
1) Null-Objekt erstellen (im Screenshot = Greeble).
2) Null-Objekt ein Coffee-Tag zuweisen.
3) Diesem per Copy/Paste unten angeführtes Script zuweisen.
4) Script kompilieren (auch nach Parameter-Änderungen!).
5) Z.B. Ebene erzeugen, diese Konvertieren und
6) unterhalb des Null-Objekts verschieben.

...das Script erzeugt ein Duplikat und wendet diverse Extrudes und Inner-Extrudes an.
Nach Parameteränderung braucht nur "Kompiliert" und das sichtbare, gegreebelte Objekt gelöscht zu werden... es wird erneut mit dem "Original" gegreebelt ;)

Parameter:
Die Länge des Arrays bestimmt, wie oft "gegreeblet" wird. Pro Durchgang wird:
a) G_select: die Selektion per Zufall verkleinert.
b) G_extrude: die selektierten Polygone extrudiert, wenn gewünscht mit
c) G_bevel: Bevel.
d) G_inner: die selektierten Polygone innen extrudiert.
G_all_inner und G_all_offset werden ganz zum Schluß angewandt: Innen extrudieren und extrudieren...

Script (getestet unter 9.5):
Code:
main(doc,op)
{
 // Parameter; array = Anzahl der Durchgänge
 var G_select  = new(array,3);
 var G_extrude = new(array,3);
 var G_bevel   = new(array,3);
 var G_inner   = new(array,3);
 // 1.Durchgang
  G_select[0]  = 0.9;
  G_extrude[0] = 5;
  G_bevel[0]   = 0;
  G_inner[0]   = 3;
 // 2.Durchgang
  G_select[1]  = 0.7;
  G_extrude[1] = 4;
  G_bevel[1]   = 0;
  G_inner[1]   = 2;
 // 3.Durchgang
  G_select[2]  = 0.5;
  G_extrude[2] = 3;
  G_bevel[2]   = 0;
  G_inner[2]   = 0;
 // Abschluß
  var G_all_inner  = 0.1;
 var G_all_offset = -2;
 // Gibt's etwas zu greeblen?
 var use = op->GetDown();
 if (!use) { return; }
 // Wurde bereits gegreebled?
 var obj = use->GetNext();
 if (obj) { return; }
 // Gegreebled wird nur ein Clone
 obj = use->GetClone(CL_NO_HIERARCHY);
 obj->InsertUnder(op);
 obj->SetEditorMode(MODE_ON);
 obj->SetRenderMode(MODE_ON);
 // Original ausblenden
 use->SetEditorMode(MODE_OFF);
 use->SetRenderMode(MODE_OFF);
 // Greeble --------------------------------------------------
 var j;
 for(j=0; j<sizeof(G_select);j++) {
  // Selection verkleinern
  var random = new(Random);
  random->Init(1234567);
  var select = obj->GetPolygonSelection();
  var i;
  for(i=0; i < obj->GetPolygonCount(); i++) {
   if (select->IsSelected(i) && random->Get01()>G_select[j]) {
	select->Deselect(i);
   }
  }
  obj->SetPolygonSelection(select);
  // Extrude & Bevel
  if (G_extrude[j]) {
   var bc = new(BaseContainer);
   bc->SetData(MDATA_BEVEL_OFFSET1, G_extrude[j]);
   bc->SetData(MDATA_BEVEL_OFFSET2, G_bevel[j]);
   bc->SetData(MDATA_BEVEL_PRESERVEGROUPS, true);
   bc->SetData(MDATA_BEVEL_ANGLE, pi/4);
   var result = SendModelingCommand(ID_MODELING_BEVEL_TOOL,doc,obj,bc,MODIFY_POLYGONSELECTION);
  }
  // Inner Extrude
  if (G_inner[j]) {
   var bc = new(BaseContainer);
   bc->SetData(MDATA_EXTRUDEINNER_OFFSET, G_inner[j]);
   bc->SetData(MDATA_EXTRUDEINNER_PRESERVEGROUPS, true);
   bc->SetData(MDATA_EXTRUDEINNER_ANGLE, pi/4);
   var result = SendModelingCommand(ID_MODELING_EXTRUDE_INNER_TOOL,doc,obj,bc,MODIFY_POLYGONSELECTION);
  }
 }
 // Abschluß: Select all
 var select = new(BaseSelect);
 var i;
 for(i=0; i < obj->GetPolygonCount(); i++) {
  select->Select(i);
 }
 obj->SetPolygonSelection(select);
 // Abschluß: Inner Extrude
 var bc = new(BaseContainer);
 bc->SetData(MDATA_EXTRUDEINNER_OFFSET, G_all_inner);
 bc->SetData(MDATA_EXTRUDEINNER_PRESERVEGROUPS, true);
 bc->SetData(MDATA_EXTRUDEINNER_ANGLE, pi/4);
 var result = SendModelingCommand(ID_MODELING_EXTRUDE_INNER_TOOL,doc,obj,bc,MODIFY_POLYGONSELECTION);
 // Abschluß: Extrude
 bc->SetData(MDATA_EXTRUDE_OFFSET, G_all_offset);
 bc->SetData(MDATA_EXTRUDE_PRESERVEGROUPS, true);
 bc->SetData(MDATA_EXTRUDE_ANGLE, pi/4);
 var result = SendModelingCommand(ID_MODELING_EXTRUDE_TOOL,doc,obj,bc,MODIFY_POLYGONSELECTION);
}
Wie immer gilt: Benutzung des Scripts auf eigene Gefahr: keine Haftung für evtl. Schäden!

Liebe Grüße,
Mark.
 

Anhänge

  • greeble.jpg
    greeble.jpg
    45 KB · Aufrufe: 487
Hi!

@DrHonigtau: Was meinst Du damit? *_preservgroups läßt sich doch unter toolextrude.h, toolextrudeinner.h und toolbevel.h entdecken?! ...funktioniert es nicht?

@Ludren: na, super, JETZT kommen die Free-Plugins :rolleyes: :-)

Liebe Grüße,
Mark.

//edit: keinen Alk für mich mehr heut' ... DrHonigtau, Du meintest Versionen kleiner V9.5, gelle ;) Gab/gibt's keinen Flag für vorhergehende Versionen?
 

Neue Beiträge

Zurück