KLabGames Creative Blog

KLabは、多くのスマートフォン向けゲームを開発・提供しています。このブログでは、KLabのクリエイターがスマートフォン向けのゲームを制作・運営していく中で培った様々な技術や挑戦とそのノウハウについて紹介していきます。


この記事は KLab Creative Advent Calendar 2019 の 12日目の記事になります。

image3こんにちは!日々是胃に穴、サウンド・グループのemanonです。
昨年、私はAdvent CalendarにてKLab Sound Teamを紹介する投稿を致しましたが、今年は制作面でのお話をということで、サウンドデザイナー勢が大好きであろうと思われる「バッチ処理」について書かせて頂きます。

何故、私はNuendoでバッチ処理っぽいことをやるのか?

「何故Nuendo(注:またはCubase)でそんなことするの?SoundForgeでエエやん?」
(注:以降「Nuendo」と単独で記載させて頂きます。)

…という至極ごもっともな疑問を持たれる方が多くいらっしゃるかと思います。
まずは、そこに至る二つの要因についてお話致します。

要因1. SoundForgeを使用するにあたり、私の環境で不具合が出たことがあった。

ボイス整音処理を手伝うことになり、その作業用にSoundForgeのバッチを頂いたのですが、私の環境ではバッチ処理をした全てのボイスに「ビー!」と発振したような音がのってしまい、バッチ処理を自分環境用に再調整をすることになった。
(注:弊社の制作環境では使用しているソフトのver.をメンバー間で揃えています。)

要因2. Nuendoで作業中にSoundForgeを極力立ち上げたくはない!

Nuendoを使用されている方は体験としてわかると思います。Nuendoで立ち上げているプロジェクトで設定したサンプルレートとは異なるレートの波形をSoundForgeに放り込んでしまった際に、SoundForgeの設定が優先されてしまいNuendo側のレートが変わる!…というもので、極稀にやってしまうことがあって面倒に感じていた。

上記2大要因による些細なトラブルが度々あり、
「だったらNuendoだけでどうにかならんか?」と。

ただ、Nuendoはバッチ処理機能を持ってはいません。
しかし、楽曲制作・SE制作を通じて「機能の組み合わせで同じような結果が得られないことはないハズ!」という実感がありましたので、「似非バッチ処理」として検証を試みてみました。

以降、お読みいただく上で注意点が1点あります。
弊社の制作環境で使用しているNuendoはWindows10版のNuendo8となっておりますので、最新のNuendo10等と比較した際に差異が生じている可能性があります。その点についてはどうかご了承下さい。

1. プロジェクトファイルを作る!

なにはともあれ、似非バッチ処理をするプロジェクトを作らないと始まりません。
まずは、ボイス(mono音声)を似非バッチ処理する前提で、以下のように大変シンプルなオーディオトラック(mono)が1つあるプロジェクトを作ります。

image5

画像例。このようになっていれば大丈夫です。

2. プロジェクト設定を確認

画面上部にあるメニューの「プロジェクト(P)」から「プロジェクト設定…(J)」を選択。
以下のスクリーンショットのプロジェクト設定画面を表示させ、その中の設定項目の「パンニングのレベル補正」が0dBになっていることを確認する。

image26

上記画像中の「長さ」については、各自で適切な調整をしてください。

3プロジェクトに波形を取り込む

似非バッチ処理したい波形ファイルを用意し、先程準備しておいたオーディオトラックへとドラッグ&ドラッグでおもむろに放り込みます。

image6

すると、上記スクリーンショットにあるダイアログが表示されるので、「1つのトラック」を選択。

次に以下のダイアログが表示されるので、以下のようにチェックボックスにチェックを入れてOKを押します。

image25

すると…
プロジェクトファイルに以下のような感じに波形が取り込まれます。
音量にバラつきの見られる、まだ未調整のwavであることがわかりますね。

image19

4プールを開いて波形を仮想的に整理

次に画面上部にあるメニューの「メディア(D)」から「プールを開く(O)」を選択。
現状では以下のような状態になっているので、これを整理します。

image21

プール内、最上部にある赤く印のついた「Audio」フォルダを選択し、右クリックメニューから「フォルダーを作成」をします。

image14

出来たフォルダーに分かりやすいように名前をつけ、その中に波形を移動します。
以下例では「original」としました。

image11

ここまでプール内の波形を整理しましたので、一度プロジェクトのAudio実フォルダを見てみましょう!

image15

あれ…originalフォルダに入っていない!?
これはどういうことかというと『プール内では仮想的にファイルを管理することができる』ということを意味しています。この違いを理解していると、Audioデータをより効果的に使用出来るようになると思います。

5下ごしらえ処理としてノーマライズをかける

放り込んだ波形のイベントを全て選択し、ダイレクトオフラインプロセッシングを使ってノーマライズをかけて大雑把に音量感を合わせます。image23

ちなみにダイレクトオフラインプロセッシングでは、お気に入りの処理を作って登録させておくことが出来ます。更に!そのお気に入りに対してショートカットを当てられるので、波形を放り込んだ後で良くやる処理などを作り込んでおけば、楽できる場面結構あります!

6下ごしらえ処理したトラックのインサートにエフェクトを差す

トラックを再生させながら、ローカットしたりコンプかけたりディエッサーかけたりして、良い塩梅になるようにエフェクトの設定を追い込んで行きます。

image7

上記スクリーンショットは『あくまでも一例』ということでお願いいたします。
バッチ処理をする波形群の状況に応じて必要な処理は異なってくるので、音を聴いて各自判断して適切な処置をして頂ければ幸いです。

<例>
同じ声優さんだけのボイスのセットなのか?
複数声優さんの掛け合いによるカットシーンがまとめられたボイスのセットなのか?
男声なのか女声なのか?
どのくらいのラウドネスを目標値にするのか?

といった具合に、様々な状況に合わせて処理をすることになるケースがほとんどなので、「何にでも適用可能な虎の巻」のようなものはない…と思って下さい。

7波形をインプレスレンダリングで処理する

まず、手順6でエフェクトをかけたトラックにある波形イベントを全選択します。
次に画面上部にあるメニューの「編集(E)」から「インプレスレンダリング(E)」を選択して表示されるレンダリングメニューの項目を確認。以下スクリーンショットの赤枠で括った箇所を確認して同じになるように設定をしてください。

image24

注:保存先は、各々のプロジェクトファイルで異なることになります。

一番のワナになりそうなのが、メニュー中で一番小さい「鍵マーク」
これを上記画像のようにロック状態を選択することで、レンダリング後のトラック名・ファイル名が元名称から引き継がれ命名されます。以下に例を記載致します。

元名称:TEST_01.wav
レンダリング後名称:TEST_01-01.wav

もう1点。
レンダリング前に念のために再度プールを開き、プール内最上部にある『赤く印のついた「Audio」フォルダ』(手順4の最初のスクリーンショットを要参照)を選択した後、インプレスレンダリングを行います。

以下、インプレスレンダリング中の様子。

image12

8インプレスレンダリング処理後のプロジェクト画面

インプレスレンダリング処理の後、プロジェクト上では以下スクリーンショットように、新たにトラックが作られて波形がレンダリングされた状態になります。もし全部の波形が繋がっているということがあったら、インプレスレンダリングの設定を見直してください。

image9

9レンダリングで新たに生成された波形をプール内で確認

ここで再度プール画面を開くと、以下のようにファイルが作られていると思います。
これを手順4でやった元波形同様に整理してみましょう。

image20

以下、あくまでも例としてですが…
「process1」というフォルダを作り、レンダリングされた波形をそこに入れました。

image4

10レンダリングされた波形をノーマライズ

やり方によってはこの過程はいらない方もいらっしゃるかもしれません。
今回の例では、インプレスレンダリング時にかけたコンプで波形を軽く潰したあとにゲイン処理を全くしていないので、ここで再度ダイレクトオフライン・プロセシングのノーマライズをかけて一括で音量感を整えます。

image13

上記もあくまで例ということでお願いいたします。
ピークに対してどの程度の余裕を持たせるのかは、関わるプロジェクトの仕様によるので、各自適切な余裕を持たせてノーマライズしてください。

また、余談になりますが波形イベント毎のラウドネスなどを、Nuendo上で簡単に確認する方法を以下に記載しておきます^^

ラウドネスなどを確認したい波形を全選択した後、以下のメニュー項目から「解析(T)」を選択すると…

image1

すると、解析結果が選択した波形イベント分だけ表示されます。

image22

注)上記スクリーンショットでは見やすいようにバラして並べて表示してます。

極端に短い波形などはラウドネス値が-80.00LUFSとなるようですが、表示されるものとそうでないものとを耳で確認することで全体でのバランスは取ることが出来ると思います。

11仕上げの最終インプレスレンダリング!

…の前に、またまたプールを開きまして、今回は先にフォルダを作っておきます。
以下例では分かりやすいように「process2」としました。

image17

そして上記スクリーンショットのように「process2」フォルダを選択した状態にし、手順7で設定したインプレスレンダリング設定でレンダリングを行います。「(現在の設定で)レンダリング」にショートカットを当てることが出来るので、事前に設定しておけば色々と捗ると思います。

以下、レンダリング後のプール内の状態。
「process2」フォルダ直下にレンダリングされた波形が直接格納されました。

image16

感の良い方は「手順7でも同じ用にやった方が早かったじゃん!」と気づいたと思います。プールの説明を軽く入れたかったので、このように解説させて頂きました^^

12最終状態のプロジェクト画面

プロジェクト上の画面、以下のようになっていると思いますが、どうでしょうか?

image10

上記のようになっていたら、Nuendo上での処理は終わりになります。

13Nuendoで処置した最終ファイルを確認

手順4で一度確認したプロジェクトのAudio実フォルダ内を再度覗くと…
以下のようにファイルが格納されていると思います。

image8

ここに格納されたファイル名で、プール内仮想フォルダ「process2」の中にあるファイル名と同じものを選択しctrl+Cでコピーしたのちに…

以下のような感じに、この上の1つ上の階層に「_RX_process」のような分かりやすい名前のフォルダを作り、そこに先程コピーしたファイルをペーストしてあげます。例フォルダ名にある文字列「RX」はiZotopeの同名アプリケーションから取らせていただきました。

image2

14次処理用ファイルを格納したフォルダを確認、他

手順13を経て「_RX_process」フォルダ内は以下のようになったと思います。

image18

こちらに格納したファイルをiZotopeのRX等を使って、ノイズリダクション処理やより細かいボリュームオートメーションの処理を行っていくことになりますが、その前にもう一手順として、レンダリング処理で追加された余計な文字列をリネームソフトやバッチファイル(拡張子bat)を使い取り除いてあげます。

以下枠内、wavファイル名の末尾6文字を削除するバッチ例です。

for %%F in (*.wav) do call :sub "%%F"
goto :EOF

:sub
    set BEFORE=%~1
    set FILENAME=%~n1
    set EXTENSION=%~x1
    set AFTER=%FILENAME:~0,-6%%EXTENSION%
    ren "%BEFORE%" "%AFTER%"
goto :EOF

大抵の場合、元wavのファイル名で実装することが多いと思うので、もとのファイル名に戻してあげるということです。

…ということで、Nuendoによる似非バッチ処理のお話は終わりです。
iZotopeのRXによるボイス整音処理は現代では必須だと思いますので、まだご存知でない方は以下リンク先の動画を是非とも御覧ください!

『KLab×gumi×TACSYSTEM』ソーシャルゲームサウンドMeetup! vol.2

まとめとしての個人的見解(メリット・デメリット)

メリット

  1. ファイルがとっちらからない!
    オリジナルファイル、処理途中ファイル、最終結果ファイルが、1つのNuendoプロジェクト内に綺麗にまとまる。
  2. 実際に音をプレイバックしながら、非破壊でバッチ処理設定を追い込める。
    通常のバッチ処理では一度処理(当然破壊処理)しないと確認することが出来ないので、限られた時間内で設定をより追い込んでいけるのは大変助かる。
  3. 処置後波形が新規トラックに生成されて視認出来るので便利。
    波形を視認して意図した処理が出来ているか確認出来る点も便利。
  4. SoundForgeなくてもなんとかなるかも?…と思ってしまった。
    その分をSE制作素材やVSTiに設備投資費する作戦が使える!
    …といって、無いと無いで困るのがSoundForgeなのである。

デメリット

  1. レンダリング処理がSoundForgeより少し重い?
    個人的には微々たる程度の差だと感じています。
    いつものバッチ処理時間を耳休め時間にしている人でしたら、全く気にならないと思います。
  2. 文字列が追加されるので、それを取る必要がある。
    しかし、追加される文字列数は1回のレンダリングで決まっているので、手順14で示した対処法などを行えば労力をホボ無視出来る。

メリット・デメリットを書き出してみると、このNuendoによる似非バッチ処理法…
十分に役目を果たしてくれる悪くはない手段といえそうです。また、何かがあった際の「コンティンジェンシー・プラン」としても、覚えておいて損はない手段だと思いました。

最後に、使用ソフトという宗教の枠を超えて「こんなやり方もあるのか~!」と、
今回紹介した投稿を楽しめて頂けましたならば幸いです。

そして、弊社サウンドチームに興味が御座いましたら、
KLabSoundTeamのTwitterのフォローよろしくお願い致します!^^

明日はR&DグループのYojiさんの記事です。
ではでは、来年のアドベントカレンダーでまたお会いしましょう!!

はじめに

この記事はKLab Creative Advent Calendar 2019 の11日目の記事になります。

こんにちは、はじめまして。KLab株式会社、CGクリエイターの塩です。

映像制作会社での経験を経て、現在はUnityをメインにMaya, Houdini, AfterEffectsなどを使用し、演出作成やエフェクト作成を行う演出チームに所属しています。

今回触れる内容はMaya MASHについてです。

タイトルの通り、私自身MASHに関しては全くの初心者でございます。

記事を読んでくださる方の中には、既にマスターされている方もいらっしゃるとは思いますが、温かい目で見守っていただければと思います。私と同じくMASH初めましての方は、是非一緒に学んでいってくださると私自身励みになります!

今回はMASHを触ってみて感じた自身の所感と共に、MASHの使い方を一からご紹介できればと思っております。よろしくお願いします。

数年越しのMASHへの想い ~基本的な操作説明~

image1

今回紹介するのはMayaの機能の1つである「MASH」です。

MASHはMaya2016 Extension2から追加された、モーショングラフィックス特化の機能になっています。元々はMainframe(North)という会社が開発していたMaya用のプラグインで、それをAutodeskに譲渡したことにより、MASHは正式にMayaの機能の一部になりました。

MASHがMayaの新機能として出た当初から、面白そうだなと思ってはいたのですが、なかなか触ることができず数年経ってしまいました…。KLab株式会社には「どぶろく制度(※1)」という素晴らしい制度がありまして、これを生かさないわけにはいかないと思い、ようやくMASHを触り始めました。

上記の画像がMASHのメインアトリビュートになるのですが、これを見ているだけで何だかワクワクしてきませんか?

ではここから簡単に操作説明を行っていきます。
※ここではMaya2017の日本語を使用しています。

MASHネットワークの作成

まずはMASHを操作するために必要な、「MASHネットワーク」と呼ばれるノードを追加していく必要があります。

1.ベースとなるモデルの作成

作成したモデルを選択して、Fxメニューから「MASH>MASHネットワークを作成」を選択します。すると最初に作成したモデルが横並びに複製されたかと思います。基本的にはこれらがMASHネットワークノードを介して、動きやシルエットを調整していくといった流れになります。

image3

2.ノードを追加して動きをつけていく

新しく「MASH1」と「MASH1_ReproMesh」というノードが作られたかと思います。
画像の左側赤枠で囲った部分にいくつかアイコンがありますが、このノードを組み合わせることによって様々な表現が可能になります。

image5

試しに「Transform」ノードを追加してみました。

アトリビュートエディタに「MASH1_Transform」というノードのアトリビュートが追加されています。こちらのパラメータを調整して動きをつけていくわけですね!

ちなみに「MASHエディタ」を選択すると、現在MASHに追加されているノードが一覧できます。またこのウィンドウからでも新しいノードを追加したり、ノード毎に表示非表示等の切り替え操作も行えます。

ここで一点、皆さんお気づきになられた方もいらっしゃるのではないかと思いますが、先程説明しました操作2のところで「Transform」ノードを追加したのにも関わらず、「Distribute」というノードも存在しています。これは最初に作成したモデルに、MASHを作成した段階でデフォルトで追加されるノードになります。

image10

沢山のパラメーターがありますね。ただ画像を見ていただくとわかるように、一部ロックされている項目もあります。

試しに配分タイプのタブを選択してみると、画像のように「一次」から「放射状」、「球体」、「メッシュ」など様々なタイプが有るようです。

ちなみに「放射状」を選んでみると、基本シルエットがパッと円形に配置が変わり、放射状のアトリビュートがアンロックされて、調整できるパラメーターも変わりました!このようにタイプ毎に操作できるアトリビュートが取捨選択されるのはありがたいです。(このあたりの挙動は個人の好みもあるかと思いますが。)

image6

チュートリアル動画を模倣して作ってみました

この動画はMainframe(North)氏による「MASH-NAB Cube」という動画を参考に作成したものになります。複雑な動きではありますが、操作的にはさほど難しいことは行っていません!

簡単に説明しますと、

1つ目のMASHネットワークでパタパタと裏返る面の動きをつけています。こちらのMASHネットワークでは「Distribute」「Offset」「Strength」の3つのノードを使用してこのような動きをつけています。

image4

image2

image9

image7

面白い・・・

ちなみにこの動画のように、影響範囲が広がっていくような動きは、各ノードから「減衰オブジェクト」というものを作成できるので、それを動かしたりスケールをかけることで表現しています。※下記に貼り付けた画像の白い球体状のもの。

image8

2つ目のMASHネットワークで、1つ目のMASHネットワークで作成した面を、別オブジェクトをベースに複製して配置しています。大まかに説明しますと、MASHネットワークの二重がけと思っていただけるとわかりやすいかと思います。

2つ目のMASHネットワークの「Distribute」アトリビュートから、

・ポイント数を6に変更
・配分タイプを「メッシュ」に変更
・メッシュタブから方法を「面の中心」に変更
・入力メッシュに、作成したい形状のメッシュをアタッチ

上記の方法で設定をすると下の画像のトゲトゲのキューブ形状が出来上がります。

image11

今回の動画ではキューブ型のベースオブジェクトの6面に配置されるように設定しています。試しにポイント数を4にして、方法を「エッジ」に変更してみると以下の画像のようなまた違った形状のものが出来上がりました。

image12

終わりに

皆さんいかがでしたでしょうか?

今回はMASHの操作説明をメインにご紹介させていただきましたが、皆さんMASHの面白さを感じていただけましたでしょうか。初めてこのようなブログを書かせていただきましたが、私自身MASHを説明するにあたっていくつかチュートリアルサイト(※3)を閲覧させていただき参考にさせていただきました。覚えた技術を改めて文字に起こして文章化する難しさと面白さに気付けたいい機会でした。

また機会がありましたら、引き続きMASH関連の記事を書いていきたいと考えています。「モーショングラフィックスに特化した」とご紹介させていただきましたが、是非ともモデラーの方やエフェクターの方にも触っていただきたい機能の一つではないかと感じました。

今後はその点にも触れつつ理解を深めていけたらと思っています。

長くなってしまいましたが、最後まで読んでいただきありがとうございました!

※1「どぶろく制度」

標準労働時間の10%以内であれば、上司の承認なしで本当にやりたかった研究など、好きなことに時間を費やすことができる制度です。上長からの指示ではなく、自発的な創発を促すことや、新しいものを生み出す苗床の醸成を目的としており、優れた技術やアイディアを製品化することも可能です。

※2「MASH-NAB Cube」

動画配信サイトvimeoでMainframe(North)が投稿しているMASHのチュートリアル動画です。

https://vimeo.com/175510928

※3「参考にさせていただいたサイト様」

作りながら学ぶMAYAインディゾーンブログ Maya太郎 様

http://maya.indyzone.jp/tag/mash/

AUTODESK AREA JAPAN 様

https://area.autodesk.jp/

Born Digital 様

https://www.borndigital.co.jp/

はじめに

こんにちは。KLab株式会社クリエイティブR&Dグループ所属のkenと申します。

R&Dグループでは3Dキャラクターアーティストを担当しています。

キャラクターの衣装制作において高品質かつ、より効率的なワークフローを検証・研究するという目的を兼ねて現在Houdiniを勉強しています。

衣装制作はポリゴンによるモデリング、Zbrushによるスカルプト、MarvelousDesignerまたMayaのnClothによるシミュレーションなど様々なアプローチがあると思いますがリアルな自然なシワを作りたい場合はシミュレーション機能を用いたほうが品質という点ではより良い物に近づける事が出来るかと思われます。

会社で導入を進めているHoudiniはシミュレーション+プロシージャルにモデリングする事が可能なので高品質+修正対応やパターン出しなどの効率化が期待出来るのではという事で、今回Houdini17.0から搭載されたシミュレーション機能であるVellumを使用した衣装制作を紹介したいと思います。

私自身、Houdini初心者という事もありソフト自体の概念等をまず理解する為にも同グループ所属のsasaさんによるCreativeBlogの【 R&DG report:2 】ツール紹介 : Houdini編_02 脱初心者編で、ご紹介されている各サイトは大変参考になりますのでHoudiniを勉強されようと考えている方は是非ご覧になる事をお勧めします。

R&Dグループの概要につきましてはこちらをご参照ください。

衣装制作~初心者編~について

今回の衣装制作はBornDigitalサポートの「Houdini17でTシャツを作成する」という記事を大いに参考にしており、それに加えて同じくBornDigitalサポートの「Vellumで作成した洋服に厚みを付ける」「VELLUMクロスルックデブ」という二つの記事の内容も交えつつ作成したものになります。

また、制作の中で初心者目線だと難しいと感じた点なども部分的に補足しています。

その他参考にしたサイト

Houdiniのシミュレーション機能であるVellumの詳細などが、記載されたサイトになります。

SideFX公式チュートリアルのサイトではシーンファイルがダウンロード出来ます。初心者にはやや難解かと思いますが、こちらも大変参考になるかと思います。また二つ目の動画ではSIGGRAPHでのセッションの内容が逐次日本語訳されているので英語が苦手だなという方はこちらも参考になさってください。

Tシャツ制作手順

  1. DrawCurveでカーブを作成する方法もありますが、今回はCurveを使用しました。
    まず正面(T_shirt_front)のパターンを作成していきます。
    カーブを作成する際は後々のグループでの制御を考慮し縫い目となる部分ごとにカーブを分けて作成します。image21

  1. ResampleをしてLengthでポイント数を調節します。image27

  1. Mirrorで反転コピーします。image17


  1. Fuseで離れている各ポイントをSnapDistnceを調整する事でくっつける事が出来ます。今回は最初のcurve作成時に各接合部分を※スナップで合わしているのでノード的には必要はなかったのですが念の為に適用しています。image28
    image8


  1. 基本的な構成は正面(T_shirt_front)のパターンと同様の方法で、エッジを足したい部分(Insert_Seams_Inside)を作成します。
    ※Z軸方向にばらけているポイントをTransformノード(flatten)のScaleZの値を1から0にし平にしています。image22
    image7


  1. 正面(T_shirt_front)のFuseの下でMergeします。image25


  1. Planar Patch from Curvesでカーブを元にプリミティブを作成し、名前をfrontにします。
    ResampleCurvesを有効にしSmoothingをSubdivisionCurvesにします。
    InteriorEdgeLengthでエッジ調整し、SeamGroupとInteriorPointsも有効にします。
    ※SeamGroupとInteriorPointsを有効にした結果はノード情報で確認する事ができます。image23
    image4


  1. Transformで体の前に移動させます。image30


  1. 正面(T_shirt_front)のネットワークボックスを選択した状態でコピー&貼り付け(ペースト)し複製、背面(T_shirt_back)とします。Reverseでノーマルを反転させ、正面と背面をMergeします。image29


  1. 袖(T_shirt_sleeve)を作成します、基本的な構成は正面などとほぼ同じになっています。reverseとmergeの間にgroup renameノードを追加しsleeve_front部分を全てsleeve_backに変更し、こちらも袖の正面と背面をMergeします。
    ※名前をまとめて変更するために最後に*をいれます。image20

    image2
    ネットワークボックスでまとめてある「T_shirt_front + T_shirt_back」と
    「T_shirt_sleeve」をそれぞれクリーンアップのためCleanしておきます。image15


  1. Vellum Configure Clothを作成し、1番目のインプットに布(Tシャツ)のジオメトリ、3番目のインプットに※ObjectMmergeで参照している体のジオメトリを接続します。image24
    image18


  1. VellumDrapeを作成し、SolverとWeldPropertiesの値を調整します。それ以外はデフォルトの設定となっています。image14image12
    ①縫い合わせるグループ同士を設定するためにWeld Additional Seamsを有効にします。Planar PatchFrom CurvesオプションのSeamGroupを有効にし作成したGroupを使用し縫い付けていきます。
    ②正面と背面で同じSeam番号を指定します。Groupにback_seam1とTargetGroupにfront_seam1とすると縫い目が追加されますimage31
    Groupが多い場合、中ボタンを押しながらマウスを動かすと選択しやすいと思います。image11
    各縫い目のGroupを指定すると以下のようになります。image16


  1. アニメーションを再生し、指定したSeamを結合させます。image6
    VellumDrapeのFreeze at Frameを有効にすると固定したいフレームを指定できます。今回は10Fで固定しました。image1

  1. 最初に作成したVellum Configure ClothとVellumDrapeを複製し下記のようにつなぎ、10Fで固定した物に対し袖を縫い付けるGroupの指定をします。image32
    アニメーションを再生し結合させます。こちらは25Fで固定しましたimage5

  1. Vellum Post Processを作成し、メッシュのスムース化・細分化・厚み調整などを行います。image10
    Spatial Blurで滑らかさを調整、SubdivisionをLoopに変更しスムース化、Subdivision Dephで細分化調整します。image9
    Extrude by Thicknessを有効にし、Thickness Scaleで厚みを調整します。image3


  1. 最後にColorノードを追加し色をつけて、ひとまずは完成とします。
    今回のワークフローでは、Houdiniでディテールを持ったハイモデルのみ作成し、Zbrushにてディテールを転写した後にノーマルマップを作成するフローを想定していたのでUV周りに関しては特に触れていません。image26


おわりに

今回は衣装制作∼初心者編∼ということでシンプルなTシャツの作り方のご紹介でしたが

Vellum自体が機能としてまだ新しく衣装制作に特化したという点では情報自体が少ないのでR&Dという観点からしても今後引き続き検証していく価値は充分にあると思われます。

また一通りの工程を終えてみた上で感じた事は、縫い合わせる箇所の選択がGroupまたはPoint選択になっているので縫い目が増えれば増える程、選択箇所が増えコントロールが難しくなってしまうのが効率化という点において一番の難点だと感じました。

この点に限らず自分でノードをカスタムすれば解決出来る部分は多々あるとは思いますが学習コストを考えるとHoudini初心者にはハードルがやや高いと思いました。

ケースによりますが、総括すると現時点では衣装制作のワークフローにHoudiniを取り込むというのは他の3Dソフトと比べた場合はあまり現実的ではないのかなといった印象です。

上記のような問題がバージョンアップなどで機能が改良され改善された際に応じて、より複雑な衣装の制作の仕方についてもご紹介出来ればと考えています。

以上となります、Houdiniを用いた衣装制作の際などに少しでも今回の記事が参考になれば幸いです。

最後まで読んでいただき、有難うございました。

image5

はじめに

こんにちは、uraです。
アイドルが好きで、二次元アイドルの衣装デザインを担当してきました。
その中で、より魅力的で説得力のある衣装とはどんなものだろう?どうすれば衣装をより魅力的にできるのだろう?と考えたことを共有いたします。

技術的なテクニックというより思考の話になります。
ふんわりとした内容ではありますが、何か参考になる部分があれば嬉しいです。

魅力的な衣装とは?

「魅力的な衣装」と聞いて、どんなものを想像するでしょう?
とにかくかっこいい衣装、かわいい衣装、個性的でユニークな衣装!うんうん。
着ている人に似合ってる衣装、世界観やコンセプトに合っている衣装!うんうん。

みなさん「魅力的な衣装」と聞いたとき、きっと服そのものだけではなく、着る人やシチュエーションも合わせて考えたかと思います。
たとえばフリルやレースたっぷりのふりふりでかわいい服もスポーツの場面には不向きですし、時代や文化、趣味趣向によっても、何が魅力的で相応しいのかは変わってきます。

つまり、衣装の魅力を考えるときには、誰が?どこで?何のために?などといったストーリーも一緒に考えることが必要なのかなと思います。

そして、ストーリーを明確にすることで、それに伴う魅力に関して、より具体的に考えることが可能になるかと思います。

衣装の中のストーリー

では、衣装の中にどのようなストーリーが内包されているのか、内包したいのか、を踏まえてデザインする際、まずどこから考えれば良いでしょうか?

ここで、衣装デザイナーの役割について考えていきます。

衣装デザイナーの役割

まず、衣装デザイナーという仕事は、その世界の衣装を設定する仕事です。
こちらの世界から見ると、架空の世界の出来事を衣装デザインに落とし込んで表現する仕事とも言えます。

image1

このとき、向こうの世界に行ければ、より具体的に衣装の流れを想像できるのではないでしょうか?

例として、アイドルの衣装をデザインすると仮定したとき、向こうの世界での衣装デザイナーの役割がどのようになるのか考えてみました。

image3

おお…こちらの世界の仕事としてはやることは同じでも、向こうの世界ではさまざまな役割を担っていそうです。

アイドルの衣装といっても、ライブのときの衣装とグラビア撮影のときの衣装、バラエティ番組の衣装など、趣が異なるものを着ていますよね。
スタイリストさんやライブの衣装デザイナーさん、演出さんなど、さまざまな人の関わりの中で結果的に身につけているのがその衣装となります。

デザイン時に自分がどこの役割を担っているのか考えることで、より存在に説得力のある衣装デザインができるのではないでしょうか。

衣装とキャラクター

さて、それではこれまでの流れを踏まえたうえで、実際に衣装をデザインしていきましょう。

今回衣装デザインの対象になるのは、「普段はボーイッシュだけど、実は女の子らしい・可愛らしい恰好に憧れている乙女チックな一面もある」という設定の架空の女の子アイドルです。

例① 私服

伝えたいもの:キャラクター性、ストーリー
衣装デザイナーの役割:本人

image8 image10 image2

左から A:ボーイッシュな私服(普段着) B:ガーリーな私服 C:ガーリーな私服(比較用)

Aを普段着とすると、Bの衣装に対してどのようなことを想像するでしょうか?
Aと比較してBはガーリーな衣装となっていますが、あまり垢抜けた印象ではありません。

これは「普段おしゃれにあまり興味の無い女の子が初めておしゃれをした」イメージで設定した衣装となります。
たとえばスカートは恥ずかしいのでキュロット、髪の毛を結んだりアレンジするのは難しいからヘアピン、長いスカートは動きにくいから嫌だけど脚が出るのも恥ずかしい…けれどタイツは挑戦できなかった。などなどあえて野暮ったさを残してデザインしています。

隣に並んでいるCと比べてみてください。
先ほどBでは「意図的に野暮ったさを残してデザインした」と説明しましたが、これは「キャラクター性を表現した」と言い換えることが出来るかもしれません。
改めてCを見てみると、特におしゃれに無頓着な様子もなく、むしろこなれたような印象になっていると思います。かわいい衣装なのですが、これだとキャラクター性を表現するには相応しくないかもしれません。

一方で、Cのような衣装で「撮影用の衣装」「誰かに選んでもらった衣装」を表現することも可能です。単純に服装のみを見てかっこいい/かわいい、似合う/似合わないだけでなく、どうしてその服を着ているのか?という点に目を向けると、より「らしさ」のあるデザインができるかと思います。

例② ライブ衣装

伝えたいもの:アイドルとしての魅力、ライブのコンセプト
衣装デザイナーの役割:ライブの衣装デザイナー

image4 image7 image6

左から A:専用衣装 B:メルヘンガーリー C:クリスマス

A

キャラクター本来の魅力を押し出した衣装としています。
スポーティな爽やかさ、溌剌とした印象、動きやすさを重視しました。
持ち曲がタオル曲なので衣装の腰にタオルを提げているという設定です。

B

ガーリーさを引き出した衣装になります。
女の子らしさへの憧れ、フリル、レース、リボンなど、普段はなかなか身につけることのできない要素を叶えています。
アイドルと相談しながら制作しました。

C

クリスマスライブでの衣装です。
ケープは赤/白のリバーシブルになっており、ホワイトクリスマスの演出に合わせて途中で裏返すことで早着替えができます。

簡単にデザインとその意図や設定とを並べてみました。
みなさんどうでしたか?

書いていた内容を感じ取れなかった!違う印象を受けた、などもいらっしゃるかと思います。
創作物は最終的に受け手に委ねられるので然りではあるのですが、作り手として一定意図を持って制作することで、ギャップが生まれた際にも何がそれを生んだのかの判断もつけやすくなります。

また、特に現代日本の二次元アイドルについて、受け手は「生きている」「存在している」ことを求める傾向にあります。彼らの世界で自身が関わっている想定で衣装をデザインすることで、よりアイドルの実在性や手触りを表現できるようになるのではと考えます。

image9

おわりに

いかがでしたか?
何かヒントになるものはあったでしょうか。

今回はアイドルの衣装デザインを軸にお話しましたが、たとえばアバターの衣装であれば着せ替えする人に体験させたいこと、テーマやブランドによる差別化などが重要になるかと思います。また、ファンタジー世界の衣装であれば種族や職業などによる服飾文化、服飾に使われる素材や染料、服飾技術などを考える必要があります。

どれにしても、まずどうやって衣装が成り立っているのかを考える、何を魅力として提供したいかを考えることが、より魅力的で説得力のある衣装へ繋がってくるかと思います。

正解はありませんが、正解が無いからこそ、常に考えながら制作を続けることが必要だと感じています。
これから先、よりアイドルを輝かせることのできる衣装を生み出していきたいです。
この記事で少しでも心に残るものがあれば嬉しいです!

この記事は KLab Creative Advent Calendar 2019 の 8日目の記事になります。

はじめまして、こんにちは。
クリエイティブ部でSHOTGUN整備を担当しているエリヒラと申します。

はじめに

SHOTGUN、すでにご存知の方が多いと思うので、ツール概要は省きます。
日本語化してより編集しやすく、格段に導入しやすくなりました。

ただやはり…便利で多機能な分、どうしても手数が増えてしまいますね
制作者向けのマニュアル作りに苦戦されてるマネージャーの方も多いと思います。

本記事ではマネージャーもアーティストも、少しだけラクになる小技を紹介させて頂きます。
参考になりましたら幸いです。
image21

いいからとにかくクエリーだ!

クエリーフィールド、活用していますか?

条件を入力すると計算してくれるフィールドで、簡単なレポート作成に向いています。
…と、数字のイメージが強いですが計算して終わりではありません。
その数字は参照元のリンクとして機能するため、ページの遷移数を減らす事に活用できます。
また数字以外のデータの参照もでき、様々な情報を望んだ場所に表示することが可能となります。

①タスク一覧からバージョンを登録

タスクに新しいバージョンを登録する際、

image16

タスクをいちいち押して開いて、

image9

「新しいバージョンを作成」ボタン、押してますか。
面倒ですよね、タスク開くの。

更に、バージョン投稿後にタスクステータスを更新する運用形式が多いと思います。
そして次工程に着手するため、次タスクのステータスも変更するでしょう。
それってつまり、バージョン投稿する度にステータス更新のためいちいちタスク詳細からタスク一覧に戻る…?

image14

ここでクエリーフィールドの登場です。

image22

画像のような設定で、クエリータイプで新規タスクフィールドを作成します。
フィールド名は任意のもので構いません。ここでは仮に「VersionList」と設定します。
①表示させたいエンティティとして、バージョンを選択
②照会する条件を入力
③「バージョンの数」選択によって、そのタスクに含まれるバージョンの合計数を計算

image20

タスク一覧画面で、作成したVersionListの数字をクリックすると…!

image12

ウィンドウがポップアップします。

そう、タスクを開かずともこちらから「新しいバージョンを作成」ができるのです。
作成したバージョンをこのウィンドウから参照することもできます。

タスク一覧画面はそのままなので、スムーズに他タスクの編集が可能です。
画面遷移が少なくシンプルで分かりやすいため、アーティストの負担も少ないと思います。

image11
SHOTGUNに不慣れな方がバージョン投稿する際、陥りがちなのが「自分が今開いているのがアセットなのか、タスクなのか分からないままバージョン投稿」です。
アセットにもバージョン投稿は可能ですし、アセット一覧にパイプラインでタスク表示orタスク一覧にアセットリンクを表示しているフィールド構成だと特に頻発しやすい問題です。
VersionListフィールドを作ってあげると、そのような事故も減らせますよ。

②アセット一覧にショットの情報を表示する

次に、他エンティティのフィールド参照方法をご紹介します。
以下、最もよく使われるショット~アセットを例にしますが各種エンティティで利用可能な方法なので、ご希望に沿ったエンティティでご活用ください。

ショットの使い方は制作する物によって大きく変わってくるかと思いますが
どんな使い方でも、ショットの情報をアセット一覧で参照できたら…と思う場面はあるのではないでしょうか。

ショットリンクはデフォルトで用意されていますが、ショットのいちフィールド情報を参照できるアセットフィールドは存在していません。
これも、クエリーフィールドを利用すれば引っ張ってくることができます!

image13

ショットの「shot_text」フィールドをアセット一覧に表示させたいとします。

image17

アセットフィールド新規作成から、このような設定で新しいフィールドを作成します。

ここではフィールド名を「ShotComment」と仮で設定しています。
①表示させたいエンティティとして、ショットを選択
②照会する条件を入力
③今回は数計算ではなく、フィールドを参照したいため「1つのショット」を選択
④参照したいフィールドである「shot_text」を選択

image14

フィールド名には日本語も設定できるけど、日本語だとフィールドコードがフィールドタイプに沿ったもので自動的に割り振られるから、意図しないコードが設定されてしまう可能性がありますよ。半角英数ならばフィールド名はそのままフィールドコードに反映されます。

これでアセット一覧で作成したShotCommentフィールドを見てみると…

image2

このように、アセット一覧画面でそれに紐づくショットの情報を参照することができました!

勿論shot_textフィールドの内容を更新すると、こちらのShotCommentフィールドも自動で更新されます。
ショットの詳細情報を確認しながらアセットを見たい時に便利です。

③任意のサムネイルを表示させる

クエリーフィールドに関して、最後のご紹介です。
こちらはSHOTGUNをデータベースとして利用したい際に特に有効的なフィールドです。

アセットのサムネイル、最新or最古のバージョンを自動でサムネイル化して表示する便利な仕様ですが
マネージャーの方、一度は「任意のバージョンをサムネイルに設定したい」と思ったのではないでしょうか。データベースとして表を作りたい時は尚更ですよね。
それも可能とするのがクエリーフィールドです。

ただしこのやり方はクエリーフィールドだけでなく、カスタムエンティティも専用に用意する必要があります。
具体的な説明の前に、簡単に図解します。

image7

カスタムエンティティとアセットをリンクさせた状態で、クエリーフィールドを介することで、任意のサムネイルが表示可能となります。

バージョン投稿用にカスタムエンティティを一つ用意します。

image4

カスタムエンティティを新たに作成し、そこにアセット側に表示させたい画像をサムネイル設定しておきましょう。

次に、カスタムエンティティで以下のようなフィールドを新規作成します。

image6

こちらも仮でフィールド名を「AssetLink」と設定しています。
このAssetLinkフィールドによって、任意のカスタムエンティティとアセットを紐づけることができます。

image15

AssetLinkフィールドを作成後、サムネイル表示させたいアセットを指定しリンク設定してください。

最後に、アセット側でクエリーフィールドを新規作成しましょう。

image18

①表示させたいエンティティとして、カスタムエンティティを選択
②「AssetLink」が現在のアセットと一致するよう設定
③フィールドを参照したいため「1つのカスタムエンティティ」を選択
④参照したいフィールドである「サムネイル」を選択

このように作成してみると…

image3

カスタムエンティティのサムネイルが、アセット一覧に表示できました!
アセットのサムネイルとは別のフィールドになるため、画像のように通常のサムネイルも同時に表示可能です。

image13

このフィールドのデメリットとして、カスタムエンティティ作成~アセットリンク設定~サムネイル登録 と手間がかかるため、運用にはやや不向きな仕様です。
データベースに持ってこいではありますので、有効的な活用場面を探してみてください。

おすすめデフォルトフィールド情報

デフォルトで用意されているフィールドで、特に便利と思えるものをご紹介します。

ノート一覧の数

image5

先述したVersionListフィールドのノート版です。
VersionListと同じように、ノートの投稿・参照が可能です。アセット/タスク両方のフィールドに用意されています。

アップロードしたムービー

image1

こちらはバージョン一覧に表示できるフィールドです。
表示すると投稿したデータ名が記載されており、クリックすることでデータをダウンロードできます。

バージョンビューを開かずともダウンロードできるとても便利なフィールドですので、標準的に表示しておくことをオススメします。

image8

アップされているデータがPNGやJPEGなど画像データの場合、クリックするとダウンロードではなくブラウザ上で画像が表示されてしまいます。
画像データをこのフィールドからダウンロードしたい場合は、
「アップロードしたムービー」上のリンクを右クリック
→「名前を付けてリンク先を保存」を選択
この手順でダウンロードできますよ。

最後に

SHOTGUN公式サポートページに記載されている文章を引用します。

増やすより、減らすことに努める

Shotgun でできることが多岐にわたるため、ページに多くの情報を盛り込みたくなります。しかし、これはお勧めできません。シンプルなページであるほど、ユーザはより短時間で有効に活用できるものです。

引用元:SHOTGUNサポート/ベストプラクティス

SHOTGUN、シンプルにもできるし、情報を沢山入れる事もできます。
マネージャーは闇雲にアセットを量産するのではなく、どのように使っていくのかの運用方針を固め、実際に構築の際はそのページの利用者は主に誰なのか、誰のためのページなのかをしっかりと考えた上で、構築を進めていくとブレなくて良いと思います。
SHOTGUNユーザーの方々に本記事が少しでも参考になりましたら幸いです。

ここまでお読み頂き、本当にありがとうございました。

この記事はKLab Creative Advent Calendar 2019の7日目の記事になります。

こんにちは!
KLabでCGデザイナーをしているaoと申します。

少し前まで2Dアニメーション系の業務を担当しておりましたが、
今年に入ってからUnityやmayaを使用した業務を頂く機会がありまして、
現在は3Dアクションゲームのエフェクト制作業務に携わらせて頂いています。

今回は

  • Adobe AfterEffect
  • MAYA
  • Unity

を使って、簡単に作れる突進エフェクトの作り方を紹介します。

Unity歴、maya歴共に1年未満の私が教えるエフェクトの作り方なので、
難しいことはしません!安心してくださいね。

というわけでこんな感じのエフェクトを作ります↓

image13

1.テクスチャの準備(AfterEffect)

まずはテクスチャを用意しましょう。
今回用意したテクスチャがこちら。
(テクスチャサイズは256×128で作成しています。)

image15

突進エフェクトなので、キャラクターが動いたときに出る『衝撃波』をイメージして平面のパスを切って描いていきます。
トゲの大きさがバラバラな方がそれっぽい気がします。

後々円形のメッシュに貼ることになるので、つなぎ目が目立たないようテクスチャがループするようにしておきましょう。

モデルに貼ってみたら、ちょっとイメージと違うわね…ということが良くあるので、とりあえずこんな感じかな?というところで終わりにしておきます。
何かあったら後で修正すればよいのです。

2.モデルの準備(MAYA)

テクスチャが出来たら次はmayaでモデルを作ります。

作り方

①シリンダーを用意します。
image21

②大きさや分割数をいじったら、上下のキャップと下半分を削除します。image22

③上下の頂点をそれぞれ動かして、おわん型のモデルが出来たら完成です!image23

先ほど作成したテクスチャをメッシュに貼り付けて見え方を確認します。

トゲの間隔を調整したい場合は、下の画像のようにUVの間隔を伸縮させてお好みの間隔に調整してください。

今回はUVを伸ばして配置した状態のメッシュを使用しました。

image24
image25

3.エフェクトを作る(Unity)

particleの形状を決める

テクスチャとモデルがそろったのでいよいよUnityでの作業に移ります。

1と2で作成したテクスチャ素材とメッシュ素材を取り込みます。
Project上にフォルダを作成し、そこに必要な素材をまとめておきましょう。
image16

次にMaterialを作成します。
image19 Project上で右クリック>Create>Materialをクリックで作成できます。

作成したMaterialのshaderを設定します。
今回は発光感のあるエフェクトにしたいので、Additiveを使用しました。
image2

Hierarchy上にParticle systemを作成します。
image18 Hierarchy上で右クリック>Effect>Particle systemをクリックで作成できます。

続いてInspector上で作業していきます。
RendererにmeshとMaterialをそれぞれの箇所に入れます。image8

・Render modeを『Mesh』に変更し、先ほど作成したメッシュを入れる
・Materialも同様に先ほど作成したMaterialを入れる

このときRendererAlignmentをviewからworldに変更しておきましょう。
デフォルトで設定されているviewのままだと、どの角度から見てもメッシュの形状が一定の見え方になってしまうためです。
image3


ParticleをZ方向に向かって衝撃波が広がるように動かしたいので、Particleの向きを画像のように設定します。
image26


ここまでの工程で横向きの衝撃波が発生するように設定できていればOKです!
image4

Particleの動きを付ける

Emitterの形状を決める

今回のエフェクトでは中央の1点から発生させたいので、デフォルトでOnになっているshapeのチェックは外しておきましょう。
image12

※Radiusの値を限りなく0に近い値に設定することでも同じような結果を得られますが、
 簡単なのでこちらの方法がおすすめです!

今回は同じ衝撃波を一度に4つ連続で発生させたいため、EmittionのBurstを使用します。
※Burst:一度にParticleを発生させたい場合に使用します。
image5


・Time:Particleを再生してから何秒後に発生し始めるか
・Count:発生させるParticleの数
・Cycle:何回発生させるか
・Interval:発生させる間隔

一度に4つの衝撃波が発生するようになりました!
image11

Particleの進む方向を決める

キャラクターが前に進む際に衝撃波が後ろに流れるようにしたいので、
『Velocity Over Lifetime』を以下のように設定します。
image9


Zにマイナス値を入れることで、発生した粒が後ろに進むようになります。
image1

Particleの動きに緩急をつける

勢いよく発生し、余韻を残すような動きにしたいので、今回はスケールのアニメーションを使って表現していきます。

Particleの発生時の大きさを設定します。

『Start Size』『Size Over Lifetime』を以下のように設定します。image17

image20

デフォルトのLifetimeが5秒に設定されているので、今回はもう少し勢いを付けるために0.2秒に設定します。

image10

これで一旦衝撃波が出来上がりました!
動きの緩急や大きさを調整する前と調整した後を比較するとこんな感じです。

(左:調整前、右:調整後)

モーションの長さやキャラクターの動きに合わせて衝撃波の発生タイミングや個数を調整してください。

Particleの色を付ける

徐々に消える動きを付けたいので、
『Color Over Lifetime』を使って時間経過と共に薄くなるように設定します。
image6

4.完成!!

これで突進エフェクトの完成です!
image13

ーーーーーーーーー

いかがでしたでしょうか?
かなりざっくりな説明になってしまいましたが、作ってみようかな?と思ってくれる方がいらっしゃると嬉しいです。

エフェクトに関してまだまだ未熟な私ですが、KLabには技術力の高い先輩がたくさんいるので、今はいろんな方にお世話になりつつ自分ももっと成長して行きたいなと思っています。
もしまたこんな機会があれば、次はもう少しレベルアップした内容の記事が書けるようにしたいですね!

最後まで読んでいただきありがとうございました!