Files
PoseRenderer/plug-ins/openposeRenderer.py
indigo e2f2e6668a Add OpenPose_full renderer plugin for Maya
Maya API 2.0 plugin that maps a skeleton to OpenPose_full keypoints
(BODY_25 or COCO body, 21+21 hand, 70 face) via an openposeCharacter
node, with a live Viewport 2.0 draw override, an "OpenPose" viewport
renderer plus openposeRenderSequence for PNG output, and a PySide2
mapping editor. Face can also be driven procedurally from ARKit's 52
blendshape weights instead of facial joints, for rigs with no facial
skeleton. Includes VS Code debug configs and Maya test scenes/renders.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-14 08:41:57 +08:00

76 lines
2.4 KiB
Python

"""Maya plugin entry point: OpenPose_full renderer (Maya API 2.0).
Registers, in order:
* the ``openposeCharacter`` mapping node (mapping_node.py)
* its Viewport 2.0 draw override, the live skeleton overlay (draw_override.py)
* the ``openposeCreateCharacter`` / ``openposeShowMappingEditor`` commands
and the mapping editor UI (commands.py, ui/mapping_editor.py)
* the "OpenPose" viewport renderer + ``openposeRenderSequence`` command
(render_override.py)
See ../README.md for install and usage instructions.
Note: the ``python/`` package directory is added to sys.path using
MFnPlugin.loadPath() inside initializePlugin(), not module-level __file__ --
Maya's plugin loader does not reliably set __file__ when it execs a .py
plugin, so the package import is deferred until loadPath() is available.
"""
import os
import sys
import maya.api.OpenMaya as om
maya_useNewAPI = True
VENDOR = "OpenPose Renderer Plugin"
VERSION = "1.0.0"
# Populated by _import_submodules() once the plugin's own directory is known.
_MODULES = []
def _import_submodules(fn_plugin):
python_dir = os.path.normpath(os.path.join(fn_plugin.loadPath(), "..", "python"))
if python_dir not in sys.path:
sys.path.insert(0, python_dir)
from openpose_renderer import mapping_node
from openpose_renderer import draw_override
from openpose_renderer import commands
from openpose_renderer import render_override
return [mapping_node, draw_override, commands, render_override]
def initializePlugin(m_object):
fn_plugin = om.MFnPlugin(m_object, VENDOR, VERSION, "Any")
global _MODULES
_MODULES = _import_submodules(fn_plugin)
for module in _MODULES:
try:
module.register(fn_plugin)
except Exception as error:
om.MGlobal.displayError(
"openposeRenderer: failed to register {0}: {1}".format(module.__name__, error)
)
raise
def uninitializePlugin(m_object):
fn_plugin = om.MFnPlugin(m_object)
errors = []
for module in reversed(_MODULES):
try:
module.deregister(fn_plugin)
except Exception as error:
errors.append("{0}: {1}".format(module.__name__, error))
if errors:
message = "openposeRenderer: errors during uninitialize -- " + "; ".join(errors)
om.MGlobal.displayError(message)
raise RuntimeError(message)