Miyabiarts.net

一年に一度の更新頻度

CEDEC2011 2日目

「ムーンショット」 デザイン幸福論

奥山 清行 (工業デザイナー / KEN OKUYAMA DESIGN 代表)

ホテルでダラダラしていたら、思いっきり遅れていくことになりました。正直、工業デザイナーなので聞かなくても良いかなあ。と最後の15分ほどだけ聴いていたのですが、全部聞けば良いなと後悔しておりました。

自動車の自動運転に関する話は、直接というわけではないですが、今大学で行なっている研究にも近いことであるので、野心的だと思って聴いていました。確かに、環境が整えば自動運転は可能だとは思うのですが、現実の環境では、歩行者がいたり、想定外の事象が多く発生するため、この点をどう解決していくかというのは非常に興味深いところです。

聴いていないところはあとから記事を見て補完したのですが、「来るかどうか分からない15分のために準備するのがプロ」というのは良い言葉ですね。

ショートセッション: リアルタイムCG技術の先端

五反田 義治 (株式会社トライエース) ほか5名

前半はグローバルイルミネーションレンダリングの基礎的な話。基礎的な話と言っても、今回は式が多く出てきたので、初めて聴く方で、普段数式とかに触れていない方にはつらいのではないかなという印象は受けました。私は、ここらへんの話は個人的に色々やってきたので、復習がてらに聴いておりました。

内容は、グローバルイルミネーションレンダリングの基本となるKajiyaのレンダリング方程式の説明から入り、BRDF(双方向反射分配関数)、反射モデルをLambertにしたときの具体的な式展開という順番で行われました。また、そのまま実装するとリアルタイムでは動かないため、どのように実装するかの簡単な話で、実際に実装する話については午後のセッションとなりました。(午後のセッションは、私は聴いていません。)

メモ

  • セッションの目的 Kajiyaのレンダリング方程式を解いて、物理的に正しいレンダリングを行う。
  • 放射輝度。それを領域で積分した放射照度。それを時間微分した放射束。
  • ここらへんはPBR本とか、Jensenのフォトンマップ本に詳しく書かれていますね。
  • ある地点の放射輝度=反射光+発光。反射光はその地点に入射する半球全ての光と反射特性であるBRDFから決まる。
  • BRDFの物理的制約: エネルギー保存の法則、入ってきた光と出ていく光の総量は等価。可換性、入射角と反射角を入れ換えてもBRDFの値は変わらない。
  • レンダリング方程式には再帰性があるので、そのままだと解けない。→ パストレースなどの近似解法。
  • Lambert、というか間接光をシェーダで扱う方法。放射輝度マップをキューブマップで用意し、シェーダで参照。
  • そのまま実装すると計算量が半端ないので、大胆な近似が必要。球面基底関数を利用したPRT系など。
昨年のCEDEC2010のポスタで見た話ではあったのですが、今年はオーラル形式で聴講。半透明物体をラスタライズ形式でレンダリングすることは、今まであまりやられておらず、また難しい問題だったのですが、BRDFに反射面の曲率を加えたCRDFを考えることで、これを解決するという発表でした。原理を簡単に言ってしまえば、通常は入射光と法線のなす角が90度を超える場合は、視点から見えないので、レンダリングしないのですが、このような箇所から光が見える領域に滲み出るようにレンダリングすることで半透明物体を表現していました。
学会発表みたいだと、Twitterでつぶやいていたら、講演者にリプライを受けました(笑)。発表自体は大変分かりやすかったです。

メモ

  • BRDFに表面の曲率を加えたCRDF
  • 物体表面に曲率を持たせることで入射光と法線が90度を超えるような箇所の光を滲み出させることによって半透明物体を表現。

物理エンジンを利用したクリーチャーのプロシージャルアニメーション

辛 孝宗 (株式会社バンダイナムコゲームス)

前日の別のプロシージャルアニメとはちょっと趣が異なったのですが、こちらは多足クリーチャに対して、プロシージャルにアニメーションをつける話でした。対象とするクリーチャーはクモ型で、メインボディに2関節を持つ脚が付いているようもので、このクリーチャーをどのように制御するかについての話でした。序盤の方は、一般的なロボット制御の話で、単純な制御から問題点を解決して、一般的に用いられる制御の式を導きだしていたのですが、ここらへんの話はちょっと冗長だった気がします。最後の方は、CGだとそのまま式を使ってしまうと安定し過ぎてしますので、いかにバランスを崩すかという話になり、いかにバランスを取ろうかとする現実のロボット制御の話とは正反対の話で、聴いていて興味深かったです。

メモ

  • プロシージャルアニメーション: 作ったアニメーションをベースにインタラクティブにアニメーションを生成。
  • 肩ジョイントは2自由度のUniversal Joint 肘ジョイントは1自由度のHinge Joint
  • 足が増えると、足を上げ下げするタイミングを考えないといけない。
  • 物理エンジンでジョイントの角度を制限
  • 旋回するときは、旋回方向の足の上げ下げの周期を変える。ボートのオールのように。問題点は安定過ぎるため、演出に向いていない。
  • つまるところ目標の関節角を与えて、そこに近づけるような逆運動で、そのままの目標関数がばねモデルで振動する。そのため、ダンピング項を加える。さらに、目標値に届かなくなる場合が起こるので、それを考慮した項をくわえる。というロボット制御では極めて一般的な話かな?
  • メインボディの6自由度の位置、姿勢と、足のジョイントの制御をどうつなげるか。
  • CGだと安定しすぎてしまうので、Zero Moment Pointを考慮するなどして、わざとバランスを崩す。
  • ロボット工学と違うところは、ロボット工学はバランスを取るために色々工夫すること。CGではそれっぽく動かすためにバランスを崩すことに色々工夫すること。
  • さっきから足をぶちぶちと切られる8足キャラクター スパイダーくん。

SpyPartyの初期ベータマルチプレイヤーゲームアーキテクチャ

Chris Hecker (definition six, inc.)

一世を風靡したMinecraftと同じビジネスモデルで、次に来ると言われているSpyPartyの作者の講演でした。「ゲームデザイン」ではなく「ゲームアーキテクチャ」というところを間違えたのが悪かったのですが、正直良くわかりませんでした。最初に本人も言っていたのですが、早口過ぎて何言っているかわかりませんでした。もちろん英語です。

「ゲームデザイン」と思っていたので、インディーズのゲームを作る上で、どういう考えでゲームデザインをしたのかという話と思っていたら、前半は延々と認証周りのシステムの話。後半もネットワークの問題をどうするかという話を非常に高いレベルで、超高速で話していただいたため、ほとんど理解できずまま終わってしましました。残念。

メモ

  • SpyPartyのゲームデザインの話。スライドがすごく古風な感じ。「私は普段話すのが凄い速いので、できるだけゆっくり話しますね。」と言った途端、超早口。はい。私もですが。
  • SpyParty: Minecraftと同じビジネスモデルのインディースのオンラインゲーム
  • SkyPartyをStartCraftみたいなゲームにしていきたい。
  • モダンな特徴:ロビーがある。ビデオチャットがある。上手い人が見えるような仕組み。誰がオンラインであるかが分かる。マッチメイキング。etc
  • アイテム課金みたいなものは入れたくないので話さない。 プレイヤーのスキルを競いあうようなものを作りたい。
  • 完璧主義者なので、洗練されている、セキュアである、スケーラブルである、柔軟であることを目標とする。これが正しいかは疑問であるだろうが、自分は正しいものだと思っている。インディーゲームの作者であるので、こういうものを目指す。
  • Minecraftのログイン画面のIPを入力させる画面は、講演者の理想とするものの全く反対のもの。 セキュアでもスケーラブルでも全くない。
  • 認証と許可は異なる。運転免許証で自分を特定するのが認証、実際に車を運転することを許すのが許可。
  • 認証まわりの結構濃ゆい話が、超高速で流れて行っているので、そろそろついていけなくなって参りました。
  • MITで作られたチケットシステム(プロトコル):ケルベロスhttp://en.wikipedia.org/wiki/Kerberos_(protocol)
  • ケルベロス クールだぜ! ほとんど拡張せずにセキュアな通信できるぜ! オープンソースで移植性あるぜ! スケーラブルも当然! 皆使っているよ! サポートもあるぜ!
  • オープンソースをデバッグをすることは善良な市民としてできる。
  • オンラインゲームにおけるNAT Firewallの問題に関する話。
  • SpyPartyがどんなゲームであるかを全く分からないまま終わりそうだぜ。 HAHAHA

ARMORED CORE Vの対戦AIにおける階層型ゴール指向プランニングと機体制御

岡村 信幸 (株式会社フロム・ソフトウェア)

前日に続いてACVのAIの話。最初マシントラブルがあったようで、動画が再生されませんでした。他のセッションでもちょくちょくあったので、事前に動画を確認しましょう。とまぁ学会ではよくあることです。

前日はパス検索の話でしたが、今回はACの戦略をどう決めるかの話。ACVでは広大なフィールド内でACの挙動を決めるために階層型ゴール指向プランイングによるAIを採用しています。ゴール指向プランニングは最終ゴールに向けて、途中の行動を決定していくもので、ACVのように広大なフィールドを対象としたときには、意思決定を行うまでの計算コストが大きいため、3段階の階層構造を取っています。この時に状態遷移関数を上手く設計してやる必要があるのですが、目で確認しながらは色々と問題がある。機械学習の手法は見通しがまだ立っていないので見送り。そのため、ACV独自の方法を取った。という流れが少し分からなかったです。結論としては、ACVでは現在状態から目標状態までのパスをいきなり計算するのではなく、機体制御の予測結果を始点として目標状態までのパスを探索するものであるという理解だったのですが、あっているかはちょっと自信がありません。

最後まで聴いた感想としては、行動決定のための状態遷移関数などの設計はまだまだ人手によるところが非常に大きいので、機械学習分野の研究者が入り込む余地があるのではないかと思いました。

メモ

  • AIに要求すること。異なる時間粒度を解決すること。短期戦略と長期戦略。 並行する複数の条件をクリアすること。
  • ゴール指向プランニング。目標を達成する手順を決める方法。
  • はじめにゲームの状況から「状態」を作る。キャラクタの残り体力など。状態は無数にあるが、そのなかに「AIの目標を達成した状態」がある。現在状態から目標状態への状態遷移をする行動手順を見つける。
  • 「行動」は状態遷移の関数として表現。木構造の状態遷移図を作り、ゴールへのパスを求める。より良いゴールへ辿り着くためにパスに評価値を割り当てる。AIの性格を評価関数で表現。
  • パス探索はあくまで予測なので、行動の途中で無効になることがあるので、それに対応する必要がある。
  • 階層型ゴール指向プランニングで、短期戦略と長期戦略に対応。ACVでは3階層にした。第1層は戦略層、第2層は戦術層、第3層は機体制御層。層が下になるほど空間的、時間的にも粒度が細かくなる。
  • 再探索の効率化; 下位階層だけの再探索のときは上位階層は保持。一度失敗したパスは再探索しないようにカリング。
  • 状態遷移関数は「不確定な未来の予想」どう設計するかが匙加減次第。敵も予測する場合、どう全体をマージする?まだまだ改良の余地がある。
  • 複雑な制御ルールの機体の制御は難しい。経路は求まっても、機体の性能次第で、旋回できずに経路を辿れない場合などがある。
  • ACVにおける状態遷移関数の設計方法: 機体を動かしながら目測で決める→色々ダメ 。数理モデルの利用→上手くいくかわからなかったため見おくり。 機体制御の予測結果を初期状態としてゴールへのパスを探索するようなアプローチ。
  • ちょっと状態遷移関数まわりの説明が理解できなかった。
  • 経路探索は行動の経路を探索しているので、空間的な経路と混同しないようにしないとな。動画の壁を蹴って上に昇るなどの例を見て思いました。
  • さっきの状態遷移関数まわりは、現在状態から目標状態へのパスを直接探索するということではなく、機体制御の予測した結果から目標状態に迎えるように状態遷移関数を作る。ということかな?
  • ACVの状態遷移関数の設計を機械学習で解決できるかは検討しているけど、まだできるかどうか分からない段階みたいなので、機械学習屋さんは売り込むチャンスですぞ。
広告

Comments are closed.

%d人のブロガーが「いいね」をつけました。