【HGSN】アイテムアイコン化 4【開発記】

3D→2D続き🤤

実装解像度の調査
想定画角の測定
素材画角の仕様策定
基本撮影環境構築 ←今ココ
各撮影出力用設定の調整
出力(レンダリング)
アイコン用調整
編集・出力画角の変更
共通設定の分離 ←今ココ
各モデルの読込みとマテリアル設定
各モデル毎の調整

今回はプロパティ名無しで参照するエクスプレッションの記述をメモ代わりに書いたのと、それについての解説の様なものが長々と書いてあるだけで進捗としての何かアイコンとかそう言う見える成果物は無いので興味ない人はそっ閉じで…☺️

カメラやライト等の共通設定の分離作業の続きをば🤤
先日どうにかエフェクトで名前書かないで参照する方法を再履修したので他のプロパティへ応用するぽ🤪

画像1

thisComp.layer("*ref").source.layer(name)(thisProperty.propertyGroup(1).name)(thisProperty.propertyIndex)

長い🤤

これを使うための下準備の手順的は

1. 大元のコンポ(ここでは以前作った貨幣のプレビュー)を今回のアイテム2D化レンダ仕様に合わせる(前回の作業)(基盤コンポ)
2. 基盤コンポを複製(複製基コンポ)
3. 複製基コンポに基盤コンポを配置し描画無効、音があるなら消音(更にガイド化すると安心度が増す)
4. 配置した基盤コンポレイヤーの名前を特定の基準に従って命名する(ここでは"*ref")
5. リンクしたいプロパティに前述のエクスプレッションを片っ端からペーストする

これで複製基コンポを複製しても基盤コンポのカメラやライトに全て追従する様になる🤤
しかし、前回書いた様にその後で画角の変更とか有ると複製したものも含めて全部直さないとならないので大量生産を始める前によく確認すべし🤪

thisComp.layer("*ref")
これで基盤コンポレイヤーを参照
ここの段階ではまだ情報がレイヤー止まり

thisComp.layer("*ref").source
これで基盤コンポレイヤーの「素材」を参照
この場合コンポを配置してるので comp("基盤コンポ") みたいな指定と等価になる
この書き方の利点は参照先のコンポの名前が変わっても関係ない事で、飽くまでも必要なのは「レイヤー名」って所🤤
配置したままだとコンポと同じ名前になるけどやりやすい様に独特で短い名前が使えるようにレイヤー名を付けちゃうのがミソ☺️
こうする事でレイヤーに配置したコンポを入れ替えてもエクスプレッションを変更せずに動作するのよね🤤

layer(name)
このエクスプレッション書いてるレイヤーの名前が name で取り出せるのでこれ単体だと thisLayer と同じになる
上記のコンポ参照にくっついてると複製基コンポに有りながら基盤コンポの同名レイヤーを参照する様になる
勝負はここから🤤

thisProperty.propertyGroup(1).name
thisProperty だけだと自身の値が返ってくる
しかし欲しいのは参照先の値なので名前がないとならない
標準ではエクスプレッションを有効化すると自身の参照可能なプロパティ名を生成してそのまま enter キーで確定しても壊れない様になっている
例えばアンカーポイントなら transform.anchoPoint という文字列が入力済みで編集可能状態になるのだわ
thisComp.layer("*ref").source.layer(name).transform.anchoPoint としても参照できるんだけどこれ、プロパティ毎に語が違うのでペーストしてそこだけ変更しなきゃならないので途轍もなく面倒くさい😞
これが以前までの状態だったんだけど前述の様にこのプロパティ名を書かないで参照する方法をエフェクトで再履修したので応用したのがこれ☺️
thisProperty.propertyGroup(1) は自身の所属するプロパティ群で anchorPoint の場合 transform となる
propertyGroup(2) は1つ上の階層でここだと null かな?シェイプレイヤーとかのプロパティ階層が深い物で使う事になるけどここでは使わない
そんで matchName じゃなく単なる name なので "トランスフォーム" という「翻訳後の文字列」が得られる

thisProperty.propertyIndex
該当プロパティがプロパティ群の何番目なのか、が分かるんだけど、もしかしたら thisProperty.name でも参照できるかも…
後で確認して追記しようかな?
翻訳後の名前だと参照出来なかった気がするけどはて?

結果的に comp("基盤コンポ").layer(name)(プロパティ群名)(プロパティの番目) と書いてる事になるのよね
同じ文字列をペーストして動くのでとても楽🤤

ただし、この方法のリンクには欠点が有って

凄 く 重 い

もしかしたら最新の ver では最適化されてくれて速いかも知れないけど複製基コンポをチョイと幾つか複製しただけで循環参照チェックを相互に始めてPCが長時間考え出してぐんにゃりするので作業のどこかで値の焼き付けを行なって基盤コンポレイヤーの削除(無効化では参照が発生するのでダメ)を検討しないとならない😞
オススメはプリレンダやプロキシを作ったら上位コンポではレンダした連番だけ入れて元のコンポはその上位コンポの配置レイヤーから除外してしまう事かな🤔
あと、プロパティの中にはエクスプレッションを受け付けない物が幾つか有ってそこはどうにもならず画角と同じく「基盤で修正が入ると(以下略」なので最初の調整は気を付けないとね😞

次回はこの複製基の3Dオブジェクトを入れ換えたりで単品化する作業かな🤔

----------追記

検証結果

thisProperty.name でも動作
index よりも name の方が互換性は高くなると思うけど確実に重くなるので注意かな🤤

画像2


この記事が気に入ったらサポートをしてみませんか?