たらちゃんの知恵箱

CGに関するちょこっとテクニカルなブログ

なんでCharacterTD(Rigger)を選んだか

なんと前回更新から一年以上経っているという。。
このブログは一年に一度更新にしようかな(笑)
なんとなく気分的に文章を書きたくなったので前回の続きでも書こうと思います。

数ある職種の中で何でCharacterTDを選んだかというと、まず1つに、モデリング、アニメーション、コンポジットといわゆる花形職種であるこれらは目指す人が大量にいるんですね。
そして今や凄い人というのはいくらでもいる中で、今さら自分がそのうちの一人になったところであまり価値はないと思いました。
(もちろんハリウッドの超一流クラスだと代わりの効かない人材ですが、日本でそこそこのレベルならいくらでもいます)
学生さんでも半数以上はモデリング志望であると思います。

これは推測ですが、ほとんどの専門学校では最初にモデリングを教えることが大半で、何も知らない状態で学校に入った人はどんな職種があるかも分からないわけですから、最初に教わったモデリングに興味を持つのは当然のことだと思います。
つまりモデラー志望の人が多いのは学校の教え方の問題であると思ってます。

そんな自分も学生時代はモデラー志望で就活してましたが、いざ仕事でジェネラリストとして色々経験してみると、実はモデリングがしたいのではなく、モデリングしか出来なかっただけ、ということに気付きました。
人間というのは自分が経験した範囲内のことしか想像できない生き物ですから、やったことのないことは出来ない、向いてないと思い込んでしまうんですね。

そしてモデリング~コンポジットまでCGの流れの作業を仕事で一通り経験することで、自分に向いているものが少しずつ見えてきました。
今まではモデラー志望だったので絵やデッサンの勉強もしてましたが、それは自分が本当にしたかったわけではないので(うまくなりたいとは思ってました)、自分に嘘をついて、半ば強制的にいわゆる努力をしてました。
でもこういう頑張りというのは実は長続きしないんですね。

才能というのは努力が出来ることではなく、なにより好きになれることが才能だと思います。
モデリングを時間を忘れて熱中できる、時間があればモデリングせずにはいられない、そう思えることが才能です。
自分にはプライベートな時間を使ってまでモデリング、アニメーション等に熱中することはなかったです。
(昔から器用なほうではあったので、仕事で求められるクオリティもそれなりにこなせていて、周りの先輩と比べても見劣りしてると思えなかったのでこの時点では自分にはモデリングの才能があると思い込んでました。)

そして昔からずっと興味を持っていたプログラミングがCGでも応用が効くことを知り、独学で勉強を始めました。
最初はうまくいかず何度も挫折をしました。
周りにも聞ける人もいなかったのでかなり苦労はしましたが、諦めずに勉強しているとある日突然、脳がスゥーっと、まるで空気が通ったような感覚に陥りました。
するとその日以来、あんなに分からなかったプログラミングが理解出来るようになってました。
(これがアハ体験かぁ~、と一人で感動しました(笑))

分かり始めると楽しくて楽しくて仕方がなくて、仕事中はもちろん家に帰ったあとも寝る前にプログラムを書くことが日課になってました。
気付けば朝4時5時になってたこともありました。
そうです、このときに自分が熱中できることに出会うことが出来ました。


少し話は逸れましたが、一通り経験したことでやりたいことが明確になりました。
CGの制作の中でアート力はもちろん、よりテクニカルなスキルの求められる仕事がやりたいと思うようになりました。
そうなると自分の中ではリグとエフェクトの2択になりました。
(ゲーム会社にはテクニカルアーティストという職種もありますが、映像志望だったのでそこは含めなかったです)

ただエフェクトの場合は、エフェクトがやりたいというよりはHoudiniを使いたいだけという理由があり、Houdiniでプロシージャルなアプローチでの特殊なエフェクトは好きなのですが、いわゆる爆発や破壊や水等のシミュレーション系の定番エフェクトには興味はあまりありませんでした。
でも仕事で求められるエフェクトというのは大半は後者なので、エフェクトをスペシャリストとしてやるのは選びませんでした。

あとはCharacterTDという職種は地味なイメージがあるようで(実際地味ですがw)学生さんはまず選びません。
ある程度経験を積んだあとでテクニカルな素養のある人、またはエンジニアから移行するような人が多いイメージです。
仕事の地味さと求められるスキルレベルが比例してないのでまずなりたがる人が少ないです。
(少なくとも今の自分の職場ではスクリプトは書けて当たり前のレベルで求められますが、書けない人も当然います。
ただそういう人は仕事が遅くなりがちで、周りと比べられる分、どうしても評価は低くなってしまいます)

でもこれってチャンスなわけです。
人が少ないと自ずとライバルは少ないし出来る人も数えるぐらいになってきます。
その中で他の人より高いスキルを身に付けるのは他の職種に比べて圧倒的にハードルは低いです。
現にSNS上でもモデリング~コンポジットの各職種でそれぞれ有名な人は数多くいますが、CharacterTD/Riggerの場合数えるぐらいしかいないと思います。
仕事を長くやっていく、業界で生き残っていく上ではこういった視点で考えるのも大事だと思います。

そんなこんなで一番テクニカルな知識の求められるCharacterTDという職種を選ぶことにしました。


もし学生さんや仕事の経験の浅い方が読んでくれていたら、一言言いたいのは若いうちは色んな経験をしたほうが視野が広がるよ、ということです。
自分もモデラー志望だったのが色んな経験をしたことで全く違う方に興味の指針が変わりました。
プログラミングをやる前はまさか自分に向いてるなんて考えもしませんでした。
(実は高校のときに受けた職業適性検査ではエンジニアに向いている、と出てたのですが、当時はデザイナーになると思い込んでいたので見向きもしてなかったです)

やってみる前から自分の可能性を狭めないでほしいです。
もちろん学校に入る前からやりたいことが明確な人は素晴らしいと思います。

失敗が許されるのは若いうちだけです。
色んな経験をすることで自分が思ってもないような新たな自分に出会えるかもしれません。

生存報告

久しぶりの更新です。
約1年弱ぶりですかね。
なんというか、去年の9月から自分の人生の中でも数少ない大きなイベントを迎えておりまして、しばらくブログを書くモチベーションが落ちていました。
しかしだいぶ落ち着いてきたので、まぁまた書いていこうかなぁと思い立った次第です。


実はそれとは別に転職活動もしてました。
今までは地方のCGプロダクションで働いてましたが、2019年6月から都内の某有名ゲーム会社の某映像制作チームでCharacterTDとして働いてます。
(これだけで察しのつく方もいるかもしれないですねw)

CharacterTDはRiggerとも呼ばれますが、個人的にリガーっていう響きがあまりかっこいいと思わないので、これからもCharacterTDと名乗りますw
あとTDっていう肩書きは憧れなので(笑)

今まではジェネラリストとして働いていて、この制作スタイルが自分には合ってると思ってましたが、同時に何か1つでも誰にも負けないと自信を持てるスキルがないのもコンプレックスでした。
時代の流れ的に会社の人数が多くなるとどうしても部署を細分化して効率重視になるので、このままでは自分はどこにも属せないんではないか?という危機感も感じてました。

そんなこんな悩みもあり、とりあえず日本でも有数の分業制のプロダクションでスペシャリストとしてどれだけ通用するか試してみたいと思い転職を決意しました。

しばらく働いてみた感想では、やはり周りのレベルは高いです。
ただ今まで学んできたことは間違いじゃなかったなと感じる瞬間もあり少しずつ自信も深められそうな環境です。
さすがに技術レベルも高いですし毎日充実した日々を過ごせてます。

しばらくはスペシャリストとして働こうと思ってますが、またいつの日かジェネラリストに戻る予定でいます。
なぜならCG業界で唯一憧れを抱いた故 林田宏之さんのようにアート、テクニカルどちらも化け物級のスーパージェネラリストに憧れているからです。
本当は林田さんに認めてもらうのが自分の夢であり目標の1つでしたが、残念ながら願いは一生叶えられなくなりました。。
ただ次の目標も定まりましたので今はそれに向けて日々モチベーション高くやっていきます。


これからはこういった感じで会社のことや日常+技術的なこともちょこちょこ呟こうと思います。

長々書きましたが、次回はどうしてCharacterTDを選んだかについてでも語ろうと思ってます。

【Maya】レンダーレイヤーが壊れる原因と対処法

Mayaのレンダーレイヤーはかなりの高確率で壊れることがあります。

経験上、壊れる原因はいくつかあるので、その対処法をまとめようと思います。

今の時代でこの記事がどれだけ為になるかは分かりませんが。。

 

1,フェース単位でのマテリアルアサイ

これはMayaではある意味ご法度で、プロダクションによっては禁止されているかと思います。(例えば社内チェックツール等が用意されており、様々なチェック工程をクリアしないと下流へデータをパブリッシュ出来ないなど。)

ただ小規模の会社等パイプラインがきっちり整備されてないような会社ではやってしまいがち。見極め方はいくつかあり、ノードネットワークを見ると下図のような違いが見られます。

f:id:pusan00:20180918005959p:plain

 ※上のコネクションが正常な状態。下のコネクションがフェース単位で当たっている状態。コネクションがごちゃごちゃしてしまっている。また、シェーディンググループが複数ある場合、マテリアルが複数当たっている状態。

基本的にはシェイプノード→シェーディンググループへの黒色のコネクション一つが正しい状態ですが、フェース単位で当たってる場合はシェーディンググループ→シェイプノードに緑色のコネクションが当たってますので、その場合はフェース単位のアサインを疑いましょう。

 

2,リファレンスでシーンに読み込む

ある意味これが一番の根幹の部分で、例えばキャラのデータにレンダーレイヤーを構築しておき、カット作成時にリファレンスでシーンに読み込むと高確率で壊れる、ということが起こります。(とくにフェース単位でアサインしているメッシュ。

これは何故か?

恐らくですが、リファレンス読み込み時にネームスペース名が付くことでMayaがコネクション情報を拾いきれなくなり、マテリアルのアサイン情報が無くなってしまうのではないかと思います。(Mayaは名前で判別することが多々あるので。)

 とはいえ、大量のカットを構築するにはリファレンスは避けては通れないので、対処法を考える必要があります。以下が主な対処法になります。

 

■レンダーレイヤーの構築情報をいったん別ファイルに書き出し、シーン上で構築する。

この方法が一番事故の少ないやり方かと思いますが、こちらは残念ながらMayaの標準機能では出来ず、別途スクリプトを用意する必要があります。

こちらが難しい場合は下記の方法になるかと思います。

 

■マテリアルをアサインし直さずにレンダーレイヤーを構築する。

一番有効なのがマテリアルオーバーライド。

設定方法はレンダーレイヤー上で右クリック→【Overrides】→【Create New Material Override】。

または、レンダーレイヤーアトリビュートの【Shading Group】にオーバーライド設定後、シェーディンググループノードをドラッグ&ドロップでコネクトすれば同じ設定が出来ます。

ただ、これは一括で同一のマテリアルが当たってしまうため、メッシュ単位で別の設定をしたい場合は使用出来ません。

 その場合はマテリアルのカラー等のアトリビュートをオーバーライド設定するやり方が有効です。

こちらの場合は、masterLayerの時点でメッシュ単位でマテリアルを分けておく必要があります。

 

要するにマテリアルのアサイン情報が壊れるわけなので、レンダーレイヤーの設定時にマテリアルを当て直さなければいい訳です。

恐らく今のご時世、フォトリアル系のCGではArnold,V-Ray等のレンダーパスでパスを出力する方法が多いので、レンダーレイヤーを設定するのはアニメ系の案件が多いかと思います。

その場合は上記の設定方法で問題なく設定できるので有効な方法になるかと思います。

 

3,壊れてしまった場合の対処法

もしシーン上で壊れてしまった場合、以下のコマンドをMELで実行すると修復される場合があります。

fixRenderLayerOutAdjustmentErrors;

ただこちらのコマンドはシーンの全レンダーレイヤーに実行されるのですが、シーン内で使用していないレンダーレイヤー(レンダーレイヤーエディタ上では見えないがシーン内にゴミとして存在している場合)はエラーが出る場合があります。(アウトライナの【DAG Objects Only】をオフにすると存在を確認出来ます。)

しっかりシーンを整理した状態で実行しましょう。

もしこちらのコマンドでもうまくいかない場合は、リファレンス元のデータの作りを上記の【マテリアルをアサインし直さずにレンダーレイヤーを構築する。】やり方で再設定すると修復されることもありますので試してみてください。 

 

 

今回はMayaのレンダーレイヤーの設定周りの説明でしたが、Maya 2016 Extension2 以降ではレンダーレイヤーの仕様が変わっており、設定ファイルのエクスポート等も出来るようになっているようです。(まだ業務で試したことはないのでなんとも言えませんが。。(;^ω^))

 

ではでは(^^♪ 

【After Effects】選択したレイヤーをタイムリマップでコマ打ち

今回は AfterEffects のスクリプトの紹介です。

仕事ではアニメ案件を扱うこともよくあるのですが、その際にコマ打ちが必要になったので作ったスクリプトです。

● 何故タイムリマップか

AfterEffects にはポスタリゼーション時間というエフェクトがすでにあり、そちらでフレームレートの調整は出来るのですが、コマ単位での調整が利きにくいというのが難点で、コマ打ち用途では個人的にはあまり使わないです。

アニメ案件ではフレーム単位でコマの調整をしたい場合が多々発生するので、タイムリマップのほうが調整がしやすいのです。

(こだわりといえば聞こえはいいですが、結局は力技です。。(;^ω^))

 

それでも最初からすべてを1フレームずつ調整は現実的ではないので、一律で2コマ,3コマ打ちの出来るスクリプトを作り、そこから1フレ単位での調整をしようと思った次第です。

 

ソースコードは以下です。

 5行目の var frameHit = 3; の数字がコマ打ちの数字となります。

ここを2に変えると一律2コマ打ちとなります。

 

【After Effects】選択したレイヤーをタイムリマップでコマ打ち

 

仕事では Python 書くことが多いですが、JavaScript もたまにはいいですね(*^^)v

とはいえ、AfterEffects でも Python 使えると一番助かるのですが。。(;^ω^)

【Maya】 動く物の軌跡をカーブで作成。~バーテックス編~

引き続き軌跡をカーブで作成シリーズです。

前回はパーティクルでしたが、今回は選択した頂点の軌跡をカーブで作成できます。

選択がオブジェクトの場合は、オブジェクトのピボット位置にカーブが作成されます。

 

以下、ソースコード

【Maya Python】選択した頂点の軌跡をカーブで作成。選択しているのがオブジェクトの場合、ピボ ...

【Maya】 動く物の軌跡をカーブで作成。~パーティクル編~

パーティクルの軌跡をカーブで作成するスクリプトです。

Mayaでは標準でそんなことも出来ないので、作りました。

プロシージャルに作れるのが一番ですが、まぁ~使い道はあるでしょう(-ω-)

 

スクリプトを使用したい方へ

 パーティクルを選択した状態で以下のスクリプトを実行するだけでカーブが作成されます。関数内( createCurveOfParticleTrail )の startF, endF でフレームを指定出来ます。

【Maya Python】 選択したパーティクルの軌跡をカーブで作成。

MayaでHoudiniの【 PointFromVolume 】,【 scatter 】ノードを再現。

Houdini 触ってると Maya で同じようなことは出来ないかな?と考えることがあります。(仕事で Houdini 使えないこともあるので、、(; ・`д・´))

今回は Houdini でも頻繁に使用する scatter ノード、いわゆるポイントの大量配置をMaya で再現しました。 

 

大量配置の機会というのはCGでは頻繁にあります。

少し前まではParticle、またはフリープラグインのSOuP(今は有料(; ・`д・´))でやってましたが、今ではMASH, XGen等、デフォルト機能でも選択肢は増えました。

 

なので今回紹介するスクリプトを今更使う機会はとくにありません。。

ありませんが!、例えば Houdini では便利ノードがすでに沢山用意されていて、大量配置なんかは scatter ノード使えば一瞬です。

しかし、そういった便利ノードは諸刃の剣で、何故そうなるかという仕組みを理解出来てないと他のソフトで応用が効かないというデメリットもあります。

逆に大量配置のアルゴリズムを知っていれば、どんなソフトでも自分で実装することが出来ます。

そういったソフトにとらわれないコアな知識を身に着けるのが大事だと思ってます。

 

今回はメッシュの内部、または表面のポイントを取得するのが目的です。そのための手順は以下の通りです。

  1.  メッシュのバウンディングボックスを取得。
  2. バウンディングボックス内のポイントの数と位置を計算。
  3. 計算したポイントからレイを飛ばし、飛ばしたレイが奇数の場合はメッシュの中、偶数の場合はメッシュの外と判定。

3.で説明したメッシュの内外判定は以下の画像が分かりやすいかと思います。

(図の〇3, 〇4のレイも厳密には2回当たってます。)

f:id:pusan00:20180825233315p:plain

アルゴリズムが出来ればあとは実装するのみです。

Maya API 2.0 の MFnMesh クラスには 【allIntersections】という機能がありますので、こちらを利用します。こちらでレイの衝突判定を行います。

【Maya Python API】Houdini の 【 PointFromVolume 】,【 s ...