MetaFusion/Reference/SuperRiggingEditor/scripts/SGCreateLOD.mel

145 lines
4.6 KiB
Plaintext
Raw Normal View History

2025-02-03 22:58:41 +08:00
//******************************************************************************
//
// <20><>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD>: <20><>Ϫʱ<CFAA><CAB1><EFBFBD>Ƽ<EFBFBD><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
// <20><>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD>: q.100@qq.com
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: 2023/08/08
//
//******************************************************************************
global proc SGCreateLOD (int $index){
if(!`pluginInfo -q -l "Unfold3D"`){
loadPlugin "Unfold3D";
}
if($index == 0){
int $lods[] = {1,2,3,4,5,6,7};
for ($lod in $lods){
SGCreateLOD $lod;
}
}
else{
string $axis = `upAxis -q -axis`;
if($axis == "y"){
$axis = "YAxisUp";
}
else if($axis == "z"){
$axis = "ZAxisUp";
}
string $meshes[] = {"head","teeth","saliva","eyeLeft","eyeRight","eyeshell","eyelashes","eyeEdge","cartilage","body"};
string $headGrp = "head_lod"+$index+"_grp";
string $headMesh = "head_lod"+$index+"_mesh";
if(!`objExists $headGrp`){
group -em -name $headGrp;
}
if(!`objExists $headMesh`){
SGGetMeshes -cml $index;
int $headLod[] = `SGGetMeshes -lod 0`;
int $createLod[] = `SGGetMeshes -lod $index`;
for($c in $createLod){
string $create = `SGGetMeshes -i $c`;
if($c >= 50){
delete $create;
continue;
}
int $exist = 0;
for($h in $headLod){
if($h >= 50){
continue;
}
if(`gmatch $create ($meshes[$h]+"*")`){
string $mesh = `SGGetMeshes -m $h`;
if(`objExists $mesh`){
parent $create $headGrp;
string $suv[] = `polyUVSet -q -currentUVSet $mesh`;
string $tuv[] = `polyUVSet -q -currentUVSet $create`;
if(`size($suv)` != 1){
error ($mesh + ": There are multiple uvSet!!!" );
}
if(`size($tuv)` != 1){
error ($create + ": There are multiple uvSet!!!" );
}
if(`gmatch $create "eyeshell*"`){
polyUVSet -cp -uvSet $suv[0] $mesh;
polyUVSet -cuv -uvSet "uvSet1" $mesh;
u3dLayout -res 256 -scl 1 -spc 0.0029296875 -mar 0.0029296875 -box 0 1 0.5 1 $mesh;
polyUVSet -cp -uvSet $tuv[0] $create;
polyUVSet -cuv -uvSet "uvSet1" $create;
u3dLayout -res 256 -scl 1 -spc 0.0029296875 -mar 0.0029296875 -box 0 1 0.5 1 $create;
transferAttributes -transferPositions 1 -transferNormals 1 -transferUVs 0 -transferColors 0
-sampleSpace 3 -sourceUvSpace "uvSet1" -targetUvSpace "uvSet1"
-searchMethod 3 -flipUVs 0 -colorBorders 1 $mesh $create;
transferShadingSets -sampleSpace 0 -searchMethod 3 $mesh $create;
polySoftEdge -a 180 -ch 1 $create;
polyNormalPerVertex -ufn true $create;
DeleteHistory $create;
polyUVSet -cuv -uvSet $suv[0] $mesh;
polyUVSet -delete -uvSet "uvSet1" $mesh;
polyUVSet -cuv -uvSet $tuv[0] $create;
polyUVSet -delete -uvSet "uvSet1" $create;
}
else{
transferAttributes -transferPositions 1 -transferNormals 1 -transferUVs 0 -transferColors 0
-sampleSpace 3 -sourceUvSpace $suv[0] -targetUvSpace $tuv[0]
-searchMethod 3 -flipUVs 0 -colorBorders 1 $mesh $create;
transferShadingSets -sampleSpace 0 -searchMethod 3 $mesh $create;
polySoftEdge -a 180 -ch 1 $create;
polyNormalPerVertex -ufn true $create;
DeleteHistory $create;
}
$exist = 1;
}
}
}
if(!$exist){
delete $create;
}
}
}
else{
warning ($headMesh + " Existed!!!");
}
if($index < 4){
string $bodyGrp = "body_lod"+$index+"_grp";
string $bodyMesh = "body_lod"+$index+"_mesh";
if(!`objExists $bodyGrp`){
group -em -name $bodyGrp;
}
if(!`objExists $bodyMesh`){
string $mesh = `SGGetMeshes -m 50`;
if(`objExists $mesh`){
int $bodyIndex = 50 + $index;
SGGetMeshes -cm $bodyIndex;
parent $bodyMesh $bodyGrp;
string $suv[] = `polyUVSet -q -currentUVSet $mesh`;
string $tuv[] = `polyUVSet -q -currentUVSet $bodyMesh`;
if(`size($suv)` != 1){
error ($mesh + ": There are multiple uvSet!!!" );
}
if(`size($tuv)` != 1){
error ($bodyMesh + ": There are multiple uvSet!!!" );
}
transferAttributes -transferPositions 1 -transferNormals 1 -transferUVs 0 -transferColors 0
-sampleSpace 3 -sourceUvSpace $suv[0] -targetUvSpace $tuv[0]
-searchMethod 3 -flipUVs 0 -colorBorders 1 $mesh $bodyMesh;
transferShadingSets -sampleSpace 0 -searchMethod 3 $mesh $bodyMesh;
polySoftEdge -a 180 -ch 1 $bodyMesh;
polyNormalPerVertex -ufn true $bodyMesh;
DeleteHistory $bodyMesh;
string $bodyMeshShape[] = `listRelatives -s $bodyMesh`;
setAttr ($bodyMeshShape[0]+".displayColors") 0;
}
}
else{
warning ($bodyMesh + " Existed!!!");
}
}
}
}