チュートリアル / Bifrost SDK入門チュートリアル
第1回:開発環境の準備、サンプルプラグインのビルドと実行

  • Maya
  • ゲーム
  • コラム
  • スクリプト・API
  • チュートリアル
  • 学生・初心者
  • 映画・TV・アニメ
第1回:開発環境の準備、サンプルプラグインのビルドと実行

このコラムではBifrost SDKを初めて触れる方に向けてBifrost SDKによるBifrostプラグインの作り方を数回に分けてご紹介したいと思います。 Bifrost SDKはMaya APIとは独立した全く異なる開発環境となっていますので、今回はまず開発環境の準備とサンプルプラグインのビルドと実行について手順を踏んで解説をしていきます。

Bifrost SDKとは

BifrostはMayaに搭載されたノードベースのビジュアルプログラミング環境です。強力なシミュレータやエフェクト機能をノードとして提供しています。またBifrostはMayaから独立したシステム環境となっています。Bifrostが標準装備しているノード群から選び、ノード作成、ノード間の接続をして希望の効果を作り出すシステムとなっていますが、場合によっては新しいノードそのものを自分で作りたいというケースがあると思います。Bifrost SDKは開発者にライブラリを提供し、新しいカスタムノードをC++プログラミングによって開発することが可能です。

開発環境の準備

それではBifrostのサンプルプラグインをビルドするための開発環境を準備しましょう。
今回Windows環境下で用意したものは以下となります。

Maya 2024.1
Bifrost 2.7.0.1 (Maya 2024.1インストーラに標準搭載)
Visual Studio 2019
CMake 3.17 以上

Bifrost SDKはBifrostのインストールフォルダに含まれています。
通常のインストール先は以下にフォルダになると思います。
C:\Program Files\Autodesk\Bifrost\Maya2024\2.7.0.1\bifrost\sdk

サンプルプラグインのソースファイルは exampleフォルダにあります。
この中から今回ビルドしたいサンプルプラグインソースファイルを含むVectorLengthフォルダを任意の場所にコピーします。ここではCドライブ直下にbifrostSDKフォルダを作成し、コピーをしました。
例: C:\bifrostSDK\VectorLength

続いてBifrostのインストールフォルダをWindowsの環境変数に追加します。
変数名: BIFROST_LOCATION
変数値: C:\Program Files\Autodesk\Bifrost\Maya2024\2.7.0.1\bifrost

BifrostのインストールフォルダをWindowsの環境変数に追加

以上で基本的な開発環境の準備が整いました。次はCMakeを使ってプロジェクトを生成します。

CMakeによるサンプルプラグインのプロジェクト生成

CMakeでVisual Studioのプロジェクトを生成してみましょう。
Windowsのコマンドプロンプトを開き、前項でコピーをしたVectorLengthフォルダに移動します。

cd C:\bifrostSDK\VectorLength

このVectorLengthフォルダにはソースコードの他にCMakeLists.txtが含まれているため、CMakeによるプロジェクトの生成が可能です。
続いてCMakeにオプションを付けて以下を実行します。

cmake -S ./ -B ./build -G "Visual Studio 16 2019"

CMakeの実行処理は数秒で完了すると思います。
以下のように表示されれば成功です。

-- Configuring done
-- Generating done
- Build files have been written to: C:/bifrostSDK/VectorLength/build

CMakeの処理が完了するとVectorLengthフォルダ内にbuildフォルダが作られます。
このbuildフォルダ内にサンプルプラグインに関するVisual Studioの各プロジェクトファイルや、ソリューションファイル VectorLength.slnが生成されます。

プラグインをビルドする

CMakeによりサンプルプラグインのプロジェクトが生成できましたので、Visual Studioでビルドをおこないます。
buildフォルダに生成されたソリューションファイル VectorLength.slnをVisual Studioで開きます。
ソリューションエクスプローラーにいくつかのプロジェクトがリストで表示されます。リストの中にあるVectorLengthOpsプロジェクトがサンプルプラグインのソースファイルを含んでいます。VectorLength.cppがプラグインのソースコードです。

プラグインのソースコード

それではこのVectorLength.cppを含む VectorLengthOpsプロジェクトをビルドしてみましょう。

VectorLengthOpsプロジェクトをビルドしてみる

エラーが無くコンパイルとリンクが正常に通ればビルドは成功です。
プラグインの実態はVectorLengthOps.dllとして生成されます。以下のフォルダパスに生成されると思います。
C:\bifrostSDK\VectorLength\build\src\Debug\VectorLengthOps.dll

エラーが無くコンパイルとリンクが正常に通ればビルドは成功

続いてINSTALLプロジェクトのビルドを実行します。これを実行するとプラグインに関係するVectorLength.jsonファイルを生成してくれます。このjsonファイルはノードのパラメータタイプなどが定義されたコンフィグファイルで、実際にBifrostでプラグインノードを実行する際に必要なファイルです。

INSTALLプロジェクトのビルドを実行

また最終的にプラグインのdllとjsonファイルのインストール先として、VectorLength-1.0.0フォルダが生成されます。

最終的にプラグインのdllとjsonファイルのインストール先として、VectorLength-1.0.0フォルダが生成される

プラグインの実行準備 BIFROST_LIB_CONFIG_FILES環境変数の設定

ビルドしたプラグインをBifrostに認識させるためには、BIFROST_LIB_CONFIG_FILES環境変数の設定が必要です。この環境変数にはプラグインのパッケージ内容を定義したjsonファイルを設定します。このjsonファイルをきっかけとしてBifrostは起動時にプラグインを読み込むことができます。

VectorLength-1.0.0フォルダにコピーされたVectorLengthPackConfig.jsonをWindowsの環境変数に追加します。
変数名: BIFROST_LOCATION
変数値: C:\bifrostSDK\VectorLength\build\VectorLength-1.0.0\VectorLengthPackConfig.json

VectorLength-1.0.0フォルダにコピーされたVectorLengthPackConfig.jsonをWindowsの環境変数に追加

以上でビルドしたプラグインの実行準備が完了しました。

プラグインの実行確認

ビルドしたプラグインを実行して正しく動作するか確認をしてみましょう。
Mayaを起動してBifrost Graph Editorを開きます。Tabキーを押すと作成できるノードのメニューリストが現れます。
この中からExamples > SDK > vector_lengthを選択してプラグインノードを作成します。

Bifrost Graph Editor

エラーも無くノードが作成できれば成功です。

エラーも無くノードが作成できれば成功

このvector_lengthノードは入力したベクトルの長さを演算するノードです。実際に他のノードを接続して演算の結果を確認してみましょう。
ここではcreate_mesh_cubeノードとscalar_to_vector3ノードを追加で作成してvector_lengthノードに接続をしてみます。vector_lengthノードのパラメータのInには(1, 1, 1)を入力します。
Wachpointの数値を確認すると1.73205が表示され正しいベクトルの長さを演算できているようです。またその値をcreate_mesh_cubeのposition(X)に入力することによりCubeはX位置1.73205に配置されます。

Bifrost

今回使用したVectorLengthサンプルプラグインのソースコードを記載しておきます。非常にシンプルな内容で理解しやすいかと思います。

// VectorLength.cpp
#include "VectorLength.h"

#include <algorithm>
#include <cassert>
#include <cmath>

namespace {
float euclidean2_length(Bifrost::Math::float3 const& in) {
    return in.x * in.x + in.y * in.y + in.z * in.z;
}
float euclidean_length(Bifrost::Math::float3 const& in) {
    return std::sqrt(euclidean2_length(in));
}
float max_length(Bifrost::Math::float3 const& in) {
    return std::max(std::abs(in.x), std::max(std::abs(in.y), std::abs(in.z)));
}
float manhattan_length(Bifrost::Math::float3 const& in) {
    return std::abs(in.x) + std::abs(in.y) + std::abs(in.z);
}
} // namespace

namespace Examples {
namespace SDK {

float vector_length(Bifrost::Math::float3 const& in, VectorLengthMode mode) {
    switch (mode) {
        case VectorLengthMode::Euclidean: return euclidean_length(in);
        case VectorLengthMode::EuclideanSquared: return euclidean2_length(in);
        case VectorLengthMode::Max: return max_length(in);
        case VectorLengthMode::Manhattan: return manhattan_length(in);
    }
    assert((false) && "All cases are covered");
    return euclidean_length(in);
}

} // namespace SDK
} // namespace Examples

Bifrost SDK開発環境の準備とサンプルプラグインのビルドと実行についてご紹介しました。サンプルプラグインはシンプルなものを選択しましたが、初めてBifrost SDKに触れるには良い素材だと思います。その他のサンプルプラグインのビルドと実行も試してみてください。新しいオリジナルノードを開発する参考になると思います。

次回はサンプルプラグインのソースコードを変更してカスタムノードの挙動を確認してみたいと思います。

製品購入に関するお問い合わせ
オートデスク メディア&エンターテインメント 製品のご購入に関してご連絡を希望される場合は、こちらからお問い合わせください。