Blender: add-on ~ KJ Eye Through Hair v0.3.6 取扱説明書 ~ アニメの表現でよくある髪の毛越しに目を浮き上がせる(投影).

Image

Deferred Geometry Refresh

Transform操作中にBlenderがGeometry Updateも通知する場合、毎イベントでEvaluated Meshを再解析しないようDeferred Queueへまとめます。

Deferred Geometry処理自身がDepsgraph Callbackを発生させるため、Handler Suspend Transaction内で実行します。

Geometry-only変更の場合はTargeted Geometry Refreshを実行します。

Persistent Broad-phase Culling

v0.3.6の主要なPerformance最適化です。

Target Vertex GroupごとにLocal AABBを保持します。

Target Object移動時、Exact計算の前に現在のTarget UnitがOccluderへ影響する可能性があるかを安価に判定します。

主な判定材料はMaterial / Rendered View Context、Target Unit Local AABB、Occluder Projected Bounds、NDC Rectangle Overlap、View Frustum、Conservative Depth Relationshipです。

NDC Marginは0.05です。

v0.3.6ではTime-based CULL-RESTOREを完全廃止しています。

CULLED Stateは、条件が再びRelevantになるまで保持します。

Target移動時は、そのTarget Objectに属するUnitだけを再判定します。

Occluder TransformまたはGeometry Change時は、現在CULLED中のUnitだけを再判定します。

Material / Rendered View Matrixが変化した場合も、CULLED Unitだけを再判定します。

CULLEDからACTIVEへ戻る場合は、最新W2Lを先に書き、その後Enabledを1へ戻します。

この順序はStale W2Lによる一瞬の古いReveal Mask表示を防止するため重要です。

Broad-phase State Machine

ACTIVE状態でBroad-phaseが「現在はRevealへ影響しない」と判定した場合、CULLEDへ移行します。

CULLEDではEnabled Socketを0にし、不要なW2L Writeを省略します。

時間が経過しただけではACTIVEへ戻しません。

Target、Occluder、Viewなどの条件変更により再びRelevantになった場合だけACTIVEへ戻します。

ACTIVE復帰時には最新W2Lを書き、その後Enabledを1へ設定します。

View-change Re-evaluation

CULLED Unitが存在するときだけView Signatureを監視します。

Draw PathではNodeTreeを書き換えません。

View MatrixのSignature変化だけを記録します。

その後Timer側でCULLED Unitを再判定します。

ACTIVE Unitしか存在しない場合は不要なView Re-evaluationを増やさない設計を維持します。

Occluder Material Wrapper

Occluderの既存Material Shaderを削除または置換してはいけません。

Reveal処理はWrapperとして挿入します。

Wrapper Nodeは「KJ_ETH_WRAPPER」Prefixで識別します。

Remove時にはWrapperを除去し、元のMaterial Connectionを可能な限り復元します。

Shared Material Isolation

isolate_shared_materialsはDefaultでONです。

ONの場合、Materialが他Objectでも共有されていればOccluder専用Copyを作成します。

非Occluder Objectが使うOriginal MaterialへReveal Wrapperを残さないことが重要です。

OFFの場合はOriginal Shared MaterialへReveal Wrapperを適用します。

Live Toggleとして動作し、切り替え時に可能な範囲で元状態へ戻します。

EEVEE Dithered Backup / Restore

set_ditheredはDefaultでONです。

ON時にはMaterialの既存Render状態をBackupした後、Ditheredを有効化します。

同じMaterialで繰り返しApplyしてもBackup元を上書きしてはいけません。

OFF時およびReveal Remove時にはPre-KJ状態へ戻します。

Geometry Refresh

Geometry Refreshでは、ObjectごとにEvaluated Meshを1回取得します。

そのObjectに所属するTarget Vertex Groupだけを再解析します。

Triangle CountやTopologyが互換ならConstant Updateを優先できます。

必要な場合だけTarget Surface Groupを再構築します。

Broad-phaseのACTIVE / CULLED Stateは可能な限り維持します。

Local Bounds Cacheも更新します。

Pure TransformとGeometry Refreshを混同してはいけません。

コメント

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

CAPTCHA