UI Class Map
KJETH_PT_mainはMain Panelです。
KJETH_PT_demoはDemo Panelです。
KJETH_PT_targetsはTarget / Occluder Registry Panelです。
KJETH_PT_regionsはLegacy Reveal Regionsです。
KJETH_PT_materialはOccluder Material / Renderです。
KJETH_PT_viewportはSolid Assistです。
KJETH_PT_debugはDebug / Diagnosticsです。
KJETH_UL_target_objectsはTarget Object Listです。
KJETH_UL_target_groupsはTarget Vertex Group Listです。
KJETH_UL_occludersはOccluder Listです。
KJETH_UL_reveal_regionsはLegacy Region Listです。
Operator Map
kj_eth.set_characterはActive MeshをTarget staging fieldへ設定します。
kj_eth.use_active_target_vertex_groupはActive Target ObjectのActive Vertex Groupをstaging fieldへ設定します。
kj_eth.target_object_add_primaryはTarget ObjectをRegistryへ登録します。
kj_eth.target_object_removeはTarget Object登録を解除します。
kj_eth.target_group_add_currentはTarget Vertex Groupを登録し、Incremental Runtime Updateを実行します。
kj_eth.target_group_add_activeはActive Vertex Groupを直接登録します。
kj_eth.target_group_removeは選択Target Unitを解除します。
kj_eth.set_hairはActive MeshをOccluder staging fieldへ設定します。
kj_eth.occluder_add_primaryはOccluderをRegistryへ登録します。
kj_eth.occluder_add_selectedは選択Meshを一括登録します。
kj_eth.occluder_removeはOccluder登録を解除します。
kj_eth.applyはRuntime Group構築とMaterial Wrapper適用を行います。
kj_eth.refreshはRuntime Target / Region Dataを更新します。
kj_eth.removeはReveal Wrapperを除去します。
kj_eth.create_demoはDemo生成とSetupを実行します。
kj_eth.show_demoは既存Demoを表示します。
kj_eth.remove_demoはDemoを削除します。
Target Surface Selection Algorithm
中心となる処理は_analyze_target_vertex_group_prepared()です。
Source Object上のVertex Groupを取得します。
Evaluated Mesh各VertexについてVertex Group Weightを読みます。
Weightがtarget_group_weight_threshold以上のVertexをSelected Setへ登録します。
Weighted CenterおよびNormalを計算します。
次にsource polygonを確認します。
Polygonを構成するすべてのVertexがSelected Setに含まれている場合だけ、そのPolygonをvalid_polygonとして採用します。
mesh.loop_trianglesからvalid_polygon由来のTriangleだけを抽出します。
Triangle座標はTarget Local Coordinatesとして保持します。
Overlay用Local / World Triangle Cacheを作成します。
Broad-phase用Local AABBも同時に作成します。
重要なのは、Triangleだけの3頂点判定ではなく、そのTriangleの元になったsource polygon全体を判定することです。
これによりQuad境界にDiagonal Half-Faceが発生する問題を防止します。
Object-batched Evaluated Mesh Analysis
同じTarget ObjectへEye_L、Eye_R、Brow_L、Brow_Rなど複数Groupを登録した場合、Groupごとにto_mesh()を繰り返してはいけません。
Object.evaluated_get()
↓
to_mesh()
↓
calc_loop_triangles()
↓
Mesh Geometry Preparation
↓
Group A Analysis
↓
Group B Analysis
↓
Group C Analysis
↓
to_mesh_clear()
という構造を維持します。
Evaluated Mesh取得はObjectにつき1回です。
各GroupのWeight判定、Polygon Membership、Triangle抽出は独立して行います。


コメントを残す