日本でハリウッドVFXを制作! 「経産省アイディアボックス」 結果:  
●まとめエントリはこちら ●FAQ ●お問い合わせは左のメールフォームから

2013年2月13日水曜日

VFX業界の衰退と原因

すでに公にされていますので、もう話しても大丈夫かと思いますが
ご存じの通り、先週の金曜日にR&Hでは全社ミーティングが開かれ社長からはじめて現状の説明がありました。
全社ミーティングは社長自らが現在会社で起きていること、これからの予定などを皆に説明するのですが、社長が時間があれば大体毎週金曜日に予定されています。
まぁ今まで出てなかったので、今回が初めてでしたがほぼ全社員がいたのではないかと思うほど沢山の人であふれかえっていました。
もともと派手なジェスチャーなどしない、おちついた社長なのですが、この日は口も重く、大体すでに皆が知っていたこ

とを社長自らがオフィシャルな形で語ったという感じです。
話し終えた社長はうつむき加減で次の言葉を探しているとき、その唇はわなわなと震えていました。
(それが年のせいかどうかはわかりませんが、自分には感情の高まりと思えました)
昨年25周年を迎え、長年のこの業界での功労がこのような形になり、多くの社員に危機感をいだかせる、社長としてこのような屈辱的なことはないでしょう。
その姿をみておもわず涙が出そうになりました。
実際泣いていた人も居ます。

その夜、家に帰ってある動画を見つけました。
現在のVFXがここから始まったと言っても過言ではない場所と人々を撮影した8mmの映像です。
https://vimeo.com/5494280
5757 from David Berry on Vimeo.

もちろんこれ以前にもSFXはありましたが、突出していたのはこの会社です。

ILM

小中学の頃はSFXブームでもあり、多くのSFXのメイキング映像がTVでも流されました。
スターウォーズのメイキングも良くTVで流れていました。
その多くは楽しそうで、活気があり、いつかそんな仕事がしてみたいと思わされる物です。
自分の人生もこれで大きく変わりました。
おそらく映画「スターウォーズ」をみただけでは人生は変わらなかったでしょう。
メイキング映像をみたことでそれが人の手によって作られることの楽しさを知ってしまったのですw

しかし、この動画は、初めて見る物でした。
今では、この業界では、もう神様的に有名になった人達がぞろぞろ出てきます。
皆若く、重労働を物ともせずに楽しみながら働いている。
そんな感じが画面からも伝わってきます。

見ているうちに泣けてきました。
すぐに職が無くなるかも知れないという自分の将来を思ってではありません。

LAがVFX業界でトップクラスの力を持っており、それが今、老衰したかのような瀕死の状態です。
昼間のジョン・ヒューズ氏の姿とかぶってしまい、その無気力になってしまったVFX業界を悲しく感じたのです。


その後、VESから以下の表明があったというのがTwitterで流れたのですが、
あとで気がついたらこれ2011年の5月の記事。
それから2年経過してたしかに、いろいろ業界で話しは盛り上がったけど、結局スタジオとの交渉に至ることはなく、スタジオ側からのコメント一つ引き出せていない状況です。
そして先月行われたVESアワードでEric Rothはこの業界の問題を解決する方法を知っている人がいれば教えて欲しい、みなと共有して欲しいとまでいいました。

・・・そこからわかることはかれが言ってた解決策はどこにいっちゃったんでしょうか?

そしてその解決策は、VFX業界内だけで議論したところでなんの解決にもならない。
VFX業界からスタジオ側へ話を持ちかけ、交渉して改善しない限りなにも解決しないというのが現状です。
この問題は税制優遇措置とは全く関係ありません。
税制優遇措置はどこがあれが、破産するのをすこし先延ばしに出来るだけのことです。
いいかえれば、VFXのプロダクションが生き残るにはもう国のお金に頼らざるを得ないのが現状です。
(もちろん非常に安い賃金で運営できるなら別ですが)


そして問題は明確にされており、解決するためにやるべきこともわかっているのです。
しかしだれもやろうとはしてません、議論が交わされるだけです。
ブログ上やミーティングでいくら議論をしても解決には結びつきません。

唯一VFXSoldierだけが、金を集め弁護士を雇い行動を起こしています。


とりあえず2011年の5月にEric Rothが送ったオープンレターの記事を翻訳しました。
いつものように適当翻訳ですので、誤訳がありましたらご指摘感謝します。



http://www.deadline.com/2011/05/visual-effects-society-exec-director-eric-roth-slams-movie-industry-for-terrible-treatment/

VES(全米視覚効果協会)のエグゼクティブ・ディレクターであるエリック・ロスが映画業界のひどい仕打ちを酷評

これはVESのエグゼクティブ・ディレクター「エリック・ロス」が2400人のメンバーに今日おくったオープンレターです。
この非常に重要なクリエイティブな技能に対する映画業界のひどい仕打ちを非難する物です。


名誉ある協会として、VESはVFXアーティストのすばらしい仕事を促進してきました。
しかし今のところ、我々の職業のビジネス的側面を導こうと達がある物は誰も居ません。
だれも、代表者の居ないアーティストとプロダクションのために意義のあるやりかたで声を上げる事が出来ないのです。

だれにとっても、ビジュアルエフェクツ業界の状態が不安定であることは驚きではないでしょう。
アーティストとビジュアルエフェクツの会社は少ない収入のためにより長い時間の仕事を強いられ、削られたスケジュールのもとで、よりすばらしいVFXを提供し、
我々の仕事から他の人達が沢山の利益を得ている間、多くの財政的負担を担ってきました。

その結果として、ビジュアルエフェクツとエンターテイメント業界内でのその役割について沢山の議論がかわされてきまいた。

アーティストの関心を表明するためのVFXユニオンの設立を望む声もあり、VFXプロダクションが今日の複雑な経済をよりよく切り抜けるために取引組織を創設しようとしている一方で、沢山の人はVFXアーティストはつけ込まれており、多くの他の人達は、VFXプロダクションは維持できないほどの激しい競争と利ざやにしばられていると感じている。


国際化の増大は、ビジュアルエフェクツの制作プロセスをより一層不可欠な物にしていきました。
多くの人はもし我々の業界における現在のビジネスモデルが長期にわたり持続可能な物だろうか?と思っています。
実のところ、増加する数々のブログはなぜアーティストはひどい残業時間を仕事が終わるまで健康保険も無しに何週も何ヶ月もつづけることを強要されるのか、そしてVFXプロダクションはそのパイプラインを保ち、営業し続ける(と希望している)のためだけに損失を強制されます。


我々の創造生がすばらしく驚くべき革新的な映像を作るほどに、VFXプロフェッショナルはその業界でのビジネス面では自分自身のお粗末なマーケティングをするのです。
手短に言うと、我々の努力、タレントを集めた力、強く統一された情熱、全体のものとしてこの業界統一した声などをだれも活かすことができないのです。


VESは集団としての交渉力は持ってないかも知れません。しかし23の国にまたがる2400のアーティストの声の力を持っています。- そしてVESの取締役はそれを今使う時だと決断しました。
我々は変貌する国際的な業界とその中の我々の居場所についての難問に立ち向かうためにVFXに関わる全ての人

にとって必要で関係することを訴えることの出来るただひとつの実行力のある組織です。

特にトップ50の映画のうち44本がいつもビジュアルエフェクツに支えられていることを考えたとき、我々が助けている多くの人は沢山の収入を得ています。しかし、それは平等に共有されるわけではなく、我々に支払われるよう配慮されるわけでもありません。(http://www.imdb.com/boxoffice/alltimegross).



VFXアーティストへ(コンピュータギークや、ナードではありません)、最終損益においてビジュアルエフェクトがはたす役割を正当に配慮した額を受け取っていません。
そしてそれは明白ないくつかの方法で現れています。


・クレジット - 我々はスタッフロールで不完全なリストでしか表示されず、しかもあるべき場所よりずっと後のほうなのです。

・ベネフィット - アメリカでは、健康保険または眼科保険、または年金制度が準備されていないことがよくあります。
アメリカ外では、国民健康保険が適用される国民でないなら、健康保険の対象とならないことがしばしばです。
または自身の年金をためるための時間もなく、余剰金を受け取ることも出来ません。
我々は労働組合(ユニオン)では組合化されていない唯一の部署です。
そしてそれゆえにセットにいる他のだれもが得ているような利益を受け取ることが出来ないのです。


・労働状況 - もしあなたがフリーランサー(通常、全ビジュアルエフェクツ労働者のほぼ半数がフリーランスであるといわれています)なら共同交渉によって守られていないので、あなたは締め切りに間に合わせるために週70-100時間の労働を数週間から数ヶ月強いられるでしょう。
その特権(アメリカでの)のために、あなたは1099をファイルするべき独立した契約者として分類されます - そのため雇用者がしはらうべき税金まで自分で支払うことになります。
(所得税のうち、社会保障保険に関しては通常、雇用者と被雇用者が半分づつですが、フリーランサーは個人事業者とみなされ、両方を自分で支払うという形にされることがあります)


世界中の中小VFX事業者の多くは生き残りに必死です(またはすでにやめているか。(RIP  Café FX, Asylum, Illusion Artsなどなど))。
今までこの業界のほとんど全ての人は、数年前からあるこの話を知っているでしょう。
どこかのスタジオのエグゼクティブは「映画を1つ作っている中で一つぐらいのVFX会社を倒産に追い込めなかったら、かれは自分の仕事をやっていない」と言ったそうです。

個人の考えはどうでもよいのです、VFXアーティストの利権はもはやムシされえるものではありません。


これからの数週間/数ヶ月。
VESは取引とVFXのブログ、バーチャルタウンホール・ミーティングVFXアーティストの権利章典、VFXのCEOフォーラムなどで取り上げることによって、アーティストやプロダクションとスタジオが直面している問題にスポットライトをあてます。


解決策はあるはずです、我々はそれを見つけます。

我々はスタジオがきちんとした利益をもたらしてくれることを望みます。
我々はこれまでに一度も変わらなかった財務環境でプロダクションが生き残り成長することを望みます。
そして、アーティストが毎日行っているその仕事と同等の額をその高いクオリティーの仕事と共に維持できることを望みます。

上記に述べた全ての問題がさらけだせるように、VESはこの業界のすべての関係者と組織化のための会合を率いていきます。

我々はVFSです。一つ上の段階へ進むときがきました。
VES2.0はここにあり、そして導いくときです。


Eric Roth
VES Executive Director



ハリウッドVFX業界 就職の手引き

書籍版 Kindle版は左枠上のリンクよりどうぞ







2013年2月11日月曜日

VFX事業はなぜ儲からないのか?

ついにR&Hが連邦倒産法第11章の適用をうけ倒産の手続きに入るようです。
正式発表は月曜日(現在、日曜日の深夜)になるようですが、
バラエティーのサイトをはじめ、主要なサイトではそのニュースで持ちきりです。
http://vfxsoldier.wordpress.com/2013/02/10/rhythm-hues-chapter-11/
http://www.variety.com/article/VR1118066034/
http://www.fxguide.com/quicktakes/rh-chapter-11-update/?utm_medium=twitter&utm_source=twitterfeed

自分もどうやらレイオフのようです。

業界内にも戦慄が走っています。

というのはR&Hは純粋に映画/CMなどの独立した、VFX請負業者だからです。
SonyやDesineyは上にスタジオがあり、ILMは大きなグループの一部門です。
しかしR&Hは純粋にスタジオから仕事を請けるだけで、まったく上層/他部門など頼るところをもっていません。
また無理なプロジェクトを立ち上げたわけでもありません。
業界でも大手とも言えるR&Hの破産は(少なくともLAでは)このVFX請負業が成り立たなくなっている。
ということを示しているからです。


詳細はさけますが先日のスコットロスへの質疑応答の記事がこの業界の実情を説明していると思います。
以前から少しづつ訳していたので、まだ未完ですが公開したいと思います。

いつも通り、翻訳に難ありですが、原文と合わせて読んでみて下さい。
ここ、翻訳間違いじゃないのか?というご指摘は大歓迎です。
Twitterでもこのブログのコメントでもどちらでも使ってどんどんご指摘下さい。

原文へのリンク: http://provideocoalition.com/mchristiansen/story/why-is-the-vfx-business-failing-questions-for-scott-ross


以下の文章で、ファシリティーは大きめのVFX会社を指し、ブティックは小さなVFX会社をさしていますが、まとめてVFX会社としています。
スタジオとは「 20世紀Fox、ワーナーブラザーズ、コロンビアピクチャーズ(Sony)、Disney」などの映画自体を制作する会社を指します。
(VFX)プロダクションとは「ILM、Imageworks、R&H」などのような、CGをつかいVFXを作る会社を指します。
スタジオはVFXプロダクションのクライアントであり、仕事は多くのVFXプロダクションが入札する形で決められます。


-------------------------

VFX事業はなぜ儲からないのか? スコット・ロスへの質疑

DigitalDomainの創設者であり元ILMの取締役は「とても単純さ実質収益だよ」とすべてを話してくれた。


Q: 今週初めに述べた質問(別の記事で「なぜ最も成功している時期にVFXのビジネスは利益があがらないのか?」を書いていた。)から始めたいと思います。 2013年のVFX業界には何が起きているんでしょうか? 欧米の経済全体で多くの業界に起きていることと何が違うんでしょうか?

ひとつの大きな違いはビジュアルエフェクツの会社はハリウッド映画がもつ6つのクライアントのためにショットを作っているということです。これは非常に大きな違いです。 実際の自由市場経済は売り手が新しい買い手を見つけようとするときには全く異なる様相を見せます。


Q:もしRhythm & Huesのように資金繰りの問題を抱えたとき、VFX会社のどこかに過失もしくはビジネスの経営手腕が悪いと言ったことがあるのでしょうか? それとも単に彼らが生きてくために充分な資金がスタジオからは流れてこないのでしょうか?

ビジュアルエフェクツ会社は自転車操業で、仕事がない期間は多大な影響を与えます。
私は元々1980年からビジュアルエフェクツとポストプロダクションの仕事をしてきました。
そして支払いのサイクルとコントラクトは、私が始めた頃からより一層、面倒なことになるばかりでした。

ビジュアルエフェクツのビジネスモデルはフィルムビジネスの他のビジネスとは著しく異なります。
- つまりアベンジャーのクレジットがあがってきたときおそらくカメラ部門は6人ですが、ビジュアルエフェクツにさしかかったとき1000人もの名前があるでしょう。


さて、だれがこのビジネスでは象徴となっているのでしょうか?

ビジュアルエフェクツの会社は-クリエイティブとテクニカルという- 二面性を持っていますが、ビジネスを支える物ではありません。 だれがビジュアルエフェクツのクリエイティブ面での象徴かって?
そうですね「デニス・ミューレン」はそうでしょうね。
誰がテクニカル面での象徴かというと、ジョナサン・アーランドのような人でしょうね。
じゃぁだれがビジネスの象徴なんでしょうね? その人は名士ですか? 


Q:報酬低下の圧力はどこからきたのでしょう? オフショアですか?

その圧力は四方八方からきます。まるでいくつもアタマを持つヒドラのようです。
ビジュアルエフェクツは固定された競売値で、しばしばまだはっきりした計画や青写真がないまま運営されます。
すべての会社、全てのレベルで、かれらの仕事は安く入札します。
そして相対するクライアント側は ---そうですね、ゴジラみたいなもんです。

VFXサービスのビジネスは完全に底辺を泳いでいます。
高度に専門化された知的財産(Intellectual Property)とノウハウが必要とされる大量の仕事があります。
ハリウッド・レベルの役割を果たすためには大きな障壁があります。

ハーバードの経済学者が語る大金持ちになれるという仕事があります。
近年でも大きなVFX会社を運営するのは、大きな航空会社を保ち続けるような物です。
- 根本の理論は、飛行機が飛んでいるとき、半分の収益を得ていたとしてもそのビジネスではお金を失っているという物で、それは飛行機が地面にとまり、もっとお金を失うよりはましなのです。


Q:より小さな会社 -ブティック- は世界でも最大のVFX会社達「ビッグ8」に重大なプレッシャーを与えていますか? 
それらは有能なトップレベルの人達が主に行くところでしょうか?

これまでにビジュアルエフェクツのオスカーが授与された人達をみると、小さな会社はほとんどありませんし、
もしいたとしても、いずれにせよ大きな会社と共に仕事をしていることが良くあります。
私がこのビジネスを始めた80年代半ばは、一つの町に2つか3つの仕事があっただけですが、実際にあったのはILM1社だけでした。
もしビジュアルエフェクトでチケットを売り、アカデミー賞を獲得したいなら、それがその場所でした。
その領域は拡大しましたが限られた数の会社が大きくなっただけです。

それを有能な人達から見ると、たとえば私がベテランのシニア・コンポジッターだとしましょう。
- より守られ、サポートされる、それら大会社の一つにいるのは、より小さい会社で運営していく雑事にさらされるよりはかなりましなことです。
もちろん、ロブ・リガ-トは独立してVFXオスカーを獲得できたでしょうが、メジャーな会社からのよそ者として運営するわけではありません。


Q:最大手の会社達(ILM、Weta、Sony Imageworks、R&H、Digital Domain、MPC、Framestore、ダブルネガティブ)はハリウッドに仕え、
最大手のスタジオ達(わずか6社)の脅しをうけ、「あっそう、じゃこの映画は中国とインドにやるね」と数年前に言われたとしたらどうなるでしょうか? いまなにがおきることになるでしょうか?

かれらはやり方を変える銃弾を放ち、窓を閉じたのです。そしてかなりの時間が経過しました。


「新しいスターは我々が創り上げた男性や女性のイメージです」

訳注:この部分の訳は以下のようになるのではないかとご指摘いただきました。
@miyukimaruyamaさんありがとうございます!
「新しいスターは我々の業界にいる人々(男性や女性)が作り上げる映像(イメージ)なのです。」
原文:The new stars are images that men and women in our business create.

本当になり得る事を前提に
総収入トップ20のうち20本、トップ50のうち48本の映画はVFXが映画が経済的に成功する鍵となることを証明しています。
それらの各フィルムは、おそらく30%のショットは撮影するのがかなり難しいでしょう。
それらのショットはライン・タレント(スターやディレクター、脚本家でさえ)よりも顧客を引き寄せる物なのです。
新しいスターは我々のビジネスが作り出した男性や女性のイメージなのです。

「新しいスターは我々の業界にいる人々(男性や女性)が作り上げる映像(イメージ)なのです。」
原文:The new stars are images that men and women in our business create.
 そしてスタジオはそれらに相応の対価を払わないようことにしました。


もし私が妄想的統合失調症の帽子をかぶったとします、
映画スタジオはそんな感じです。しってますか?
マイケル・オーヴィッツ(元ハリウッド代理人、現実業家。ハリウッドの最強代理業者Creative Artists Agency(クリエイティヴ・アーティスツ・エージェンシー)の創設者)によって、ドアの中に閉じ込められたのです。
彼らは核心のコントロールを失い、大金を脚本家やディレクター、タレントに支払い、「もう二度とこんな事はしないぞ」と決めたのです。


どうしても私には理解出来ないのは、なぜ8つの大手プロダクションのリーダーが国際取引組織を形成し、今すぐミーティングを開き互いに「我々はこの問題をどうやって解決すべきなのか?」という話し合いをしないのか?ということです。


Q:プロダクションがその現実に目覚めるには何が必要なのでしょうか?

そうですねビッグ8の会社のうちの5社が、現在の標準的な運営手順ではやっていけません。

SonyとILMは考慮に入れられません。彼らはスタジオによって所有されています。
我々はR&Hが置かれている状況を知っています。
Wetaは信用できません。彼らは二つの主なクライアントから資金を得ています。
;実際の所、私がILMに足を突っ込んだときにの多くの事を思い起こさせます。
フィルムメーカーのオーナーが仕事を終えたとき(<= 訳不明)
次に起こるのはピータージャクソンが一歩下がり、ジェームスキャメロンが彼らの一番のクライアントになるでしょう。

DDは少し異なります。現在、中国とインドに所有されています。
長い期間にわたり取引組織はかれらに有益で、世界的な競争をフラットにするでしょう、
しかし彼らは、そこまでには達していません。

ロンドンの大きめの会社は今のところは、太って幸せに見えます。
それは変わるでしょうが、彼らにはおそらく取引組織が国境を越えて有益になることは見えてないでしょう。



Q:どんな人がすばらしいVFXアーティストを作る事が出来るのでしょうか? どんな方法で? 
もしあるならどんなパーソナリティーのタイプは最も繁盛しているVFXの顧客とうまくいかないのでしょうか?


もしあなたが、VFXアーティストは生き残る能力を持っているかと聞いているのなら答えはYESです。

ビジネスの現実に適用できるのかということでしょうか?
20年以上前に、私はAVEC(Association of Visual Effects Creators, 「With」という意味のフランス語)と呼ぶビジュアルエフェクツの取引組織を始めようとしました、
不幸なことに被害妄想の人達のおかげで、組織は決して運営されることはありませんでした。
2度のミーティングがもたれましたが、そのころの大手VFX会社(ILM、BOSS、APOGEE、DreamQuest)は互いをまったく信用せず、AVECはすぐにSANS(「Without」という意味のフランス語)に変わりました。

ほとんどのビジュアルエフェクツアーティストとテクニシャンは葛藤回避型であり、
そのビジネス文化は「1日24時間働くよ。別に給料はいらないよ、だって俺はスターウォーズの仕事してんだぜ?!というものです。


Q:各地のポストプロダクションに対する助成金は会社の運営を助けていますか?それとも傷つけていますか?

認識すべき重要なことは助成金は、直接それらの会社にとってはまったく利益とはなりません。
スタジオが助成金をうけとっている間、彼らは6~7桁の予算をリモート運営を確率するために費やしています。
基本的に、その場所で機能するかどうかは、契約条件によります。

一方では、二年前。バンクーバーは盛況でした。しかしいまはSave BC(ブリティッシュコロンビアは予算の都合でポスプロへの助成金の中止を考えています。SaveBCはそれを継続させようという活動)の人々であふれています。
ニュージーランドでは、税納者はそれぞれ$10をロードオブザリングの助成金のために支払うことを決めました。
その国の、全国民のための映画のチケットと同額です。
なぜどの政府も、その映画が成功した際の収益を得る権利なしに、スタジオが彼ら自身のプロジェクトを完成させるためのお金を払うのでしょう。


Q:労働者の状況を改善するには何が必要なのでしょうか?

「もし私が魔法の杖を持っていたら」

もし私が魔法の杖を持っていたら、こういったことをやりたいです。
1.全ての税助成金、税制優遇措置を取り除きます。もしできないなら、スタジオではなくVFXプロダクションにそれを提供します。
2.取引組織を作り、特定のスタジオの特定の個人からでたものではない、AICPのモデルに沿った一つの声にまとめます。このグループは値段を変える事は出来ませんが、「支払いのスケジュール」「48時間のApproval Window-クライアントはこの時間内に承認するかどうかを決めなくてはいけません。それ以後の変更は規定を超えた物になります。」「Kill fees -VFXスタジオは現在、仕事の一部がキャンセルもしくは変更された場合、その数ヶ月分の仕事時間に報酬をもらっていません」のような標準的な基準を設けます。
3.プロダクションが補償するというモデルを、コストに加えて総収入からの固定額または成功報酬に変える。
VFXプロダクションは現在、劇場映画に非常に簿利益で偉大な貢献をしています。


--------------
最後の部分については@IchigoIchieFilmさんの訳がわかりやすいです。
https://twitter.com/IchigoIchieFilm/status/299741631664488448

これ以降の内容については時間の関係もあり割愛させていただきます。

























2012年8月10日金曜日

質問:「VFXアーティスト? 映像作家?のどちらを選択すべきか」


2年ほど前に「「映像作家」になることについて」というエントリを書いたのですが、それをご覧になった学生さんから質問を頂きました。
ときどき頂く質問なので、ちょっと考えをまとめてみました。
(というか、いろいろやりながら書いていたのでまとまってないかも知れません (^^;) )
 


Q: 「VFXアーティスト」になるのがよいのか、「映像作家」になるのがよいのか? 選択に迷っています。

A: 難しい質問ですねw 逃げるわけではないのですが、
これは自分自身にしかわかりません、そして自分が知っているはずです。
まぁそれがわからないので質問しているんだと思いますが、自分自身に耳を傾けて聞き出すしかないですね。


VFXの映像も、映像作品も、考えるだけではできあがりません。
またスキルアップをするだけだけでも、映像作品はできません。
「こういう作品が作りたい」という目的があり、それを行動に移すからできるのです。
そしてその「行動」の部分に決まり切ったやり方はありません、目的の映像を作るための効率の良い方法があるだけです。


そんなことはわかっているというかも知れません。
一般的なことですが、CGや映像の学校に通うという選択をした人には
学校に行ってコンピュータやソフト、カメラの使い方を学べば、なにかすごい作品が作れるようになるんじゃないか?
という漠然とした希望をもって入学し、卒業しても先生の指示でやった卒業制作が精一杯という人が意外と多いのです。
その卒業制作で自分のやりたい作品がつくれたのなら良いと思いますが、だいたいは漠然と習った映像制作のステップに従いながら思いつきで、こうしよう、ああしようと作っていっただけの物だったたら、その貴重な学生生活の時間はなんだったのかとがっかりすることになるかもしれません。


「よし女子高生が不安に思っていることを光の動きと色で示す映像を作るぞ!」とか、「渋谷にいるスーパー老人をテーマにしたショートフィルムを作るぞ!」という具体的な目標は行動に結びつきます。
「VFXアーティストになるぞ!」とか「映像作家になるぞ!」という目標もつのは楽しいことですが、自分は今これとこれとこれをなんとか作ってみたが、もっとうまく、もっと沢山いろんな作品を作りたいからその道を選択したいというふうであるのが理想的だとは思います。
(VFXアーティストでも、ハリウッド映画などにあこがれて自分もそういう作品にかかわりたいというのは、
立派な目標だとは思います。ハリウッド映画で働いている日本人のほとんどがそうかもしれません。)


有名な映画監督を含め、映像作家として有名な人達は「映像作家」になることだけを目標にしたのではなく、
自分の作りたい映像作品があり、それをずっとやりつづけるには「映像作家」になるのがよいから目標にしたのだと思います。

重要なのは、やりたい(行動に移したい)事であり、それに関連する行動です。

スピルバーグは、どうやれば映画監督になれるのかということにも悩んだかも知れないですが、それよりも自分が何を作りたいものが先にあり、それをどうやれば作れるのかを考え実行し続けて今の地位にいます。
日本でも庵野秀明とか、宮崎駿とか、マンガ家の多くもそういう人が多いと思います。
ティムバートンは元々アニメーターでした。
ハリウッドのVFX業界で働く人の中にも、自分の暇な時間を見つけては、自主制作映画を作る人もすくなくありません。
VFXアーティストだと、自分の時間を使い仕事では出来ないような表現を追求する人も居ます。

最初は稚拙だったり、真似だったり、素人っぽかったりですが、どんな批判されても成功している人達は、
それをやるのが楽しくてしかたがない。だから継続して次々とあたらしい作品を作り続けます。

「スピルバーグのジェラシックパークみたいな映像が作りたい。」とかでもいいので、やりたいことがあり、
絵コンテのやり方は知らないけど、とりあえず広告の裏に自分の撮影したい映像のアイデアを書いてみた。
カメラ無いんで自分のコンデジで撮ってみた。
CG習いたてなんで、へたくそだけどとりあえず恐竜入れてみた。
半年かかったけど何とか出来た。でもなんかつまらんな、次はもっとすごいの作りたいなぁー。
よし次はこうしよう。
この継続で、だんだん自分の考えを入れてオリジナル性がでてきて、世間に認められるというパターンは多いと思います。
ただ1年2年で、それができるひともいるし何年もかかる人も居る。
好きだから、やりたいことだから継続してやれるんでしょうね。


なんか話がそれてしまいましたが、作りたい物があるなら作り続ける事でおのずと道は開けてくるってことですね。
そして職業名で選んでも、作りたい物がなければ、達成出来ません。
職業で選ぼうとしても多分無理です。

まずは自分がなにが作りたいのかを見つけましょう。
この道を志すきっかけとなったことはなんでしょう?
どんなものに影響を受け、どんなものを作りたいと思ったのでしょうか?



ヒント:

「職種」で選択するってのは、ちょっと乱暴な言い方ですが、
小学生が「(日本で一番偉いから)総理大臣になる!」ってのとあまり変わりません。
小学生が総理大臣のやることを知っていてそれがやりたいから、言っているとは思えないですよね。

でも「大きくなったら屋台の金魚すくいのお店の人になりたい!」ってのは
たぶん、なんか屋台で働くことにおもしろさをみつけたんだろうなと推測できますよね。

ついでよくあるのが「パイロットになりたい!」
これはどうでしょうね?微妙です。
飛行機は飛ぶ物であることは知っているし、操縦桿を握ってコントロールする物であることぐらいは知っているでしょう。ようするに行動とその行動が生み出す物はしっているわけです。
ただ仕事としての「パイロットの業務」ってのをすべてしっているわけではありません。
おそらく「VFXアーティストになりたい」「映像作家になりたい」ってのはこの辺りのレベル出はないかと思っています。(自分を含めて)


この段階から一歩進めて、どうすれば選択できるようになるんでしょう?

映像作品ってのは多種多様な物があります。

映画
モーショングラフィックス
実写映像(フィクション? ノンフィクション?)
アニメーション(CG? 人形? クレイ? 手描き? 2D?)
(最近はやりの)プロジェクションマッピング

どんなものが自分が好きなのか、とにかくいろいろ見てみる。
そしてやりたいことを、やってみる。
行動することで、しか見えてこない物もあると思います。
考えるだけ、自分の気持ちを見つめるだけでは見えてこないのです。

作品を作るといっても大作である必要ありません、自分のいまのスキルでできるけど作りたい物でも良いと思います。
そうした作るという行為を通して、好きな物、そうでないものが少しづつ見えてくるとおもいます。
自分が本当にやりたい事というのは、作るという「行動」をし続けないと、見つからない物でもあるのでしょう。

そういう行動をしつづけることで、自分がやりたいことは、VFXアーティストの仕事だったのか、一本の作品としての映像を作ることなのかがみえてくるのでしょうね。


そして本来であれば、この道を進む前に自分の好きなことがある程度わかっているはずです。
それはなんだったのでしょう。




メールにも書かれていましたが、いろいろとこの業界で働いている方達と接触して、話を聞いたり現場を見せてもらうのは、非常にその助けとなると思います。





補足:
VFXアーティストといえども1ショットだけ、CGだけを考えていればよいわけではありません。
CGのことも幅広く、学生の間には学びきれないほどの大量の知識があります。
映像作家と言っても、どんな映像を作りたいのかによって、やりたいこと学ぶべき事は違ってくると思います。
両方とも学ぶべき事はたくさんあり、学生生活で学べることは一部だけだと思います。
限界がある中で、絞り込む方がより効果的になる訳なんですが、もう一つの選択肢もあります。

それはあえて決めずに、両方やるという事です。
学生のうちに両方出来るとは限りませんので、仮にどちらかを選択する事になるかとは思いますが、
それで将来のすべてが決まってしまうことではない。
自分次第でそれは変えることもできるのではないでしょうか?

ただし、就職してお金にならないと生きていけないので、とりあえず食って行けそうなレベルにまでいけそうな法を選択する。
そして、自分のやりたいものを作り続け、数年後になるかも知れませんが、仕事をやっていてふと自分の方向はこっちにしようと思うときが来るかも知れません。

その当たりも、自分次第です。
もしかしたら、そういうときは来ないかも知れません。

やりたいことを実行に移してやりたいものを作る。
その連続の中でしか見つからないのだと思います。


今は無料のソフトも沢山あり、PCも安いですし贅沢を言わなければ、VFXでも映像作品でも、作れる環境はあります。

その環境で、学校で教えてくれることをまっているようなら、もしかしたらそれが問題かも知れません。
多くの学校では、自分のやりたいことは教えてくれません。
絵コンテや、鉛筆画も含めて、ソフトの使い方など、ツールの使い方を教えてくれるだけです。

2012年4月13日金曜日

土埃と煙のリファレンス

Red Bull Dakar 2011 - Carlos Sainz & Marc Coma
http://vimeo.com/26104465

SAMt HD - Tour Dakar 2011 - Rent Motorcycle Chile
http://vimeo.com/19554067

Dirt Smoke!
土を巻き上げその土から土ホコリが舞い上がっている様子がわかる。
最初はタイヤの回転数が小さくあまり土が舞い上がってないので後方のみにでている。
回転数が上がってくるとタイヤの上部、そして周囲全体から土埃がまいあがり始める。
http://www.youtube.com/watch?v=g3q85gycC2g



Dust bowl rally cross
これは煙ではなくホコリ(小さな土のつぶ)なので、煙と比較して重いので比較的低位置に留まる。
また土自体が、巻き上げられてからそれが着地するまでの間に煙の発生源となっている。
土を放り投げたときのように、上に巻き上げられて広がったときに重い粒子は重力に引っぱられて落下し、
軽い粒子は煙状になりその場を舞う。
また車の後ろの気流におされて車についていくような動きを見せる。
http://vimeo.com/groups/driftinghd/videos/26252785


OMR Rallyx Aug 1 2010
横滑りのような動きでは、タイヤの回転によって巻き上げられるのもあるが、タイヤが移動していくときに起きる風邪に引っぱられて地面の土がまいあがる動きがある。
またタイヤの側面で削られ前方にはね飛ばされる土による埃
http://vimeo.com/10302567


直進して横滑りが少ない場合はタイヤの後ろに噴出するように土がはき出され少し遅れて土埃が出る。
横滑りの時はえぐれてタイヤの溝にのって巻き上げられた土がフェンダー内で飛び散り跳ね返り土埃を出す。。





舗装道路でのドリフト
http://vimeo.com/28609908

THE HILL - Maxxis Tyres British Drift Championship Round 4
http://vimeo.com/28343146

これらの動画をリファレンスする際で、注意すべきこととしては天候があります。
同じ晴天でも、雨が良く降る時期とかだと湿気が多くて、それほど細かい埃は舞わないことがあります。
たとえ雨が降っていない時期でも、国によってその差があることは考慮すべきです。
たとえば雨が降らない時期が数か月ということが当たり前の地域では、乾燥しているので、比較的細かなほこりが多くなります。

ここで参照したような車の動画だとあまり目立たないですが、人が走るときとか車よりも少ない質量と力で動くようなもの、より近くで見る場合は考慮すると効果的もしくは、発想の自由度が高まるかもしれませんね。








2012年3月19日月曜日

「スカラー」の語源

Melやプログラム言語を勉強していて「スカラー値」という言葉がよく出てくる。

これは最初とまどったがようはベクター(複数の数字が一組になって表現されるもの)などに対して、ひとつの数字 で表される物を指していると理解してからはほぼつじつまが合うので、そのまますすめてきた。
参照1:スカラー,ベクトル,行列

ところでこの「スカラー」という言葉。
英語の発音を聞くとどちらかというと「スケーラー」(音声参照:goo辞書) と聞こえる。

そうメモリとか物差しを意味するスケールとほぼ同じである。

英語表記、発音記号は以下のように「Scal」まではほぼ同じである。
スカラー:Scalar (skéilər
スケール:Scale (skéil

これって同じ所から来ているのかも知れないので語源を調べてみた。

英語版Wikiで見るとラテン語の「Scalaris」から来ており、ラテン語で「はしご(Ladder)」を意味するScalaの形容詞句である。
英語の「Scale(スケール)」も「Scala」から派生している。
記録にある限り数学で最初に「Scalar(スカラー)」の意味として使われたのはフランソワ・ビエトによる、「Analytic Art」(1591年)の中である。

    Magnitudes that ascend or descend proportionally in keeping with their nature from one kind to another are called scalar terms.
(一つの状態から他の状態へ同比率で上昇または降下するその大きさ(等級)をスカラーという用語で呼ぶ)



参照:Online Etymology Dictionary「Scalar」
"resembling a ladder," 1650s, from L. scalaris "of or pertaining to a ladder," from scalae (pl.) "ladder, steps" (see scale (n.2)). Mathematical sense first recorded 1846.




そしてほぼこれと同じ意味で推測されている方が居てWeb上にうまくまとめられていたのでそれを引用しておきたい。
参照:Meta2mathematician's HP 
スカラー scalar

この 「スカラー」 という言葉は大学で線型代数学でも学ばないとなかなか目にしなくなったが, これは scale (スケール) という言葉から発生したものだと思われる。 音楽家が scale といえばそれは 「音階」 のことであるが (こっちはフランス語では gamme, ドイツ語では Tonleiter, Skala, イタリア語では scala, gamma という), (英語では) 同語源の単語 scale, 即ち 「目盛り」 とか 「物差」 とかを意味する言葉である。 つまり, vector が 「大きさと方向を持つ量」 であるのに対し, 「物の大きさ」 を示す量が (物差しで測れる量) scalar なのであろう。

補足だがここでは最初に使ったのは、「William Rowan Hamilton(1805-1865) 」とあるが、上記Wikiによると1846年に英語の用語「scalar」を最初に使ったのが彼である。
(上記、フランソワ・ビエトは同様の意味で使ったが使用したのはラテン語「Scalaris」)

2012年3月4日日曜日

パーティクル101 その4:saveInitialState無しで追加したパーティクルを保存する(2)

今回の内容は、実は「その2:アスキーファイルの分析」よりも前に書いてました。
でも、ファイルの基本的内容を知っていると、今回の内容が理解しやすいので
後回しにさせてもらいました。


<はじめに>
前回、説明しましたとおり、今回の結果は結局は勘違いを元に動いており、
実用的ではないですが、
●アスキーファイルの分析例
●setAttrを使ったパーティクルアトリビュートの設定法

は参考になると思います。
ただし長いです。




<動機>
Expressionによる方法では、開始フレームにおいて追加したいパーティクルを表示することが出来ません。

もういちど「particle」コマンドを使うとどうなるのかおさらいしてみます。
最初からパーティクルをいくつかもたせてparticleShapeを作れば、
開始フレームから最終フレームまでそのままです。
そのファイルを保存して開いても、そのパーティクルが消えることはありません。


適切な表現かどうかはわかりませんがパーティクルの数がしっかりそのノードに記憶されているのです。


なぜそのノードに記憶されているんでしょう?
その記憶をちょこっと修正すれば、そのノード(particleShape)にちゃんと追加したパーティクルの情報を埋め込んでおくことができるんじゃないでしょうか?

なぜそんな簡単というか重要なことができる機能がないのか?(← ここが勘違い。InitialStateがその働きをします。

まぁMayaだから仕方がない。どうやったらできるか考えてみることにしました。

これについても@spx808さんからヒントをもらい、アドバイス通りMayaアスキーファイルを分析してみることにした。
「パーティクルの初期状態はposition0のようにPPアトリビュートの前に0をつけたもので記録されています。
初期状態で存在するパーティクルはid0とnextId0で記録されています。
.maファイルを読むと仕組みが理解できるので解析してmel化することができると思います。」
「m0,id0,nid0,pos0あたりのアトリビュートをセットしてやればなんとかなると思いますがけっこうめんどいです。」

なにぶん、アスキーファイル、パット見て「あっここだ!」とさらさらっと修正するほどなれてませんので、
ステップを明確にして、少しづつ解析していきました。




<分析手順>
1)4つの異なるシーンを作成。)
パーティクル個数が
(a)ゼロ
(b)1個(原点)
(c)1個(座標1,1,1)
(d)二個(原点と座標1,1,1の位置)
2)それぞれアスキー形式(.ma)で保存
3)アスキーファイルを開きParitcleShapeに関連する部分を切り出し比較。
※この切り出したものは最後に画像ファイルとしてまとめて掲載してあります。


それによりわかったのはファイル内では
●particleShape はcreateNodeコマンドで作られている
●各アトリビュートがsetAttrで設定されている
●異なっている部分は以下のアトリビュート


pos0
vel0
acc0
nid (パーティクルが存在する時のみ)
nid0 (パーティクルが存在する時のみ)
bt0
ag0
lifespanPP0




ヘルプ「particle」ノードの項目で各アトリビュートを調べどんな内容が設定されているのか調べてみます。
まずは「pos0」からです。


<pos0>
pos0: 「各パーティクルにおける初期状態のposition(位置)」
注意すべきは「pos」というアトリビュートもあるという点、違いはpos0は初期位置であるという点
(@spx808さんのアドバイスにもありますが、アトリビュート名の後ろに「0」がついているのは
初期状態を記録しているアトリビュートの意味です。)


作例の4つのファイルを比較すると以下のようになる。
(a)個数ゼロ:       setAttr ".pos0" -type "vectorArray" 0 ;
(b)原点に1個:     setAttr ".pos0" -type "vectorArray" 1 0 0 0 ;
(c)座標1,1,1に1個:     setAttr ".pos0" -type "vectorArray" 1 1 1 1 ;
(d)原点と座標1,1,1に計2個:  setAttr ".pos0" -type "vectorArray" 2 0 0 0 1 1 1 ;


なるほど、「1 0 0 0」「2 0 0 0」というところで、どうやら個数と座標値がセットされているらしい。
では具体的にはどのようにしてセットされているのかを見ていきたい。


<setAttrの使われ方>
setAttrはアトリビュートに値を設定するコマンド。
まずはCGWorldの「Mel for Designers」のサポートページがわかりやすいのでそちらを参考にしてSetAttrの全体像をつかむ事にする。

「ノードのプロパティを指定した値に設定します。
構文: setAttr ノード名.プロパティ名 設定値
例:pCube1のスケールYを6.0に設定します。
setAttr pCube1.scaleY 6.0 ; 」



今回、アスキーファイルに書き込まれているsetAttrの行には、
●ノード名が無く
●プロパティー名が「" "」でくくられて".pos0"となっている。

この理由はヘルプから見つけることは出来なかった。

そこで勝手に推測してみることにする。
●ノード名が無い理由 --> 「すでに対象ノードが選択されているから」
この一連のsetAttrの直前には「createNode」 コマンドが実行されている。
コマンドが実行されて最後に作られたノードは選択状態になる。
この場合は、「particleShape」が選択状態になっている。
それに関係するコマンドを続けて実行するので、わざわざノード名を指定する必要がない。
それで、プロパティー名のみを指定しているということだと思われる。

●「" "」でくくられている理由 --> 「文字列であることを明記するため」
これも推測。これは文字列を示すためのMel内の基本的な決まり事である。
実際には使わなくても良いが、明確にするために使っているのだろう。


これらを実証するために「Mel for Designers」の例を元に試してみます。

pCube1を作成して以下の5つの条件でsetAttrコマンドを実行してみました。

実験1)ノード名.プロパティー名を「" "」でくくる。
setAttr "pCube1.scaleY" 6.0 ; をpCube1を選択しないで実行
--> 正常動作

実験2)ノード名.プロパティー名を「" "」でくくらない。
setAttr pCube1.scaleY 6.0 ; をpCube1を選択しないで実行
--> 正常動作

実験3)ノード名なし、.プロパティー名だけを「" "」でくくる。。
setAttr ".scaleY" 6.0 ; をpCube1を選択しないで実行
--> エラー // Error: setAttr: No object matches name: .scaleY //

実験4)同条件
setAttr ".scaleY" 6.0 ; をpCube1を選択してから実行
--> 正常動作

実験5)同条件
setAttr .scaleY 6.0 ; をpCube1を選択してから実行
--> 正常動作

以上の実験から、以下のことがわかります
● プロパティー名がなければ対象が選択されていないと動作しない。

● プロパティー名だけの表記でも動作する。
● プロパティー名は文字列であるが「" "」で囲んでも囲まなくてもよい。




<-type "vectorArray">
さて、元のアスキーファイルにあるsetAttrに戻ります。

最後の数字は設定値である事はわかるが、
数字の前に「-type "vectorArray"」というフラグが使われている、これは何でしょうか?

ヘルプファイルで調べてみます。
オンラインヘルプ:setAttr

「-type フラグは、非数値型のアトリビュートを設定するときのみに必要となります
    {TYPE} はスペースで区切られた任意の数のタイプ(TYPE)の値を意味します。
    [TYPE] はタイプ(TYPE)の値がオプションであることを意味します。」


「1 0 0 0」は数値ではないか?という思ってしまうかもしれないが、
アトリビュートの「型」としては違う。
ここではアトリビュートとしては「配列」という形式になるのだが、
「配列」自体は数値を入れる入れ物ではあっても、「数値」そのものではなく「入れ物」である。
それで非数値型アトリビュートということになっているらしい。
こういうのは言葉の遊びのように思えてきて初心者には、どうでもいいことのように感じる事があるが、コンピュータでは明確に処理の仕方が異なってくるので、あきらかに違うのである。


この非数値型の他の種類も含めてオンラインヘルプに表で示してある。

-type vectorArray」の所を見てみると
「ベクトルの可変長配列」ということなので
1)ベクトルの配列
2)配列の数は固定ではない。

ことがわかる。
パーティクルの数が増えればそのベクター値を格納するところ(配列)を、それに応じて増やせるということになる。

値についての箇所は以下のようになっている
値の構文 :    int {double double double}
値の意味 :    numberOfArrayValues {xValue yValue zValue}

とある。
Integer(整数)により配列の数を指定し、xyzの値を次に指定するという形式を取ることがわかる。
実際にはこの「{ }」の括弧は使われるわけではないので、この文章の中でデータの違いを示すためのものであろう。



今回の各テストシーンにおける「pos」アトリビュートに設定される配列数と値は以下のようになっている。

(a)個数ゼロ:       setAttr ".pos0" -type "vectorArray" 0 ;
配列数:ゼロ

(b)原点に1個:     setAttr ".pos0" -type "vectorArray" 1 0 0 0 ;
配列数:1、値 0 0 0

(c)座標1,1,1に1個:     setAttr ".pos0" -type "vectorArray" 1 1 1 1 ;
配列数:1、値 1 1 1

(d)原点と座標1,1,1に計2個:  setAttr ".pos0" -type "vectorArray" 2 0 0 0 1 1 1 ;
配列数:2、値 0 0 0 と 1 1 1


ここから考えると
●配列数はパーティクルの数と同じ
●パーティクルの各座標値が、その後にスペースをはさんで続く、カンマなどの区切りはない


パーティクル数(スペース)x1(スペース)y1(スペース)z1(スペース)x2(スペース)y2(スペース)z2 ・・・
という具合になる。


<-type "doubleArray">
さてsetAttr ".mas0" -type "doubleArray" 0 ; の部分をみると
「-type "doubleArray"」というフラグが使われている。

先ほどとは違うので、これも後のために調べておくことにす
オンラインヘルプ:setAttr

ヘルプを見ると「倍精度浮動小数点数の可変長配列
1)倍精度浮動小数点数の配列
2)配列の数は固定ではない。

ということになる。

.mas」(mass)は質量を示しているアトリビュートだが、各パーティクルの初期質量を倍精度小数点の数値で指定いると言うことになる。

値の構文     int {double}
値の意味     numberOfArrayValues {arrayValue}

Integer(整数)により配列の数を指定し、値を次に指定するという形式を取ることがわかる。
先ほどのvectorArrayと比べると値は一つなのでわかりやすい。

●配列数はパーティクルの数と同じになる。
●パーティクルの各初期質量が、その後にスペースをはさんで続く、カンマの区切りはない。


パーティクル数(スペース)a(スペース)b(スペース)c(スペース)d(スペース)e・・・
という具合になる。


さてここまででパーティクルにおけるsetAttrの使われ方がわかったので、
今度は各アトリビュート名ごとに調べていく。
「pos0」についてはすでに見たので、それ以降について調べてみる。



<vel0>
vel0:これも「vel」プロパティーと混同しないように要注意。
パーティクル毎のVelocity(方向性を持った速度)の初期値
デフォルト値:空
オンラインヘルプ:パーティクル

(a)個数ゼロ:       setAttr ".vel0" -type "vectorArray" 0 ;
配列数:ゼロ、値:なし

(b)原点に1個:     setAttr ".vel0" -type "vectorArray" 1 0 0 0 ;
配列数:1、値: 0 0 0

(c)座標1,1,1に1個:     setAttr ".vel0" -type "vectorArray" 1 0 0 0 ;
配列数:1、値: 0 0 0

(d)原点と座標1,1,1に計2個:  setAttr ".vel0" -type "vectorArray" 2 0 0 0 0 0 0 ;
配列数:2、値: 0 0 0 と 0 0 0

デフォルトで作成されたものはVelocityはゼロであることがわかる。



<acc0>
acc0:これも「acc」プロパティーと混同しないように要注意。
パーティクル毎のAcceleration(加速度)の初期値
デフォルト値:空

(a)個数ゼロ:       setAttr ".acc0" -type "vectorArray" 0 ;
配列数:ゼロ、値:なし

(b)原点に1個:     setAttr ".acc0" -type "vectorArray" 1 0 0 0 ;
配列数:1、値: 0 0 0

(c)座標1,1,1に1個:     setAttr ".acc0" -type "vectorArray" 1 0 0 0 ;
配列数:1、値: 0 0 0

(d)原点と座標1,1,1に計2個:  setAttr ".acc0" -type "vectorArray" 2 0 0 0 0 0 0 ;
配列数:2、値: 0 0 0 と 0 0 0


デフォルトで作成されたものはAccelerationもゼロ



<mas0>
mas0:これも「mas」プロパティーと混同しないように要注意。
パーティクル毎のmass(重さ)の初期値
デフォルト値:空


(a)個数ゼロ:       setAttr ".mas0" -type "doubleArray" 0 ;
配列数:ゼロ、値:なし
(b)原点に1個:     setAttr ".mas0" -type "doubleArray" 1 1 ;
配列数:1、値: 1

(c)座標1,1,1に1個:     setAttr ".mas0" -type "doubleArray" 1 1 ;
配列数:1、値: 1

(d)原点と座標1,1,1に計2個:  setAttr ".mas0" -type "doubleArray" 2 1 1 ;
配列数:2、値: 1 と 1





<id0>
id0:これも「id」プロパティーと混同しないように要注意。
パーティクル毎のAcceleration(加速度)の初期値
id:各パーティクルのユニークなID
id0:パーティクル毎の初期ID値
(正直言うと違いがよくわからないが、ここではid0ということで)
デフォルト値:空


(a)個数ゼロ:       setAttr ".id0" -type "doubleArray" 0 ;
配列数:ゼロ、値:なし

(b)原点に1個:     setAttr ".id0" -type "doubleArray" 1 0 ;
配列数:1、値:0
(c)座標1,1,1に1個:     setAttr ".id0" -type "doubleArray" 1 0 ;
配列数:1、値:0

(d)原点と座標1,1,1に計2個:  setAttr ".id0" -type "doubleArray" 2 0 1 ;
配列数:2、値:0 と 1



<nid>
nid:「nextID」 次に利用可能なID
デフォルト値:0(ゼロ)
これは配列ではないので値だけ。

(a)個数ゼロ:       該当しない
値:    該当しない

(b)原点に1個:     setAttr ".nid" 1;
値:1

(c)座標1,1,1に1個:     setAttr ".nid" 1;
値:1

(d)原点と座標1,1,1に計2個:  setAttr ".nid" 2;
値:2




<nid0>
NextID(nid)の初期値
デフォルト値:0(ゼロ)
これも配列ではないので値のみ

(a)個数ゼロ:       該当しない
値:    該当しない

(b)原点に1個:     setAttr ".nid" 1;
値:1

(c)座標1,1,1に1個:     setAttr ".nid" 1;
値:1

(d)原点と座標1,1,1に計2個:  setAttr ".nid" 2;
値:2


最初のフレームでパーティクルの数がすでに決定している場合、
当然ながら<nid>と<nid0>は同じ値をとると思われる。



<bt0>
bt0:「birthTime0」
パーティクル毎のバースタイム(発生時間)の初期値。
デフォルト値:空

(a)個数ゼロ:       setAttr ".bt0" -type "doubleArray" 0 ;
配列数:ゼロ、値:なし

(b)原点に1個:     setAttr ".bt0" -type "doubleArray" 1 0.041666666666666664 ;
配列数:1、値:0.041666666666666664

(c)座標1,1,1に1個:     setAttr ".bt0" -type "doubleArray" 1 0.041666666666666664 ;
配列数:1、値:0.041666666666666664

(d)原点と座標1,1,1に計2個: setAttr ".bt0" -type "doubleArray" 2 0.041666666666666664 0.041666666666666664 ;
配列数:2、値:0.041666666666666664 と 0.041666666666666664

そのパーティクルの発生時間の初期値
この長い小数点数はどこから来たかというと、フレームを秒数表示した物。
今回は24fpsで作成したシーンなので、
1(秒)÷24(フレーム)=0.041666666666666664
すなわち1フレーム目で発生していることを示している。



<ag0>
ag0:「age0」
パーティクル毎の年齢、初期値

デフォルト値:空

(a)個数ゼロ:       setAttr ".ag0" -type "doubleArray" 0 ;
配列数:ゼロ、値:なし

(b)原点に1個:     setAttr ".ag0" -type "doubleArray" 1 0 ;
配列数:1、値:0

(c)座標1,1,1に1個:     setAttr ".ag0" -type "doubleArray" 1 0 ;
配列数:1、値:0
(d)原点と座標1,1,1に計2個: setAttr ".ag0" -type "doubleArray" 2 0 0 ;
配列数:2、値:0 と 0

このケースの値は、いずれもパーティクル発生時「0歳」に設定されている。

setAttr ".lifespanPP0" -type "doubleArray" 2 3.4028234663852886e+038




<lifespanPP0>
なぜかヘルプにはのってない。
これは「0」部分を除きカスタムアトリビュートと同じ名前であるが...別にカスタムアトリビュートになにか設定するわけではないし、アトリビュートエディター内のlifespanPPの所に何も表示されていない。

ヘルプの「パーティクル アトリビュートのリスト」によると以下のような説明である。
「lifespanPP:パーティクルが消滅するときをパーティクル単位で設定します。」


アトリビュート名の後ろに0があるケースはそれが初期値であることを示す。
よって「lifespanPP0」は寿命の初期値であるというのは想像がつく。


ブログ「memlog」さんによると、
「lifespanPP [寿命]
各パーティクルの寿命。
例えばlifespanPP = 1とすると、1秒後に消滅する。
おそらく、age > lifespanPPとなった瞬間に、消滅するのだと思われる。
この値をゼロにすることで、パーティクルを任意のタイミングで消滅させることが可能」



シーンファイルの設定はデフォルトのままなのでMayaのGUIからアトリビュートエディターの設定を見るとLifeSpanの設定は以下の通りである。
LifeSpan:Live Forever
この状態での各シーンの設定は以下のようになっている。

(a)個数ゼロ:       setAttr ".lifespanPP0" -type "doubleArray" 0 ;
配列数:ゼロ、値:なし

(b)原点に1個:     setAttr ".lifespanPP0" -type "doubleArray" 1 3.4028234663852886e+038 ;
配列数:1、値:3.4028234663852886e+038

(c)座標1,1,1に1個:     setAttr ".lifespanPP0" -type "doubleArray" 1 3.4028234663852886e+038 ;
配列数:1、値:3.4028234663852886e+038

(d)原点と座標1,1,1に計2個: setAttr ".lifespanPP0" -type "doubleArray" 2 3.4028234663852886e+038 3.4028234663852886e+038 ;
配列数:2、値:3.4028234663852886e+038 と 3.4028234663852886e+038


ためしに
LifeSpan Mode: Constant
LifeSpan:1

で設定したがこれら値は変化無し。

アトリビュートエディターのLifespanPPに以下のエクスプレッションを設定してみた
CreateExpression:particleShape1.lifespanPP = 0.1;
しかし、上記のsetAttrの値に変化は無かった。


名前からするとパーティクル毎の寿命の初期値であることは間違いないのだが。

これは@honeking さんとのTwitterでのやりとりで解明した。

まず、ヘルプの「finalLifespanPP(flp)」には以下のように書かれている。
「finalLifespanPP(flp)はlifespanPPの値をコピーして利用する。
LifeSpanモードが「None」の時は、フロート最大値が使われる」




上記のアスキーファイル内にある「3.4028234663852886e+038」という数字は、実はフロート値の最大値なのである。
参照サイト:「変数の扱える最大値の周辺」
「3.40282347e38 が float の最大値である。」

ヘルプを見ても「finalLifespanPP0(注意:初期値を示す「0」が後尾にあり)」というのは存在しない
LifeSpanモードが「None」の時の値をどこからか持ってくる必要がある。
そしておそらくその為の値「floatの最大値」を格納する場所が「lifespanPP0」なのだと思われる。
ようするにデフォルトの「Live Forever」の値は、ここからとってきていると考えることが出来る。

これは実際の数としてはかなり巨大な数なので、実質、永久に存在していると考えて間違いないだろう。そもそもMayaのタイムレンジをそこまで設定できるのかどうかもわからないし、そこまでの長尺のショットなどあり得ないだろう。
ようするにこれはこれで有効なのだ。


スクリプトエディターで「Echo AllCommand」にして観察しながら、アトリビュートエディターでLife Foreverモードにすると
setAttr "particleShape1.lifespanMode" 0;
が実行されていることがわかる。
ヘルプでは「None」と書いているが「0(ゼロ)」の事だと思われる。



------------------
<イニシャルステートを使わない、パーティクルの追加方法>
以上の分析からパーティクルを追加してかつそれを初期値として保存するためには以下のような
Melでアトリビュート値を設定する事になる。

以下はパーティクルを追加する場合に変更する必要がある場所:
(参考スクリプトは今回作成したアスキーファイルより引用)

setAttr ".pos0" -type "vectorArray" 1 0 0 0 ;

ポジション: 配列数、値(座標値xyz = 任意)
setAttr ".vel0" -type "vectorArray" 1 0 0 0 ;
速度: 配列数、値(速度値xyz = 0 0 0)

setAttr ".acc0" -type "vectorArray" 1 0 0 0 ;
加速度: 配列数、値(加速度値xyz = 0 0 0)

setAttr ".mas0" -type "doubleArray" 1 1 ;
質量: 配列数、値(質量=1)

setAttr ".id0" -type "doubleArray" 1 0 ;
ID: 配列数、値(ID、ゼロから始まり配列数が2以上だと 1 2 3 ・・・と増加する)

setAttr ".nid" 1;
NextID: 値(id0の最後の値の次の数、基本的に他の配列「数」と同じになるはず)

setAttr ".nid0" 1;
NextID: 値(nidと同じ)

setAttr ".bt0" -type "doubleArray" 1 0.041666666666666664 ;
バースタイム: 配列数、値(フレーム1からの場合 0.041666666666666664 )

setAttr ".ag0" -type "doubleArray" 1 0 ;
Age(年齢): 配列数、値(発生時の年齢:0)

setAttr ".lifespanPP0" -type "doubleArray" 1 3.4028234663852886e+038 ;
寿命初期値: 配列数、値(最大値 3.4028234663852886e+038)




これを参考に実際に行うためのスクリプトを作ってみる。
1)空のパーティクルShapeを作成
particle; 

2)setAttrを使い1,1,1の場所に一つのパーティクルを作成。

setAttr ".pos0" -type "vectorArray" 1 1 1 1 ;
setAttr ".vel0" -type "vectorArray" 1 0 0 0 ;
setAttr ".acc0" -type "vectorArray" 1 0 0 0 ;
setAttr ".mas0" -type "doubleArray" 1 1 ;
setAttr ".id0" -type "doubleArray" 1 0 ;
setAttr ".nid" 1;
setAttr ".nid0" 1;
setAttr ".bt0" -type "doubleArray" 1 0.041666666666666664 ;
setAttr ".ag0" -type "doubleArray" 1 0 ;
setAttr ".lifespanPP0" -type "doubleArray" 1 3.4028234663852886e+038 ;



これでパーティクルが一つ追加される。
(パーティクルが表示されない場合は、タイムスライダーを動かし、初期フレームに戻る必要がある。)


ではさらに2,2,2の位置にもう一つ追加してみる。
追加と書くと新しいパーティクル1つの情報だけをスクリプトで実行するようなイメージを持ってしまうが、 実際には既存のパーティクル、今回追加するパーティクルの両方をsetAttrで設定する必要がある。
簡単に言えば、二つのパーティクルを設定するためのsetAttrで各アトリビュートを上書きする事になる。


3)setAttrを使い1,1,1 2,2,2の場所に2つのパーティクルを作成。

setAttr ".pos0" -type "vectorArray" 2 1 1 1 2 2 2 ;
setAttr ".vel0" -type "vectorArray" 2 0 0 0 0 0 0;
setAttr ".acc0" -type "vectorArray" 2 0 0 0 0 0 0 ;
setAttr ".mas0" -type "doubleArray" 2 1 1 ;
setAttr ".id0" -type "doubleArray" 2 0 1 ;
setAttr ".nid" 2;
setAttr ".nid0" 2;
setAttr ".bt0" -type "doubleArray" 2 0.041666666666666664 0.041666666666666664;
setAttr ".ag0" -type "doubleArray" 2 0 0 ;
setAttr ".lifespanPP0" -type "doubleArray" 2 3.4028234663852886e+038 3.4028234663852886e+038;



これで二つパーティクルが追加された。

ーーーーーーーーーー

<勘違いに気がついた>
アスキーファイルでパーティクルがどのように記述されているのかがわかったので、
Emitでパーティクルを一つ追加しInitalStateで保存した場合のアスキーファイルも比較してみることにした。

createNode particle -n "particleShape1" -p "particle1";
    addAttr -ci true -sn "lifespanPP" -ln "lifespanPP" -dt "doubleArray";
    addAttr -ci true -h true -sn "lifespanPP0" -ln "lifespanPP0" -dt "doubleArray";
    addAttr -ci true -sn "lifespan" -ln "lifespan" -at "double";
    setAttr -k off ".v";
    setAttr ".gf" -type "Int32Array" 0 ;
    setAttr ".pos0" -type "vectorArray" 1 0 0 0 ;
    setAttr ".vel0" -type "vectorArray" 1 0 0 0 ;
    setAttr ".acc0" -type "vectorArray" 1 0 0 0 ;
    setAttr ".usc" yes;
    setAttr ".scp" -type "string" "particleEmit_startup";
    setAttr ".mas0" -type "doubleArray" 1 1 ;
    setAttr ".id0" -type "doubleArray" 1 0 ;
    setAttr ".nid" 1;
    setAttr ".nid0" 1;
    setAttr ".bt0" -type "doubleArray" 1 0.041666666666666664 ;
    setAttr ".ag0" -type "doubleArray" 1 0 ;
    setAttr ".irbx" -type "string" "";
    setAttr ".irax" -type "string" "";
    setAttr ".icx" -type "string" "";
    setAttr ".cts" 1;
    setAttr ".lifespanPP0" -type "doubleArray" 1 3.4028234663852886e+038 ;
    setAttr -k on ".lifespan" 1;



これを見ると、自分がsetAttrのスクリプトを使って設定したのと同じ結果になっているということがわかる。

ようするにInitalStateを使うということはsetAttrでちゃんと初期値を設定しているということであった。
各アトリビュートを設定する必要は無かったと言うことだ。
InitialStateを使うとキャッシュのように別ファイルとして保存されるというのは全くの思い違いで幻想であった。


メニューからInitalStateをクリックすると「saveInitialState」コマンドが実行され、
SaveInitialStateはアトリビュートの設定きちんと上書き保存している。
そしてファイルにはきちんと記述として残る。


------------
これで一度、パーティクルをシーンに作成、追加する方法の基本は終わりとします。
パーティクルを増やすにはEmitterで行うのが一般的ですが、それはまたいろいろなテクがあるし、そればっかりやってもつまらないので、それらは適宜必要なときにやってみることにします。

あと以下にこれまでの「パーティクル101」へのリンクと
今回使用したアスキーファイルの画像ファイルを添付しておきます。
 この「パーティクル101」シリーズは、自分が充分に知っていることを初心者にわかりやすく書いた物ではありません。
自分が知らないことが多すぎるので初心者に立ち戻り、知っていること知らないことを明確にしながら知らないところがわかるように、調べ、それで「わかったこと」、「調査過程」を他の人にも(できるだけ)わかりやすいようにまとめただけです。

---------------
これまでの「パーティクル101」シリーズ 
その1:パーティクルの作成
その2:アスキーファイルの分析
その3:saveInitialState無しで追加したパーティクルを保存する(1)


 今回使用したアスキーファイルからの抜粋。
  (a)ゼロ




(b)1個(原点)
 



(c)1個(座標1,1,1)
 


(d)二個(原点と座標1,1,1の位置)

2012年2月29日水曜日

パーティクル101 その3:saveInitialState無しで追加したパーティクルを保存する(1)

<はじめに>
最初に結論を述べておきますと今回の、こころみは勘違いから始まっており、さほど実りある物ではありませんでした。(個人的には長年、気に掛かっていたところが明白になりすっきりしましたがw)



参考になるとすればアスキーファイルの分析手順。
setAttrコマンドでパーティクルのアトリビュートを設定する方法がわかるぐらいでしょうか。
(いずれも次回、説明します。)

「勘違い」というのは、
●パーティクルの初期設定はパーティクルキャッシュのように初期状態を別ファイルに保存しており、ファイルを開くときに読み込んでいる(と思っていた。実際はそうではない)
●そのためプロジェクト設定が間違っているとか、バグで読めないとかになるのは嫌だから確実にファイル内に設定を組み込みたい。
●そのため「saveInitialState」は使わない方法を見つけたい
というところです。

これはただの取り越し苦労であったことは次回にわかりますが、結論を先に言うと
saveInitialState」(メニューでは Solvers > Initial State )を実行した時点で
particleShapeアトリビュートに初期状態は組み込まれる」とうことです。








<Expressionを利用する方法>
 Expressionを使えばMelを毎回実行しなくとも、自動的に設定したスクリプトを実行してくれます。
 これで最初のフレームでパーティクルがEmitされるようにすればいいはずです。

でやってみました。
詳しいことは省略しますが、ParticleShapeのPerParticleAttributeからCreateExpressionを追加しました。
が一つ追加したいだけなのになぜか大量のパーティクルが生まれてしまったり、二度と生まれなかったりで挫折しました。

Twitterで@spx808さんにヘルプをお願いし、以下のアドバイスをいただきました。

「if (frame==2)emit -pos 0 0 0; とか。
パーティクルのシェイプノードに入れるとパーティクルの数だけ実行されてしまうので

単独のエクスプレッションにするといいと思います。」

まさにおっしゃる通りのことが起きていましたw
よく考えたらそうですね、PerParticleAttributeなのでパーティクル毎に発生します。


というわけで、アドバイスに従ってやりなおしました。
これまでのように「particle」コマンドでparticleShapeを作成し
メニューから windows > animation > Expression Editor で単独のエクスプレッションを作成。
(注:このプロジェクトの開始フレームは「1」です)

でも上記のままのエクスプレッションではエラーになります。
// Error: A particle object flag must be specified with the -object flag. //
// Error: An execution error occured in the expression expression1. //


どのパーティクルシェイプに追加すべきかという-object(-o)フラグが無いからです。
正解は
if (frame==2) emit -o particle1 -pos 0 0 0;
となります。

ところでこれだとパーティクルが出現するのはフレーム2からで、フレーム1では表示されません
例外は最初にこのエクスプレッションを「Create」もしくは「Edit」ボタンを押した時だけです。
タイムフレームを進めてフレーム1に戻って、再び再生してもフレーム1では表示されません。


その理由はヘルプ「エクスプレッションが実行される頻度」にあります。
「エクスプレッションは、アニメーション時間またはフレーム番号が変わるたびに実行されます。」

ようするにフレーム1ではエクスプレッションがまだ実行されていないのです。

そのためフレーム1では初期状態が表示されます
このケースでは、particleShape1の初期状態はパーティクル数ゼロです。
(初期状態が異なる場合はそれに応じた数のパーティクルが表示されます)

同じ理由で、「frame == 2」を「frame == 1」に変えてもフレーム1でパーティクルは表示されません。


※「frame == 1」でタイムラインをすすめてもパーティクルは表示されません。
最初にエクスプレッションが実行される時(フレーム1から2へ進むとき)は、フレーム数は「2」になっており、それ以降も同様に「frame == 1」の条件が成り立つ機会がないからです。
このような場合は、「frame >1」にすれば条件が一致するようになりパーティクルが表示されます。


この方法を利用すれば、初期フレーム以外の好きなタイミングでパーティクルを出現させることが出来ます。
例:フレーム15でパーティクルを追加する。
if (frame==15) emit -o particle1 -pos 0 0 0;