カテゴリー別アーカイブ: CG

カレーを作ろう(ただしCGで) – その2 ライス1

あけましておめでとうございます!今年もよろしくお願いします。
2016年の初投稿は、カレーへの挑戦の話。
MODOをご存じない方も、何となく雰囲気だけでも楽しんで頂ければと思います。


#前回の続きです。

 ※細かい説明は端折り、要点だけに絞ります。
  用語や手順を全部説明していると、かなりの量になり、情報密度が薄くなるため。
  不明な用語など出てきたら、Web検索等で調べて頂ければと思います。

まずは、ライスの部分から作ろうと思います。
理由は、途中で挫折しても、普通のご飯として流用出来るからです(汗)。

…と思って初めて見たものの、いきなり超難問です。
問題は幾つかありますが、大きく分けると以下の二つ。

問題1: 大量の米の塊をどう表現するか?

 色々実験してみたのですが、サーフィスパーティクルジェネレータ(Surface Particle Generator)を
 使ったパーティクルでの表現が、もっとも目的に近くなると判断しました。
 これは、メッシュの表面にパーティクルを散布する機能です。
 これを使って、米粒をリプリケータで複製します。

 メッシュを変形すると、パーティクルも追従します。
 米粒のモデリングも数種類で済み、差し替えも可能なので、変更にも強いです。

Suraface Particle Generator

Suraface Particle Generator

 今回、上記のベースメッシュを、3枚重ねにして使います。
 (パーティクル間の隙間が出来ないように。)

問題2: どうしたら炊けているように見えるか?

 「炊けたお米」の質感は難問です。地道なトライ&エラーを繰り返している所です。

 ライティング、シェーダー、マテリアル(特にSSS)、
 更にはPhotoshop等でのポストプロセス、どれが不十分でも、ご飯には見えませんでした。
 プラスチックにしか見えません(超キモい絵になるので注意)。特に、SSSは非常に重要です。

 目標は欧風カレーですが、米は、日本人に親しみのあるジャポニカ米にしましょう。
 お米のモデルと、SSS、サーフィスパーティクルジェネレータ、リプリケータの設定は以下の通り。

お米(ジャポニカ米)の設定

お米(ジャポニカ米)の設定

 ご飯は炊くと膨張するので、現実世界ではもう少し大き目かもしれませんが、
 お米全体を大き目にすると、SSSの結果が期待通りになりませんでした(原因は不明)。
 なので、いったん上記のサイズで進めます。

 ※サーフィスパーティクルジェネレータのお米の間隔は、3.3mm。

 ※また、お米の方向は、(掻き混ぜた後、膨張するので)ほぼ全てランダムに近いと仮定して、
 リプリケータのランダム角度を全方向90度にしてみました。

そんなこんなで、出来たのがこちら。いったん、ご飯茶碗に盛りつけてみました。

冷や飯1号

冷や飯1号

冷や飯ですね。ちょっと芯が残っていて、質感も十分ではないです。
次回、温かくしてみたいと思います。

欧風カレーの場合、ラグビーボール型に盛り付けるのをよく見かけますが、
これまたパーティクルの方向調整が難しそうです。
出来たら、ラグビーボール型にしてみたいと思います。

おまけ:サフランライス(もどき)
ジャポニカ米をインディカ米(細長い)に差し替え、盛り付けてみました。

サフランライス(?)1号

サフランライス(?)1号

という訳で今回はここまで。お目汚し失礼。次回に続きます。
カレーへの道は険しいです。

カレーを作ろう(ただしCGで) – その1 はじめに

またお久しぶりです。年の瀬のバタバタもようやく落ち着いてきました。
過去の投稿に反応を下さった方は有難うございます!


突然ですが、最近カレーが食べたいです。皆さんも好きですよね。嫌いな人は少ないと思います。
私も勿論、人並みには好きだったのですが、最近は尋常ならず食べたいです。

なぜか?
マツヤさんのtwitterに、じわじわはまったのを切っ掛けに、
ボリウッド映画や、近所のインドカレー屋の豆カレー等が気になるようになった次第です。

その後は、以下のような感じです。

無性にカレーが食べたい
  ↓
しかし、友人の精神科医師の著によれば、カレーライスは糖質の化身(印度っぽく表現)です。
特に私のような中年の内臓には優しくないらしい。というのを思い出す
  ↓
漫画で食べた気になろうと、前から断片的に読んでいた、「華麗なる食卓」を全巻読破
  ↓
カレーすげー…すごすぎる。欲を抑えるどころか、世界中のカレーが気になり始める
  ↓
しかし、人間ドック面談の怖い医師の顔が、脳裏でチラチラして食べられない
  ↓
グルメ漫画・ドラマなどで欲望を紛らわしていたが、2D媒体では満足出来なくなり始める
  ↓

じゃあ3DCGで作るしかないな!!
はい繋がった~~Here we go!!!
使用ソフトは、もちろんMODO、バージョンは902です。


■その1 どんなカレー?

さて、カレーにも沢山ありますが、大きく分類すると4パターン。
 参考:カレー雑学大百科「2.世界のカレー」
  
   ・インド風(北インド・南インド)
   ・東南アジア風
   ・欧風
   ・和風
 
どれも魅力的ですが、挫折しない目標を立てるべく、

 「欧風」

にしたいと思います。
理由は、CGとしては、ナンよりライスのほうが、学ぶ事が多そうな点。
また、ご飯とルウの境界がハッキリしている(一定の粘度がある)方が作り易そう、という点です。


では、次回に続きます。

ミニオンズ

最近は2Dイラストを描く時は、3Dのためのスケッチがほとんどなのですが、
先月ミニオンズを見て以来、そればっかり描いてます。
気に入ったのが有ると、しばらくはそればっかり描き続ける傾向は20代からです。

3Dにするイラストは決まったので、
ボツ(=断念)にした絵をさらしておきますね。もったいないので。

ミニオンズ
全員集合。3Dにしたら、ぜったい完成しないのでボツ(苦笑

スカーレット
スカーレット。ノーダルシェーディングで、
スケスケドレスを表現したら面白いかなと思ったのですが、単純すぎ、ボツ

ボブ&ティム
ボブ&ティム。ファーの練習に良いかなと思いましたが。単純すぎ


ミニオンズは、ストーリーは至って単純で、整合性もなんも無いですが、
また見たくなってしまう。魅力のある映画だったと思う。

同じフランス人監督の怪盗グルーシリーズもそうですが、
キャラクターと舞台装置で惹きつけるのが得意ですよね。
60sアメリカの雰囲気が素晴らしかった。

最近ビッグアイズも見たのですが、こちらも50~60sアメリカが舞台で、
ポップアート業界のスキャンダルを描いたものでした。これも面白かったです。

MODOでPySide(Qt)を利用してみよう ~ ビューポートのカスタマイズ

いかがお過ごしでしょうか? あっついですね~
今日は絶好の引きこもり日和です。

今回もMODOの記事です。
ちょっとテクニカルなので、興味の無い方はスルーでお願いいたします。


MODO901から、Win/MacでPySideが利用できるようになり、スクリプト開発の選択肢が広がりました。
ただし、注意点が有ります。

まず、PySideで実装したコードを、そのまま「スクリプトの実行」で実行することは出来ません。

私も勘違いしていたのですが、サポート担当の方に確認したところ、
スクリプト実行においては、「Fire & Forget」タイプのスクリプト(ざっくりいうと非同期)は
実行できないとの事です。
イベントループでデッドロックが起こり、フリーズすると思われます。なるほど。

では、どうすればPySideを利用できるか?

それは、「カスタムビューポート」を使うとの事です。

これは、ビューポート(※)をカスタマイズする機能で、Win/Macでは、MODO901の新機能です。
つまり、自作したビューポートの上に、PySide製のGUIを配置するわけです。

 ※ビューポート:MODOの画面を構成するフレームのこと。
  3Dビューポートだけでなく、アイテムリストやシェーダーツリーなどもそうです。
  ヘルプの「ビューポートってなに?」を参照

以上!

……と言いたい所ですが、
上記のサイトは、MODOでのキット開発に慣れている人向けの記述のようで、
他にもいくつか手順が必要です。
なので、以下にまとめておきますね。

手順1. PySideスクリプトを作成する。

 今回は例として、アバウト画面を表示した後、
 ”Congratulations!”とポップアップを表示するサンプルを作成してみます。

 コードは以下。続いて、内容を順に説明します。

 ■1~5行目:
  lxに加え、lxifcとPysideをインポートします。

 ■8行目:
  ”lxifc.CustomView”クラスを派生し、カスタムビューポート用のサンプルクラスを定義します。
  これが本体です。

 ■11行目:
  customview_Init()関数をオーバーライド実装します。
 
 ■12~28行目:
  この部分は、お決まりで良いと思います。
  paneが渡ってくるので、その親オブジェクトから、GUI部品を配置するWidgetを用意します。

 ■30~43行目:
  PySideを使った実処理。
  「Show [About MODO]」という名前のボタンに、
  スロット(onClicked:クリックされた時の処理)を割り当てて配置。
  最後にTrue(初期化正常終了)を返却します。
 
 ■46~53行目: 
  前述のボタンがクリックされた時の処理。
  アバウト画面の表示と、ポップアップ表示と、「Finished」というログの表示を行います。

 ■55行目:
  上記のクラスを”PySide Sample”という名前でPython serverに伝えます。

 コードは以上です。

手順2. ユーザスクリプトフォルダの”lxserv”フォルダに格納する。

 カスタムビューポートは、Python serverとして起動する必要が有ります。

 ユーザスクリプトフォルダに、”lxserv”という名前のフォルダを(無ければ)作成し、
 手順1.で作ったスクリプトを保存します。

 ファイル名は、かならずクラス名と一致させます。
 今回の場合は、「PySideSample.py」となります。

 場所は、「システム」メニューの「ユーザスクリプトフォルダを開く」で確認できますが、
 通常は、以下です。
   ■Windows:
   C:\Users\(ユーザ名)\AppData\Roaming\Luxology\Scripts\lxserv\

   ■MacOS:
   /Users/(ユーザ名)/Library/Application Support/Luxology/Scripts/lxserv/
 

スクリプトを格納

スクリプトを格納

 このlxservフォルダ、キット開発のベテランにはお馴染みなのかもしれませんが、
 私のようなニュービーが気づくには、ちょっと苦しかったです。

手順3. MODOを起動する。

 MODOを起動すると、スクリプトがコンパイルされます。
 エラーが無ければ、バイトコード(*.pyc)が出来るはず。

MODO起動後

MODO起動後

手順4. カスタムビューポートを表示する。

 では、表示してみましょう。
 適当なビューポート(アイテムリストなど)の「+」マークをクリックします。

新規タブ追加

新規タブ追加

 続いて、「アプリケーション」→「カスタムビュー」を開くと、
 先ほど作成したビューポート(“PySide Sample”)が出てくるはずです。
 これを選びましょう。

作ったビューポートを選べるようになる

作ったビューポートを選べるようになる

 下ようになれば成功です。

完成

完成

 関係無いですが、901の新機能の「Script Editor」が同じところにいますね。
 つまり、スクリプトエディタも、同様の方法で、カスタムビューポートで実装されているのが分かります。
 (こちらは、MODOインストールフォルダの、\extra\scripts\lxservにいます。)

 さて、ボタンを押してみましょう。
 アバウト画面が表示され…

アバウト画面

アバウト画面

 クリックして閉じると…

 

おめでとうございます

おめでとうございます

 はい、おめでと~ございます。

 手順は以上です。
 オリジナルスクリプトをばりばりと作っていきましょう。


ここまで書きましたが、最後に、思ったことを述べておきます。

確かに出来る事は増え、UIもリッチになります。
しかし、この方式だと、結局ユーザーに手順2.~4.を強要してしまう事になるんですよね。

個人的には、PySideの機能そのものよりも、
いちいちユーザーがキット用に設定を変更する手間が省けるかもしれない、
という所にメリットを感じていました。

なので、これを積極的に使っていくかどうかは、ちょっと迷っている所です。

もちろん今後、自作ビューポートの提供が一般的になって、
この手順が当たり前になれば、どんどん使っていけそうです。

ではまた。

MODOで髪の毛 – 短冊編

「バケモノの子」見てきました。予習していなかったのもあり、かなり楽しめました。
久しぶりに渋谷に行きたくなった。
ケモノと言えば毛つながりという訳ではないのですが、今日は毛に関する記事を書きたいと思います。


3DCGでの髪の毛表現というのは、まだまだ難問な訳ですが、大別すると、
「短冊型」「ブロック型」「ファー」の3つの方法、もしくはこれらの合わせ技が主流と思われます。

■参考
https://howto.clip-studio.com/library/page/view/metasequoia_002_10_001

どれを選択するかは用途によっても変わってくるし、いわゆる完全解は無いと思いますが
どれもそれなりに手間がかかるものです。

このうち「短冊型」については、作り方によっては、
MODO、特に901では、非常に簡単に出来るようになってます。
以下の手順は、ほとんど自分用ですが、参考になればと思い、記録しておきます。

今回は、前回作った万力ガール2号(今命名した)に実験台になってもらおう。

1.リトポ機能で短冊の作成

まずは髪の毛の土台となる短冊を作ります。
今回は説明用のため、すべて長方形で作ります。

本来は位置合わせが結構面倒なのですが、MODOのリトポルーム(「トポ」タブ)で、かなり簡単に出来ます。
トポツールの使い方については、以下の公式サイトを参考。
ちょっと練習が要りますが、1時間も有れば慣れます。

リトポロジの基本的な使い方

この機能は、高解像メッシュのリトポロジーだけでなく、実は非常に汎用性の高い機能と思います。

では始めましょう。
髪の毛用の新規メッシュを用意し、こんな感じで…

髪の毛の面張り開始

髪の毛の面張り開始

どんどん張っていきます。

こんな感じで張っていきます

こんな感じで張っていきます

長髪の場合は、トポツールに加えて、通常のモデリングツールを使って垂らします。

最後に、もし短冊が頭皮にめりこんだ状態になった場合、外側に押し出します。
今回の例では、アクションセンターをアイテム中心にして、
(ポリゴンを非選択状態にして、アクションセンター「自動」でいいはず)
拡大し、少し外側に出します。

頭皮をギリギリ覆うようにする

頭皮をギリギリ覆うようにする

最後は、右側のような感じになるはず。

■注意1:この段階では、なるべくローポリが望ましいです。特に列数は2列位が良いと思います。
    増やしすぎると制御しにくくなるし、後からいくらでも分割できます(しかもUVを保ったまま)。

■注意2:短冊は、アウターエッジを立てられるP-Sub(Shift+Tab)がお奨めです。

2.UV展開

今回の肝ですね。作った短冊をUV展開します。
まず、短冊を選択して、展開ツールを適用(Unwrap)。

展開(Unwrap)

展開(Unwrap)

次に、ヘアラインをゆがみなく適用するために、UV展開を矩形にする必要が有るのですが、
これが901で瞬時に出来るようになりました!

901以降の場合は、UV の矩形化(rectangle)を選んで適用。

UV矩形化(rectangle)

UV矩形化(rectangle)

一瞬でここまで。
801以前でも、UV整列ツールで地道に同じ事が出来ますが、ちょっと手間です。

rectangle適用後

rectangle適用後

次に、方向をそろえるため、UVパックしておきます。

UVパック

UVパック

パック適用後UV

パック適用後UV

あっという間にこんな感じ。本来は面倒なUV展開が、すがすがしく感じます。

UV完成

UV完成

3.テクスチャ作成

さて、最後にテクスチャですが、プロシージャルテクスチャを使ってみます。
画像を用意しないで済むメリットは大きいです。

短冊にマテリアルを割り当て、レイヤー追加で「ノイズ」を割り当てます。
今回は分かり易く、効果をバンプにしてみます。

マテリアル追加

マテリアル追加

そして、テクスチャロケータの「サイズ」で、
「X方向を極端に短く」「Y方向を極端に長く」します。Z方向は任意です。

テクスチャロケータ設定

テクスチャロケータ設定

先ほど作ったUVを割り当てておきます。
ベイクしてみると、内部的にはこんなテクスチャが張られているのが分かりますね。

できた(内部的な)テクスチャ

できた(内部的な)テクスチャ

前髪の垂れている箇所など、毛束を細くばらけさせたい個所には、
別のマテリアルを割り当てて、同じ要領で、ノイズテクスチャを「ステンシル」にしてみます。

で、こんな感じです。

結果

結果


あまり毛を細くするとノイジーになるので、レンダリング設定(アンチエイリアスなど)の
調整が必要になります。

慣れると、このレベルなら、全工程30分ぐらい。
もちろん、リアリティを追及していくと、もっと複雑な作りこみが必要ですが、
応用も利くので、選択肢の一つとして参考になればと思います。