Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

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

OLM Digital R&D
PRO

November 08, 2021
Tweet

More Decks by OLM Digital R&D

Other Decks in Design

Transcript

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

    View Slide

  2. はじめに
    • 著者紹介
    • アジェンダ
    – 初版から改訂版へ
    – あらためてテクニカルアーティストとは? + この本のねらいは?
    – 新しく加えた部分をMaya Bifrostを使って紹介します!
    © OLM Digital, Inc. 2

    View Slide

  3. 2011 → 2021
    • あれから10年経ちました

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  8. こんなことを書きました
    1. カメラと座標系
    2. プロシージャ
    3. カラーモデル
    4. ライティング、シェーディングとシャドウ
    5. テクスチャ
    6. パーティクル
    7. NURBSとサブディビジョン
    8. イメージ/ムービーフォーマット

    View Slide

  9. で、読むとなんの役に立つの?

    View Slide

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

    View Slide

  11. そう言えばテクニカルアーティストってなんすか?

    View Slide

  12. こんな感じのポジションです
    • 狙った画作り
    • カッコいいエフェクト
    • 無駄のないノード構成
    • サクサク動くリグ
    • 効率的なパイプライン
    • 量産体制の構築
    • これらを実現させることができます

    View Slide

  13. いろいろなTAのカタチ
    • エフェクトに強いTA
    • 万能型TA
    • パイプラインの魔術師TA
    • サーバー管理もできちゃうTA

    View Slide

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

    View Slide

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

    View Slide

  16. そんなこと言わずにw
    • TAじゃなくても各ポジションで役立ちます!
    • みんな喜ぶカラーモデル!
    • モデラーにはNURBSとサブディビジョン!
    • ライティング!
    • プロシージャ!
    • テクスチャ!
    • TA/エンジニアとの共通言語!

    View Slide

  17. 難しいのは嫌いです

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  24. 今日の内容
    • 本の内容の一部の紹介
    – 第2章 プロシジャー
    – 第6章 パーティクル
    • Bifrostで具体的な例
    – 数式の実装
    – Compound
    – Instance
    – Autoloop
    © OLM Digital, Inc. 24

    View Slide

  25. 概要
    • Bifrostについて
    • TA本の例の紹介
    – バウンドするボール
    • 数学、物理
    ‐ 本に参考してください
    • スクリプト
    ‐ 勉強してください
    • パイプラインの重要性
    • Autoloop, Instance
    – らせん
    • 数学
    ‐ 本に参考してください
    • Compound、Autoloop、Instance
    • まとめ
    © OLM Digital, Inc. 25

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  29. プロシジャー、シミュレーション、キャッシュ
    • プロシジャー
    – 状態を持たない
    – 入力から出力
    – 時間も入力
    • 前のフレームの計算しなくても計算ができる
    ⇒ タイムスライダーを動かしてプレビュー
    • シミュレーション
    – 状態を持つ
    – 入力が パラメーター + 前のフレーム
    ⇒最小から再生しないとプレビューができない
    © OLM Digital, Inc. 29
    • キャッシュ
    – 状態を持つ
    • メモリ
    • ファイル
    – 計算をデータで避ける
    ⇒タイムスライダーを動かしてプレビュー
    ⇒パラメーターを変えるとキャッシュを吐き出す必

    View Slide

  30. バウンドするボール
    • 本の練習問題
    – 手づけアニメーション
    – バウンドボールのASS連番を配布
    – Autoloop、インスタンス
    • 今日は動きをプロシジャーで
    – ある程度物理的
    • 群衆シーンなどに応用可能
    – プロシジャーでバリエーション
    – バリエーションのASS出力
    – Bifrostで配置と再生
    © OLM Digital, Inc. 30

    View Slide

  31. 動きの構成
    • 50フレームのアニメーション
    • 圧迫されている球体が通常に戻って初期速度(6フレーム)
    • 自由落下(38フレーム)
    – 初期速度によって床から離れる(19フレーム)
    – 重力によって床に落ちる(19フレーム)
    • バウンド(6フレーム)
    © OLM Digital, Inc. 31

    View Slide

  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;

    View Slide

  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;

    View Slide

  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;

    View Slide

  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;

    View Slide

  36. インスタンス化の二択
    • ASS出力
    – プレビュー・レンダリングが早い
    • オブジェクト出力
    – 1フレームが1つのインスタンス
    – BifrostでGPUプレビューができるように
    – ルックデブ
    • 決まり次第でASS切り替え
    – スクリプトで
    • 各フレームのオブジェクトのコピー
    • オブジェクトのリストをBifrostへのインポート
    © OLM Digital, Inc. 36

    View Slide

  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へインポート

    View Slide

  38. デモ
    © OLM Digital, Inc. 38

    View Slide

  39. らせんの運動
    • 本の練習問題
    – 数式の活用
    – Compoundの使用
    • FXに活用
    – プロシジャーでアニメーション
    – GPUプレビュー
    © OLM Digital, Inc. 39

    View Slide

  40. 動きの構成
    © OLM Digital, Inc. 40
    円の動き らせんの動き 追跡 多重化、形の制御

    View Slide

  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

    View Slide

  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
    原点

    View Slide

  43. デモ:らせんの動き
    • Compoundの活用
    © OLM Digital, Inc. 43

    View Slide

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

    View Slide

  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

    View Slide

  46. デモ:多重化、形の制御
    • カーブで形の制御
    • ランダム性
    © OLM Digital, Inc. 46

    View Slide

  47. さらに
    • カーブでレンダリング
    • シミュレーション投げる
    – AgeをPropertyに追加
    – Ageを条件にインスタンスまたはParticleへ
    – 速度の計算があるとより厳密に
    • BifrostでSet Dressing
    – MashからBifrostへ
    – Particle Instancerの代わりに
    © OLM Digital, Inc. 47

    View Slide

  48. プロシジャーの先に
    • プロシジャーで数学と物理学の活用が大事
    – 早い
    – いろんな問題の答え、数式など存在している
    • SIGGRAPHのプロダクショントークでは
    – Disney/Pixarなど
    – プロシジャーを使う
    • ベースをキャッシュしてから手動の微調整も結構ある
    – 新しいアイデア
    • Generative Coding, generative art
    – https://twitter.com/MacTuitui
    – https://twitter.com/iquilezles
    • MayaのBifrostではやっとそういうのできるようになりました!
    © OLM Digital, Inc. 48

    View Slide

  49. まとめ
    • 10年経つといろいろなことが変わります、、が
    • 変わらない部分もあります、それは基礎知識(数学・物理)です。
    ここから宣伝…
    TA本カンファレンス中 20% Off!!
    © OLM Digital, Inc. 49

    View Slide

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

    View Slide