part1の続きです。
part1ではObject型の中身の確認方法と、dataの取得、設定に関して記載しましたが、
part2ではdata以外の値…、というよりもっと根本的に1からObject型の中身を設定する方法に関してまとめたいと思います。
Object型の中身を1から設定する
dump_objectでObject型の中身を確認できますが、
あのパラメータはBifrost Graph Editor上から1から一通りノードで設定することが可能です。
なので例えばメッシュをdump_objectで書き出して、そのフォーマットを参考にノードを組めば自力でメッシュを作成することも可能です。
(ただ何がどういったフォーマットなのかは、おそらくドキュメントは無いのでdump_objectで既存の物を書き出して調べる必要があります)
今回は簡単な作例としてポイントを数個並べて表示するものを作成したいと思います。
{
point_component:
{
count: 3 (uint)
}
point_position:
{
data: [ {0f, 0f, 0f}, {0.5f, 0f, 0f}, {1f, 0f, 0f} ] 3 elements (array<Math::float3>)
target: point_component (string)
}
render_settings:
{
viewport_geometry_shader:
{
material_definition_type: pointToCircle_screen (string)
point_size: 0.05 (float)
}
}
}最終的にdump_objectで↑こういうった形で出力される状態になるよう、ノードを汲んでいきたいと思います(ちなみに、こちらはとりあえずビューポートにポイントが表示される最低限ものをピックアップしたものです)

まずはdump_objectノードを図のように繋いでテキストが出力されるようFilenameやFolderを設定します。
{
}この段階ではテキストは出力されるものの↑このように括弧しか出力されていないはずです。
これはポートがObject型なので、Object型として認識されている物の中身が空の状態です。
まずは「point_position」プロパティから設定したいと思います。

図のように「set_property」ノードを作成してdump_objectノードに接続します。
(set_geo_propertyノードではないので注意してください)
set_propertyノードのKeyに「point_position」と設定します。
また名前を分かりやすくする為に、ノード名の後ろにpoiont_positionとつけておくと良いかと思います(以降、set_propertyノードばかり使用するので)
{
point_position: (unknown data type)
}dump_objectの出力を見てみると、↑このように「point_position」プロパティが
追加されているのが分かります。
今はまだvalueに何も繋いでいないので「unknown data type」となっています。
今度は「point_position」プロパティの中に「data」と「target」というパラメータを追加します。

先ほどと同じ手順で、今度はset_propertyノードを2つ追加して、それぞれ図のように「data」と「target」をKeyに設定しリネームして接続します。
set_property__dataノードの out_objectポートは set_property__targetノードの objectポートへ、
set_property__targetノードの out_objectポートは set_property__point_positionノードの valueポートへ、
接続しているので注意してください。
{
point_position:
{
data: (unknown data type)
target: (unknown data type)
}
}dump_objectの結果は↑このような形になっているはずです。
set_propertyノードのvalueポートへ繋ぐと、そのプロパティ(Key)の値として格納され、
objectポートへ繋ぐと同じ階層に並ぶイメージですね。
続いて「data」と「target」にそれぞれ値を格納します。

図のようにset_property__dataノードのvalueポートにはポイントの位置用の配列を繋ぎ、
set_property__targetノードのvalueポートにはvalueノードでstring形で「point_component」と設定します。
{
point_position:
{
data: [ {0f, 0f, 0f}, {0.5f, 0f, 0f}, {1f, 0f, 0f} ] 3 elements (array<Math::float3>)
target: point_component (string)
}
}dump_objectの結果を見ると設定した値が格納されていることが分かります。
これで一通り「point_position」プロパティの設定は終わったので
下の図のようにコンパウンドにまとめてしまいます。

次は「point_component」プロパティを設定します。
流れ的には今までの繰り返しですね。

valueノードのTypeがuintなので注意してください。
ちなみにここで3と設定していますが、これはポイント数です(point_positionの配列数と同じにした方が良いです)
{
point_component:
{
count: 3 (uint)
}
point_position:
{
data: [ {0f, 0f, 0f}, {0.5f, 0f, 0f}, {1f, 0f, 0f} ] 3 elements (array<Math::float3>)
target: point_component (string)
}
}dump_objectの結果です。
実はこれで既にビューポートにポイントが表示されてます。
かなり小さい点で、しかもデフォルトはグレーなので分かりにくいですが…
この表示は「render_settings」プロパティを設定することでポイントの表示を変更できます。
次は「render_settings」プロパティの設定ですが、ひたすらset_propertyノードで設定するだけなので説明は省こうかと思います…
http://tn-log.xyz/dl/bifrost/about-object-type-part2/create_point_object.txt
完成品は↑こちらに置いてますので必要でしたらコピペしてそちらを参考にして頂ければ

ちなみに最終的に↑こちらのようにビューポートに横並びに3つポイントが表示されれば成功です。
ここまで1からObject型をset_propertyノードで設定するのは稀だと思いますが、
配列とかはWatchpointでは確認できなかったりするので、set_propertyノードで適当にObject型に設定してdump_objectで出力すれば確認できる、というのは結構重要かなぁと思います。
ちょうど区切りもよいのでpart2はここまでです(本当は取得も書こうと思いましたが長くなったので…)
part3ではget_propertyノードでの値の取得を書こうかと思います。