こないだ始めて、ProResでくださいっと言われておめめが点になりました。
映像制作会社はMacが多いのか、ProResは結構使われているっぽい?

Macからしか出せないと聞いたので、Macからだしましたが
席移動したり、データコピーしたりめんどくさいのでWinでできないか調べてみました。

FFmpegというソフトを作って、ProRes / ProRes422でエンコードすることができます。
FFmpeg(エフエフエムペグ)は、動画・音声を変換することのできるUNIX生まれのフリーソフトウェアです。

<公式サイト>
http://ffmpeg.org/

公式サイトではバイナリ形式(EXE)がないので、以下のサイトからDLすると幸せになれます。
http://ffmpeg.zeranoe.com/builds/
http://blog.k-tai-douga.com/

まず、ProRes / ProResが使えるか調べるには、
EXEと同じディレクトリに移動するか、適当なバッチファイルを作り以下のコマンドを実行します。

ffmpeg -codecs
pause

「proress」が「ProRes」で、「prores_anatoliy」が「ProRes422」です。

ProResでエンコードするには、AEで一旦画像シーケンスか、無圧縮AVIなどを作り変換します。
以下は、test.movをそれぞれエンコードするサンプルバッチコマンドです。

ProRes

ffmpeg -i test.mov -vcodec prores prores.mov

ProRes422

ffmpeg -i test.mov -vcodec prores_anatoliy prores422.mov

細かく色々設定したい場合は、「ffmpeg オプション」などぐぐってみてください。

が!ライセンスとか色々あるようです・・・(;´Д`)
http://www.icubic.jp/blog/?p=301

 

前回に続き、もう少し変数と型について。

前回書いた、数値系の型「int」と「float」以外ついて。

long ( 長整数 )
非常に大きな整数を扱います。
pythonでは桁が多くなると、intからlongに変わります。
数値の末尾に「l」又は「L」を付けますがなくてもOKです。(ただ、付けるならば見づらいのでLをオススメします。)

a = 9900000000000000000L

complex ( 虚数 )
虚数は実数部が 0.0 の複素数です。
数値の末尾に「j」または「J」を付けます。

a = 3.14j

前回書いた、シーケンス型「str」と「unicode」以外ついて。

list ( リスト )
リストは、複数のオブジェクトをまとめて管理することができます。
括弧[]で囲んだ中にオブジェクトをカンマ(,)で区切って記述します。

a = [ 1, 2, 3, "a", "b", "c", u"あ", u"い", u"う" ]

リストオブジェクトから、インデックスを指定して要素を取得するには次の書式を使います。
リストオブジェクト[インデックス]

実際に、リスト「a」の3番目の要素を取り出してみます。
インデックスは0から数えるので、3番目の要素は2になります。

print a[2]

tuple ( タプル ) 
リスト型とは共通している部分が多いのですが、タプルでは一度作成されたオブジェクトの要素を変更できません。
括弧()で囲んだ中にオブジェクトをカンマ(,)で区切って記述します。(省略も可能です。)

a = ( 1, 2, 3, "a", "b", "c", u"あ", u"い", u"う" )
b = 1, 2, 3, "a", "b", "c", u"あ", u"い", u"う"

マップ型

dict ( 辞書 )
辞書型はシーケンス型と同じですが、要素に順序はありません。
インデックスで要素を取り出すことは出来ますが、各要素に「キー」と呼ばれる識別子を登録します。

辞書型のオブジェクトを作成するには次のように行います。
括弧{}で囲んだ中に要素をカンマ(,)で区切って記述し、値とキーはコロン(:)で区切って記述します。

a= { "year":2012, "month":5, "day":9 }

各要素を取り出してみましょう。
リストではインデックスでしたが、辞書ではキーを使用します。

print a["year"]
print a["month"]
print a["day"]

まとめると、Pythonの型はこんな感じです。

数値型

  • 整数( int )
  • 長整数( long )
  • 浮動小数点( float )
  • 虚数( complex )

シーケンス型

  • 文字列( str / string )
  • ユニコード文字列( unicode )
  • リスト( list )
  • タプル( tuple )

マップ型

  • 辞書( dict )

では早速、よく使うリストを使ってやってみましょう。
選択しているノードを取得し、1番目のノードのトランスフォームを変更してみます。

選択しているノードを取得するコマンドは、「ls」です。
トランスフォームの変更するコマンドは、「xform」です。

まず、Mayaのコマンドが使えるようにモジュールをインポートします。

import maya.cmds as cmds

次に、選択したノードを取得し変数に代入します。
「ls」コマンドを使用し、フラグ「sl」をオンにして、選択しているオブジェクトを取得します。

import maya.cmds as cmds
selecteds = cmds.ls( sl=True )

次に、選択したノード の1番目のトランスフォームを変更します。
今回は、位置を替えてみようと思います。
位置を指定するフラグは「translation(t)」で、「t=[ x座標, y座標, z座標 ]」と書きます。
適当なノードを作成し、選択した状態で実行してください。

import maya.cmds as cmds
selecteds = cmds.ls( sl=True )
cmds.xform( selecteds[0], t=[10,10,10] )

宿題

選択したノードの2番目のトランスフォームを以下のように変更してください。
位置 が、x=10, y=10, z=10
回転が、 x=0, y=45, z=0
スケールが、x=2, y=2, z=2

ヒント
回転のフラグは「rotation(ro)」
スケールのフラグは「scale(s)」

注意
実行前に、適当なノードを2つ以上作成し
2つ以上選択した状態で実行してください。

 

Gurenを更新しましたっ!
詳しくは、コチラへ

http://takkun.nyamuuuu.net/guren2/update-2012-05-07/

 

前回はとりあえずPythonを実行して、Cubeを作成しました。
今回は、変数です。(ちょっと頭がクラっとするかもしれません:P)

Pythonの変数は、文字列や数値などのオブジェクトに付けた名前です。
変数を使ってデータをやりとりして、プログラムを組んでいきます。
MELには変数の宣言がありましたが、Pythonにはありません。

さっそく、変数を定義してみましょう。
変数の定義は、「変数名 = オブジェクト 」と書きます。

a = 1
b = 1.0
c= "a"

変数名を決める時に、いくつかルールがあります。
これを守らないで変数を定義すると、エラーします。

  • 使用できる文字は、英数字と_ ( アンダーライン )です。
  • 先頭(1文字目)に数字は使えません。
  • 大文字・小文字の区別があります。(aとAは別物になります。)
  • 変数名に、以下の語句(予約語)は使えません。
    and、 as、 assert、 break、 class、 continue、 def、 del、 elif、 else 、
    except、 exec、 finally、 for、 from、 global、 if、 import、 in、 is、
    lambda、 not、 or、 pass、 print、 raise、 return、 try、 while、 with、 yield

予約語とは、仕様で定められた、変数名や関数名として定義できない単語の事です。
予約語を調べるには、調べるには以下の文を実行します。
Pythonのバージョン(Mayaのバージョン)で、微妙に変わるので注意してください。

import keyword
print keyword.kwlist

ダメではないけど、慣習的なもので不都合がある変数名もあります。

  • 先頭にアンダーバーが付いた変数名
  • 先頭にアンダーバーが2つ続いた変数名
  • 大文字で始まる変数名

×ダメな変数の例

3d = 1
maya-data = 1
from = "maya"

好ましくない変数の例

_maya = 2013
__maya = 2013
Maya = 2013

変数は、式の中で使用することが出来ます。

a = 1
b = a + 10

上記では変数「a」に数値の「1」を代入しています。
次の行で変数「a」と数値の「10」を足し算した結果「11」を変数「b」に代入しています。

変数と変数の演算も、OKです。

a = 1
b = 10
c = a + b

ただし、参照しているオブジェクトの種類が違うとタイプエラー(TypeError)します。

a = 1
b = "a"
c = a + b

参照しているオブジェクトの種類を、「」といいます。
沢山ありますが、よく使うものを簡単に書きます。

int
整数を扱います。

a=1
b=-100000
c=0

float
少数を扱います。

a=3.14
b=-0.009
c=3.1e-4

bool
真・偽を扱います。「ONかOFF」などに使います。

a=True
b=False

str
文字列を扱います。定義する場合は、”(ダブルクオーテーション)か、’(シングルクォーテーション)で囲います。

a="abcdefg"
b="123567890"
c='abcdefg'
d='123567890'

unicode
文字をUnicodeとして扱います。
日本語を扱う場合は、コチラを使用します。
str型にuをつけます。

a=u"にほんご"
b=u'まやーくそー'

早速、変数を使ってやってみましょう!
アンビエントライトを作成し、レイトレースシャドウをONにします。

まず、Mayaのコマンドが使えるようにモジュールをインポートします。

import maya.cmds as cmds

次に、アンビエントライトを作成します。
アンビエントライトの作成コマンドは、「ambientLight」です。
これを実行すると、アンビエントライトがポツンっと作られます:P

import maya.cmds as cmds
cmds.ambientLight()

ここで、一度ヘルプを見てみましょう。(ヘルプは、コチラ )

赤枠で囲んだ部分に、戻り値の事が書いてあります。
戻り値とは、「コマンドを実行した結果が戻ってくる値」の事です。
コマンド「ambientLight」を実行すると、「string型(文字列)のライト シェイプの名前」が戻ってくると書いてあります。

早速、ambientLightを実行した結果を表示してみます:D
実行すると、スクリプトエディタの一番下の行に「ambientLightShape1」っと表示されます。

import maya.cmds as cmds
print cmds.ambientLight()

ここで、やっと変数の登場です。
ambientLight」の戻り値を、変数に代入します。

import maya.cmds as cmds
lightShape = cmds.ambientLight()

変数「lightShape」に、作成したアンビエントライトのシェイプ名を代入しとっておき
以降のアトリビュートの変更をする際に使用します。

レイトレースシャドウをONにします。
アトリビュートに値を設定するには、コマンド「setAttr」 を使用します。(ヘルプは、コチラ
基本的な書式は、「setAttr( “ノード名.アトリビュート名”, 値 )」です。

レイトレースシャドウのアトリビュート名は、「useRayTraceShadows」です。
このアトリビュートに、1を設定すればONになり、0を設定すればOFFになります。

import maya.cmds as cmds
lightShape = cmds.ambientLight()
cmds.setAttr( lightShape+".useRayTraceShadows", 1 )

宿題

アンビエントライトを作成し、User Ray Trace ShadowsをONにし、
Shadow Rayを48、Ray Depth Limitを10にしてください。

ヒント
Shadow Rayのアトリビュート名は、「shadowRays」
Ray Depth Limitのアトリビュート名は、「rayDepthLimit」

 

直感的にパーティクルを編集するソフトのご紹介です。

アーティストでは苦手な人が多いプログラムを使わず、ペンタブ使って手書き感覚でパーティクルを編集することが出来ます。
このあたりがいらない!とか、このへんをもうちょっと、こうして!とかに対応出来ると思います。
zBrush のパーティクル版のような感じです。

Spartaの開発資金を集めるプロジェクトを始めましたようですので、ご興味あるかたは支援してみてはいかがでしょうか!?

支援ページ
http://camp-fire.jp/projects/view/237

プロジェクトのWEBサイト
https://www.facebook.com/sparta.project

 
  • タスク設定にモードを追加しました。
    Split: 指定のタスク数に分割します。
    Size : 1つのタスクサイズを、指定された数にします。
  • Splitの処理を変更しました。
  • タイムアウトを追加しました。

ダウンロード
submitJob_0.18.zip

 

さっそく、動かしてみましょう。
右下にあるScriptEditorのアイコンをクリックしてください。

ウインドウがでてきたら、Pythonのタブをクリックします。


お決まりのHello Worldを表示してみましょう。
Script Editorに、以下の分を記述してください。

上部にある、早送りみたいなボタンをクリックし実行します。
その隣の再生みたいなボタンを押すと、下部に書いた文が消えちゃいますのでご注意ください。

毎回クリックして実行するのが面倒な場合は、Ctrl+Aを押して選択状態にし、Ctrl+Enterで実行できます。
Ctrl+Enterだけだと、下部に書いた文が消えますのでご注意を。


Hello Worldなんてプリントしたって、面白くもなんともないので
早速Mayaでポリゴンのキューブを作成してみましょう。

1行目の「import maya.cmds」は、part1でも触れたMayaへアクセスする為のモジュールです。
この行がないとMayaへアクセスする為のコマンドが使用できません。

2行目の「maya.cmds.polyCube()」は、ポリゴンのキューブを作成するコマンドです。
記述が終わったら、早速実行してみましょう。polyCube1が作成されます。


ここで、「import maya.cmds」に 一工夫します。
Mayaへアクセスする為のコマンドを記述するたびに「maya.cmds.~」と書くのはとても大変です。
長い名前や、複雑な階層のモジュールへアクセスしやすくする為に「as」を使用します。

1行目の、「import maya.cmds as cmds」で、「maya.cmds」が「cmds」でアクセスできるようになりました。
例えば「import maya.cmds as c」とすれば、以降「c」でアクセスできるようになります。

2行目の、「maya.cmds.polyCube()」は、「cmds」でアクセスできるようになったので「cmds.polyCube()」となります。


次は、キューブを作成する際に、色々オプションを指定してみましょう。

まず、オンラインヘルプを開いてください。
テクニカルドキュメント」の中にある、「Pythonコマンド」をクリックします。

サブストリングで検索の欄に、「polyCube」を入力し検索結果から「polyCube」をクリックしてください。

polyCubeのオプションの一覧が掲載されています。
ページ下部には、サンプルコードもありますので参考に良いと思います。

まず、「cubeGeo」という名前でキューブを作成するように変更してみましょう。
名前を指定するフラグは「name(n)」 で、カッコの中はショート名です。
「name=”名前”」か「n=”名前”」で、作成時の名前を指定できます。

作ったキューブを削除して、サブディビジョンの設定もしてみましょう。
サブディビジョンの設定は、 subdivisionsX(sx)、subdivisionsY(sy)、subdivisionsZ(sz)です。
Xの分割を10,Yの分割を2、Zの分割を1 で作ってみます。

文字列を指定する時は、”(ダブルクオーテーション)で囲い
数値を指定する場合は、”で囲いません。 

フラグとフラグの間は、,(コンマ)で区切ります。

import maya.cmds as cmds
cmds.polyCube( n="PolyCubeGeo",  sx=10, sy=2, sz=1 )

<宿題>

幅10,高さ20、デプス1
サブディビジョン(X)5、 サブディビジョン(Y)10、サブディビジョン(Z)1
名前がPolyCubeGeoのキューブを作成してください。

答えは次のページ。

 

Maya2013で追加された、ATOMのレビューです。
より効率的にアニメーションを共有し、再利用することができるようです。
Characterしたり、ツールでカバーしていた事がATOMだけでも完結できるケースが有りそうです。


まず、ATOM Templateを作成します。
このテンプレートを元に、ExportやImportを簡易的にする事ができます 。

全身のコントローラ(ここではボーン)を選択します。

Animate→ATOM→Create ATOM Templateを実行します。

上記のような設定をして、Applyを押します。
その後、Create Viewにチェックを入れて各部位を選び、Viewに適切な名前を入れてApplyをしていきます。

例)左足


アニメーションをエクスポートします。

Animate→ATOM→Export Animationを実行します。

AtomFileに、出力先を指定します。
Includeで、出力したい項目にチェックを入れます。
HierarchyをTemplateにして、Templateファイルを指定します。
ViewはNoneを選んでください。(None以外を選ぶと、Viewに登録した部位が出力されます。)
TimeRangeなどは、好きに設定してください。

キャラクターのルートを選んで、Applyを実行します。


アニメーションをインポートします。

Animate→ATOM→Import Animationを実行します。

AtomFileに、エクスポートしたATOMファイルを指定します。
Import Methodは、Templateを選びます。
Match Methodは、Stringを選びます。(コレ以外は、Viewを選んでインポートできませんでした。)
Templateに、ATOM Templateを指定してください。
Viewに、インポートしたい部位を選んでください。(ここでは、左腕のみをインポートします。)
Replace、Time rangeは、適切に設定してください。
Search、Replace、Add Prefix、Add Suffixは、適切に設定してください。(何も変更がない場合は、空欄にします。)

キャラクターのルートを選んで、Applyを押します。

すると、Templateで、LeftArmとして保存した部位にアニメーションがインポートされます。

Noneを選んでインポートすると、全身にアニメーションがインポートされます。
(None=全て ではなく、CreateViewにチェックを入れずに作成した箇所)


置換のテスト。
Import MethodがTemplateだとSearch、Replace、Add Prefix、Add Suffixが反映されませんでした
Map Fileについては、ドキュメンが見つからなかったので放置。
Import Methodが、SelectedかHierarchyだと大丈夫そうです。

spineを、chainに変えてインポートテスト。

ルートを選んで実行。Templateでなければ、無事にアニメーションがきました。

 

スクリプトなんてさっぱり!っていう人も、MELをかけるけどPythonは・・・っという人にも
Pythonをやろうよ!っという事で、色々書いてみたいと思います。

Python(パイソン)とは、オランダ人のグイド・ヴァンロッサムさんが作ったオープンソースのプログラミング言語です。
日本語処理も標準で可能で、多くのプラットフォーム動作し、豊富なドキュメント、豊富なライブラリがあります。

Maya以外にも、XSI、Max(要プラグイン)、Houdini、NukeなどほとんどのDCCで使えるようになりました。
今からMELを勉強して、他のソフトでツール作る時にまた違う言語を勉強してっというのがなくなり、
各ソフトへアクセスするためのモジュール (機能)が異なるのでアレですが、殆どのソフトでツールが作れます。

標準モジュール(機能)では、文字列処理数値と数学モジュールインターネット上のデータの操作構造化マークアップツール暗号関連のサービスデータ圧縮とアーカイブ汎用オペレーティングシステムサービスプロセス間通信とネットワークインターネットプロトコルとその支援、など基本的なものがひと通り揃っています。

また、別途インストールして使用するモジュール(機能)もあります。
例えばPython Imaging Library(PIL)をインストールすれば、Pythonから画像操作が簡単に行えるようになります。
他にも有名なのは、PyQT/PySide(GUI)、Numpy(大規模な多次元配列や行列)、SciPy(科学技術計算)、PyODE(運動力学)、などあります。

他にMELと比べると、多次元配列が使用できる、配列の中に文字列・数値を混在できる、オブジェクト指向(OOP)、APIが使用できる 、など高度な事が簡単にできます。

Mayaは、まだまだMELが残っているので複雑なところですが
これからやる!って方も、MELが書ける人も、Pythonをやっていった方が幸せになれると思います。

 

さっそく2013を触ってみました。
Twitterでもぎゃーぎゃー騒ぎましたが、メモ的な感じで書きます。
試して欲しい事とか、教えていただければ可能な限りやってみたいと思います(`・ω・´)ゞ
2011・2012のあのバグはどぅー?とか・・・


Alembic Cache import and export

内容はMaya2012SAPと同じで、メッシュとトランスフォーム、カメラがImport Exportできます。
パーティクル出せなくて、nParticleはメッシュに変換すれば、シーケンシャルジオメトリーでImport Exportできます。
マテリアルもなくなります。


GPU Cache import and export

ビューポートの表示が、めちゃめちゃ早くなります!
GPU Cacheでインポートした場合はマテリアルアサインやオブジェクトの編集など出来ません。
一見Meshのようですが、gpuCacheというノードになります。
アニメーターのBGリファレンスや、ブラストを取るときに便利そう?
イマイチ使い方が見つかりません。


Node Editor

内容はMaya2012SAPと同じです。
標準搭載になったので、使用頻度を増やしていきたい感じです。
HyperShadeに慣れすぎたのか、いまいちしっくりこないんですよねコレw


File referencing options in the Outliner

アウトライナーでのリファレンスに対するオプションが増えました。
HyperGraphとかHyperShadeとかにも、こういうの欲しいのに・・・
普段アウトライナー使う人は、色々便利そうです。


Allow Referenced Animation Curves to be Edited

リファレンスにあるアニメーションカーブの編集が、できるようになりました!
ちょっといじりたい時に、アニメーションファイルで修正するのがめんどかったので、これは嬉しいw
PreferencesのSettings→Animation→Allow Referenced Animation Curves to be Editedにチェックしないと編集できないから要注意。デフォはOFFです。


Retime animation

アニメのタメツメ的な感じで、調整できるのがいいです。
ここから~ここを、こっちに寄せるみたいな具合です。
SnapMarkersOnFrameにチェックすれば、キーが少数フレームになりません。デフォはOFF。


New Playblast features

やっと?QuickTime系のブラストが取れるようになりました。
ブラストのオプションの、formatをqtにして、好きなコーディックを選んでください。
H.246とか一部のコーディックは、規格外のサイズだとダメかも?


Heat Map binding

Smooth Bind Optionsの、BInd methodに、Heat Mapが追加されました。
雑なモデルでは違いがわかりませんでしたが、ウエイトがお利行さんになるようです。
Heat Map bindingにした方が無難って事・・?


nHair

HairがnHairになりました!とりあえず、Visorから適当に開いてみたんですが、早いです。
コリジョンありで、2012で7fpsが、2013だと21fps 。
セルフコリジョン追加で、2012で5fpsが、2013だと10fpsでした。
2~3倍早くなった・・・っという事でしょうか?

n系になったことで、色々面白そうです。


MayaBullet physics simulation plug-in

結構デリケートなのか、がちゃがちゃ操作すると落ちたりしました(´・ω・`)
PhysicsXがどっかいった・・・?w


Particle count heads-up display

自前でやってる人も多そうですが、Particle CountがHUDに追加されました。


New substance textures and functionality

サブスタンスが、全85ファイルに増えました!
使い物になるのはケースバイケースでしょうが・・・もっともっと増えていってくれると嬉しい。
いつか、Substance Designerも組み込んで欲しですねw
リストはコチラ


mental ray rendering support for GPU cached Alembic files

ジオメトリーシェーダで、Alembicのファイルを読み込めるようになりました。
Mentalray→Geometry→abcimportで作って、
abcファイルを指定しトランスフォームのGeometry ShaderにコネクションすればOKです。


mental ray version 3.10

LZW と ZIP 圧縮した TIFF が、読み込めるようになったのは嬉しいです。
ZIPの方は、スウォッチが黒くなります。
RichTIFFIPTC の warn もでなくなりました。