とあるゲームプログラマの挑戦と敗北の歴史

UE4とプログラミングとmayaとpythonとhtmlとマラソンを中心に情報を発信する元「技術ブログを目指すブログ」から再始動した毎日の日々を発信するブログです。

maya:プログラマー 武器のコンストレインをやってみる(武器のアタッチ手順)

キャラができた、モーションを量産するぞ
そしたら抜刀モーションだ

さて武器のアタッチ手順を記述しておく
・手を選択
・武器を選択
・アニメーションに変更し
・メニューバー>コンストレイン>ペアレント化>オフセットの保持を外す>追加
でmaya上でコンストレインが実行される
f:id:toncrimentan_w:20200520005716j:plain

武器は除いてキャラはキャラでモーションをFBX出力を実行
・FBX出力
f:id:toncrimentan_w:20200520010030j:plain

UE4でモーションをインポート
・モーションをインポート
 拡大率は10倍でよいと思う。
f:id:toncrimentan_w:20200520010258j:plain

アタッチしたい
・アタッチ先のジョイント名をメモる(右手)
・レベルブループリントあたりで以下のノードでアタッチしてみる
f:id:toncrimentan_w:20200520010547j:plain
f:id:toncrimentan_w:20200520010826j:plain

すると・・
左から
アイドリング、歩く、そして武器をアタッチしたバトルアイドリング
を実現。
f:id:toncrimentan_w:20200520011021j:plain


デザイナーさん結構面倒なことやってるんすね
でもとても楽しい。

もうすぐ個人でゲームが作れるようになるぞ。

maya:プログラマー モデリングとモーションをやってみる

ひきつづき
モデル、そしてモーション制作中

前回記事
www.toncrimentan.online


まずはモデルエディタも作業工程どおりに
ツールのボタンを並べてみた。
(作業工程通りにならべないと順番忘れそう)
f:id:toncrimentan_w:20200519030846j:plain

次はモーションのエディタも作る必要がありそう。

モデルはメッシュとすべてのジョイント選択でFBX出力
f:id:toncrimentan_w:20200519031425j:plain

モーションはすべてのジョイント選択でFBX出力できた。
f:id:toncrimentan_w:20200519031618j:plain

UE4にインポートする際は注意
モデルの方はImportUniformScaleを10倍
モーションの方はSkeletonを選択、あとImportUniformScaleを10倍
f:id:toncrimentan_w:20200519030704j:plain

あとはとくに難しことはなく
スケルタルメッシュを配置して、アニメーションを設定したら動いた。
f:id:toncrimentan_w:20200519031235j:plain

データの作り方に問題はなさそう。よかった



そして一番めんどくさかったのは
スキンウェイトツール
操作を誤ると全部やり直しになってしまうこともあった。
f:id:toncrimentan_w:20200519031944j:plain


さて、こいつを主人公としてUE4で動かしたい。

maya:プログラマー モデリングをやってみる

では実際にUdemyで覚えた通り
初心者でもできる!簡単&かわいい3Dモデリング:MayaLT:Unreal Engine4 | Udemy
オリジナルのキャラを作ってみることにする

なお、クオリティはとはない(笑)

まずはモデルを作ってUE4で読み込んで動かすことが大事

モデルを作る)
モデリングツールキット
 ・マルチカットツール
 ・押し出し
 ・結合
・編集>種類ごとに削除>ヒストリ
・ミラー
f:id:toncrimentan_w:20200518095540j:plain

UVを制作する)
・UVの縫合ツール
・UVエディタ
f:id:toncrimentan_w:20200518095559j:plain

UVをキャプチャー出力する)
・UVエディタ
f:id:toncrimentan_w:20200518095822j:plain

テクスチャを書く)
・クリスタ
f:id:toncrimentan_w:20200518095916j:plain

マテリアルを作成する)
・ハイパーシェード
f:id:toncrimentan_w:20200518095945j:plain

リグをつける)
・スケルトン>HumamIK
・スキン>スキンのバインド
f:id:toncrimentan_w:20200518100026j:plain

ウェイトを調整する)
・メッシュ選択>右ドラッグ>スキンウェイトペイントツール
f:id:toncrimentan_w:20200519010858j:plain

エクスポートする)
・Shift+ダブルクリックでツリー全開き
・メッシュとジョイントを選択
・ファイル>選択項目の書き出し
f:id:toncrimentan_w:20200518142819j:plain

UE4にインポートする)
・UE4
・スケールは10倍
f:id:toncrimentan_w:20200518142845j:plain

うん これでよい。
デザイナーからみたら落第点でもこれでよい。
まずは動け作戦

なお いつも忘れそうなスキンのバインド手順
リギング>メッシュとトップジョイント選択>スキンのバインド
f:id:toncrimentan_w:20200518100238j:plain


Udemyの簡単&かわいい3Dモデリング
www.udemy.com

自宅統合開発環境を作る3(tkinter.Listboxで選択してUE4起動)

mayaの制作環境ができたら次はUE4で起動しよう。

いやまて・・
ダブルクリックして起動ではなくてこれも自宅統合開発環境に統合せねば・・

ということで os.listdirで選択可能なuprojectをリストアップし
tkinter.Listbox でリストボックスを表示してみる

(フォルダ構成がこんな感じだったものを前提としまして~
 C:/EdgeWorksNanase/Games/UE01/UE01.uproject
 C:/EdgeWorksNanase/Games/UE02/UE02.uproject
 C:/EdgeWorksNanase/Games/UE03/UE03.uproject)


以下リストアップ手順

    # ゲームディレクトリ
    UPROJ_DIR = 'C:/EdgeWorksNanase/Games'
    # プロジェクトをリストアップ
    for dir in os.listdir(self.UPROJ_DIR):
        baseName = os.path.basename(dir)
        # uprojectパスの取得
        project = self.UPROJ_DIR + '/' + dir + '/' + baseName + '.uproject'
        if os.path.exists(project) == True:
            self._projectNames.append( baseName )
            self._projects.append( project )

以下リストボックス作成手順

        # リストボックスの更新
        for projectName in self._projectNames:
            self._listbox.insert( tkinter.END, projectName )

以下リストボックスの選択プロジェクトを起動手順

        # UE4プロジェクトの起動
        selects = self._listbox.curselection()
        if 0 < len(selects):
            os.system( self._projects[selects[0]] )

ふむふむ いい感じに統合開発環境にくみこめた
そして環境作った後にやっとUE4が起動できる。
(ゲーム制作をとおして開発環境を整備する それがこのブログ)
f:id:toncrimentan_w:20200517152737j:plain

前回記事
www.toncrimentan.online

maya:モデルのエクスポータを作りたい3

ひきつづきモデルのエクスポータをカスタマイズ中
(エクスポータというよりエディタになってきたな・・)
www.toncrimentan.online


さらにショートカットも追加してみる
f:id:toncrimentan_w:20200517131739j:plain

アトリビュート
AttributeEditor;
モデリングツール
OpenModelingToolkit;showModelingToolkit;
ハイパーシェード
HypershadeWindow;
UVエディタ
TextureViewWindow;
UV縫合ツール
SetCutSewUVTool;
ハイパーグラフ
HypergraphDGWindow;

コマンドの確認方法はもちろん
すべてのコマンドのエコーをONにしてログからパクってくる。
f:id:toncrimentan_w:20200517131452j:plain


それはそうと、このかたの記事のおかげで
はてなブログソースコードの書き方がわかりました。感謝!
sonickun.hatenablog.com

maya:モデルのエクスポータを作りたい2

ひきつづきモデルのエクスポータを作成中

あとは複数選択出力できるようにするなり、オプションを適当に入力して
完成にしてしまおう。必要なものがあったら随時書き加えればよいし。

つぎのゲーム制作の工程に進もう。

自動で現在開いているシーンの直下にOutputフォルダを作って出力
ぐらいの親切処理は対応済み。

f:id:toncrimentan_w:20200517111936j:plain

/**
 * @brief		出力先ブラウズボタンのクリックイベント
 */
global proc ModelEditor_OnChickBrouseOutputField()
{
	string $sceneName = `file -q -sceneName`;
	string $dirName = `dirname $sceneName`;
	string $baseName = `basenameEx $sceneName`;

	string $results[] = `fileDialog2 -fileMode 3 -caption "出力先を指定してください" -startingDirectory $dirName`;
	if( 0<size($results) && $results[0]!="" )
	{
		string $path = $results[0]+"/"+$baseName+".fbx";
		textField -edit -text $path ModelEditor_OutputField;
	}
}

/**
 * @brief		選択出力ボタンイベント
 */
global proc ModelEditor_OnClickExportSelect()
{
	// 出力先パスの取得
	string $path = `textField -query -text ModelEditor_OutputField`;
	if( $path == "" )
	{
		warning "出力先パスを入力してください";
		return ;
	}

	string $result = `confirmDialog -title "メッセージ" -message ($path+"\nにFBXを出力してもよろしいですか?") -button "Yes" -button "No" -defaultButton "Yes" -cancelButton "No" -dismissString "No"`;
	if( $result == "Yes" )
	{
		print( "========================================\n" );
		print( "    モデルの出力を開始します\n" );
		print( "========================================\n" );

		// メッシュを取得
		string $selections[] = `ls -selection`;
		if( size($selections) != 1 )
		{
			warning "ひとつのメッシュを選択してください";
			return ;
		}

		print ("出力:"+$path+"\n");

		// FBXの出力
		file -force -options "" -type "FBX export" -exportSelected $path;

		print( "========================================\n" );
		print( "モデルの出力を完了しました\n" );

		select $selections;
	}
}

//
//  バージョン情報
//

/**
 * @brief		バージョン情報のオープン
 */
global proc ModelEditor_OpenVersion()
{
	// 既存のウィンドウの破棄
	if( `window -exists ModelEditorVersion` )
	{
		deleteUI -window ModelEditorVersion;
	}

	// 新規ウィンドウの作成
	string $win = `window -title "バージョン情報" -iconName "バージョン情報" -widthHeight 150 120 ModelEditorVersion`;
	columnLayout -adjustableColumn true;
		text -label "Model Editor 1.1" -align center;
		text -label "2020.05.15 update" -align center;
	setParent ..;
	showWindow $win;
}


//
//  ウィンドウ
//

/**
 * @brief		ウィンドウのリロード
 */
global proc ModelEditor_ReloadWindow()
{
	string $sceneName = `file -q -sceneName`;
	if( $sceneName != "" )
	{
		string $dirName = `dirname $sceneName`;
		string $baseName = `basenameEx $sceneName`;
		string $path = $dirName + "/Output/" + $baseName + ".fbx";
		textField -edit -text $path ModelEditor_OutputField;
	}

	print "ウィンドウリロードしました";
}

/**
 * @brief		ウィンドウのオープン
 */
global proc ModelEditor_OpenWindow()
{
	// 既存のウィンドウの破棄
	if( `window -exists ModelEditor` )
	{
		deleteUI -window ModelEditor;
	}


	// 新規ウィンドウの作成
	string $win = `window -title "ModelEditor" -iconName "ModelEditor" -widthHeight 300 360 ModelEditor`;

		// メニューバーレイアウト
		menuBarLayout;
			menu -label "ファイル";
				menuItem -label "閉じる" -command "deleteUI -window ModelEditor";
			menu -label "ヘルプ";
				menuItem -label "バージョン情報" -command "ModelEditor_OpenVersion";
		setParent ..;

		columnLayout -adjustableColumn true;

			// リロード
			rowLayout -numberOfColumns 1 -columnWidth1 80;
				button -label "リロード" -width 80 -command "ModelEditor_ReloadWindow()";
			setParent ..;

			text -label "";

			// 説明
			text -label "説明:" -align left;
			text -label "モデルを選択してエクスポートボタンを押すことで\n指定したディレクトリに出力します。" -align left;

			text -label "";

			// 出力先パス
			rowLayout -numberOfColumns 1 -columnWidth1 80;
				button -label "出力先パス:" -width 80 -command "ModelEditor_OnChickBrouseOutputField()";
			setParent ..;
			// 出力先テキストフィールド
			textField -text "" ModelEditor_OutputField;

			text -label "";

			// エクスポート
			button -label "エクスポート" - command "ModelEditor_OnClickExportSelect()";

		setParent ..;

		// リロード
		ModelEditor_ReloadWindow();

	showWindow $win;
}

自宅統合開発環境を作る2(maya起動時メニューバーにマイメニューを追加)

ひきつづき自宅統合開発環境を整備中。
前回記事にひきつづき今回はMaya起動まわりを整備していく

www.toncrimentan.online
最終的にはこんな感じのものを目指す
(maya起動したときに自身の開発ツールがmayaに追加された状態で起動)

f:id:toncrimentan_w:20200511004913j:plain


1.あらかじめMayaのenvファイルを作っておく
Maya.env

f:id:toncrimentan_w:20200511003343j:plain

MAYA_SCRIPT_PATH = C:\EdgeWorksNanase\Tools\Maya\scripts
MAYA_PLUG_IN_PATH = C:\EdgeWorksNanase\Tools\Maya\plug-ins


Maya.envファイルはmayaのmelスクリプトパスはここだよ
mayaのplug-insパスはここだよと定義するファイル。

使用しない場合はいくつか方法があるけども
マイドキュメント直下の
C:\Users\(ユーザー名)\Documents\maya\scripts
にmelやらなにやらをたくさん置くことになる


そうではなく melやらなにやらのたくさんを別のところに置いておいて
マイドキュメント直下ではなく別のところを参照してくださいね
をやるために使うと便利

2.前回作ったMaya起動ボタンあたりに以下を記述し
Maya.envをコピーしてからMayaを起動するように修正

f:id:toncrimentan_w:20200510170527j:plain

shutil.copy( 'C:/EdgeWorksNanase/Tools/Maya/Maya.env''C:/Users/toncrimentan/Documents/maya/2019LT' )
subprocess.Popen( 'C:/Program Files/Autodesk/MayaLT2019/bin/maya.exe' )

 

3.で別のところの参照先melとしてuserSetup.melを作っておくファイル名は固定
(mayaLTでなければmaya pythonで環境をつくりたかった)
userSetup.mel

f:id:toncrimentan_w:20200511004153j:plain

中身はメニューバーの構築mel

menu -label "NANASE" -parent "MayaWindow" -tearOff 1;
menuItem -label "Modeling" -tearOff 1 -subMenu 1;
menuItem -label "UVTool0" -command "print HelloWorld";
menuItem -label "UVTool1" -command "print HelloWorld";
setParent -menu ..;
menuItem -label "Rigging" -tearOff 1 -subMenu 1;
menuItem -label "RigTool0" -command "print HelloWorld";
menuItem -label "RigTool1" -command "print HelloWorld";
setParent -menu ..;


4.無事ウィンドウからmayaを起動したときは
マイメニューが追加済みのmayaが起動できるようになった

f:id:toncrimentan_w:20200511004604j:plain


こんなん会社でなんどもつくったなぁ~
自宅環境にmaya環境の導入。おわり。

この辺を参考にした

【送料無料】 たっきゅんのガチンコツール開発部 Maya Python 101 CG Pro Insights / 伊藤達弘 【本】

価格:4,180円
(2020/5/11 01:04時点)
感想(0件)

Maya Python完全リファレンス [ アダム・ミシェリー ]

価格:7,700円
(2020/5/11 01:05時点)
感想(0件)

 

自宅統合開発環境を作る(pythonでGUIウィンドウ作成)

とりあえず前回記事通りの手順で
いろいろボタンやらなにやらをつけてみる。

www.toncrimentan.online

こんなん 今まで会社でなんどつくったことか
あとは個人のツールやら、Mayaの起動やらなにやらのリンクをつけて
これが自宅の統合開発環境です感がだせたらよいかな

f:id:toncrimentan_w:20200510170527j:plain

 

アプリケーションの実行

import subprocess
subprocess.Popen('C:\Program Files\CELSYS\CLIP STUDIO 1.5\CLIP STUDIO\CLIPStudio.exe')

フォルダ開く

import os
os.system('explorer "C:\EdgeWorksNanase\Launcher"')

URL開く

import webbrowser
webbrowser.open("https://www.toncrimentan.online/")

 
ひきつづき自宅統合開発環境みたいのをつくる。

maya:Udemyの簡単&かわいい3Dモデリングを受講8 (完?)

Udemy 簡単&かわいい3Dモデリング講座を最後までおわりました。

そして・・ んっ かわいくないぞ 顔がないぞ

 

モデリングを行い、テクスチャを描いて、リグを作成し

アニメーションはやりませんでしたがポーズを指定しました。

ブレンドシェイプについても学べます。

 

f:id:toncrimentan_w:20200506202853j:plain

 

顔出てませんがそれでも大変勉強になる講座でした。

そろそろゲームつくりたい!

 

なんでかおでないんだろ

メッシュ別にわけてるからかなぁ~

 

Udemyの簡単&かわいい3Dモデリング

https://www.udemy.com/course/3dmayaltue4/

maya:Udemyの簡単&かわいい3Dモデリングを受講7

骨できた。

 

なんか超やっつけでデザイナーさんの業務を学んでいる感じ

クオリティ皆無GWなのでこの講習全部クリアーしてしまおう。

 

f:id:toncrimentan_w:20200503191825j:plain

ウィンドウ>アニメーションエディタ>HumalIKから

ケルトンの生成で人型スケルトンが自動生成

 

ふむふむ勉強になった。

 

 Udemyの簡単&かわいい3Dモデリング

https://www.udemy.com/course/3dmayaltue4/