コマンドライン
pxrはアプリと同じスプライトをレンダリングし(同じプロジェクトからは同じピクセル)、ビルドスクリプトや一括処理に向いています。pxr helpはすべてのコマンドとオプションを、pxr help COMMANDは1つのコマンドとそのオプションを、pxr --versionはバージョンを表示します。読み取れないコマンドラインには、何が間違っているか、そのコマンドの使い方、そしてpxr help COMMANDを見るよう表示します。
よくある作業
# One sprite, 64 px, three-quarter view
pxr render knight.glb -o knight.png
# Every clip, 8 sides, 12 fps, all export formats
pxr render knight.glb --clip all --ring 8 --export all -o out/knight.png
# Two clips, hand-picked frames for the attack
pxr render knight.glb --clip walk --clip attack --keys 0,0.2,0.35,0.6 -o out/knight.png
# A different look
pxr render knight.glb --preset selout --view isometric --light -30,50 --bands 4 --aa 1 -o knight.png
# Your palette
pxr render knight.glb --palette my-palette.hex -o knight.png
# Save the settings as a project, then render it again later (or open it in the app)
pxr render knight.glb --clip all --ring 8 --export aseprite -o out/knight.png --save-project knight.pixor
pxr render knight.pixor
# A whole folder, every clip of every model, with a report
pxr batch models/ --recursive -o out/ --ring 8 --export all
プロジェクトはそれ自体がレシピです。レンダリングするとルックとシーンはプロジェクトから読み、コマンドラインから受け取るのは、ファイルの行き先(-o、--export、--names、--scale、--anim-scale、--no-recipe、--debug)、追加のレイヤー(--paper-doll、--piece、--parallax、--haze)、バックエンド、そしてどのアセットパイプラインを書き出すかだけです。それ以外のフラグは何も変えないので、警告で名前が示されます。pxr project setでプロジェクトに設定してください。
どのアセットパイプラインか。pxr render project.pixorはプロジェクトの最初のアセットパイプラインを書き出します。アプリの書き出しウィンドウが、ヘッダーのものから始まり、そこで選んだものを書き出すのと同じです。--pipeline NAMEで別のものを、--pipeline allですべてを書き出します。どれを書き出してもファイル名は同じなので、--pipeline allはパイプラインを1つずつ書き出したときとまったく同じファイルを書き出します。pxr names、pxr watch、pxr runも--pipelineを受け付けます。
ファイルの行き先。-o PATH(または--out PATH。どのコマンドも両方を受け付けます)は、コマンドが書き出す場所です。1つのファイルを書き出すコマンド(render、stylize、effect、voxels、tiles、shapes、rebake、project blueprint、project set(プロジェクトのシート))では、それがそのファイルです。パスが/で終わるか、既存のフォルダーなら、ファイルは自身の名前でそのフォルダーに入ります。pxr render knight.glb -o out/はout/knight.pngを書き出します。プロジェクトを-oでレンダリングすると、すべてのファイルがそのフォルダーに書き出されます(D51)。プロジェクトのシートフォルダー(既定はout/)がそのフォルダーになり、その下のパスは下での位置を保ち、それ以外のパスは最後の部分だけになります。アーカイブ、アニメーション、アイコンも含みます。アプリの書き出しウィンドウは、開いているプロジェクトのコピー(保存の有無を問わず、プロジェクトと同じ名前)に対して、まさにpxr render PROJECT --pipeline NAME -o FOLDERを実行します。--recipe-project FILE.pixor(無題のプロジェクトならnone)は、コピーのレシピがコピーの代わりに指定するものです。多くのファイルを書き出すコマンド(batch、golden、gbuffer、stages、icons、run --jobs)はフォルダーを受け取ります。
モデルの隣にある<model>@<clip>.<ext>という名前のクリップファイルは自動で追加されます。同じスケルトンを持つほかのファイルは--anim FILEで追加できます。
コマンド
| コマンド | 動作 |
|---|---|
pxr render MODEL | PROJECT.pixor |
スプライト。クリップ、向き、アクションを指定した場合はシート。プロジェクトは、一緒にフレーミングするカメラのグループごとに1枚のシートを書き出します |
pxr stages MODEL -o DIR |
パイプラインの各段階の画像(albedo、normals、depth、coverage、light、bands、edges、lines、cleanup、lint…)。一部だけなら--only edges,lines。--node Nを使うと、代わりにスタイルグラフのノードNが作るものをKIND.still.png(CRTの画面)として書き出します:静止画であり、スプライトやシートにはなりません |
pxr batch FOLDER -o DIR |
フォルダー内のすべてのモデル(.gltf、.glb、.fbx、.obj、.vox。サブフォルダーも対象にするなら--recursive)。失敗したモデルは報告してスキップします。DIR/report.json。--blueprint B.pixorblueprintは各モデルを1つのブループリントで処理します。--cache DIRは変更のないモデルをキャッシュから返します(ライブラリを参照)。アプリでは、フォルダーをウィンドウにドロップします |
pxr run BLUEPRINT.pixorblueprint --in model=M |
入力を埋めたブループリント(シーングラフを参照)。--set NODE.SETTING=VALUEは設定を1つ変更し、--set PIPELINE/NODE.SETTING=VALUEは1つのパイプラインだけで同じことをします(--set hold.times=4はすべてのアセットパイプラインのホールドノード)。--jobs TABLE.csv -o DIRは表の1行ごとに1回レンダリングします。--pipeline NAME|allはrenderと同じです |
pxr rebake SHEET.aseprite |
描き込んだシートにプロジェクトを再度レンダリングし、レイヤーと編集を保持する(Asepriteを参照) |
pxr cache stat|gc DIR |
キャッシュの中身。gc --keep 20GiBは、収まるまで最も長く使われていないレンダリングを削除します |
pxr golden CASES.txt |
テストケースをレンダリングし、保存した画像と比較します(下記参照)。--only TEXTは名前にその文字列を含むケースを実行し、--tolerance Fは異なるピクセルの割合Fまで許容し、-o DIR(デフォルトtarget/golden)は結果の出力先です。--graphは代わりにルックのノードグラフ(プリセットのものは標準のピクセル化グループ)でレンダリングし、--flatはすべてのグループを部品に展開した同じグラフでレンダリングします。どちらも同じ画像に一致する必要があります。--cache DIRは各ケースのスプライトをキャッシュ経由で--outに書き出し、キャッシュから返したものでもレンダリングしたものでもそのファイルを比較します。--no-cacheはキャッシュなしで同じファイルを書き出します |
pxr bench MODEL |
tests/budgets.txtのすべての予算を計測し、metまたはMISSEDを表示します。--rounds N(デフォルト10)はN回の実行で時間を平均します。--from INFO.jsonはアプリが計測したものを加えます |
pxr import MODEL --report |
読み込み時にファイルに何が起きるかを、レンダリングせずに表示します:見つかったもの、補正したものとその理由、提案、欠けているもの、スプライトのピクセルあたりの三角形数。壊れたファイルを先に見つける一括処理には--json |
pxr reference SPRITE.png |
手元のスプライトから読み取った設定:パレット、サイズ、アウトライン、帯、色相シフト、ディザ。それぞれ理由付き。pxr project set P --match-sprite S.pngで設定します |
pxr voxels MODEL -o OUT.vox |
ルックのパレットで、高さ--height(1~256)のボクセルにしたモデル:MagicaVoxelのファイル。--stackでスプライトスタックも書き出します(ボクセルとスプライトスタックを参照) |
pxr nodes [--graph G] [--json] |
このPixorにある4つのグラフ(スタイル、アクション、シーン、アセット)のすべてのノード:何をするか、何を受け取り何を出すか、各設定の範囲とデフォルト。ツール向けには--json(ウェブサイトのノードリファレンスはこれから作られています) |
pxr inspect FILE |
Pixorが読み込むあらゆるファイル(形式、pxr help inspectにもあります)でインポーターが見つけたもの:モデルならオブジェクト、マテリアル、ボーン、クリップ、警告。.vdbならグリッドとそのサイズ。画像ならサイズ。パレットなら色 |
pxr gbuffer MODEL -o DIR |
バグ報告用の生のレンダーターゲット。ルックが辺を描く場合、.pxrgダンプにメッシュの辺が含まれます |
pxr stylize DUMP.pxrg |
保存したレンダリングにピクセルのパスを実行する(ワイヤーフレームも含む) |
pxr diff OLD NEW |
2つの書き出しフォルダー(または2枚のシート):どのファイルが新しいか、なくなったか、異なるか、何ピクセル異なるか、そして各ファイルのレシピから、どの設定や入力が原因か。--allは同一のファイルも一覧表示し、--exactは何か変更があれば終了コード1で終了します。2つの.pxrgダンプはターゲットごとに比較します(--depth-tolerance EPS、--samples N) |
pxr adapters |
Pixorが使えるGPU |
pxr doctor |
このマシンが何でレンダリングできるか、そしてGPUがCPUのリファレンスと一致するか |
pxr project new|set|show PROJECT.pixor |
スクリプトやツールからプロジェクトを作成、変更、表示します:--name NAMEで名前を付けます(ファイル名ではなくヘッダーの名前。showでほかの情報と一緒に表示されます) |
pxr project key PROJECT.pixor TARGET CHANNEL |
Pixorで作ったクリップの1つのキー(--clip、--frame、--value、--how、--remove…)。スクリプトでクリップを組み立てられます |
pxr project bake PROJECT.pixor CLIP |
モデル自身のクリップを、すべてのフレームですべてのボーンにキーを打った、Pixorで作ったクリップにします(--as NAME、--fps F) |
pxr project scene PROJECT.pixor [NODE] |
シーングラフをノード1つずつ:ring、row、grid、scatter、look-at、vary…をチェーンの末尾に追加します。各ノードのオプションは設定の名前(--count、--radius、Varyの--size、Scatterの--box、Displaceの--bumpsとHeight fieldの--hillsはメートル、Subdivideの--times、Selectの--how)です。何も受け取らないノード(object、import)は、素の読み込みの代わりにチェーンを始め、長いチェーンの横に置かれてマージされます。ノードを指定しなければ表示します |
pxr project blueprint PROJECT.pixor -o B.pixorblueprint |
ブループリントとしてのプロジェクト。モデル、パレット、小道具、ボリュームのファイルを名前付きのスロットとして取り出します |
pxr style new KIT --from PROJECT |
プロジェクトの最初のスタイルをスタイルキットとして保存する |
pxr kit show FILE.pixorkit |
キットの中身:ノードのグループ、スタイル、プリセット、パイプライン |
pxr names PROJECT.pixor [--names T] [--pipeline NAME|all] |
プロジェクトが書き出す名前とすべてのフレームのIDを、レンダリングせずに表示し、各レンダリングのファイルをそれぞれのパスで示します。1つの名前に2つのフレーム、1つのファイルに2つのレンダリング(would be written twice)、1つのパスに2つのファイル(ペーパードールのベースとライトキットのもの、パレットのバリエーションとレイヤー)は、後でファイルが失われるのではなく、ここでエラーになります |
pxr graph list|set|add|drop|wire|save|swap|flatten|extra FILE --which scene|action|style|asset |
スクリプトから4つのグラフのどれでも操作します。--pipeline NAMEで対象を選びます:名前で指定するアクション、スタイル、アセットパイプライン(指定がなければ最初のもの)。表示する、設定を1つ変える、チェーンにノードを加える(--aloneなら横に置き、--in SLOT=NODEでほかのノードを接続)、ノードを1つ外す、wire --from N --to M --slot Sで2つをつなぐ、キットとして保存する(save -o KIT.pixorkit:スタイルグラフは丸ごと、シーン、アクション、アセットのグラフは1つのノードとして。--as-pipelineなら、別のプロジェクトがpxr project set --use-pipelineで使うアセットパイプライン全体)、ノードキットをグループとして入れる(add --kit KIT)またはノードと差し替える(swap --kit KIT)、グループを展開してグラフを書き出す、などができます。extra --node N --name LAYERはスタイルのノードの画像を書き出しのレイヤーにもし、--dropでそれをやめます。--node(とpxr runの--set NODE.SETTING)は、ノードを番号、種類、グループの名前、名前の内容(画像ファイル、シート)、またはアプリで付けた名前(F2)で指定します。objectノードはモデル(of=model)で、アイテム、シェイプ、画像はそれぞれ独立したノードです。アセットグラフのsprites、frame-range、holdノードもほかと同じように設定します(--node sprites --set action=walk,Static。action=every-one-except-staticは新しいノードの既定、action=は静止も含むすべてのアクション。--set smart=6、--node frame-range --set from=2 --set to=5、--node hold --set times=2)。アクションのノード(clip、bob、spin、merge…)は種類か番号で指定し、--aloneなしで追加したものは、既存のものとマージされてすぐに再生されます。スタイルグラフでは、ノードはどこにも接続されずに入り、--in SLOT=NODEとwireで接続します。グラフが実行できなくなる編集は拒否され、ファイルは元のままです(シーングラフ、アセットグラフ、ノードを参照) |
pxr shapes [PROJECT] -o OUT.glb |
アプリで作ったシェイプを、モデラーやエンジン向けにジオメトリーとして書き出す |
pxr icons MODELS... -o DIR |
サイズごとにアトラスを持つインベントリのアイコン。レア度は各ファイルの名前から。--saveで再実行用のレシピを保存します(書き出しを参照) |
pxr audit FILE|FOLDER... [--style KIT] |
書き出したシートが一致するか確認します:各ファイルのレシピからプリセット、ライトのリグ、ビュー、ピッチ、ライト、帯、線、パレット、メートルあたりのピクセル数を確認し、スタイルキットがあればすべての色がそのパレットにあるかも確認します(なければ終了コード1) |
pxr watch PROJECT.pixor |
プロジェクト、モデル、パレットが変わるたびに書き出し直す |
pxr effect KIND[:FRAMES] |
単独のピクセルエフェクト:explosion、hit-spark、slash、magic-burst、heal、portal、smoke-puff、dust、fire-loop、rain、snow、fireflies、falling-leaves |
pxr console list|check SHEET.png |
ゲーム機モード、またはシートがそのどれかに収まるか(収まらなければ終了コード1)。ゲーム機は--consoleかシートのレシピから決まります |
レンダリングのオプション
| オプション | デフォルト | |
|---|---|---|
--view VIEW |
プリセットの | side、three-quarter、isometric、top-down |
--pitch DEG |
ビューのもの | 地平線より下の角度 |
--yaw DEG |
0 | 1つのスプライト、または1つのスプライトのシートの1つの向きを回す |
--camera GENRE |
ゲームのカメラ:platformer、fighting、beat-em-up、adventure、top-down-rpg、action-adventure、isometric、tactics、strategy、racing、top-down-shooter、shmup、icon(ビュー、ピッチ、回転。指定がなければサイズと向きも) |
|
--camera-yaw DEG |
0 | カメラをモデルの周りに回す(すべての向き) |
--size N |
64 | N x Nに収める(4~2048)。--size 960x540はその幅と高さのキャンバスに収めます(タイトル画像、背景) |
--pixels-per-metre F |
--sizeの代わりにメートルあたりの固定ピクセル数、0.5~4096(アプリのピクセル/m) |
|
--up AXIS |
読み込み時に決定 | ファイルで上を向く軸(y、z、-z、x、-x、-y):横倒しで書き出されたモデル用 |
--import-scale F, --import-offset X,Y,Z |
読み込み時に決定 | 単位と移動、手で指定 |
--no-import-fix |
何も補正せず、ファイルをそのままレンダリングする | |
--samples N |
4 | 各辺に沿ったピクセルあたりのサンプル数、1~8(アプリのサンプル数) |
--light AZ,EL |
-45,45 | カメラに対するキーライト |
--light-space S |
カメラ | ワールド:光はカメラに追従せず、シーン内の位置に留まります |
--fill F |
プリセットの | フィルライトの強さ、0~1 |
--no-shadow |
落ち影なし | |
--bands N |
プリセットの | 明暗の帯、1~4 |
--palette P |
.hex、.gpl、.pngのファイル、または内蔵パレット:pixor-16、pixor-8、dusk-12、forest-12、desert-12、ice-10、mono-8 |
|
--aa N |
0 | アンチエイリアス:0でオフ、1でシルエット、2ですべての線 |
--match-space S |
oklab | 固定パレットで最も近い色を探す方法:oklab、srgb、weighted |
--dither-pattern P |
bayer | bayer(格子模様)またはblue-noise(均等に散らばる)。どちらもモデルが動いても表面に固定されます |
--even-stairs |
オフ | 段が均等なまっすぐなシルエットの縁(2、2、2ではなく3、1、2) |
--smear PX |
0 | スミアフレーム、0~64:前のフレームからPXピクセル以上動いたものが後ろに尾を引きます |
--nudge X,Y |
0,0 | グリッド上でモデルを1ピクセル未満だけ動かします(各-0.5~0.5)。サンプリングだけが変わります |
--foot-plant |
オフ | 人型の接地した足を、クリップのすべてのフレームで同じピクセル行に |
--preset NAME |
クリーン | clean、selout、retro4、flat、wireframe、または保存したプリセットキット(.pixorkit) |
--style KIT |
スタイルキット(.pixorkit):スタイル全体(pxr style new、スタイルのキットを保存…)とそのスタイルグラフ、またはスタイルグラフのみ(pxr graph save --which style)。後のフラグで変更できます。ゴールデンケースのファイルでは、そのファイルからの相対パス。pxr iconsとpxr auditも同じものを受け付けます |
|
--dither F |
0 | 隣り合う明暗の帯の間の組織的ディザリング、0~1 |
--line-colour HEX |
プリセットの | Darkの線の色、#rrggbb(自動パレットのみ) |
--no-lines MATERIAL |
このマテリアルの周りに線を描かない(繰り返し指定可。pxr inspectで一覧表示) |
|
--crease-angle DEG |
55 | 折り目の線を描くひだの鋭さ、1~179 |
--depth-step PX |
2.5 | 内側の線を描く深度の段差(ピクセル)、0.1~40(アプリの深度の段) |
--shortest-line N |
3 | 残す内側の線や折り目の線の最短の長さ、0~16ピクセル(アプリの最短の線) |
--no-part-lines |
深度の段差がない接したパーツの間に線を描かない | |
--outline-inside |
スプライト自身の縁のシルエット | |
--convex LINE |
なし | カメラ側に膨らむひだの明るい線:none、dark、highlightN |
--no-material-channels |
glTFマテリアルの金属、粗さ、エミッシブ、unlit、透過を無視し、色だけでシェーディングする | |
--backend B |
自動 | auto、vulkan、metal、dx12、gl、webgpu、cpu(レンダラーの選び方を参照) |
ライトと色のオプション
| オプション | |
|---|---|
--rig NAME |
ライトのリグ:noon、dusk、torchlight、moonlight、studio |
--cycle MATERIAL |
--colour-cycleアクションでこのマテリアルの色をサイクルさせる(繰り返し指定可) |
--team MATERIAL|#RRGGBB |
チームカラー:マテリアル、またはその色の色相のすべてのランプ(繰り返し指定可)。--variant team:blueはそれだけを塗り替えます |
--console C |
ゲーム機モード:gameboy、nes、pico8、tic80、c64(ゲーム機モードを参照) |
アニメーションのオプション
| オプション | |
|---|---|
--clip NAME |
レンダリングするクリップ(複数なら繰り返し指定)、またはall |
--anim FILE |
FILEのクリップも使う |
--ring N |
向き。正面から反時計回り(1~64、デフォルト1)、South、Southeast、East…と命名:それぞれ1台のカメラで、1つのサイズを共有し、1枚のシートに |
--sides A1,A2,... |
代わりに各角度の向き(度、0=正面、90=右向き) |
--fps F |
クリップ時間の1秒あたりのフレーム数(デフォルト12)。すべてのスプライトノードのカット |
--keys T1,T2,... |
手で選んだクリップの時間(秒)。すべてのスプライトノードのカット |
--clip lib:NAME |
モデルのスケルトンに合わせたモーションライブラリのクリップ:idle、walk、run、jump、attack、hit、death |
--parallax N |
スクロールする背景のために、画像を深度でNレイヤー(2~8)に分割します(複数のモデルのシーンを参照) |
--haze #RRGGBB |
遠くのパララックスレイヤーが溶け込んでいく色。noneはすべてのレイヤーをパレットのまま保ちます |
--spring NODE[:S,D,G] |
NODEとその下が動きに合わせて揺れます:硬さ、減衰、重力(繰り返し可)。プロジェクトではシーングラフのばねノード |
--smart-frames N |
各クリップのポーズから選んだNフレームを残す(それぞれ次まで保持)。すべてのスプライトノードのカット |
--root-motion M |
keep(既定)、in-place(ルートボーンを水平方向に固定)、in-place-sway(クリップの正味の移動だけを取り除く) |
--turntable N |
モデルを1回転させるNフレームのアクションを追加 |
--turntable-seconds S |
その回転にかかる時間(デフォルト:--fpsでNフレーム) |
--motion M[:N[:A]] |
ループを追加:spin、bob、swing、pulse、squash、flicker、Nフレーム、強さA(spinでは、ループが回す1周の割合:spin:8:0.125は8面の宝石を1面分回し、継ぎ目のないループになります) |
--colour-cycle N |
サイクルするマテリアルの階調を回すNフレームのアクションを追加 |
--prop FILE:BONE[@at=X,Y,Z][@turn=X,Y,Z][@scale=S][@grip=NODE] |
別のモデルをボーンに付け、グリップで持たせ、ボーンの軸で移動・回転させます(ボーンの小道具を参照) |
--shape SPEC |
シェイプを追加:[NAME=]KIND[:SIZE[:AT[:#RRGGBB[:TURN]]]]。例:box:1,0.5,1:0,0.25,0:#c86432、横倒しの名前付きの車輪ならwheel=cylinder:0.5,0.2,0.5:0.7,0.25,0.5:#14101c:90,0,0(繰り返し指定可)。KINDはbox、sphere、cylinder、cone、torus、plane、capsule、wedge、pyramid、prism、stairs、arch、lettersです(pxr help renderは、フラグが読むのと同じ一覧から表示します)。lettersはフォントのピクセルをブロックに押し出したもので、PIXOR、またはプロジェクトの文字を綴ります:pxr project set --add-shape letters --words WORDS --font NAME(renderは--wordsを受け付けません) |
--volume SPEC |
ボリュームを追加:puff、flame、cloud、mist、または.vdbのパス。続けて[:SIZE[:AT]]、番号付きの.vdbシーケンスなら[:FRAMES[,EVERY[,LOOP]]]、ボーンで運ぶなら@BONE、N番目のエフェクトのエミッターで運ぶなら@effect:N(ボリューム) |
--wire LINE |
ワイヤーフレームのルック:none、dark、seloutN。--wire-fill、--wire-hidden、--wire-angle(0~180)、--wire-all-edges、--wire-glow MATERIALと併用(設定) |
--light-sweep N |
ライトを動かすNフレームのアクションを追加 |
--effect KIND[:N] |
Nフレームのピクセルエフェクトのアクションを追加(pxr effectを参照)。--effect-size、--effect-energy、--effect-seed、--effect-at X,Y,Z、--effect-bone BONE、--effect-clip CLIP、--effect-hit FRAME、--effect-aloneと併用 |
--hitbox PART, --hurtbox PART, --socket BONE |
JSONにフレームごとのボックスとボーンの位置(繰り返し指定可。書き出しを参照) |
--paper-doll, --piece NAME:PARTS |
ペーパードールのレイヤー(書き出しを参照) |
--item MODEL@X,Z[,YAW,SCALE[,LAYER]][:CLIP[,PHASE]], --ground W,D[,#RRGGBB] |
最初のモデルの横にほかのモデル(プロジェクトではそれぞれシーングラフのアイテムノード)と、その下の地面(書き出しを参照) |
--chunks COLSxROWS |
大きなマップを継ぎ目が正確なチャンクとして書き出す。--chunk-margin N(デフォルト8) |
--max-flicker F |
ちらつきの割合がこれを超えると警告(例:0.01)。ゴールデンケースでは失敗 |
--require-visible OBJECT |
OBJECTがどこかのフレームで消えたら警告 |
書き出しのオプション
| オプション | |
|---|---|
--export LIST |
カンマ区切りまたは繰り返し指定:png、json、aseprite、normal、depth、emission、layers、palette、godot、gif、apng、light-kit、p8、report、video、またはall(p8とvideo以外のすべて。この2つは名前を指定したときだけ書き出します)。PNGは常に書き出されます(書き出しを参照)。render、batch、run、watch、project set、tiles(独自の形式あり)も同じように読み取ります |
--layout L |
grid(アクションと向きごとに1行、デフォルト)またはstrip |
--padding N |
セル間の透明なピクセル、0~256(デフォルト0) |
--extrude N |
セルの縁をNピクセル外側へ繰り返す、0~64(デフォルト0) |
--pot |
2のべき乗のシートサイズ |
--godot-path RES |
Godotがシートを見つける場所(デフォルトres://<png name>) |
--anim-scale K |
GIFとAPNGファイルの整数スケール、1~16(デフォルト1) |
--video-scale K, --video-fps N, --video-background #RRGGBB |
動画の書き出し方:スケール1~16(デフォルト4)、毎秒1~100フレーム(デフォルト30)、スプライトの背景(デフォルトは黒) |
--trim |
各セルをピクセルのある部分まで切り詰めます(JSONとGodotのファイルは配置を保持します) |
--dedupe |
同一のフレームは1回だけ保存する |
--max-width N |
シートがNピクセルより広くなる前に新しい行を始める(0~65536、0:制限なし) |
--columns N |
1行にNフレーム、すべてのクリップを前のクリップに続けて並べる:コンタクトシート |
--max-height N |
Nピクセルより高いシートをページに分割します。クリップは丸ごと1ページに(NAME_1.png、NAME_2.png。0~65536) |
--variant NAME |
パレットのバリエーションも書き出します(繰り返し指定可):hit-flashやnightなどのエフェクト、hue:DEG、team:COLOUR(名前または#rrggbb。--teamが必要)、palette:NAME|FILE。インデックスシートとルックアップテクスチャーを追加します |
--shadow KIND |
name_shadow.pngも書き出す:contactまたはdrop |
--names TEMPLATE |
ファイルとJSONのキーの名前の付け方:{project}、{object}、{action}、{side}、{layer}、{set}、{size}、{index}、{ext}を使ったパターン。{index:3}は3桁にゼロ埋めします(書き出しを参照) |
--no-recipe |
レシピ(シートの作り方)をPNGと.asepriteに保存しない |
--scale K |
PNGをK倍に拡大(プレビュー専用。ほかの形式とは併用不可) |
--save-project FILE.pixor |
このコマンドラインをプロジェクトとしても書き出す |
--debug DIR |
レンダーターゲット、パレット、lint、ちらつきの画像 |
自分のパイプライン用のゴールデンテスト
ケースファイルには1行に1つのレンダリングを記述します。名前、モデルまたはプロジェクトのパス(ファイルからの相対パス)、オプション。
hero-walk models/hero.glb --clip walk --ring 8 --max-flicker 0.02
hero-proj hero.pixor
pxr golden cases.txt --blessは結果をNAME.pngとしてファイルの隣に保存します。以後、pxr golden cases.txtは、いずれかのピクセルが変わったとき、スプライトにlintの指摘(孤立ピクセル、L字型の線の角、2 pxの線)があるとき、または--max-flickerや--require-visibleのチェックに失敗したときに失敗します。エラーには、どのケースのピクセルが違うか(そのNAME.actual.pngとNAME.diff.pngはtarget/goldenにあります)と、どのケースがチェックに失敗したかが示されます。--blessはチェックに失敗しても画像を保存し、それらのケースを挙げて1で終了します。モデルの変更でスプライトが変わったことに気付くのに使います。
実行ではなくライブラリ
スタジオでは、ランプを1つ動かしただけで同じ5,000枚のスプライトをレンダリングし直します。次の3つが、それを一晩がかりの作業ではなく判断の問題にします。
プロセスが終わっても残るキャッシュ。pxr batchとpxr runの--cache DIRは、作ったすべてのレンダリングを、読み込んだファイルとその内容のハッシュとともに保存します:モデル、隣にあるクリップファイル、.gltfが参照するテクスチャー、パレット、キット、画像、ボリューム。次の実行では、ファイルのハッシュが同じままのレンダリングはすべてキャッシュから出し、残りをレンダリングします。
pxr batch models/ --cache .pxrcache --out out/ # renders what changed
pxr cache stat .pxrcache
pxr cache gc .pxrcache --keep 20GiB # least recently used go first
キャッシュが正となることはありません:--no-cacheでも同じバイト列が得られ、保存されたファイルのハッシュが名前と一致しなければ、使わずにレンダリングし直します。また、Pixorの新しいビルドは古いキャッシュを信用せず、新しいキャッシュを始めます。
ジョブファイル。レンダリング1回につき1行、ブループリントのスロット1つにつき1列の表で、必要に応じてname(その行のフォルダー)、out(--outの下のシート)、NODE.SETTING列(その行の--set)を加えます:
model,name,palette,sprites.fps
heroes/knight.glb,knight,palettes/steel.hex,8
heroes/mage.glb,mage,palettes/robes.hex,
ここでsheet.pixorblueprintはpxr project blueprint sheet.pixorから作ったもので、heroes/knight.glbにパレットを付けたプロジェクトなので、スロットはmodelとpaletteです。騎士は毎秒8フレームでカットされ、セルが空の魔術師はブループリント自身のレートでカットされます。どの行もout/NAME/NAME.pngを書き出します。
pxr run sheet.pixorblueprint --jobs assets.csv --cache .pxrcache --out out/ --jobs-report report.json
pxr run sheet.pixorblueprint --jobs assets.csv --cache /shared/cache --out out/ --rows 400.. # the second machine, of 800 rows
パスは表からの相対パスです。1行はちょうど、その行の--inと--setを加えたpxr runなので、失敗した行だけを単独で実行できます。失敗した行がほかの行を止めることはありません。レポートにはすべての行が、レンダリングされたか、キャッシュから提供されたか、失敗したならその理由とともに並び、どれかが失敗していればジョブは最後に1で終了します。
フラグで予算を設定。--max-pixels N、--max-memory SIZE、--max-time DURATIONは、レンダリングごと(行ごと、モデルごと)に適用されます。計画の段階で分かること(シートのピクセル数、使うメモリーのおおよその量)は描画前にチェックし、時間とメモリーはフレームの間にチェックします。いずれかを超えると、何がどこで止まったかを示して6で終了します。ジョブでは、その行がその理由で失敗し、ほかの行は続行します。
pxr run sheet.pixorblueprint --jobs assets.csv --out out/ --max-memory 1.5GiB --max-time 5m --max-pixels 16M
長いクリップ。クリップのちらつきを防ぐパスはクリップ全体を見渡すので、クリップのフレームは描かれた後にまとめて仕上げられます。パスが読むデータは512 MiB(--max-memoryを指定した場合はその半分)以内に、数方向ずつ保たれます。1方向でも収まらないほど長いクリップは、描いている間ディスク(~/.cache/pixor/spill、またはPXR_SPILL_DIR)に保存され、必要に応じて読み戻されます:同じピクセルで、遅くなるだけです。フォルダーはレンダリングが終わると消えます。
終了コード
| コード | |
|---|---|
| 0 | 成功 |
| 1 | 失敗したレンダリング、書き出し、一括処理のモデル、ジョブの行、ゴールデンケース |
| 2 | 使い方の誤り:メッセージ、コマンドの使い方、see pxr help COMMANDをstderrに出力 |
| 3 | 読み込めなかった入力:モデル、プロジェクト、パレット、キット、ケースファイル、ダンプ |
| 4 | 名前で指定したバックエンドが存在しない |
| 5 | 書き込めなかった出力:ファイルまたはフォルダー |
| 6 | --max-pixels、--max-memory、--max-timeの予算超過 |
| 7 | 単独では決めないペイントを残した再ベイク(--resolve keep|pixor) |
GPUがまったくなくてもエラーにはなりません。Pixorは代わりに自前のラスタライザーで描画します。エラーはどこでも同じ形で何が問題かを伝えます:--flag takes A to B, got X。
レンダラーの選び方
--backend auto|vulkan|metal|dx12|gl|webgpu|cpuは、ジオメトリを誰が描くかを指定します。ルック(すべてのピクセルパス)は、この指定に関係なくCPUで計算されます。
- auto(既定)はマシンにあるものを使い、どのアダプターも動かなければCPUに切り替えます。
- cpuはPixor独自のラスタライザーです。アダプターもドライバーも不要で、バイナリに含まれ、どのマシンでも同じピクセルを描きます。アセットパックやCIビルドに向いた、移植性の高い選択肢です。
- 名前で指定したバックエンドがない場合はエラーになります(終了ステータス4)。黙って別の場所でレンダリングするより、そう伝えるほうがよいからです。
すべての書き出しのレシピには、どのバックエンドで描いたかが記録されます。pxr doctorは、見つかったアダプター、Pixorが選ぶもの、ドライバーのバージョン、そしてそのバックエンドがCPUのリファレンスと同じ画像を描くかどうかを表示します:
adapter NVIDIA GeForce RTX 3070 Ti (Vulkan, DiscreteGpu) driver NVIDIA 610.57.04
backend vulkan (NVIDIA GeForce RTX 3070 Ti (Vulkan, DiscreteGpu))
agrees vulkan vs the CPU reference: coverage 0.00%, ids 0.00%, albedo 0.00% (allowed 1.00%); normals within 0.028 deg, depth within 9.5e-7
アプリでは、同じ選択が環境設定 › レンダラー › CPUでスプライトを描画にあります。1回のセッションだけなら、pxrと同じ名前(cpu、auto、またはGPUバックエンドの名前)でpixor --backend Bとすれば、環境設定はそのままです。それぞれ描いたものを保持します。もう一方に切り替えるとフレームを再レンダリングし、元に戻すと、シーンが何も変わっていない限り、レンダリングなしで最初のフレームが戻ります。
ツールとスクリプト向け
どのコマンドにも--jsonを付けられます。すると標準出力には1行に1つのJSONイベント(progress、wrote、warning、error、done)が流れ、人が読むログは標準エラーに移ります。書き出さずに読むコマンドも、表示する内容を1つのイベントとして出します:inspect、adapters、tiles --list(terrains)、graph listとgraph flatten、そして2つのダンプのdiff。