リアルタイム系の3DCG制作に関するノウハウや実践的なTipsを共有するWiki形式のWEBサイトです。


数値入力で法線方向に膨らませるスクリプト

kmjInflate

アイコン
セルルックなどで法線を反転させたメッシュを輪郭線などに用いる際、一定の値で膨らませるスクリプトが欲しかったので作成しました。
MAYAは法線方向の移動やTransComponentで膨らませることはデフォルトでできるんですが、毎回決まった値で膨らませたかったのです。
Softimageや3dsMAXではPush DeformerとかPush Modifierとか言われている機能です多分。雑ですがGUI付きです。
MEL版とPython版がありますのでお好きな方をお使いください。

Gumroadからもダウンロードできるようになりました!
KMJ INFLATE -Gumroadページ-



実行するとこんな感じです。

MEL版

実行方法
  1. スクリプト本文をコピーしてkmjInflate.melというファイル名で保存
  2. mayaのscriptsフォルダに置く
  3. スクリプトエディターにて
kmjInflate;
と入力して実行
スクリプト本文
/*
kmjInflate.mel
入力された数値分法線方向に移動するMelです。頂点数が多過ぎると重くなります。
2016/04/15 作成
*/

//実行部
global proc kmjInflateExec()
{
    ConvertSelectionToVertices;			//選択を頂点に変換
	string  $vtxList[] = `ls -sl -fl`;	//選択頂点配列を個別に取得
	int $listSize = `size $vtxList`;	//頂点数の取得
	string $str = "";					//空の文字列作成
	float $inflateValue = `floatField -query -value FLOAT_FIELD1`;	//フロートフィールド1を$inflateValueに代入

	for ( $i = 0; $i < $listSize; $i++){
		$str = $str + " -n " + $inflateValue;	//頂点数分”-n 数値”を追加
	}

	eval("moveVertexAlongDirection" + $str );	//法線移動(moveVertexAlongDirection)実行

}



//UI作成
global proc kmjInflate()
{
	if((`window -ex kmjInflateWindow`) == true ) deleteUI kmjInflateWindow;
	window -t "kmjInflate" kmjInflateWindow;

	rowLayout -numberOfColumns 3;
	
	text -label "Inflate Value:";
	floatField -w 100 FLOAT_FIELD1;						//フロートフィールド1
	button -l "Inflate" -w 100 -c "kmjInflateExec()";	//実行ボタン

	showWindow;

}

Python版

実行方法
  1. スクリプト本文をコピーしてkmjInflate.pyというファイル名で保存
  2. mayaのscriptsフォルダに置く
  3. スクリプトエディターにて
import kmjInflate
kmjInflate.main()
と入力して実行
スクリプト本文
# -*- coding: utf-8 -*-
import maya.cmds as cmds

"""
#選択したコンポーネントを任意の数値で法線方向に膨らませるスクリプトです。
#スクリプトエディターのPythonタブに下記をコピーして実行するか、シェルフに登録してください。

import kmjInflate
kmjInflate.main()

"""



class KMJ_InflateWindow(object):
	def __init__(self):
		self.window = 'kmjInflateWindow'
		self.title = 'kmjInflate'
		self.size = (350, 95)

	def create(self):
		if cmds.window('kmjInflateWindow', exists=True):
			cmds.deleteUI('kmjInflateWindow', window=True)
		self.window = cmds.window(
			self.window,
			t=self.title,
			widthHeight=self.size
		)
		self.layout()
		cmds.showWindow()

	def layout(self):
		self.rowLayout = cmds.rowLayout(numberOfColumns=3)
		self.textLabel = cmds.text( label='Inflate Value:' )
		self.field_value = cmds.floatField(v=0.1)
		self.button = cmds.button(l='Inflate', c=self.buttonCmd)

	def buttonCmd(self, *args):
		inflate_value = cmds.floatField(self.field_value, q=True, v=True)
		inflate_value_string = []
		
		tmp_vertex = cmds.ls(sl=True)
		select_vertex = cmds.polyListComponentConversion(tmp_vertex, tv=True)
		cmds.select(select_vertex)
		select_vertex = cmds.ls(sl=True, fl=True)
		
		for i in select_vertex:
			inflate_value_string.append(inflate_value)
		cmds.moveVertexAlongDirection(n= inflate_value_string)
		print("Inflate Value:" + str(inflate_value))

def main():
	kmjInflateWindow = KMJ_InflateWindow()
	kmjInflateWindow.create()

自分でスクリプトを書きたい方は

MAYAのスクリプティングについて学ぶならこれらの書籍がおすすめです。
全部買うと高いので、目次やレビューをチェックして必要なものだけポチるのが良いと思います。

MELの本です。ちと古いですが基本であるMELから始めたい人には良いですね。
Python(cmds)の本です。ちょっと高いですかね……
PyMELの本です。PyMELの日本語本はこれ以外に無い……はず。
Python(cmds)の本です。プラグインのAmaterasu製作者の方の本です。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

※現在 ユーザーID保持者 のみがコメント投稿可能な設定になっています。

Wiki内検索

メニュー

Maya

管理人


管理者:kmj
Twitter:@kmj3dcg
ゲームグラフィックに携わり十数年、現在フリーランスのモデラーとして活動しています。
専門分野:モデリング、テクスチャ、ウェイト(キャラモデルがメインのゲームグラフィッカーです)
お問い合わせはこちらまでお願いいたします。

Amazonアソシエイト

皆様のご協力感謝しておりますm(_ _)m























管理人/副管理人のみ編集できます