<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>DF TALK</title>
	<atom:link href="http://www.dfx.co.jp/dftalk/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.dfx.co.jp/dftalk</link>
	<description>Just another WordPress site</description>
	<lastBuildDate>Thu, 26 Apr 2012 06:00:55 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Naiad飛沫</title>
		<link>http://www.dfx.co.jp/dftalk/?p=4789</link>
		<comments>http://www.dfx.co.jp/dftalk/?p=4789#comments</comments>
		<pubDate>Thu, 26 Apr 2012 06:00:55 +0000</pubDate>
		<dc:creator>tak</dc:creator>
				<category><![CDATA[TECH TALK]]></category>
		<category><![CDATA[naiad]]></category>
		<category><![CDATA[エフェクト]]></category>

		<guid isPermaLink="false">http://www.dfx.co.jp/dftalk/?p=4789</guid>
		<description><![CDATA[お久しぶりです。開発の吉田です。 桜は散ってしまいましたが、皆さんは花見出来ましたでしょうか？ DFの花見はなんと300人ぐらいで、暖かいいい日に行えました。 さて最近の自分はシミュレーションを毎日行っています。Massive は基本シミュレーションですが今回ショット作成のフローが似ているNaiadを紹介したいと思います。 Massiveと似ている？群衆とParticleが？Massiveのフローは少ない人数で動きを設定し、ある程度満足する動きになったらいっぱい複製してコマンドラインでシミュレーションします。 Naiadも同じで、エージェントではなく、Particleを使って行います。 Naiadを簡単に説明： Naiadをまだ触っていない方に軽く説明しますと… シミュレーションのデータはBody（ボディー）といい、NaiadのノードはOperator（オペレーター）といいます。OperatorでBodyを発生、変形、消したり出来ます。上記の図の青い部分がOperator。Operatorはシミュレーションの設定を行う場所です。黄色い部分はBody情報で、どのようにBodyが変化したかの情報を確認出来るところです。 Operatorを選択し、下記のようにノードのパラメータが表示されます。 Bodyを選択して情報を確認出来ます。下記の図を見ればEmitterから43,782 Particleが出ていることが分かます。 Operatorに関しては大きく3種類あります。 BodyとFieldの中でも色々な種類があり、一つずつ説明するのは時間がかかるので後でグラフを見せながら少し説明します。Scopeはデータをビュー上で表示するためのノードになります。 最後にグローバル値を設定するためのOperator たとえば全体のVoxelを細かくしたい場合、このOperatorで設定します。 Body毎にVoxelを設定した場合、グローバルではなく、その他のOperatorを選択し、設定できます。 流体シミュレーションに関して： Collision（衝突計算）はオブジェクトその物ではなく、Volumeで行っています。 Volume情報がない物は計算行いません。 最初からVolume情報を持っている物はこちらになります： １．Volume ２．Rigid-Body ３．Particle-Liquid(Mayaで言うところのFluid的なもの) ４．Field-Gas/Smoke/Fire 情報がないのは： 1． Mesh 2． Particle ※Meshは必ずVolumeに変換する必要があります。 上記の図はノードのグラフを作る流れのベースになります。 ※違う物もあります。 １．最初にParticle、Liquid、Meshを作成または読み込みます。 ２．必要なデータをVolumeに変換します。 ３．Emitterを設定します。 ４．VolumeをJoinでまとめます。（⑤に影響させたくないVolumeを⑤の後にJoin） ５．Force(力)を与える、たとえば重力。 ６．Dynamics Operatorを通します。 ７．Terminal（終了ノード）またはWrite（書き込みノード）で終了です。 ３つのシミュレーションファイル（.ni）を作るケースが多いです。 1． ベースのシミュレーション 2． ①を使ってMeshを作成 3． ①か②を使って細かいSplashを作成 ※　②を作らないケースもあります。 シミュレーションの注意点: Collision用オブジェクトからParticleがもれる。 これはなぜでしょう？前述の通りMeshその物にはCollision出来ません。１回Volumeに変換する必要があります。その変換の設定によってはVolumeに問題が出たりします。 それを確認するためにScopeを使います。Scopeはデータを表示するためのノードです。 Iso-ScopeとTile-Scopeを下記のようにつないでMeshのVolumeを確認します。 [...]]]></description>
			<content:encoded><![CDATA[
<p>お久しぶりです。開発の吉田です。</p>
<p>桜は散ってしまいましたが、皆さんは花見出来ましたでしょうか？<br />
DFの花見はなんと300人ぐらいで、暖かいいい日に行えました。</p>
<p>さて最近の自分はシミュレーションを毎日行っています。Massive は基本シミュレーションですが今回ショット作成のフローが似ているNaiadを紹介したいと思います。<br />
Massiveと似ている？群衆とParticleが？Massiveのフローは少ない人数で動きを設定し、ある程度満足する動きになったらいっぱい複製してコマンドラインでシミュレーションします。<br />
Naiadも同じで、エージェントではなく、Particleを使って行います。</p>
<p><span id="more-4789"></span><br />
<b>Naiadを簡単に説明：</b><br />
Naiadをまだ触っていない方に軽く説明しますと…<br />
<a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/04/naiadGraph.jpg" class="highslide-image" onclick="return hs.expand(this);"><img src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/04/naiadGraph.jpg" alt="" title="naiadGraph" width="399" height="405" class="alignnone size-full wp-image-4790" /></a></p>
<p>シミュレーションのデータはBody（ボディー）といい、NaiadのノードはOperator（オペレーター）といいます。OperatorでBodyを発生、変形、消したり出来ます。上記の図の青い部分がOperator。Operatorはシミュレーションの設定を行う場所です。黄色い部分はBody情報で、どのようにBodyが変化したかの情報を確認出来るところです。</p>
<p>Operatorを選択し、下記のようにノードのパラメータが表示されます。<br />
 <a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/04/LiquidParameters.jpg" class="highslide-image" onclick="return hs.expand(this);"><img src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/04/LiquidParameters-300x259.jpg" alt="" title="LiquidParameters" width="300" height="259" class="alignnone size-medium wp-image-4792" /></a></p>
<p>Bodyを選択して情報を確認出来ます。下記の図を見ればEmitterから43,782 Particleが出ていることが分かます。<br />
 <a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/04/BodyInfo.jpg" class="highslide-image" onclick="return hs.expand(this);"><img src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/04/BodyInfo-300x162.jpg" alt="" title="BodyInfo" width="300" height="162" class="alignnone size-medium wp-image-4794" /></a></p>
<p>Operatorに関しては大きく3種類あります。<br />
 <a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/04/OperatorTypes.jpg" class="highslide-image" onclick="return hs.expand(this);"><img src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/04/OperatorTypes-1024x344.jpg" alt="" title="OperatorTypes" width="450" height="151" class="alignnone size-large wp-image-4796" /></a></p>
<p>BodyとFieldの中でも色々な種類があり、一つずつ説明するのは時間がかかるので後でグラフを見せながら少し説明します。Scopeはデータをビュー上で表示するためのノードになります。</p>
<p>最後にグローバル値を設定するためのOperator<br />
 <a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/04/globalOperator.jpg" class="highslide-image" onclick="return hs.expand(this);"><img src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/04/globalOperator.jpg" alt="" title="globalOperator" width="140" height="134" class="alignnone size-full wp-image-4805" /></a><br />
たとえば全体のVoxelを細かくしたい場合、このOperatorで設定します。<br />
Body毎にVoxelを設定した場合、グローバルではなく、その他のOperatorを選択し、設定できます。	</p>
<p><!--more--><br />
<b>流体シミュレーションに関して：</b><br />
Collision（衝突計算）はオブジェクトその物ではなく、Volumeで行っています。<br />
Volume情報がない物は計算行いません。<br />
最初からVolume情報を持っている物はこちらになります：<br />
１．Volume<br />
２．Rigid-Body<br />
３．Particle-Liquid(Mayaで言うところのFluid的なもの)<br />
４．Field-Gas/Smoke/Fire</p>
<p>情報がないのは：<br />
1．	Mesh<br />
2．	Particle<br />
※Meshは必ずVolumeに変換する必要があります。</p>
<p><a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/04/naiadNodeGraph.jpg" class="highslide-image" onclick="return hs.expand(this);"><img src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/04/naiadNodeGraph-215x300.jpg" alt="" title="naiadNodeGraph" width="215" height="300" class="alignnone size-medium wp-image-4806" /></a><br />
上記の図はノードのグラフを作る流れのベースになります。<br />
※違う物もあります。<br />
１．最初にParticle、Liquid、Meshを作成または読み込みます。<br />
２．必要なデータをVolumeに変換します。<br />
３．Emitterを設定します。<br />
４．VolumeをJoinでまとめます。（⑤に影響させたくないVolumeを⑤の後にJoin）<br />
５．Force(力)を与える、たとえば重力。<br />
６．Dynamics Operatorを通します。<br />
７．Terminal（終了ノード）またはWrite（書き込みノード）で終了です。</p>
<p>３つのシミュレーションファイル（.ni）を作るケースが多いです。<br />
1．	ベースのシミュレーション<br />
2．	①を使ってMeshを作成<br />
3．	①か②を使って細かいSplashを作成<br />
※　②を作らないケースもあります。</p>
<p><!--more--><br />
<b>シミュレーションの注意点:</b><br />
Collision用オブジェクトからParticleがもれる。<br />
これはなぜでしょう？前述の通りMeshその物にはCollision出来ません。１回Volumeに変換する必要があります。その変換の設定によってはVolumeに問題が出たりします。<br />
<a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/04/leakingParticles.jpg" class="highslide-image" onclick="return hs.expand(this);"><img src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/04/leakingParticles.jpg" alt="" title="leakingParticles" width="591" height="403" class="alignnone size-full wp-image-4811" /></a></p>
<p>それを確認するためにScopeを使います。Scopeはデータを表示するためのノードです。<br />
Iso-ScopeとTile-Scopeを下記のようにつないでMeshのVolumeを確認します。<br />
<a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/04/iso-scopeNode.jpg" class="highslide-image" onclick="return hs.expand(this);"><img src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/04/iso-scopeNode-300x147.jpg" alt="" title="iso-scopeNode" width="300" height="147" class="alignnone size-medium wp-image-4813" /></a><a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/04/tile-scopeNode.jpg" class="highslide-image" onclick="return hs.expand(this);"><img src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/04/tile-scopeNode-300x154.jpg" alt="" title="tile-scopeNode" width="300" height="154" class="alignnone size-medium wp-image-4814" /></a></p>
<p>Iso-ScopeでCollisionで使われているVolumeが見れます。<br />
Voxel ScaleやTile Sizeが足りない場合、Collisionオブジェクトに穴が開きます（下記の図を参考ください）。<br />
<a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/04/iso-scope.jpg" class="highslide-image" onclick="return hs.expand(this);"><img src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/04/iso-scope.jpg" alt="" title="iso-scope" width="638" height="393" class="alignnone size-full wp-image-4816" /></a></p>
<p>MeshVolumeやGlobalのTile Layoutを下げたり、MeshVolumeのThicknessを変えてください。<br />
<a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/04/voxelScale.jpg" class="highslide-image" onclick="return hs.expand(this);"><img src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/04/voxelScale.jpg" alt="" title="voxelScale" width="429" height="81" class="alignnone size-full wp-image-4818" /></a><br />
Globalの値を修正する場合、すべてのVolumeが細かくなりますが、シーンも重くなるので注意が必要です。</p>
<p> <a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/04/iso-scopeFixed.jpg" class="highslide-image" onclick="return hs.expand(this);"><img src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/04/iso-scopeFixed.jpg" alt="" title="iso-scopeFixed" width="599" height="422" class="alignnone size-full wp-image-4819" /></a><br />
上記の図は修正後のVolumeになります。穴が全部消えて、Particleがもれなくなりました。</p>
<p><b>NEL：Naiad Expression Language</b><br />
Naiadを使っていくとちょっと複雑のことをやりたい場合、NELを使う必要があります。<br />
たとえば、２つのViscosity(粘性)のParticleを混ぜたい場合とか<br />
Naiadでは１つのFluid Bodyしか扱えません。ではどうやって2つのViscosityを作るか？<br />
それはEmitterIDを使ってNELで処理します。<br />
最初に2つのLiquid-Emit-DistanceノードのEmitter IDをチェック入れてID番号をつけます（下記の図を参考ください）。<br />
<a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/04/emitterMulti.jpg" class="highslide-image" onclick="return hs.expand(this);"><img src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/04/emitterMulti.jpg" alt="" title="emitterMulti" width="756" height="561" class="alignnone size-full wp-image-4820" /></a></p>
<p>次は3つのParticle-Nel-Channelノードを使ってviscosityを設定します。<br />
<a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/04/viscosityChannel.jpg" class="highslide-image" onclick="return hs.expand(this);"><img src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/04/viscosityChannel.jpg" alt="" title="viscosityChannel" width="318" height="381" class="alignnone size-full wp-image-4821" /></a></p>
<p>最初のノードでviscosity channelを作成します。<br />
 <a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/04/viscosityAttr1.jpg" class="highslide-image" onclick="return hs.expand(this);"><img src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/04/viscosityAttr1.jpg" alt="" title="viscosityAttr1" width="482" height="334" class="alignnone size-full wp-image-4822" /></a><br />
上記の図を訳しますとフレーム１でグローバルviscosityを好きな数字に設定します。<br />
今回は０。<br />
次の2つのノードを使ってemitterID毎にviscosityを個別に設定します。<br />
下記の図はemitterID_100_viscosityのNEL.<br />
 <a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/04/viscosityAttr2.jpg" class="highslide-image" onclick="return hs.expand(this);"><img src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/04/viscosityAttr2.jpg" alt="" title="viscosityAttr2" width="464" height="409" class="alignnone size-full wp-image-4823" /></a><br />
NEL コード：<br />
[code]max(.viscosity,(.emitId == 100 ? 2 : .viscosity))[/code]</p>
<p><!--more--><br />
maxのexpressionは2の値の大きい方を返します。<br />
2番目の値はemitIDが100の場合は２、それ以外はグローバルのviscosity</p>
<p>emitterID_200_viscosityのNELをちょっと変えてください。<br />
NEL コード：<br />
[code]max(.viscosity,(.emitId == 200 ? 500 : .viscosity))[/code]</p>
<p><!--more--><br />
今回maxはいらないですが、値をこれ以上下回りたくない場合、このような書き方があると知ってた方が便利です。</p>
<p>この段階で(Naiad)でシュミレーションしても何にも換わりません。<br />
なぜでしょう？Maya的に説明しますとattributeを追加しましたがまだどこにもつながっていない状態です。ViscosityをFieldに変換しないといけません。<br />
 <a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/04/viscosityToField.jpg" class="highslide-image" onclick="return hs.expand(this);"><img src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/04/viscosityToField.jpg" alt="" title="viscosityToField" width="317" height="391" class="alignnone size-full wp-image-4824" /></a><br />
上記の図を説明しますと<br />
IsolateノードでParticleのBody情報だけをゲットする。<br />
<a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/04/isolateNode.jpg" class="highslide-image" onclick="return hs.expand(this);"><img src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/04/isolateNode.jpg" alt="" title="isolateNode" width="464" height="422" class="alignnone size-full wp-image-4825" /></a></p>
<p>Field-Particle-Splatノードで作ったviscosity channelをfieldに変換する。<br />
<a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/04/viscosityToFieldAttr.jpg" class="highslide-image" onclick="return hs.expand(this);"><img src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/04/viscosityToFieldAttr.jpg" alt="" title="viscosityToFieldAttr" width="453" height="285" class="alignnone size-full wp-image-4826" /></a></p>
<p>Field-Nel-ChannelノードでField.viscosity channelに変換したfield情報をつなぎます。<br />
Expressionは:&#8217;f'です。<br />
<a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/04/viscosityToFieldAttrNew.jpg" class="highslide-image" onclick="return hs.expand(this);"><img src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/04/viscosityToFieldAttrNew.jpg" alt="" title="viscosityToFieldAttrNew" width="465" height="430" class="alignnone size-full wp-image-4857" /></a></p>
<p>これで一通りの流れが完成です！結果はこんな感じです。<br />
<iframe src="http://player.vimeo.com/video/40644220" width="640" height="360" frameborder="0"></iframe> </p>
<p>この他にもRigidBodyやSplashの設定などまだまだ色々ありますが今回はこの辺で終了したいと思います。<br />
Naiadのサンプルはウエブにいっぱいあるのでそれを見ながら勉強すれば早いかと思います。</p>
<p>最後にExotic MatterのMarcusに今後どのような機能がNaiadに入るかを聞きました。<br />
場所によってHighResに出来る機能は今後入るようです。<br />
<a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/04/HDop.jpeg" class="highslide-image" onclick="return hs.expand(this);"><img src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/04/HDop-224x300.jpg" alt="" title="HDop" width="224" height="300" class="alignnone size-medium wp-image-4830" /></a></p>
<p>では</p>

]]></content:encoded>
			<wfw:commentRss>http://www.dfx.co.jp/dftalk/?feed=rss2&amp;p=4789</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>モーションビルダースクリプトTips</title>
		<link>http://www.dfx.co.jp/dftalk/?p=4700</link>
		<comments>http://www.dfx.co.jp/dftalk/?p=4700#comments</comments>
		<pubDate>Mon, 09 Apr 2012 06:00:00 +0000</pubDate>
		<dc:creator>tatsuya</dc:creator>
				<category><![CDATA[TECH TALK]]></category>
		<category><![CDATA[MotionBuilder]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[script]]></category>

		<guid isPermaLink="false">http://www.dfx.co.jp/dftalk/?p=4700</guid>
		<description><![CDATA[久々に投稿のタイミングが回ってきましたー。お久しぶりです。アニメーションチームTDの上原です。 以前投稿時はSoftimageなTDだったのですが、諸事ありましてアニメーションチーム専属になりましたー。 CGといえばアニメーション派だった私にとってこれは願ってもないチャンス！と思いきや扱うソフトが増えててんてこ舞いに・・・。最近はメインでMotionBuilder周りの開発、あとはプロジェクトによってSoftimageかMayaです。複数のソフトの仕様に接しているといろんな発見があって新鮮で、あるソフトが持っている機能を別のソフトで実現するにはどんなアプローチで実装すればいいだろう考えるだけでも楽しいです。 せっかくなのでちょっと求人もしちゃお。 スクリプトスキルを高めたい方はぜひDFのアニメーションチームにTDとして応募したらいいと思いますよ。 たとえばこんな人。 　・もともとCGアニメーターやってたけど、ちょっとスクリプト書き出したらそっち頼まれる機会が増えて 　　いろんな意味でハマってしまった人。 　・モーションデザイナーをちょっと休憩してプログラミングスキルを身につけたい人。 　・ゲーム屋さんでテクニカルアーティストやってるけど、映像系の知識もほすぃーっていう人。 　・ドMな人、もしくはドSな人。（良い意味で） 映画もゲームも大作に携われるのはデカイですし、何よりフリーダムですよ。学生さんでも大歓迎ー。 はい。 というわけで、アニメーションチームのメインツールである、MotionBuilderのスクリプトネタをご紹介しようと思います。 まず、どのソフトでもそうですが、ワークフロー上の何らかのルールに則った作業を自動化したいというケースは多くて、SoftimageやMayaなどであればコマンドの履歴が出ますから、一通り手動で作業したコマンドの履歴をコピペして、ちょっと書き換えれば何とかなってしまうこともあります。ところがMotionBuilderはそれを許しませんっ。コマンドの履歴なんてありませんからね。とっかかりとしては非常にやりにくいソフトだと思われます。 「何らかの作業を自動化する」場合、 大体、前処理（データの状態を知る）、メイン処理（作成する・変更する・削除する）、後処理（整理する・記録する）の3つに分かれるかと思っています。どういうことかというと、 たとえば、MotionBuilderのシーン中から何らかの条件を満たすものを検索する前処理、見つけたら何らかの変更を加えるメイン処理、そして実行結果をサーバー上に記録しておく後処理といった具合です。 もちょっと具体的な例でいうと、 「キャラのデータがまだない！」そんなときは、とりあえず仮の別キャラで作業しといて、あとで正しいキャラのデータに差し替えるかと思います。 初めから仕込まれている補助骨用コンストレインの様なものはいいとして、それ以外に、別途デザイナーが作業用にコンストレインを組んでいたりすると、差し替えた後に手動でまたコンストレインをつけ直させるなんて無駄です。何十カットもあったら最悪です。差し替えをスクリプトで自動化する際に、「もし勝手に作ったコンストレインがあったらつけ直す」など、状況に応じて対応できると便利ですよね。さらに、ツールを使用した時の詳細情報をログとしてサーバーに出力しておけば、不具合の報告があった際にそれがいつから不具合が出ているのか、特定のキャラのみで発生する不具合なのかなど原因を絞り込みやすくなります。ということは無駄な検証、情報収集をせずに済むというメリットがあります。 と、ずいぶん前置きが長くなってしまいましたが、 今回はその一番初めの工程、「前処理（データの状態を知る）」 に着目してスクリプトを紹介してみたいと思います。 目次 ・シーン内のアイテムを取得する ・グループ・フォルダの中身を取得する ・あるアイテムがどのグループ・フォルダに所属しているか知る ・選択しているシーン内のアイテムを取得する ・プロパティの値を取得する ・コンストレインで使用しているモデルを取得する ・モデルを拘束している、もしくはモデルを参照しているコンストレインを取得する ※本記事中のコードは全てMotionBuilder2010(windows7,64bit)でのみ動作確認を行っています。他の環境では動作に違いがあるかもしれませんのでご注意ください。 　 シーン内のアイテムを取得する まずは、シーンから何かを取得する例です。 ■名前を指定してモデルを取得 [python] from pyfbsdk import * a = FBFindModelByName(&#8220;Cube&#8221;) print a.Name [/python] シーンにCubeがあればこれで取得することができます。 FBFindModelByName() は pyfbsdkモジュール で既に準備してある便利なファンクションです。 しかし、取得できるのはモデル限定です。グループやコンストレインを取得することはできません。 グループやコンストレインを取得したい場合は次に説明するコードで取得できます。 [...]]]></description>
			<content:encoded><![CDATA[
<p>久々に投稿のタイミングが回ってきましたー。お久しぶりです。アニメーションチームTDの上原です。<br />
以前投稿時はSoftimageなTDだったのですが、諸事ありましてアニメーションチーム専属になりましたー。</p>
<p>CGといえばアニメーション派だった私にとってこれは願ってもないチャンス！と思いきや扱うソフトが増えててんてこ舞いに・・・。最近はメインでMotionBuilder周りの開発、あとはプロジェクトによってSoftimageかMayaです。複数のソフトの仕様に接しているといろんな発見があって新鮮で、あるソフトが持っている機能を別のソフトで実現するにはどんなアプローチで実装すればいいだろう考えるだけでも楽しいです。</p>
<p>せっかくなのでちょっと求人もしちゃお。<br />
スクリプトスキルを高めたい方はぜひDFのアニメーションチームにTDとして応募したらいいと思いますよ。<br />
たとえばこんな人。<br />
　・もともとCGアニメーターやってたけど、ちょっとスクリプト書き出したらそっち頼まれる機会が増えて<br />
　　いろんな意味でハマってしまった人。<br />
　・モーションデザイナーをちょっと休憩してプログラミングスキルを身につけたい人。<br />
　・ゲーム屋さんでテクニカルアーティストやってるけど、映像系の知識もほすぃーっていう人。<br />
　・ドMな人、もしくはドSな人。（良い意味で）<br />
映画もゲームも大作に携われるのはデカイですし、何よりフリーダムですよ。学生さんでも大歓迎ー。</p>
<p>はい。<br />
というわけで、アニメーションチームのメインツールである、MotionBuilderのスクリプトネタをご紹介しようと思います。</p>
<p>まず、どのソフトでもそうですが、ワークフロー上の何らかのルールに則った作業を自動化したいというケースは多くて、SoftimageやMayaなどであればコマンドの履歴が出ますから、一通り手動で作業したコマンドの履歴をコピペして、ちょっと書き換えれば何とかなってしまうこともあります。ところがMotionBuilderはそれを許しませんっ。コマンドの履歴なんてありませんからね。とっかかりとしては非常にやりにくいソフトだと思われます。</p>
<p>「何らかの作業を自動化する」場合、<br />
大体、前処理（データの状態を知る）、メイン処理（作成する・変更する・削除する）、後処理（整理する・記録する）の3つに分かれるかと思っています。どういうことかというと、<br />
たとえば、MotionBuilderのシーン中から何らかの条件を満たすものを検索する前処理、見つけたら何らかの変更を加えるメイン処理、そして実行結果をサーバー上に記録しておく後処理といった具合です。</p>
<p>もちょっと具体的な例でいうと、<br />
「キャラのデータがまだない！」そんなときは、とりあえず仮の別キャラで作業しといて、あとで正しいキャラのデータに差し替えるかと思います。<br />
初めから仕込まれている補助骨用コンストレインの様なものはいいとして、それ以外に、別途デザイナーが作業用にコンストレインを組んでいたりすると、差し替えた後に手動でまたコンストレインをつけ直させるなんて無駄です。何十カットもあったら最悪です。差し替えをスクリプトで自動化する際に、「もし勝手に作ったコンストレインがあったらつけ直す」など、状況に応じて対応できると便利ですよね。さらに、ツールを使用した時の詳細情報をログとしてサーバーに出力しておけば、不具合の報告があった際にそれがいつから不具合が出ているのか、特定のキャラのみで発生する不具合なのかなど原因を絞り込みやすくなります。ということは無駄な検証、情報収集をせずに済むというメリットがあります。</p>
<p>と、ずいぶん前置きが長くなってしまいましたが、<br />
今回はその一番初めの工程、「前処理（データの状態を知る）」 に着目してスクリプトを紹介してみたいと思います。</p>
<h3>目次</h3>
<p>・<a href="#1">シーン内のアイテムを取得する</a><br />
・<a href="#2">グループ・フォルダの中身を取得する</a><br />
・<a href="#3">あるアイテムがどのグループ・フォルダに所属しているか知る</a><br />
・<a href="#4">選択しているシーン内のアイテムを取得する</a><br />
・<a href="#5">プロパティの値を取得する</a><br />
・<a href="#6">コンストレインで使用しているモデルを取得する</a><br />
・<a href="#7">モデルを拘束している、もしくはモデルを参照しているコンストレインを取得する</a></p>
<p>※本記事中のコードは全てMotionBuilder2010(windows7,64bit)でのみ動作確認を行っています。他の環境では動作に違いがあるかもしれませんのでご注意ください。</p>
<pre>
　
</pre>
<p><a name="1"></a><br />
<h3>シーン内のアイテムを取得する</h3>
<p>まずは、シーンから何かを取得する例です。</p>
<p>■名前を指定してモデルを取得<br />
[python]<br />
from pyfbsdk import *<br />
a = FBFindModelByName(&#8220;Cube&#8221;)<br />
print a.Name<br />
[/python]<br />
シーンにCubeがあればこれで取得することができます。<br />
FBFindModelByName() は pyfbsdkモジュール で既に準備してある便利なファンクションです。<br />
しかし、取得できるのはモデル限定です。グループやコンストレインを取得することはできません。</p>
<p>グループやコンストレインを取得したい場合は次に説明するコードで取得できます。</p>
<pre>
　
</pre>
<p>■リストの中から指定した名前にマッチするオブジェクトを取得<br />
[python]<br />
import re<br />
from pyfbsdk import *</p>
<p>def get_find_objects_by_name(name, items):<br />
    ptn = re.compile(name)<br />
    result = []<br />
    for item in items:<br />
        if ptn.search(item.Name):<br />
            result.append(item)<br />
    return result</p>
<p>def print_names(comment, items):<br />
    for item in items:<br />
        print comment, item.Name</p>
<p>a = get_find_objects_by_name(&#8220;&#8221;, FBSystem().Scene.Groups)<br />
print_names(&#8220;Groups:&#8221;, a)<br />
a = get_find_objects_by_name(&#8220;Position&#8221;, FBSystem().Scene.Constraints)<br />
print_names(&#8220;Constraints:&#8221;, a)<br />
a = get_find_objects_by_name(&#8220;^(?!Producer)&#8221;, FBSystem().Scene.Cameras)<br />
print_names(&#8220;Cameras:&#8221;, a)<br />
[/python]</p>
<p>get_find_objects_by_name(name, items) について<br />
第1引数(name)に指定する名前で検索します。書式には正規表現を指定することができます。<br />
第2引数(items)に指定するリストの中から検索します。ここを状況に応じて変えれば汎用的に使うことが可能です。</p>
<p>上記コードはグループとコンストレインとカメラのリストからそれぞれ取得する例ですが、<br />
他にフォルダやテクスチャーなどでも可能です。↓<br />
[python]<br />
FBSystem().Scene.Folders<br />
FBSystem().Scene.Shaders<br />
FBSystem().Scene.Textures<br />
FBSystem().Scene.VideoClips<br />
FBSystem().Scene.Materials<br />
FBSystem().Scene.Characters<br />
[/python]</p>
<pre>
　
　
</pre>
<p><a name="2"></a><br />
<h3>グループ・フォルダの中身を取得する</h3>
<p>今度はグループやフォルダに登録されているモデルを取得する方法です。<br />
適当なグループを作り、Cube等のモデルを追加してから実行してください。<br />
[python]<br />
import re<br />
from pyfbsdk import *</p>
<p>def get_find_objects_by_name(name, items):<br />
    ptn = re.compile(name)<br />
    result = []<br />
    for item in items:<br />
        if ptn.search(item.Name):<br />
            result.append(item)<br />
    return result</p>
<p>def print_names(comment, items):<br />
    for item in items:<br />
        print comment, item.Name</p>
<p>def get_members_of_(target):<br />
    result = []<br />
    for item in target.Items:<br />
        result.append(item)<br />
    return result</p>
<p>grps = get_find_objects_by_name(&#8220;&#8221;, FBSystem().Scene.Groups)<br />
a = get_members_of_(grps[0])<br />
print &#8220;Group:&#8221;, grps[0].Name<br />
print_names(&#8220;Group item:&#8221;, a)<br />
[/python]<br />
get_members_of_(target) について<br />
グループやフォルダの中身は .Items で取得することができます。（大文字小文字の区別がありますからご注意ください）</p>
<p>中身から名前を指定して取得したい場合は、 get_members_of_(target) のかわりに<br />
get_find_objects_by_name(name, items) を使い回せば名前でフィルタリングしつつ取得できますね！<br />
[python]<br />
grps = get_find_objects_by_name(&#8220;&#8221;, FBSystem().Scene.Groups)<br />
a = get_find_objects_by_name(&#8220;^Cube&#8221;, grps[0].Items)<br />
print &#8220;Group:&#8221;, grps[0].Name<br />
print_names(&#8220;Group item:&#8221;, a)<br />
[/python]</p>
<pre>
　
　
</pre>
<p><a name="3"></a><br />
<h3>あるアイテムがどのグループ・フォルダに所属しているか知る</h3>
<p>今度は逆に、モデル等がどのグループ・フォルダに含まれているかを調べる方法です。<br />
[python]<br />
import re<br />
from pyfbsdk import *</p>
<p>def get_find_objects_by_classname(name, items):<br />
    ptn = re.compile(name)<br />
    result = []<br />
    for item in items:<br />
        if ptn.search(item.ClassName()):<br />
            result.append(item)<br />
    return result</p>
<p>def print_names(comment, items):<br />
    for item in items:<br />
        print comment, item.Name</p>
<p>cube = FBFindModelByName(&#8220;Cube&#8221;)<br />
a = get_find_objects_by_classname(&#8220;FBGroup&#8221;,cube.Parents)<br />
print_names(&#8220;Owner groups:&#8221;, a)<br />
a = get_find_objects_by_classname(&#8220;FBFolder&#8221;,cube.Parents)<br />
print_names(&#8220;Owner folders:&#8221;, a)<br />
[/python]</p>
<p>get_find_objects_by_classname(name, items) について<br />
get_find_objects_by_name(name, items) を名前ではなくクラス名で判定できるよう<br />
に書き換えました。コードはほとんど一緒です。<br />
あるアイテムが属しているグループやフォルダは .Parents で取得することができます。</p>
<pre>
　
　
</pre>
<p><a name="4"></a><br />
<h3>選択しているシーンアイテムを知る</h3>
<p>スクリプトの処理対象をユーザーに指定してもらうケースなどで、選択の有無を判定する方法です。<br />
Cube や camera をシーン上に作成後、選択して実行してみてください。<br />
[python]<br />
from pyfbsdk import *</p>
<p>def print_names(comment, items):<br />
    for item in items:<br />
        print comment, item.Name</p>
<p>models = FBModelList()<br />
FBGetSelectedModels(models)<br />
print_names(&#8220;Selected:&#8221;, models)<br />
[/python]<br />
FBGetSelectedModels(FBModelList) は pyfbsdkモジュール で既に準備してある便利なファンクションです。<br />
上のコードでは、選択されているモデルを models に格納してくれています。<br />
しかし、取得できるのはモデル限定です。グループやコンストレインを取得することはできません。</p>
<p>そういう場合は次に説明するコードで取得できます。<br />
[python]<br />
from pyfbsdk import *</p>
<p>def get_selected_objects(items, selected=True):<br />
    result = []<br />
    for item in items:<br />
        if item.Selected == selected:<br />
            result.append(item)<br />
    return result</p>
<p>def print_names(comment, items):<br />
    for item in items:<br />
        print comment, item.Name</p>
<p>a = get_selected_objects(FBSystem().Scene.Groups)<br />
print_names(&#8220;Selected:&#8221;, a)<br />
a = get_selected_objects(FBSystem().Scene.Groups, False)<br />
print_names(&#8220;Not selected:&#8221;, a)<br />
a = get_selected_objects(FBSystem().Scene.Folders)<br />
print_names(&#8220;Selected:&#8221;, a)<br />
[/python]<br />
get_selected_objects(items, selected=True) について<br />
選択の有無は、.Selected で判定することができます。<br />
第1引数で指定するリストの中から判別します。<br />
第2引数は通常指定しなくてもいいですが、<br />
 False を渡すことで、逆に選択していないものだけを取得できるようになっています。</p>
<pre>
　
　
</pre>
<p><a name="5"></a><br />
<h3>プロパティの値を取得する</h3>
<p>続いて、今度はプロパティの値を取得してみます。プロパティというのは、SIのパラメータ、Mayaでいうアトリビュートです。<br />
Camera をシーン上に作成して実行してください。<br />
[python]<br />
from pyfbsdk import *</p>
<p>cam = FBFindModelByName(&#8220;Camera&#8221;)<br />
print cam.PropertyList.Find(&#8220;Field Of View&#8221;).Data<br />
print cam.PropertyList.Find(&#8220;Lcl Translation&#8221;).Data<br />
print cam.PropertyList.Find(&#8220;ShowTimeCode&#8221;).Data<br />
print cam.PropertyList.Find(&#8220;BackgroundColor&#8221;).Data<br />
[/python]<br />
Find(PropertyName) でプロパティ名を直接指定し取得できます。</p>
<p>ただ、プロパティ名がわからないと指定しようがないわけで、<br />
どんなプロパティを持っているかは一覧にして確かめてみるといいです。<br />
[python]<br />
from pyfbsdk import *</p>
<p>def print_names(comment, items):<br />
    for item in items:<br />
        print comment, item.Name</p>
<p>cam = FBFindModelByName(&#8220;Camera&#8221;)<br />
print_names(&#8220;Property:&#8221;,cam.PropertyList)<br />
[/python]</p>
<pre>
　
　
</pre>
<p><a name="6"></a><br />
<h3>コンストレインで使用しているモデルを取得する</h3>
<p>コンストレインが拘束している、もしくは参照しているモデルを取得する方法です。<br />
適当なモデルいくつかと Positionコンストレイン を作成してから実行してください。<br />
[python]<br />
from pyfbsdk import *</p>
<p>def print_names(comment, items):<br />
    for item in items:<br />
        print comment, item.Name</p>
<p>def get_find_objects_by_name(name, items):<br />
    ptn = re.compile(name)<br />
    result = []<br />
    for item in items:<br />
        if ptn.search(item.Name):<br />
            result.append(item)<br />
    return result</p>
<p>def get_registered_models(cns):<br />
    result = []<br />
    for grp_i in range(cns.ReferenceGroupGetCount()):<br />
        for model_i in range(cns.ReferenceGetCount(grp_i)):<br />
            result.append(cns.ReferenceGet(grp_i, model_i))<br />
    return result</p>
<p>constraints = get_find_objects_by_name(&#8220;Position&#8221;, FBSystem().Scene.Constraints)<br />
a = get_registered_models(constraints[0])<br />
print_name(&#8220;&#8221;, a)<br />
[/python]<br />
get_registered_models() について　<br />
コンストレインは最低でも拘束する側とされる側の2つが必要です。Positionコンストレイン を例にすると、<br />
 「Constrained Object」 と 「Source」 です。<br />
この場合、 ReferenceGroupGetCount() を使って2という値が返ってきます。つまり、Positionコンストレイン を構成する要素として、2つのグループが存在するということです。<br />
また、2つ目の要素である<br />
「Source」 は、「Source 1」 「Source 2」 「Source 3」 の様に参照先を増やすことができます。この場合、 ReferenceGetCount(GroupIndex) を使うと3という値が返ってきます。これは3つのモデルを参照しているということです。<br />
最後に、 ReferenceGet(GroupIndex, ModelIndex) を使って<br />
すべてのグループで使用している、すべてのモデルを取得しています。</p>
<pre>
　
　
</pre>
<p><a name="7"></a><br />
<h3>あるモデルを拘束している、もしくは参照しているコンストレインを取得する</h3>
<p>今度は上のコードとは逆で、モデルからコンストレインを取得する方法です。<br />
Cube と適当なコンストレインを作成してから実行してください。<br />
[python]<br />
from pyfbsdk import *</p>
<p>def print_names(comment, items):<br />
    for item in items:<br />
        print comment, item.Name</p>
<p>def get_constraints_by_source(model):<br />
    result = []<br />
    for i in range(model.GetDstCount()):<br />
        if model.GetDst(i):<br />
            if model.GetDst(i).ClassName().startswith(&#8220;FBConstraint&#8221;):<br />
                result.append(model.GetDst(i))<br />
    return result</p>
<p>def get_constraints_by_destination(model):<br />
    result = []<br />
    for i in range(model.GetSrcCount()):<br />
        if model.GetSrc(i):<br />
            if model.GetSrc(i).ClassName().startswith(&#8220;FBConstraint&#8221;):<br />
                result.append(model.GetSrc(i))<br />
    return result</p>
<p>model = FBFindModelByName(&#8220;Cube&#8221;)<br />
a = get_constraints_by_destination(model)<br />
print_name(&#8220;destination:&#8221;,a)<br />
model = FBFindModelByName(&#8220;Cube&#8221;)<br />
a = get_constraints_by_source(model)<br />
print_name(&#8220;source:&#8221;,a)<br />
[/python]<br />
get_constraints_by_source(model) について<br />
これは、引数に指定したモデルを参照先として使っているコンストレインを取得するファンクションです。<br />
GetDst(DstIndex) によってモデルの Destination をチェックし、クラス名がコンストレインだったら取得といった流れです。<br />
ちょっとややこしいですが、<br />
コンストレインから見たモデルは Source であり、<br />
モデルから見れば、コンストレインは Destination です。<br />
get_constraints_by_destination(model) も同様です。</p>
<p>おしまい。</p>
<pre>
　
　
</pre>
<p>すごく地味ーなスクリプトばかり紹介してしまいましたが、役に立ちますよねきっと・・・。<br />
今後もMotionBuilderに関するスクリプトを紹介していけたらと思います（汗）ではでは！</p>
<pre>
　
　
</pre>
<p>※免責事項※<br />
本記事内で公開している全てのコードの有用性、安全性について、当方は一切の保証を与えるものではありません。<br />
これらのコードを使用したことによって引き起こる直接的、間接的な損害に対し、当方は一切責任を負うものではありません。<br />
自己責任でご使用くださいませ。</p>

]]></content:encoded>
			<wfw:commentRss>http://www.dfx.co.jp/dftalk/?feed=rss2&amp;p=4700</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>初めてのAEプラグイン。やさしくしてね。。【後編】</title>
		<link>http://www.dfx.co.jp/dftalk/?p=4143</link>
		<comments>http://www.dfx.co.jp/dftalk/?p=4143#comments</comments>
		<pubDate>Mon, 26 Mar 2012 06:00:34 +0000</pubDate>
		<dc:creator>hiraku</dc:creator>
				<category><![CDATA[TECH TALK]]></category>
		<category><![CDATA[AfterEffects]]></category>
		<category><![CDATA[diffraction]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[初めて]]></category>
		<category><![CDATA[回折]]></category>
		<category><![CDATA[画像処理]]></category>

		<guid isPermaLink="false">http://www.dfx.co.jp/dftalk/?p=4143</guid>
		<description><![CDATA[こんにちはー。開発室のひらく[@horonig]です。 最近、「室長」という呼び名が定着しちゃった感がありますが、実は「ひらく」と呼ばれる方が好きです。 機会があれば是非、「ひらく」ないしは「ひらくさん」と呼んでみてください。きっと喜びます（＾ω＾） ここ最近はリニアワークフローにカラーマネジメント、そしてWindows7への以降など、矢継ぎ早に検証ごとを行ったりドキュメントを書く日々が続いておりました。そしてその中でも、Windows7への移行に伴った、AECS5.5（64bit）プラグイン対応というのがかなり大変でした…。なぜなら、弊社のAEプラグインはAE6.5（32bit）のSDKでコンパイルしたままにしていたからです。その昔、CS3あたりのSDKでコンパイルしたら大量にエラーが出て色々と面倒くさくなっちゃって（あ というわけで、色々と取り組まなければならない案件を取りこぼして迷惑を掛けながらも、なんとか生きております。ええ生きておりますとも。 さて、前回ご紹介した≪画像処理入門【前編】 &#8211;そして僕は羽ばたいた&#8211;≫ですが、【前編】と書いてしまったからには【後編】を書かねばなりません。あー余計なことしたなー。なんで後編とか言っちゃったんだろうなー。こっそり編集してなかった事にしちゃおうかなー、、、なんて事を言ってる時間が勿体ないので、【後編】いきます。 １．前回のおさらい 前回のポストで、僕が作った≪光の回折プラグイン≫には、 ①コンプでよくやる、エッジ部分のマスクを作って背景素材を合成する方法 【edgeBlendモード】 ②実際に背景の明るい部分から光が漏れるような、そこそこ本格的なマスクを作って合成する方法【flareモード】 という二つの手法が搭載されていると紹介しました。 （flareと回折は別の現象なので、実はネーミングミスだったりして） ①のアルゴリズムに関しては前回紹介した通りです。 なので、今回は②におけるアルゴリズムを紹介します。 すっげー単純ですけどね。( ´,_ゝ｀)ﾌﾟｯ てなると思いますよ。(´ﾟ c_,ﾟ｀)ﾌﾟｯ ちなみに前回も紹介しましたが、【flare】モードではこんな感じの結果が得られます（クリックすると大きくなります） 背景 キャラ（勿論マスクあり） 背景にキャラをのせただけのもの 【flareモード】で作られた回折合成用のマスク 【flareモード】での合成結果 【flareモード】と言ってもこうはならないので注意してネ!!（再） 前のエントリーでも書きましたが分かり易い合成例ですので、クオリティうんぬんは放っておいて下さい^^^ ２．【flare】モードのアルゴリズム flareモードのアルゴリズムは開発当初、『該当ピクセル（x, y）の近傍ピクセルを検索して一番明るいピクセルからの距離で輝度を決めればイイや』と単純に考えてました。ですがこのような単純なアルゴリズムでインプリすると、前回のブラーの時と同様、AEが固まって途方にくれるわけで…。毎度性懲りもなく画像処理の罠にはまるわけで…。もう（自分が）アホかと思うわけで…。父さん…。 そこで、頭から煙が出るほど（実際出た）考えて導き出した僕の結論は、『キャラのエッジ部分からrayを内側に放出してその積算量を回折光の量とする（回折合成用のマスクを作る）』という方法でした。つまり、『光の回折を起こす原因となるピクセルを最初から限定し、そこから発生する回折の光量を逆方向から計算する』事で、計算量を大幅に削ってしまおうと考えたわけです。そしてこれが意外とハマりました。それ以外にも細かい高速化を施していたりもするのですが、全部書くのはしんどいので、興味のある方はお菓子を下さい。（※但し美味しいお菓子に限る） では実際、【flareモード】でどのようにして『回折合成用マスク』の生成を行っているのか、順を追って説明していきましょう。 ① キャラのマスク（白黒の一枚絵）素材を用意 ② ①に対して「エッジ検出」を実行（アルゴリズムは前回のエントリーで紹介済み） ③ ②のアップ（どこの部分のアップかは推して知るべし！）※[内側][外側]とは、キャラマスクの[内側][外側]という意味です ④ ③の、値が&#8221;0&#8243;ではない部分の背景素材がコレ ⑤ ④の輝度値（luminance）を光の強さとして、キャラマスクの[内側]にあるピクセルからrayを一方向に放出。もちろん、遠くへ行くほど減衰させる。（ここで言う「ray放出」とは、スプレーをひと噴きするイメージです） ⑥ ray放出でピクセルに降り積もった積算値 ⑦ 全体で見るとこんな感じ（図は上から下に向かって一方向にだけrayを飛ばした状態） ⑧ 実際には、このrayを数本飛ばした積算値の平均を使用（この図では縦横斜めの8方向） 　 最後の⑧で出た積算値を[0.0-1.0]でclampし、rayの軌跡を消すためのブラー処理を行えば、『回折合成用のマスク』の出来上がりです。そしてこのマスクを使って「回折光」を合成するわけです。「回折光」自体は、背景素材をぼかして使ってもいいですし、マスクを作る時と同じアルゴリズムを使って色を構築する事も可能です。僕のプラグインでは、どちらも対応できるような仕組みにしてあります。 ※当時はfloat値でのブラーをインプリしてなかったのでこの順番（clamp→ブラー）にしてますが、 本当は逆の方が1.0以上の値が死なないので良いと思います とまぁ、こんな感じで【flare】モードは出来上がっているわけですねー。(´・∀・｀)ﾍｰ ３．他の適用例 [...]]]></description>
			<content:encoded><![CDATA[
<p>こんにちはー。開発室のひらく[<a href="http://twitter.com/horonig" target=_blank>@horonig</a>]です。</p>
<p>最近、「室長」という呼び名が定着しちゃった感がありますが、実は「ひらく」と呼ばれる方が好きです。<br />
機会があれば是非、「ひらく」ないしは「ひらくさん」と呼んでみてください。きっと喜びます（＾ω＾）</p>
<p>ここ最近はリニアワークフローにカラーマネジメント、そしてWindows7への以降など、矢継ぎ早に検証ごとを行ったりドキュメントを書く日々が続いておりました。そしてその中でも、Windows7への移行に伴った、AECS5.5（64bit）プラグイン対応というのがかなり大変でした…。なぜなら、弊社のAEプラグインはAE6.5（32bit）のSDKでコンパイルしたままにしていたからです。その昔、CS3あたりのSDKでコンパイルしたら大量にエラーが出て色々と面倒くさくなっちゃって（あ<br />
というわけで、色々と取り組まなければならない案件を取りこぼして迷惑を掛けながらも、なんとか生きております。ええ生きておりますとも。</p>
<p>さて、前回ご紹介した<a href="http://www.dfx.co.jp/dftalk/?p=2247" target=_blank><b>≪画像処理入門【前編】 &#8211;そして僕は羽ばたいた&#8211;≫</b></a>ですが、【前編】と書いてしまったからには【後編】を書かねばなりません。あー余計なことしたなー。なんで後編とか言っちゃったんだろうなー。こっそり編集してなかった事にしちゃおうかなー、、、なんて事を言ってる時間が勿体ないので、【後編】いきます。</p>
<p><font size="6"><b>１．前回のおさらい</b></font><br />
前回のポストで、僕が作った≪光の回折プラグイン≫には、<br />
<span style="color: #009900;"><b>①コンプでよくやる、エッジ部分のマスクを作って背景素材を合成する方法 【edgeBlendモード】</b></span><br />
<span style="color: #009900;"><b>②実際に背景の明るい部分から光が漏れるような、そこそこ本格的なマスクを作って合成する方法【flareモード】</b></span><br />
という二つの手法が搭載されていると紹介しました。<br />
<font size="1" color="#aaaaaa">（flareと回折は別の現象なので、実はネーミングミスだったりして）</font></p>
<p>①のアルゴリズムに関しては前回紹介した通りです。<br />
なので、今回は②におけるアルゴリズムを紹介します。<br />
すっげー単純ですけどね。( ´,_ゝ｀)ﾌﾟｯ てなると思いますよ。(´ﾟ c_,ﾟ｀)ﾌﾟｯ</p>
<p>ちなみに前回も紹介しましたが、【flare】モードではこんな感じの結果が得られます<font color="#3333ff"><i>（クリックすると大きくなります）</i></font></p>
<table border="1" cellspacing="2" cellpadding="2" width="100">
<tbody>
<tr>
<td bgcolor="#eeeeee"><a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/BG.jpg" class="highslide-image" onclick="return hs.expand(this);"><img style="border: 2px solid;" src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/BGS.jpg" alt="" /></a></td>
<td bgcolor="#eeeeee"><a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/chara.jpg" class="highslide-image" onclick="return hs.expand(this);"><img style="border: 2px solid;" src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/charaS.jpg" alt="" /></a></td>
</tr>
<tr>
<td align="center" bgcolor="silver">背景</td>
<td align="center" bgcolor="silver">キャラ（勿論マスクあり）</td>
</tr>
<tr>
<td bgcolor="#eeeeee"><a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/comp_none.jpg" class="highslide-image" onclick="return hs.expand(this);"><img style="border: 2px solid;" src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/comp_noneS.jpg" alt="" /></a></td>
<td bgcolor="#eeeeee"><a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/chara_FL_mask.jpg" class="highslide-image" onclick="return hs.expand(this);"><img style="border: 2px solid;" src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/chara_FL_maskS.jpg" alt="" /></a></td>
</tr>
<tr>
<td align="center" bgcolor="silver">背景にキャラをのせただけのもの</td>
<td align="center" bgcolor="silver">【flareモード】で作られた回折合成用のマスク</td>
</tr>
<tr>
<td bgcolor="#eeeeee"><a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/chara_FL.jpg" class="highslide-image" onclick="return hs.expand(this);"><img style="border: 2px solid;" src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/chara_FLS.jpg" alt="" /></a></td>
<td bgcolor="#eeeeee"><a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/chara_noll.jpg" class="highslide-image" onclick="return hs.expand(this);"><img style="border: 2px solid;" src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/chara_nollS.jpg" alt="" /></a></td>
</tr>
<tr>
<td align="center" bgcolor="silver">【flareモード】での合成結果</td>
<td style="color: white;" align="center" bgcolor="#222222">【flareモード】と言ってもこうはならないので注意してネ!!（再）</td>
</tr>
</tbody>
</table>
<p>前のエントリーでも書きましたが分かり易い合成例ですので、クオリティうんぬんは放っておいて下さい^^^</p>
<p><font size="6"><b>２．【flare】モードのアルゴリズム</b></font><br />
flareモードのアルゴリズムは開発当初、<b>『該当ピクセル（x, y）の近傍ピクセルを検索して一番明るいピクセルからの距離で輝度を決めればイイや』</b>と単純に考えてました。ですがこのような単純なアルゴリズムでインプリすると、前回のブラーの時と同様、AEが固まって途方にくれるわけで…。毎度性懲りもなく画像処理の罠にはまるわけで…。もう（自分が）アホかと思うわけで…。<font size="1">父さん…。</font></p>
<p>そこで、頭から煙が出るほど（実際出た）考えて導き出した僕の結論は、<span style="color: #ff0000;"><b>『キャラのエッジ部分からrayを内側に放出してその積算量を回折光の量とする</b>（回折合成用のマスクを作る）<b>』</b></span>という方法でした。つまり、<b>『光の回折を起こす原因となるピクセルを最初から限定し、そこから発生する回折の光量を逆方向から計算する』</b>事で、計算量を大幅に削ってしまおうと考えたわけです。そしてこれが意外とハマりました。それ以外にも細かい高速化を施していたりもするのですが、全部書くのはしんどいので、興味のある方はお菓子を下さい。<i>（※但し美味しいお菓子に限る）</i></p>
<p>では実際、【flareモード】でどのようにして<b>『回折合成用マスク』</b>の生成を行っているのか、順を追って説明していきましょう。</p>
<table border="1" cellspacing="2" cellpadding="2" width="100">
<tbody>
<tr>
<td bgcolor="#eeeeee"><a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/mask.jpg" class="highslide-image" onclick="return hs.expand(this);"><img style="border: 2px solid;" src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/maskS.jpg" alt="" /></a></td>
<td bgcolor="#eeeeee"><a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/r_edgeDetect.jpg" class="highslide-image" onclick="return hs.expand(this);"><img style="border: 2px solid;" src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/r_edgeDetectS.jpg" alt="" /></a></td>
</tr>
<tr>
<td align="center" bgcolor="silver"><font size="4">①</font> <font color="#550000">キャラのマスク（白黒の一枚絵）素材を用意</font></td>
<td align="center" bgcolor="silver"><font size="4">②</font> <font color="#550000">①に対して「エッジ検出」を実行<br />（アルゴリズムは<a href="http://www.dfx.co.jp/dftalk/?p=2247#edge" target=_blank>前回のエントリー</a>で紹介済み）</font></td>
</tr>
<tr>
<td bgcolor="#eeeeee"><a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/r_edgeDetectUP.jpg" class="highslide-image" onclick="return hs.expand(this);"><img style="border: 2px solid;" src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/r_edgeDetectUPS.jpg" alt="" /></a></td>
<td bgcolor="#eeeeee"><a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/r_edgeDetectUP_BG.jpg" class="highslide-image" onclick="return hs.expand(this);"><img style="border: 2px solid;" src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/r_edgeDetectUP_BGS.jpg" alt="" /></a></td>
</tr>
<tr>
<td align="center" bgcolor="silver"><font size="4">③</font> <font color="#550000">②のアップ</font><font color="#cccccc" size="1">（どこの部分のアップかは推して知るべし！）</font><br /><font color="#990000" size="1">※[内側][外側]とは、キャラマスクの[内側][外側]という意味です</font></td>
<td align="center" bgcolor="silver"><font size="4">④</font> <font color="#550000">③の、値が&#8221;0&#8243;ではない部分の背景素材がコレ</font></td>
</tr>
<tr>
<td bgcolor="#eeeeee"><a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/r_edgeDetectUP_BG_intensity.jpg" class="highslide-image" onclick="return hs.expand(this);"><img style="border: 2px solid;" src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/r_edgeDetectUP_BG_intensityS.jpg" alt="" /></a></td>
<td bgcolor="#eeeeee"><a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/r_edgeDetect_raySum.jpg" class="highslide-image" onclick="return hs.expand(this);"><img style="border: 2px solid;" src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/r_edgeDetect_raySumS.jpg" alt="" /></a></td>
</tr>
<tr>
<td align="center" bgcolor="silver"><font size="4">⑤</font> <font color="#550000">④の輝度値（luminance）を光の強さとして、キャラマスクの[内側]にあるピクセルからrayを一方向に放出。もちろん、遠くへ行くほど減衰させる。（ここで言う「ray放出」とは、スプレーをひと噴きするイメージです）</font></td>
<td align="center" bgcolor="silver"><font size="4">⑥</font> <font color="#550000">ray放出でピクセルに降り積もった積算値</font></td>
</tr>
<tr>
<td bgcolor="#eeeeee"><a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/r_realRay.jpg" class="highslide-image" onclick="return hs.expand(this);"><img style="border: 2px solid;" src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/r_realRayS.jpg" alt="" /></a></td>
<td bgcolor="#eeeeee"><a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/r_reayRay8.jpg" class="highslide-image" onclick="return hs.expand(this);"><img style="border: 2px solid;" src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/r_reayRay8S.jpg" alt="" /></a></td>
</tr>
<tr>
<td align="center" bgcolor="silver"><font size="4">⑦</font> <font color="#550000">全体で見るとこんな感じ<br />（図は上から下に向かって一方向にだけrayを飛ばした状態）</font></td>
<td align="center" bgcolor="silver"><font size="4">⑧</font> <font color="#550000">実際には、このrayを数本飛ばした積算値の平均を使用<br />（この図では縦横斜めの8方向）</font></td>
</tr>
</tbody>
</table>
<p>　<br />
最後の⑧で出た積算値を[0.0-1.0]でclampし、rayの軌跡を消すためのブラー処理を行えば、『回折合成用のマスク』の出来上がりです。そしてこのマスクを使って「回折光」を合成するわけです。「回折光」自体は、背景素材をぼかして使ってもいいですし、マスクを作る時と同じアルゴリズムを使って色を構築する事も可能です。僕のプラグインでは、どちらも対応できるような仕組みにしてあります。<br />
<font color="#990000">※当時はfloat値でのブラーをインプリしてなかったのでこの順番（clamp→ブラー）にしてますが、<br />
本当は逆の方が1.0以上の値が死なないので良いと思います</font></p>
<p>とまぁ、こんな感じで【flare】モードは出来上がっているわけですねー。(´・∀・｀)ﾍｰ</p>
<p><font size="6"><b>３．他の適用例</b></font><br />
開発当時に作った別の適用例です。</p>
<table border="1" cellspacing="2" cellpadding="2" width="100">
<tbody>
<tr>
<td bgcolor="#eeeeee"><a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/r_fire_moto.jpg" class="highslide-image" onclick="return hs.expand(this);"><img style="border: 2px solid;" src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/r_fire_motoS.jpg" alt="" /></a></td>
<td bgcolor="#eeeeee"><a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/r_fire.jpg" class="highslide-image" onclick="return hs.expand(this);"><img style="border: 2px solid;" src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/r_fireS.jpg" alt="" /></a></td>
</tr>
<tr>
<td align="center" bgcolor="silver">ただの平面＆炎素材</td>
<td align="center" bgcolor="silver">この平面にプラグインを適用するとこんな感じ</td>
</tr>
<tr>
<td bgcolor="#eeeeee"><a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/r_fire_noBlur.jpg" class="highslide-image" onclick="return hs.expand(this);"><img style="border: 2px solid;" src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03//r_fire_noBlurS.jpg" alt="" /></a></td>
<td bgcolor="#eeeeee"></td>
</tr>
<tr>
<td align="center" bgcolor="silver">実際のrayはこんな感じになってます<br />これにブラーを掛けて使用してるわけですね b</td>
<td align="center" bgcolor="silver"></td>
</tr>
</tbody>
</table>
<p>　<br />
アニメーションで見るとこんな感じﾃﾞｽ。<br />
なかなか興味深い結果になっております (ﾟ∀ﾟ)<br />
<iframe width="640" height="480" src="http://www.youtube.com/embed/Wx5wW8V0TH8?rel=0" frameborder="0" allowfullscreen></iframe><br />
一応、綺麗なムービーも<a href=http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/r_fire.mov target="_blank">こちら</a>にアップしておきます（QuickTime形式）</p>
<p><font size="6"><b>４．シメ</b></font><br />
とまぁ、ふたを開けてみればなんじゃこりゃ、っていうくらい簡単なアルゴリズムです。高校レベルの数学で充分対応できますね(笑)<br />
ただ、結構センスは必要な気がします。エフェクトプラグインってやはり、最終的なリザルトが良くないと使ってもらえない（意味がない）と思ってるので、とにかく結果が美しくなるよう意識して作っています。この辺は、いちデザイナーと同じ感覚ですかね。「面白い」もしくは「美しい」プラグインが出来るとホントに気持ちイイです。（同じくらい「使いやすさ」も重要ですが！）</p>
<p>また今回のアルゴリズムは、『rayを飛ばしてその光の積算量を求める』という単純な方法なので、比較的簡単にマルチスレッド化できます。<br />
このプラグインの場合は、ray毎にスレッドを割り当てるようなコードにしたはずです（確か）。なのでさほど重くありません。</p>
<p>そしてこれ、普通に実機でも動くんじゃないかなぁ。てか、ゲームエンジンでもこういった手法ってあるんでしょうか？（ゲーム関連のアルゴリズムには疎くて） もしなければ<font color="#33cc00"><b>【Hiraku Diffraction】</font></b>とか適当な名前付けて、このアルゴリズム使ってくれないかなぁ。そして金一封とか貰えないかしらｗ シガール一年分とかでも良いけど^^^ でもよくよく考えたら、ゲーム実機において前景と背景を切り分けるのって大変そうですよね。今回のアルゴリズムは前景のマスク素材が必須だし、やっぱ無理かー。夢が遠のいたぜ！イエイ！＞＿＜！★</p>
<p>兎にも角にも、皆さんも機会があれば是非AEのプラグインを作ってみてください。<br />
若干敷居は高いですが、最近はWEBでの情報もかなり充実してきてるので、比較的簡単に作れると思いますよ。<br />
（今はNuke全盛なので、そちらでも良いと思いますけど）</p>
<p>以上、ヨックモ○クの回し者がお送り致しました。<br />
それではまた！！さよおなら！！</p>

]]></content:encoded>
			<wfw:commentRss>http://www.dfx.co.jp/dftalk/?feed=rss2&amp;p=4143</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/r_fire.mov" length="22900959" type="video/quicktime" />
		</item>
		<item>
		<title>ウルトラマン・リアルタイムイベント開催</title>
		<link>http://www.dfx.co.jp/dftalk/?p=4201</link>
		<comments>http://www.dfx.co.jp/dftalk/?p=4201#comments</comments>
		<pubDate>Tue, 13 Mar 2012 06:15:06 +0000</pubDate>
		<dc:creator>dfx_dftalk</dc:creator>
				<category><![CDATA[KOHO lounge]]></category>
		<category><![CDATA[イベント]]></category>
		<category><![CDATA[ウルトラマン]]></category>

		<guid isPermaLink="false">http://www.dfx.co.jp/dftalk/?p=4201</guid>
		<description><![CDATA[デジタル・フロンティア（以下DF）では3月10日（土）に、「ウルトラマン・リアルタイムイベント」を開催しました。 このイベントは、昨年12月に弊社に導入した3Dスキャナーとモーションキャプチャーとの連携やパフォーマンスを計る目的として 企画しました。また、同じグループ企業でもある円谷プロダクション様のご協力により3月24日（土）に全国公開される劇場映画 「ウルトラマンサーガ」とのタイアップ企画が実現しました。 当日はあいにくの雨模様でしたが、イベントにはご家族連れの来場者も多数訪れ終始和やかなムードに包まれました。また、 バックグラウンドには歴代ウルトラマンの主題歌が鳴り響き大人の参加者の中からは懐かしいとの声が多数聞かれました。 今回のイベントは、午前の部、午後の部に分かれて撮影をしました。午前の部には子どものアクターとして、元スーツアクターで 現在はCGデザイナーとして幅広くご活躍中の帆足剛彦さんの双子のお子さん、江くん（ごうくん）と岳くん（がくくん）6歳に参加し て頂きました。二人ともウルトラマンの大ファンとのこともあり、直ぐにウルトラマンゼロのポーズを皆に披露し、気合十分な様子 でした。撮影が始まるとお二人とも、ウルトラマンゼロ、怪獣アーストロンになりきり、迫真の演技をしてくれました。 午後の部では、DFのデザイナーの中からアクターを体験してみたいと希望してきた2名（左から守田、阿部）にアクターを演じて もらいました。DFでは男性に比べ女性スタッフは少ないですが、そんな中でいつもマルチに動いている守田は3Dスキャナーの PVにも出演しています。また、阿部は幼少からウルトラマンに憧れており夢がかなったと喜んで参加して頂いた、DF入社してまだ 間もないですが期待のデザイナーさんです。 大人が演技するウルトラマンと子供が 演技するウルトラマンどちらも迫力が あって見応え十分でした。細かな動き もキャラクターに反映されていたので、 子供と大人の動きをその場で比較でき、 スタッフも「面白い！」と新しい発見に 興奮していました。 モデルデータは、前述の3Dスキャナー を使い高解像度で撮影されたモデル データを今回の為に最適なポリゴン数 に再構築し、制作しました。さらに、ウ ルトラマンゼロの光線やアーストロンの くちからの火を吹く仕掛けも仕込まれて いました。 今回は、映画「ウルトラマンサーガ」のVFXスーパーバイザーを務める弊社ディレクター前川にバーチャルカメラを構えて映画撮影 さながらの役者へのアクション指導やカメラワークでディレクションしてもらいました。バーチャルカメラを使用することでカメラが構え ている構図をインタラクティブにモーションビルダー上に描画させ、大迫力の映像を巨大スクリーンに映し出せたことで観客席から は歓声が上がるほどでした。 来場して頂いたお父さんにもバーチャルカメラを担いで頂きカメラマン体験をして頂きました。また、会場では3Dスキャナーの展示 体験ブースを設置し、来場のお客様に写真を撮影する様に手軽に高解像度のポリゴンモデルが生成される所も体験して頂きました。 デジタル・フロンティアでは今後もこの様な参加者体験型のイベントを企画していこうと思います。 近日、CGWORLD.jpと来月号のCGWORLDにてイベントの様子とここで紹介できなかった弊社ディレクター陣のインタビュー記事 も紹介する予定です。ぜひ、そちらもチェックして頂ければと思います。 映画「ウルトラマンサーガ」について 作品タイトル：『ウルトラマンサーガ』 公開日： 2012年3月24日(土) 出演：DAIGO　杉浦 太陽　つるの 剛士　黒部 進　森次 晃嗣　団 時朗　 高峰圭二　真夏竜　秋元才加　宮澤佐江　佐藤すみれ　梅田彩佳　 増田有華　小林香菜　島田晴香 声の出演：宮野 真守　　　　　　　　　　　　　　　　　 監督：おかひでき　特技監督：三池 敏夫　脚本：長谷川 圭一　 音楽：原 [...]]]></description>
			<content:encoded><![CDATA[
<p>デジタル・フロンティア（以下DF）では3月10日（土）に、「ウルトラマン・リアルタイムイベント」を開催しました。</p>
<p>このイベントは、昨年12月に弊社に導入した3Dスキャナーとモーションキャプチャーとの連携やパフォーマンスを計る目的として<br />
企画しました。また、同じグループ企業でもある円谷プロダクション様のご協力により3月24日（土）に全国公開される劇場映画<br />
「<a href="http://www.ultramansaga.com/">ウルトラマンサーガ</a>」とのタイアップ企画が実現しました。<br />
<a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/zero3.jpg" class="highslide-image" onclick="return hs.expand(this);"><img src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/zero3-300x249.jpg" alt="" title="zero" width="300" height="249" class="alignleft size-medium wp-image-4338" /></a><a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/earthtron4.jpg" class="highslide-image" onclick="return hs.expand(this);"><img src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/earthtron4-300x249.jpg" alt="" title="earthtron" width="300" height="249" class="alignleft size-medium wp-image-4339" /></a><br />
</br><br />
</br><br />
</br><br />
</br><br />
</br><br />
</br><br />
</br><br />
</br><br />
</br><br />
</br><br />
</br><br />
</br><br />
当日はあいにくの雨模様でしたが、イベントにはご家族連れの来場者も多数訪れ終始和やかなムードに包まれました。また、<br />
バックグラウンドには歴代ウルトラマンの主題歌が鳴り響き大人の参加者の中からは懐かしいとの声が多数聞かれました。</p>
<p><a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/UT_053.jpg" class="highslide-image" onclick="return hs.expand(this);"><img src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/UT_053-300x198.jpg" alt="" title="UT_05" width="300" height="198" class="alignleft size-medium wp-image-4340" /></a><a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/UT_115.jpg" class="highslide-image" onclick="return hs.expand(this);"><img src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/UT_115-300x199.jpg" alt="" title="UT_11" width="300" height="199" class="alignleft size-medium wp-image-4342" /></a><br />
</br><br />
</br><br />
</br><br />
</br><br />
</br><br />
</br><br />
</br><br />
</br><br />
</br><br />
</br><br />
今回のイベントは、午前の部、午後の部に分かれて撮影をしました。午前の部には子どものアクターとして、元スーツアクターで<br />
現在はCGデザイナーとして幅広くご活躍中の<a href="http://picapixelsworks.tumblr.com">帆足剛彦</a>さんの双子のお子さん、江くん（ごうくん）と岳くん（がくくん）6歳に参加し<br />
て頂きました。二人ともウルトラマンの大ファンとのこともあり、直ぐにウルトラマンゼロのポーズを皆に披露し、気合十分な様子<br />
でした。撮影が始まるとお二人とも、ウルトラマンゼロ、怪獣アーストロンになりきり、迫真の演技をしてくれました。<br />
<a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/UT_14_a.jpg" class="highslide-image" onclick="return hs.expand(this);"><img src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/UT_14_a.jpg" alt="" title="UT_14_a" width="133" height="200" class="alignleft size-full wp-image-4347" /></a><a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/UT_13_a.jpg" class="highslide-image" onclick="return hs.expand(this);"><img src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/UT_13_a.jpg" alt="" title="UT_13_a" width="133" height="200" class="alignleft size-full wp-image-4348" /></a><a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/UT151.jpg" class="highslide-image" onclick="return hs.expand(this);"><img src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/UT151-300x200.jpg" alt="" title="UT15" width="300" height="200" class="alignleft size-medium wp-image-4345" /></a><br />
<a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/UT_16.jpg" class="highslide-image" onclick="return hs.expand(this);"><img src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/UT_16-300x200.jpg" alt="" title="UT_16" width="300" height="200" class="alignleft size-medium wp-image-4350" /></a><a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/UT_12.jpg" class="highslide-image" onclick="return hs.expand(this);"><img src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/UT_12-300x200.jpg" alt="" title="UT_12" width="300" height="200" class="alignleft size-medium wp-image-4351" /></a><br />
</br><br />
</br><br />
</br><br />
</br><br />
</br><br />
</br><br />
</br><br />
</br><br />
</br><br />
</br><br />
</br><br />
</br><br />
</br><br />
</br><br />
</br><br />
</br><br />
</br><br />
</br><br />
</br><br />
</br><br />
午後の部では、DFのデザイナーの中からアクターを体験してみたいと希望してきた2名（左から守田、阿部）にアクターを演じて<br />
もらいました。DFでは男性に比べ女性スタッフは少ないですが、そんな中でいつもマルチに動いている守田は3Dスキャナーの<br />
PVにも出演しています。また、阿部は幼少からウルトラマンに憧れており夢がかなったと喜んで参加して頂いた、DF入社してまだ<br />
間もないですが期待のデザイナーさんです。</p>
<p><a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/UT_072.jpg" class="highslide-image" onclick="return hs.expand(this);"><img src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/UT_072-198x300.jpg" alt="" title="UT_07" width="198" height="300" class="alignleft size-medium wp-image-4353" /></a><a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/UT_082.jpg" class="highslide-image" onclick="return hs.expand(this);"><img src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/UT_082-198x300.jpg" alt="" title="UT_08" width="198" height="300" class="alignleft size-medium wp-image-4354" /></a>大人が演技するウルトラマンと子供が<br />
演技するウルトラマンどちらも迫力が<br />
あって見応え十分でした。細かな動き<br />
もキャラクターに反映されていたので、<br />
子供と大人の動きをその場で比較でき、<br />
スタッフも「面白い！」と新しい発見に<br />
興奮していました。<br />
モデルデータは、前述の3Dスキャナー<br />
を使い高解像度で撮影されたモデル<br />
データを今回の為に最適なポリゴン数<br />
に再構築し、制作しました。さらに、ウ<br />
ルトラマンゼロの光線やアーストロンの<br />
くちからの火を吹く仕掛けも仕込まれて<br />
いました。</p>
<p><a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/UT_042.jpg" class="highslide-image" onclick="return hs.expand(this);"><img src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/UT_042-300x198.jpg" alt="" title="UT_04" width="300" height="198" class="alignleft size-medium wp-image-4357" /></a><a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/UT_062.jpg" class="highslide-image" onclick="return hs.expand(this);"><img src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/UT_062-300x198.jpg" alt="" title="UT_06" width="300" height="198" class="alignleft size-medium wp-image-4358" /></a><br />
</br><br />
</br><br />
</br><br />
</br><br />
</br><br />
</br><br />
</br><br />
</br><br />
</br><br />
</br><br />
</br><br />
今回は、映画「ウルトラマンサーガ」のVFXスーパーバイザーを務める弊社ディレクター前川にバーチャルカメラを構えて映画撮影<br />
さながらの役者へのアクション指導やカメラワークでディレクションしてもらいました。バーチャルカメラを使用することでカメラが構え<br />
ている構図をインタラクティブにモーションビルダー上に描画させ、大迫力の映像を巨大スクリーンに映し出せたことで観客席から<br />
は歓声が上がるほどでした。<br />
<a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/UT_102.jpg" class="highslide-image" onclick="return hs.expand(this);"><img src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/UT_102-300x198.jpg" alt="" title="UT_10" width="300" height="198" class="alignleft size-medium wp-image-4361" /></a><a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/UT_171.jpg" class="highslide-image" onclick="return hs.expand(this);"><img src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/UT_171-300x198.jpg" alt="" title="UT_17" width="300" height="198" class="alignleft size-medium wp-image-4371" /></a><br />
</br><br />
</br><br />
</br><br />
</br><br />
</br><br />
</br><br />
</br><br />
</br><br />
</br><br />
</br><br />
来場して頂いたお父さんにもバーチャルカメラを担いで頂きカメラマン体験をして頂きました。また、会場では3Dスキャナーの展示<br />
体験ブースを設置し、来場のお客様に写真を撮影する様に手軽に高解像度のポリゴンモデルが生成される所も体験して頂きました。</p>
<p>デジタル・フロンティアでは今後もこの様な参加者体験型のイベントを企画していこうと思います。<br />
近日、CGWORLD.jpと来月号のCGWORLDにてイベントの様子とここで紹介できなかった弊社ディレクター陣のインタビュー記事<br />
も紹介する予定です。ぜひ、そちらもチェックして頂ければと思います。</p>
<p><b>映画「ウルトラマンサーガ」について</b><br />
<a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/【黒】集合版_s1.jpg" class="highslide-image" onclick="return hs.expand(this);"><img src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/03/【黒】集合版_s1.jpg" alt="" title="【黒】集合版_s" width="248" height="351" class="alignleft size-full wp-image-4366" /></a>作品タイトル：『ウルトラマンサーガ』<br />
公開日： 2012年3月24日(土)<br />
出演：DAIGO　杉浦 太陽　つるの 剛士　黒部 進　森次 晃嗣　団 時朗　<br />
高峰圭二　真夏竜　秋元才加　宮澤佐江　佐藤すみれ　梅田彩佳　<br />
増田有華　小林香菜　島田晴香<br />
声の出演：宮野 真守　　　　　　　　　　　　　　　　　<br />
監督：おかひでき　特技監督：三池 敏夫　脚本：長谷川 圭一　<br />
音楽：原 文雄エグゼクティブ・プロデューサー：山本 英俊　<br />
監修：大岡 新一　チーフプロデューサー：北浦 嗣巳　<br />
企画：岡崎 聖　渋谷 浩康　撮影監督：髙橋 創　<br />
VFXプロデューサー：鹿角 剛司　VFXスーパーバイザー：前川 英章<br />
宣伝プロデューサー：栗原 俊志　音楽監督：田靡 秀樹<br />
制作：円谷プロダクション　配給：松竹<br />
製作：『ウルトラマンサーガ』製作委員会<br />
<a href="http://www.ultramansaga.com/">公式サイトはこちら</a><br />
</br><br />
</br><br />
</br><br />
</br><br />
<b>デジタル・フロンティアのモーションキャプチャースタジオ＆3DスキャナPV<br />
をYouTubeにて掲載中！</b></p>
<p>Digital Frontier YouTube Channelは<a href="http://www.youtube.com/user/digitalfrontierjapan">こちら</a><br />
DF Twitterは<a href="https://twitter.com/#!/DF_Inc">こちら</a></p>

]]></content:encoded>
			<wfw:commentRss>http://www.dfx.co.jp/dftalk/?feed=rss2&amp;p=4201</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MayaのHistoryでRigを組んでみました。</title>
		<link>http://www.dfx.co.jp/dftalk/?p=4071</link>
		<comments>http://www.dfx.co.jp/dftalk/?p=4071#comments</comments>
		<pubDate>Mon, 12 Mar 2012 06:00:54 +0000</pubDate>
		<dc:creator>toshio</dc:creator>
				<category><![CDATA[TECH TALK]]></category>
		<category><![CDATA[maya]]></category>
		<category><![CDATA[rig]]></category>

		<guid isPermaLink="false">http://www.dfx.co.jp/dftalk/?p=4071</guid>
		<description><![CDATA[どうも、こんにちは。 TDですけど最近はキャラクターをリグりまくってます。石田[@1null4null]です。 僕と一緒にキャラクターをリグる仕事致しませんか？ そしてこちらも絶賛募集中です。 &#62;&#62;&#62; テクニカルスタッフ さて、もろもろお伝えしたところで、今回の記事ですが今現在キャラクターリグをやっているのでリグに役立つ事について書いてみます。 ヒストリーをあえて使ってみよう リグを組む前に要らないヒストリーを消すのは常識だと思いますが、デフォーマー以外のヒストリーをあえてリグで使っちゃう方法です。 デフォーマーだけにこだわらず使えるものは利用しちゃえば可能性は広がる！かも！？ 今回、利用する機能です。 ■combine - &#8211; -Mesh &#62; combine ■poly Bridge - &#8211; -Edit Mesh &#62; Bridge ■Bevel - &#8211; -Edit Mesh &#62; Bevel 今回はこれだけにしておきましょう。 どれを見てもみなさん普通に使ってらっしゃる標準のMayaのモデリング機能なんですがこれをデフォーマーのベースに使っちゃいます。 ＿ １ ＿ こんなモデルが上がってきたとします。ベルト的ななにか？ こいつをセットアップしていきたいと思います。 ＿ 2 ＿ polyBridgeするためのポリゴン板をベルトの上と下に用意します。 ※polyBridgeではひとつのMeshShapeでしか割り当てることしか出来ないのですが、ここではまだ上下のオブジェクトをcombineしません。 動かすためのコントローラーも用意します。 ベルトに対しての上下のオブジェクトとコントローラーの位置は下図を参考にしてください。 ＿ 3 ＿ さて、ここで上と下のポリゴン板をcombineします。 ここ重要です！！＞＞コンバインのHistoryは残したままにしておいてください。 Historyを残したままにしておくとcombineしたオブジェクトとtransformノードが二つ出来るはずですよね。 そのtransformノードを二つ作っておいたコントローラーの子にしてみてください。 コントローラーを動かすとわかるかと思いますがcombineしたあとでも上と下のポリゴン板を別で動かすことができます。 ＿ [...]]]></description>
			<content:encoded><![CDATA[
<p>どうも、こんにちは。<br />
TDですけど最近はキャラクターをリグりまくってます。石田[<a href="https://twitter.com/#!/1null4null">@1null4null</a>]です。<br />
僕と一緒にキャラクターをリグる仕事致しませんか？<br />
そしてこちらも絶賛募集中です。 &gt;&gt;&gt; <a href="http://www.dfx.co.jp/dftalk/?p=4105">テクニカルスタッフ</a></p>
<p>さて、もろもろお伝えしたところで、今回の記事ですが今現在キャラクターリグをやっているのでリグに役立つ事について書いてみます。</p>
<p><span style="color: #888888;"><span style="text-decoration: underline;"><strong>ヒストリーをあえて使ってみよう</strong></span></span><br />
リグを組む前に要らないヒストリーを消すのは常識だと思いますが、デフォーマー以外のヒストリーをあえてリグで使っちゃう方法です。<br />
デフォーマーだけにこだわらず使えるものは利用しちゃえば可能性は広がる！かも！？</p>
<p>今回、利用する機能です。<br />
■combine<br />
- &#8211; -Mesh &gt; combine<br />
■poly Bridge<br />
- &#8211; -Edit Mesh &gt; Bridge<br />
■Bevel<br />
- &#8211; -Edit Mesh &gt; Bevel</p>
<p>今回はこれだけにしておきましょう。<br />
どれを見てもみなさん普通に使ってらっしゃる標準のMayaのモデリング機能なんですがこれをデフォーマーのベースに使っちゃいます。</p>
<p><span style="color: #888888;"><strong>＿</strong><strong> １ ＿</strong></span><br />
こんなモデルが上がってきたとします。ベルト的ななにか？<br />
こいつをセットアップしていきたいと思います。<br />
<a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/02/His_011.jpg" class="highslide-image" onclick="return hs.expand(this);"><img class="alignnone size-full wp-image-4076" title="His_01" src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/02/His_011.jpg" alt="" width="387" height="477" /></a></p>
<p><span style="color: #888888;"><strong><br />
＿</strong><strong> 2 ＿</strong></span><br />
polyBridgeするためのポリゴン板をベルトの上と下に用意します。<br />
※polyBridgeではひとつのMeshShapeでしか割り当てることしか出来ないのですが、ここではまだ上下のオブジェクトをcombineしません。<br />
動かすためのコントローラーも用意します。<br />
ベルトに対しての上下のオブジェクトとコントローラーの位置は下図を参考にしてください。<br />
<a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/02/His_2.gif" class="highslide-image" onclick="return hs.expand(this);"><img class="alignnone size-full wp-image-4077" title="His_2" src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/02/His_2.gif" alt="" width="273" height="615" /></a></p>
<p><span style="color: #888888;"><strong><br />
＿</strong></span><strong><span style="color: #888888;"> 3 ＿</span><br />
</strong>さて、ここで上と下のポリゴン板をcombineします。<br />
ここ重要です！！＞＞コンバインのHistoryは残したままにしておいてください。<br />
Historyを残したままにしておくとcombineしたオブジェクトとtransformノードが二つ出来るはずですよね。<br />
そのtransformノードを二つ作っておいたコントローラーの子にしてみてください。<br />
コントローラーを動かすとわかるかと思いますがcombineしたあとでも上と下のポリゴン板を別で動かすことができます。<br />
<a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/02/His_3.gif" class="highslide-image" onclick="return hs.expand(this);"><img class="alignnone size-full wp-image-4079" title="His_3" src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/02/His_3.gif" alt="" width="400" height="262" /></a></p>
<p><span style="color: #888888;"><strong><br />
＿</strong></span><strong><span style="color: #888888;"> 4 ＿</span><br />
</strong>次にpolyBridgeを使います。<br />
ポリゴン板のエッジを上と下それぞれ選んでpolyBridgeを作成します。<br />
コントローラーを動かすと、デフォームしてくれるはずです。ですがリニアな動きにしかなりません。<br />
もっと柔軟に！！という場合はpolyBridgeオプションにcurveという項目があるのでそれを組み合わせるといいでしょう。<br />
ここでcurveを動かす三つ目のコントローラーを真ん中に足しました。<br />
<a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/02/His_4.gif" class="highslide-image" onclick="return hs.expand(this);"><img class="alignnone size-full wp-image-4080" title="His_4" src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/02/His_4.gif" alt="" width="400" height="327" /></a></p>
<p><span style="color: #888888;"><strong><br />
＿</strong><strong> 5 ＿</strong></span><br />
ここで気がついたのですが最初に作ったポリゴン板の縦幅、大きすぎましたねｗ<br />
パッキリ形状が出るのが気になる！！ってかたはBevelかPolySmooth使うと良いですよ。<br />
<a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/02/His_5.gif" class="highslide-image" onclick="return hs.expand(this);"><img class="alignnone size-full wp-image-4081" title="His_5" src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/02/His_5.gif" alt="" width="390" height="264" /></a></p>
<p><span style="color: #888888;"><strong><br />
＿</strong></span><strong><span style="color: #888888;"> 6 ＿</span><br />
</strong>ここまで出来たらあとはpolyBridgeオブジェクトとモデルをwrapして出来上がり！！<br />
簡単っすねｗ<br />
<a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/02/His_6.jpg" class="highslide-image" onclick="return hs.expand(this);"><img class="alignnone size-full wp-image-4082" title="His_6" src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/02/His_6.jpg" alt="" width="718" height="525" /></a></p>
<p><strong> </strong></p>
<p><span style="color: #888888;"><strong>＿</strong></span><strong> </strong><span style="color: #888888;"><strong> 最後に ＿</strong></span><br />
簡単な説明でしたがどうでしたでしょうか？<br />
ここまでのサンプルデータを用意しました。参考になれば幸いです。</p>
<p><a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/02/HistoryRig.zip">HistoryRig.ma（zip）</a></p>
<p>モデリングの機能なので意図しない動きになったり、重くなったりもするのでそういう問題を解決克服していくのもRigのお仕事です。<br />
そしてわざわざこの手法を取らなくても、もちろん手段はいっぱいありますし、もっともっと効率的な方法もあります。<br />
大事なのは、目的に沿ったものが組めるか、ということです。<br />
リグを組む上で他にも大事なことはたくさんありますが割愛！！<br />
てことで今回は締めさせていたただきます。</p>
<p>最後までご覧くださってありがとうございました！！</p>
<p><strong><span style="color: #993300;">※注意※</span></strong> 本記事内でダウンロード可能なサンプルシーンを使用したことによって引き起こるいかなる損害も<br />
当方は一切責任を負いかねます。自己責任でご使用くださいませ。</p>

]]></content:encoded>
			<wfw:commentRss>http://www.dfx.co.jp/dftalk/?feed=rss2&amp;p=4071</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CGジョブトレーナーって何？</title>
		<link>http://www.dfx.co.jp/dftalk/?p=4158</link>
		<comments>http://www.dfx.co.jp/dftalk/?p=4158#comments</comments>
		<pubDate>Mon, 05 Mar 2012 01:46:52 +0000</pubDate>
		<dc:creator>dfx_dftalk</dc:creator>
				<category><![CDATA[JOB NEWS]]></category>
		<category><![CDATA[育成]]></category>
		<category><![CDATA[ＣＧジョブトレーナー]]></category>

		<guid isPermaLink="false">http://www.dfx.co.jp/dftalk/?p=4158</guid>
		<description><![CDATA[皆さま、お久しぶりです。野澤です。 日頃はDF Talkをお読み頂きありがとうございます。 花粉が刻一刻と私を攻撃してきて日増しに鼻声化してきている今日この頃です。 一説によると今年は花粉の量が少ないとか言われていますが実際のところどうなんでしょうか？ 3月は私にとって一年でもっともスペックの低い月ですが負けないように頑張ります・・。 さて、今日のポストは、先月弊社にて新しく誕生した『CGジョブトレーナー』という職種について触れさせて頂こうと思います。 『CGジョブトレーナー』とはどんな職業かと言うと、読んで字のごとくCGデザイナーのトレーニングをする人です。 日本中にCGを教える専門学校や大学は数多く存在します。 しかし、CGプロダクションの作業フローを理解した上でカリキュラムを組む学校はそんなに多くないと思います。 つい先日某専門学校を訪問させて頂いたときも、ゲームを意識したのかかなりのローポリゴンデータで作成された キャラクターの静止画を見せてくる学生さんを多く見受けました。ゲーム会社さんの採用基準については詳しく分かりませんが、 弊社の様な映像プロダクション目線ではローポリゴンデータで作られた静止画作品はマイナスからの評価になってしまいます。 これまでも弊社では、新人教育と独自のワークフローを取り入れて新卒の方を多数育成して参りましたが、 デザイナーがデザイン業務の傍らで教育するのはあまり好ましい事とは言えません。 そこで、この度弊社では、新卒者または制作経験の浅いデザイナーにCG技術を教える『CGジョブトレーナー』という職種を誕生させました。『CGジョブトレーナー』は、DF独自のワークフローを理解し、後進にCG技術を教える事に特化した業種です。 今まで教育現場で教えていたが、もっと制作現場に近い所で本当に役に立つテクニックを伝えていきたい方 長年CG制作の最前線で頑張ってきたがそろそろ方向転換し、今後は自分が才能ある若者たちを育成する側に立ちたい方 CGに関してしか勉強してこなかった若者たちに社会人としての振る舞い、デザイナーとしての振る舞いを教えてあげたい方 そんな皆様のご応募をお待ちしております。 詳細はこちらをご確認ください。 http://www.dfx.co.jp/recruit/application/ 最後までお付き合い頂きありがとうございました。]]></description>
			<content:encoded><![CDATA[
<p>皆さま、お久しぶりです。<a href="https://twitter.com/#!/lphing">野澤</a>です。<br />
日頃はDF Talkをお読み頂きありがとうございます。</p>
<p>花粉が刻一刻と私を攻撃してきて日増しに鼻声化してきている今日この頃です。<br />
一説によると今年は花粉の量が少ないとか言われていますが実際のところどうなんでしょうか？<br />
3月は私にとって一年でもっともスペックの低い月ですが負けないように頑張ります・・。</p>
<p>さて、今日のポストは、先月弊社にて新しく誕生した『<span style="color: #ff6600;"><strong>CGジョブトレーナー</strong></span>』という職種について触れさせて頂こうと思います。</p>
<p>『<span style="color: #ff6600;"><strong>CGジョブトレーナー</strong></span>』とはどんな職業かと言うと、読んで字のごとくCGデザイナーのトレーニングをする人です。<br />
日本中にCGを教える専門学校や大学は数多く存在します。</p>
<p>しかし、CGプロダクションの作業フローを理解した上でカリキュラムを組む学校はそんなに多くないと思います。<br />
つい先日某専門学校を訪問させて頂いたときも、ゲームを意識したのかかなりのローポリゴンデータで作成された</p>
<p>キャラクターの静止画を見せてくる学生さんを多く見受けました。ゲーム会社さんの採用基準については詳しく分かりませんが、</p>
<p>弊社の様な映像プロダクション目線ではローポリゴンデータで作られた静止画作品はマイナスからの評価になってしまいます。</p>
<p>これまでも弊社では、新人教育と独自のワークフローを取り入れて新卒の方を多数育成して参りましたが、</p>
<p>デザイナーがデザイン業務の傍らで教育するのはあまり好ましい事とは言えません。</p>
<p>そこで、この度弊社では、新卒者または制作経験の浅いデザイナーにCG技術を教える『<span style="color: #ff6600;"><strong>CGジョブトレーナー</strong></span>』という職種を誕生させました。『<span style="color: #ff6600;"><strong>CGジョブトレーナー</strong></span>』は、DF独自のワークフローを理解し、後進にCG技術を教える事に特化した業種です。</p>
<ul>
<li>
<h4><span style="color: #ff00ff;">今まで教育現場で教えていたが、もっと制作現場に近い所で本当に役に立つテクニックを伝えていきたい方</span></h4>
</li>
</ul>
<ul>
<li>
<h4><span style="color: #ff00ff;">長年CG制作の最前線で頑張ってきたがそろそろ方向転換し、今後は自分が才能ある若者たちを育成する側に立ちたい方</span></h4>
</li>
</ul>
<ul>
<li>
<h4><span style="color: #ff00ff;"> CGに関してしか勉強してこなかった若者たちに社会人としての振る舞い、デザイナーとしての振る舞いを教えてあげたい方</span></h4>
</li>
</ul>
<p>そんな皆様のご応募をお待ちしております。<br />
詳細はこちらをご確認ください。<br />
<a href="http://www.dfx.co.jp/recruit/application/">http://www.dfx.co.jp/recruit/application/</a></p>
<p>最後までお付き合い頂きありがとうございました。</p>

]]></content:encoded>
			<wfw:commentRss>http://www.dfx.co.jp/dftalk/?feed=rss2&amp;p=4158</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>テクニカルスタッフ募集中！</title>
		<link>http://www.dfx.co.jp/dftalk/?p=4105</link>
		<comments>http://www.dfx.co.jp/dftalk/?p=4105#comments</comments>
		<pubDate>Tue, 28 Feb 2012 07:15:35 +0000</pubDate>
		<dc:creator>hiraku</dc:creator>
				<category><![CDATA[トピックス]]></category>

		<guid isPermaLink="false">http://www.dfx.co.jp/dftalk/?p=4105</guid>
		<description><![CDATA[DFでは現在 【ソフトウェアディベロッパー】 【massiveアーティスト(未経験可)】 【テクニカルディレクター】 等のテクニカルスタッフを絶賛大募集中です。 詳しくはこちらをご覧下さいませ。 ■ソフトウェアディベロッパー, massiveアーティスト ■テクニカルディレクター, アシスタントテクニカルディレクター 皆様のご応募をお待ちしております！！]]></description>
			<content:encoded><![CDATA[
<p>DFでは現在 【ソフトウェアディベロッパー】 【massiveアーティスト(未経験可)】 【テクニカルディレクター】 等のテクニカルスタッフを絶賛大募集中です。</p>
<p>詳しくはこちらをご覧下さいませ。<br />
<a href="http://www.dfx.co.jp/recruit/application/capture.php">■ソフトウェアディベロッパー, massiveアーティスト</a><br />
<a href="http://www.dfx.co.jp/recruit/application/index.php">■テクニカルディレクター, アシスタントテクニカルディレクター</a></p>
<p>皆様のご応募をお待ちしております！！</p>

]]></content:encoded>
			<wfw:commentRss>http://www.dfx.co.jp/dftalk/?feed=rss2&amp;p=4105</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>バグバグバグ・・・きい～～～～～～～</title>
		<link>http://www.dfx.co.jp/dftalk/?p=4096</link>
		<comments>http://www.dfx.co.jp/dftalk/?p=4096#comments</comments>
		<pubDate>Mon, 27 Feb 2012 06:30:18 +0000</pubDate>
		<dc:creator>nihonjung</dc:creator>
				<category><![CDATA[TECH TALK]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[fbx]]></category>
		<category><![CDATA[max]]></category>
		<category><![CDATA[maya]]></category>
		<category><![CDATA[MotionBuilder]]></category>
		<category><![CDATA[openEXR]]></category>
		<category><![CDATA[リニアワークフロー]]></category>

		<guid isPermaLink="false">http://www.dfx.co.jp/dftalk/?p=4096</guid>
		<description><![CDATA[お久しぶりです。新しいバイオハザードの制作で忙しい日々を送っているJです。 今回は弊社のメインツールであるMayaのバグの話をしたいと思います。 ■Render関連 　弊社もLinear Work Flow(以下LWF）に本格的に乗り出すこととなり、2011で支援し始めた 　Color Profile関連の検証を行い、導入を検討しました。 　今までは擬似的にGammaを利用して作業してきたので2011を使用してみると若干明るいなと 　思いつつも今までやってきた方法も擬似的なものだから結果が違うのだろうと 　プロジェクトを進めました。大手の会社が間違うはずがないと。 　が、ある日オートデスクから懺悔の告白がありました。 　実は2011のColor Profile(sRGB変換部分)にはバグがあります…2012では解決しています…と。 　それで社内のあるプロジェクトとバイオハザードの質感担当の部署は大慌てで 　2012にバージョンアップを行い、作業もある程度やり直すことになりました。 　ですが、少し時間が経ってまた見つかったのがOpenEXRのImage compressionの[PXR24]が 　使用できないバグでした。 　LWFの利点を生かすためにはOpenEXRの導入は必要不可欠という判断を元に容量も 　かなり必要とするので2011で全てのImage compressionを比較してもっとも効率がいいのは 　[PXR24]という結論を出し、シーンもそのように設定しました。 　が、2012ではImage compressionを[PXR24]にしても[B44]に出される始末…。問い合わせしてみたら 　これはMentalRayのバグなので次のバージョン（2013)ではないと直らないとの返事でした。 　それでまた急遽Image compressionの設定をZIPに変更するように現場のデザイナに 　指示ことになりました。デザイナの目が怖いなと思った時期でもあります。 　皆さんも気をつけてください。 　①Maya2011のColor Profile(sRGB変換部分)にはバグがあり、正しくレンダリングされない。2012では直っている。 　②Maya2011では使用可能だったOpenEXRのImage compression[PXR24]は、2012では[B44]で出される。 　まあ、これらはLWFを行うことがなければ気にする問題ではないので他の方は大きなダメージを 　受けないバグだと思います。 　逆にLWFで作業している方はもう一度確認をしたほうがいいと思います。 ■FBX関連 　・Maya 2012－カスタムアトリビュートがこない 　　2010や2011ではまったく問題なかったカスタムアトリビュートのImportですが、2012では 　　何故かできなくなっています。弊社のワークフローはMBでアニメーションの作業を行い 　　Mayaでそれを利用してカット作成をするようになっています。 　　今回MB上でカスタムアトリビュートを導入して必要情報をMaya上で使用することを 　　目論見ましたが見事に砕かれました。詳しく調べてなかった私のほうでも問題がありますが、 　　驚きなのは2011で普通にサポートしているカスタムアトリビュートさえもこないのには 　　涙を流すしかなかったです。3DSMAXのプラグインはそのカスタムアトリビュートをちゃんと読むんですよね…Mayaはスルーするのに… 　　急遽MB上でテキストで必要情報出してMaya上ではそのテキストで再現するといった 　　原始レベルで対応する方法しか取れませんでした。 　　まあ、このバグもカスタムアトリビュートを使用しなければまったく問題ないバグです。 　・MAX2012－システムを24FPSにしても何故か30FPSで読み込まれる 　　※これはバグなのか仕様なのか確認はしてないですが、個人的にはバグだと思って書いてます。 　　わけあって3DSMAXのFBX関連のスクリプトを書くことになりましたが、また見事に 　　やられました。手動でFBXファイルを読み込む分にはまったく問題がないのですが、 　　スクリプトで自動化をたくらむと落とし穴が待っています。 [...]]]></description>
			<content:encoded><![CDATA[
<p>  お久しぶりです。新しいバイオハザードの制作で忙しい日々を送っているJです。<br />
  今回は弊社のメインツールであるMayaのバグの話をしたいと思います。</p>
<p>  ■Render関連<br />
  　弊社もLinear Work Flow(以下LWF）に本格的に乗り出すこととなり、2011で支援し始めた<br />
  　Color Profile関連の検証を行い、導入を検討しました。<br />
  　今までは擬似的にGammaを利用して作業してきたので2011を使用してみると若干明るいなと<br />
  　思いつつも今までやってきた方法も擬似的なものだから結果が違うのだろうと<br />
  　プロジェクトを進めました。大手の会社が間違うはずがないと。<br />
  　が、ある日オートデスクから懺悔の告白がありました。<br />
  　実は2011のColor Profile(sRGB変換部分)にはバグがあります…2012では解決しています…と。<br />
  　それで社内のあるプロジェクトとバイオハザードの質感担当の部署は大慌てで<br />
  　2012にバージョンアップを行い、作業もある程度やり直すことになりました。</p>
<p>  　ですが、少し時間が経ってまた見つかったのがOpenEXRのImage compressionの[PXR24]が<br />
  　使用できないバグでした。<br />
  　LWFの利点を生かすためにはOpenEXRの導入は必要不可欠という判断を元に容量も<br />
  　かなり必要とするので2011で全てのImage compressionを比較してもっとも効率がいいのは<br />
  　[PXR24]という結論を出し、シーンもそのように設定しました。<br />
  　が、2012ではImage compressionを[PXR24]にしても[B44]に出される始末…。問い合わせしてみたら<br />
  　これはMentalRayのバグなので次のバージョン（2013)ではないと直らないとの返事でした。<br />
  　それでまた急遽Image compressionの設定をZIPに変更するように現場のデザイナに<br />
  　指示ことになりました。デザイナの目が怖いなと思った時期でもあります。<br />
  　皆さんも気をつけてください。</p>
<p>  　①Maya2011のColor Profile(sRGB変換部分)にはバグがあり、正しくレンダリングされない。2012では直っている。<br />
  　②Maya2011では使用可能だったOpenEXRのImage compression[PXR24]は、2012では[B44]で出される。</p>
<p>  　まあ、これらはLWFを行うことがなければ気にする問題ではないので他の方は大きなダメージを<br />
  　受けないバグだと思います。<br />
  　逆にLWFで作業している方はもう一度確認をしたほうがいいと思います。</p>
<p>  ■FBX関連<br />
  　・Maya 2012－カスタムアトリビュートがこない<br />
  　　2010や2011ではまったく問題なかったカスタムアトリビュートのImportですが、2012では<br />
  　　何故かできなくなっています。弊社のワークフローはMBでアニメーションの作業を行い<br />
  　　Mayaでそれを利用してカット作成をするようになっています。<br />
  　　今回MB上でカスタムアトリビュートを導入して必要情報をMaya上で使用することを<br />
  　　目論見ましたが見事に砕かれました。詳しく調べてなかった私のほうでも問題がありますが、<br />
  　　驚きなのは2011で普通にサポートしているカスタムアトリビュートさえもこないのには<br />
  　　涙を流すしかなかったです。3DSMAXのプラグインはそのカスタムアトリビュートをちゃんと読むんですよね…Mayaはスルーするのに…<br />
  　　急遽MB上でテキストで必要情報出してMaya上ではそのテキストで再現するといった<br />
  　　原始レベルで対応する方法しか取れませんでした。<br />
  　　まあ、このバグもカスタムアトリビュートを使用しなければまったく問題ないバグです。</p>
<p>  　・MAX2012－システムを24FPSにしても何故か30FPSで読み込まれる<br />
  　　<i>※これはバグなのか仕様なのか確認はしてないですが、個人的にはバグだと思って書いてます。</i><br />
  　　わけあって3DSMAXのFBX関連のスクリプトを書くことになりましたが、また見事に<br />
  　　やられました。手動でFBXファイルを読み込む分にはまったく問題がないのですが、<br />
  　　スクリプトで自動化をたくらむと落とし穴が待っています。<br />
  　　システムのFPSを24FPSに設定してもMAXScriptではFBXのデータを読み込むと見事に<br />
  　　Rotationの情報だけが30FPSで読み込まれます。厄介なのがTranslationとScaleは24FPSで<br />
  　　読み込まれるから間違いがわかりづらいことです。<br />
  　　この問題はMAX単体での作業ではまったく問題ないですが、弊社のようにMayaがメインツールで<br />
  　　エフェクトチームが3DSMAXを使用している状況では恐ろしい問題です。<br />
  　　0.01度違いでもカメラから遠く離れたものは大きなずれになりますから。<br />
  　　小規模のプロジェクトはFBXの読み込みを手動で行えばすむことなので問題ないですが、<br />
  　　カットの数が多い大きなプロジェクトを頻繁に扱う弊社にとっては自動化を図る<br />
  　　ワークフローではこれは大きな問題になりかねません。<br />
  　　そもそもTranslationとScaleだけ24FPSでくるのはバグなのではと個人的には思いますが…<br />
  　　唯一の解決策はFBXを読み込むときに24FPSでResamplingすることですが、データが<br />
  　　増えることになります。キーがスタートとエンドの２個しか打たれてないのが全フレーム打たれることになるので。<br />
  　　あ、それとFBXMAX2012のプラグインはカメラに関するバグもありますので最新版にバージョンアップしてください。<br />
  　　Mayaからだした情報が正しくこないので。<br />
  　　勿論、3DSMAX単体で手動で作業する分にはまったく問題ないバグです。</p>
<p>  まったく問題のない（？）バグの話ばっかり書いて申し訳ないです。<br />
  次回はもっと面白くて為になる情報をもって皆さんにあいたいと思います。<br />
  次のMayaにはバグがなくなりますように…</p>

]]></content:encoded>
			<wfw:commentRss>http://www.dfx.co.jp/dftalk/?feed=rss2&amp;p=4096</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MotionBuilder2012のGUIはQtで作られてるのにスクリプトでPyQtが使えないっておかしくね？</title>
		<link>http://www.dfx.co.jp/dftalk/?p=4018</link>
		<comments>http://www.dfx.co.jp/dftalk/?p=4018#comments</comments>
		<pubDate>Mon, 13 Feb 2012 06:00:10 +0000</pubDate>
		<dc:creator>dfx_dftalk</dc:creator>
				<category><![CDATA[TECH TALK]]></category>
		<category><![CDATA[MotionBuilder]]></category>
		<category><![CDATA[pyqt]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[qt]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[UI]]></category>

		<guid isPermaLink="false">http://www.dfx.co.jp/dftalk/?p=4018</guid>
		<description><![CDATA[PyQtとはクロスプラットフォームＧＵＩツールキットのQtをPythonで使えるようにしたものです。似たようなものにPySideがあります。訳すと横乳ですね。なんか大きそうな感じです。PyQtは「パイキュート」と読むらしいです。なんか小さそうな感じです。 皆様こんにちは、尻派のikaです。 今回はMotionBuilder(以下MB)のスクリプトで小さい方(PyQt)の使い方を紹介します。 PyQtをインストール MBのPythonのバージョンは2010が2.6.1、2011と2012が2.6.4なので、Python2.6用のPyQtをインストールします。 PyQtは以下のURLからダウンロード出来ます。 http://www.riverbankcomputing.co.uk/software/pyqt/download もしかしたら、2010では最新バージョンは使えないかもしれません。PyQt4.5.3では動作確認出来ましたが、4.7では文字化けしたエラーが出て実行出来ませんでした。 2011と2012は両バージョンで動作確認出来ました。 MotionBuilderでPyQtを使う方法 二通りの方法があります。二つともPythonのサーチパスにPyQtのパスを追加するものです。PyQt以外(例えば自作のライブラリなど)もこの方法が使えます。 一つ目は、MotionBuilderのPythonのファイルを書き換える。必ずバックアップを取ってください。 (MBインストールフォルダ)/bin/config/Python/pyfbsdk_init.py 上のファイルから以下の記述を探します。 [python] path.extend(sys.path) sys.path = path [/python] それの前に一行追加します。 こんな感じ [python] path.append(&#8220;C:/Python26/Lib/site-packages&#8221;) path.extend(sys.path) sys.path = path [/python] 二つ目の方法は、実行コードにPyQtのパスを書き込む。 以下の三行をコードの頭に追加する。[python] import sys sPyQtPath = &#8220;C:/Python26/Lib/site-packages&#8221; if not sPyQtPath in sys.path : sys.path.append(sPyQtPath) [/python] 簡単なコードでPyQtを使えるようになったか確認します。 [python] from PyQt4.QtGui import * w = QWidget() w.show() [/python] [...]]]></description>
			<content:encoded><![CDATA[
<p>PyQtとはクロスプラットフォームＧＵＩツールキットのQtをPythonで使えるようにしたものです。似たようなものにPySideがあります。訳すと横乳ですね。なんか大きそうな感じです。PyQtは「パイキュート」と読むらしいです。なんか小さそうな感じです。<br />
皆様こんにちは、尻派のikaです。<br />
今回はMotionBuilder(以下MB)のスクリプトで小さい方(PyQt)の使い方を紹介します。</p>
<h2>PyQtをインストール</h2>
<p>MBのPythonのバージョンは2010が2.6.1、2011と2012が2.6.4なので、Python2.6用のPyQtをインストールします。<br />
PyQtは以下のURLからダウンロード出来ます。</p>
<p>http://www.riverbankcomputing.co.uk/software/pyqt/download</p>
<p>もしかしたら、2010では最新バージョンは使えないかもしれません。PyQt4.5.3では動作確認出来ましたが、4.7では文字化けしたエラーが出て実行出来ませんでした。<br />
2011と2012は両バージョンで動作確認出来ました。</p>
<h2>MotionBuilderでPyQtを使う方法</h2>
<p>二通りの方法があります。二つともPythonのサーチパスにPyQtのパスを追加するものです。PyQt以外(例えば自作のライブラリなど)もこの方法が使えます。</p>
<p>一つ目は、MotionBuilderのPythonのファイルを書き換える。<span style="color: #ff0000;"><strong>必ずバックアップを取ってください。</strong></span><br />
(MBインストールフォルダ)/bin/config/Python/pyfbsdk_init.py<br />
上のファイルから以下の記述を探します。<br />
[python]<br />
    path.extend(sys.path)<br />
    sys.path = path<br />
[/python]</p>
<p>それの前に一行追加します。<br />
こんな感じ<br />
[python]<br />
    path.append(&#8220;C:/Python26/Lib/site-packages&#8221;)<br />
    path.extend(sys.path)<br />
    sys.path = path<br />
[/python]</p>
<p>二つ目の方法は、実行コードにPyQtのパスを書き込む。<br />
以下の三行をコードの頭に追加する。[python]<br />
import sys<br />
sPyQtPath = &#8220;C:/Python26/Lib/site-packages&#8221;<br />
if not sPyQtPath in sys.path : sys.path.append(sPyQtPath)<br />
[/python]</p>
<p>簡単なコードでPyQtを使えるようになったか確認します。<br />
[python]<br />
from PyQt4.QtGui import *<br />
w = QWidget()<br />
w.show()<br />
[/python]</p>
<p>何もないウインドウが表示されたら成功です。</p>
<h2>QtDesigner</h2>
<p>QtDesignerの詳しい使い方は<a href="http://www.dfx.co.jp/dftalk/?p=2934" target="_blank">takさんの記事</a>にあるので、今回はMBでの.uiファイルの使いかたです。</p>
<p>QtDesignerを起動します。<br />
GUIの雛形を選びます。<br />
<img src="file:///Z:/TechTalk_Memo/img_new_form.png" alt="" /><a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/02/img_new_form.png" class="highslide-image" onclick="return hs.expand(this);"><img class="alignnone size-medium wp-image-4019" title="img_new_form" src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/02/img_new_form-300x274.png" alt="" width="300" height="274" /></a><br />
通常はWidgetでいいと思います。メインメニューやステータスバーが欲しい場合はMainWindowを選択すれば良いと思います。</p>
<p>PushButtonを一つ追加。<br />
<a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/02/img_AddPushButton.png" class="highslide-image" onclick="return hs.expand(this);"><img class="alignnone size-medium wp-image-4021" title="img_AddPushButton" src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/02/img_AddPushButton-300x151.png" alt="" width="300" height="151" /></a></p>
<p>シグナルとスロットの追加<br />
<a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/02/img_change_signals_slots.png" class="highslide-image" onclick="return hs.expand(this);"><img class="alignnone size-medium wp-image-4022" title="img_change_signals_slots" src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/02/img_change_signals_slots-300x218.png" alt="" width="300" height="218" /></a></p>
<p>スロットにonPushButton()を追加。<br />
<a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/02/img_signals_slots_of_form.png" class="highslide-image" onclick="return hs.expand(this);"><img class="alignnone size-medium wp-image-4023" title="img_signals_slots_of_form" src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/02/img_signals_slots_of_form-300x271.png" alt="" width="300" height="271" /></a></p>
<p>Signal/Slot Editorでシグナルとスロットを関連付ける。<br />
<a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/02/img_signals_slots_editor.png" class="highslide-image" onclick="return hs.expand(this);"><img class="alignnone size-medium wp-image-4024" title="img_signals_slots_editor" src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/02/img_signals_slots_editor-300x250.png" alt="" width="300" height="250" /></a></p>
<p>FirstPyQt.uiという名前で保存します。</p>
<p>MBでスクリプトを書きます。Window＞Python Editor<br />
FBSDKのモジュールをインポート<br />
[python]<br />
from pyfbsdk import *<br />
[/python]</p>
<p>PyQtのモジュールをインポート<br />
[python]<br />
from PyQt4.QtCore import *<br />
from PyQt4.QtGui import *<br />
from PyQt4.uic import loadUi<br />
[/python]</p>
<p>クラスを作る<br />
[python]<br />
class Main(QWidget) :<br />
    def __init__(self) :<br />
        QWidget.__init__(self)<br />
        self.ui = loadUi(&#8220;(保存した場所)/FirstPyQt.ui&#8221;, self)<br />
        self.ui.show()<br />
[/python]</p>
<p>継承元は.uiファイルをテキストエディタで開いて確認<br />
<a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/02/img_classname.png" class="highslide-image" onclick="return hs.expand(this);"><img class="alignnone size-full wp-image-4025" title="img_classname" src="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/02/img_classname.png" alt="" width="265" height="96" /></a></p>
<p>widgetのclassアトリビュートに書いてあるクラスを継承します。</p>
<p>スロットをメソッドにしてクラスに追加<br />
[python]<br />
    def onPushButton(self) :<br />
        o = FBModelNull(&#8220;null&#8221;)<br />
        o.Show = True<br />
[/python]</p>
<p>最後にクラスをインスタンス化<br />
[python]<br />
Main()<br />
[/python]</p>
<p>実行すると、ボタンが一つあるウインドウが開きます。ボタンを押すとヌルオブジェクトが追加されます。<br />
エラーが出ていないのにうまく動かない場合はもう一度スクリプトを実行してみて下さい。前回のエラーやprintで出力したものが表示されます。</p>
<h2>PyQtでスタンドアローンツール</h2>
<p>ついでにPyQtでスタンドアローンのツールを作る方法も書いておきます。<br />
先ほど作成した.uiファイルを使います。<br />
[python]<br />
import sys<br />
from PyQt4.QtCore import *<br />
from PyQt4.QtGui import *<br />
from PyQt4.uic import loadUi</p>
<p>class Main(QWidget) :<br />
    def __init__(self) :<br />
        QWidget.__init__(self)<br />
        self.ui = loadUi(&#8220;(保存した場所)/FirstPyQt.ui&#8221;, self)<br />
        self.ui.show()<br />
    def onPushButton(self) :<br />
        print &#8220;Pushed&#8221;</p>
<p>app = QApplication(sys.argv)<br />
Main()<br />
sys.exit(app.exec_())<br />
[/python]<br />
MB版との違いはpyfbsdkモジュールが無いのと、最後に何やら増えてるところです。<br />
(pyfbsdkモジュールが無くなったので、onPushButtonメソッドの内容も変わってます。)<br />
最後の三行はPyQtを使うときのお約束みたいなものなので、特に気にしなくていいと思います。</p>
<h2>おまけ</h2>
<p><a href="http://www.dfx.co.jp/dftalk/wp-content/uploads/2012/02/TechTalk2012_MBPyQt_Sample.zip">サンプルダウンロード</a><br />
(MBインストールディレクトリ)\bin\config\Scripts にファイルをコピーしてから使用して下さい。</p>
<table>
<tr>
<td>
TechTalk2012_MBPyQt.ui
</td>
<td>
QtDesignerで作成したUIファイル
</td>
</tr>
<tr>
<td>
TechTalk2012_MBPyQt.py
</td>
<td>
MB用スクリプト<br />
PyQtを「C:\Python26」、MBを「C:\Program Files\Autodesk\MotionBuilder 2012」にインストールされていることを前提にしてあります。<br />
sPyQtPah(11行目)、sUiPath(18行目) を自分の環境にあわせてフルパスで書き換えて下さい。
</td>
</tr>
<tr>
<td>
TechTalk2012_PyQt.py
</td>
<td>
スタンドアローン版<br />
うまく動かない場合は、sUiPath(13行目) を自分の環境にあわせてフルパスで書き換えてみて下さい。
</td>
</tr>
</table>
<p><a href="http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/index.html">PyQtリファレンスガイド</a></p>

]]></content:encoded>
			<wfw:commentRss>http://www.dfx.co.jp/dftalk/?feed=rss2&amp;p=4018</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>thinkingParticle ユーザー事例</title>
		<link>http://www.dfx.co.jp/dftalk/?p=4010</link>
		<comments>http://www.dfx.co.jp/dftalk/?p=4010#comments</comments>
		<pubDate>Tue, 07 Feb 2012 03:10:30 +0000</pubDate>
		<dc:creator>dfx_dftalk</dc:creator>
				<category><![CDATA[KOHO lounge]]></category>
		<category><![CDATA[KOHO]]></category>
		<category><![CDATA[インタビュー]]></category>
		<category><![CDATA[エフェクト]]></category>
		<category><![CDATA[ニュース]]></category>
		<category><![CDATA[広報]]></category>

		<guid isPermaLink="false">http://www.dfx.co.jp/dftalk/?p=4010</guid>
		<description><![CDATA[株式会社ティー・エム・エスさんのユーザー事例ページにて、映画「鉄拳ブラッド・ベンジェンス」の エフェクトチームのインタビュー記事が掲載しています！ ここでは、映画に使用されたthinkingParticleについて語っています。 また、メイキング動画もアップしていますので、ぜひご覧ください。]]></description>
			<content:encoded><![CDATA[
<p>株式会社ティー・エム・エスさんのユーザー事例ページにて、映画「鉄拳ブラッド・ベンジェンス」の<br />
エフェクトチームのインタビュー記事が掲載しています！<br />
ここでは、映画に使用されたthinkingParticleについて語っています。</p>
<p>また、メイキング動画もアップしていますので、ぜひ<a href="http://www.tmsdownload.com/tmsblog/?p=223&#038;preview=true">ご覧ください</a>。</p>
<p><iframe width="560" height="315" src="http://www.youtube.com/embed/Zg5HjEMBmo4" frameborder="0" allowfullscreen></iframe></p>

]]></content:encoded>
			<wfw:commentRss>http://www.dfx.co.jp/dftalk/?feed=rss2&amp;p=4010</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

