プラチナゲームズFUKUOKAは移転となりました。
2024年9月吉日にプラチナゲームズFUKUOKAは下記の住所に
移転となりました。
〒 814-0001
福岡県福岡市早良区百道浜1-3-70
ザ・レジデンシャルスイート・福岡 5号棟 5807号室
2024.09.18
プラチナゲームズFUKUOKAは移転となりました。
2024年9月吉日にプラチナゲームズFUKUOKAは下記の住所に
移転となりました。
〒 814-0001
福岡県福岡市早良区百道浜1-3-70
ザ・レジデンシャルスイート・福岡 5号棟 5807号室
2024.04.09
特設サイト「採用インフォメーション」がオープンしました。
同サイトは、2024年4月発行の「プラチナゲームズ採用パンフレット」をWEB化したもので、ご自宅や学校などで、場所を問わずにどなたでもご覧いただけます。
▼サイトURL:
https://www.platinumgames.co.jp/recruitment-information-2024/
▼オープン日:
2024年 4月8日(月)
▼掲載内容:
・これまでのプラチナゲームズ(開発実績)
・プラチナゲームズのお仕事(職種紹介、社員インタビュー)
・プラチナゲームズの働く環境を知ろう(福利厚生、オフィスツアー)
・数字で見るプラチナゲームズ
・プラチナゲームズの社長にインタビュー
▼閲覧対象者:
就活学生(25卒・26卒)に限らず、ゲーム業界に興味関心がある学生・既卒生の方
2024.03.29
当社現役ゲームクリエイターが講師として参加する就業体験プログラム【1Dayインターンシップ/プラチナWEBワークショップ】の開催が決定!現在、応募受付中です。
※リクナビ2026、マイナビ2026では、開催日程1日のインターンシップは「1Day仕事体験」という表記に統一されましたが、本稿では従来の「1Day インターンシップ」という表記を使用いたします。
1Dayインターンシップは、希望職種に分かれて行います。
各職種の業務内容についての詳しい説明のほか、ご自身の作品について先輩クリエイターたちから実践的なアドバイスをもらえる作品アドバイス会、就活作品や進路について相談できる交流タイムなど、プラチナゲームズのクリエイターの業務の一端と職場の雰囲気がカジュアルに体験できるプログラムです。
各回、4~12人程度(予定)と少人数制なので、リラックスしてご参加いただけるのではないかと思います。
主に2025年4月~2026年3月に卒業見込みの学生の方が対象になります。
ゲーム業界での就職に興味をお持ちの方は、この機会にぜひご応募ください!
興味のある方は、以下より各職種のコース内容など実施概要をご確認のうえ、まずはエントリー(会員登録)をお願いいたします。採用会員制ページ『PG MYPAGE』にて、参加方法・応募方法の詳細をご案内いたします。
>>>1Dayインターンシップ エントリーはこちら<<<
◆実施プログラム◆
◆開催スケジュール◆
開催回 | 開催日 | 応募締切日 |
第1回 2024年9月7日(土) 7月22日(月)
第2回 2024年10月19日(土) 9月10日(火)
◆実施場所◆
オンライン
ZOOMを使用します。参加方法詳細は『PG MYPAGE』内でご案内いたします。
◆応募・参加資格対象◆
専門・高専・短大・大学・大学院に現在在籍していて、2025年4月~2026年3月に卒業見込の方または学校をご卒業後概ね3年以内の方
ゲームクリエイターという仕事に興味のある方は、ぜひエントリーをお願いいたします。
皆さんのご応募をお待ちしています!
>>>1Dayインターンシップ エントリーはこちら<<<
2023年4月1日(土)、プラチナゲームズは「ネオ-クラシック・アーケード」シリーズの最新作として、デジタル生命体「白金ピーティー」が活躍する横スクロールアクションゲーム「キューティー・ピーティー(仮)」の最新のプレイ映像を公開しました。
プレイ映像はプラチナゲームズ公式YouTubeチャンネルで公開中のラジオ風動画「勝手気ままな 裏RADIO(出張版)」にてご覧いただけます。
また、ファンの皆様からの熱いご要望の声を多数頂戴し、本日よりピーティーのLINEスタンプの配信も開始しております。全40種の普段づかいしやすいスタンプですので、ぜひお友達と送り合ってお楽しみください。
配信ページはこちら:
https://line.me/S/sticker/22627037
プラチナゲームズが贈る、“クラシックゲームの魂を受け継いで、ゲームの本質的な面白さを現代の技術で追求する” プロジェクトです。2022年2月22日には、その第1弾となる『ソルクレスタ』をリリースいたしました。(Nintendo Switch/PS4/Steamで好評発売中。)
ネオ-クラシック・アーケード SHOCKING 10:
https://www.platinumgames.co.jp/games/neo-classicarcade-series
「ネオ-クラシック・アーケード」シリーズ第一弾『ソルクレスタ』:
https://www.platinumgames.co.jp/games/sol-cresta
プラチナゲームズのオフィス倉庫の片隅で誕生したデジタル生命体の少女。
「ゲームの主人公になる」という夢を叶えるため、プラチナゲームズやゲーム業界のことを日々勉強しています。
口癖は「~ムズ」「しらんなぁ?」。現在、パートナーの電子頭脳「N.E.G.I.(ネギ)」と2人で、プラチナゲームズやビデオゲームについて語る、番組をYouTubeで配信中です。
ピーティー公式YouTube:
https://www.youtube.com/channel/UCSWofKKo9POJlkyX2mz1cOQ
ピーティー公式Twitter:
https://twitter.com/PG_shirogane_Pt
2022年11月1日(火)、プラチナゲームズは福岡県福岡市天神に新たな開発拠点となる「プラチナゲームズFUKUOKA」を設立いたしました。
当社の国内開発拠点はこの福岡開発スタジオを加えることにより、大阪・東京に続いて3拠点となります。今後ますます需要と開発規模の拡大が見込まれるゲーム業界において、当社は将来的に海外拠点の展開も視野に入れた、より多く、より幅広い働き方の選択肢を用意することで優秀な仲間を募り、さらにお客様に喜んでいただける作品の創出に取り組んでまいります。
【 「プラチナゲームズFUKUOKA」で働きませんか? 】
当社は現在、新スタジオ「プラチナゲームズFUKUOKA」で一緒に働く仲間たちを積極的に募集しています。ご興味を持たれた方は、ぜひ採用ページをご覧ください!
また当社は、将来的に福岡以外の都市や海外への進出も計画しています。現在ご都合が合わないという方も、プラチナゲームズの今後にぜひご注目ください。
採用ページ:
https://www.platinumgames.co.jp/jobs/
■福岡スタジオ「プラチナゲームズFUKUOKA」
所在地:
〒810-0001
福岡県福岡市中央区天神一丁目10番20号
天神ビジネスセンター6階 CROSSCOOP内
※2024年9月に移転いたしました。
勤務形態:
オフィス勤務とリモートワークの双方を採り入れたハイブリッドワーク
Googleストリートビュー:
https://goo.gl/maps/jWmD71SjxuxM9oFs9
■大阪本社
所在地:
〒531-6108
大阪府大阪市北区大淀中1-1-30 梅田スカイビル タワーウエスト8階
■プラチナゲームズTOKYO
所在地:
〒101-0062
東京都千代田区神田駿河台4-2-5 トライエッジ御茶ノ水 12階
2022.09.08
筆者環境
・Bifrost2.5.0.0
・Maya2020.2
前半で作ったのはメッシュを敷き詰めるだけの単純なものでした。
後半では要件3の実装を行い、更により自然な仕上がりとなるよう細部の機能追加をしていきます。
この要件は道の形になるように草の配置を制限すれば実現できそうですね。
要件2の花の散布と同様にバーテックスカラーによるマスキングでも良いのですが、より直感的に操作できるようにカーブを用いてマスクを生成しようと思います。
具体的にはカーブから一定距離内にあるPointsを見つけ出してマスキングするという実装になります。
モデルデータパック内のカーブデータをグラフに入力します。
[terminal]に接続してデバッグ表示してみましょう。
もしカーブ形状を再現するための頂点数が不足してカクカクしていたらStrandsデータへのコンバートオプションを調整してみてください。
→ #01 input – Curve
→ #03 データタイプ – terminal
[get_closest_locations]を取得し、Strandsデータを接続します。
検索スタート位置は[scatter_points]のpositionsを使用します。これによってPointsからカーブ(Strands)への最も近い場所の検索が実行されます。
→ #07 空間検索 – closest
またuse_cutoff_distanceをONにしてcutoff_distanceを設定することで、検索の最大距離を指定することができます(OFFの場合は無限距離になります)。
[get_closest_locations]の結果をデバッグ表示してみましょう
[location_scope]を取得し、Strandsデータと検索スタート位置、そしてGeoLocationデータを接続します。
そして[terminal]のdiagnosticに接続しビューポートに表示します。
指定した距離内でStrandsへの最も近い場所が見つかったPointsからはStrandsへ向かう矢印が描かれます。
→ #07 空間検索 – GeoLocationをデバッグ表示する
[get_closest_locations]からは最も近い場所が見つかったかどうかのbool値の出力もあるので、今回はこの判定結果を元にしてマスク値を構築します。
[if]を取得し、[get_closest_locations]のfoundの値を接続します。
true_case=0.0、false_case=1.0とすることで、検索に成功したものには0.0、見つからなかったものには1.0の値をセットした配列データが生成されます。
→ #05 オートループ
このデータを草をインスタンス配置している[create_instance]のmask_weightsに接続します。
花のインスタンス配置にも同様のマスクを適用する必要があります。
工程4の[if]を複製し、false_caseには[sample_property]で取得したバーテックスカラーの値を接続します。その結果を花をインスタンス配置している[create_instance]のmask_weightsに接続します。
これでカーブ周辺を小道にすることが出来ました。
ここまでのグラフのテキストは12.zipのsample1.txtです(メッシュの入力は各自で行ってください)。
このままでは無機質な仕上がりなので、細部に味付けをしていきましょう。
小道と叢が明確にエリア分けされているは、値が0か1の両極端なマスクを使用しているからです。草の配置を無くす0.0という値の代わりにランダム値をセットするようにグラフを拡張しましょう。
[array_size]と[random_value_array]を取得し下図のように接続します。foundと同じ配列数のランダム値が作成されるので、[if]のtrue_caseにセットします。
これで道のエリアにも少し草が生えました。
インスタンスの配置に回転値を適用するにはPointsデータに回転のプロパティーをセットする必要があります。
[randomize_point_rotation]使うとPointsデータの回転プロパティーにランダム値をセットすることができるので、[create_instance]へ渡す前のPaointsデータに適用しましょう。
印象が大きく変わりますね
インスタンスの配置にスケール値を適用するには、回転の時と同じくPointsデータにスケールのプロパティーをセットする必要があります。
[scale_points]使うとPointsデータのスケールプロパティーに任意の値をセットすることができます。
マスキングで使用した値を[scale_points]のscaleに接続し、[create_instance]へ渡す前のPaointsデータに適用しましょう。
草や花と同じ要領で石メッシュのインスタンス配置を設定します。
そして要件3の工程4で作った[if]を複製して設定をtrue_case=1.0、false_case=0.0とします。それをマスクデータとして適用します。
ここまでのグラフのテキストは12.zipのsample2.txtです(メッシュの入力は各自で行ってください)。
他にも
・草の背丈をランダムにする
・小屋周辺の日当たりの悪い場所は草を減らす
・小道の幅を均一にしない
・石の向きをカーブに沿わせて石畳にする
など様々な拡張が考えられますね。
BifrostBlogは今回で一旦終了となります。
正直なところBifrostには改善が必要な箇所がまだまだ残されています。ですが将来有望なツールであると感じていますので、皆さんも一度触ってみてください。
今後も折を見て情報発信をしていこうと思いますので、引き続きよろしくお願いします。
あいるびーばっく!
高島 正規
テクニカルアーティスト
長年シネマティックアーティストとしてフェイスリグやフェイシャルモーションの制作を担当。現在は技術戦略グループに所属し、DCCツールのプラグイン開発のための内製C++ライブラリの構築と、Bifrostを用いたツール開発を行っている。
2022.09.07
筆者環境
・Bifrost2.5.0.0
・Maya2020.2
これまでのブログで紹介した基本機能をおさらいしながら、メッシュのランダム散布ツールを作ってみましょう。工程ごとに過去のブログへのリンクを貼っていますので、躓いたら確認しながら進めてください。
まず今回目標とするツールの要件は以下の3点にします。
プロシージャルモデリングでは使い古された題材ではありますが、入門編には最適な教材だと思います。動画で使用しているモデルデータはこちらの11_model_fbx.zipでダウンロードできます。
内容物:
今回作成するノードグラフは記事の末尾でダウンロードできますが、グラフ内で設定しているバーテックスカラーの名前や散布するメッシュタイプは上記のモデルデータに準じています。ご自身でモデルデータを準備される際は適宜設定を変更してください。
(当ブログで[]で括っているものはBifrostGraphEditor内のノード名です)
「座標をランダムで生成するノード」「メッシュの複製(インスタンス)を生成するノード」が標準で実装されていますので、それらを組み合わせてメッシュを散布するグラフを組んでいきましょう。
グラフを新規作成し、モデルデータセット内の地面メッシュをドラッグ&ドロップで入力します。
→ #00 新規グラフ
→ #01 input
[scatter_points]を取得し、地面メッシュを接続します。
→ #02 ノードの取得
→ #02 ノードの接続
[scatter_points]は入力したジオメトリの表面上にランダムでPoints(座標)データを作成するノードです。
ある程度均一な散布にしたい場合は scatter_mode の設定を BlueNoiseにすることをお勧めします。
散布数はamountで設定できます。(厳密にはこの数はPointsの算出を試みる回数です。条件に沿わずに省かれるデータもあるため、この数が出力数と一致するとは限りません)
Pointsデータをデバッグ表示で確認してみましょう。
[point_scope]と[terminal]を取得します。[point_scope]にPointsデータを渡し、次に[terminal]のdiagnosticポートに接続してください。
地面メッシュの表面に黄緑色の円で描画されたのが[scatter_points]で生成したPointsデータです。
→ #03 terminal
ノード名に”scope”と付くものはデータをビジュアライズするためのノードです。
#07 空間検索では[location_scope]でGeoLocationデータをデバッグ表示していましたね。
[create_instance]を取得し、Pointsデータを接続します。
[create_instance]はpointsの座標にジオメトリをインスタンスで配置するノードです。
配置するジオメトリはinstance_geometreisに入力したものが対象となりますが、入力が複数の場合はポイントごとにランダム選択となります。
インスタンスで配置する草メッシュをグラフに入力しましょう。地面メッシュと同くドラッグ&ドロップによる入力でもいいですが今回はワイルドカードによる入力を設定してみます。
[input]を取得し、pathプロパティーに /source/grass/*/* と入力します。これでMayaシーン上の階層 |source|grass| 以下の全てのジオメトリが入力されます。
→ #01 input – パスで入力
[create_instance]の出力を[terminal]のproxyに接続してビューポート上に描画します。
これで地面を2種類の草メッシュで埋め尽くすことが出来ました。
花も草と同様に[scatter_points]で生成したPointsに配置していきますが、[create_instance]のマスク機能を利用して配置エリアをコントロールしてみましょう。
今回は要件に従い地面メッシュのバーテックスカラーをマスクとして使用します。
[create_instance]と[input]を取得し、まずは草と同様の手順で地面メッシュ一面を花畑にします。
地面メッシュには予めバーテックスカラーマップを適用していますのでウォッチポイントで確認しましょう。
→ #02 ウォッチポイント
Maya側で設定しているバーテックスカラーマップの名前は”FlowerMask”、チャンネルはAのみです。
Bifrost側ではウォッチポイントにプロパティー名=”FlowerMask”、データタイプ=array<float>があるのが確認できるはずです。
→ #03 Meshプロパティー
[sample_property]を取得し、地面メッシュと[scatter_points]のgeo_locationsを接続します。
これによってscatterで生成したPointsの場所(ロケーション)における様々なプロパティー(ポジションや法線、UVなど)のサンプリングが可能になります。
今回は上記のバーテックスカラーの値をサンプリングしたいので[sample_property]のプロパティーはproperty=FlowerMask、default=floatにします。
→ #08 GeoLocation
[sample_property]で取得した値を[create_instance]のmask_weightsに接続します。
これで特定のエリアに花を咲かせることができました。
グラフは常に入力データの更新を監視していますので、バーテックスカラーの塗りを変更すれば即座に花畑の形状が変わっていきますよ。
ここまでのグラフのテキストデータは11.zipのsample1.txtです。(メッシュの入力は各自で設定してください)
ブログ最後となる次回「メッシュ散布ツールを作ってみよう【後半】」ではツールの要件3を実装しつつ、細かな味付けをしていこうと思います。
高島 正規
テクニカルアーティスト
長年シネマティックアーティストとしてフェイスリグやフェイシャルモーションの制作を担当。現在は技術戦略グループに所属し、DCCツールのプラグイン開発のための内製C++ライブラリの構築と、Bifrostを用いたツール開発を行っている。
2022.09.06
筆者環境
・Bifrost2.5.0.0
・Maya2020.2
今回は処理の最適化をご紹介しようと思います。
(当ブログで[]で括っているものはBifrostGraphEditor内のノード名です)
これまでブログ内ではBifrostのノード自体をBifrostGraphノードと記述してきましたが、実は以下の2種類存在します。
トランスフォームやシェイプのパラメータを持ったDAGノードで、ツリー階層内に含めることが出来ます。新規作成したグラフはこのタイプになります。
こちらはDGノードです。
ツリー階層化は出来ませんが、リグソルバーやコンストレイントなどの計算がメインの場合はこちらのタイプの方が高速です。
それぞれのタイプ切り替えはメニュー>Edit>Convert Graphで行います。
#01 input でも少し触れましたがBifrostはMayaとは異なるライブラリで構成されている為、相互でデータを受け渡す際にはコンバートが発生します。
Bifrostの仕組み上避けて通れないコストではありますが、例えば下図のようにBifrostGraphノード間でデータを受け渡しするだけの場合には全くの無駄なコストとなりますよね。
このような状況ではAmino::Objectの利用をお勧めします。
Amino::ObjectはBifrostの様々なタイプのデータを一元管理できるマスタークラスです。Amino::ObjectにデータとKey(データに付ける一意の名前)をセットにしたものを格納し、それを別の任意の場所で展開することができます。
Mayaへは不明なデータタイプのポートとして公開されるのでコンバートは行われません。
試しにBifrostのMatrixデータをAmino::Objectを介して受け渡ししてみましょう。
まず[value]を取得してデータタイプをObjectにします。もう一つ[value]でMatrixデータも準備しておきましょう。
[set_propaty]を取得して先ほどのObjectとMatrixデータ、そしてkeyをセットします。
Objectを[output]に接続してMayaに公開しましょう。
次にAmino::Objectを受け取る側のグラフを作っていきます。
MatrixやVectorと同じようにAmino::Objectタイプでポートを作成しMayaのノードエディタ上で接続する方法もありますが、Amino::ObjectはMeshやCurveと同じく中ボタンのドラッグ&ドロップによる入力がサポートされています。
ですので、受け取る側のBifrostGraphを開いて先ほどのBifrostGraphノードをグラフエディタ上に中ボタンでドラッグ&ドロップすれば完了です。(Mayaのノードエディタ上では自動的にAmino::Objectタイプのポートが接続されます)
では受け取ったAmino::ObjectデータからMatrixデータを抜き出してみましょう。
ここではkeyとデータタイプの指定が必要になります。[get_propaty]にObjectを接続した後、keyを入力しdefaultポートのタイプをfloat4x4に設定します。
Amino::Object内にkeyとデータタイプの組み合わせに合致したものが見つかれば、[get_propaty]の出力から受け取ることができます。
このようにしてコンバートのコストをかけることなくBifrostGraphノード間でのデータの受け渡しが可能になります。
Bifrostエディタ上のノードは純粋な関数ノードですので、Mayaのノードのようにキャッシュを持つことはありません。ですが以下の機能を使用してキャッシュを作ることができます。
BifrostGraphノード自身はMayaのカスタムノードなので、インプットポートに入力されたデータは上流が更新されるまでポートに保持されます。これをキャッシュとして使用できます。
例えば下図では左側のノードでソルバーの初期化、右側でソルバーの実行といった構成にすることで処理速度の向上を図っています。
(更にこの例では先ほど紹介したAmino::Objectでソルバーのデータを受け渡しすることでコンバートのコストを最小限にしています)
もう一つの方法として#04 で紹介したフィードバックポートも同様にキャッシュとして利用可能です。
基本機能の紹介はこれにて一旦終了です。
次回は当初目標に掲げていたメッシュ散布ツールを作ってみましょう!「メッシュ散布ツールを作ってみよう【前半】」
高島 正規
テクニカルアーティスト
長年シネマティックアーティストとしてフェイスリグやフェイシャルモーションの制作を担当。現在は技術戦略グループに所属し、DCCツールのプラグイン開発のための内製C++ライブラリの構築と、Bifrostを用いたツール開発を行っている。
2022.09.05
筆者環境
・Bifrost2.5.0.0
・Maya2020.2
今回は使用頻度の高いグラフをコンパウンド化し、それをチームで共有する方法を見ていきます。
(当ブログで[]で括っているものはBifrostGraphEditor内のノード名です)
サンプルとして前回作成した最も近い位置を取得するグラフを[get_closest_position]という名前でコンパウンド化していこうと思います。
これがあれば「GeoLocationデータが~~propertyが~~」といった内部処理の手続きを考えることなく、一発でポジションを取得できるようになりますよ。
一纏めにしたいノードを選択してメニューのCreate>Compoundを実行、あるいはショートカット[CTRL]+[G]でコンパウンド化します。
コンパウンドをダブルクリックすると内部のグラフが開きます。グラフの編集方法はこれまでと同じですが、[input]/[output]のポートはMayaへ公開されるものではなくコンパウンドのポートに該当する点に注意してください。
現在どの階層を表示しているかはBifrostEditor上部のタブで確認することが出来ます。階層の移動もこのタブで行えます。
ポートを整理して使い勝手の良いコンパウンドにしていきましょう。
まずポート名は右クリックメニュー>Rename Portで変更できます。また配置の変更は右クリックメニュー>Move ***で行えます。
右クリックメニュー>Add to Groupでポートをグループ管理することも可能です。(残念ながら執筆時点のver2.5.0.0ではグループ化の機能はinputポート側しかサポートしていません)
グループは表示を畳めるので、ハイレベルプリセットでありがちなポートの壁を整理して見た目をすっきりとさせることが出来ます。
コンパウンドはメニューからCreate>Publish Compaundで外部保存ができます。
ここで注意すべき点はCompound namespaceです。
ネームスペースはコンパウンドを一意の物として識別するための仕組みです。例えばネームスペースが異なれば同名のコンパウンドを作成することも可能です。一方でネームスペースを後から変更した場合は別のノードとして認識されるので、チームで運用する場合は事前にルール作りをしておくことをお勧めします。
またTabメニューのノードのツリー階層はここで決めたネームスペースに準じます。
保存先はBifrostに設定されている特定のディレクトリにする必要があります。
例えば
C:\ Users \ <your_user_name> \ Autodesk \ Bifrost \ Compounds
は標準で設定されている外部ファイルのロードパスです。(任意のディレクトリをロードパスに設定する方法はこの後で説明します)
では[get_closest_position]を出力してみてください。
保存できたらTabメニューに[get_closest_position]が含まれているのを確認してください。
これでいつでもすぐにカスタムコンパウンドを呼び出すことが可能になりました。
Tips
執筆時点のver2.5.0.0では下記のコンパウンドのオプションはツール上から設定できません。外部保存したjsonファイルを直接編集してください。
■ドキュメント
compounds > metadata に documentation を追記し、metaValueにはドキュメントファイルへの相対パスを記入します。
ドキュメントファイルはマークダウン形式で準備してください。
■ノードアイコン
compounds > metadata に icon を追記し、metaValueにはアイコンファイルへの相対パスを記入します。
先ほど外部保存した[get_closest_position]を取得してみましょう。
ノード名に青い◆が付いていますね。これはコンパウンドがリファレンス状態で使用されていることを表します。Mayaでリファレンス機能を使用したことがある方にはお馴染みの印だと思います。
リファレンス状態のコンパウンドは内部を閲覧することは出来ますが、グラフやポートの編集は不可能です。編集を行いたい場合、あるいはリファレンスを解除して使用したい場合はコンパウンドの右クリックメニュー>Make Editableを実行します。
外部保存したjsonファイルは、以下のディレクトリに配置することでBifrostで使用可能になります。
C:\ Users \ <your_user_name> \ Autodesk \ Bifrost \ Compounds
任意のパスを追加する場合、事前に以下のようなlib_config.jsonファイルの準備が必要です。”path”にはlib_config.jsonからコンパウンドファイルを保存しているフォルダまでの相対パスを記述します。
{ "AminoConfigurations": [ { "vendorName": "PlatinumGames", "libraryVersion": "0.2.3", "libraryName": "PlatinumGamesPack", "jsonLibs": [ { "path": "TeamW/compounds", "files": [ ] } ] } ] }
次に環境変数”BIFROST_LIB_CONFIG_FILES”にlib_config.jsonファイルのパスを登録して完了です。
最後にフリーで公開されているお勧めのコンパウンドパックを紹介ます。他にもBifrostの公式フォーラムではユーザーが作ったものが共有されていますので、チェックしてみてください。
・Rebel Pack
Bifrostの開発チームがリリースしているコンパウンドパックです。
標準実装に向けた評価段階のノード群ですので、今後の開発方針を伺い知ることもできます。
・MJCG-Compounds 2.0
Bifrostがまだ本格的に開発のターゲットとしていないモデリングやリギングで有用なコンパウンドが多数提供されています。同僚のMaxime Jeanmouginさんのプライベートプロジェクトです。
・bifrost-dl-core
こちらもリギングやデフォームに関するコンパウンドパックです。
・PRINT_PACK
グラフ上を流れる様々な数値をビューポートに表示するコンパウンドパックです。
ジオメトリプロパティーのような大量のデータをデバッグ表示する際に重宝しています。
・Bifrost Editor +2.0
コンパウンドパックでは無いのですが、エディタに不足している様々便利機能を実装するプラグインです。
次は「最適化」です。
高島 正規
テクニカルアーティスト
長年シネマティックアーティストとしてフェイスリグやフェイシャルモーションの制作を担当。現在は技術戦略グループに所属し、DCCツールのプラグイン開発のための内製C++ライブラリの構築と、Bifrostを用いたツール開発を行っている。
2022.09.02
筆者環境
・Bifrost2.5.0.0
・Maya2020.2
今回は空間検索の後半です。GeoLocationの正体が明らかになりますよ。
「理屈とかどうでもいいです」という方はブログ後半まで読み飛ばしてください。
(当ブログで[]で括っているものはBifrostGraphEditor内のノード名です)
GeoLocationデータには、まず検索結果のポリゴン番号が保存されています。
次に保存されているのは3個のサブ頂点番号です。
サブ頂点番号とはポリゴンを構成する頂点に左周りで0から順に割り振られた番号のことです。(各ポリゴンごとに0から始まる番号リストが存在すると思ってください。厳密には少し違うのですが詳細は省きます)
4角形以上のポリゴンの場合は0番を起点とする三角形のサブ頂点番号が保存対象となるので、下図の場合では{0,2,3}がsub_indecesに保存されます。
次に先ほどの三角形の各頂点に対するウェイト値です。
サブ頂点番号と対になるように{0.1, 0.2, 0.7}の順で保存されます。
例えばGeoLocationが指し示す位置情報を取得したい場合、[sample_property]の内部で行われる処理は以下のようになります。
法線、バーテックスカラー、UVも同様の手順で算出できますね。
さてGeoLocationの正体はわかりました。それでも一旦GeoLocationデータを介する構成になっている理由は謎のままですよね。このメリットを2つ挙げます。
空間検索の処理コストは非常に高く、ロケーションから位置やUVなど複数の情報を取得したい場合に何度も何度も空間検索を行うのは適切ではありません。
検索結果を汎用性の高いGeoLocationデータにしておくことで、処理の最適化を図ることが出来ます。
この点については、前回作成したclosestのグラフを見直してみましょう。
[get_closest_locations]の後に[sample_property]でもメッシュの入力が求められていますね。
二度手間のように見えますが、ちゃんと理由があります。GeoLocationの仕様を思い返すと中身はポリゴン番号とウェイト値だけでしたよね。検出で使用したメッシュはどれかといった情報は保持していないので、[sample_property]はサンプリングを行うメッシュを改めて求めているわけです。
実はこれ、裏を返すと検索で使用したメッシュとは別のものを入力しても該当のポリゴンが存在すればサンプリングが実行できるということです。
例えばスフィアAで空間検索を行い、スキンデフォームしたスフィアBでサンプリングすることで、フェースコンストレイントを作成できます。
ブログ中ではメッシュばかり使用してきましたが、カーブをソースにすることもできます。Mayaからカーブを入力する方法は#01 inputを参照してください。
空間検索はアイデア次第で面白いツールが作れそうな予感がしますね。そして良いものが作れたら人と共有したくなりますよね。
次回「コンパウンドにしてチームで共有!」ではノードグラフをチームで共有する方法を見ていきます。お楽しみに。
高島 正規
テクニカルアーティスト>
長年シネマティックアーティストとしてフェイスリグやフェイシャルモーションの制作を担当。現在は技術戦略グループに所属し、DCCツールのプラグイン開発のための内製C++ライブラリの構築と、Bifrostを用いたツール開発を行っている。