メタセコのモデルをBlenderでスキニング・アニメーション その3

ボーンを構築する

 今回の記事では、ボーンをモデルに適用するところまで行います。

 まず、前回モデルをインポートできたところで、以下の画面のような構成になったと思います。画面のレイアウトの変更の仕方については、ググってください。「Outliner」と「3D View」と「Property」のウインドウが表示できていれば良いです。ウインドウの概念についてはhttp://wiki.blender.org/index.php/Doc:JA/2.6/Manual/Interface/Window_systemを参照してください。

 次に "Armature" と呼ばれる、ボーンを構成するオブジェクトを追加します。「3D View」ウインドウ上で Space キーを押し、 "Add Armature" とタイプして実行してください。下記の画像の左下の枠内がこれにあたります。

 「Outliner」ウインドウを見ると、"Armature" というオブジェクトが追加されたことがわかります。また、その子オブジェクトとして "Bone" が生成されました。ここで、Armature を見やすくするために、"Armature" を選択した状態で「Property」ウインドウの人型のアイコン(Object Data)をクリックします。このパネルの中に "Display" という項目があります。この中の "Names" と "X-Ray" にチェックしてください。これはそれぞれ、ボーンの名前を表示する、ボーンを透過表示する、というプロパティです。また、同じ場所の "Octahedral", "Stick", "B-Bone" などの項目を選択することで、ボーンの外観を変えることができます。個人的には、 "Stick" が邪魔にならず見やすくて良いと思います。

まとめ

  • Armature はボーン制御の Object
  • "Add Armature" で追加
  • 見やすさのため、 Armature の Property で、名前表示と透過表示を ON

メタセコのモデルをBlenderでスキニング・アニメーション その2

インポート環境を構築する

 まずは Metasequoia からモデルを持ってこなければいけません。 Blender 用の Metasequoia Import/Export アドオンは色々ありますが、今回は MeshIO を使用します。

MeshIO by ousttrue
http://sourceforge.jp/projects/meshio/

 この MeshIO は Metasequoia に加えて MikuMikuDance の pmd 形式を読み込むことができます。開発は Windows で行われているようですが、私の MacOS X 10.7 Lion + Blender 2.60 環境でも動作しました。まず、ダウンロードから最新の "pymeshio-2.3.2.zip" (2011年12月22日付)をダウンロードします。そして解凍して、Readme を元に /scripts/addons/ フォルダに blender26-meshio フォルダを入れます。あとは Blender の User Preference から Addons を選択し、 "Import-Export: meshio. (.pmd)(.pmx)(.mqo)" にチェックを入れて、"Save As Default" すれば完了です。

インポートしてみる

 File - Import - Metasequoia で 目的の mqo ファイルを選択し、 "Import MQO" します。これで灰色のモデルが表示されたと思います!もしインポートできない場合、ファイルが不正である可能性があります。最新版の Metasequoia で新規 MQO ファイルを作成し、目的のモデルのオブジェクトを1つずつコピーして保存するなどの作業が必要であるかもしれません。

Blender の基本操作

 Blender が一番敬遠される理由、それは「3D View」ウインドウ上で、「右クリックが選択」であるという点です。たしかに最初は戸惑いますが、後々これは良いと感じられるようになるので、根気強く使ってみましょう。
 また Metasequoia とは違い、 Blender には編集モードという概念があります。Metasequoia は一つ一つの頂点やオブジェクトをいつでも操作できましたが、Blenderはそれができません。 Mesh 単位、 Object 単位での操作での操作に分かれています。これを、ビューポートの下のバー( Header と呼ばれている)にある "Object Mode" と表示されているメニューで切り替えることができます。
 また、標準では灰色のモデルが表示されていると思います。これは Viewport Shading が "Solid" になっているためで、 "Textured" に変更することでテクスチャを付けて表示することができます。このトグルは、先ほどの "Object Mode" の選択を行ったトグルの右にあります。

 3DCGソフトとして重要な操作は、移動(Grab)、拡大縮小(Scale)、回転(Rotate)だと思います。これらは Objectを選択した状態で "G", "S", "R" を入力することでそれぞれ自由移動、等比拡大、自由回転ができます。しかし X, Y, Z 軸に沿って実行したいときは、"G", "S", "R" の入力後、"X", "Y", "Z" を入力することで、行うことができます。

まとめ

  • Metasequoia 形式を Import できる Plugin "MeshIO"
  • Blender は右クリックが選択、左クリックが決定
  • Object 単位の操作を行う「Object Mode」
  • Meshを編集する「Mesh Mode」
  • その他、それぞれの機能に合わせた Mode がある
  • 移動 G キー、拡縮 S キー、回転 R キー

メタセコのモデルをBlenderでスキニング・アニメーション その1

はじめに

 この記事は、Metasequoia でのモデリングには慣れていて Keynote でボーンをつけてみたものの、物足りない……というレベルの人を対象にします。モデリングに関しては何も書かないつもりです。また、私自身が試行錯誤しながら備忘録的に書く記事になると思うので、間違った点があれば指摘お願いします。また、更新が止まったら @santarh まで(腹パン)

環境

  • Metasequoia モデルは出来てる前提なので、mqo ファイルだけあればいいかな?
  • Blender 2.6x GUI が進化した最新版。

題材とするモデル

 誰かに似てるかもしれないね。誰でしょう。

WebGLが熱い

THREE.js が熱い

 僕がそれぞれ数時間程度で作ったものを並べています。

点群表示

 http://www.ster.jp.net/webgl_cube.html

 好きな画像を Upload するには鯖が必要みたいなので、用意した画像を Canvas で点群化してなんちゃって3D表示。

 http://www.ster.jp.net/webgl_sky.html

 THREE.js に用意されていた各種ポストエフェクト & パーティクルのテスト。

輪郭線

 http://www.ster.jp.net/webgl_outline.html

 WebGL Advent Calendar 用に書いたプログラム。
 WebGL Advent Calendar
 THREE.js での輪郭線表示

さいごに

 良いですよ、THREE.js & WebGL。環境として最高です。最近は GLSL をそのまま書いてエフェクトを作れるこんなサイトも作られてます。
 GLSL Sandbox
 あと、3DCG Arts をどうぞよろしく。
 3DCG Arts

はじめてのさいみん!

導入

 催眠オナニーという単語を最近よく聞く。僕も昔は「幽体離脱」に憧れて無意味な努力を重ねたことがあるので、俄然興味が湧いたわけだ。「幽体離脱」を試していたときは何も聞かず無音で精神を異次元の方向に飛ばそうとしていたのでとても苦しかった。一方催眠オナニーは音声の補助があるので、幾分か楽そうに思えたのである。

注意

 そもそも催眠オナニー系の音声は「ヘミシングなどの誘導音声を聞きつつ、催眠に導くボイスによる暗示で絶対服従させ、快楽に堕ちることを強制させる」ものである。具体的に言うと、「私に指図する女性は女王さまでありー、その人が気持ち良いことだと言うのならそうだし、私にバイブもさーさーっーちーゃーっーたーばんじゃああああああい!!」という状態なのだ。かなり危ない。本当に暗示にかかった状態だと、「声」の言うことはなんでもきいてしまうかもしれない。
 この記事の結論を先に言うと僕は暗示にかからなかったので分からないが、この記事を読んであなたが不利益を被っても僕は何の責任も負わない。


 そもそもこの記事はネタです。(重要)

やってみる

 とりあえずブラブラと関連サイトを見て、直感で決めた。
 http://www.nct9.ne.jp/d3online/
 このサイトの2番目、「催眠の効果で、ちょっと変わった音楽鑑賞をするための誘導音声です。」という音声である。僕は逆立ちの練習を10分ほどした後、ちょっと高そうなマッサージチェアに座ってリラックスした体勢に着いた。その他の環境としては少し離れた場所の照明をつけ、どこかにテレビの音が聞こえる程度である。また、音声は近くに置いたノートPCから線を伸ばしてきたBOSEのヘッドフォンを着けて、音声が聴こえるかどうかの小さな音量で聴くことにした。
 iTunesのプレイリストに「催眠音声・何曲かの普通の曲・解除音声」を突っ込み、再生開始。重要なことは声の言うことは絶対だと認識することだ。「それはないだろ」と思ってもかかったように振舞っているうちにかかるらしい。

 催眠系の何かで最初にすることは、体のリラックスで、肉体は寝てるけど精神的にはまだ起きてる状態、いわゆる金縛りを作ることだ。大抵、視線の先の一点を見つめているように言われるが、一点に意識を集中させるのは意外と困難なので予め目立つワンポイントを作っておくのがいい。次に行うのは精神を絶つこと。なんて書くと胡散臭いが、周囲の環境に向けていた意識を絶って、音声だけが意識されるようにするということだ。この状態のとき、僕は視界がまず周囲からホワイトアウトして、その後Photoshopのフィルタで言う「エッジのポスタリゼーション」みたいな視界になったのち、目を閉じた。次第に音声にだけ意識が向けられる。

 次がいよいよ暗示だ。音声だけに意識が向いたところで、その音声の言うことを絶対に受け入れる。受け入れなくても受け入れるフリをするべきだ。この音声の場合、「世界を波で満たして音声を聴くだけですべて快感に流れる」ように暗示をかけるらしい。と、ここまできたが、催眠初体験の僕はこれ以上の暗示にかかることは無理だった。

事後

 体のリラックス状態まではたしかに遷移できたらしく、体はなんとなくほぐれた感じがした。しかし僕の精神防壁はまだ固いらしく、声の全てを受け入れることは無理だった。ある程度精神が弱っているときにするべきかもしれない。

終わりに

 なんでもかんでも試してみる僕としては、この催眠は面白い部類のものだと思う。かからなければ寝ればいいし、気持いいことは良いことだ(白目)
 しかし暗示パートでおかしなことを吹きこまれたらどうなるのか?暗示にすぐかかる状態になった催眠オナニーを極めた人が催眠音声を作ってる人に直接会って何かを言われたらどうなるのか?などといった怖い想像は絶えない。その点も考えているのか知らないが、催眠音声の配布ファイルには音声のシナリオテキストが含まれていた。安心(?)である。
 まだ夏休みだし、何週間かは継続して試してみることにする。


つづく!

Unityで0からゲームを作る試み その2

 その1の時点ではパーティクルは自動的に消えてくれませんでした。そこでスクリプトでパーティクルの発生を止めて、パーティクルを消去することにします。
 パーティクルの発生を司るクラス「ParticleEmitter」のリファレンスを見てみると、Variableに

emit Should particles be automatically emitted each frame?

 という記述があるのが分かります。これをスクリプトでfalseにしてあげればパーティクルの発生は止まるでしょう。
 以下に示すJavaScriptコードは、次図に示す「EffectBomb」プレハブに適用されていることを前提としています。この「EffectBomb」プレハブ自体はEmptyGameObjectであり、子として複数のEffectを持っています。

var elimination_time = 2.0;

function Start()
{
	audio.Play();
	
	yield WaitForSeconds( elimination_time );
	var max_second = 0.0;
	var emitters = gameObject.GetComponentsInChildren( ParticleEmitter );
	for ( var emitter : ParticleEmitter in emitters )
	{
		emitter.emit = false;
		if ( emitter.maxEnergy > max_second )
		{
			max_second = emitter.maxEnergy;
		}
	}
	Destroy( gameObject, max_second );
}

 以下コードの解説。

	var emitters = gameObject.GetComponentsInChildren( ParticleEmitter );

 「EffectBomb」の子オブジェクトの中から、「ParticleEmitter」クラスコンポーネントを列挙しているのが分かります。

		emitter.emit = false;

 そして、それぞれに対して発生を司るフラグをfalseにしています。

		if ( emitter.maxEnergy > max_second )
		{
			max_second = emitter.maxEnergy;
		}
	...
	Destroy( gameObject, max_second );

 ここではパーティクルの生存時間が一番長い要素を探し、オブジェクト破壊までのタイミングを測っています。実際にDestroy関数に渡しているのは、このゲームオブジェクト自身と、先ほど測ったタイミング時間です。

 今日はこれで終わりです。

Unityで0からゲームを作る試み その1

 そろそろゲーム作らないと!ということで、Unityのスクリプトとか全然知らない状態から3時間でどこまでできるか?をやってみました。

 プレイヤーは固定旋回式の砲台。周囲から迫り来る敵共をやっつける……というものです。製作状況としては

 マップの作成        : 30分
 レティクル描き       : 30分
 自機の操作制御       : 1時間
 弾の制御・パーティクル放出 : 1時間

といった感じまで出来ました。書いたスクリプトの行数としては、弾・パーティクルの制御にJavaScriptで60行程度です。
 24時間くらいかければまっとうなゲームになりそうな感じですね。