// ===== UV Cut + Unfold (+ Pack / Texel Density / Padding) — Stable MEL (Maya 2026) ===== global proc uvCU_RunPad(float $td, int $mapSize, int $doSetTD, int $doPack, float $padding) { if ($doSetTD && $td <= 0.0) error "Texel Density must be > 0."; if ($doSetTD && $mapSize <= 0) error "Map Size must be > 0."; string $edges[] = `filterExpand -sm 32 -ex 1`; if (!size($edges)) error "Select polygon edges (UV seams) first."; string $owners[] = `ls -o $edges`; string $xforms[]; for ($o in $owners) { string $p[] = `listRelatives -p -pa $o`; if (size($p)) { int $seen = 0; for ($t in $xforms){ if ($t==$p[0]){$seen=1;break;} } if (!$seen) $xforms[size($xforms)] = $p[0]; } } select -r $edges; polyMapCut; // Select ALL UVs on those meshes select -cl; for ($t in $xforms) { string $uvs[] = `polyListComponentConversion -toUV $t`; select -add $uvs; } select -r `filterExpand -sm 35 -ex 1`; // If no UVs yet, seed a quick projection & reselect UVs if (!size(`ls -sl -fl`)) { for ($t in $xforms) { select -r $t; polyAutoProjection -lm 0 -pb 0 -ibd 1 -cm 0 -l 2 -sc 1 -o 1 -p 6 -ps 0.2 -ch 0; } select -cl; for ($t in $xforms) { string $uvs2[] = `polyListComponentConversion -toUV $t`; select -add $uvs2; } select -r `filterExpand -sm 35 -ex 1`; } // Unfold (Unfold3D tool entry) u3dUnfold; // Optional Texel Density if ($doSetTD) { texSetTexelDensity $td $mapSize; } // Optional Pack (padding in UV units 0..1) if ($doPack) { polyLayoutUV -l 2 -sc 1 -fr 1 -ps $padding -ch 0; } string $msg = "[UV] Cut + Unfold"; if ($doSetTD) $msg += " + TD"; if ($doPack) $msg += (" + Pack (Padding: " + $padding + ")"); print ($msg + ".\n"); } // Camera planar from current view (your requested flags) global proc uvCU_PlanarFromCamera() { string $sel[] = `ls -sl`; if (!size($sel)) error "Select mesh components or objects to project."; string $faces[] = `filterExpand -sm 34 -ex 1`; if (!size($faces)) { string $toFaces[] = `polyListComponentConversion -toFace $sel`; $faces = `filterExpand -sm 34 -ex 1 $toFaces`; } if (!size($faces)) error "Could not resolve faces from selection."; select -r $faces; polyProjection -type Planar -md p -constructionHistory 1; print "[UV] Camera-based planar projection applied from view.\n"; } // Button callback — query controls by explicit names and run global proc uvCU_OnRun() { float $td = `floatFieldGrp -q -value1 uvCU_tdFld`; int $ms = `intFieldGrp -q -value1 uvCU_msFld`; int $doTD = `checkBox -q -v uvCU_cbTD`; int $doPack = `checkBox -q -v uvCU_cbPack`; float $padding = `floatFieldGrp -q -value1 uvCU_padFld`; optionVar -fv "uvCU_texelDensity" $td; optionVar -iv "uvCU_mapSize" $ms; optionVar -iv "uvCU_doSetTD" $doTD; optionVar -iv "uvCU_doPack" $doPack; optionVar -fv "uvCU_padding" $padding; uvCU_RunPad($td, $ms, $doTD, $doPack, $padding); } // UI — controls are created with fixed names so callbacks never break global proc uvCU_UI() { string $win = "uvCutUnfoldTDWin"; if (`window -exists $win`) deleteUI -window $win; window -title "ChatGPT X CS UV Tool" -widthHeight 420 300 $win; columnLayout -adj true -rs 6; float $defTD = (`optionVar -exists "uvCU_texelDensity"`) ? `optionVar -q "uvCU_texelDensity"` : 8.0; int $defMap = (`optionVar -exists "uvCU_mapSize"`) ? `optionVar -q "uvCU_mapSize"` : 2048; int $defDoTD = (`optionVar -exists "uvCU_doSetTD"`) ? `optionVar -q "uvCU_doSetTD"` : 1; int $defPack = (`optionVar -exists "uvCU_doPack"`) ? `optionVar -q "uvCU_doPack"` : 1; float $defPad = (`optionVar -exists "uvCU_padding"`) ? `optionVar -q "uvCU_padding"` : 0.005; // Name each control explicitly (last arg) floatFieldGrp -label "Texel Density (px/unit)" -numberOfFields 1 -value1 $defTD uvCU_tdFld; intFieldGrp -label "Map Size (px)" -numberOfFields 1 -value1 $defMap uvCU_msFld; checkBox -l "Scale to density after unfold" -v $defDoTD uvCU_cbTD; checkBox -l "Pack after unfold" -v $defPack uvCU_cbPack; floatFieldGrp -label "UV Padding (0..1)" -numberOfFields 1 -value1 $defPad uvCU_padFld; separator -style "in"; rowLayout -nc 3 -cw3 180 160 60 -ct3 "both" "both" "both" -co3 2 2 2; button -label "CameraBased Planar" -c "uvCU_PlanarFromCamera();"; button -label "Cut + Unfold" -c "uvCU_OnRun();"; button -label "Close" -c ("deleteUI -window " + $win); setParent ..; showWindow $win; } // Launch uvCU_UI();
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter