|
|||||||
Zurzeit aktive Benutzer im Chat: 0
|
|
![]() |
Mit 10 Benutzern waren die meisten Benutzer an einem Tag im Chat (14.03.2008). Zurzeit ist kein Benutzer im Chat. |
|
|||||||||||||||
![]() |
|
|
LinkBack | Themen-Optionen | Ansicht |
|
|
#1 | ||
|
neuer Benutzer
Registriert seit: 02.07.2007
Beiträge: 8
|
Hallo zusammen,
ich habe neuerdings ein Skript gefunden, welches mir bei der Modellierung meiner Mod hilft. Es geht darum, dass ich beim Modelln sehr viele Texturen pro Mesh benutze. Es sind alles Multi/Sub Materials mit einer Bitmap im Diffuse und in bestimmten Fällen keine Map im Diffuse. Oft sind es gleiche Texturdateien, die in den Dateien benutzt werden. Es kommt auch oft vor, dass ich verschiedene Meshes zusammenfüge und sie weiterbearbeite. Nach dem Verbinden habe ich dann die Multi/Sub Materialien beider Meshes drin. Jetzt möchte ich, dass das Skript alle ID's durchgeht und checkt, ob sich gleiche Texturdateien (Es sind immer *.tga Texturen) im Multi/Sub befinden. Wenn ja, dann soll es alle auf eine ID fassen und allen betroffenen Polygonen diese ID zuweisen. Das Gleiche soll es auch bei den Fällen sein, wo es sich um ein Diffuse ohne Map handelt (siehe MaterialLib im Anhang. ID 5,6 und 7 Name: "GHOSTOCCLUDER"). Diese Texturen brauche ich, da die Engine bei dem Namen eine spezielle Aktion durchführt. Ich bin mir unsicher, wie das Skript genau arbeitet (siehe unten), aber in manchen Fällen habe ich im Material Editor immer noch paar ID's mit der gleichen Texturdatei (Siehe MatLib z.B.: ID 5,6,7 oder 18,19 oder 20,21 etc.). Deshalb glaube ich nicht, dass das Skript sich die Texturdateien anschaut und vergleicht. Das Ganze brauche ich, da dummerweise das Programm zum Spiel in diesen Fällen Probleme macht. Hoffe, dass es soweit verständlich ist. Sonst erkläre ich es nochmal. ![]() Hier erstmal das Skript: Code:
macroScript CollapseMM category:"Larry Minton" tooltip:"Collapse Multi-Materials"
(
-- Collapse Mult-Material Script
-- Larry Minton (Link gesperrt)
-- 11/18/98
Utility CollapseMat "Collapse MultiMaterial" (
local theMat, uniqueMats, mapTo, theObj
struct aMat (theInstance, theDiffusemap)
Label l_PickObj "Object:"
PickButton PickObj "none"
label l_nMatIDs_t "Obj Max MatID:" across:2 align:#left
label l_nMatIDs_n ""
label l_nSubMats_t "# SubMats:" across:2 align:#left
label l_nSubMat_n ""
label l_nUniqueSubMats_t "# Unique SubMats:" across:2 align:#left
label l_nUniqueSubMat_n ""
Button DoIt "Collapse Material" enabled:false
on PickObj picked obj do
( theObj=obj
if classof obj != Editable_mesh do
if canConvertTo obj mesh then
convertToMesh obj
else
throw "Cannot convert object to Editable Mesh"
PickObj.text=obj.name
theMat=obj.material
if classof theMat != Multimaterial do throw "Object Material not a MultiMaterial"
l_nSubMat_n.text=theMat.numsubs as string
local SubMatUsed=#()
for f=1 to obj.numfaces do
SubMatUsed[getFaceMatID obj f]=true
l_nMatIDs_n.text=SubMatUsed.count as string
uniqueMats=#()
mapTo=#()
for m=1 to theMat.numsubs do
( if SubMatUsed[m] != true do continue
local thisMatDBitmap=undefined
if classof theMat[m] == StandardMaterial do
if classof theMat[m].diffusemap == Bitmaptexture do
thisMatDBitmap=theMat[m].diffusemap.filename
if thisMatDBitmap == undefined do
( append uniqueMats (aMat theMat[m] thisMatDBitmap)
mapTo[m]=uniqueMats.count
continue
)
local foundMatch=false
for p=1 to uniqueMats.count do
if thisMatDBitmap == uniqueMats[p].theDiffusemap do
( mapTo[m]=p
foundMatch=true
continue
)
if not foundMatch do
( append uniqueMats (aMat theMat[m] thisMatDBitmap)
mapTo[m]=uniqueMats.count
)
)
l_nUniqueSubMat_n.text=uniqueMats.count as string
doIt.enabled=true
)
on DoIt pressed do
( local NewMMat=Multimaterial numsubs:uniqueMats.count name:(theObj.name+"_"+theObj.material.name)
for m=1 to uniqueMats.count do
NewMMat[m]=copy uniqueMats[m].theInstance
for f=1 to theObj.numfaces do
( local oldID=getFaceMatID theObj f
setFaceMatID theObj f mapTo[oldID]
)
theObj.material=NewMMat
update theObj
DoIt.enabled=false
)
)
)
Code:
--multiMatRenamer
--by scrimski
--usage at your own risk
mat = $.material
num = mat.numsubs
matArr = mat.materialList
for i = 1 to num do
(
if matArr[i].diffuseMap != undefined then
(
matArr[i].name = getFilenameFile ((matArr[i].diffuseMap.filename) as string)
)
)
Grüße Al-m Edit: Hier noch der Link zur MatLib: Link gesperrt Geändert von Al-m (28.07.2008 um 01:19 Uhr). |
||
|
|
|
| Sponsored links | |
|
|
|
![]() |
| Themen-Optionen | |
| Ansicht | |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Auswahl erweitern | Alpha Zen | 3ds Max - Modellieren | 2 | 25.07.2007 16:24 |
| Objekte vereinfachen / Collapse | cherco | 3ds Max - Modellieren | 3 | 15.06.2007 13:44 |
| collapse controller bei verlikten Objekten | darkman222 | 3ds Max - Animation | 4 | 14.06.2006 19:40 |
| Modifier erweitern ? | Velmar | 3ds Max - Plugins und Skripte | 0 | 09.11.2005 13:53 |
| Poly's erweitern? | wortgewannt | 3ds Max - Einsteiger | 1 | 09.01.2005 12:57 |