maimai_jp's blog

twitterでは書ききれないことなどをこちらに。

FFXIで学ぶpseudo-instanced drawing in Unity

i-saintさんの例のいっぱいポリゴン描いちゃう手法の解説がありまして。


pseudo-instanced drawing in Unity - primitive: blog

これでもまだ用語が多くて脳内では宇宙ネコが束になって転がってたので、FFXIの合成で例えてみました。

 

* * *

 

現実では、大量の絹糸を作るには紡績機を用いるのが一般的です。
ヴァナ・ディールにも一応スピニング機能*1は備わっているのですが(http://wiki.ffo.jp/html/7706.html)、残念ながらこれはだいじなものがないと組み込むことができません。
ヴァナ・ディールの合成では雷クリスタルを選択し、選択アイテムに基いてクロウラーの繭×1に分解処理を行うことになっています。
一方、スピニングは3ついっぺんに合成処理を行います。なので、合成キューに入っているリクエスト全てが処理される前か後にしか描くことができず、別レシピを使って合成、みたいなよくある要求を満たせません。
さらに、選択作業によりチャットも使いにくくなるため、他の行動と並行した処理を行うのも難しくなります。
おまけに現状だいじなものを入手していないと使えません。
よって、普通の合成を行いつつ大量の絹糸を入手したい場合、他の手を考える必要があります。
Macro lastsynthはそういう要求のもとに作られました。

 

多数の絹糸を合成したい場合、一番ストレートな方法は合成したい絹糸の数だけ雷クリスタルを使用する、というものですが、まあ遅くて現実的ではありません。
クリスタルの使用でウィンドウを開くだけで時間の圧迫になります。
他に使えそうな手として、2014年6月に実装された/lastsynthというテキストコマンドがあります。
これは絹糸を合成した履歴を再度行う、というもので、つまり雷クリスタルを使ってウィンドウを出していた処理なしで実現できるコマンドになります。
アイテム選択ウィンドウなしでクリスタルを使う合成処理をやるにはたぶんこのテキストコマンドを使うしかないのですが、単純に合成したい絹糸の数だけ/lastsynthと打ち込む、というも遅くてやや厳しいです。
テキストを打ち込むにあたってキーボードの入力が行われるため、1本の絹糸作成がコントローラ操作でのウィンドウ選択よりずっと重くのしかかります。
数百くらいなら個別/lastsynthでもなんとかなるかもしれませんが、それ以上になるともう一歩踏み込んだ方法が必要になります。

より大量の合成を実現するため、Macro lastsynthでは一行マクロを用いています。
これはマクロ一行の中に複数の処理を格納し、/waitインターバルで再合成までの時間を調整することで1回のマクロで複数の合成をする、というものです。
マクロには1つにつき6行までしか格納できないため、6/必要なテキストコマンド数が1回のマクロで作成できる限界になります。
例えば絹糸の場合、lastsynthとwaitが1行に収まるため6本分が1つのマクロに収まる数になります。
6本、半ダースの雷クリスタルと1ダースのクロウラーの繭がぎっしり重なって格納されているイメージです。
袋に入った合成後の絹糸だけがそれぞれの行で異なります。

 

(以下、本来は描画ポリゴンに貼るテクスチャのマテリアルとその対応IDの設定方法、読み込むためのテクスチャ生成といった話になりますが省略。それぞれ銘入れとかオーグメントとかを例にすれば例えられないこともない……)

*1:だいじなものの1つ。雷クリスタルとクロウラーの繭×2でも絹糸を作れるが、スピニングを用いるとクロウラーの繭×6を一気に絹糸×3にすることができる。ただし別途スピンドルを消耗品として入れる必要あり。