経緯
テクスチャと同じ比率のポリゴンを作るシチュエーションが多かった為、ラクシタクなりました!
ツール動作
ちなみに、ノードを選択して実行すると、そのノードの子になります。
コード
下記をコピーして、Mayaのコマンドラインに貼り付けてください!
Maya2019でしか確認してません!
global proc createPlaneWithTexture() { string $filePaths[] = `fileDialog2 -fileMode 4 -caption "Select PNG Files" -fileFilter "*.png"`; if (size($filePaths) == 0) { return; } for ($filePath in $filePaths) { // テクスチャ名取得 string $textureName = `basenameEx $filePath`; // 画像の寸法を取得(ImageMagickを使わずMayaの方法を利用) string $fileNodeArray[]; $fileNodeArray[0] = `shadingNode -asTexture file -name ("file_" + $textureName)`;global proc createPlaneWithTexture() { string $filePaths[] = `fileDialog2 -fileMode 4 -caption "Select PNG Files" -fileFilter "*.png"`; if (size($filePaths) == 0) { return; } string $selectedNodes[] = `ls -sl -type transform`; string $parentNode = (size($selectedNodes) > 0) ? $selectedNodes[0] : ""; for ($filePath in $filePaths) { // テクスチャ名取得 string $textureName = `basenameEx $filePath`; // 画像の寸法を取得(ImageMagickを使わずMayaの方法を利用) string $fileNodeArray[]; $fileNodeArray[0] = `shadingNode -asTexture file -name ("file_" + $textureName)`; string $fileNode = $fileNodeArray[0]; // 配列の最初の要素を取得 setAttr ($fileNode + ".fileTextureName") -type "string" $filePath; refresh; int $width = `getAttr ($fileNode + ".outSizeX")`; int $height = `getAttr ($fileNode + ".outSizeY")`; // 比率計算 float $planeWidth = ((float)$width) / 1000.0; float $planeHeight = ((float)$height) / 1000.0; // 平面ポリゴン作成 string $planeArray[] = `polyPlane -w $planeWidth -h $planeHeight -sx 1 -sy 1 -name ($textureName)`; string $plane = $planeArray[0]; // 配列の最初の要素を取得 // 選択ノードがある場合、作成した平面を選択ノードの子にする if ($parentNode != "") { parent $plane $parentNode; setAttr ($plane + ".translate") 0 0 0; setAttr ($plane + ".rotate") 0 0 0; setAttr ($plane + ".scale") 1 1 1; } // マテリアル作成 string $material = "mat_" + $textureName; string $shaderArray[]; $shaderArray[0] = `shadingNode -asShader lambert -name $material`; string $shader = $shaderArray[0]; // 配列の最初の要素を取得 setAttr ($shader + ".ambientColor") -type double3 1 1 1; setAttr ($shader + ".incandescence") -type double3 0 0 0; setAttr ($shader + ".diffuse") 0; // Place2dTextureノード作成と接続 string $place2dArray[]; $place2dArray[0] = `shadingNode -asUtility place2dTexture -name ("p2dTex_" + $textureName)`; string $place2d = $place2dArray[0]; connectAttr -f ($place2d + ".outUV") ($fileNode + ".uvCoord"); connectAttr -f ($place2d + ".outUvFilterSize") ($fileNode + ".uvFilterSize"); // テクスチャ接続 connectAttr ($fileNode + ".outColor") ($shader + ".color"); connectAttr ($fileNode + ".outTransparency") ($shader + ".transparency"); // シェーディンググループ作成 & 適用 string $shadingGroup = `sets -renderable true -noSurfaceShader true -empty -name ($shader + "SG")`; connectAttr -force ($shader + ".outColor") ($shadingGroup + ".surfaceShader"); select -r $plane; hyperShade -assign $shader; } } createPlaneWithTexture();
既出バグ
未発見(募集中!