Save 37% off PRO during our Black Friday Sale! »

CGの基礎理論を学べる!「テクニカルアーティストスタートキット」本を詳しく紹介 / CGWCC2021-TA2021

CGの基礎理論を学べる!「テクニカルアーティストスタートキット」本を詳しく紹介 / CGWCC2021-TA2021

[CG World クリエイティブカンファレンス2021] スライド
テクニカルアーティストを目指すクリエイターに不足がちだと思われる知識や、すぐに身に付く分野を厳選し解説した書籍「テクニカルアーティストスタートキット 改訂版」の著者が本書の読みどころをご紹介します。
この本は2012年に初版が出版されましたが、2021年の改訂版でいろいろと加筆しました。講演では、加筆部分を中心に本書のいくつかの章をピックアップして、わかりやすく説明いたします。
書籍紹介: https://www.borndigital.co.jp/book/23543.html

90143fe200ba565ad20f79c42b62c66f?s=128

OLM Digital R&D
PRO

November 08, 2021
Tweet

Transcript

  1. CGの基礎理論を学べる! 「テクニカルアーティストスタートキット」本を 詳しく紹介 四倉 達夫・Salvati Marc・曽良 洋介 1

  2. はじめに • 著者紹介 • アジェンダ – 初版から改訂版へ – あらためてテクニカルアーティストとは? +

    この本のねらいは? – 新しく加えた部分をMaya Bifrostを使って紹介します! © OLM Digital, Inc. 2
  3. 2011 → 2021 • あれから10年経ちました

  4. 2011 → 2021 • 10年でこんなに変わりました

  5. 2011 → 2021 • CGもこんなにいろいろ変わりました • 2011年アカデミー視覚効果賞「ヒューゴの不思議な発明」

  6. 2011 → 2021 • だから本も変えました

  7. なにが書いてあるの?

  8. こんなことを書きました 1. カメラと座標系 2. プロシージャ 3. カラーモデル 4. ライティング、シェーディングとシャドウ 5.

    テクスチャ 6. パーティクル 7. NURBSとサブディビジョン 8. イメージ/ムービーフォーマット
  9. で、読むとなんの役に立つの?

  10. こんなことに役立つはずです • シェーディングパラメータの設定がわかる! • エフェクトがわかる! • あ、その設定じゃ色が狂いますよ? • 新しいソフトも怖くない! •

    写真撮るの楽しくなる! • CGだけじゃない!
  11. そう言えばテクニカルアーティストってなんすか?

  12. こんな感じのポジションです • 狙った画作り • カッコいいエフェクト • 無駄のないノード構成 • サクサク動くリグ •

    効率的なパイプライン • 量産体制の構築 • これらを実現させることができます
  13. いろいろなTAのカタチ • エフェクトに強いTA • 万能型TA • パイプラインの魔術師TA • サーバー管理もできちゃうTA

  14. たとえば… • https://iquilezles.org • http://saihtam.com • https://www.youtube.com/watch?v=YJ42ruf2WQE • https://www.youtube.com/watch?v=l-wUKu_V2Lk

  15. あ、そういうの目指してないんで

  16. そんなこと言わずにw • TAじゃなくても各ポジションで役立ちます! • みんな喜ぶカラーモデル! • モデラーにはNURBSとサブディビジョン! • ライティング! •

    プロシージャ! • テクスチャ! • TA/エンジニアとの共通言語!
  17. 難しいのは嫌いです

  18. そんなこと言わずにw • 確かに難しいかも知れません… • 演習もあるので体感しながら学べます • 少しずつ、ご自身の作業で • 完全に理解しなくてもOK

  19. 読み終わった!TAだ!

  20. …かも知れません • 可能性はないこともないけど… • すぐに強い敵があらわれます • すぐに技が破られます • でも土台があれば怖くない!

  21. TAに向けたよいスタートを!

  22. 続いて追加パートの解説 • ページ数が大きく増えたあの章!

  23. テクニカルアーティストスタートキット Bifrost編 Salvati Marc © OLM Digital, Inc. 23

  24. 今日の内容 • 本の内容の一部の紹介 – 第2章 プロシジャー – 第6章 パーティクル •

    Bifrostで具体的な例 – 数式の実装 – Compound – Instance – Autoloop © OLM Digital, Inc. 24
  25. 概要 • Bifrostについて • TA本の例の紹介 – バウンドするボール • 数学、物理 ‐

    本に参考してください • スクリプト ‐ 勉強してください • パイプラインの重要性 • Autoloop, Instance – らせん • 数学 ‐ 本に参考してください • Compound、Autoloop、Instance • まとめ © OLM Digital, Inc. 25
  26. Bifrostとは • Bifrostの歴史 – 2009年、 Exotic Matter がNaiadを発表 • Avatarなどに使用

    – 2011年Autodeskが買収 – 2015年BOSS • Bifrost Ocean Simulation System – 2019年Bifrost Graph • Bifrostの特徴 – 流体シミュレーション – パーティクル、メッシュ・・・ – ノードベース – JIT • Fabricを覚えている人? © OLM Digital, Inc. 26
  27. なぜBifrost? • JIT⇒早い • ArnoldとMayaとの相性 – データのやり取り – レンダリングアトリビュート –

    GPUプレビュー • ノードエディターのUIが優秀 – ノードアトリビュートを最小限・追加とリネームしやすい – タイプの自動変換、Autoloop – Compound、Backdropで整理 • OpenVDB 、Alembic, PDC, Field3D, のサポート – そろそろUSDも(Bifrost v2.3.2.0 beta 以降) © OLM Digital, Inc. 27
  28. なぜBifrost? • インスタンスが強い • ノードが多い – 数式の実装 (add, multiply, sin,

    cos…) – メッシュ (sample_mesh_Uvs, get_closets_point…) – ボリューム (mesh_to_level_set, openvdb…) – シミュレーション (simulate_mpm, simulate_aero…) • Compoundライブラリー – 再利用しやすい – 勉強しやすい – Rebel Pack https://area.autodesk.com/downloads/rebel-pack-041/ – MJCG https://mjcg.gumroad.com/l/mjcg_compounds_2_0_0 – Autodesk Area https://area.autodesk.com/downloads/ © OLM Digital, Inc. 28
  29. プロシジャー、シミュレーション、キャッシュ • プロシジャー – 状態を持たない – 入力から出力 – 時間も入力 •

    前のフレームの計算しなくても計算ができる ⇒ タイムスライダーを動かしてプレビュー • シミュレーション – 状態を持つ – 入力が パラメーター + 前のフレーム ⇒最小から再生しないとプレビューができない © OLM Digital, Inc. 29 • キャッシュ – 状態を持つ • メモリ • ファイル – 計算をデータで避ける ⇒タイムスライダーを動かしてプレビュー ⇒パラメーターを変えるとキャッシュを吐き出す必 要
  30. バウンドするボール • 本の練習問題 – 手づけアニメーション – バウンドボールのASS連番を配布 – Autoloop、インスタンス •

    今日は動きをプロシジャーで – ある程度物理的 • 群衆シーンなどに応用可能 – プロシジャーでバリエーション – バリエーションのASS出力 – Bifrostで配置と再生 © OLM Digital, Inc. 30
  31. 動きの構成 • 50フレームのアニメーション • 圧迫されている球体が通常に戻って初期速度(6フレーム) • 自由落下(38フレーム) – 初期速度によって床から離れる(19フレーム) –

    重力によって床に落ちる(19フレーム) • バウンド(6フレーム) © OLM Digital, Inc. 31
  32. 自由落下の実装 • 数式(本参照) – Ԧ 𝐹 = 𝑚 Ԧ 𝑎

    = 𝑚 Ԧ 𝑔、 Ԧ 𝑎 = 𝑔 𝑚 – 𝑃 = 𝑃0 + 𝑣0 𝑡 + 1 2 Ԧ 𝑔𝑡2 • Ԧ 𝑔 = (0, −9.8,0) • 𝑣0 = 0, 9.8, 0 – Ԧ 𝑣 = 𝑣0 𝑡, – t = 1 → Ԧ 𝑣 = 0, 0, 0 © OLM Digital, Inc. 32 pSphere1.translateY = pSphere1.initVelocityY * $t -9.8*0.5* $t*$t; float $velocityY = pSphere1.initVelocityY -9.8* $t;
  33. 時間 • Mayaフレームから – 圧迫時間 – シミュレーション時間 © OLM Digital,

    Inc. 33 frame 1 … 6 … 25 … 45 … 50 t <0 … 0 … 1 … 2 … >2 float $animationTime =50; float $bounceTime =6; float $updownTime = ($animationTime - 2*$bounceTime)/2; float $t = (frame-1-$bounceTime)/$updownTime;
  34. バウンドの実装 • 球体のスケールのプロシジャーアニメーション – スケールが変わる球体が楕円体 – https://ja.wikipedia.org/wiki/楕円体 • 数式 –

    𝑉 = 4 3 𝜋𝑎𝑏𝑐 = 4 3 𝜋𝑟𝑆𝑥 𝑟𝑆𝑦 𝑟𝑆𝑧 = 4 3 𝜋𝑟3𝑆𝑥 𝑆𝑦 𝑆𝑧 = 4 3 𝜋𝑟3𝑆𝑝 2𝑠𝑦 – 𝑉 𝑠 = 4 3 𝜋𝑟3 – 𝑉 = 𝑉 𝑠 – 4 3 𝜋𝑟3 = 4 3 𝜋𝑟3𝑆𝑝 2𝑠𝑦 – 𝑆𝑝 = 1 𝑆𝑦 © OLM Digital, Inc. 34 float $volumeSphere = 4.0/3.0*3.14159; float $scaleXZ = sqrt(1.0/pSphere1.scaleY); pSphere1.scaleX = $scaleXZ; pSphere1.scaleZ = $scaleXZ;
  35. デモ © OLM Digital, Inc. 35 float $animationTime =50; float

    $bounceTime =6; float $updownTime = ($animationTime - 2*$bounceTime)/2; float $t = (frame-1-$bounceTime)/$updownTime; if ($t<0){ pSphere1.translateY=0; pSphere1.scaleY = 1 - 0.5*($bounceTime- frame)/($bounceTime-1); }else{ if ($t>=0 && $t<=2){ pSphere1.translateY = pSphere1.initVelocityY * $t -9.8*0.5* $t*$t; float $velocityY = pSphere1.initVelocityY -9.8* $t; pSphere1.velocity = $velocityY; pSphere1.simulationTime =$t; float $magV = abs($velocityY); pSphere1.scaleY = 2 - $magV/pSphere1.initVelocityY; }else{ pSphere1.translateY=0; pSphere1.scaleY = 1 - 0.5*(frame- ($animationTime - $bounceTime +1))/($bounceTime-1); } } float $volumeSphere = 4.0/3.0*3.14159; float $scaleXZ = sqrt(1.0/pSphere1.scaleY); pSphere1.scaleX = $scaleXZ; pSphere1.scaleZ = $scaleXZ;
  36. インスタンス化の二択 • ASS出力 – プレビュー・レンダリングが早い • オブジェクト出力 – 1フレームが1つのインスタンス –

    BifrostでGPUプレビューができるように – ルックデブ • 決まり次第でASS切り替え – スクリプトで • 各フレームのオブジェクトのコピー • オブジェクトのリストをBifrostへのインポート © OLM Digital, Inc. 36
  37. MayaとBifrostのAPIのスクリプトインスタンス化 • https://help.autodesk.com/cloudhelp/ENU/Bifrost-Tech- Docs/CommandsPython/index.html – ノード・アトリビュートの追加 – 接続 © OLM

    Digital, Inc. 37 def addObjectsAsInputToBifrostGraph(objs): cmds.vnnCompound(“|bifrostGraph1|bifrostGraphShape1”, “/”, addNode=“BifrostGraph,Core::Array,build_array”) objsL = cmds.ls(objs, long=True) for o in objsL: longN = cmds.listRelatives(o, shapes=True, fullPath=True)[0] shortN = cmds.ls(longN, shortNames=True)[0] print(shortN) cmds.vnnCompound( “|bifrostGraph1|bifrostGraphShape1”, “/”, addIONode=True) cmds.vnnCompound(“|bifrostGraph1|bifrostGraphShape1”, “/”, renameNode=[“input1”, shortN]); cmds.vnnNode(“|bifrostGraph1|bifrostGraphShape1", "/"+shortN, createOutputPort=[shortN, "Amino::Object"], portOptions="pathinfo={path="+longN+";setOperation=+;active=true}") cmds.vnnNode("|bifrostGraph1|bifrostGraphShape1", "/build_array", createInputPort=[shortN, "Amino::Object"]) cmds.vnnConnect("|bifrostGraph1|bifrostGraphShape1", "/"+shortN+"."+shortN, "/build_array."+ shortN) import maya.cmds as cmds def frameByFrame(obj, start, end): for frame in range(start,end+1): cmds.currentTime(frame) cmds.duplicate(obj) frameByFrame("pSphere1", 1,50) アニメーションの出力 Bifrostへインポート
  38. デモ © OLM Digital, Inc. 38

  39. らせんの運動 • 本の練習問題 – 数式の活用 – Compoundの使用 • FXに活用 –

    プロシジャーでアニメーション – GPUプレビュー © OLM Digital, Inc. 39
  40. 動きの構成 © OLM Digital, Inc. 40 円の動き らせんの動き 追跡 多重化、形の制御

  41. R*cos(a) 円の上の動き • R=円の半径 • t=時間 • s=速度 • P

    – xp=R*cos(s*t) – yp=R*sin(s*t) © OLM Digital, Inc. 41 O x y P(xp, yp) R*sin(a) a
  42. Mayaでの円の動き • R=円の半径 • t=時間 • s=速度 • Mayaの軸 –

    Y軸に上がっていく – XとZ軸で円の動き • P – zp=R*cos(s*t) – xp=R*sin(s*t) – y=s*t © OLM Digital, Inc. 42 X Z Y 原点
  43. デモ:らせんの動き • Compoundの活用 © OLM Digital, Inc. 43

  44. デモ:らせんの追跡 • Instanceの活用 • Autoloopの活用 © OLM Digital, Inc. 44

  45. 多重化 • Spiral number:らせんの数 • Spiral height:らせんの球の数 • 1つの配列ですべてのパーティクルを管理 –

    Particle ID:0からSpiral number* Spiral height – 整除法でSpiral/Phase ID(商)とAge(剰余、modulo) © OLM Digital, Inc. 45 Particle ID 0,1,2.. spiral height -1 spiral height… 2*spiral height-1 … …spiral height*spiral number-1 Spiral/ Phase index 0 1 … Spiral number -1 Particle ID/spiral height Age 0,1,2.. spiral height -1 0,1,2.. spiral height -1 … 0,1,2.. spiral height -1 Particle ID%Spiral Height
  46. デモ:多重化、形の制御 • カーブで形の制御 • ランダム性 © OLM Digital, Inc. 46

  47. さらに • カーブでレンダリング • シミュレーション投げる – AgeをPropertyに追加 – Ageを条件にインスタンスまたはParticleへ –

    速度の計算があるとより厳密に • BifrostでSet Dressing – MashからBifrostへ – Particle Instancerの代わりに © OLM Digital, Inc. 47
  48. プロシジャーの先に • プロシジャーで数学と物理学の活用が大事 – 早い – いろんな問題の答え、数式など存在している • SIGGRAPHのプロダクショントークでは –

    Disney/Pixarなど – プロシジャーを使う • ベースをキャッシュしてから手動の微調整も結構ある – 新しいアイデア • Generative Coding, generative art – https://twitter.com/MacTuitui – https://twitter.com/iquilezles • MayaのBifrostではやっとそういうのできるようになりました! © OLM Digital, Inc. 48
  49. まとめ • 10年経つといろいろなことが変わります、、が • 変わらない部分もあります、それは基礎知識(数学・物理)です。 ここから宣伝… TA本カンファレンス中 20% Off!! ©

    OLM Digital, Inc. 49
  50. ご清聴ありがとうございました! 50 © OLM Digital, Inc.