diff --git a/.env.example b/.env.example new file mode 100644 index 00000000..861bc317 --- /dev/null +++ b/.env.example @@ -0,0 +1,5 @@ +# GITHUB_USERNAME= +# GITHUB_TOKEN= +# BLENDER_EXE_PATH= +# UNREAL_EXE_PATH= +# UNREAL_PROJECT_PATH= \ No newline at end of file diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 00000000..d9f2083b --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,14 @@ +# These are supported funding model platforms + +github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: joshimals +tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry +polar: # Replace with a single Polar username +buy_me_a_coffee: # Replace with a single Buy Me a Coffee username +custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 26a7c7aa..0a84c9a1 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -8,7 +8,7 @@ assignees: '' --- # Before creating an issue DO THIS FIRST! -Search the existing [issues](https://github.com/EpicGamesExt/BlenderTools/issues?q=) +Search the existing [issues](https://github.com/poly-hammer/BlenderTools/issues?q=) ## Bug ### IMPORTANT: Do this before you create a bug ticket! diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index d1de6706..6f3ccd49 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -8,7 +8,7 @@ assignees: '' --- # Before creating an issue DO THIS FIRST! -Search the existing [issues](https://github.com/EpicGamesExt/BlenderTools/issues?q=) +Search the existing [issues](https://github.com/poly-hammer/BlenderTools/issues?q=) ## Feature ### IMPORTANT: Do this before you create a feature ticket! diff --git a/.github/ISSUE_TEMPLATE/question.md b/.github/ISSUE_TEMPLATE/question.md index d2b7173a..21a1ec7c 100644 --- a/.github/ISSUE_TEMPLATE/question.md +++ b/.github/ISSUE_TEMPLATE/question.md @@ -8,7 +8,7 @@ assignees: '' --- # Before creating an issue DO THIS FIRST! -Search the existing [issues](https://github.com/EpicGamesExt/BlenderTools/issues?q=) +Search the existing [issues](https://github.com/poly-hammer/BlenderTools/issues?q=) ## Questions ### IMPORTANT: Do this before you create a question ticket! diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml new file mode 100644 index 00000000..83e7e652 --- /dev/null +++ b/.github/workflows/docs.yml @@ -0,0 +1,72 @@ +name: Docs + +on: + # Runs on pushes targeting the main branch + push: + branches: + - "main" + paths: + - "docs/**/*" + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. +# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. +concurrency: + group: "pages" + cancel-in-progress: false + +jobs: + # Single deploy job since we're just deploying + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Python + uses: actions/setup-python@v4 + with: + python-version: '3.11' + + - name: Install Python Dependencies + shell: bash + run: | + python3 -m venv .linux-venv + source .linux-venv/bin/activate + pip install --upgrade -r requirements.txt + + - name: Build Mkdocs + shell: bash + run: | + export GA_ID=${{ secrets.GA_ID }} + source .linux-venv/bin/activate + mkdocs build + + - name: Setup Pages + uses: actions/configure-pages@v4 + + - name: Inject Google Site Verification Meta Tag + run: | + META_GSV='' + META_KEYWORDS='' + find ./site -name "index.html" -exec sudo sed -i "s||$META_GSV\n$META_KEYWORDS\n|g" {} + + + - name: Upload Built Docs + uses: actions/upload-pages-artifact@v3 + with: + path: './site' + + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 \ No newline at end of file diff --git a/.github/workflows/re-use-tests.yml b/.github/workflows/re-use-tests.yml new file mode 100644 index 00000000..a10fd452 --- /dev/null +++ b/.github/workflows/re-use-tests.yml @@ -0,0 +1,76 @@ +name: re-use-tests + +on: + workflow_call: + inputs: + title: + required: true + type: string + blender-version: + required: true + type: string + unreal-version: + required: true + type: string + secrets: + GH_USER: + required: true + GH_PAT: + required: true + +jobs: + tests: + name: ${{ inputs.title }} + runs-on: poly-hammer-runner + timeout-minutes: 120 + permissions: + contents: read + checks: write + id-token: write + + steps: + - name: Checkout Repo + uses: actions/checkout@v4 + + - name: Setup Python + uses: actions/setup-python@v4 + with: + python-version: '3.11' + + - name: Install Python Dependencies + shell: bash + run: | + python -m venv .venv + source .venv/bin/activate + pip install --upgrade -r requirements.txt + + - name: Run All Tests + shell: bash + run: | + source .venv/bin/activate + + export GITHUB_TOKEN=${{ secrets.GH_PAT }} + export DOCKER_ENVIRONMENT=yes + export UNREAL_VERSION=${{ inputs.unreal-version }} + export BLENDER_VERSION=${{ inputs.blender-version }} + + echo $GITHUB_TOKEN | docker login ghcr.io -u ${{ secrets.GH_USER }} --password-stdin + docker pull ghcr.io/poly-hammer/blender-linux:$BLENDER_VERSION + docker pull ghcr.io/poly-hammer/unreal-linux:$UNREAL_VERSION + + cd ./tests + python run_tests.py + + + - name: Publish ${{ inputs.title }} Report + uses: mikepenz/action-junit-report@v5 + # always run even if the previous step fails + if: success() || failure() + with: + check_name: ${{ inputs.title }} Results (Unreal ${{ inputs.unreal-version }} Blender ${{ inputs.blender-version }}) + include_passed: True + fail_on_failure: True + require_tests: True + require_passed_tests: True + detailed_summary: True + report_paths: './tests/results/*.xml' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..de67e83a --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,35 @@ +name: Create Release +on: + workflow_dispatch: + inputs: + addons: + type: choice + description: Make a choice + default: 'send2ue,ue2rigify' + options: + - 'ue2rigify' + - 'send2ue' + - 'send2ue,ue2rigify' +jobs: + release: + runs-on: ubuntu-latest + steps: + - name: Checkout Repo + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: 3.11 + + - name: Install Requirements + run: | + pip3 install -r requirements.txt + + - name: Create Release + run: | + export REPO=${{ github.repository }} + export GITHUB_TOKEN=${{ secrets.GH_PAT }} + export BLENDER_ADDONS=${{ github.event.inputs.addons }} + + python3 scripts/create_release.py \ No newline at end of file diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 00000000..67841353 --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,41 @@ +name: Tests + +on: + pull_request: + types: [opened, synchronize, reopened] + push: + branches: + - main + - dev + - ci-testing + paths: + - 'send2ue/**/*' + - 'ue2rigify/**/*' + - 'tests/**/*' + - '.github/workflows/**' + - '!.github/workflows/docs.yml' + +permissions: + contents: read + checks: write + id-token: write + +jobs: + test-lts: + name: Test LTS + uses: poly-hammer/BlenderTools/.github/workflows/re-use-tests.yml@main + secrets: inherit + with: + title: Test LTS + unreal-version: 5.3 + blender-version: 3.6 + + test-latest: + needs: test-lts + name: Test Latest + uses: poly-hammer/BlenderTools/.github/workflows/re-use-tests.yml@main + secrets: inherit + with: + title: Test Latest + unreal-version: 5.4 + blender-version: 4.2 diff --git a/.gitignore b/.gitignore index 319c4cce..66fbc9f4 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,14 @@ *.swp /venv/* release/* +venv +.env +.venv +.*-venv +results +release +site +scratches +tests/test_files/data +tests/test_files/unreal_projects/**/DefaultInput.ini +tests/test_files/blender_files/textures \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 00000000..6bbc4344 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,140 @@ +{ + "configurations": [ + { + "name": "Run Active Python File", + "type": "debugpy", + "request": "launch", + "program": "${file}", + "console": "integratedTerminal", + "envFile": "${workspaceFolder}/.env", + "justMyCode": false + }, + { + "name": "Python Debugger: Attach Blender", + "type": "debugpy", + "request": "attach", + "connect": { + "host": "localhost", + "port": 5678 + } + }, + { + "name": "Python Debugger: Attach Unreal", + "type": "debugpy", + "request": "attach", + "connect": { + "host": "localhost", + "port": 5679 + } + }, + { + "name": "Debug Tests: Host Environment", + "type": "debugpy", + "request": "launch", + "program": "${workspaceFolder}/tests/run_tests.py", + "console": "integratedTerminal", + "envFile": "${workspaceFolder}/.env", + "cwd": "${workspaceFolder}/tests", + "justMyCode": false, + "env": { + "EXCLUSIVE_TEST_FILES": "${input:test-file}", + "EXCLUSIVE_TESTS": "${input:test-name}", + } + }, + { + "name": "Debug Tests: Docker Environment", + "type": "debugpy", + "request": "launch", + "program": "${workspaceFolder}/tests/run_tests.py", + "console": "integratedTerminal", + "envFile": "${workspaceFolder}/.env", + "cwd": "${workspaceFolder}/tests", + "justMyCode": false, + "env": { + "DOCKER_ENVIRONMENT": "yes", + "EXCLUSIVE_TEST_FILES": "${input:test-file}", + "EXCLUSIVE_TESTS": "${input:test-name}", + "DEBUGGING_ON": "${input:debugging-on}" + } + }, + { + "name": "Python Debugger: Attach Blender Docker", + "type": "debugpy", + "request": "attach", + "pathMappings": [ + { + "localRoot": "${workspaceFolder}/", + "remoteRoot": "/tmp/blender_tools/" + } + ], + "connect": { + "host": "localhost", + "port": 5668 + } + }, + { + "name": "Python Debugger: Attach Unreal Docker", + "type": "debugpy", + "request": "attach", + "pathMappings": [ + { + "localRoot": "${workspaceFolder}/", + "remoteRoot": "/tmp/blender_tools/" + } + ], + "connect": { + "host": "localhost", + "port": 5669 + } + } + ], + "inputs": [ + { + "id": "test-file", + "type": "pickString", + "default": "all", + "options": [ + "all", + "test_send2ue_core.py", + "test_send2ue_cubes.py", + "test_send2ue_extension_affixes.py", + "test_send2ue_extension_combine_assets.py", + "test_send2ue_extension_create_post_import_assets_for_groom.py", + "test_send2ue_extension_example.py", + "test_send2ue_extension_instance_assets.py", + "test_send2ue_extension_use_collections_as_folders.py", + "test_send2ue_extension_use_immediate_parent_name.py", + "test_send2ue_mannequins.py", + "test_ue2rigify_core.py", + "test_ue2rigify_mannequins.py" + ], + "description": "Which test file to run" + }, + { + "id": "docker-environment", + "type": "pickString", + "default": "", + "options": [ + "no", + "yes" + ], + "description": "Run in docker environment?" + }, + { + "id": "test-name", + "type": "promptString", + "default": "all", + "description": "The name of the specific test to run" + }, + { + "id": "debugging-on", + "type": "pickString", + "default": "", + "options": [ + "no", + "yes" + ], + "description": "Turn on remote debugging in the containers?" + } + ] +} \ No newline at end of file diff --git a/.vscode/python.env b/.vscode/python.env new file mode 100644 index 00000000..a888ff76 --- /dev/null +++ b/.vscode/python.env @@ -0,0 +1,2 @@ +PYTHONPATH=';./.venv/Lib/site-packages;./src/addons;./src/addons/send2ue/dependencies' +PYTHONUNBUFFERED=1 \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..f4fb8548 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,82 @@ +{ + "files.eol": "\n", + "python.pythonPath": "${workspaceFolder}/.venv/Lib/site-packages", + "python.terminal.activateEnvironment": true, + "python.defaultInterpreterPath": "${workspaceFolder}/.venv/Scripts/python.exe", + "python.envFile": "${workspaceFolder}/.vscode/python.env", + "python.analysis.typeCheckingMode": "basic", + "python.testing.unittestEnabled": false, + "python.testing.pytestEnabled": true, + "python.languageServer": "Pylance", + "editor.tabCompletion": "on", +// "python.analysis.disabled": ["unresolved-import"], + "python.autoComplete.extraPaths": [ + "${workspaceFolder}/admin/packages" + ], + "python.analysis.extraPaths": [ + "${workspaceFolder}/admin/packages" + ], + "cSpell.ignorePaths": [ + "${workspaceFolder}/.venv", + "${workspaceFolder}/.linux-venv", + "${workspaceFolder}/.py3.10-venv", + "${workspaceFolder}/.unreal-venv", + "${workspaceFolder}/build", + "${workspaceFolder}/scratches", + "${workspaceFolder}/reports" + ], + "cSpell.words": [ + "autoexec", + "compileshaders", + "debugpy", + "dotenv", + "epicgames", + "everytime", + "eyeshell", + "fcurve", + "fcurves", + "fontawesome", + "forcelogflush", + "idname", + "inlinehilite", + "kwargs", + "levelno", + "linenums", + "LODS", + "mathutils", + "mikepenz", + "Mkdocs", + "mklink", + "noloadstartuppackages", + "nopause", + "nosplash", + "nullrhi", + "nytimes", + "outliner", + "POLYHAMMER", + "pygments", + "Pylance", + "pymdownx", + "pytest", + "PYTHONUNBUFFERED", + "quickstart", + "retarget", + "retargeting", + "Rigify", + "runas", + "skincache", + "staticmethod", + "superfences", + "teleporting", + "termynal", + "TOPBAR", + "Unregisters", + "uproject", + "venv" + ], + "editor.rulers": [ + 80, + 120 + ], + "jupyter.notebookFileRoot": "${workspaceFolder}" +} \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 00000000..58f1f220 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,92 @@ +// See https://go.microsoft.com/fwlink/?LinkId=733558 +// for the documentation about the tasks.json format +{ + "version": "2.0.0", + "tasks": [ + { + "label": "launch blender", + "command": "python ${workspaceFolder}/scripts/launch.py blender ${input:blender-version} ${input:blender-debug}", + "type": "shell", + "group": { + "kind": "build" + }, + "presentation": { + "reveal": "always", + "panel": "shared", + "focus": true + } + }, + { + "label": "launch unreal", + "command": "python ${workspaceFolder}/scripts/launch.py unreal ${input:unreal-version} ${input:unreal-debug}", + "type": "shell", + "group": { + "kind": "build" + }, + "presentation": { + "reveal": "always", + "panel": "shared", + "focus": true + } + }, + { + "label": "Serve Docs", + "command": "mkdocs serve", + "type": "shell", + "group": { + "kind": "build" + }, + "presentation": { + "reveal": "always", + "panel": "shared", + "focus": true + } + } + ], + "inputs": [ + { + "id": "blender-version", + "type": "pickString", + "default": "4.1", + "options": [ + "3.6", + "4.0", + "4.1", + "4.2", + "4.3", + "4.4" + ], + "description": "What blender version to launch" + }, + { + "id": "blender-debug", + "type": "pickString", + "default": "no", + "options": [ + "no", + "yes" + ], + "description": "Should use debugger?" + }, + { + "id": "unreal-version", + "type": "pickString", + "default": "5.4", + "options": [ + "5.3", + "5.4" + ], + "description": "What unreal version to launch" + }, + { + "id": "unreal-debug", + "type": "pickString", + "default": "no", + "options": [ + "no", + "yes" + ], + "description": "Should use debugger?" + } + ] +} \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index cdcb2624..674854c4 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,3 +1,3 @@ # Contributing -Directions on how to contribute can be found [here](https://epicgamesext.github.io/BlenderTools/contributing/development.html). \ No newline at end of file +Directions on how to contribute can be found [here](https://poly-hammer.github.io/BlenderTools/contributing/development/). \ No newline at end of file diff --git a/README.md b/README.md index 1c236c77..0dd4174d 100644 --- a/README.md +++ b/README.md @@ -1,39 +1,47 @@

- icon + icon

Blender Tools



+[![Docs](https://github.com/poly-hammer/BlenderTools/actions/workflows/docs.yml/badge.svg)](https://github.com/poly-hammer/BlenderTools/actions/workflows/docs.yml) +[![Tests](https://github.com/poly-hammer/BlenderTools/actions/workflows/tests.yml/badge.svg)](https://github.com/poly-hammer/BlenderTools/actions/workflows/tests.yml) + A repository of blender addons that improve the game development workflow between Blender and Unreal Engine. +### NOTE: This is a fork of the original [repository by Epic](https://github.com/EpicGamesExt/BlenderTools). +This is now maintained by [@JoshQuake](https://github.com/JoshQuake) and volunteers from the community and is not affiliated with Epic Games. +[![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/E1E3VWL1V) + + ## Send to Unreal -![4](docs/main/images/send2ue/4.gif) +![4](docs/images/send2ue/4.gif) A one-click solution for sending assets from Blender to Unreal Engine. -* [Read Docs](https://epicgamesext.github.io/BlenderTools/send2ue/) -* [Download Addon](https://github.com/EpicGamesExt/BlenderTools/releases?q=Send+to+Unreal&expanded=true) +* [Read Docs](https://poly-hammer.github.io/BlenderTools/send2ue/) +* [Download Addon](https://github.com/poly-hammer/BlenderTools/releases?q=Send+to+Unreal&expanded=true) ## UE to Rigify -![2](./docs/main/images/ue2rigify/2.png) +![2](./docs/images/ue2rigify/2.png) A node based retargeting system for Blender's [Rigify](https://docs.blender.org/manual/en/latest/addons/rigging/rigify/index.html) addon. Quickly retarget and author new animation on unreal marketplace assets and more! -* [Read Docs](https://epicgamesext.github.io/BlenderTools/ue2rigify/) -* [Download Addon](https://github.com/EpicGamesExt/BlenderTools/releases?q=UE+to+Rigify&expanded=true) +* [Read Docs](https://poly-hammer.github.io/BlenderTools/ue2rigify/) +* [Download Addon](https://github.com/poly-hammer/BlenderTools/releases?q=UE+to+Rigify&expanded=true) ## Help Contribute Contributions are encouraged! Find out how you can contribute to this repo in one of the following ways: -* [Help Develop](https://epicgamesext.github.io/BlenderTools/contributing/development.html) -* [Help Document](https://epicgamesext.github.io/BlenderTools/contributing/documentation.html) -* [Help Test](https://epicgamesext.github.io/BlenderTools/contributing/testing.html) +* [Help Develop](https://poly-hammer.github.io/BlenderTools/contributing/development/) +* [Help Document](https://poly-hammer.github.io/BlenderTools/contributing/documentation/) +* [Help Test](https://poly-hammer.github.io/BlenderTools/contributing/testing/) ## Get Notified on a New Release diff --git a/docs/.dockerignore b/docs/.dockerignore deleted file mode 100644 index 0e4f06c8..00000000 --- a/docs/.dockerignore +++ /dev/null @@ -1,3 +0,0 @@ -.git -node_modules -dist diff --git a/docs/.gitignore b/docs/.gitignore deleted file mode 100644 index 595e2151..00000000 --- a/docs/.gitignore +++ /dev/null @@ -1,12 +0,0 @@ -pids -logs -node_modules -npm-debug.log -coverage/ -run -dist -.DS_Store -.nyc_output -.basement -config.local.js -basement_dist diff --git a/docs/main/contributing/development.md b/docs/contributing/development.md similarity index 52% rename from docs/main/contributing/development.md rename to docs/contributing/development.md index 3581bf46..33f01cf0 100644 --- a/docs/main/contributing/development.md +++ b/docs/contributing/development.md @@ -11,9 +11,10 @@ with the owners of this repository, before making a change. Each pull request mu 1. Include the updated documentation in the pull request. 1. The pull request will be reviewed, then merged into `dev` if all tests pass, the changes will be pushed to the `master` branch and a new versioned build will be made. -::: tip Note - Any new features require an accompanying unit test for it to be approved. -::: +!!! note + + Any new features require an accompanying unit test for it to be approved. + ## Getting Setup Fork the `BlenderTools` repository. @@ -31,56 +32,49 @@ cd BlenderTools git checkout some-task-branch ``` -## Testing your changes +## VSCode +The repo contains the tasks, launch actions, and settings for developing with vscode. To get setup do the following: + +### Setup +1. Install the VSCode profile under `scripts/resources/profiles/dev.code-profile`. You can do this by typing `> Profile Import Profile` in the command pallette. This will give you all the vscode extensions you will need. +1. Close and re-open VSCode +1. Type `> Python: Create Environment`, hit enter and chose `Venv` and choose your Python 3.11 installation, then check the box to install the `requirements.txt` +1. Close and re-open your integrated terminal in vscode and ensure that you now have a `(.venv)` prefixing your shell. If you do, you are all setup and ready to go! + +### Build Tasks +The VSCode project has build tasks for launch your apps. It is highly recommended that you launch blender and unreal through these, since they will ensure you have the dev dependencies in your python environment for reloading code and debugging. To do this move your cursor over the integrate terminal and press the hot keys `CTRL+SHIFT+B`. + +![2.1](./images/development/2.1.gif) + +!!! note + If you choose yes to debug, the app will hang until you attach to it via debugpy in VSCode. (See Launch Actions) + +!!! note + The launch scripts look for the unreal and blender executables in their default locations. You can override the exe paths by setting + the `UNREAL_EXE_PATH`and `BLENDER_EXE_PATH` variables in a `.env` file in the repo root. + +### Launch Actions +Several launch actions have been created for debugging. Use the `Python Debugger: Attach Blender` or `Python Debugger: Attach Unreal` to attach to the apps after they have been launched from the build tasks and have logged that they are waiting for the debugger to attach. There are also a few other debug configurations for the test cases as well. + +![2.2](./images/development/2.2.png) + +## Reloading your changes While developing, you will want to be able to rapidly test your new changes. You can do this by running this script in the Blender Script Editor. -::: tip Note - You need to change `` to match the absolute path to the scripts folder in your local project. -Running this script installs and reloads the tool. -::: +!!! note + + If your didn't launch from VSCode, You need to change `` to match the absolute path to the scripts folder in your local project. Running this script reloads the addon code. ```python -import bpy import sys sys.path.append(r'C:\\BlenderTools\scripts') import dev_helpers - -addons = ['send2ue', 'ue2rigify'] - -# installs the actual addons zips -#dev_helpers.reload_addon_zips(addons) - -# reloads the code from your repo. A lot faster but doesn't load addon preferences -dev_helpers.reload_addon_source_code(addons) - -# start blender and unreal rpc server for automated testing -#bpy.ops.send2ue.start_rpc_servers() +dev_helpers.reload_addon_source_code(['send2ue', 'ue2rigify']) ``` -In most cases you can get away with running `dev_helpers.reload_addon_source_code`, which reloads very fast and any -stack traces get linked back to the repo code. - -However, the true test is running `dev_helpers.reload_addon_zips` this actually zips up the code and installs the -addons. You will need to do this if you are testing features that rely on properties in the addon preferences. - -`bpy.ops.send2ue.start_rpc_servers()` Ensures that both unreal and blender rpc servers are running. This is needed if -you want to run the unittests on the open app instances. - -## Hot reloading from PyCharm -These steps must be completed in-order for the addons to hot-reload while you type in PyCharm. -1. If you have the addons already installed, uninstall them and shutdown Blender and PyCharm. -1. You must symlink the addon folders into the blender addon installation location. Then enable the addons - ::: tip Windows - Run this from a commandline launched as administrator. Swapping out the last path with your own. - ```commandline:no-line-numbers - mklink /D "%APPDATA%\Blender Foundation\Blender\3.4\scripts\addons\send2ue" "D:\repos\BlenderTools\send2ue" - ``` - ::: -1. You must install the `./scripts/addon-watcher.xml` in Pycharm by going to `Settings > Tools > File Watchers > Import` -1. And finally blender has to be running with the send2ue addon enabled and clicking `Pipeline > Utilities > Start RPC Servers` -Now PyCharm should reload your addons on file save events. +In most cases you can get away with running `dev_helpers.reload_addon_source_code`, which reloads your addon code without restarting blender. ## Code Structure diff --git a/docs/contributing/documentation.md b/docs/contributing/documentation.md new file mode 100644 index 00000000..aadc1df3 --- /dev/null +++ b/docs/contributing/documentation.md @@ -0,0 +1,42 @@ +# Help Document +Having accurate and up to date documentation is important, so that is why we have made it easy to submit changes to our documentation. All the documentation pages are written in markdown, but html tags are supported. + +## Editing a Page +To edit an existing page, click the link "Help us improve this page!" in the footer of the page you want to edit. + +![1](./images/documentation/1.png) + +You will then be prompted to make your own fork of the repository. Click 'Fork this repository'. + +![2](./images/documentation/2.jpg) + +Edit the markdown file and click 'Propose changes'. + +![3](./images/documentation/3.jpg) + +Then create a pull request. + +![4](./images/documentation/4.jpg) + +After your pull request is merged in a new deployment of the site will be made. + +## Testing Locally +The documentation sites are static html sites that are generated using [mkdocs](https://www.mkdocs.org/). To get the docs working locally run these commands: + +``` shell +pip install -r requirements.txt +mkdocs serve +``` + +The site should now be available to preview at: + +[http://localhost:8080/](http://localhost:8000/) + + +# Building +The can be built into a single static html site by running: +```shell +mkdocs build +``` + +They are built and deployed using this [workflow](https://github.com/poly-hammer/BlenderTools/blob/main/.github/workflows/docs.yml) diff --git a/docs/main/contributing/images/development/1.jpg b/docs/contributing/images/development/1.jpg similarity index 100% rename from docs/main/contributing/images/development/1.jpg rename to docs/contributing/images/development/1.jpg diff --git a/docs/contributing/images/development/2.1.gif b/docs/contributing/images/development/2.1.gif new file mode 100644 index 00000000..b96c7d24 Binary files /dev/null and b/docs/contributing/images/development/2.1.gif differ diff --git a/docs/contributing/images/development/2.2.png b/docs/contributing/images/development/2.2.png new file mode 100644 index 00000000..7f77c8b9 Binary files /dev/null and b/docs/contributing/images/development/2.2.png differ diff --git a/docs/main/contributing/images/development/2.jpg b/docs/contributing/images/development/2.jpg similarity index 100% rename from docs/main/contributing/images/development/2.jpg rename to docs/contributing/images/development/2.jpg diff --git a/docs/main/contributing/images/development/3.png b/docs/contributing/images/development/3.png similarity index 100% rename from docs/main/contributing/images/development/3.png rename to docs/contributing/images/development/3.png diff --git a/docs/main/contributing/images/development/4.png b/docs/contributing/images/development/4.png similarity index 100% rename from docs/main/contributing/images/development/4.png rename to docs/contributing/images/development/4.png diff --git a/docs/main/contributing/images/documentation/1.png b/docs/contributing/images/documentation/1.png similarity index 100% rename from docs/main/contributing/images/documentation/1.png rename to docs/contributing/images/documentation/1.png diff --git a/docs/main/contributing/images/documentation/2.jpg b/docs/contributing/images/documentation/2.jpg similarity index 100% rename from docs/main/contributing/images/documentation/2.jpg rename to docs/contributing/images/documentation/2.jpg diff --git a/docs/main/contributing/images/documentation/3.jpg b/docs/contributing/images/documentation/3.jpg similarity index 100% rename from docs/main/contributing/images/documentation/3.jpg rename to docs/contributing/images/documentation/3.jpg diff --git a/docs/main/contributing/images/documentation/4.jpg b/docs/contributing/images/documentation/4.jpg similarity index 100% rename from docs/main/contributing/images/documentation/4.jpg rename to docs/contributing/images/documentation/4.jpg diff --git a/docs/main/contributing/testing.md b/docs/contributing/testing.md similarity index 96% rename from docs/main/contributing/testing.md rename to docs/contributing/testing.md index 0f0f4208..868ee26e 100644 --- a/docs/main/contributing/testing.md +++ b/docs/contributing/testing.md @@ -26,13 +26,13 @@ Then install [Ubuntu on Windows](https://ubuntu.com/tutorials/install-ubuntu-on- 1. Install [Docker](https://docs.docker.com/get-docker/). 1. Make sure docker is working by running `docker images`. -1. Set the environment variable `TEST_ENVIRONMENT=1`. +1. Set the environment variable `DOCKER_ENVIRONMENT=1`. 1. Set the environment variable `GITHUB_TOKEN=your-personal access-token`. This is needed to pull the [unreal container image](https://docs.unrealengine.com/4.27/en-US/SharingAndReleasing/Containers/ContainersQuickStart/) if you don't already have it. ```shell set GITHUB_TOKEN=your-personal access-token -set TEST_ENVIRONMENT=1 +set DOCKER_ENVIRONMENT=yes cd ./tests python run_tests.py ``` @@ -73,7 +73,7 @@ specific cases with `EXCLUSIVE_TESTS` can be beneficial. | Variables | Description | Default | | -------------- |--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------| -| `TEST_ENVIRONMENT` | Whether to run the in the container test environment | If no value is set, testing will run on the host | +| `DOCKER_ENVIRONMENT` | Whether to run the in the container test environment | If no value is set, testing will run on the host | | `EXCLUSIVE_TEST_FILES` | Whether to run tests exclusively on this list of test files. Comma seperated list. | Runs all tests files by default | | `EXCLUSIVE_TESTS` | Whether to run tests exclusively on this list of test names. Comma seperated list. | Runs all tests cases by default | | `REMOVE_CONTAINERS` | Whether to shutdown and remove the containers after testing. Testing will be faster if the containers don't have to restart | `True` by default. Leave blank if you want the containers to keep running | diff --git a/docs/docker-compose.yml b/docs/docker-compose.yml deleted file mode 100644 index 19a47fe5..00000000 --- a/docs/docker-compose.yml +++ /dev/null @@ -1,13 +0,0 @@ -version: '3.9' - -services: - builds-docs: - image: node:18-alpine - volumes: - - ./:/tmp/docs - environment: - PROD: 1 - GA_ID: $GA_ID - working_dir: /tmp/docs - entrypoint: npm - command: run build diff --git a/docs/main/images/1.png b/docs/images/1.png similarity index 100% rename from docs/main/images/1.png rename to docs/images/1.png diff --git a/docs/main/images/send2ue/1.gif b/docs/images/send2ue/1.gif similarity index 100% rename from docs/main/images/send2ue/1.gif rename to docs/images/send2ue/1.gif diff --git a/docs/main/images/send2ue/2.png b/docs/images/send2ue/2.png similarity index 100% rename from docs/main/images/send2ue/2.png rename to docs/images/send2ue/2.png diff --git a/docs/main/images/send2ue/4.gif b/docs/images/send2ue/4.gif similarity index 100% rename from docs/main/images/send2ue/4.gif rename to docs/images/send2ue/4.gif diff --git a/docs/main/images/ue2rigify/1.gif b/docs/images/ue2rigify/1.gif similarity index 100% rename from docs/main/images/ue2rigify/1.gif rename to docs/images/ue2rigify/1.gif diff --git a/docs/main/images/ue2rigify/2.png b/docs/images/ue2rigify/2.png similarity index 100% rename from docs/main/images/ue2rigify/2.png rename to docs/images/ue2rigify/2.png diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 00000000..238d039a --- /dev/null +++ b/docs/index.md @@ -0,0 +1,22 @@ +# Addons + +## Send to Unreal + +![1](./images/send2ue/1.gif) + +A one-click solution for sending assets from Blender to Unreal Engine. + +* [Read Docs](send2ue/index.md) +* [Download Addon](https://github.com/poly-hammer/BlenderTools/releases?q=Send+to+Unreal&expanded=true) + + +## UE to Rigify + +![1](./images/ue2rigify/1.gif) + +A node based retargeting system for Blender's +[Rigify](https://docs.blender.org/manual/en/latest/addons/rigging/rigify/index.html) addon. Quickly retarget and author +new animation on unreal marketplace assets and more! + +* [Read Docs](ue2rigify/index.md) +* [Download Addon](https://github.com/poly-hammer/BlenderTools/releases?q=UE+to+Rigify&expanded=true) \ No newline at end of file diff --git a/docs/main/.vuepress/config.ts b/docs/main/.vuepress/config.ts deleted file mode 100644 index 45deb441..00000000 --- a/docs/main/.vuepress/config.ts +++ /dev/null @@ -1,50 +0,0 @@ -const {description, repository} = require('../../package') -const { getRootPath } = require('../../path') -import { defaultTheme } from '@vuepress/theme-default' -import { defineUserConfig } from '@vuepress/cli' -import { palettePlugin } from '@vuepress/plugin-palette' -// @ts-ignore -import { googleAnalyticsPlugin } from '@vuepress/plugin-google-analytics' - - -export default defineUserConfig({ - title: 'Documentation', - description: description, - base: getRootPath(), - theme: defaultTheme({ - repo: repository, - docsDir: 'docs/main', - editLinkText: 'Help us improve this page!', - lastUpdated: false, - - navbar: [ - { - text: 'Home', - link: '/', - } - ], - sidebar: { - '/': [ - { - text: 'Blender', - children: [ - '/' - ] - }, - { - text: 'Contributing', - children: [ - '/contributing/development', - '/contributing/documentation', - '/contributing/testing', - ] - } - ], - } - }), - - plugins: [ - palettePlugin({preset: 'sass'}), - googleAnalyticsPlugin({id: process.env.GA_ID}) - ] -}) diff --git a/docs/main/.vuepress/styles/index.scss b/docs/main/.vuepress/styles/index.scss deleted file mode 100644 index 3fa2aaa0..00000000 --- a/docs/main/.vuepress/styles/index.scss +++ /dev/null @@ -1,9 +0,0 @@ -:root { - // brand colors - --c-brand: #4289b9 !important; - --c-brand-light: #469fcd !important; - - // custom container colors - --c-tip: #469fcd !important; - --c-text-accent: #4289b9 !important; -} diff --git a/docs/main/contributing/documentation.md b/docs/main/contributing/documentation.md deleted file mode 100644 index 5317d1ff..00000000 --- a/docs/main/contributing/documentation.md +++ /dev/null @@ -1,63 +0,0 @@ -# Help Document -Having accurate and up to date documentation is important, so that is why we have made it easy to submit changes to our documentation. All the documentation pages are written in markdown, but html tags are supported. - -## Editing a Page -To edit an existing page, click the link "Help us improve this page!" in the footer of the page you want to edit. - -![1](./images/documentation/1.png) - -You will then be prompted to make your own fork of the repository. Click 'Fork this repository'. - -![2](./images/documentation/2.jpg) - -Edit the markdown file and click 'Propose changes'. - -![3](./images/documentation/3.jpg) - -Then create a pull request. - -![4](./images/documentation/4.jpg) - -After your pull request is merged in a new deployment of the site will be made. - -## Testing Locally -The documentation sites are static html sites that are generated using vuepress. To get up and running with vuepress. -packages are managed by `npm`. So first install the latest version of [node](https://nodejs.org/en/) -Once you have node and npm installed switch to the `/docs` folder and start the server for the site you want to preview by -running these commands: - -``` shell -cd ./docs -npm install -npm run dev-main -``` - -The site should now be available to preview at: - -[http://localhost:8080/](http://localhost:8080/) - -There are multiple sites in the `docs` folder each site can be run like so: -* `npm run dev-main` -* `npm run dev-send2ue` -* `npm run dev-ue2rigify` - -For further information on how to customize this site check out -the [vuepress documentation](https://v2.vuepress.vuejs.org/) - -::: tip Note -If you notice a local site taking longer than expected to load, the issue may be caused by browser plugins -(ex: adblock). Disable browser plugins that may block .gif content to resolve the issue. -::: - -# Building -All the sites get built into a single static html site when running: -```shell -cd ./docs -docker-compose up -``` - -If successful, a `dist` folder should get generated in the `docs` folder. These files are what is deployed to the server. -You can serve them locally with: -```shell -python -m http.server --directory ./dist -``` diff --git a/docs/main/index.md b/docs/main/index.md deleted file mode 100644 index 5c340cf2..00000000 --- a/docs/main/index.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -home: false ---- -# Addons - -## Send to Unreal - -![1](./images/send2ue/1.gif) - -A one-click solution for sending assets from Blender to Unreal Engine. - -* [Read Docs](./send2ue) -* [Download Addon](https://github.com/EpicGamesExt/BlenderTools/releases?q=Send+to+Unreal&expanded=true) - -::: tip Note - If you get a 404 error when you click the `Download Addon` link above, then you will need to sign in to your github account and link it with your Epic Games account. -Here is a [link with instructions](https://www.unrealengine.com/en-US/ue4-on-github) on how to link your accounts. -::: - - -## UE to Rigify - -![1](./images/ue2rigify/1.gif) - -A node based retargeting system for Blender's -[Rigify](https://docs.blender.org/manual/en/latest/addons/rigging/rigify/index.html) addon. Quickly retarget and author -new animation on unreal marketplace assets and more! - -* [Read Docs](./ue2rigify) -* [Download Addon](https://github.com/EpicGamesExt/BlenderTools/releases?q=UE+to+Rigify&expanded=true) - - -::: tip Note - If you get a 404 error when you click the `Download Addon` link above, then you will need to sign in to your github account and link it with your Epic Games account. -Here is a [link with instructions](https://www.unrealengine.com/en-US/ue4-on-github) on how to link your accounts. -::: diff --git a/docs/package-lock.json b/docs/package-lock.json deleted file mode 100644 index 667d4420..00000000 --- a/docs/package-lock.json +++ /dev/null @@ -1,6661 +0,0 @@ -{ - "name": "BlenderTools", - "version": "0.0.1", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "BlenderTools", - "version": "0.0.1", - "license": "MIT", - "dependencies": { - "vuepress": "^2.0.0-rc.0" - }, - "devDependencies": { - "@vuepress/cli": "^2.0.0-beta.66", - "@vuepress/plugin-google-analytics": "^2.0.0-rc.0", - "@vuepress/plugin-palette": "^2.0.0-beta.66" - } - }, - "node_modules/@babel/parser": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.3.tgz", - "integrity": "sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw==", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.6.tgz", - "integrity": "sha512-muPzBqXJKCbMYoNbb1JpZh/ynl0xS6/+pLjrofcR3Nad82SbsCogYzUE6Aq9QT3cLP0jR/IVK/NHC9b90mSHtg==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.6.tgz", - "integrity": "sha512-KQ/hbe9SJvIJ4sR+2PcZ41IBV+LPJyYp6V1K1P1xcMRup9iYsBoQn4MzE3mhMLOld27Au2eDcLlIREeKGUXpHQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.6.tgz", - "integrity": "sha512-VVJVZQ7p5BBOKoNxd0Ly3xUM78Y4DyOoFKdkdAe2m11jbh0LEU4bPles4e/72EMl4tapko8o915UalN/5zhspg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.6.tgz", - "integrity": "sha512-91LoRp/uZAKx6ESNspL3I46ypwzdqyDLXZH7x2QYCLgtnaU08+AXEbabY2yExIz03/am0DivsTtbdxzGejfXpA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.6.tgz", - "integrity": "sha512-QCGHw770ubjBU1J3ZkFJh671MFajGTYMZumPs9E/rqU52md6lIil97BR0CbPq6U+vTh3xnTNDHKRdR8ggHnmxQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.6.tgz", - "integrity": "sha512-J53d0jGsDcLzWk9d9SPmlyF+wzVxjXpOH7jVW5ae7PvrDst4kiAz6sX+E8btz0GB6oH12zC+aHRD945jdjF2Vg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.6.tgz", - "integrity": "sha512-hn9qvkjHSIB5Z9JgCCjED6YYVGCNpqB7dEGavBdG6EjBD8S/UcNUIlGcB35NCkMETkdYwfZSvD9VoDJX6VeUVA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.6.tgz", - "integrity": "sha512-G8IR5zFgpXad/Zp7gr7ZyTKyqZuThU6z1JjmRyN1vSF8j0bOlGzUwFSMTbctLAdd7QHpeyu0cRiuKrqK1ZTwvQ==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.6.tgz", - "integrity": "sha512-HQCOrk9XlH3KngASLaBfHpcoYEGUt829A9MyxaI8RMkfRA8SakG6YQEITAuwmtzFdEu5GU4eyhKcpv27dFaOBg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.6.tgz", - "integrity": "sha512-22eOR08zL/OXkmEhxOfshfOGo8P69k8oKHkwkDrUlcB12S/sw/+COM4PhAPT0cAYW/gpqY2uXp3TpjQVJitz7w==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.6.tgz", - "integrity": "sha512-82RvaYAh/SUJyjWA8jDpyZCHQjmEggL//sC7F3VKYcBMumQjUL3C5WDl/tJpEiKtt7XrWmgjaLkrk205zfvwTA==", - "cpu": [ - "loong64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.6.tgz", - "integrity": "sha512-8tvnwyYJpR618vboIv2l8tK2SuK/RqUIGMfMENkeDGo3hsEIrpGldMGYFcWxWeEILe5Fi72zoXLmhZ7PR23oQA==", - "cpu": [ - "mips64el" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.6.tgz", - "integrity": "sha512-Qt+D7xiPajxVNk5tQiEJwhmarNnLPdjXAoA5uWMpbfStZB0+YU6a3CtbWYSy+sgAsnyx4IGZjWsTzBzrvg/fMA==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.6.tgz", - "integrity": "sha512-lxRdk0iJ9CWYDH1Wpnnnc640ajF4RmQ+w6oHFZmAIYu577meE9Ka/DCtpOrwr9McMY11ocbp4jirgGgCi7Ls/g==", - "cpu": [ - "riscv64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.6.tgz", - "integrity": "sha512-MopyYV39vnfuykHanRWHGRcRC3AwU7b0QY4TI8ISLfAGfK+tMkXyFuyT1epw/lM0pflQlS53JoD22yN83DHZgA==", - "cpu": [ - "s390x" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.6.tgz", - "integrity": "sha512-UWcieaBzsN8WYbzFF5Jq7QULETPcQvlX7KL4xWGIB54OknXJjBO37sPqk7N82WU13JGWvmDzFBi1weVBajPovg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.6.tgz", - "integrity": "sha512-EpWiLX0fzvZn1wxtLxZrEW+oQED9Pwpnh+w4Ffv8ZLuMhUoqR9q9rL4+qHW8F4Mg5oQEKxAoT0G+8JYNqCiR6g==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.6.tgz", - "integrity": "sha512-fFqTVEktM1PGs2sLKH4M5mhAVEzGpeZJuasAMRnvDZNCV0Cjvm1Hu35moL2vC0DOrAQjNTvj4zWrol/lwQ8Deg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.6.tgz", - "integrity": "sha512-M+XIAnBpaNvaVAhbe3uBXtgWyWynSdlww/JNZws0FlMPSBy+EpatPXNIlKAdtbFVII9OpX91ZfMb17TU3JKTBA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.6.tgz", - "integrity": "sha512-2DchFXn7vp/B6Tc2eKdTsLzE0ygqKkNUhUBCNtMx2Llk4POIVMUq5rUYjdcedFlGLeRe1uLCpVvCmE+G8XYybA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.6.tgz", - "integrity": "sha512-PBo/HPDQllyWdjwAVX+Gl2hH0dfBydL97BAH/grHKC8fubqp02aL4S63otZ25q3sBdINtOBbz1qTZQfXbP4VBg==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.6.tgz", - "integrity": "sha512-OE7yIdbDif2kKfrGa+V0vx/B3FJv2L4KnIiLlvtibPyO9UkgO3rzYE0HhpREo2vmJ1Ixq1zwm9/0er+3VOSZJA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" - }, - "node_modules/@mdit-vue/plugin-component": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-component/-/plugin-component-1.0.0.tgz", - "integrity": "sha512-ZXsJwxkG5yyTHARIYbR74cT4AZ0SfMokFFjiHYCbypHIeYWgJhso4+CZ8+3V9EWFG3EHlGoKNGqKp9chHnqntQ==", - "dependencies": { - "@types/markdown-it": "^13.0.1", - "markdown-it": "^13.0.1" - } - }, - "node_modules/@mdit-vue/plugin-frontmatter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-frontmatter/-/plugin-frontmatter-1.0.0.tgz", - "integrity": "sha512-MMA7Ny+YPZA7eDOY1t4E+rKuEWO39mzDdP/M68fKdXJU6VfcGkPr7gnpnJfW2QBJ5qIvMrK/3lDAA2JBy5TfpA==", - "dependencies": { - "@mdit-vue/types": "1.0.0", - "@types/markdown-it": "^13.0.1", - "gray-matter": "^4.0.3", - "markdown-it": "^13.0.1" - } - }, - "node_modules/@mdit-vue/plugin-headers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-headers/-/plugin-headers-1.0.0.tgz", - "integrity": "sha512-0rK/iKy6x13d/Pp5XxdLBshTD0+YjZvtHIaIV+JO+/H2WnOv7oaRgs48G5d44z3XJVUE2u6fNnTlI169fef0/A==", - "dependencies": { - "@mdit-vue/shared": "1.0.0", - "@mdit-vue/types": "1.0.0", - "@types/markdown-it": "^13.0.1", - "markdown-it": "^13.0.1" - } - }, - "node_modules/@mdit-vue/plugin-sfc": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-sfc/-/plugin-sfc-1.0.0.tgz", - "integrity": "sha512-agMUe0fY4YHxsZivSvplBwRwrFvsIf/JNUJCAYq1+2Sg9+2hviTBZwjZDxYqHDHOVLtiNr+wuo68tE24mAx3AQ==", - "dependencies": { - "@mdit-vue/types": "1.0.0", - "@types/markdown-it": "^13.0.1", - "markdown-it": "^13.0.1" - } - }, - "node_modules/@mdit-vue/plugin-title": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-title/-/plugin-title-1.0.0.tgz", - "integrity": "sha512-8yC60fCZ95xcJ/cvJH4Lv43Rs4k+33UGyKrRWj5J8TNyMwUyGcwur0XyPM+ffJH4/Bzq4myZLsj/TTFSkXRxvw==", - "dependencies": { - "@mdit-vue/shared": "1.0.0", - "@mdit-vue/types": "1.0.0", - "@types/markdown-it": "^13.0.1", - "markdown-it": "^13.0.1" - } - }, - "node_modules/@mdit-vue/plugin-toc": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-toc/-/plugin-toc-1.0.0.tgz", - "integrity": "sha512-WN8blfX0X/5Nolic0ClDWP7eVo9IB+U4g0jbycX3lolIZX5Bai1UpsD3QYZr5VVsPbQJMKMGvTrCEtCNTGvyWQ==", - "dependencies": { - "@mdit-vue/shared": "1.0.0", - "@mdit-vue/types": "1.0.0", - "@types/markdown-it": "^13.0.1", - "markdown-it": "^13.0.1" - } - }, - "node_modules/@mdit-vue/shared": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@mdit-vue/shared/-/shared-1.0.0.tgz", - "integrity": "sha512-nbYBfmEi+pR2Lm0Z6TMVX2/iBjfr/kGEsHW8CC0rQw+3+sG5dY6VG094HuFAkiAmmvZx9DZZb+7ZMWp9vkwCRw==", - "dependencies": { - "@mdit-vue/types": "1.0.0", - "@types/markdown-it": "^13.0.1", - "markdown-it": "^13.0.1" - } - }, - "node_modules/@mdit-vue/types": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@mdit-vue/types/-/types-1.0.0.tgz", - "integrity": "sha512-xeF5+sHLzRNF7plbksywKCph4qli20l72of2fMlZQQ7RECvXYrRkE9+bjRFQCyULC7B8ydUYbpbkux5xJlVWyw==" - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.5.0.tgz", - "integrity": "sha512-OINaBGY+Wc++U0rdr7BLuFClxcoWaVW3vQYqmQq6B3bqQ/2olkaoz+K8+af/Mmka/C2yN5j+L9scBkv4BtKsDA==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.5.0.tgz", - "integrity": "sha512-UdMf1pOQc4ZmUA/NTmKhgJTBimbSKnhPS2zJqucqFyBRFPnPDtwA8MzrGNTjDeQbIAWfpJVAlxejw+/lQyBK/w==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.5.0.tgz", - "integrity": "sha512-L0/CA5p/idVKI+c9PcAPGorH6CwXn6+J0Ys7Gg1axCbTPgI8MeMlhA6fLM9fK+ssFhqogMHFC8HDvZuetOii7w==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.5.0.tgz", - "integrity": "sha512-QZCbVqU26mNlLn8zi/XDDquNmvcr4ON5FYAHQQsyhrHx8q+sQi/6xduoznYXwk/KmKIXG5dLfR0CvY+NAWpFYQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.5.0.tgz", - "integrity": "sha512-VpSQ+xm93AeV33QbYslgf44wc5eJGYfYitlQzAi3OObu9iwrGXEnmu5S3ilkqE3Pr/FkgOiJKV/2p0ewf4Hrtg==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.5.0.tgz", - "integrity": "sha512-OrEyIfpxSsMal44JpEVx9AEcGpdBQG1ZuWISAanaQTSMeStBW+oHWwOkoqR54bw3x8heP8gBOyoJiGg+fLY8qQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.5.0.tgz", - "integrity": "sha512-1H7wBbQuE6igQdxMSTjtFfD+DGAudcYWhp106z/9zBA8OQhsJRnemO4XGavdzHpGhRtRxbgmUGdO3YQgrWf2RA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.5.0.tgz", - "integrity": "sha512-FVyFI13tXw5aE65sZdBpNjPVIi4Q5mARnL/39UIkxvSgRAIqCo5sCpCELk0JtXHGee2owZz5aNLbWNfBHzr71Q==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.5.0.tgz", - "integrity": "sha512-eBPYl2sLpH/o8qbSz6vPwWlDyThnQjJfcDOGFbNjmjb44XKC1F5dQfakOsADRVrXCNzM6ZsSIPDG5dc6HHLNFg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.5.0.tgz", - "integrity": "sha512-xaOHIfLOZypoQ5U2I6rEaugS4IYtTgP030xzvrBf5js7p9WI9wik07iHmsKaej8Z83ZDxN5GyypfoyKV5O5TJA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.5.0.tgz", - "integrity": "sha512-Al6quztQUrHwcOoU2TuFblUQ5L+/AmPBXFR6dUvyo4nRj2yQRK0WIUaGMF/uwKulvRcXkpHe3k9A8Vf93VDktA==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.5.0.tgz", - "integrity": "sha512-8kdW+brNhI/NzJ4fxDufuJUjepzINqJKLGHuxyAtpPG9bMbn8P5mtaCcbOm0EzLJ+atg+kF9dwg8jpclkVqx5w==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@sindresorhus/merge-streams": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-1.0.0.tgz", - "integrity": "sha512-rUV5WyJrJLoloD4NDN1V1+LDMDWOa4OTsT4yYJwQNpTU6FWxkxHpL7eu4w+DmiH8x/EAM1otkPE1+LaspIbplw==", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@types/debug": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", - "dependencies": { - "@types/ms": "*" - } - }, - "node_modules/@types/fs-extra": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.4.tgz", - "integrity": "sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==", - "dependencies": { - "@types/jsonfile": "*", - "@types/node": "*" - } - }, - "node_modules/@types/hash-sum": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/hash-sum/-/hash-sum-1.0.2.tgz", - "integrity": "sha512-UP28RddqY8xcU0SCEp9YKutQICXpaAq9N8U2klqF5hegGha7KzTOL8EdhIIV3bOSGBzjEpN9bU/d+nNZBdJYVw==" - }, - "node_modules/@types/jsonfile": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.1.tgz", - "integrity": "sha512-GSgiRCVeapDN+3pqA35IkQwasaCh/0YFH5dEF6S88iDvEn901DjOeH3/QPY+XYP1DFzDZPvIvfeEgk+7br5png==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/linkify-it": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", - "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==" - }, - "node_modules/@types/markdown-it": { - "version": "13.0.6", - "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-13.0.6.tgz", - "integrity": "sha512-0VqpvusJn1/lwRegCxcHVdmLfF+wIsprsKMC9xW8UPcTxhFcQtoN/fBU1zMe8pH7D/RuueMh2CaBaNv+GrLqTw==", - "dependencies": { - "@types/linkify-it": "*", - "@types/mdurl": "*" - } - }, - "node_modules/@types/markdown-it-emoji": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/markdown-it-emoji/-/markdown-it-emoji-2.0.4.tgz", - "integrity": "sha512-H6ulk/ZmbDxOayPwI/leJzrmoW1YKX1Z+MVSCHXuYhvqckV4I/c+hPTf6UiqJyn2avWugfj30XroheEb6/Ekqg==", - "dependencies": { - "@types/markdown-it": "*" - } - }, - "node_modules/@types/mdurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", - "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==" - }, - "node_modules/@types/ms": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", - "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" - }, - "node_modules/@types/node": { - "version": "18.8.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.8.4.tgz", - "integrity": "sha512-WdlVphvfR/GJCLEMbNA8lJ0lhFNBj4SW3O+O5/cEGw9oYrv0al9zTwuQsq+myDUXgNx2jgBynoVgZ2MMJ6pbow==" - }, - "node_modules/@types/web-bluetooth": { - "version": "0.0.20", - "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", - "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==" - }, - "node_modules/@vitejs/plugin-vue": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.5.0.tgz", - "integrity": "sha512-a2WSpP8X8HTEww/U00bU4mX1QpLINNuz/2KMNpLsdu3BzOpak3AGI1CJYBTXcc4SPhaD0eNRUp7IyQK405L5dQ==", - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "peerDependencies": { - "vite": "^4.0.0 || ^5.0.0", - "vue": "^3.2.25" - } - }, - "node_modules/@vue/compiler-core": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.8.tgz", - "integrity": "sha512-hN/NNBUECw8SusQvDSqqcVv6gWq8L6iAktUR0UF3vGu2OhzRqcOiAno0FmBJWwxhYEXRlQJT5XnoKsVq1WZx4g==", - "dependencies": { - "@babel/parser": "^7.23.0", - "@vue/shared": "3.3.8", - "estree-walker": "^2.0.2", - "source-map-js": "^1.0.2" - } - }, - "node_modules/@vue/compiler-dom": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.8.tgz", - "integrity": "sha512-+PPtv+p/nWDd0AvJu3w8HS0RIm/C6VGBIRe24b9hSyNWOAPEUosFZ5diwawwP8ip5sJ8n0Pe87TNNNHnvjs0FQ==", - "dependencies": { - "@vue/compiler-core": "3.3.8", - "@vue/shared": "3.3.8" - } - }, - "node_modules/@vue/compiler-sfc": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.8.tgz", - "integrity": "sha512-WMzbUrlTjfYF8joyT84HfwwXo+8WPALuPxhy+BZ6R4Aafls+jDBnSz8PDz60uFhuqFbl3HxRfxvDzrUf3THwpA==", - "dependencies": { - "@babel/parser": "^7.23.0", - "@vue/compiler-core": "3.3.8", - "@vue/compiler-dom": "3.3.8", - "@vue/compiler-ssr": "3.3.8", - "@vue/reactivity-transform": "3.3.8", - "@vue/shared": "3.3.8", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.5", - "postcss": "^8.4.31", - "source-map-js": "^1.0.2" - } - }, - "node_modules/@vue/compiler-ssr": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.8.tgz", - "integrity": "sha512-hXCqQL/15kMVDBuoBYpUnSYT8doDNwsjvm3jTefnXr+ytn294ySnT8NlsFHmTgKNjwpuFy7XVV8yTeLtNl/P6w==", - "dependencies": { - "@vue/compiler-dom": "3.3.8", - "@vue/shared": "3.3.8" - } - }, - "node_modules/@vue/devtools-api": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.1.tgz", - "integrity": "sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==" - }, - "node_modules/@vue/reactivity": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.8.tgz", - "integrity": "sha512-ctLWitmFBu6mtddPyOKpHg8+5ahouoTCRtmAHZAXmolDtuZXfjL2T3OJ6DL6ezBPQB1SmMnpzjiWjCiMYmpIuw==", - "dependencies": { - "@vue/shared": "3.3.8" - } - }, - "node_modules/@vue/reactivity-transform": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.8.tgz", - "integrity": "sha512-49CvBzmZNtcHua0XJ7GdGifM8GOXoUMOX4dD40Y5DxI3R8OUhMlvf2nvgUAcPxaXiV5MQQ1Nwy09ADpnLQUqRw==", - "dependencies": { - "@babel/parser": "^7.23.0", - "@vue/compiler-core": "3.3.8", - "@vue/shared": "3.3.8", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.5" - } - }, - "node_modules/@vue/runtime-core": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.8.tgz", - "integrity": "sha512-qurzOlb6q26KWQ/8IShHkMDOuJkQnQcTIp1sdP4I9MbCf9FJeGVRXJFr2mF+6bXh/3Zjr9TDgURXrsCr9bfjUw==", - "dependencies": { - "@vue/reactivity": "3.3.8", - "@vue/shared": "3.3.8" - } - }, - "node_modules/@vue/runtime-dom": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.8.tgz", - "integrity": "sha512-Noy5yM5UIf9UeFoowBVgghyGGPIDPy1Qlqt0yVsUdAVbqI8eeMSsTqBtauaEoT2UFXUk5S64aWVNJN4MJ2vRdA==", - "dependencies": { - "@vue/runtime-core": "3.3.8", - "@vue/shared": "3.3.8", - "csstype": "^3.1.2" - } - }, - "node_modules/@vue/server-renderer": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.8.tgz", - "integrity": "sha512-zVCUw7RFskvPuNlPn/8xISbrf0zTWsTSdYTsUTN1ERGGZGVnRxM2QZ3x1OR32+vwkkCm0IW6HmJ49IsPm7ilLg==", - "dependencies": { - "@vue/compiler-ssr": "3.3.8", - "@vue/shared": "3.3.8" - }, - "peerDependencies": { - "vue": "3.3.8" - } - }, - "node_modules/@vue/shared": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.8.tgz", - "integrity": "sha512-8PGwybFwM4x8pcfgqEQFy70NaQxASvOC5DJwLQfpArw1UDfUXrJkdxD3BhVTMS+0Lef/TU7YO0Jvr0jJY8T+mw==" - }, - "node_modules/@vuepress/bundler-vite": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/bundler-vite/-/bundler-vite-2.0.0-rc.0.tgz", - "integrity": "sha512-rX8S8IYpqqlJfNPstS/joorpxXx/4WuE7+gDM31i2HUrxOKGZVzq8ZsRRRU2UdoTwHZSd3LpUS4sMtxE5xLK1A==", - "dependencies": { - "@vitejs/plugin-vue": "^4.5.0", - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "autoprefixer": "^10.4.16", - "connect-history-api-fallback": "^2.0.0", - "postcss": "^8.4.31", - "postcss-load-config": "^4.0.1", - "rollup": "^4.4.1", - "vite": "~5.0.0", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "node_modules/@vuepress/bundler-vite/node_modules/@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "dependencies": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "node_modules/@vuepress/bundler-vite/node_modules/@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "dependencies": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "node_modules/@vuepress/bundler-vite/node_modules/@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "dependencies": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "node_modules/@vuepress/bundler-vite/node_modules/@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "dependencies": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "node_modules/@vuepress/bundler-vite/node_modules/@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "dependencies": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - }, - "node_modules/@vuepress/cli": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/cli/-/cli-2.0.0-rc.0.tgz", - "integrity": "sha512-XWSIFO9iOR7N4O2lXIwS5vZuLjU9WU/aGAtmhMWEMxrdMx7TQaJbgrfpTUEbHMf+cPI1DXBbUbtmkqIvtfOV0w==", - "dependencies": { - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "cac": "^6.7.14", - "chokidar": "^3.5.3", - "envinfo": "^7.11.0", - "esbuild": "~0.19.5" - }, - "bin": { - "vuepress-cli": "bin/vuepress.js" - } - }, - "node_modules/@vuepress/cli/node_modules/@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "dependencies": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "node_modules/@vuepress/cli/node_modules/@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "dependencies": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "node_modules/@vuepress/cli/node_modules/@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "dependencies": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "node_modules/@vuepress/cli/node_modules/@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "dependencies": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "node_modules/@vuepress/cli/node_modules/@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "dependencies": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - }, - "node_modules/@vuepress/plugin-active-header-links": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-active-header-links/-/plugin-active-header-links-2.0.0-rc.0.tgz", - "integrity": "sha512-UJdXLYNGL5Wjy5YGY8M2QgqT75bZ95EHebbqGi8twBdIJE9O+bM+dPJyYtAk2PIVqFORiw3Hj+PchsNSxdn9+g==", - "dependencies": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "ts-debounce": "^4.0.0", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "node_modules/@vuepress/plugin-active-header-links/node_modules/@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "dependencies": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "node_modules/@vuepress/plugin-active-header-links/node_modules/@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "dependencies": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "node_modules/@vuepress/plugin-active-header-links/node_modules/@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "dependencies": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "node_modules/@vuepress/plugin-active-header-links/node_modules/@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "dependencies": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "node_modules/@vuepress/plugin-active-header-links/node_modules/@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "dependencies": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - }, - "node_modules/@vuepress/plugin-back-to-top": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-back-to-top/-/plugin-back-to-top-2.0.0-rc.0.tgz", - "integrity": "sha512-6GPfuzV5lkAnR00BxRUhqMXwMWt741alkq2R6bln4N8BneSOwEpX/7vi19MGf232aKdS/Va4pF5p0/nJ8Sed/g==", - "dependencies": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "ts-debounce": "^4.0.0", - "vue": "^3.3.8" - } - }, - "node_modules/@vuepress/plugin-back-to-top/node_modules/@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "dependencies": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "node_modules/@vuepress/plugin-back-to-top/node_modules/@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "dependencies": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "node_modules/@vuepress/plugin-back-to-top/node_modules/@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "dependencies": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "node_modules/@vuepress/plugin-back-to-top/node_modules/@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "dependencies": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "node_modules/@vuepress/plugin-back-to-top/node_modules/@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "dependencies": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - }, - "node_modules/@vuepress/plugin-container": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-container/-/plugin-container-2.0.0-rc.0.tgz", - "integrity": "sha512-b7vrLN11YE7qiUDPfA3N9P7Z8fupe9Wbcr9KAE/bmfZ9VT4d6kzpVyoU7XHi99XngitsmnkaXP4aBvBF1c2AnA==", - "dependencies": { - "@types/markdown-it": "^13.0.6", - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-container": "^3.0.0" - } - }, - "node_modules/@vuepress/plugin-container/node_modules/@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "dependencies": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "node_modules/@vuepress/plugin-container/node_modules/@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "dependencies": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "node_modules/@vuepress/plugin-container/node_modules/@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "dependencies": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "node_modules/@vuepress/plugin-container/node_modules/@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "dependencies": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "node_modules/@vuepress/plugin-container/node_modules/@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "dependencies": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - }, - "node_modules/@vuepress/plugin-external-link-icon": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-external-link-icon/-/plugin-external-link-icon-2.0.0-rc.0.tgz", - "integrity": "sha512-o8bk0oIlj/BkKc02mq91XLDloq1VOz/8iNcRwKAeqBE6svXzdYiyoTGet0J/4iPuAetsCn75S57W6RioDJHMnQ==", - "dependencies": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "node_modules/@vuepress/plugin-external-link-icon/node_modules/@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "dependencies": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "node_modules/@vuepress/plugin-external-link-icon/node_modules/@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "dependencies": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "node_modules/@vuepress/plugin-external-link-icon/node_modules/@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "dependencies": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "node_modules/@vuepress/plugin-external-link-icon/node_modules/@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "dependencies": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "node_modules/@vuepress/plugin-external-link-icon/node_modules/@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "dependencies": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - }, - "node_modules/@vuepress/plugin-git": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-git/-/plugin-git-2.0.0-rc.0.tgz", - "integrity": "sha512-r7UF77vZxaYeJQLygzodKv+15z3/dTLuGp4VcYO21W6BlJZvd4u9zqgiV7A//bZQvK4+3Hprylr0G3KgXqMewA==", - "dependencies": { - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "execa": "^8.0.1" - } - }, - "node_modules/@vuepress/plugin-git/node_modules/@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "dependencies": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "node_modules/@vuepress/plugin-git/node_modules/@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "dependencies": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "node_modules/@vuepress/plugin-git/node_modules/@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "dependencies": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "node_modules/@vuepress/plugin-git/node_modules/@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "dependencies": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "node_modules/@vuepress/plugin-git/node_modules/@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "dependencies": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - }, - "node_modules/@vuepress/plugin-google-analytics": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-google-analytics/-/plugin-google-analytics-2.0.0-rc.0.tgz", - "integrity": "sha512-rkYW2LGkLAfRFtaFWVPr1V2mS6hwgYhn2hLeJAF5xHlC3PcjCiSV0cqH7ooeCo+FBJUlCtMQ9N8iSNl63vd7VQ==", - "dev": true, - "dependencies": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0" - } - }, - "node_modules/@vuepress/plugin-google-analytics/node_modules/@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "dev": true, - "dependencies": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "node_modules/@vuepress/plugin-google-analytics/node_modules/@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "dev": true, - "dependencies": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "node_modules/@vuepress/plugin-google-analytics/node_modules/@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "dev": true, - "dependencies": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "node_modules/@vuepress/plugin-google-analytics/node_modules/@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "dev": true, - "dependencies": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "node_modules/@vuepress/plugin-google-analytics/node_modules/@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "dev": true, - "dependencies": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - }, - "node_modules/@vuepress/plugin-medium-zoom": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-medium-zoom/-/plugin-medium-zoom-2.0.0-rc.0.tgz", - "integrity": "sha512-peU1lYKsmKikIe/0pkJuHzD/k6xW2TuqdvKVhV4I//aOE1WxsREKJ4ACcldmoIsnysoDydAUqKT6xDPGyDsH2g==", - "dependencies": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "medium-zoom": "^1.1.0", - "vue": "^3.3.8" - } - }, - "node_modules/@vuepress/plugin-medium-zoom/node_modules/@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "dependencies": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "node_modules/@vuepress/plugin-medium-zoom/node_modules/@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "dependencies": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "node_modules/@vuepress/plugin-medium-zoom/node_modules/@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "dependencies": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "node_modules/@vuepress/plugin-medium-zoom/node_modules/@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "dependencies": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "node_modules/@vuepress/plugin-medium-zoom/node_modules/@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "dependencies": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - }, - "node_modules/@vuepress/plugin-nprogress": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-nprogress/-/plugin-nprogress-2.0.0-rc.0.tgz", - "integrity": "sha512-rI+eK0Pg1KiZE+7hGmDUeSbgdWCid8Vnw0hFKNmjinDzGVmx4m03M6qfvclsI0SryH+lR7itZGLaR4gbTlrz/w==", - "dependencies": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "node_modules/@vuepress/plugin-nprogress/node_modules/@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "dependencies": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "node_modules/@vuepress/plugin-nprogress/node_modules/@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "dependencies": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "node_modules/@vuepress/plugin-nprogress/node_modules/@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "dependencies": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "node_modules/@vuepress/plugin-nprogress/node_modules/@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "dependencies": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "node_modules/@vuepress/plugin-nprogress/node_modules/@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "dependencies": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - }, - "node_modules/@vuepress/plugin-palette": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-palette/-/plugin-palette-2.0.0-rc.0.tgz", - "integrity": "sha512-wW70SCp3/K7s1lln5YQsBGTog2WXaQv5piva5zhXcQ47YGf4aAJpThDa5C/ot4HhkPOKn8Iz5s0ckxXZzW8DIg==", - "dependencies": { - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "chokidar": "^3.5.3" - } - }, - "node_modules/@vuepress/plugin-palette/node_modules/@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "dependencies": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "node_modules/@vuepress/plugin-palette/node_modules/@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "dependencies": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "node_modules/@vuepress/plugin-palette/node_modules/@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "dependencies": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "node_modules/@vuepress/plugin-palette/node_modules/@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "dependencies": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "node_modules/@vuepress/plugin-palette/node_modules/@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "dependencies": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - }, - "node_modules/@vuepress/plugin-prismjs": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-prismjs/-/plugin-prismjs-2.0.0-rc.0.tgz", - "integrity": "sha512-c5WRI7+FhVjdbymOKQ8F2KY/Bnv7aQtWScVk8vCMUimNi7v7Wff/A/i3KSFNz/tge3LxiAeH/Dc2WS/OnQXwCg==", - "dependencies": { - "@vuepress/core": "2.0.0-rc.0", - "prismjs": "^1.29.0" - } - }, - "node_modules/@vuepress/plugin-prismjs/node_modules/@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "dependencies": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "node_modules/@vuepress/plugin-prismjs/node_modules/@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "dependencies": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "node_modules/@vuepress/plugin-prismjs/node_modules/@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "dependencies": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "node_modules/@vuepress/plugin-prismjs/node_modules/@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "dependencies": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "node_modules/@vuepress/plugin-prismjs/node_modules/@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "dependencies": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - }, - "node_modules/@vuepress/plugin-theme-data": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-theme-data/-/plugin-theme-data-2.0.0-rc.0.tgz", - "integrity": "sha512-FXY3/Ml+rM6gNKvwdBF6vKAcwnSvtXCzKgQwJAw3ppQTKUkLcbOxqM+h4d8bzHWAAvdnEvQFug5uEZgWllBQbA==", - "dependencies": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "node_modules/@vuepress/plugin-theme-data/node_modules/@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "dependencies": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "node_modules/@vuepress/plugin-theme-data/node_modules/@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "dependencies": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "node_modules/@vuepress/plugin-theme-data/node_modules/@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "dependencies": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "node_modules/@vuepress/plugin-theme-data/node_modules/@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "dependencies": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "node_modules/@vuepress/plugin-theme-data/node_modules/@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "dependencies": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - }, - "node_modules/@vuepress/theme-default": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/theme-default/-/theme-default-2.0.0-rc.0.tgz", - "integrity": "sha512-I8Y08evDmMuD1jh3NftPpFFSlCWOizQDJLjN7EQwcg7jiAP4A7c2REo6nBN2EmP24Mi7UrRM+RnytHR5V+pElA==", - "dependencies": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/plugin-active-header-links": "2.0.0-rc.0", - "@vuepress/plugin-back-to-top": "2.0.0-rc.0", - "@vuepress/plugin-container": "2.0.0-rc.0", - "@vuepress/plugin-external-link-icon": "2.0.0-rc.0", - "@vuepress/plugin-git": "2.0.0-rc.0", - "@vuepress/plugin-medium-zoom": "2.0.0-rc.0", - "@vuepress/plugin-nprogress": "2.0.0-rc.0", - "@vuepress/plugin-palette": "2.0.0-rc.0", - "@vuepress/plugin-prismjs": "2.0.0-rc.0", - "@vuepress/plugin-theme-data": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "sass": "^1.69.5", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - }, - "peerDependencies": { - "sass-loader": "^13.3.2" - }, - "peerDependenciesMeta": { - "sass-loader": { - "optional": true - } - } - }, - "node_modules/@vuepress/theme-default/node_modules/@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "dependencies": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "node_modules/@vuepress/theme-default/node_modules/@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "dependencies": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "node_modules/@vuepress/theme-default/node_modules/@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "dependencies": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "node_modules/@vuepress/theme-default/node_modules/@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "dependencies": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "node_modules/@vuepress/theme-default/node_modules/@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "dependencies": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - }, - "node_modules/@vueuse/core": { - "version": "10.6.1", - "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.6.1.tgz", - "integrity": "sha512-Pc26IJbqgC9VG1u6VY/xrXXfxD33hnvxBnKrLlA2LJlyHII+BSrRoTPJgGYq7qZOu61itITFUnm6QbacwZ4H8Q==", - "dependencies": { - "@types/web-bluetooth": "^0.0.20", - "@vueuse/metadata": "10.6.1", - "@vueuse/shared": "10.6.1", - "vue-demi": ">=0.14.6" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@vueuse/core/node_modules/vue-demi": { - "version": "0.14.6", - "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz", - "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==", - "hasInstallScript": true, - "bin": { - "vue-demi-fix": "bin/vue-demi-fix.js", - "vue-demi-switch": "bin/vue-demi-switch.js" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "@vue/composition-api": "^1.0.0-rc.1", - "vue": "^3.0.0-0 || ^2.6.0" - }, - "peerDependenciesMeta": { - "@vue/composition-api": { - "optional": true - } - } - }, - "node_modules/@vueuse/metadata": { - "version": "10.6.1", - "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.6.1.tgz", - "integrity": "sha512-qhdwPI65Bgcj23e5lpGfQsxcy0bMjCAsUGoXkJ7DsoeDUdasbZ2DBa4dinFCOER3lF4gwUv+UD2AlA11zdzMFw==", - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@vueuse/shared": { - "version": "10.6.1", - "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.6.1.tgz", - "integrity": "sha512-TECVDTIedFlL0NUfHWncf3zF9Gc4VfdxfQc8JFwoVZQmxpONhLxFrlm0eHQeidHj4rdTPL3KXJa0TZCk1wnc5Q==", - "dependencies": { - "vue-demi": ">=0.14.6" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@vueuse/shared/node_modules/vue-demi": { - "version": "0.14.6", - "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz", - "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==", - "hasInstallScript": true, - "bin": { - "vue-demi-fix": "bin/vue-demi-fix.js", - "vue-demi-switch": "bin/vue-demi-switch.js" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "@vue/composition-api": "^1.0.0-rc.1", - "vue": "^3.0.0-0 || ^2.6.0" - }, - "peerDependenciesMeta": { - "@vue/composition-api": { - "optional": true - } - } - }, - "node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/autoprefixer": { - "version": "10.4.16", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", - "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "browserslist": "^4.21.10", - "caniuse-lite": "^1.0.30001538", - "fraction.js": "^4.3.6", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/bl": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", - "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", - "dependencies": { - "buffer": "^6.0.3", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", - "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001541", - "electron-to-chromium": "^1.4.535", - "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.13" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/cac": { - "version": "6.7.14", - "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", - "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001563", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001563.tgz", - "integrity": "sha512-na2WUmOxnwIZtwnFI2CZ/3er0wdNzU7hN+cPYz/z2ajHThnkWjNBOpEPP4n+4r2WPM847JaMotaJE3bnfzjyKw==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/cli-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", - "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", - "dependencies": { - "restore-cursor": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-spinners": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz", - "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" - }, - "node_modules/electron-to-chromium": { - "version": "1.4.588", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.588.tgz", - "integrity": "sha512-soytjxwbgcCu7nh5Pf4S2/4wa6UIu+A3p03U2yVr53qGxi1/VTR3ENI+p50v+UxqqZAfl48j3z55ud7VHIOr9w==" - }, - "node_modules/emoji-regex": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.2.1.tgz", - "integrity": "sha512-97g6QgOk8zlDRdgq1WxwgTMgEWGVAQvB5Fdpgc1MkNy56la5SKP9GsMXKDOdqwn90/41a8yPwIGk1Y6WVbeMQA==" - }, - "node_modules/entities": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", - "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/envinfo": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.0.tgz", - "integrity": "sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg==", - "bin": { - "envinfo": "dist/cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esbuild": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.6.tgz", - "integrity": "sha512-Xl7dntjA2OEIvpr9j0DVxxnog2fyTGnyVoQXAMQI6eR3mf9zCQds7VIKUDCotDgE/p4ncTgeRqgX8t5d6oP4Gw==", - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.19.6", - "@esbuild/android-arm64": "0.19.6", - "@esbuild/android-x64": "0.19.6", - "@esbuild/darwin-arm64": "0.19.6", - "@esbuild/darwin-x64": "0.19.6", - "@esbuild/freebsd-arm64": "0.19.6", - "@esbuild/freebsd-x64": "0.19.6", - "@esbuild/linux-arm": "0.19.6", - "@esbuild/linux-arm64": "0.19.6", - "@esbuild/linux-ia32": "0.19.6", - "@esbuild/linux-loong64": "0.19.6", - "@esbuild/linux-mips64el": "0.19.6", - "@esbuild/linux-ppc64": "0.19.6", - "@esbuild/linux-riscv64": "0.19.6", - "@esbuild/linux-s390x": "0.19.6", - "@esbuild/linux-x64": "0.19.6", - "@esbuild/netbsd-x64": "0.19.6", - "@esbuild/openbsd-x64": "0.19.6", - "@esbuild/sunos-x64": "0.19.6", - "@esbuild/win32-arm64": "0.19.6", - "@esbuild/win32-ia32": "0.19.6", - "@esbuild/win32-x64": "0.19.6" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" - }, - "node_modules/execa": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/execa/node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/execa/node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/execa/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://github.com/sponsors/rawify" - } - }, - "node_modules/fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/get-stream": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/globby": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.0.tgz", - "integrity": "sha512-/1WM/LNHRAOH9lZta77uGbq0dAEQM+XjNesWwhlERDVenqothRbnzTrL3/LrIoEPPjeUHC3vrS6TwoyxeHs7MQ==", - "dependencies": { - "@sindresorhus/merge-streams": "^1.0.0", - "fast-glob": "^3.3.2", - "ignore": "^5.2.4", - "path-type": "^5.0.0", - "slash": "^5.1.0", - "unicorn-magic": "^0.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "node_modules/gray-matter": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", - "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", - "dependencies": { - "js-yaml": "^3.13.1", - "kind-of": "^6.0.2", - "section-matter": "^1.0.0", - "strip-bom-string": "^1.0.0" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/hash-sum": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", - "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==" - }, - "node_modules/human-signals": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", - "engines": { - "node": ">=16.17.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/immutable": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz", - "integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==" - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-interactive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", - "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-unicode-supported": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", - "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lilconfig": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz", - "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==", - "engines": { - "node": ">=14" - } - }, - "node_modules/linkify-it": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-4.0.1.tgz", - "integrity": "sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==", - "dependencies": { - "uc.micro": "^1.0.1" - } - }, - "node_modules/log-symbols": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", - "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", - "dependencies": { - "chalk": "^5.0.0", - "is-unicode-supported": "^1.1.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/magic-string": { - "version": "0.30.5", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", - "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/markdown-it": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.2.tgz", - "integrity": "sha512-FtwnEuuK+2yVU7goGn/MJ0WBZMM9ZPgU9spqlFs7/A/pDIUNSOQZhUgOqYCficIuR2QaFnrt8LHqBWsbTAoI5w==", - "dependencies": { - "argparse": "^2.0.1", - "entities": "~3.0.1", - "linkify-it": "^4.0.1", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - }, - "bin": { - "markdown-it": "bin/markdown-it.js" - } - }, - "node_modules/markdown-it-anchor": { - "version": "8.6.7", - "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz", - "integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==", - "peerDependencies": { - "@types/markdown-it": "*", - "markdown-it": "*" - } - }, - "node_modules/markdown-it-container": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/markdown-it-container/-/markdown-it-container-3.0.0.tgz", - "integrity": "sha512-y6oKTq4BB9OQuY/KLfk/O3ysFhB3IMYoIWhGJEidXt1NQFocFK2sA2t0NYZAMyMShAGL6x5OPIbrmXPIqaN9rw==" - }, - "node_modules/markdown-it-emoji": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/markdown-it-emoji/-/markdown-it-emoji-2.0.2.tgz", - "integrity": "sha512-zLftSaNrKuYl0kR5zm4gxXjHaOI3FAOEaloKmRA5hijmJZvSjmxcokOLlzycb/HXlUFWzXqpIEoyEMCE4i9MvQ==" - }, - "node_modules/markdown-it/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" - }, - "node_modules/medium-zoom": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/medium-zoom/-/medium-zoom-1.1.0.tgz", - "integrity": "sha512-ewyDsp7k4InCUp3jRmwHBRFGyjBimKps/AJLjRSox+2q/2H4p/PNpQf+pwONWlJiOudkBXtbdmVbFjqyybfTmQ==" - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==" - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-7.0.1.tgz", - "integrity": "sha512-0TUxTiFJWv+JnjWm4o9yvuskpEJLXTcng8MJuKd+SzAzp2o+OP3HWqNhB4OdJRt1Vsd9/mR0oyaEYlOnL7XIRw==", - "dependencies": { - "chalk": "^5.3.0", - "cli-cursor": "^4.0.0", - "cli-spinners": "^2.9.0", - "is-interactive": "^2.0.0", - "is-unicode-supported": "^1.3.0", - "log-symbols": "^5.1.0", - "stdin-discarder": "^0.1.0", - "string-width": "^6.1.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-type": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", - "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/postcss": { - "version": "8.4.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", - "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-load-config": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", - "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "lilconfig": "^3.0.0", - "yaml": "^2.3.4" - }, - "engines": { - "node": ">= 14" - }, - "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" - }, - "node_modules/prismjs": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", - "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/restore-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", - "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rollup": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.5.0.tgz", - "integrity": "sha512-41xsWhzxqjMDASCxH5ibw1mXk+3c4TNI2UjKbLxe6iEzrSQnqOzmmK8/3mufCPbzHNJ2e04Fc1ddI35hHy+8zg==", - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.5.0", - "@rollup/rollup-android-arm64": "4.5.0", - "@rollup/rollup-darwin-arm64": "4.5.0", - "@rollup/rollup-darwin-x64": "4.5.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.5.0", - "@rollup/rollup-linux-arm64-gnu": "4.5.0", - "@rollup/rollup-linux-arm64-musl": "4.5.0", - "@rollup/rollup-linux-x64-gnu": "4.5.0", - "@rollup/rollup-linux-x64-musl": "4.5.0", - "@rollup/rollup-win32-arm64-msvc": "4.5.0", - "@rollup/rollup-win32-ia32-msvc": "4.5.0", - "@rollup/rollup-win32-x64-msvc": "4.5.0", - "fsevents": "~2.3.2" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/sass": { - "version": "1.69.5", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.5.tgz", - "integrity": "sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==", - "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/section-matter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", - "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", - "dependencies": { - "extend-shallow": "^2.0.1", - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "node_modules/slash": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", - "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - }, - "node_modules/stdin-discarder": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.1.0.tgz", - "integrity": "sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==", - "dependencies": { - "bl": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-6.1.0.tgz", - "integrity": "sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ==", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^10.2.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/strip-bom-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", - "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/ts-debounce": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ts-debounce/-/ts-debounce-4.0.0.tgz", - "integrity": "sha512-+1iDGY6NmOGidq7i7xZGA4cm8DAa6fqdYcvO5Z6yBevH++Bdo9Qt/mN0TzHUgcCcKv1gmh9+W5dHqz8pMWbCbg==" - }, - "node_modules/uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" - }, - "node_modules/unicorn-magic": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", - "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/upath": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", - "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", - "engines": { - "node": ">=4", - "yarn": "*" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/vite": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.5.tgz", - "integrity": "sha512-OekeWqR9Ls56f3zd4CaxzbbS11gqYkEiBtnWFFgYR2WV8oPJRRKq0mpskYy/XaoCL3L7VINDhqqOMNDiYdGvGg==", - "dependencies": { - "esbuild": "^0.19.3", - "postcss": "^8.4.32", - "rollup": "^4.2.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/vue": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.8.tgz", - "integrity": "sha512-5VSX/3DabBikOXMsxzlW8JyfeLKlG9mzqnWgLQLty88vdZL7ZJgrdgBOmrArwxiLtmS+lNNpPcBYqrhE6TQW5w==", - "dependencies": { - "@vue/compiler-dom": "3.3.8", - "@vue/compiler-sfc": "3.3.8", - "@vue/runtime-dom": "3.3.8", - "@vue/server-renderer": "3.3.8", - "@vue/shared": "3.3.8" - }, - "peerDependencies": { - "typescript": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/vue-router": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.2.5.tgz", - "integrity": "sha512-DIUpKcyg4+PTQKfFPX88UWhlagBEBEfJ5A8XDXRJLUnZOvcpMF8o/dnL90vpVkGaPbjvXazV/rC1qBKrZlFugw==", - "dependencies": { - "@vue/devtools-api": "^6.5.0" - }, - "funding": { - "url": "https://github.com/sponsors/posva" - }, - "peerDependencies": { - "vue": "^3.2.0" - } - }, - "node_modules/vuepress": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/vuepress/-/vuepress-2.0.0-rc.0.tgz", - "integrity": "sha512-sydt/B7+pIw926G5PntYmptLkC5o2buXKh+WR1+P2KnsvkXU+UGnQrJJ0FBvu/4RNuY99tkUZd59nyPhEmRrCg==", - "dependencies": { - "vuepress-vite": "2.0.0-rc.0" - }, - "bin": { - "vuepress": "bin/vuepress.js" - }, - "engines": { - "node": ">=18.16.0" - } - }, - "node_modules/vuepress/node_modules/@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "dependencies": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "node_modules/vuepress/node_modules/@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "dependencies": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "node_modules/vuepress/node_modules/@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "dependencies": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "node_modules/vuepress/node_modules/@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "dependencies": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "node_modules/vuepress/node_modules/@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "dependencies": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - }, - "node_modules/vuepress/node_modules/vuepress-vite": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/vuepress-vite/-/vuepress-vite-2.0.0-rc.0.tgz", - "integrity": "sha512-+2XBejeiskPyr2raBeA2o4uDFDsjtadpUVmtio3qqFtQpOhidz/ORuiTLr2UfLtFn1ASIHP6Vy2YjQ0e/TeUVw==", - "dependencies": { - "@vuepress/bundler-vite": "2.0.0-rc.0", - "@vuepress/cli": "2.0.0-rc.0", - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/theme-default": "2.0.0-rc.0", - "vue": "^3.3.8" - }, - "bin": { - "vuepress": "bin/vuepress.js", - "vuepress-vite": "bin/vuepress.js" - }, - "engines": { - "node": ">=18.16.0" - }, - "peerDependencies": { - "@vuepress/client": "2.0.0-rc.0", - "vue": "^3.3.4" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/yaml": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", - "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", - "engines": { - "node": ">= 14" - } - } - }, - "dependencies": { - "@babel/parser": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.3.tgz", - "integrity": "sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw==" - }, - "@esbuild/android-arm": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.6.tgz", - "integrity": "sha512-muPzBqXJKCbMYoNbb1JpZh/ynl0xS6/+pLjrofcR3Nad82SbsCogYzUE6Aq9QT3cLP0jR/IVK/NHC9b90mSHtg==", - "optional": true - }, - "@esbuild/android-arm64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.6.tgz", - "integrity": "sha512-KQ/hbe9SJvIJ4sR+2PcZ41IBV+LPJyYp6V1K1P1xcMRup9iYsBoQn4MzE3mhMLOld27Au2eDcLlIREeKGUXpHQ==", - "optional": true - }, - "@esbuild/android-x64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.6.tgz", - "integrity": "sha512-VVJVZQ7p5BBOKoNxd0Ly3xUM78Y4DyOoFKdkdAe2m11jbh0LEU4bPles4e/72EMl4tapko8o915UalN/5zhspg==", - "optional": true - }, - "@esbuild/darwin-arm64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.6.tgz", - "integrity": "sha512-91LoRp/uZAKx6ESNspL3I46ypwzdqyDLXZH7x2QYCLgtnaU08+AXEbabY2yExIz03/am0DivsTtbdxzGejfXpA==", - "optional": true - }, - "@esbuild/darwin-x64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.6.tgz", - "integrity": "sha512-QCGHw770ubjBU1J3ZkFJh671MFajGTYMZumPs9E/rqU52md6lIil97BR0CbPq6U+vTh3xnTNDHKRdR8ggHnmxQ==", - "optional": true - }, - "@esbuild/freebsd-arm64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.6.tgz", - "integrity": "sha512-J53d0jGsDcLzWk9d9SPmlyF+wzVxjXpOH7jVW5ae7PvrDst4kiAz6sX+E8btz0GB6oH12zC+aHRD945jdjF2Vg==", - "optional": true - }, - "@esbuild/freebsd-x64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.6.tgz", - "integrity": "sha512-hn9qvkjHSIB5Z9JgCCjED6YYVGCNpqB7dEGavBdG6EjBD8S/UcNUIlGcB35NCkMETkdYwfZSvD9VoDJX6VeUVA==", - "optional": true - }, - "@esbuild/linux-arm": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.6.tgz", - "integrity": "sha512-G8IR5zFgpXad/Zp7gr7ZyTKyqZuThU6z1JjmRyN1vSF8j0bOlGzUwFSMTbctLAdd7QHpeyu0cRiuKrqK1ZTwvQ==", - "optional": true - }, - "@esbuild/linux-arm64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.6.tgz", - "integrity": "sha512-HQCOrk9XlH3KngASLaBfHpcoYEGUt829A9MyxaI8RMkfRA8SakG6YQEITAuwmtzFdEu5GU4eyhKcpv27dFaOBg==", - "optional": true - }, - "@esbuild/linux-ia32": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.6.tgz", - "integrity": "sha512-22eOR08zL/OXkmEhxOfshfOGo8P69k8oKHkwkDrUlcB12S/sw/+COM4PhAPT0cAYW/gpqY2uXp3TpjQVJitz7w==", - "optional": true - }, - "@esbuild/linux-loong64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.6.tgz", - "integrity": "sha512-82RvaYAh/SUJyjWA8jDpyZCHQjmEggL//sC7F3VKYcBMumQjUL3C5WDl/tJpEiKtt7XrWmgjaLkrk205zfvwTA==", - "optional": true - }, - "@esbuild/linux-mips64el": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.6.tgz", - "integrity": "sha512-8tvnwyYJpR618vboIv2l8tK2SuK/RqUIGMfMENkeDGo3hsEIrpGldMGYFcWxWeEILe5Fi72zoXLmhZ7PR23oQA==", - "optional": true - }, - "@esbuild/linux-ppc64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.6.tgz", - "integrity": "sha512-Qt+D7xiPajxVNk5tQiEJwhmarNnLPdjXAoA5uWMpbfStZB0+YU6a3CtbWYSy+sgAsnyx4IGZjWsTzBzrvg/fMA==", - "optional": true - }, - "@esbuild/linux-riscv64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.6.tgz", - "integrity": "sha512-lxRdk0iJ9CWYDH1Wpnnnc640ajF4RmQ+w6oHFZmAIYu577meE9Ka/DCtpOrwr9McMY11ocbp4jirgGgCi7Ls/g==", - "optional": true - }, - "@esbuild/linux-s390x": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.6.tgz", - "integrity": "sha512-MopyYV39vnfuykHanRWHGRcRC3AwU7b0QY4TI8ISLfAGfK+tMkXyFuyT1epw/lM0pflQlS53JoD22yN83DHZgA==", - "optional": true - }, - "@esbuild/linux-x64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.6.tgz", - "integrity": "sha512-UWcieaBzsN8WYbzFF5Jq7QULETPcQvlX7KL4xWGIB54OknXJjBO37sPqk7N82WU13JGWvmDzFBi1weVBajPovg==", - "optional": true - }, - "@esbuild/netbsd-x64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.6.tgz", - "integrity": "sha512-EpWiLX0fzvZn1wxtLxZrEW+oQED9Pwpnh+w4Ffv8ZLuMhUoqR9q9rL4+qHW8F4Mg5oQEKxAoT0G+8JYNqCiR6g==", - "optional": true - }, - "@esbuild/openbsd-x64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.6.tgz", - "integrity": "sha512-fFqTVEktM1PGs2sLKH4M5mhAVEzGpeZJuasAMRnvDZNCV0Cjvm1Hu35moL2vC0DOrAQjNTvj4zWrol/lwQ8Deg==", - "optional": true - }, - "@esbuild/sunos-x64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.6.tgz", - "integrity": "sha512-M+XIAnBpaNvaVAhbe3uBXtgWyWynSdlww/JNZws0FlMPSBy+EpatPXNIlKAdtbFVII9OpX91ZfMb17TU3JKTBA==", - "optional": true - }, - "@esbuild/win32-arm64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.6.tgz", - "integrity": "sha512-2DchFXn7vp/B6Tc2eKdTsLzE0ygqKkNUhUBCNtMx2Llk4POIVMUq5rUYjdcedFlGLeRe1uLCpVvCmE+G8XYybA==", - "optional": true - }, - "@esbuild/win32-ia32": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.6.tgz", - "integrity": "sha512-PBo/HPDQllyWdjwAVX+Gl2hH0dfBydL97BAH/grHKC8fubqp02aL4S63otZ25q3sBdINtOBbz1qTZQfXbP4VBg==", - "optional": true - }, - "@esbuild/win32-x64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.6.tgz", - "integrity": "sha512-OE7yIdbDif2kKfrGa+V0vx/B3FJv2L4KnIiLlvtibPyO9UkgO3rzYE0HhpREo2vmJ1Ixq1zwm9/0er+3VOSZJA==", - "optional": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" - }, - "@mdit-vue/plugin-component": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-component/-/plugin-component-1.0.0.tgz", - "integrity": "sha512-ZXsJwxkG5yyTHARIYbR74cT4AZ0SfMokFFjiHYCbypHIeYWgJhso4+CZ8+3V9EWFG3EHlGoKNGqKp9chHnqntQ==", - "requires": { - "@types/markdown-it": "^13.0.1", - "markdown-it": "^13.0.1" - } - }, - "@mdit-vue/plugin-frontmatter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-frontmatter/-/plugin-frontmatter-1.0.0.tgz", - "integrity": "sha512-MMA7Ny+YPZA7eDOY1t4E+rKuEWO39mzDdP/M68fKdXJU6VfcGkPr7gnpnJfW2QBJ5qIvMrK/3lDAA2JBy5TfpA==", - "requires": { - "@mdit-vue/types": "1.0.0", - "@types/markdown-it": "^13.0.1", - "gray-matter": "^4.0.3", - "markdown-it": "^13.0.1" - } - }, - "@mdit-vue/plugin-headers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-headers/-/plugin-headers-1.0.0.tgz", - "integrity": "sha512-0rK/iKy6x13d/Pp5XxdLBshTD0+YjZvtHIaIV+JO+/H2WnOv7oaRgs48G5d44z3XJVUE2u6fNnTlI169fef0/A==", - "requires": { - "@mdit-vue/shared": "1.0.0", - "@mdit-vue/types": "1.0.0", - "@types/markdown-it": "^13.0.1", - "markdown-it": "^13.0.1" - } - }, - "@mdit-vue/plugin-sfc": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-sfc/-/plugin-sfc-1.0.0.tgz", - "integrity": "sha512-agMUe0fY4YHxsZivSvplBwRwrFvsIf/JNUJCAYq1+2Sg9+2hviTBZwjZDxYqHDHOVLtiNr+wuo68tE24mAx3AQ==", - "requires": { - "@mdit-vue/types": "1.0.0", - "@types/markdown-it": "^13.0.1", - "markdown-it": "^13.0.1" - } - }, - "@mdit-vue/plugin-title": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-title/-/plugin-title-1.0.0.tgz", - "integrity": "sha512-8yC60fCZ95xcJ/cvJH4Lv43Rs4k+33UGyKrRWj5J8TNyMwUyGcwur0XyPM+ffJH4/Bzq4myZLsj/TTFSkXRxvw==", - "requires": { - "@mdit-vue/shared": "1.0.0", - "@mdit-vue/types": "1.0.0", - "@types/markdown-it": "^13.0.1", - "markdown-it": "^13.0.1" - } - }, - "@mdit-vue/plugin-toc": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-toc/-/plugin-toc-1.0.0.tgz", - "integrity": "sha512-WN8blfX0X/5Nolic0ClDWP7eVo9IB+U4g0jbycX3lolIZX5Bai1UpsD3QYZr5VVsPbQJMKMGvTrCEtCNTGvyWQ==", - "requires": { - "@mdit-vue/shared": "1.0.0", - "@mdit-vue/types": "1.0.0", - "@types/markdown-it": "^13.0.1", - "markdown-it": "^13.0.1" - } - }, - "@mdit-vue/shared": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@mdit-vue/shared/-/shared-1.0.0.tgz", - "integrity": "sha512-nbYBfmEi+pR2Lm0Z6TMVX2/iBjfr/kGEsHW8CC0rQw+3+sG5dY6VG094HuFAkiAmmvZx9DZZb+7ZMWp9vkwCRw==", - "requires": { - "@mdit-vue/types": "1.0.0", - "@types/markdown-it": "^13.0.1", - "markdown-it": "^13.0.1" - } - }, - "@mdit-vue/types": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@mdit-vue/types/-/types-1.0.0.tgz", - "integrity": "sha512-xeF5+sHLzRNF7plbksywKCph4qli20l72of2fMlZQQ7RECvXYrRkE9+bjRFQCyULC7B8ydUYbpbkux5xJlVWyw==" - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@rollup/rollup-android-arm-eabi": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.5.0.tgz", - "integrity": "sha512-OINaBGY+Wc++U0rdr7BLuFClxcoWaVW3vQYqmQq6B3bqQ/2olkaoz+K8+af/Mmka/C2yN5j+L9scBkv4BtKsDA==", - "optional": true - }, - "@rollup/rollup-android-arm64": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.5.0.tgz", - "integrity": "sha512-UdMf1pOQc4ZmUA/NTmKhgJTBimbSKnhPS2zJqucqFyBRFPnPDtwA8MzrGNTjDeQbIAWfpJVAlxejw+/lQyBK/w==", - "optional": true - }, - "@rollup/rollup-darwin-arm64": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.5.0.tgz", - "integrity": "sha512-L0/CA5p/idVKI+c9PcAPGorH6CwXn6+J0Ys7Gg1axCbTPgI8MeMlhA6fLM9fK+ssFhqogMHFC8HDvZuetOii7w==", - "optional": true - }, - "@rollup/rollup-darwin-x64": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.5.0.tgz", - "integrity": "sha512-QZCbVqU26mNlLn8zi/XDDquNmvcr4ON5FYAHQQsyhrHx8q+sQi/6xduoznYXwk/KmKIXG5dLfR0CvY+NAWpFYQ==", - "optional": true - }, - "@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.5.0.tgz", - "integrity": "sha512-VpSQ+xm93AeV33QbYslgf44wc5eJGYfYitlQzAi3OObu9iwrGXEnmu5S3ilkqE3Pr/FkgOiJKV/2p0ewf4Hrtg==", - "optional": true - }, - "@rollup/rollup-linux-arm64-gnu": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.5.0.tgz", - "integrity": "sha512-OrEyIfpxSsMal44JpEVx9AEcGpdBQG1ZuWISAanaQTSMeStBW+oHWwOkoqR54bw3x8heP8gBOyoJiGg+fLY8qQ==", - "optional": true - }, - "@rollup/rollup-linux-arm64-musl": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.5.0.tgz", - "integrity": "sha512-1H7wBbQuE6igQdxMSTjtFfD+DGAudcYWhp106z/9zBA8OQhsJRnemO4XGavdzHpGhRtRxbgmUGdO3YQgrWf2RA==", - "optional": true - }, - "@rollup/rollup-linux-x64-gnu": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.5.0.tgz", - "integrity": "sha512-FVyFI13tXw5aE65sZdBpNjPVIi4Q5mARnL/39UIkxvSgRAIqCo5sCpCELk0JtXHGee2owZz5aNLbWNfBHzr71Q==", - "optional": true - }, - "@rollup/rollup-linux-x64-musl": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.5.0.tgz", - "integrity": "sha512-eBPYl2sLpH/o8qbSz6vPwWlDyThnQjJfcDOGFbNjmjb44XKC1F5dQfakOsADRVrXCNzM6ZsSIPDG5dc6HHLNFg==", - "optional": true - }, - "@rollup/rollup-win32-arm64-msvc": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.5.0.tgz", - "integrity": "sha512-xaOHIfLOZypoQ5U2I6rEaugS4IYtTgP030xzvrBf5js7p9WI9wik07iHmsKaej8Z83ZDxN5GyypfoyKV5O5TJA==", - "optional": true - }, - "@rollup/rollup-win32-ia32-msvc": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.5.0.tgz", - "integrity": "sha512-Al6quztQUrHwcOoU2TuFblUQ5L+/AmPBXFR6dUvyo4nRj2yQRK0WIUaGMF/uwKulvRcXkpHe3k9A8Vf93VDktA==", - "optional": true - }, - "@rollup/rollup-win32-x64-msvc": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.5.0.tgz", - "integrity": "sha512-8kdW+brNhI/NzJ4fxDufuJUjepzINqJKLGHuxyAtpPG9bMbn8P5mtaCcbOm0EzLJ+atg+kF9dwg8jpclkVqx5w==", - "optional": true - }, - "@sindresorhus/merge-streams": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-1.0.0.tgz", - "integrity": "sha512-rUV5WyJrJLoloD4NDN1V1+LDMDWOa4OTsT4yYJwQNpTU6FWxkxHpL7eu4w+DmiH8x/EAM1otkPE1+LaspIbplw==" - }, - "@types/debug": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", - "requires": { - "@types/ms": "*" - } - }, - "@types/fs-extra": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.4.tgz", - "integrity": "sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==", - "requires": { - "@types/jsonfile": "*", - "@types/node": "*" - } - }, - "@types/hash-sum": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/hash-sum/-/hash-sum-1.0.2.tgz", - "integrity": "sha512-UP28RddqY8xcU0SCEp9YKutQICXpaAq9N8U2klqF5hegGha7KzTOL8EdhIIV3bOSGBzjEpN9bU/d+nNZBdJYVw==" - }, - "@types/jsonfile": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.1.tgz", - "integrity": "sha512-GSgiRCVeapDN+3pqA35IkQwasaCh/0YFH5dEF6S88iDvEn901DjOeH3/QPY+XYP1DFzDZPvIvfeEgk+7br5png==", - "requires": { - "@types/node": "*" - } - }, - "@types/linkify-it": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", - "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==" - }, - "@types/markdown-it": { - "version": "13.0.6", - "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-13.0.6.tgz", - "integrity": "sha512-0VqpvusJn1/lwRegCxcHVdmLfF+wIsprsKMC9xW8UPcTxhFcQtoN/fBU1zMe8pH7D/RuueMh2CaBaNv+GrLqTw==", - "requires": { - "@types/linkify-it": "*", - "@types/mdurl": "*" - } - }, - "@types/markdown-it-emoji": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/markdown-it-emoji/-/markdown-it-emoji-2.0.4.tgz", - "integrity": "sha512-H6ulk/ZmbDxOayPwI/leJzrmoW1YKX1Z+MVSCHXuYhvqckV4I/c+hPTf6UiqJyn2avWugfj30XroheEb6/Ekqg==", - "requires": { - "@types/markdown-it": "*" - } - }, - "@types/mdurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", - "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==" - }, - "@types/ms": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", - "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" - }, - "@types/node": { - "version": "18.8.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.8.4.tgz", - "integrity": "sha512-WdlVphvfR/GJCLEMbNA8lJ0lhFNBj4SW3O+O5/cEGw9oYrv0al9zTwuQsq+myDUXgNx2jgBynoVgZ2MMJ6pbow==" - }, - "@types/web-bluetooth": { - "version": "0.0.20", - "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", - "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==" - }, - "@vitejs/plugin-vue": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.5.0.tgz", - "integrity": "sha512-a2WSpP8X8HTEww/U00bU4mX1QpLINNuz/2KMNpLsdu3BzOpak3AGI1CJYBTXcc4SPhaD0eNRUp7IyQK405L5dQ==", - "requires": {} - }, - "@vue/compiler-core": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.8.tgz", - "integrity": "sha512-hN/NNBUECw8SusQvDSqqcVv6gWq8L6iAktUR0UF3vGu2OhzRqcOiAno0FmBJWwxhYEXRlQJT5XnoKsVq1WZx4g==", - "requires": { - "@babel/parser": "^7.23.0", - "@vue/shared": "3.3.8", - "estree-walker": "^2.0.2", - "source-map-js": "^1.0.2" - } - }, - "@vue/compiler-dom": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.8.tgz", - "integrity": "sha512-+PPtv+p/nWDd0AvJu3w8HS0RIm/C6VGBIRe24b9hSyNWOAPEUosFZ5diwawwP8ip5sJ8n0Pe87TNNNHnvjs0FQ==", - "requires": { - "@vue/compiler-core": "3.3.8", - "@vue/shared": "3.3.8" - } - }, - "@vue/compiler-sfc": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.8.tgz", - "integrity": "sha512-WMzbUrlTjfYF8joyT84HfwwXo+8WPALuPxhy+BZ6R4Aafls+jDBnSz8PDz60uFhuqFbl3HxRfxvDzrUf3THwpA==", - "requires": { - "@babel/parser": "^7.23.0", - "@vue/compiler-core": "3.3.8", - "@vue/compiler-dom": "3.3.8", - "@vue/compiler-ssr": "3.3.8", - "@vue/reactivity-transform": "3.3.8", - "@vue/shared": "3.3.8", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.5", - "postcss": "^8.4.31", - "source-map-js": "^1.0.2" - } - }, - "@vue/compiler-ssr": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.8.tgz", - "integrity": "sha512-hXCqQL/15kMVDBuoBYpUnSYT8doDNwsjvm3jTefnXr+ytn294ySnT8NlsFHmTgKNjwpuFy7XVV8yTeLtNl/P6w==", - "requires": { - "@vue/compiler-dom": "3.3.8", - "@vue/shared": "3.3.8" - } - }, - "@vue/devtools-api": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.1.tgz", - "integrity": "sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==" - }, - "@vue/reactivity": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.8.tgz", - "integrity": "sha512-ctLWitmFBu6mtddPyOKpHg8+5ahouoTCRtmAHZAXmolDtuZXfjL2T3OJ6DL6ezBPQB1SmMnpzjiWjCiMYmpIuw==", - "requires": { - "@vue/shared": "3.3.8" - } - }, - "@vue/reactivity-transform": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.8.tgz", - "integrity": "sha512-49CvBzmZNtcHua0XJ7GdGifM8GOXoUMOX4dD40Y5DxI3R8OUhMlvf2nvgUAcPxaXiV5MQQ1Nwy09ADpnLQUqRw==", - "requires": { - "@babel/parser": "^7.23.0", - "@vue/compiler-core": "3.3.8", - "@vue/shared": "3.3.8", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.5" - } - }, - "@vue/runtime-core": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.8.tgz", - "integrity": "sha512-qurzOlb6q26KWQ/8IShHkMDOuJkQnQcTIp1sdP4I9MbCf9FJeGVRXJFr2mF+6bXh/3Zjr9TDgURXrsCr9bfjUw==", - "requires": { - "@vue/reactivity": "3.3.8", - "@vue/shared": "3.3.8" - } - }, - "@vue/runtime-dom": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.8.tgz", - "integrity": "sha512-Noy5yM5UIf9UeFoowBVgghyGGPIDPy1Qlqt0yVsUdAVbqI8eeMSsTqBtauaEoT2UFXUk5S64aWVNJN4MJ2vRdA==", - "requires": { - "@vue/runtime-core": "3.3.8", - "@vue/shared": "3.3.8", - "csstype": "^3.1.2" - } - }, - "@vue/server-renderer": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.8.tgz", - "integrity": "sha512-zVCUw7RFskvPuNlPn/8xISbrf0zTWsTSdYTsUTN1ERGGZGVnRxM2QZ3x1OR32+vwkkCm0IW6HmJ49IsPm7ilLg==", - "requires": { - "@vue/compiler-ssr": "3.3.8", - "@vue/shared": "3.3.8" - } - }, - "@vue/shared": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.8.tgz", - "integrity": "sha512-8PGwybFwM4x8pcfgqEQFy70NaQxASvOC5DJwLQfpArw1UDfUXrJkdxD3BhVTMS+0Lef/TU7YO0Jvr0jJY8T+mw==" - }, - "@vuepress/bundler-vite": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/bundler-vite/-/bundler-vite-2.0.0-rc.0.tgz", - "integrity": "sha512-rX8S8IYpqqlJfNPstS/joorpxXx/4WuE7+gDM31i2HUrxOKGZVzq8ZsRRRU2UdoTwHZSd3LpUS4sMtxE5xLK1A==", - "requires": { - "@vitejs/plugin-vue": "^4.5.0", - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "autoprefixer": "^10.4.16", - "connect-history-api-fallback": "^2.0.0", - "postcss": "^8.4.31", - "postcss-load-config": "^4.0.1", - "rollup": "^4.4.1", - "vite": "~5.0.0", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - }, - "dependencies": { - "@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "requires": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "requires": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "requires": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "requires": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "requires": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - } - } - }, - "@vuepress/cli": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/cli/-/cli-2.0.0-rc.0.tgz", - "integrity": "sha512-XWSIFO9iOR7N4O2lXIwS5vZuLjU9WU/aGAtmhMWEMxrdMx7TQaJbgrfpTUEbHMf+cPI1DXBbUbtmkqIvtfOV0w==", - "requires": { - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "cac": "^6.7.14", - "chokidar": "^3.5.3", - "envinfo": "^7.11.0", - "esbuild": "~0.19.5" - }, - "dependencies": { - "@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "requires": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "requires": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "requires": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "requires": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "requires": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - } - } - }, - "@vuepress/plugin-active-header-links": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-active-header-links/-/plugin-active-header-links-2.0.0-rc.0.tgz", - "integrity": "sha512-UJdXLYNGL5Wjy5YGY8M2QgqT75bZ95EHebbqGi8twBdIJE9O+bM+dPJyYtAk2PIVqFORiw3Hj+PchsNSxdn9+g==", - "requires": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "ts-debounce": "^4.0.0", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - }, - "dependencies": { - "@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "requires": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "requires": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "requires": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "requires": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "requires": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - } - } - }, - "@vuepress/plugin-back-to-top": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-back-to-top/-/plugin-back-to-top-2.0.0-rc.0.tgz", - "integrity": "sha512-6GPfuzV5lkAnR00BxRUhqMXwMWt741alkq2R6bln4N8BneSOwEpX/7vi19MGf232aKdS/Va4pF5p0/nJ8Sed/g==", - "requires": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "ts-debounce": "^4.0.0", - "vue": "^3.3.8" - }, - "dependencies": { - "@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "requires": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "requires": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "requires": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "requires": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "requires": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - } - } - }, - "@vuepress/plugin-container": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-container/-/plugin-container-2.0.0-rc.0.tgz", - "integrity": "sha512-b7vrLN11YE7qiUDPfA3N9P7Z8fupe9Wbcr9KAE/bmfZ9VT4d6kzpVyoU7XHi99XngitsmnkaXP4aBvBF1c2AnA==", - "requires": { - "@types/markdown-it": "^13.0.6", - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-container": "^3.0.0" - }, - "dependencies": { - "@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "requires": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "requires": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "requires": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "requires": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "requires": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - } - } - }, - "@vuepress/plugin-external-link-icon": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-external-link-icon/-/plugin-external-link-icon-2.0.0-rc.0.tgz", - "integrity": "sha512-o8bk0oIlj/BkKc02mq91XLDloq1VOz/8iNcRwKAeqBE6svXzdYiyoTGet0J/4iPuAetsCn75S57W6RioDJHMnQ==", - "requires": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - }, - "dependencies": { - "@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "requires": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "requires": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "requires": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "requires": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "requires": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - } - } - }, - "@vuepress/plugin-git": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-git/-/plugin-git-2.0.0-rc.0.tgz", - "integrity": "sha512-r7UF77vZxaYeJQLygzodKv+15z3/dTLuGp4VcYO21W6BlJZvd4u9zqgiV7A//bZQvK4+3Hprylr0G3KgXqMewA==", - "requires": { - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "execa": "^8.0.1" - }, - "dependencies": { - "@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "requires": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "requires": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "requires": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "requires": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "requires": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - } - } - }, - "@vuepress/plugin-google-analytics": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-google-analytics/-/plugin-google-analytics-2.0.0-rc.0.tgz", - "integrity": "sha512-rkYW2LGkLAfRFtaFWVPr1V2mS6hwgYhn2hLeJAF5xHlC3PcjCiSV0cqH7ooeCo+FBJUlCtMQ9N8iSNl63vd7VQ==", - "dev": true, - "requires": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0" - }, - "dependencies": { - "@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "dev": true, - "requires": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "dev": true, - "requires": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "dev": true, - "requires": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "dev": true, - "requires": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "dev": true, - "requires": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - } - } - }, - "@vuepress/plugin-medium-zoom": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-medium-zoom/-/plugin-medium-zoom-2.0.0-rc.0.tgz", - "integrity": "sha512-peU1lYKsmKikIe/0pkJuHzD/k6xW2TuqdvKVhV4I//aOE1WxsREKJ4ACcldmoIsnysoDydAUqKT6xDPGyDsH2g==", - "requires": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "medium-zoom": "^1.1.0", - "vue": "^3.3.8" - }, - "dependencies": { - "@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "requires": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "requires": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "requires": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "requires": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "requires": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - } - } - }, - "@vuepress/plugin-nprogress": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-nprogress/-/plugin-nprogress-2.0.0-rc.0.tgz", - "integrity": "sha512-rI+eK0Pg1KiZE+7hGmDUeSbgdWCid8Vnw0hFKNmjinDzGVmx4m03M6qfvclsI0SryH+lR7itZGLaR4gbTlrz/w==", - "requires": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - }, - "dependencies": { - "@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "requires": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "requires": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "requires": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "requires": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "requires": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - } - } - }, - "@vuepress/plugin-palette": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-palette/-/plugin-palette-2.0.0-rc.0.tgz", - "integrity": "sha512-wW70SCp3/K7s1lln5YQsBGTog2WXaQv5piva5zhXcQ47YGf4aAJpThDa5C/ot4HhkPOKn8Iz5s0ckxXZzW8DIg==", - "requires": { - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "chokidar": "^3.5.3" - }, - "dependencies": { - "@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "requires": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "requires": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "requires": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "requires": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "requires": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - } - } - }, - "@vuepress/plugin-prismjs": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-prismjs/-/plugin-prismjs-2.0.0-rc.0.tgz", - "integrity": "sha512-c5WRI7+FhVjdbymOKQ8F2KY/Bnv7aQtWScVk8vCMUimNi7v7Wff/A/i3KSFNz/tge3LxiAeH/Dc2WS/OnQXwCg==", - "requires": { - "@vuepress/core": "2.0.0-rc.0", - "prismjs": "^1.29.0" - }, - "dependencies": { - "@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "requires": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "requires": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "requires": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "requires": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "requires": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - } - } - }, - "@vuepress/plugin-theme-data": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-theme-data/-/plugin-theme-data-2.0.0-rc.0.tgz", - "integrity": "sha512-FXY3/Ml+rM6gNKvwdBF6vKAcwnSvtXCzKgQwJAw3ppQTKUkLcbOxqM+h4d8bzHWAAvdnEvQFug5uEZgWllBQbA==", - "requires": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - }, - "dependencies": { - "@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "requires": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "requires": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "requires": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "requires": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "requires": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - } - } - }, - "@vuepress/theme-default": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/theme-default/-/theme-default-2.0.0-rc.0.tgz", - "integrity": "sha512-I8Y08evDmMuD1jh3NftPpFFSlCWOizQDJLjN7EQwcg7jiAP4A7c2REo6nBN2EmP24Mi7UrRM+RnytHR5V+pElA==", - "requires": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/plugin-active-header-links": "2.0.0-rc.0", - "@vuepress/plugin-back-to-top": "2.0.0-rc.0", - "@vuepress/plugin-container": "2.0.0-rc.0", - "@vuepress/plugin-external-link-icon": "2.0.0-rc.0", - "@vuepress/plugin-git": "2.0.0-rc.0", - "@vuepress/plugin-medium-zoom": "2.0.0-rc.0", - "@vuepress/plugin-nprogress": "2.0.0-rc.0", - "@vuepress/plugin-palette": "2.0.0-rc.0", - "@vuepress/plugin-prismjs": "2.0.0-rc.0", - "@vuepress/plugin-theme-data": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "sass": "^1.69.5", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - }, - "dependencies": { - "@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "requires": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "requires": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "requires": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "requires": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "requires": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - } - } - }, - "@vueuse/core": { - "version": "10.6.1", - "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.6.1.tgz", - "integrity": "sha512-Pc26IJbqgC9VG1u6VY/xrXXfxD33hnvxBnKrLlA2LJlyHII+BSrRoTPJgGYq7qZOu61itITFUnm6QbacwZ4H8Q==", - "requires": { - "@types/web-bluetooth": "^0.0.20", - "@vueuse/metadata": "10.6.1", - "@vueuse/shared": "10.6.1", - "vue-demi": ">=0.14.6" - }, - "dependencies": { - "vue-demi": { - "version": "0.14.6", - "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz", - "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==", - "requires": {} - } - } - }, - "@vueuse/metadata": { - "version": "10.6.1", - "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.6.1.tgz", - "integrity": "sha512-qhdwPI65Bgcj23e5lpGfQsxcy0bMjCAsUGoXkJ7DsoeDUdasbZ2DBa4dinFCOER3lF4gwUv+UD2AlA11zdzMFw==" - }, - "@vueuse/shared": { - "version": "10.6.1", - "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.6.1.tgz", - "integrity": "sha512-TECVDTIedFlL0NUfHWncf3zF9Gc4VfdxfQc8JFwoVZQmxpONhLxFrlm0eHQeidHj4rdTPL3KXJa0TZCk1wnc5Q==", - "requires": { - "vue-demi": ">=0.14.6" - }, - "dependencies": { - "vue-demi": { - "version": "0.14.6", - "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz", - "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==", - "requires": {} - } - } - }, - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "autoprefixer": { - "version": "10.4.16", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", - "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", - "requires": { - "browserslist": "^4.21.10", - "caniuse-lite": "^1.0.30001538", - "fraction.js": "^4.3.6", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - } - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" - }, - "bl": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", - "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", - "requires": { - "buffer": "^6.0.3", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "browserslist": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", - "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", - "requires": { - "caniuse-lite": "^1.0.30001541", - "electron-to-chromium": "^1.4.535", - "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.13" - } - }, - "buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "cac": { - "version": "6.7.14", - "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", - "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==" - }, - "caniuse-lite": { - "version": "1.0.30001563", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001563.tgz", - "integrity": "sha512-na2WUmOxnwIZtwnFI2CZ/3er0wdNzU7hN+cPYz/z2ajHThnkWjNBOpEPP4n+4r2WPM847JaMotaJE3bnfzjyKw==" - }, - "chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==" - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "cli-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", - "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", - "requires": { - "restore-cursor": "^4.0.0" - } - }, - "cli-spinners": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz", - "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==" - }, - "connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==" - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" - }, - "electron-to-chromium": { - "version": "1.4.588", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.588.tgz", - "integrity": "sha512-soytjxwbgcCu7nh5Pf4S2/4wa6UIu+A3p03U2yVr53qGxi1/VTR3ENI+p50v+UxqqZAfl48j3z55ud7VHIOr9w==" - }, - "emoji-regex": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.2.1.tgz", - "integrity": "sha512-97g6QgOk8zlDRdgq1WxwgTMgEWGVAQvB5Fdpgc1MkNy56la5SKP9GsMXKDOdqwn90/41a8yPwIGk1Y6WVbeMQA==" - }, - "entities": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", - "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==" - }, - "envinfo": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.0.tgz", - "integrity": "sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg==" - }, - "esbuild": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.6.tgz", - "integrity": "sha512-Xl7dntjA2OEIvpr9j0DVxxnog2fyTGnyVoQXAMQI6eR3mf9zCQds7VIKUDCotDgE/p4ncTgeRqgX8t5d6oP4Gw==", - "requires": { - "@esbuild/android-arm": "0.19.6", - "@esbuild/android-arm64": "0.19.6", - "@esbuild/android-x64": "0.19.6", - "@esbuild/darwin-arm64": "0.19.6", - "@esbuild/darwin-x64": "0.19.6", - "@esbuild/freebsd-arm64": "0.19.6", - "@esbuild/freebsd-x64": "0.19.6", - "@esbuild/linux-arm": "0.19.6", - "@esbuild/linux-arm64": "0.19.6", - "@esbuild/linux-ia32": "0.19.6", - "@esbuild/linux-loong64": "0.19.6", - "@esbuild/linux-mips64el": "0.19.6", - "@esbuild/linux-ppc64": "0.19.6", - "@esbuild/linux-riscv64": "0.19.6", - "@esbuild/linux-s390x": "0.19.6", - "@esbuild/linux-x64": "0.19.6", - "@esbuild/netbsd-x64": "0.19.6", - "@esbuild/openbsd-x64": "0.19.6", - "@esbuild/sunos-x64": "0.19.6", - "@esbuild/win32-arm64": "0.19.6", - "@esbuild/win32-ia32": "0.19.6", - "@esbuild/win32-x64": "0.19.6" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" - }, - "execa": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" - }, - "dependencies": { - "mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==" - }, - "onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "requires": { - "mimic-fn": "^4.0.0" - } - }, - "signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==" - } - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "requires": { - "reusify": "^1.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==" - }, - "fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "optional": true - }, - "get-stream": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==" - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "requires": { - "is-glob": "^4.0.1" - } - }, - "globby": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.0.tgz", - "integrity": "sha512-/1WM/LNHRAOH9lZta77uGbq0dAEQM+XjNesWwhlERDVenqothRbnzTrL3/LrIoEPPjeUHC3vrS6TwoyxeHs7MQ==", - "requires": { - "@sindresorhus/merge-streams": "^1.0.0", - "fast-glob": "^3.3.2", - "ignore": "^5.2.4", - "path-type": "^5.0.0", - "slash": "^5.1.0", - "unicorn-magic": "^0.1.0" - } - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "gray-matter": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", - "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", - "requires": { - "js-yaml": "^3.13.1", - "kind-of": "^6.0.2", - "section-matter": "^1.0.0", - "strip-bom-string": "^1.0.0" - } - }, - "hash-sum": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", - "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==" - }, - "human-signals": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==" - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" - }, - "ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==" - }, - "immutable": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz", - "integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==" - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-interactive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", - "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==" - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==" - }, - "is-unicode-supported": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", - "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" - }, - "lilconfig": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz", - "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==" - }, - "linkify-it": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-4.0.1.tgz", - "integrity": "sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==", - "requires": { - "uc.micro": "^1.0.1" - } - }, - "log-symbols": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", - "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", - "requires": { - "chalk": "^5.0.0", - "is-unicode-supported": "^1.1.0" - } - }, - "magic-string": { - "version": "0.30.5", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", - "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", - "requires": { - "@jridgewell/sourcemap-codec": "^1.4.15" - } - }, - "markdown-it": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.2.tgz", - "integrity": "sha512-FtwnEuuK+2yVU7goGn/MJ0WBZMM9ZPgU9spqlFs7/A/pDIUNSOQZhUgOqYCficIuR2QaFnrt8LHqBWsbTAoI5w==", - "requires": { - "argparse": "^2.0.1", - "entities": "~3.0.1", - "linkify-it": "^4.0.1", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - }, - "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - } - } - }, - "markdown-it-anchor": { - "version": "8.6.7", - "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz", - "integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==", - "requires": {} - }, - "markdown-it-container": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/markdown-it-container/-/markdown-it-container-3.0.0.tgz", - "integrity": "sha512-y6oKTq4BB9OQuY/KLfk/O3ysFhB3IMYoIWhGJEidXt1NQFocFK2sA2t0NYZAMyMShAGL6x5OPIbrmXPIqaN9rw==" - }, - "markdown-it-emoji": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/markdown-it-emoji/-/markdown-it-emoji-2.0.2.tgz", - "integrity": "sha512-zLftSaNrKuYl0kR5zm4gxXjHaOI3FAOEaloKmRA5hijmJZvSjmxcokOLlzycb/HXlUFWzXqpIEoyEMCE4i9MvQ==" - }, - "mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" - }, - "medium-zoom": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/medium-zoom/-/medium-zoom-1.1.0.tgz", - "integrity": "sha512-ewyDsp7k4InCUp3jRmwHBRFGyjBimKps/AJLjRSox+2q/2H4p/PNpQf+pwONWlJiOudkBXtbdmVbFjqyybfTmQ==" - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==" - }, - "node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==" - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==" - }, - "npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", - "requires": { - "path-key": "^4.0.0" - }, - "dependencies": { - "path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==" - } - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "ora": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-7.0.1.tgz", - "integrity": "sha512-0TUxTiFJWv+JnjWm4o9yvuskpEJLXTcng8MJuKd+SzAzp2o+OP3HWqNhB4OdJRt1Vsd9/mR0oyaEYlOnL7XIRw==", - "requires": { - "chalk": "^5.3.0", - "cli-cursor": "^4.0.0", - "cli-spinners": "^2.9.0", - "is-interactive": "^2.0.0", - "is-unicode-supported": "^1.3.0", - "log-symbols": "^5.1.0", - "stdin-discarder": "^0.1.0", - "string-width": "^6.1.0", - "strip-ansi": "^7.1.0" - } - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" - }, - "path-type": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", - "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==" - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" - }, - "postcss": { - "version": "8.4.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", - "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", - "requires": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - } - }, - "postcss-load-config": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", - "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", - "requires": { - "lilconfig": "^3.0.0", - "yaml": "^2.3.4" - } - }, - "postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" - }, - "prismjs": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", - "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==" - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" - }, - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "requires": { - "picomatch": "^2.2.1" - } - }, - "restore-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", - "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" - }, - "rollup": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.5.0.tgz", - "integrity": "sha512-41xsWhzxqjMDASCxH5ibw1mXk+3c4TNI2UjKbLxe6iEzrSQnqOzmmK8/3mufCPbzHNJ2e04Fc1ddI35hHy+8zg==", - "requires": { - "@rollup/rollup-android-arm-eabi": "4.5.0", - "@rollup/rollup-android-arm64": "4.5.0", - "@rollup/rollup-darwin-arm64": "4.5.0", - "@rollup/rollup-darwin-x64": "4.5.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.5.0", - "@rollup/rollup-linux-arm64-gnu": "4.5.0", - "@rollup/rollup-linux-arm64-musl": "4.5.0", - "@rollup/rollup-linux-x64-gnu": "4.5.0", - "@rollup/rollup-linux-x64-musl": "4.5.0", - "@rollup/rollup-win32-arm64-msvc": "4.5.0", - "@rollup/rollup-win32-ia32-msvc": "4.5.0", - "@rollup/rollup-win32-x64-msvc": "4.5.0", - "fsevents": "~2.3.2" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "sass": { - "version": "1.69.5", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.5.tgz", - "integrity": "sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==", - "requires": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - } - }, - "section-matter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", - "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", - "requires": { - "extend-shallow": "^2.0.1", - "kind-of": "^6.0.0" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "slash": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", - "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==" - }, - "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - }, - "stdin-discarder": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.1.0.tgz", - "integrity": "sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==", - "requires": { - "bl": "^5.0.0" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "string-width": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-6.1.0.tgz", - "integrity": "sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ==", - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^10.2.1", - "strip-ansi": "^7.0.1" - } - }, - "strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "requires": { - "ansi-regex": "^6.0.1" - } - }, - "strip-bom-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", - "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==" - }, - "strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==" - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { - "is-number": "^7.0.0" - } - }, - "ts-debounce": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ts-debounce/-/ts-debounce-4.0.0.tgz", - "integrity": "sha512-+1iDGY6NmOGidq7i7xZGA4cm8DAa6fqdYcvO5Z6yBevH++Bdo9Qt/mN0TzHUgcCcKv1gmh9+W5dHqz8pMWbCbg==" - }, - "uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" - }, - "unicorn-magic": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", - "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==" - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" - }, - "upath": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", - "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==" - }, - "update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "vite": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.5.tgz", - "integrity": "sha512-OekeWqR9Ls56f3zd4CaxzbbS11gqYkEiBtnWFFgYR2WV8oPJRRKq0mpskYy/XaoCL3L7VINDhqqOMNDiYdGvGg==", - "requires": { - "esbuild": "^0.19.3", - "fsevents": "~2.3.3", - "postcss": "^8.4.32", - "rollup": "^4.2.0" - } - }, - "vue": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.8.tgz", - "integrity": "sha512-5VSX/3DabBikOXMsxzlW8JyfeLKlG9mzqnWgLQLty88vdZL7ZJgrdgBOmrArwxiLtmS+lNNpPcBYqrhE6TQW5w==", - "requires": { - "@vue/compiler-dom": "3.3.8", - "@vue/compiler-sfc": "3.3.8", - "@vue/runtime-dom": "3.3.8", - "@vue/server-renderer": "3.3.8", - "@vue/shared": "3.3.8" - } - }, - "vue-router": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.2.5.tgz", - "integrity": "sha512-DIUpKcyg4+PTQKfFPX88UWhlagBEBEfJ5A8XDXRJLUnZOvcpMF8o/dnL90vpVkGaPbjvXazV/rC1qBKrZlFugw==", - "requires": { - "@vue/devtools-api": "^6.5.0" - } - }, - "vuepress": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/vuepress/-/vuepress-2.0.0-rc.0.tgz", - "integrity": "sha512-sydt/B7+pIw926G5PntYmptLkC5o2buXKh+WR1+P2KnsvkXU+UGnQrJJ0FBvu/4RNuY99tkUZd59nyPhEmRrCg==", - "requires": { - "vuepress-vite": "2.0.0-rc.0" - }, - "dependencies": { - "@vuepress/client": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.0.tgz", - "integrity": "sha512-TwQx8hJgYONYxX+QltZ2aw9O5Ym6SKelfiUduuIRb555B1gece/jSVap3H/ZwyBhpgJMtG4+/Mrmf8nlDSHjvw==", - "requires": { - "@vue/devtools-api": "^6.5.1", - "@vuepress/shared": "2.0.0-rc.0", - "@vueuse/core": "^10.6.1", - "vue": "^3.3.8", - "vue-router": "^4.2.5" - } - }, - "@vuepress/core": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.0.tgz", - "integrity": "sha512-uoOaZP1MdxZYJIAJcRcmYKKeCIVnxZeOuLMOOB9CPuAKSalT1RvJ1lztw6RX3q9SPnlqtSZPQXDncPAZivw4pA==", - "requires": { - "@vuepress/client": "2.0.0-rc.0", - "@vuepress/markdown": "2.0.0-rc.0", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "vue": "^3.3.8" - } - }, - "@vuepress/markdown": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.0.tgz", - "integrity": "sha512-USmqdKKMT6ZFHYRztTjKUlO8qgGfnEygMAAq4AzC/uYXiEfrbMBLAWJhteyGS56P3rGLj0OPAhksE681bX/wOg==", - "requires": { - "@mdit-vue/plugin-component": "^1.0.0", - "@mdit-vue/plugin-frontmatter": "^1.0.0", - "@mdit-vue/plugin-headers": "^1.0.0", - "@mdit-vue/plugin-sfc": "^1.0.0", - "@mdit-vue/plugin-title": "^1.0.0", - "@mdit-vue/plugin-toc": "^1.0.0", - "@mdit-vue/shared": "^1.0.0", - "@mdit-vue/types": "^1.0.0", - "@types/markdown-it": "^13.0.6", - "@types/markdown-it-emoji": "^2.0.4", - "@vuepress/shared": "2.0.0-rc.0", - "@vuepress/utils": "2.0.0-rc.0", - "markdown-it": "^13.0.2", - "markdown-it-anchor": "^8.6.7", - "markdown-it-emoji": "^2.0.2", - "mdurl": "^1.0.1" - } - }, - "@vuepress/shared": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.0.tgz", - "integrity": "sha512-ikdSfjRv5LGM1iv4HHwF9P6gqTjaFCXKPK+hzlkHFHNZO1GLqk7/BPc4F51tAG1s8TcLhUZc+54LrfgS7PkXXA==", - "requires": { - "@mdit-vue/types": "^1.0.0", - "@vue/shared": "^3.3.8" - } - }, - "@vuepress/utils": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.0.tgz", - "integrity": "sha512-Q1ay/woClDHcW0Qe91KsnHoupdNN0tp/vhjvVLuAYxlv/1Obii7hz9WFcajyyGEhmsYxdvG2sGmcxFA02tuKkw==", - "requires": { - "@types/debug": "^4.1.12", - "@types/fs-extra": "^11.0.4", - "@types/hash-sum": "^1.0.2", - "@vuepress/shared": "2.0.0-rc.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "globby": "^14.0.0", - "hash-sum": "^2.0.0", - "ora": "^7.0.1", - "picocolors": "^1.0.0", - "upath": "^2.0.1" - } - }, - "vuepress-vite": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/vuepress-vite/-/vuepress-vite-2.0.0-rc.0.tgz", - "integrity": "sha512-+2XBejeiskPyr2raBeA2o4uDFDsjtadpUVmtio3qqFtQpOhidz/ORuiTLr2UfLtFn1ASIHP6Vy2YjQ0e/TeUVw==", - "requires": { - "@vuepress/bundler-vite": "2.0.0-rc.0", - "@vuepress/cli": "2.0.0-rc.0", - "@vuepress/core": "2.0.0-rc.0", - "@vuepress/theme-default": "2.0.0-rc.0", - "vue": "^3.3.8" - } - } - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "requires": { - "isexe": "^2.0.0" - } - }, - "yaml": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", - "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==" - } - } -} diff --git a/docs/package.json b/docs/package.json deleted file mode 100644 index 6b0305c5..00000000 --- a/docs/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "BlenderTools", - "version": "0.0.1", - "description": "Blender addons that improve the game development workflow between Blender and Unreal.", - "main": "index.js", - "authors": { - "name": "Epic Games Inc.", - "email": "" - }, - "repository": "https://github.com/EpicGamesExt/BlenderTools", - "scripts": { - "dev-main": "vuepress dev main", - "dev-send2ue": "vuepress dev send2ue", - "dev-ue2rigify": "vuepress dev ue2rigify", - "build": "npm install && rm -f -r dist && vuepress build main && vuepress build send2ue && vuepress build ue2rigify && cp -r ./main/.vuepress/dist ./dist && cp -r ./ue2rigify/.vuepress/dist ./dist/ue2rigify && cp -r ./send2ue/.vuepress/dist ./dist/send2ue" - }, - "license": "MIT", - "dependencies": { - "vuepress": "^2.0.0-rc.0" - }, - "devDependencies": { - "@vuepress/cli": "^2.0.0-beta.66", - "@vuepress/plugin-google-analytics": "^2.0.0-rc.0", - "@vuepress/plugin-palette": "^2.0.0-beta.66" - } -} diff --git a/docs/path.js b/docs/path.js deleted file mode 100644 index 4a10bbcb..00000000 --- a/docs/path.js +++ /dev/null @@ -1,21 +0,0 @@ -const {name} = require('./package') - -export const getRootPath = (addon_name='') => { - if (process.env.PROD === '1') { - if (addon_name !== '') - { - return `/${name}/${addon_name}/` - } else { - return `/${name}/` - } - } - if (process.env.TEST === '1') { - if (addon_name !== '') - { - return `/${addon_name}/` - } else { - return '/' - } - } - return '/' -} diff --git a/docs/send2ue/.vuepress/config.ts b/docs/send2ue/.vuepress/config.ts deleted file mode 100644 index ad4c4e00..00000000 --- a/docs/send2ue/.vuepress/config.ts +++ /dev/null @@ -1,96 +0,0 @@ -const {description, repository} = require('../../package') -const { getRootPath } = require('../../path') -import { defaultTheme } from '@vuepress/theme-default' -import { defineUserConfig } from '@vuepress/cli' -import { palettePlugin } from '@vuepress/plugin-palette' -// @ts-ignore -import { googleAnalyticsPlugin } from '@vuepress/plugin-google-analytics' - - -export default defineUserConfig({ - title: 'Send to Unreal', - description: description, - base: getRootPath('send2ue'), - theme: defaultTheme({ - repo: repository, - docsDir: 'docs/send2ue', - editLinkText: 'Help us improve this page!', - lastUpdated: false, - - navbar: [ - { - text: 'Home', - link: process.env.PROD === '1' ? 'https://epicgamesext.github.io/BlenderTools/' : '/', - target:'_self' - } - ], - sidebar: { - '/': [ - { - text: 'Introduction', - children: [ - '/introduction/quickstart' - ] - }, - { - text: 'Asset Types', - children: [ - '/asset-types/skeletal-mesh', - '/asset-types/static-mesh', - '/asset-types/animation-sequence', - '/asset-types/groom' - ] - }, - { - text: 'Settings', - children: [ - '/settings/paths', - '/settings/export', - '/settings/import', - '/settings/validations', - ] - }, - { - text: 'Customize', - children: [ - '/customize/templates', - '/customize/python-api', - '/customize/extensions' - ] - }, - { - text: 'Supported Extensions', - children: [ - '/extensions/affixes', - '/extensions/combine-assets', - '/extensions/create-post-import-groom-assets', - '/extensions/ue2rigify', - '/extensions/use-immediate-parent-name', - '/extensions/use-collections-as-folders', - '/extensions/instance-assets' - ] - }, - { - text: 'Extras', - children: [ - '/extras/pipeline-menu', - '/extras/addon-preferences', - '/extras/community-extensions', - ] - }, - { - text: 'Trouble Shooting', - children: [ - '/trouble-shooting/faq', - '/trouble-shooting/errors', - ] - } - ], - } - }), - plugins: [ - palettePlugin({preset: 'sass'}), - googleAnalyticsPlugin({id: process.env.GA_ID}) - ] -}) - diff --git a/docs/send2ue/.vuepress/public/images/overview.svg b/docs/send2ue/.vuepress/public/images/overview.svg deleted file mode 100644 index e4264f13..00000000 --- a/docs/send2ue/.vuepress/public/images/overview.svg +++ /dev/null @@ -1,288 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/send2ue/.vuepress/public/images/unreal.png b/docs/send2ue/.vuepress/public/images/unreal.png deleted file mode 100644 index cc9cf783..00000000 Binary files a/docs/send2ue/.vuepress/public/images/unreal.png and /dev/null differ diff --git a/docs/send2ue/.vuepress/styles/index.scss b/docs/send2ue/.vuepress/styles/index.scss deleted file mode 100644 index 26f12822..00000000 --- a/docs/send2ue/.vuepress/styles/index.scss +++ /dev/null @@ -1,10 +0,0 @@ -:root { - // brand colors - --c-brand: #4289b9 !important; - --c-brand-light: #469fcd !important; - - // custom container colors - --c-tip: #469fcd !important; - --c-text-accent: #4289b9 !important; -} - diff --git a/docs/send2ue/asset-types/animation-sequence.md b/docs/send2ue/asset-types/animation-sequence.md index 483ae155..8f375adf 100644 --- a/docs/send2ue/asset-types/animation-sequence.md +++ b/docs/send2ue/asset-types/animation-sequence.md @@ -6,24 +6,25 @@ When creating Animation, Send to Unreal looks for [action strips](https://docs.b The NLA Editor is used to determine several things: 1. Which actions belong to an armature object. -::: tip Note - Actions in blender all exist in the same data block namespace and just contain fcurves values. -It is not until they are set in an object's animation data that a determination can be made that an action belongs to a particular object. -This is different from how unreal AnimSequence assets work. Unreal AnimSequence assets must have an associated skeletal mesh in order to exist. Therefore, -Send to Unreal only exports skeletal mesh animation if the armature object has action strips in its NLA tracks. Also read about the [auto stash active action](https://epicgamesext0.github.io/BlenderTools/send2ue/settings/export.html#auto-stash-active-action) option. -::: +!!! note + + Actions in blender all exist in the same data block namespace and just contain fcurves values. + It is not until they are set in an object's animation data that a determination can be made that an action belongs to a particular object. + This is different from how unreal AnimSequence assets work. Unreal AnimSequence assets must have an associated skeletal mesh in order to exist. Therefore, + Send to Unreal only exports skeletal mesh animation if the armature object has action strips in its NLA tracks. Also read about the [auto stash active action](../settings/export.md#auto-stash-active-action) option. + 2. Which action to export, by checking which NLA tracks are not muted. -::: tip Note - All un-muted strips in the NLA Editor will be sent as an AnimSequence of the skeleton - that is in the `Export` collection. Also read about the [Export All Actions](https://epicgamesext.github.io/BlenderTools/send2ue/settings/export.html#export-all-actions) option. -::: +!!! note + + All un-muted strips in the NLA Editor will be sent as an AnimSequence of the skeleton + that is in the `Export` collection. Also read about the [Export All Actions](../settings/export.md#export-all-actions) option. 3. The start and end of the Unreal Animation, by using the start and end frame of the clip. -::: tip Note - The first frame of the clip is the first frame of the AnimSequence and the end of the - animation will be relative to the start. -::: +!!! note + + The first frame of the clip is the first frame of the AnimSequence and the end of the + animation will be relative to the start. 4. The name of an unreal AnimSequence asset will match the name of its action in blender. @@ -40,46 +41,48 @@ all sent in a single operation. ## Only Animation What if the skeleton and skeletal mesh already exist in your project, and you just want to import animation onto an existing skeleton? That can be done in two ways: (1) by turning off all -import options in the [import settings](/settings/import.html) except for Animations; +import options in the [import settings](../settings/import.md) except for Animations; (2) or by placing only the armature object in the `Export` collection. Both ways require you to set the project path -to the Skeleton asset under the [Paths](https://epicgamesext.github.io/BlenderTools/send2ue/settings/paths.html#skeleton-asset-unreal) +to the Skeleton asset under the [Paths](../settings/paths.md#skeleton-asset-unreal) tab in the settings dialog. ![4](./images/animation/4.gif) -::: tip Tip - An easy way to do this is to right-click the unreal Skeleton asset and click "Copy Reference". -::: +!!! note + + An easy way to do this is to right-click the unreal Skeleton asset and click "Copy Reference". ![5](./images/animation/5.gif) In this case two strips were un-muted, therefore two animations were imported onto the referenced skeleton asset. -::: tip Note - Also if [export all actions](https://epicgamesext.github.io/BlenderTools/send2ue/settings/export.html#export-all-actions) was on, all actions would be exported regardless of their mute values. -::: +!!! note + + Also if [export all actions](../settings/export.md#export-all-actions) was on, all actions would be exported regardless of their mute values. ## Morph Targets Here is an example of how to send shape key animation in blender to unreal as an animated morph target. -::: tip Note - The [export custom property fcurves](https://epicgamesext.github.io/BlenderTools/send2ue/settings/export.html#export-custom-property-fcurves) must be set to true in -order for this to work. Also note that this can apply to any custom property fcurves not just the morph targets fcurve. -::: +!!! note + + The [export custom property fcurves](../settings/export.md#export-custom-property-fcurves) must be set to true in + order for this to work. Also note that this can apply to any custom property fcurves not just the morph targets fcurve. ![6](./images/animation/6.gif) In this example a driver is created so that a custom float property `head_swell` on the armature object drives a shape key value. Furthermore, that custom property value is keyed in the `third_person_walk01` action. -::: tip Note - Both the custom property and the driven shape key must have the same exact name in order for unreal to recognize it! -::: +!!! note + + Both the custom property and the driven shape key must have the same exact name in order for unreal to recognize it! + + +!!! note + + This is what the driver settings look like: + ![7](./images/animation/7.png) -::: tip Note - This is what the driver settings look like: -![7](./images/animation/7.png) -::: Also note that on the Import tab under the FBX import settings `Import Morph Targets` must be set to true. After moving the mannequin mesh and armature into the `Export` collection and running the send to unreal operation, diff --git a/docs/send2ue/asset-types/groom.md b/docs/send2ue/asset-types/groom.md index 926942f3..06d39761 100644 --- a/docs/send2ue/asset-types/groom.md +++ b/docs/send2ue/asset-types/groom.md @@ -1,14 +1,15 @@ # Groom -::: warning Required UE Plugins -Make sure to have the unreal plugins "Alembic Groom Importer" and "Groom" enabled for the addon to work properly. -![3](./images/groom/3.png) -::: +!!! warning + + Required UE Plugins. Make sure to have the unreal plugins "Alembic Groom Importer" and "Groom" enabled for the addon to work properly. + ![3](./images/groom/3.png) + + +!!! warning + + Required UE Project Setting. Make sure to have the setting "Support Compute Skin Cache" turned on in Project Settings > Engine > Rendering > Optimizations for grooms to render properly when bound to a skeletal mesh. ![3](./images/groom/4.png) -::: warning Required UE Project Setting -Make sure to have the setting "Support Compute Skin Cache" turned on in Project Settings > Engine > Rendering > Optimizations for grooms to render properly when bound to a skeletal mesh. -![3](./images/groom/4.png) -::: The tool infers an Unreal groom asset based strictly on the content of your `Export` collection. By default, each particle system of type 'Hair' on each mesh in the collection is exported as an individual alembic file, which is @@ -16,19 +17,21 @@ imported to unreal as a groom asset. ![1](./images/groom/1.png) -::: tip Combining Groom Assets -To gain more control over how particle systems are exported, use the [_combine assets_](https://epicgamesext.github.io/BlenderTools/send2ue/extensions/combine-assets.html) -extension that has options such as _combine groom for each mesh_ and more. -::: +!!! tip + + To gain more control over how particle systems are exported, use the [_combine assets_](../extensions/combine-assets.md) + extension that has options such as _combine groom for each mesh_ and more. + + +!!! warning + + Please give each particle system and curves object a unique name across all meshes. While Blender lets particles on + different meshes share the same name, the addon requires each name to be unique to prevent assets getting overwritten + in Unreal. This is because multiple groom assets can be imported into the same directory in unreal, and any + asset with duplicate names will get overwritten. -::: warning -Please give each particle system and curves object a unique name across all meshes. While Blender lets particles on -different meshes share the same name, the addon requires each name to be unique to prevent assets getting overwritten -in Unreal. This is because multiple groom assets can be imported into the same directory in unreal, and any -asset with duplicate names will get overwritten. + ![2](./images/groom/2.png){: style="width:200px"} -drawing -::: ## Curves Objects @@ -40,12 +43,12 @@ the curves object into a hair particle system on the mesh that it’s surfaced t By default, the groom asset will import along with the mesh asset that it is surfaced to. To run a strictly groom asset import (meaning no other asset types will be exported from blender and imported to unreal), all import options (mesh, -animation, textures) must be turned off in your [import settings](https://epicgamesext.github.io/BlenderTools/send2ue/settings/import.html) except for `Groom`. Alternatively, +animation, textures) must be turned off in your [import settings](../settings/import.md) except for `Groom`. Alternatively, the blender `Curves` objects can be placed in the `Export` collection (without their surface mesh objects) which denotes an exclusive groom workflow as well. ## Binding Assets and More -The addon provides an extension called [create post import assets for groom](https://epicgamesext.github.io/BlenderTools/send2ue/extensions/create-post-import-groom-assets.html) +The addon provides an extension called [create post import assets for groom](../extensions/create-post-import-groom-assets.md) to automatically create unreal assets (such as a binding asset) for the imported groom asset. See the extensions section for more information on its usage. diff --git a/docs/send2ue/asset-types/skeletal-mesh.md b/docs/send2ue/asset-types/skeletal-mesh.md index 765a9461..bf894c48 100644 --- a/docs/send2ue/asset-types/skeletal-mesh.md +++ b/docs/send2ue/asset-types/skeletal-mesh.md @@ -6,10 +6,10 @@ it is doing: ![overview](./images/skeletal-mesh/overview.svg) -::: tip Note - The armature placed in the `Export` collection must be responsible for deformation, meaning only bones that are -skinned to a mesh. No bones used for control schemes should be put in the `Export` collection. -::: +!!! note + + The armature placed in the `Export` collection must be responsible for deformation, meaning only bones that are + skinned to a mesh. No bones used for control schemes should be put in the `Export` collection. ![1](./images/skeletal-mesh/1.gif) @@ -24,7 +24,7 @@ as the skeleton and physics asset with `_Skeleton` and `_PhysicsAsset` post fixe To run a strictly skeletal mesh import(meaning no animation will be exported), the animations import option must be -turned off in your [Import](/settings/import.html#animation) settings. +turned off in your [Import](../settings/import.md#animation) settings. ![3](./images/skeletal-mesh/3.png) @@ -42,22 +42,22 @@ mesh lod settings. ![5](./images/skeletal-mesh/5.png) -::: tip Note - If your mesh has a LOD naming scheme and Import LODs is true, the LOD postfix will get stripped out of the final asset name based on the lod regex. For -example -`SK_Mannequin_LOD0 = SK_Mannequin` -::: +!!! note + + If your mesh has a LOD naming scheme and Import LODs is true, the LOD postfix will get stripped out of the final asset name based on the lod regex. For + example + `SK_Mannequin_LOD0 = SK_Mannequin` Also notice that the LOD build settings can be set under the `Import > Editor Settings > Skeletal Mesh LOD Build Settings` group. ![6](./images/skeletal-mesh/6.png) -::: tip Note - The Editor Settings corresponds to what is available in the [EditorSkeletalMeshLibrary](https://docs.unrealengine.com/4.27/en-US/PythonAPI/class/EditorSkeletalMeshLibrary.html) in the Unreal Python API: -::: +!!! note + + The Editor Settings corresponds to what is available in the [EditorSkeletalMeshLibrary](https://docs.unrealengine.com/4.27/en-US/PythonAPI/class/EditorSkeletalMeshLibrary.html) in the Unreal Python API. ## Only Mesh To run a strictly mesh asset import (ex: excluding import of particle systems as groom assets), all import options -must be turned off in your [import settings](/settings/import.html) except for `Mesh`. +must be turned off in your [import settings](../settings/import.md) except for `Mesh`. diff --git a/docs/send2ue/asset-types/static-mesh.md b/docs/send2ue/asset-types/static-mesh.md index f83d891d..6156e689 100644 --- a/docs/send2ue/asset-types/static-mesh.md +++ b/docs/send2ue/asset-types/static-mesh.md @@ -19,27 +19,28 @@ Unreal will handle exporting and importing each LOD. ![3](./images/static-mesh/3.png) -::: tip Note - If your mesh has a LOD naming scheme and Import LODs is true, the LOD postfix will get stripped out of the final asset name based on the lod regex. For -example: +!!! note -`pCube1_LOD0 = pCube1` + If your mesh has a LOD naming scheme and Import LODs is true, the LOD postfix will get stripped out of the final asset name based on the lod regex. For + example: -`pCube2_lod0_mesh = pCube2` -::: + `pCube1_LOD0 = pCube1` + + `pCube2_lod0_mesh = pCube2` Also notice that the LOD build settings can be set under the `Import > Editor Settings > Static Mesh LOD Build Settings` group. ![4](./images/static-mesh/4.png) -::: tip Note - The Editor Settings corresponds to what is available in the [EditorStaticMeshLibrary](https://docs.unrealengine.com/5.0/en-US/PythonAPI/class/EditorStaticMeshLibrary.html) in the Unreal Python API: -::: +!!! note + + The Editor Settings corresponds to what is available in the [EditorStaticMeshLibrary](https://docs.unrealengine.com/5.0/en-US/PythonAPI/class/EditorStaticMeshLibrary.html) in the Unreal Python API. ## Collisions Simple collision workflows for static meshes are supported by prefixing your collision names with their respective identifiers and making them a child of the mesh. + | Mesh Prefix and Name | Description | | -------------- | ----------------------- | | `UBX_[RenderMeshName]_##` | A Box must be created using a regular rectangular 3D object. You cannot move the vertices around or deform it in any way to make it something other than a rectangular prism, or else it will not work. | @@ -56,9 +57,9 @@ Collisions are imported with the asset that matches the `[RenderMeshName]` after ![6](./images/static-mesh/6.png) -::: tip Note - Collisions must be in the `Export` collection to be exported. -::: +!!! note + + Collisions must be in the `Export` collection to be exported. ## Sockets @@ -70,11 +71,11 @@ Any child mesh that has the pre fix `SOCKET_` in its name will be separately imp ![9](./images/static-mesh/8.png) -::: tip Note - Socket names have the `SOCKET_` prefix stripped out. `SOCKET_socket_01` in blender becomes `socket_01` in unreal. -::: +!!! note + + Socket names have the `SOCKET_` prefix stripped out. `SOCKET_socket_01` in blender becomes `socket_01` in unreal. ## Only Mesh To run a strictly mesh asset import (ex: excluding import of particle systems as groom assets), all import options -must be turned off in your [import settings](/settings/import.html) except for `Mesh`. +must be turned off in your [import settings](../settings/import.md) except for `Mesh`. diff --git a/docs/send2ue/customize/extensions.md b/docs/send2ue/customize/extensions.md index 9be43f1f..324b5a2e 100644 --- a/docs/send2ue/customize/extensions.md +++ b/docs/send2ue/customize/extensions.md @@ -1,29 +1,31 @@ # Extensions -::: warning -This feature set is still very new and could be subject to change. -::: +!!! warning -::: tip Supported Extensions -See the Supported Extensions section for details on extensions that ship with the Send to Unreal addon -and are supported by this repository. -::: + This feature set is still very new and could be subject to change. + + +!!! tip + + See the Supported Extensions section for details on extensions that ship with the Send to Unreal addon + and are supported by this repository. Extensions provide a python interface for Send to Unreal users to quickly and cleanly extend its functionality with a minimal amount of code. Within an extension class several things can be defined: -* [Tasks](/customize/extensions.html#tasks) -* [Properties](/customize/extensions.html#properties) -* [Draws](/customize/extensions.html#draws) + +* [Tasks](#tasks) +* [Properties](#properties) +* [Draws](#draws) ![1](./images/extensions/1.svg) In this diagram each blue arrow that plugs into a blue block represents how the extension factory takes pieces of your extension class and plugs in its logic within the send to unreal operation. -::: tip Note - The queue can run many asset tasks, therefore the extension logic added in the asset task area will be fired as many -times as there are assets. However, anything outside the asset task will be run once per send to unreal operation. -::: +!!! note + + The queue can run many asset tasks, therefore the extension logic added in the asset task area will be fired as many + times as there are assets. However, anything outside the asset task will be run once per send to unreal operation. ## Example Here is a simple example @@ -59,11 +61,11 @@ that prints out the asset data of the mesh, and a validation that checks to ensu equal to "Hello world", otherwise it returns False which terminates the send to unreal operation execution. -::: tip Note - At minimum, an extension must have the class attribute `name` defined. Everything else is optional. A more -advanced extension example is available -[here](https://github.com/EpicGamesExt/BlenderTools/blob/master/tests/test_files/send2ue_extensions/example_extension.py). -::: +!!! note + + At minimum, an extension must have the class attribute `name` defined. Everything else is optional. A more + advanced extension example is available + [here](https://github.com/poly-hammer/BlenderTools/blob/master/tests/test_files/send2ue_extensions/example_extension.py). ### Installation Save the extension code in a folder. This folder is know as the `Extensions Repo Folder`. You can place as many extensions @@ -74,14 +76,25 @@ in this folder as needed. In this example, the file is saved to`C:\extension_rep Then in the Send to Unreal addon preferences set the `Extensions Repo Folder` to `C:\extension_repo`. Then click the `Reload Extensions` button. -::: tip Note - Alternatively, this can be installed with python: -```python -# this is handy for reloading your changes as you develop extensions -bpy.context.preferences.addons['send2ue'].preferences.extensions_repo_path = 'C:\extension_repo' -bpy.ops.send2ue.reload_extensions() -``` -::: +!!! note + + Alternatively, this can be installed with python: + ```python + # this is handy for reloading your changes as you develop extensions + import bpy + from pathlib import Path + + my_extension_folder = r'C:\extension_repo' + preferences = bpy.context.preferences.addons['send2ue'].preferences + for extension_folder in preferences.extension_folder_list: + if Path(extension_folder.folder_path) == Path(my_extension_folder): + break + else: + extension_folder = preferences.extension_folder_list.add() + extension_folder.folder_path = my_extension_folder + + bpy.ops.send2ue.reload_extensions() + ``` ### Test Now when we use Send to Unreal to with the default cube, we can see the `asset_data` dictionary printing in the @@ -91,7 +104,7 @@ console and that the cube got sent to the `/Game/example_extension/test/` folder This same approach can be applied to many other use cases where you need to extend the Send to Unreal operation. For practical examples check out the -[send2ue/resources](https://github.com/EpicGamesExt/BlenderTools/tree/master/send2ue/resources/extensions) folder. +[send2ue/resources](https://github.com/poly-hammer/BlenderTools/tree/master/src/addons/send2ue/resources/extensions) folder. ## Tasks Tasks contain logic for key points within the runtime of the send to unreal @@ -208,9 +221,9 @@ class ExampleExtension(ExtensionBase): name = 'example' hello_property: bpy.props.StringProperty(default='Hello world') ``` -::: tip Note - Properties can be any property type in `bpy.props` -::: +!!! note + + Properties can be any property type in `bpy.props` All properties defined in the extension class get registered as a sub property group within the `send2ue` scene data hierarchy. In the above example, the `hello_property` could be accessed within an @@ -223,10 +236,10 @@ Or globally like: bpy.context.scene.send2ue.extensions.example.hello_property ``` -::: tip Note - Extension properties get saved when the blend file is saved, and can have their values saved to templates -just like the default properties that exist in the Send to Unreal tool. -::: +!!! note + + Extension properties get saved when the blend file is saved, and can have their values saved to templates + just like the default properties that exist in the Send to Unreal tool. ## Asset Data Dictionary During the life cycle of the Send to Unreal operation a dictionary `asset_data` is created that contains all assets @@ -234,10 +247,10 @@ that will be sent in the operation. Per asset, data gets fetched and passed into param in certain extension task methods. i.e `pre_mesh_export(self, asset_data, properties)`. -::: tip Note - Any `asset_data` dictionary value that is prefixed with `_` i.e. `_asset_type` etc. has no effect on how Send to Unreal uses -that data. However, changing values not prefixed with an underscore will change the Send to Unreal behavior. -::: +!!! note + + Any `asset_data` dictionary value that is prefixed with `_` i.e. `_asset_type` etc. has no effect on how Send to Unreal uses + that data. However, changing values not prefixed with an underscore will change the Send to Unreal behavior. Here is an example of a potential renaming use case. ```python @@ -257,9 +270,9 @@ class ExampleExtension(ExtensionBase): Here you can see that we forced a rename of the asset by changing the fbx name, then we updated the asset path so that Send to Unreal would still have a reference to the imported asset. -::: tip Note - In order for the `asset_data` to be updated you must call `self.update_asset_data(asset_data)` like shown above. -::: +!!! note + + In order for the `asset_data` to be updated you must call `self.update_asset_data(asset_data)` like shown above. This is what the Mesh's `asset_data` looks like from the example above after being modified: ```python @@ -276,10 +289,10 @@ This is what the Mesh's `asset_data` looks like from the example above after bei 'sockets': {} } ``` -::: warning -Modifying this dictionary incorrectly will produce errors. You must implement your own validations to ensure this -is modified correctly. -::: +!!! warning + + Modifying this dictionary incorrectly will produce errors. You must implement your own validations to ensure this + is modified correctly. ## Draws Defining draws for your extension is a way to make your extension properties available to be edited by the user. @@ -329,10 +342,9 @@ There is a submodule within `send2ue` that can be used to make your own rpc call a basic example of how you can force an asset to be renamed in the `post_import` method of an extension. ```python from send2ue.core.extension import ExtensionBase -from send2ue.dependencies.unreal import remote_unreal_decorator +from send2ue.dependencies.rpc.factory import make_remote -@remote_unreal_decorator def rename_unreal_asset(source_asset_path, destination_asset_path): if unreal.EditorAssetLibrary.does_asset_exist(destination_asset_path): unreal.EditorAssetLibrary.delete_asset(destination_asset_path) @@ -342,15 +354,14 @@ class ExampleExtension(ExtensionBase): name = 'example' def post_import(self): asset_path = self.asset_data[self.asset_id]['asset_path'] - rename_unreal_asset(asset_path, f'{asset_path}_renamed_again') + remote_rename_unreal_asset = make_remote(rename_unreal_asset) + remote_rename_unreal_asset(asset_path, f'{asset_path}_renamed_again') ``` -Notice how you can define remote unreal functions on the fly by just wrapping your function -with the `remote_unreal_decorator`. The RPC library has a factory that takes care of teleporting -your code and imports over to the open unreal editor. - -::: tip Note - RPC calls must be defined as function or a staticmethod of a class, and only basic python data types -can be marshalled through the function parameters. No object params or kwargs are excepted. -::: +Notice how you can define remote unreal functions on the fly by just passing a function reference to the `make_remote` function. The RPC library has a factory that takes care of teleporting your code and imports over to the open unreal editor. + +!!! note + + RPC calls must be defined as function or a staticmethod of a class, and only basic python data types + can be marshalled through the function parameters. No object params or kwargs are excepted. diff --git a/docs/send2ue/customize/images/extensions/2.png b/docs/send2ue/customize/images/extensions/2.png index 0b78bc02..36224386 100644 Binary files a/docs/send2ue/customize/images/extensions/2.png and b/docs/send2ue/customize/images/extensions/2.png differ diff --git a/docs/send2ue/customize/images/templates/1.gif b/docs/send2ue/customize/images/templates/1.gif index 041ccd68..dedaff75 100644 Binary files a/docs/send2ue/customize/images/templates/1.gif and b/docs/send2ue/customize/images/templates/1.gif differ diff --git a/docs/send2ue/customize/images/templates/2.gif b/docs/send2ue/customize/images/templates/2.gif index eb49d38a..63ce7394 100644 Binary files a/docs/send2ue/customize/images/templates/2.gif and b/docs/send2ue/customize/images/templates/2.gif differ diff --git a/docs/send2ue/customize/python-api.md b/docs/send2ue/customize/python-api.md index 1fe0eb5a..2ad8611e 100644 --- a/docs/send2ue/customize/python-api.md +++ b/docs/send2ue/customize/python-api.md @@ -9,10 +9,10 @@ All of the properties can be accessed directly on the following scene data objec bpy.context.scene.send2ue ``` -::: tip Note - This scene property data is persistent and stored within your blend file. If your blend file is saved, -then the state of your scene properties gets saved into the file as well. -::: +!!! note + + This scene property data is persistent and stored within your blend file. If your blend file is saved, + then the state of your scene properties gets saved into the file as well. To find the name of the property you want to read or edit, you can use the blender python console and the tab key to list the properties, or open the Send to Unreal Settings Dialog and hover on a property. Under the tool tip you will see the API reference for @@ -84,33 +84,47 @@ bpy.ops.send2ue.start_rpc_servers() ## Examples -::: tip Change Template Example - Here is how you could automate loading a settings template from a file and making it the active template. -```python -import bpy +!!! tip -# load the file into the template folder location -bpy.ops.send2ue.load_template(filepath=r'C:/some/file/path/my_template.json') + Here is how you could automate loading a settings template from a file and making it the active template. + ```python + import bpy -# set the active template which modifies the state of the properties -bpy.context.scene.send2ue.active_settings_template = 'my_template.json' -``` -::: + # load the file into the template folder location + bpy.ops.send2ue.load_template(filepath=r'C:/some/file/path/my_template.json') -::: tip Change Properties Example - Here is how you could use Python to dynamically change the mesh import folder of your asset. -```python -import bpy + # set the active template which modifies the state of the properties + bpy.context.scene.send2ue.active_settings_template = 'my_template.json' + ``` -# set the mesh import folder -folder_name = some_custom_function_that_gets_a_folder_name() -bpy.context.scene.send2ue.unreal_mesh_folder_path = f'/Game/{folder_name}/' +!!! tip -# run send to unreal -bpy.ops.wm.send2ue() -``` -::: + Here is how you could use Python to dynamically change the mesh import folder of your asset. + ```python + import bpy + + # set the mesh import folder + folder_name = some_custom_function_that_gets_a_folder_name() + bpy.context.scene.send2ue.unreal_mesh_folder_path = f'/Game/{folder_name}/' + + # run send to unreal + bpy.ops.wm.send2ue() + ``` + +!!! tip + + Here is how you could use Python to override what objects are collected. + ```python + import bpy + + # override what objects are collected + bpy.context.window_manager.send2ue.object_collection_override.extend([ + bpy.data.objects['Cube'] + ]) + # run send to unreal + bpy.ops.wm.send2ue() + ``` The same process can be used to dynamically set any property on the Send to Unreal tool. diff --git a/docs/send2ue/customize/templates.md b/docs/send2ue/customize/templates.md index f148104b..e51d9335 100644 --- a/docs/send2ue/customize/templates.md +++ b/docs/send2ue/customize/templates.md @@ -21,7 +21,7 @@ template that has been configured to for LODs. Click `Load` then choose the loca ![2](./images/templates/2.gif) -::: tip Note - The properties won't change until the active template is selected from the dropdown. Loading the template -makes the template available in the dropdown, but does not modify the properties. -::: +!!! note + + The properties won't change until the active template is selected from the dropdown. Loading the template + makes the template available in the dropdown, but does not modify the properties. diff --git a/docs/send2ue/extensions/affixes.md b/docs/send2ue/extensions/affixes.md index 6e9643bd..cac9ef61 100644 --- a/docs/send2ue/extensions/affixes.md +++ b/docs/send2ue/extensions/affixes.md @@ -2,6 +2,7 @@ The Affixes extension provides a convenient way to enforce prefix or postfix naming conventions on assets of a particular type. Currently, supported asset types are: + * `Static Mesh` * `Skeletal Mesh` * `Animation Sequence` @@ -18,9 +19,9 @@ If true, this will automatically remove the affixes (prefix/suffix) by renaming `Export` collection after the Send to Unreal operation runs. -::: tip Note - This will rename the objects in Blender, like Meshes, Textures, Materials and Actions. Be aware that this will also rename the texture image files on your hard-disk. -::: +!!! note + + This will rename the objects in Blender, like Meshes, Textures, Materials and Actions. Be aware that this will also rename the texture image files on your hard-disk. ## UI The settings can be found under the `Export` tab diff --git a/docs/send2ue/extensions/combine-assets.md b/docs/send2ue/extensions/combine-assets.md index f74b1c9d..72cb8baf 100644 --- a/docs/send2ue/extensions/combine-assets.md +++ b/docs/send2ue/extensions/combine-assets.md @@ -11,23 +11,23 @@ options, each provides a different way to customize your export. #### _off_ This exports each object and particle system in the `Export` collection as individual assets. -off +![](./images/combine-assets/off.png){style: "width: 400;"} #### _child meshes_ For each empty object or armature parent, this combines its child meshes into a single mesh when exported. -child_meshes +![](./images/combine-assets/child_meshes.png){style: "width: 400;"} #### _groom per mesh_ For each mesh in the Export collection, this combines every hair objects/systems surfaced on the mesh as a single groom asset. -groom_per_mesh +![](./images/combine-assets/groom_per_mesh.png){style: "width: 400;"} #### _groom per combined mesh_ For each empty object or armature parent, this combines its child meshes into a single mesh when exported. For each combined mesh, all hair objects/systems surfaced on it export as a single groom asset. -groom_per_combined_mesh +![](./images/combine-assets/groom_per_combined_mesh.png){style: "width: 400;"} ## UI The settings can be found under the `Export` tab @@ -40,27 +40,26 @@ will be combined into one static mesh using the name of the empty. In this example the name of the combine static mesh in unreal would be `CombinedCubes` -::: tip Note - When using this with custom collisions, each collision name must correspond to each mesh name, not the final -combined Static Mesh asset name. +!!! note -In this example the final name of the combined asset is `S_Boards_Platform_1x1` and all the collisions below match -to each mesh within the combined asset. + When using this with custom collisions, each collision name must correspond to each mesh name, not the final + combined Static Mesh asset name. -![3](./images/combine-assets/3.png) + In this example the final name of the combined asset is `S_Boards_Platform_1x1` and all the collisions below match + to each mesh within the combined asset. -::: + ![3](./images/combine-assets/3.png) ## Skeletal Meshes For options _**child meshes**_, and **_groom per combined mesh_**, all child meshes under an armature will be combined into one skeletal mesh using the name of the first child mesh in alphanumerical order by object name (the default order of objects in the blender outliner). -::: tip Note - This might not give you enough control over the skeletal mesh name, so using the -[immediate parent name](https://epicgamesext.github.io/BlenderTools/send2ue/extensions/use-immediate-parent-name.html) -extension can be useful. -::: +!!! note + + This might not give you enough control over the skeletal mesh name, so using the + [immediate parent name](use-immediate-parent-name.md) + extension can be useful. ![2](./images/combine-assets/2.png) diff --git a/docs/send2ue/extensions/create-post-import-groom-assets.md b/docs/send2ue/extensions/create-post-import-groom-assets.md index e9399a61..0120687e 100644 --- a/docs/send2ue/extensions/create-post-import-groom-assets.md +++ b/docs/send2ue/extensions/create-post-import-groom-assets.md @@ -8,7 +8,7 @@ imported groom asset. ### Groom Binding Asset This creates a binding asset for the imported groom asset. The target skeletal mesh is the hair's surface mesh in blender that is part of the same import. For this option to work correctly, the _import mesh_ and _import groom_ options in the -[import settings](https://epicgamesext.github.io/BlenderTools/send2ue/settings/import.html) must be turned on. +[import settings](../settings/import.md) must be turned on. The binding asset will use the name of the groom asset and the name of the target skeletal mesh post fixed with `_Binding`. Note this is the unreal convention of naming binding assets. @@ -16,9 +16,9 @@ Note this is the unreal convention of naming binding assets. For example, a groom asset sourced from a particle system named `hair` with a surface mesh named `SK_Mannequin_Female` will yield a binding asset named `hair_SK_Mannequin_Female_Binding`. -::: tip Note -A binding asset can only be created when the groom's surface mesh is a [skeletal mesh](https://epicgamesext.github.io/BlenderTools/send2ue/asset-types/skeletal-mesh.html). -::: +!!! note + + A binding asset can only be created when the groom's surface mesh is a [skeletal mesh](../asset-types/skeletal-mesh.md). ### Blueprint Asset with Groom This creates a blueprint asset for each imported skeletal mesh and its surface hairs. The blueprint asset will have @@ -29,13 +29,13 @@ blueprint asset uses the name of the skeletal mesh asset with a postfix `_BP`. There are multiple hair systems surfaced on the mesh object `SK_Mannequin`, which results in a groom component created for each groom asset imported. - 2 +![2](./images/create-post-import-groom-assets/2.png){: style="width:400px"} + +!!! note -::: tip Note -Each groom component is automatically populated with a groom asset and a binding asset that connects the groom to the -skeletal mesh in the skeletal mesh component. For this reason, the _**binding asset**_ option must be turned -on for the _**blueprint asset with groom binding**_ option to work correctly. -::: + Each groom component is automatically populated with a groom asset and a binding asset that connects the groom to the + skeletal mesh in the skeletal mesh component. For this reason, the _**binding asset**_ option must be turned + on for the _**blueprint asset with groom binding**_ option to work correctly. ## UI The settings can be found under the `Import` tab diff --git a/docs/send2ue/extensions/instance-assets.md b/docs/send2ue/extensions/instance-assets.md index b3e75956..1006954f 100644 --- a/docs/send2ue/extensions/instance-assets.md +++ b/docs/send2ue/extensions/instance-assets.md @@ -7,6 +7,7 @@ the object in the blender scene. Spawns assets in the active level at the same location they are positioned in the blender scene. This is only supported for the following asset types: + * `StaticMesh` * `SkeletalMesh` * `AnimSequence` diff --git a/docs/send2ue/extensions/use-collections-as-folders.md b/docs/send2ue/extensions/use-collections-as-folders.md index 84a2df23..f7314928 100644 --- a/docs/send2ue/extensions/use-collections-as-folders.md +++ b/docs/send2ue/extensions/use-collections-as-folders.md @@ -8,6 +8,6 @@ When active, this uses the collection hierarchy in your scene as sub folders fro ## UI The settings can be found under the `Paths` tab -::: warning Exclusive Usage Extension -_Use Collections as Folders_ is an **exclusive usage extension**, which means that an error will be raised if it is used in combination with another exclusive usage extension. -::: +!!! warning + + Exclusive Usage Extension. Use `Collections as Folders` is an **exclusive usage extension**, which means that an error will be raised if it is used in combination with another exclusive usage extension. diff --git a/docs/send2ue/extensions/use-immediate-parent-name.md b/docs/send2ue/extensions/use-immediate-parent-name.md index a2e818ba..58a6a4e0 100644 --- a/docs/send2ue/extensions/use-immediate-parent-name.md +++ b/docs/send2ue/extensions/use-immediate-parent-name.md @@ -5,21 +5,20 @@ Gives the user more control over the naming of the assets sent to unreal with th ### use immediate parent name When active, this makes the immediate parent the name of the asset if the immediate parent is a collection or an empty type object. This setting can be used concurrently with import LODs or combine meshes. -0 +![](./images/use-immediate-parent-name/0.png){style: "width: 250;"} In the outliner pictured above, the imported static mesh would be named `Empty_Parent` -::: tip Note +!!! note A mesh under an armature will take the name of the armature's immediate parent if the immediate parent is an empty type object or a collection. -1 +![](./images/use-immediate-parent-name/1.png){style: "width: 250;"} In the outliner pictured above, the imported skeletal mesh would be named `SK_Collection` -::: ### UI The settings can be found under the `Paths` tab -::: warning Exclusive Usage Extension -_Use Immediate Parent Name_ is an **exclusive usage extension**, which means that an error will be raised if it is used in combination with another exclusive usage extension. -::: +!!! warning + + Exclusive Usage Extension. `Use Immediate Parent Name` is an **exclusive usage extension**, which means that an error will be raised if it is used in combination with another exclusive usage extension. diff --git a/docs/send2ue/extras/addon-preferences.md b/docs/send2ue/extras/addon-preferences.md index d27f0d8c..038fa59c 100644 --- a/docs/send2ue/extras/addon-preferences.md +++ b/docs/send2ue/extras/addon-preferences.md @@ -10,10 +10,10 @@ The amount of seconds that blender stops waiting for an unreal response after it need to be increased if you plan on importing really large assets, where the import could be longer then the timeout value. -::: warning -It is not recommended to set the timeout too high. The timeout is a safeguard against freezing blender and unreal -indefinitely. -::: +!!! warning + + It is not recommended to set the timeout too high. The timeout is a safeguard against freezing blender and unreal + indefinitely. ### Extensions Repo Path Set this path to the folder that contains your Send to Unreal python extensions. All extensions in this folder diff --git a/docs/send2ue/extras/images/pipeline-menu/1.png b/docs/send2ue/extras/images/pipeline-menu/1.png index fe454ee0..1ac92721 100644 Binary files a/docs/send2ue/extras/images/pipeline-menu/1.png and b/docs/send2ue/extras/images/pipeline-menu/1.png differ diff --git a/docs/send2ue/index.md b/docs/send2ue/index.md index d5836264..07450d92 100644 --- a/docs/send2ue/index.md +++ b/docs/send2ue/index.md @@ -1,31 +1,25 @@ ---- -home: true -heroText: Send to Unreal -tagline: A one-click solution for sending data from Blender to Unreal Engine. -actions: - - text: Quick Start - link: /introduction/quickstart -features: -- title: Static Meshes - details: Supports static mesh workflows with lods, mesh origins, and batched exports. -- title: Skeletal Meshes - details: Bring a skeletal mesh into unreal with its lods and customized lod build settings. -- title: Animation Sequences - details: Batch export or send individual animations directly to the editor. -- title: Grooms - details: Batch export or send individual hair systems as alembic files to the editor as groom assets. -footer: Copyright © Epic Games Inc. ---- -## Overview +# Send to Unreal +A one-click solution for sending data from Blender to Unreal Engine. -overview +[Quick Start](introduction/quickstart.md) + +## Features +* ### Static Meshes + Supports static mesh workflows with lods, mesh origins, and batched exports. +* ### Skeletal Meshes + Bring a skeletal mesh into unreal with its lods and customized lod build settings. +* ### Animation Sequences + Batch export or send individual animations directly to the editor. +* ### Grooms + Batch export or send individual hair systems as alembic files to the editor as groom assets. +## Overview The reason our tool can provide a "one-click" solution for these assets is because it can automatically infer the correct unreal asset type based on just the contents of a single `Export` collection. That, along with giving the user the ability to customize and share settings templates, allows assets and scenes to be completely configured ahead of time. A saved file can be opened by an artist and in one-click they can have their assets in unreal engine. The main purpose of this tool is for rapid iteration and standardization of asset workflows. If you are interested in learning more, please read through the rest of our documentation -starting with our [quickstart guide](./introduction/quickstart) +starting with our [quickstart guide](introduction/quickstart.md) ## Help us document Our goal is for this documentation to be completely comprehensive so that it can be fully self-serving. If you notice any part of it to be incorrect, unclear, outdated, or missing diff --git a/docs/send2ue/introduction/images/8.png b/docs/send2ue/introduction/images/8.png index ba17d84d..e69de2b8 100644 Binary files a/docs/send2ue/introduction/images/8.png and b/docs/send2ue/introduction/images/8.png differ diff --git a/docs/send2ue/introduction/quickstart.md b/docs/send2ue/introduction/quickstart.md index d8923267..9a464e9b 100644 --- a/docs/send2ue/introduction/quickstart.md +++ b/docs/send2ue/introduction/quickstart.md @@ -1,15 +1,9 @@ # Quickstart This quick start guide will help you get up and running with Send to Unreal. -First thing you need to do is download the latest versioned zip file from the [releases page](https://github.com/EpicGamesExt/BlenderTools/releases?q=Send+to+unreal&expanded=true) +First thing you need to do is download the latest versioned zip file from the [releases page](https://github.com/poly-hammer/BlenderTools/releases?q=Send+to+unreal&expanded=true) under the `Assets` dropdown. The zip file name will start with `send2ue`. -::: tip Note - If you get a 404 error when you click the link above, then you will need to sign in to your github account and link -it with your Epic Games account. Here is a [link with instructions](https://www.unrealengine.com/en-US/ue4-on-github) -on how to link your accounts. -::: - Next install the addon in Blender. Go to `Edit > Preferences` then to the addons tab. Click `install`. ![1](./images/1.png) @@ -51,7 +45,16 @@ Once you have enabled the plugins and project settings, you'll be prompted to re ![7](./images/7.png) -Search for "python" and then enable remote execution. Now Send to Unreal will work with your new Unreal project. +Search for "python" and then enable `remote execution` and set the Multicast bind address to `0.0.0.0` if you are not using a Windows machine, otherwise leave this set to `127.0.0.1`. Now Send to Unreal will work with your new Unreal project. + +!!! note + + For Unreal 5.5 and higher, the default FBX Importer should be set to use the Legacy FBX Importer. This can be done by changing the project's `DefaultEngine.ini` file to contain. + ```ini + [ConsoleVariables] + Interchange.FeatureFlags.Import.FBX=False + ``` + ![8](./images/8.png) @@ -78,9 +81,9 @@ Click `Pipeline > Export > Send to Unreal`. ![13](./images/13.png) -::: tip Note - On Windows, if you see a security alert, go ahead and allow Blender on your private network. -::: +!!! note + + On Windows, if you see a security alert, go ahead and allow Blender on your private network. You should now see the cube in unreal under `/untitled category/untitled asset/Cube`. @@ -91,4 +94,4 @@ Congrats, Send to Unreal is now working! To customize Send to Unreal to your nee `Pipeline > Export > Settings Dialog`. Here you can customize the paths for exports and imports as well as the export and import settings, and validations. -15 +![15](./images/15.png) diff --git a/docs/send2ue/mkdocs.yml b/docs/send2ue/mkdocs.yml new file mode 100644 index 00000000..bd43fb6b --- /dev/null +++ b/docs/send2ue/mkdocs.yml @@ -0,0 +1,34 @@ +site_name: send2ue +docs_dir: '.' +nav: + - Overview: "./index.md" + - Quick Start: "./introduction/quickstart.md" + - Asset Types: + - Static Mesh: "./asset-types/static-mesh.md" + - Skeletal Mesh: "./asset-types/skeletal-mesh.md" + - Anim Sequence: "./asset-types/animation-sequence.md" + - Groom: "./asset-types/groom.md" + - Settings: + - Paths: "./settings/paths.md" + - Export: "./settings/export.md" + - Import: "./settings/import.md" + - Validations: "./settings/validations.md" + - Customize: + - Templates: "./customize/templates.md" + - Python API: "./customize/python-api.md" + - Extensions: "./customize/extensions.md" + - Supported Extensions: + - Affixes: "./extensions/affixes.md" + - Combine Assets: "./extensions/combine-assets.md" + - Create Post Import Groom Assets: "./extensions/create-post-import-groom-assets.md" + - UE to Rigify: "./extensions/ue2rigify.md" + - Use Immediate Parent Name: "./extensions/use-immediate-parent-name.md" + - Use Collections as Folders: "./extensions/use-collections-as-folders.md" + - Instance Assets: "./extensions/instance-assets.md" + - Extras: + - Pipeline Menu: "./extras/pipeline-menu.md" + - Addon Preferences: "./extras/addon-preferences.md" + - Community Extensions: "./extras/community-extensions.md" + - Trouble Shooting: + - Community Extensions: "./trouble-shooting/faq.md" + - Errors: "./trouble-shooting/errors.md" \ No newline at end of file diff --git a/docs/send2ue/settings/import.md b/docs/send2ue/settings/import.md index 86a91970..a8865922 100644 --- a/docs/send2ue/settings/import.md +++ b/docs/send2ue/settings/import.md @@ -17,15 +17,15 @@ Whether or not to export groom as an alembic file and import to unreal. #### Launch Import UI When enabled this option launches the import UI in Unreal. -::: tip Note - This will launch the Import UI on the first import of the asset, however it will not launch the UI again on a -reimport. If you want to reimport an asset with new custom settings, the recommendation is to delete the asset in your -unreal project and then just run Send to Unreal again. -::: +!!! note + + This will launch the Import UI on the first import of the asset, however it will not launch the UI again on a + reimport. If you want to reimport an asset with new custom settings, the recommendation is to delete the asset in your + unreal project and then just run Send to Unreal again. ## LOD Settings The section contains the settings related to LOD workflows. You can read more about these under the -[Skeletal Mesh](/asset-types/skeletal-mesh.html#lods) and [Static Mesh](/asset-types/static-mesh.html#lods) pages. +[Skeletal Mesh](../asset-types/skeletal-mesh.md#lods) and [Static Mesh](../asset-types/static-mesh.md#lods) pages. #### LODs Whether or not to export the custom LODs diff --git a/docs/send2ue/settings/paths.md b/docs/send2ue/settings/paths.md index 60777829..15244002 100644 --- a/docs/send2ue/settings/paths.md +++ b/docs/send2ue/settings/paths.md @@ -10,30 +10,30 @@ Sends the intermediate files to a temporary location on disk and then imports th the Unreal Project. This doesn't require any extra configuration, but might not be ideal if your intermediate files need to be under source control. -1 +![](./images/paths/1.png){style: "width: 500;"} ### Send to Disk Sends the intermediate files to a specified location on disk and does not import them. -2 +![](./images/paths/2.png){style: "width: 500;"} ### Send to Disk then Project Sends the intermediate files to a specified location on disk and then imports them into the Unreal Project. This requires extra paths to be configured, but is ideal if your intermediate files need to be under source control. -3 +![](./images/paths/3.png){style: "width: 500;"} ## Relative Paths When specifying a location on disk with either the `Send to Disk` or `Send to Disk then Project`, relative paths can be used if the blender file is saved. The paths are relative to the currently open blender file. -4 +![](./images/paths/4.png){style: "width: 500;"} -::: tip Note - A relative disk path is relative to where the blend file is saved on disk. -::: +!!! note + + A relative disk path is relative to where the blend file is saved on disk. ## Path Properties #### Mesh Folder (Unreal): diff --git a/docs/send2ue/trouble-shooting/errors.md b/docs/send2ue/trouble-shooting/errors.md index 8e10c953..8becd7e7 100644 --- a/docs/send2ue/trouble-shooting/errors.md +++ b/docs/send2ue/trouble-shooting/errors.md @@ -8,9 +8,9 @@ if it is blocked by another application. ### You do not have a collection "Export" in your outliner. Please create it. You will receive this error if you do not have an "Export" set in your outliner. To fix this go to -`Pipeline > Utilites > Create Pre-Defined Collections`. +`Pipeline > Utilities > Create Pre-Defined Collections`. ### NoOptionError: No option 'r.skincache.compileshaders' The option "Support Compute Skin Cache" is required for groom imports. If you have this project setting on but consistently receive this error, consider turning off the "Check project settings" validation in -send to unreal validations settings. This issue has been reported by users in [#533](https://github.com/EpicGamesExt/BlenderTools/issues/533). +send to unreal validations settings. \ No newline at end of file diff --git a/docs/ue2rigify/.vuepress/config.ts b/docs/ue2rigify/.vuepress/config.ts deleted file mode 100644 index 0b2d2424..00000000 --- a/docs/ue2rigify/.vuepress/config.ts +++ /dev/null @@ -1,76 +0,0 @@ -const {description, repository} = require('../../package') -const { getRootPath } = require('../../path') -import { defaultTheme } from '@vuepress/theme-default' -import { defineUserConfig } from '@vuepress/cli' -import { palettePlugin } from '@vuepress/plugin-palette' -// @ts-ignore -import { googleAnalyticsPlugin } from '@vuepress/plugin-google-analytics' - - -export default defineUserConfig({ - title: 'UE to Rigify', - description: description, - base: getRootPath('ue2rigify'), - theme: defaultTheme({ - repo: repository, - docsDir: 'docs/ue2rigify', - editLinkText: 'Help us improve this page!', - lastUpdated: false, - - navbar: [ - { - text: 'Home', - link: process.env.PROD === '1' ? 'https://epicgamesext.github.io/BlenderTools/' : '/', - target:'_self' - } - ], - sidebar: { - '/': [ - { - text: 'Introduction', - children: [ - '/introduction/quickstart' - ] - }, - { - text: 'Concepts', - children: [ - '/concepts/modes', - '/concepts/templates' - ] - }, - { - text: 'Usage', - children: [ - '/usage/animation', - '/usage/new-template-example' - ] - }, - { - text: 'Advanced', - children: [ - '/advanced/relink-constraints' - ] - }, - { - text: 'Extras', - children: [ - '/extras/community-templates' - ] - }, - { - text: 'Trouble Shooting', - children: [ - '/trouble-shooting/faq', - '/trouble-shooting/errors', - ] - } - ], - } - }), - plugins: [ - palettePlugin({preset: 'sass'}), - googleAnalyticsPlugin({id: process.env.GA_ID}) - ] -}) - diff --git a/docs/ue2rigify/.vuepress/styles/index.scss b/docs/ue2rigify/.vuepress/styles/index.scss deleted file mode 100644 index 3fa2aaa0..00000000 --- a/docs/ue2rigify/.vuepress/styles/index.scss +++ /dev/null @@ -1,9 +0,0 @@ -:root { - // brand colors - --c-brand: #4289b9 !important; - --c-brand-light: #469fcd !important; - - // custom container colors - --c-tip: #469fcd !important; - --c-text-accent: #4289b9 !important; -} diff --git a/docs/ue2rigify/advanced/relink-constraints.md b/docs/ue2rigify/advanced/relink-constraints.md index 66352232..fd822520 100644 --- a/docs/ue2rigify/advanced/relink-constraints.md +++ b/docs/ue2rigify/advanced/relink-constraints.md @@ -1,9 +1,5 @@ # Relink Constraints -
- -
- [UE to Rigify Customization](https://docs.blender.org/manual/en/latest/addons/rigging/rigify/rig_types/basic.html) allows retargeting constraints belonging to the bone to point at bones created in the process of generating the rig, thus allowing custom rigging to integrate with generated bones. diff --git a/docs/ue2rigify/concepts/modes.md b/docs/ue2rigify/concepts/modes.md index 4743c2e5..5df4dc1d 100644 --- a/docs/ue2rigify/concepts/modes.md +++ b/docs/ue2rigify/concepts/modes.md @@ -14,10 +14,10 @@ These modes become available as soon as you select a "Source" rig. ![2](./images/modes/2.jpg) -::: tip Note -Your "Source" rig is the rig that you create in blender or the rig that you import into blender that has the skinned -to mesh attached to it. The idea of UE to Rigify is that you want to drive the "Source" rig with your "Control" rig. -::: +!!! note + + Your "Source" rig is the rig that you create in blender or the rig that you import into blender that has the skinned + to mesh attached to it. The idea of UE to Rigify is that you want to drive the "Source" rig with your "Control" rig. ## Source diff --git a/docs/ue2rigify/index.md b/docs/ue2rigify/index.md index a8dde803..f33bfe3d 100644 --- a/docs/ue2rigify/index.md +++ b/docs/ue2rigify/index.md @@ -1,21 +1,17 @@ ---- -home: true -heroText: UE to Rigify -tagline: A node based retargeting system for Blender's Rigify addon. -actions: - - text: Quick Start - link: /introduction/quickstart -features: -- title: Retarget Animation - details: Use nodes and operators to create relationships between your rig and the rigify controls. -- title: Use Marketplace Assets - details: Contains templates for the Unreal Mannequins, but any custom template can be built for any rig from any app. -- title: Share Templates +# UE to Rigify +A node based retargeting system for Blender's Rigify addon. + + +* [Quick Start](introduction/quickstart.md) + +## Features +* ### Retarget Animation + Use nodes and operators to create relationships between your rig and the rigify controls. +* ### Use Marketplace Assets + Contains templates for the Unreal Mannequins, but any custom template can be built for any rig from any app. +* ### Share Templates details: Build a template to retarget any rig, then share with your team and never retarget the same rig again. -footer: Copyright © Epic Games Inc. ---- + ## Help us document -Our goal is for this documentation to be completely comprehensive so that it can be fully self-serving. If you notice -any part of it to be incorrect, unclear, outdated, or missing -information please consider contributing to our documentation. +Our goal is for this documentation to be completely comprehensive so that it can be fully self-serving. If you notice any part of it to be incorrect, unclear, outdated, or missing information please consider contributing to our documentation. diff --git a/docs/ue2rigify/introduction/quickstart.md b/docs/ue2rigify/introduction/quickstart.md index 2f8fcf26..90d61fa8 100644 --- a/docs/ue2rigify/introduction/quickstart.md +++ b/docs/ue2rigify/introduction/quickstart.md @@ -2,14 +2,9 @@ This quick start guide will help you get up and running with the UE to Rigify addon. -First thing you need to do is download the latest versioned zip file from the [releases page](https://github.com/EpicGamesExt/BlenderTools/releases?q=UE+to+Rigify&expanded=true) +First thing you need to do is download the latest versioned zip file from the [releases page](https://github.com/poly-hammer/BlenderTools/releases?q=UE+to+Rigify&expanded=true) under the `Assets` dropdown. The zip file name will start with `ue2rigify`. -::: tip Note - If you get a 404 error when you click the link above, then you will need to sign in to your github account and link -it with your Epic Games account. Here is a [link with instructions](https://www.unrealengine.com/en-US/ue4-on-github) -on how to link your accounts. -::: Open Blender and install the add on. Go to `Edit > Preferences` then to addons. Click `install`. diff --git a/docs/ue2rigify/mkdocs.yml b/docs/ue2rigify/mkdocs.yml new file mode 100644 index 00000000..71e43f22 --- /dev/null +++ b/docs/ue2rigify/mkdocs.yml @@ -0,0 +1,22 @@ +site_name: ue2rigify +docs_dir: '.' +nav: + - Overview: "./index.md" + - Quick Start: "./introduction/quickstart.md" + - Concepts: + - Modes: "./concepts/modes.md" + - Templates: "/concepts/templates.md" + - Usage: + - Animation: "./usage/animation.md" + - New Template Example: "./usage/new-template-example.md" + - Advanced: + - Relink Constraints: "./advanced/relink-constraints.md" + - Extras: + - Community Templates: "./extras/community-templates.md" + - User Interface: + - 3D View Panel: "./user-interface/3d-view-panel.md" + - Node Editor Panel: "./user-interface/node-editor-panel.md" + - Hotkeys: "./user-interface/hot-keys.md" + - Trouble Shooting: + - FAQ: "./trouble-shooting/faq.md" + - Errors: "./trouble-shooting/errors.md" \ No newline at end of file diff --git a/docs/ue2rigify/trouble-shooting/faq.md b/docs/ue2rigify/trouble-shooting/faq.md index 2c0bd4c7..26928236 100644 --- a/docs/ue2rigify/trouble-shooting/faq.md +++ b/docs/ue2rigify/trouble-shooting/faq.md @@ -12,6 +12,52 @@ Rigify generates a new rigify rig, those could get stomped on. Thus, renaming th rig is necessary for this to work. ## Where are Rig templates stored? -Rig templates are stored within: +Default location for Rig templates if a custom location hasn't been set: - windows: `%TEMP%\ue2rigify\resources\rig_templates` -- unix: `/tmp/ue2rigify/resources/rig_templates` \ No newline at end of file +- unix: `/tmp/ue2rigify/resources/rig_templates` + +## How do I update a metarig made in Blender 3.6 for use in 4.0+? +Since Blender 4.0 removed Bone Layers, Rigify had to change the generated template which causes an error when importing your UE2Rigify template. + +However there is a solution built into Rigify that can update the metarig when you load a 3.6 Blend file in Blender 4+. Here's how you can update your template: + +>Requires Blender 3.6 + +- Open your exported template zip file and extract the metarig.py file to the following location in your Blender 3.6 install: + + `C:\Program Files\Blender Foundation\Blender 3.6\3.6\scripts\addons\rigify\metarigs` + + ![1](./images/1.png) + +- Rename metarig.py to something recognizable i.e. +`demometarig.py` + +- Open Blender 3.6 and add your metarig to the scene + + ![2](./images/2.png) + +- Create a new save, close Blender 3.6, and open the new save in Blender 4+ + +- Select the rig and open the Armature data tab. You should see Rigify tell you it needs to update to Collections. Click `Upgrade Metarig` + + ![3](./images/3.png) + +- Switch to Edit Mode with the armature still selected. A Rigify menu should appear at the top. Click `Rigify > Encode Metarig` + + ![4](./images/4.png) + +- Switch your Viewport to Text Editor and open the new metarig.py + + ![5](./images/5.png) + + ![6](./images/6.png) + +- Save the file to Desktop keeping the name as `metarig.py` and replace the metarig file in your template zip with the new one. + + ![7](./images/7.png) + +- Before attempting to import your template again, **you must delete the previous attempt from UE2Rigify's templates folder.** Default location can be found above. + +- Restart Blender 4+ and import your template. It should now work as intended! + + ![8](./images/8.png) \ No newline at end of file diff --git a/docs/ue2rigify/trouble-shooting/images/1.png b/docs/ue2rigify/trouble-shooting/images/1.png new file mode 100644 index 00000000..2b827fac Binary files /dev/null and b/docs/ue2rigify/trouble-shooting/images/1.png differ diff --git a/docs/ue2rigify/trouble-shooting/images/2.png b/docs/ue2rigify/trouble-shooting/images/2.png new file mode 100644 index 00000000..b47da608 Binary files /dev/null and b/docs/ue2rigify/trouble-shooting/images/2.png differ diff --git a/docs/ue2rigify/trouble-shooting/images/3.png b/docs/ue2rigify/trouble-shooting/images/3.png new file mode 100644 index 00000000..039c5992 Binary files /dev/null and b/docs/ue2rigify/trouble-shooting/images/3.png differ diff --git a/docs/ue2rigify/trouble-shooting/images/4.png b/docs/ue2rigify/trouble-shooting/images/4.png new file mode 100644 index 00000000..7f38a7c1 Binary files /dev/null and b/docs/ue2rigify/trouble-shooting/images/4.png differ diff --git a/docs/ue2rigify/trouble-shooting/images/5.png b/docs/ue2rigify/trouble-shooting/images/5.png new file mode 100644 index 00000000..18a98765 Binary files /dev/null and b/docs/ue2rigify/trouble-shooting/images/5.png differ diff --git a/docs/ue2rigify/trouble-shooting/images/6.png b/docs/ue2rigify/trouble-shooting/images/6.png new file mode 100644 index 00000000..6f537661 Binary files /dev/null and b/docs/ue2rigify/trouble-shooting/images/6.png differ diff --git a/docs/ue2rigify/trouble-shooting/images/7.png b/docs/ue2rigify/trouble-shooting/images/7.png new file mode 100644 index 00000000..44ab307c Binary files /dev/null and b/docs/ue2rigify/trouble-shooting/images/7.png differ diff --git a/docs/ue2rigify/trouble-shooting/images/8.png b/docs/ue2rigify/trouble-shooting/images/8.png new file mode 100644 index 00000000..d85d9496 Binary files /dev/null and b/docs/ue2rigify/trouble-shooting/images/8.png differ diff --git a/docs/ue2rigify/usage/animation.md b/docs/ue2rigify/usage/animation.md index 5bc6afc8..b50380c3 100644 --- a/docs/ue2rigify/usage/animation.md +++ b/docs/ue2rigify/usage/animation.md @@ -17,11 +17,12 @@ When I hit `Convert`. It converts that action over to the Rigify rig. ![2](./images/animation/2.jpg) -::: tip Note - UE to Rigify renames the original action to have `SOURCE_` in front of it. It prefixes every action from -the "Source" rig so it does not overwrite any bone animations just in case the Rigify "Control" rig and the "Source" -rig happen to have matching bone names. -::: +!!! note + + UE to Rigify renames the original action to have `SOURCE_` in front of it. It prefixes every action from + the "Source" rig so it does not overwrite any bone animations just in case the Rigify "Control" rig and the "Source" + rig happen to have matching bone names. + Then I would click `Bake`, and confirm. diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 00000000..b736ee45 --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,57 @@ +site_name: Documentation + +nav: + - Home: index.md + - Addons: + - Send to Unreal: '!include ./docs/send2ue/mkdocs.yml' + - UE to Rigify: '!include ./docs/ue2rigify/mkdocs.yml' + - Contributing: + - Help Develop: contributing/development.md + - Help Document: contributing/documentation.md + - Help Test: contributing/testing.md + + +markdown_extensions: +- pymdownx.highlight: + anchor_linenums: true + line_spans: __span + pygments_lang_class: true +- pymdownx.inlinehilite +- pymdownx.snippets +- pymdownx.superfences +- attr_list +- admonition + +plugins: + monorepo: + termynal: + buttons: macos + prompt_literal_start: [$, '>', '>>>'] + title: shell + search: + separator: '[\s\-,:!=\[\]()"`/]+|\.(?!\d)|&[lg]t;|(?!\b)(?=[A-Z][a-z])' + +theme: + features: + - navigation.instant + favicon: images/icons/favicon.ico + icon: + repo: fontawesome/brands/github + language: en + name: material + palette: + - scheme: default + toggle: + icon: material/brightness-7 + name: Switch to dark mode + - accent: blue + primary: black + scheme: slate + toggle: + icon: material/brightness-4 + name: Switch to light mode + +extra: + analytics: + provider: google + property: !ENV GA_ID \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index c13a5eba..0c15e219 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,17 @@ -docker==6.1.3 +docker==7.1.0 unittest-xml-reporting==3.2.0 fake-bpy-module-latest==20231010 PyGithub==2.1.1 -pydevd-pycharm~=223.7571.203 +debugpy==1.8.1 +numpy==1.26.4 +websocket==0.2.1 +python-dotenv==1.0.1 + +# documenation +mkdocs<=1.5.3 +mkdocs-material<=9.5.13 +mkdocs-material-extensions<=1.3.1 +mkdocs-mermaid2-plugin<=1.1.1 +mkdocs-monorepo-plugin<=1.1.0 +termynal<=0.12.1 +mkdocstrings[python]<=1.9.0 diff --git a/scripts/addon_watcher.py b/scripts/addon_watcher.py index d6856195..2ef4ae5e 100644 --- a/scripts/addon_watcher.py +++ b/scripts/addon_watcher.py @@ -1,10 +1,6 @@ import sys import os -sys.path.append(os.path.join(os.path.dirname(__file__), os.pardir, 'send2ue', 'dependencies')) -import rpc - -@rpc.factory.remote_call(port=9997) def reload_addon(addon, scripts_path): sys.path.append(scripts_path) import dev_helpers @@ -12,6 +8,8 @@ def reload_addon(addon, scripts_path): if __name__ == '__main__': + sys.path.append(os.path.join(os.path.dirname(__file__), os.pardir, 'send2ue', 'dependencies')) + from rpc.rpc_factory import RPCFactory, RPCClient # type: ignore changed_file_path = os.path.normpath(sys.argv[-1]) print(f'Checking path "{changed_file_path}"...') split_path = changed_file_path.split(os.sep) @@ -21,6 +19,7 @@ def reload_addon(addon, scripts_path): if root_folder in ['send2ue', 'ue2rigify']: addon_name = root_folder print(f'reloading "{addon_name}"...') - reload_addon(addon_name, os.path.basename(__file__)) + rpc_factory = RPCFactory(rpc_client=RPCClient(9997)) + rpc_factory.run_function_remotely(reload_addon, [addon_name, os.path.basename(__file__)]) else: - print(f'No addon to reload') + print('No addon to reload') diff --git a/scripts/create_release.py b/scripts/create_release.py index e1bddae3..c6f148c8 100644 --- a/scripts/create_release.py +++ b/scripts/create_release.py @@ -38,6 +38,7 @@ def get_message(self): release_notes_file_path = os.path.join( os.path.dirname(__file__), os.pardir, + 'src/addons', self.addon_name, 'release_notes.md' ) @@ -134,7 +135,7 @@ def package_addons(addon_release_folder): # package the addons for addon_name in BLENDER_ADDONS: - addon_folder_path = os.path.join(PROJECT_FOLDER, addon_name) + addon_folder_path = os.path.join(PROJECT_FOLDER, 'src', 'addons', addon_name) addon_packager = AddonPackager(addon_name, addon_folder_path, addon_release_folder) addon_packager.zip_addon() diff --git a/scripts/dev_helpers.py b/scripts/dev_helpers.py index 83f148da..08e92628 100644 --- a/scripts/dev_helpers.py +++ b/scripts/dev_helpers.py @@ -2,14 +2,22 @@ import sys import bpy import importlib -import threading +from types import ModuleType repo_folder = os.path.join(os.path.dirname(__file__), os.pardir) tests_folder = os.path.join(repo_folder, 'tests') -sys.path.append(repo_folder) -sys.path.append(os.path.join(tests_folder, 'utils')) -from addon_packager import AddonPackager +def deep_reload(m: ModuleType): + name = m.__name__ # get the name that is used in sys.modules + name_ext = name + '.' # support finding sub modules or packages + + def compare(loaded: str): + return (loaded == name) or loaded.startswith(name_ext) + + all_mods = tuple(sys.modules) # prevent changing iterable while iterating over it + sub_mods = filter(compare, all_mods) + for pkg in sorted(sub_mods, key=lambda item: item.count('.'), reverse=True): + importlib.reload(sys.modules[pkg]) # reload packages, beginning with the most deeply nested def reload_addon_source_code(addons, only_unregister=False): @@ -26,9 +34,10 @@ def reload_addon_source_code(addons, only_unregister=False): for addon in addons: os.environ[f'{addon.upper()}_DEV'] = '1' addon = importlib.import_module(addon) - importlib.reload(addon) addon.unregister() + deep_reload(addon) + if not only_unregister: addon.register() @@ -41,13 +50,16 @@ def reload_addon_zips(addons): :param list addons: A list of addon names. """ + sys.path.append(os.path.join(tests_folder, 'utils')) + from addon_packager import AddonPackager # type: ignore + # unregister any registered addons reload_addon_source_code(addons, only_unregister=True) # zip up each addon for addon in addons: os.environ[f'{addon.upper()}_DEV'] = '1' - addon_folder_path = os.path.join(repo_folder, addon) + addon_folder_path = os.path.join(repo_folder, 'src', 'addons', addon) release_folder_path = os.path.join(repo_folder, 'release') addon_packager = AddonPackager(addon, addon_folder_path, release_folder_path) addon_packager.zip_addon() diff --git a/scripts/launch.py b/scripts/launch.py new file mode 100644 index 00000000..d40e7891 --- /dev/null +++ b/scripts/launch.py @@ -0,0 +1,162 @@ +import os +import sys +import subprocess +from pathlib import Path +from dotenv import load_dotenv + + +REPO_ROOT = Path(__file__).parent.parent + +ENV_FILE = REPO_ROOT / '.env' +if ENV_FILE.exists(): + load_dotenv(ENV_FILE) + +PYTHON_3_11_VIRTUAL_ENV = REPO_ROOT / '.venv' +PYTHON_3_10_VIRTUAL_ENV = REPO_ROOT / '.py3.10-venv' +PYTHON_3_9_VIRTUAL_ENV = REPO_ROOT / '.py3.9-venv' + +BLENDER_STARTUP_SCRIPT = Path(__file__).parent / 'resources' / 'blender' / 'startup.py' +UNREAL_STARTUP_SCRIPT = Path(__file__).parent / 'resources' / 'unreal' / 'init_unreal.py' + +SCRIPTS_FOLDER = REPO_ROOT / 'scripts' + + +UNREAL_PROJECT = os.environ.get('UNREAL_PROJECT_PATH') or REPO_ROOT / 'tests' / 'test_files' / 'unreal_projects' / 'test01' / 'test01.uproject' + + +def shell(command: str, **kwargs): + process = subprocess.Popen( + command, + shell=True, + universal_newlines=True, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + **kwargs + ) + + output = [] + for line in iter(process.stdout.readline, ""): # type: ignore + output += [line.rstrip()] + sys.stdout.write(line) + + process.wait() + + if process.returncode != 0: + raise OSError("\n".join(output)) + +def validate_venv(venv_path: Path) -> bool: + if not venv_path.exists(): + print(f'Virtual environment not found here: "{venv_path}"') + python_version = venv_path.name.split('-')[0].strip('.') + if python_version == 'venv': + python_version = '3.11' + + print('This can be fixed by running the following command at the root of the repo to create a virtual environment with the correct python version:') + print(f"C:/some/path/{python_version}/python.exe -m venv {venv_path}") + return False + + return True + + +def validate_exe(exe_path: Path) -> bool: + if not exe_path.exists(): + app_name = exe_path.name.split('.')[0].lower() + if app_name != 'blender': + app_name = 'unreal' + + print(f'The {app_name} executable was not found here: "{exe_path}"') + print('Are you sure you have the correct path to the executable? Is it installed?') + print(f"Try setting the environment variable '{app_name.upper()}_EXE_PATH' to the correct path if you know where {app_name} is.") + return False + return True + + +def launch_blender(version: str, debug: str): + virtual_env = PYTHON_3_11_VIRTUAL_ENV + if version in ['3.6', '4.0']: + virtual_env = PYTHON_3_10_VIRTUAL_ENV + + if not validate_venv(virtual_env): + return + + site_packages = virtual_env / 'Lib' / 'site-packages' + + exe_path = os.environ.get('BLENDER_EXE_PATH') + if not exe_path: + if sys.platform == 'win32': + exe_path = rf"C:\Program Files\Blender Foundation\Blender {version}\blender.exe" + else: + exe_path = None + + if not validate_exe(Path(exe_path)): + return + + if exe_path: + command = f'"{exe_path}" --python-use-system-env --python "{BLENDER_STARTUP_SCRIPT}"' + shell( + command, + env={ + **os.environ.copy(), + 'PYTHONUNBUFFERED': '1', + 'BLENDER_APP_VERSION': version, + 'BLENDER_DEBUGGING_ON': debug, + 'PYTHONPATH': ';'.join([ + str(site_packages), + str(SCRIPTS_FOLDER) + ]) + } + ) + + +def launch_unreal(version: str, debug: str): + virtual_env = PYTHON_3_11_VIRTUAL_ENV + if version in ['5.3']: + virtual_env = PYTHON_3_9_VIRTUAL_ENV + + if not validate_venv(virtual_env): + return + + exe_path = os.environ.get('UNREAL_EXE_PATH') + if not exe_path: + if sys.platform == 'win32': + exe_path = rf'C:\Program Files\Epic Games\UE_{app_version}\Engine\Binaries\Win64\UnrealEditor.exe' + else: + exe_path = None + + site_packages = virtual_env / 'Lib' / 'site-packages' + + if not validate_exe(Path(exe_path)): + return + + if exe_path: + command = f'"{exe_path}" "{UNREAL_PROJECT}" -stdout -nopause -forcelogflush -verbose' + shell( + command, + env={ + **os.environ.copy(), + 'PYTHONUNBUFFERED': '1', + 'UNREAL_APP_VERSION': version, + 'UNREAL_DEBUGGING_ON': debug, + 'UE_PYTHONPATH': ';'.join([ + str(site_packages.absolute()), + str(UNREAL_STARTUP_SCRIPT.parent.absolute()), + ]) + } + ) + +if __name__ == "__main__": + app_name = sys.argv[1] + app_version = sys.argv[2] + debug_on = sys.argv[3] + + if app_name == 'blender': + launch_blender( + version=app_version, + debug=debug_on + ) + + if app_name == 'unreal': + launch_unreal( + version=app_version, + debug=debug_on + ) \ No newline at end of file diff --git a/scripts/resources/blender/startup.py b/scripts/resources/blender/startup.py new file mode 100644 index 00000000..70d8b3cb --- /dev/null +++ b/scripts/resources/blender/startup.py @@ -0,0 +1,73 @@ +import os +import sys +import bpy +import logging +from pathlib import Path + +logger = logging.getLogger(__name__) + +logging.basicConfig(level=logging.DEBUG) + +REPO_ROOT = Path(__file__).parent.parent.parent.parent +debug = os.environ.get('BLENDER_DEBUGGING_ON', 'no').lower() == 'yes' + +ADDONS = { + 'send2ue': REPO_ROOT / 'src', + 'ue2rigify': REPO_ROOT / 'src' +} + + +if bpy.app.version[0] > 2: # type: ignore + current_script_directories = [ + Path(i.directory) + for i in bpy.context.preferences.filepaths.script_directories.values() + ] + + + for name, scripts_folder in ADDONS.items(): + if scripts_folder not in current_script_directories: + script_directory = bpy.context.preferences.filepaths.script_directories.new() + script_directory.name = name # type: ignore + script_directory.directory = str(scripts_folder) # type: ignore + sys.path.append(os.path.join(str(scripts_folder), 'addons')) + + try: + bpy.ops.script.reload() + except ValueError: + pass + + +for addon in ADDONS.keys(): + try: + bpy.ops.preferences.addon_enable(module=addon) + except Exception as e: + logger.warning(f'Failed to enable addon {addon}: {e}') + +if debug: + try: + import debugpy + port = int(os.environ.get('BLENDER_DEBUG_PORT', 5678)) + debugpy.configure(python=os.environ.get('BLENDER_PYTHON_EXE', sys.executable)) + if os.environ.get('TEST_ENVIRONMENT'): + debugpy.listen(('0.0.0.0', port)) + else: + debugpy.listen(port) + logger.info(f'Waiting for debugger to attach on port {port}...') + debugpy.wait_for_client() + except ImportError: + logger.error( + 'Failed to initialize debugger because debugpy is not available ' + 'in the current python environment.' + ) + + +if os.environ.get('TEST_ENVIRONMENT'): + from send2ue.dependencies.rpc.server import RPCServer + rpc_server = RPCServer() + rpc_server.start_server_blocking() +else: + from send2ue.dependencies.rpc import blender_server + rpc_server = blender_server.RPCServer() + rpc_server.start(threaded=True) + +print('Blender RPC Server started') \ No newline at end of file diff --git a/scripts/resources/profiles/dev.code-profile b/scripts/resources/profiles/dev.code-profile new file mode 100644 index 00000000..d9396f44 --- /dev/null +++ b/scripts/resources/profiles/dev.code-profile @@ -0,0 +1 @@ +{"name":"Blender Dev","settings":"{\"settings\":\"{\\r\\n \\\"python.analysis.autoImportCompletions\\\": false,\\r\\n \\\"python.analysis.fixAll\\\": [\\\"source.unusedImports\\\"], \\r\\n \\\"editor.defaultFormatter\\\": \\\"ms-python.black-formatter\\\",\\r\\n \\\"files.exclude\\\": {\\r\\n \\\"**/__pycache__\\\": true,\\r\\n \\\"**/.cache\\\": true,\\r\\n \\\"**/.coverage\\\": true,\\r\\n \\\"**/.coverage.*\\\": true,\\r\\n \\\"**/.hypothesis\\\": true,\\r\\n \\\"**/.mypy_cache\\\": true,\\r\\n \\\"**/.nox\\\": true,\\r\\n \\\"**/.pytest_cache\\\": true,\\r\\n \\\"**/.ruff_cache\\\": true,\\r\\n \\\"**/.tox\\\": true\\r\\n },\\r\\n \\\"files.autoSave\\\": \\\"afterDelay\\\",\\r\\n \\\"git.enableSmartCommit\\\": true,\\r\\n \\\"git.autofetch\\\": true,\\r\\n \\\"terminal.integrated.defaultProfile.windows\\\": \\\"Command Prompt\\\",\\r\\n \\\"[jsonc]\\\": {\\r\\n \\\"editor.defaultFormatter\\\": \\\"vscode.json-language-features\\\"\\r\\n },\\r\\n \\\"window.zoomLevel\\\": -1,\\r\\n \\\"[json]\\\": {\\r\\n \\\"editor.defaultFormatter\\\": \\\"vscode.json-language-features\\\"\\r\\n },\\r\\n \\\"git.confirmSync\\\": false,\\r\\n \\\"redhat.telemetry.enabled\\\": false,\\r\\n \\\"[xml]\\\": {\\r\\n \\\"editor.defaultFormatter\\\": \\\"redhat.vscode-xml\\\"\\r\\n }\\r\\n\\r\\n}\"}","snippets":"{\"snippets\":{\"python.json\":\"\\n{\\n \\\"if\\\": {\\n \\\"prefix\\\": \\\"if\\\",\\n \\\"body\\\": [\\\"if ${1:expression}:\\\", \\\"\\\\t${2:pass}\\\"],\\n \\\"description\\\": \\\"Code snippet for an if statement\\\"\\n },\\n \\\"if/else\\\": {\\n \\\"prefix\\\": \\\"if/else\\\",\\n \\\"body\\\": [\\\"if ${1:condition}:\\\", \\\"\\\\t${2:pass}\\\", \\\"else:\\\", \\\"\\\\t${3:pass}\\\"],\\n \\\"description\\\": \\\"Code snippet for an if statement with else\\\"\\n },\\n \\\"elif\\\": {\\n \\\"prefix\\\": \\\"elif\\\",\\n \\\"body\\\": [\\\"elif ${1:expression}:\\\", \\\"\\\\t${2:pass}\\\"],\\n \\\"description\\\": \\\"Code snippet for an elif\\\"\\n },\\n \\\"else\\\": {\\n \\\"prefix\\\": \\\"else\\\",\\n \\\"body\\\": [\\\"else:\\\", \\\"\\\\t${1:pass}\\\"],\\n \\\"description\\\": \\\"Code snippet for an else\\\"\\n },\\n \\\"while\\\": {\\n \\\"prefix\\\": \\\"while\\\",\\n \\\"body\\\": [\\\"while ${1:expression}:\\\", \\\"\\\\t${2:pass}\\\"],\\n \\\"description\\\": \\\"Code snippet for a while loop\\\"\\n },\\n \\\"while/else\\\": {\\n \\\"prefix\\\": \\\"while/else\\\",\\n \\\"body\\\": [\\\"while ${1:expression}:\\\", \\\"\\\\t${2:pass}\\\", \\\"else:\\\", \\\"\\\\t${3:pass}\\\"],\\n \\\"description\\\": \\\"Code snippet for a while loop with else\\\"\\n },\\n \\\"for\\\": {\\n \\\"prefix\\\": \\\"for\\\",\\n \\\"body\\\": [\\\"for ${1:target_list} in ${2:expression_list}:\\\", \\\"\\\\t${3:pass}\\\"],\\n \\\"description\\\": \\\"Code snippet for a for loop\\\"\\n },\\n \\\"for/else\\\": {\\n \\\"prefix\\\": \\\"for/else\\\",\\n \\\"body\\\": [\\\"for ${1:target_list} in ${2:expression_list}:\\\", \\\"\\\\t${3:pass}\\\", \\\"else:\\\", \\\"\\\\t${4:pass}\\\"],\\n \\\"description\\\": \\\"Code snippet for a for loop with else\\\"\\n },\\n \\\"try/except\\\": {\\n \\\"prefix\\\": \\\"try/except\\\",\\n \\\"body\\\": [\\\"try:\\\", \\\"\\\\t${1:pass}\\\", \\\"except ${2:expression} as ${3:identifier}:\\\", \\\"\\\\t${4:pass}\\\"],\\n \\\"description\\\": \\\"Code snippet for a try/except statement\\\"\\n },\\n \\\"try/finally\\\": {\\n \\\"prefix\\\": \\\"try/finally\\\",\\n \\\"body\\\": [\\\"try:\\\", \\\"\\\\t${1:pass}\\\", \\\"finally:\\\", \\\"\\\\t${2:pass}\\\"],\\n \\\"description\\\": \\\"Code snippet for a try/finally statement\\\"\\n },\\n \\\"try/except/else\\\": {\\n \\\"prefix\\\": \\\"try/except/else\\\",\\n \\\"body\\\": [\\n \\\"try:\\\",\\n \\\"\\\\t${1:pass}\\\",\\n \\\"except ${2:expression} as ${3:identifier}:\\\",\\n \\\"\\\\t${4:pass}\\\",\\n \\\"else:\\\",\\n \\\"\\\\t${5:pass}\\\"\\n ],\\n \\\"description\\\": \\\"Code snippet for a try/except/else statement\\\"\\n },\\n \\\"try/except/finally\\\": {\\n \\\"prefix\\\": \\\"try/except/finally\\\",\\n \\\"body\\\": [\\n \\\"try:\\\",\\n \\\"\\\\t${1:pass}\\\",\\n \\\"except ${2:expression} as ${3:identifier}:\\\",\\n \\\"\\\\t${4:pass}\\\",\\n \\\"finally:\\\",\\n \\\"\\\\t${5:pass}\\\"\\n ],\\n \\\"description\\\": \\\"Code snippet for a try/except/finally statement\\\"\\n },\\n \\\"try/except/else/finally\\\": {\\n \\\"prefix\\\": \\\"try/except/else/finally\\\",\\n \\\"body\\\": [\\n \\\"try:\\\",\\n \\\"\\\\t${1:pass}\\\",\\n \\\"except ${2:expression} as ${3:identifier}:\\\",\\n \\\"\\\\t${4:pass}\\\",\\n \\\"else:\\\",\\n \\\"\\\\t${5:pass}\\\",\\n \\\"finally:\\\",\\n \\\"\\\\t${6:pass}\\\"\\n ],\\n \\\"description\\\": \\\"Code snippet for a try/except/else/finally statement\\\"\\n },\\n \\\"with\\\": {\\n \\\"prefix\\\": \\\"with\\\",\\n \\\"body\\\": [\\\"with ${1:expression} as ${2:target}:\\\", \\\"\\\\t${3:pass}\\\"],\\n \\\"description\\\": \\\"Code snippet for a with statement\\\"\\n },\\n \\\"def\\\": {\\n \\\"prefix\\\": \\\"def\\\",\\n \\\"body\\\": [\\\"def ${1:funcname}(${2:parameter_list}):\\\", \\\"\\\\t\\\\\\\"\\\\\\\"\\\\\\\"\\\", \\\"\\\\t${3:docstring}\\\", \\\"\\\\t\\\\\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\t${4:pass}\\\"],\\n \\\"description\\\": \\\"Code snippet for a function definition\\\"\\n },\\n \\\"def(class method)\\\": {\\n \\\"prefix\\\": \\\"def(class method)\\\",\\n \\\"body\\\": [\\\"def ${1:funcname}(self, ${2:parameter_list}):\\\", \\\"\\\\t\\\\\\\"\\\\\\\"\\\\\\\"\\\", \\\"\\\\t${3:docstring}\\\", \\\"\\\\t\\\\\\\"\\\\\\\"\\\\\\\"\\\", \\\"\\\\t${4:pass}\\\"],\\n \\\"description\\\": \\\"Code snippet for a class method\\\"\\n },\\n \\\"def(static class method)\\\": {\\n \\\"prefix\\\": \\\"def(static class method)\\\",\\n \\\"body\\\": [\\\"@staticmethod\\\", \\\"def ${1:funcname}(${2:parameter_list}):\\\", \\\"\\\\t\\\\\\\"\\\\\\\"\\\\\\\"\\\", \\\"\\\\t${3:docstring}\\\", \\\"\\\\t\\\\\\\"\\\\\\\"\\\\\\\"\\\", \\\"\\\\t${4:pass}\\\"],\\n \\\"description\\\": \\\"Code snippet for a static class method\\\"\\n },\\n \\\"def(abstract class method)\\\": {\\n \\\"prefix\\\": \\\"def(abstract class method)\\\",\\n \\\"body\\\": [\\\"def ${1:funcname}(self, ${2:parameter_list}):\\\", \\\"\\\\t\\\\\\\"\\\\\\\"\\\\\\\"\\\", \\\"\\\\t${3:docstring}\\\", \\\"\\\\t\\\\\\\"\\\\\\\"\\\\\\\"\\\", \\\"\\\\traise NotImplementedError\\\"],\\n \\\"description\\\": \\\"Code snippet for an abstract class method\\\"\\n },\\n \\\"class\\\": {\\n \\\"prefix\\\": \\\"class\\\",\\n \\\"body\\\": [\\\"class ${1:classname}(${2:object}):\\\", \\\"\\\\t\\\\\\\"\\\\\\\"\\\\\\\"\\\", \\\"\\\\t${3:docstring}\\\", \\\"\\\\t\\\\\\\"\\\\\\\"\\\\\\\"\\\", \\\"\\\\t${4:pass}\\\"],\\n \\\"description\\\": \\\"Code snippet for a class definition\\\"\\n },\\n \\\"lambda\\\": {\\n \\\"prefix\\\": \\\"lambda\\\",\\n \\\"body\\\": [\\\"lambda ${1:parameter_list}: ${2:expression}\\\"],\\n \\\"description\\\": \\\"Code snippet for a lambda statement\\\"\\n },\\n \\\"if(main)\\\": {\\n \\\"prefix\\\": \\\"__main__\\\",\\n \\\"body\\\": [\\\"if __name__ == \\\\\\\"__main__\\\\\\\":\\\", \\\" ${1:pass}\\\"],\\n \\\"description\\\": \\\"Code snippet for a `if __name__ == \\\\\\\"__main__\\\\\\\": ...` block\\\"\\n },\\n \\\"async/def\\\": {\\n \\\"prefix\\\": \\\"async/def\\\",\\n \\\"body\\\": [\\\"async def ${1:funcname}(${2:parameter_list}):\\\", \\\"\\\\t${3:pass}\\\"],\\n \\\"description\\\": \\\"Code snippet for an async statement\\\"\\n },\\n \\\"async/for\\\": {\\n \\\"prefix\\\": \\\"async/for\\\",\\n \\\"body\\\": [\\\"async for ${1:target} in ${2:iter}:\\\", \\\"\\\\t${3:block}\\\"],\\n \\\"description\\\": \\\"Code snippet for an async for statement\\\"\\n },\\n \\\"async/for/else\\\": {\\n \\\"prefix\\\": \\\"async/for/else\\\",\\n \\\"body\\\": [\\\"async for ${1:target} in ${2:iter}:\\\", \\\"\\\\t${3:block}\\\", \\\"else:\\\", \\\"\\\\t${4:block}\\\"],\\n \\\"description\\\": \\\"Code snippet for an async for statement with else\\\"\\n },\\n \\\"async/with\\\": {\\n \\\"prefix\\\": \\\"async/with\\\",\\n \\\"body\\\": [\\\"async with ${1:expr} as ${2:var}:\\\", \\\"\\\\t${3:block}\\\"],\\n \\\"description\\\": \\\"Code snippet for an async with statement\\\"\\n }\\n}\"}}","extensions":"[{\"identifier\":{\"id\":\"charliermarsh.ruff\",\"uuid\":\"c2ca9b43-fa38-44fc-928e-5125970b9c00\"},\"displayName\":\"Ruff\",\"preRelease\":true},{\"identifier\":{\"id\":\"discretegames.f5anything\",\"uuid\":\"370d707b-acca-4ddc-9e39-cfa9705953f0\"},\"displayName\":\"F5 Anything\"},{\"identifier\":{\"id\":\"donjayamanne.python-environment-manager\",\"uuid\":\"0c9f60fd-5588-42f7-9176-e80c3ae111ec\"},\"displayName\":\"Python Environment Manager\"},{\"identifier\":{\"id\":\"github.remotehub\",\"uuid\":\"fc7d7e85-2e58-4c1c-97a3-2172ed9a77cd\"},\"displayName\":\"GitHub Repositories\"},{\"identifier\":{\"id\":\"magicstack.magicpython\",\"uuid\":\"1f5eb737-5496-44a3-a8a1-36a85eee4979\"}},{\"identifier\":{\"id\":\"mhutchie.git-graph\",\"uuid\":\"438221f8-1107-4ccd-a6fe-f3b7fe0856b7\"},\"displayName\":\"Git Graph\"},{\"identifier\":{\"id\":\"ms-azuretools.vscode-docker\",\"uuid\":\"0479fc1c-3d67-49f9-b087-fb9069afe48f\"},\"displayName\":\"Docker\"},{\"identifier\":{\"id\":\"ms-python.black-formatter\",\"uuid\":\"859e640c-c157-47da-8699-9080b81c8371\"},\"displayName\":\"Black Formatter\",\"preRelease\":true},{\"identifier\":{\"id\":\"ms-python.debugpy\",\"uuid\":\"4bd5d2c9-9d65-401a-b0b2-7498d9f17615\"},\"displayName\":\"Python Debugger\"},{\"identifier\":{\"id\":\"ms-python.python\",\"uuid\":\"f1f59ae4-9318-4f3c-a9b5-81b2eaa5f8a5\"},\"displayName\":\"Python\",\"preRelease\":true},{\"identifier\":{\"id\":\"ms-python.vscode-pylance\",\"uuid\":\"364d2426-116a-433a-a5d8-a5098dc3afbd\"},\"displayName\":\"Pylance\",\"preRelease\":true},{\"identifier\":{\"id\":\"ms-toolsai.jupyter\",\"uuid\":\"6c2f1801-1e7f-45b2-9b5c-7782f1e076e8\"},\"displayName\":\"Jupyter\"},{\"identifier\":{\"id\":\"ms-toolsai.jupyter-keymap\",\"uuid\":\"9f6dc8db-620c-4844-b8c5-e74914f1be27\"},\"displayName\":\"Jupyter Keymap\"},{\"identifier\":{\"id\":\"ms-toolsai.jupyter-renderers\",\"uuid\":\"b15c72f8-d5fe-421a-a4f7-27ed9f6addbf\"},\"displayName\":\"Jupyter Notebook Renderers\"},{\"identifier\":{\"id\":\"ms-toolsai.vscode-jupyter-cell-tags\",\"uuid\":\"ab4fb32a-befb-4102-adf9-1652d0cd6a5e\"},\"displayName\":\"Jupyter Cell Tags\"},{\"identifier\":{\"id\":\"ms-toolsai.vscode-jupyter-slideshow\",\"uuid\":\"e153ca70-b543-4865-b4c5-b31d34185948\"},\"displayName\":\"Jupyter Slide Show\"},{\"identifier\":{\"id\":\"ms-vscode-remote.remote-containers\",\"uuid\":\"93ce222b-5f6f-49b7-9ab1-a0463c6238df\"},\"displayName\":\"Dev Containers\",\"preRelease\":true},{\"identifier\":{\"id\":\"ms-vscode-remote.remote-ssh\",\"uuid\":\"607fd052-be03-4363-b657-2bd62b83d28a\"},\"displayName\":\"Remote - SSH\"},{\"identifier\":{\"id\":\"ms-vscode-remote.remote-ssh-edit\",\"uuid\":\"bfeaf631-bcff-4908-93ed-fda4ef9a0c5c\"},\"displayName\":\"Remote - SSH: Editing Configuration Files\"},{\"identifier\":{\"id\":\"ms-vscode-remote.remote-wsl\",\"uuid\":\"f0c5397b-d357-4197-99f0-cb4202f22818\"},\"displayName\":\"WSL\"},{\"identifier\":{\"id\":\"ms-vscode-remote.vscode-remote-extensionpack\",\"uuid\":\"23d72dfc-8dd1-4e30-926e-8783b4378f13\"},\"displayName\":\"Remote Development\"},{\"identifier\":{\"id\":\"ms-vscode.remote-explorer\",\"uuid\":\"11858313-52cc-4e57-b3e4-d7b65281e34b\"},\"displayName\":\"Remote Explorer\"},{\"identifier\":{\"id\":\"ms-vscode.remote-repositories\",\"uuid\":\"cf5142f0-3701-4992-980c-9895a750addf\"},\"displayName\":\"Remote Repositories\"},{\"identifier\":{\"id\":\"ms-vscode.remote-server\",\"uuid\":\"105c0b3c-07a9-4156-a4fc-4141040eb07e\"},\"displayName\":\"Remote - Tunnels\"},{\"identifier\":{\"id\":\"njpwerner.autodocstring\",\"uuid\":\"2d6fea35-f68e-461d-9b7b-5cd05be99451\"},\"displayName\":\"autoDocstring - Python Docstring Generator\"},{\"identifier\":{\"id\":\"redhat.vscode-xml\",\"uuid\":\"6703768d-d42f-474e-9f6e-5f288d53f6e8\"},\"displayName\":\"XML\"},{\"identifier\":{\"id\":\"smartertomato.locate-this-document\",\"uuid\":\"64feedce-76fb-4ead-920e-d7fb7797af6b\"},\"displayName\":\"Locate This Document\"},{\"identifier\":{\"id\":\"streetsidesoftware.code-spell-checker\",\"uuid\":\"f6dbd813-b0a0-42c1-90ea-10dde9d925a7\"},\"displayName\":\"Code Spell Checker\"},{\"identifier\":{\"id\":\"tamasfe.even-better-toml\",\"uuid\":\"b2215d5f-675e-4a2b-b6ac-1ca737518b78\"},\"displayName\":\"Even Better TOML\"}]","globalState":"{\"storage\":{\"workbench.panel.markers.hidden\":\"[{\\\"id\\\":\\\"workbench.panel.markers.view\\\",\\\"isHidden\\\":false}]\",\"workbench.panel.output.hidden\":\"[{\\\"id\\\":\\\"workbench.panel.output\\\",\\\"isHidden\\\":false}]\",\"terminal.hidden\":\"[{\\\"id\\\":\\\"terminal\\\",\\\"isHidden\\\":false}]\",\"workbench.explorer.views.state.hidden\":\"[{\\\"id\\\":\\\"outline\\\",\\\"isHidden\\\":false,\\\"order\\\":2},{\\\"id\\\":\\\"timeline\\\",\\\"isHidden\\\":false,\\\"order\\\":3},{\\\"id\\\":\\\"workbench.explorer.openEditorsView\\\",\\\"isHidden\\\":false,\\\"order\\\":1},{\\\"id\\\":\\\"workbench.explorer.emptyView\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"npm\\\",\\\"isHidden\\\":false,\\\"order\\\":4},{\\\"id\\\":\\\"workbench.explorer.fileView\\\",\\\"isHidden\\\":false,\\\"order\\\":0},{\\\"id\\\":\\\"jupyterViewVariables\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"projectsExplorerFavorites\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"projectsExplorerGit\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"projectsExplorerSVN\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"projectsExplorerAny\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"projectsExplorerMercurial\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"projectsExplorerVSCode\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"projectManagerHelpAndFeedback\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"cell-tag\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"github:login\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"pr:github\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"issues:github\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workspaceEnvironments\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"pythonEnvironments\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"commitViewProvider\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"compareCommitViewProvider\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"github:createPullRequestWebview\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"cmake.projectStatus\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"hexEditor.dataInspectorView\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"makefile.outline\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"github:compareChangesFiles\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"cmake.outline\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"github:compareChangesCommits\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"cmake.pinnedCommands\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"prStatus:github\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"github:activePullRequest\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"github:activePullRequest:welcome\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"terraform.cloud.run.plan\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"terraform.providers\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"terraform.cloud.run.apply\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"terraform.modules\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"terraform.cloud.workspaces\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"terraform.cloud.runs\\\",\\\"isHidden\\\":false}]\",\"workbench.scm.views.state.hidden\":\"[{\\\"id\\\":\\\"workbench.scm.repositories\\\",\\\"isHidden\\\":true},{\\\"id\\\":\\\"workbench.scm\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.scm.sync\\\",\\\"isHidden\\\":false}]\",\"workbench.view.search.state.hidden\":\"[{\\\"id\\\":\\\"workbench.view.search\\\",\\\"isHidden\\\":false}]\",\"workbench.activity.pinnedViewlets2\":\"[{\\\"id\\\":\\\"workbench.view.explorer\\\",\\\"pinned\\\":true,\\\"visible\\\":true,\\\"order\\\":0},{\\\"id\\\":\\\"workbench.view.search\\\",\\\"pinned\\\":true,\\\"visible\\\":true,\\\"order\\\":1},{\\\"id\\\":\\\"workbench.view.scm\\\",\\\"pinned\\\":true,\\\"visible\\\":true,\\\"order\\\":2},{\\\"id\\\":\\\"workbench.view.debug\\\",\\\"pinned\\\":true,\\\"visible\\\":true,\\\"order\\\":3},{\\\"id\\\":\\\"workbench.view.extension.npm\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":8},{\\\"id\\\":\\\"workbench.panel.aiSidebar\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":2},{\\\"id\\\":\\\"workbench.view.extension.bookmarks\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":8},{\\\"id\\\":\\\"workbench.view.extensions\\\",\\\"pinned\\\":true,\\\"visible\\\":true,\\\"order\\\":4},{\\\"id\\\":\\\"workbench.view.extension.azuresphere\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":8},{\\\"id\\\":\\\"workbench.view.extension.mongoDB\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":10},{\\\"id\\\":\\\"workbench.view.remote\\\",\\\"pinned\\\":true,\\\"visible\\\":true,\\\"order\\\":4},{\\\"id\\\":\\\"workbench.view.extension.jupyter\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":10},{\\\"id\\\":\\\"workbench.view.extension.todo-tree-container\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":11},{\\\"id\\\":\\\"workbench.view.extension.test\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":6},{\\\"id\\\":\\\"workbench.view.extension.references-view\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":7},{\\\"id\\\":\\\"workbench.view.testing\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":5},{\\\"id\\\":\\\"workbench.view.extension.ts-playground\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":8},{\\\"id\\\":\\\"workbench.view.extension.teamsfx\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":11},{\\\"id\\\":\\\"workbench.view.extension.ObjectScriptView\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":11},{\\\"id\\\":\\\"workbench.panel.chatSidebar\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":100},{\\\"id\\\":\\\"workbench.view.extension.frontmatter-explorer\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":25},{\\\"id\\\":\\\"workbench.view.extension.openapi-explorer\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":11},{\\\"id\\\":\\\"workbench.view.extension.copilot\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":11},{\\\"id\\\":\\\"workbench.view.extension.42crunch-platform\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":26},{\\\"id\\\":\\\"workbench.view.extension.thunder-client\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":12},{\\\"id\\\":\\\"workbench.view.extension.PowerShell\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":11},{\\\"id\\\":\\\"workbench.view.extension.wallaby\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":12},{\\\"id\\\":\\\"workbench.view.extension.github-actions\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":11},{\\\"id\\\":\\\"workbench.view.extension.jsonEditor-view\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":12},{\\\"id\\\":\\\"workbench.view.extension.copilot-sidebar-webview\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":8},{\\\"id\\\":\\\"workbench.view.extension.stripe\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":8},{\\\"id\\\":\\\"workbench.view.extension.objectExplorer\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":11},{\\\"id\\\":\\\"workbench.view.extension.browser-preview\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":8},{\\\"id\\\":\\\"workbench.view.extension.PowerShellCommandExplorer\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":9},{\\\"id\\\":\\\"workbench.view.extension.nuget-explorer\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":10},{\\\"id\\\":\\\"workbench.view.extension.graalvm-explorer\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":10},{\\\"id\\\":\\\"workbench.view.extension.sqltoolsActivityBarContainer\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":9},{\\\"id\\\":\\\"workbench.view.extension.gitlens\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":8},{\\\"id\\\":\\\"workbench.view.extension.sln_explorer\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":8},{\\\"id\\\":\\\"workbench.view.extension.kubernetesView\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":11},{\\\"id\\\":\\\"workbench.view.extension.nx-console\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":10},{\\\"id\\\":\\\"workbench.view.extension.node-notebook\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":9},{\\\"id\\\":\\\"workbench.view.extension.workspaceViewer\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":9},{\\\"id\\\":\\\"workbench.view.extension.angular\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":8},{\\\"id\\\":\\\"workbench.view.extension.cspell-explorer\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":11},{\\\"id\\\":\\\"workbench.view.extension.flutter\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":8},{\\\"id\\\":\\\"workbench.view.extension.music-time\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":10},{\\\"id\\\":\\\"workbench.view.extension.actions\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":10},{\\\"id\\\":\\\"workbench.view.extension.powerShellProTools\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":14},{\\\"id\\\":\\\"workbench.view.extension.githd-explorer\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":8},{\\\"id\\\":\\\"workbench.view.extension.code-time\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":11},{\\\"id\\\":\\\"workbench.view.extension.platformio\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":10},{\\\"id\\\":\\\"workbench.view.extension.vscode-edge-devtools-view\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":9},{\\\"id\\\":\\\"workbench.panel.interactiveSessionSidebar.copilot\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":100},{\\\"id\\\":\\\"workbench.view.extension.dockerView\\\",\\\"pinned\\\":true,\\\"visible\\\":true,\\\"order\\\":9},{\\\"id\\\":\\\"workbench.view.extension.cmake__viewContainer\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":8},{\\\"id\\\":\\\"workbench.panel.markers\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":0},{\\\"id\\\":\\\"workbench.view.extension.data-wrangler-primary\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":8},{\\\"id\\\":\\\"workbench.view.extension.package-explorer\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":10},{\\\"id\\\":\\\"workbench.view.extension.azure\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":8},{\\\"id\\\":\\\"workbench.panel.terminal\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":22},{\\\"id\\\":\\\"workbench.view.extension.testExplorer\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":25},{\\\"id\\\":\\\"workbench.panel.repl\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":24},{\\\"id\\\":\\\"workbench.panel.output\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":25},{\\\"id\\\":\\\"workbench.view.extension.blockchain-explorer\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":18},{\\\"id\\\":\\\"workbench.view.extension.CppRenameActivityBar\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":20},{\\\"id\\\":\\\"workbench.view.extension.VirtualGistsContainer\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":8},{\\\"id\\\":\\\"workbench.view.extension.opensshremotesexplorer\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":21},{\\\"id\\\":\\\"workbench.view.extension.l13Projects\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":20},{\\\"id\\\":\\\"workbench.view.extension.unotes\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":15},{\\\"id\\\":\\\"workbench.view.extension.latex\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":11},{\\\"id\\\":\\\"workbench.view.extension.todo\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":16},{\\\"id\\\":\\\"workbench.view.extension.pwa\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":25},{\\\"id\\\":\\\"workbench.view.extension.dataworkspace\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":10},{\\\"id\\\":\\\"workbench.view.extension.liveshare\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":10},{\\\"id\\\":\\\"workbench.view.extension.codestream-activitybar\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":8},{\\\"id\\\":\\\"workbench.view.extension.copilot-labs\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":8},{\\\"id\\\":\\\"workbench.view.extension.snippet-explorer\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":15},{\\\"id\\\":\\\"workbench.view.extension.tree-view\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":10},{\\\"id\\\":\\\"workbench.view.extension.1-kubernetesContainer\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":11},{\\\"id\\\":\\\"workbench.view.extension.latex-workshop-activitybar\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":11},{\\\"id\\\":\\\"workbench.view.extension.favorites-bar\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":20},{\\\"id\\\":\\\"workbench.view.extension.log-viewer\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":25},{\\\"id\\\":\\\"workbench.view.extension.favorites-explorer\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":24},{\\\"id\\\":\\\"workbench.view.extension.gitlab-workflow\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":8},{\\\"id\\\":\\\"workbench.view.extension.chatActivityViewSlack\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":17},{\\\"id\\\":\\\"workbench.view.extension.chatActivityViewDiscord\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":18},{\\\"id\\\":\\\"workbench.view.extension.appmap\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":12},{\\\"id\\\":\\\"workbench.view.extension.azdo-pull-requests\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":32},{\\\"id\\\":\\\"workbench.view.extension.2-cloudRunContainer\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":12},{\\\"id\\\":\\\"workbench.view.extension.azure-policy\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":12},{\\\"id\\\":\\\"workbench.view.extension.thunder-client-sidebar-view\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":27},{\\\"id\\\":\\\"workbench.view.extension.snippView\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":29},{\\\"id\\\":\\\"workbench.view.extension.ionide-fsharp\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":29},{\\\"id\\\":\\\"workbench.view.extension.swaggerhub\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":29},{\\\"id\\\":\\\"workbench.view.extension.taskActivity\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":26},{\\\"id\\\":\\\"workbench.view.extension.gistpad\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":29},{\\\"id\\\":\\\"workbench.view.extension.VirtualRepositories\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":10},{\\\"id\\\":\\\"workbench.view.extension.Repositories\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":10},{\\\"id\\\":\\\"workbench.view.extension.VirtualRepositoriesContainer\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":13},{\\\"id\\\":\\\"workbench.view.extension.3-cloudApiContainer\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":13},{\\\"id\\\":\\\"workbench.view.extension.workspace-explorer\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":28},{\\\"id\\\":\\\"workbench.view.extension.snippetsManager\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":8},{\\\"id\\\":\\\"workbench.view.extension.iridium\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":19},{\\\"id\\\":\\\"workbench.view.extension.gitops\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":30},{\\\"id\\\":\\\"workbench.view.extension.4-cloudSecretsContainer\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":14},{\\\"id\\\":\\\"workbench.view.extension.bloop-search-view\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":34},{\\\"id\\\":\\\"workbench.view.extension.microsoft-todo-unoffcial\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":29},{\\\"id\\\":\\\"workbench.view.extension.5-apigeeContainer\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":15},{\\\"id\\\":\\\"workbench.view.extension.spring\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":8},{\\\"id\\\":\\\"userDataProfiles\\\",\\\"pinned\\\":true,\\\"visible\\\":true},{\\\"id\\\":\\\"workbench.view.editSessions\\\",\\\"pinned\\\":true,\\\"visible\\\":false},{\\\"id\\\":\\\"workbench.view.sync\\\",\\\"pinned\\\":true,\\\"visible\\\":false}]\",\"workbench.view.debug.state.hidden\":\"[{\\\"id\\\":\\\"workbench.debug.welcome\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.debug.variablesView\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.debug.watchExpressionsView\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.debug.callStackView\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.debug.loadedScriptsView\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.debug.breakPointsView\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"jsBrowserBreakpoints\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"jsExcludedCallers\\\",\\\"isHidden\\\":false}]\",\"workbench.panel.repl.hidden\":\"[{\\\"id\\\":\\\"workbench.panel.repl.view\\\",\\\"isHidden\\\":false}]\",\"workbench.panel.pinnedPanels\":\"[{\\\"id\\\":\\\"workbench.panel.markers\\\",\\\"pinned\\\":true,\\\"visible\\\":true,\\\"order\\\":0},{\\\"id\\\":\\\"workbench.panel.output\\\",\\\"pinned\\\":true,\\\"visible\\\":true,\\\"order\\\":1},{\\\"id\\\":\\\"workbench.panel.repl\\\",\\\"pinned\\\":true,\\\"visible\\\":true,\\\"order\\\":2},{\\\"id\\\":\\\"~remote.forwardedPortsContainer\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":5},{\\\"id\\\":\\\"terminal\\\",\\\"pinned\\\":true,\\\"visible\\\":true,\\\"order\\\":3},{\\\"id\\\":\\\"workbench.panel.testResults\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":3},{\\\"id\\\":\\\"workbench.view.extension.jupyter-variables\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":6},{\\\"id\\\":\\\"workbench.view.extension.sqltoolsPanelContainer\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":6},{\\\"id\\\":\\\"workbench.view.extension.azurePanel\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":6},{\\\"id\\\":\\\"workbench.panel.comments\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":10},{\\\"id\\\":\\\"workbench.view.extension.AskJarvisPanel\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":8},{\\\"id\\\":\\\"workbench.view.extension.gitlensPanel\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":6},{\\\"id\\\":\\\"workbench.view.extension.data-wrangler-secondary\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":6},{\\\"id\\\":\\\"refactorPreview\\\",\\\"pinned\\\":true,\\\"visible\\\":false}]\",\"nps/lastSessionDate\":\"Mon Mar 20 2023\",\"nps/sessionCount\":\"1\",\"cpp.1.lastSessionDate\":\"Mon Mar 20 2023\",\"cpp.1.sessionCount\":\"1\",\"java.2.lastSessionDate\":\"Mon Mar 20 2023\",\"java.2.sessionCount\":\"1\",\"javascript.1.lastSessionDate\":\"Mon Mar 20 2023\",\"javascript.1.sessionCount\":\"1\",\"typescript.1.lastSessionDate\":\"Mon Mar 20 2023\",\"typescript.1.sessionCount\":\"1\",\"csharp.1.lastSessionDate\":\"Mon Mar 20 2023\",\"csharp.1.sessionCount\":\"1\",\"workbench.telemetryOptOutShown\":\"true\",\"workbench.welcomePage.walkthroughMetadata\":\"[[\\\"ms-vscode-remote.remote-wsl#wslWalkthrough\\\",{\\\"firstSeen\\\":1701354403261,\\\"stepIDs\\\":[\\\"explore.commands\\\",\\\"open.wslwindow\\\",\\\"create.project\\\",\\\"open.project\\\",\\\"linux.environment\\\",\\\"install.tools\\\",\\\"run.debug\\\",\\\"come.back\\\"],\\\"manaullyOpened\\\":false}],[\\\"ms-azuretools.vscode-docker#dockerStart\\\",{\\\"firstSeen\\\":1701354572424,\\\"stepIDs\\\":[\\\"openFolder\\\",\\\"openFolderMac\\\",\\\"scaffold\\\",\\\"buildImage\\\",\\\"runContainer\\\",\\\"dockerExplorer\\\",\\\"pushImage\\\",\\\"azDeploy\\\",\\\"learn\\\"],\\\"manaullyOpened\\\":false}],[\\\"ms-python.python#pythonWelcome\\\",{\\\"firstSeen\\\":1701354572424,\\\"stepIDs\\\":[\\\"python.createPythonFile\\\",\\\"python.installPythonWin8\\\",\\\"python.installPythonMac\\\",\\\"python.installPythonLinux\\\",\\\"python.selectInterpreter\\\",\\\"python.createEnvironment\\\",\\\"python.runAndDebug\\\",\\\"python.learnMoreWithDS\\\"],\\\"manaullyOpened\\\":false}],[\\\"ms-python.python#pythonWelcome2\\\",{\\\"firstSeen\\\":1701354572424,\\\"stepIDs\\\":[\\\"python.createPythonFolder\\\",\\\"python.createPythonFile\\\",\\\"python.installPythonWin8\\\",\\\"python.installPythonMac\\\",\\\"python.installPythonLinux\\\",\\\"python.createEnvironment2\\\",\\\"python.runAndDebug\\\",\\\"python.learnMoreWithDS2\\\"],\\\"manaullyOpened\\\":false}],[\\\"ms-python.python#pythonDataScienceWelcome\\\",{\\\"firstSeen\\\":1701354572424,\\\"stepIDs\\\":[\\\"python.installJupyterExt\\\",\\\"python.createNewNotebook\\\",\\\"python.openInteractiveWindow\\\",\\\"python.dataScienceLearnMore\\\"],\\\"manaullyOpened\\\":false}],[\\\"ms-vscode.remote-repositories#remoteRepositoriesWalkthrough\\\",{\\\"firstSeen\\\":1701355351789,\\\"stepIDs\\\":[\\\"editCommitRepo\\\",\\\"createGitHubPullRequest\\\",\\\"continueOn\\\",\\\"openRepo\\\",\\\"remoteIndicator\\\"],\\\"manaullyOpened\\\":false}],[\\\"ms-toolsai.jupyter#jupyterWelcome\\\",{\\\"firstSeen\\\":1701360557587,\\\"stepIDs\\\":[\\\"ipynb.newUntitledIpynb\\\",\\\"jupyter.selectKernel\\\",\\\"jupyter.exploreAndDebug\\\",\\\"jupyter.dataScienceLearnMore\\\"],\\\"manaullyOpened\\\":false}],[\\\"ms-vscode.cpptools#cppWelcome\\\",{\\\"firstSeen\\\":1701360557587,\\\"stepIDs\\\":[\\\"awaiting.activation.mac\\\",\\\"awaiting.activation.linux\\\",\\\"awaiting.activation.windows\\\",\\\"awaiting.activation.windows10\\\",\\\"awaiting.activation.windows11\\\",\\\"no.compilers.found.mac\\\",\\\"no.compilers.found.linux\\\",\\\"no.compilers.found.windows\\\",\\\"no.compilers.found.windows10\\\",\\\"no.compilers.found.windows11\\\",\\\"verify.compiler.mac\\\",\\\"verify.compiler.linux\\\",\\\"verify.compiler.windows\\\",\\\"verify.compiler.windows10\\\",\\\"verify.compiler.windows11\\\",\\\"create.cpp.file\\\",\\\"relaunch.developer.command.prompt.windows\\\",\\\"run.project.mac\\\",\\\"run.project.linux\\\",\\\"run.project.windows\\\",\\\"customize.debugging.linux\\\",\\\"customize.debugging.windows\\\",\\\"customize.debugging.mac\\\"],\\\"manaullyOpened\\\":false}],[\\\"alefragnani.project-manager#projectManagerWelcome\\\",{\\\"firstSeen\\\":1713359925003,\\\"stepIDs\\\":[\\\"saveYourFavoriteProjects\\\",\\\"autoDetectGitRepositories\\\",\\\"findAndOpenProjects\\\",\\\"organizeWithTags\\\",\\\"exclusiveSideBar\\\",\\\"workingWithRemotes\\\"],\\\"manaullyOpened\\\":false}]]\",\"workbench.statusbar.hidden\":\"[\\\"status.workspaceTrust.1679345439283\\\",\\\"status.workspaceTrust.73d5e5c0573f77ee09afaabbb9bfcaf5\\\",\\\"status.workspaceTrust.42864412b711bf21d7aea2d7e66cc6de\\\",\\\"status.workspaceTrust.92806934cad7db7294e53c50943b7fe8\\\",\\\"status.workspaceTrust.abd1be6f9ea531ca0d9d1ab35f49f1ad\\\",\\\"status.workspaceTrust.f97d4cd6c7f6aafa346eb8b327f26194\\\",\\\"status.workspaceTrust.64c49213a05bb8b0a575b6db4cbdf16e\\\",\\\"status.workspaceTrust.1701730257032\\\",\\\"status.workspaceTrust.d58ac7e584d4d3579b0e3c053b0ca6ba\\\",\\\"status.workspaceTrust.1701730854591\\\",\\\"status.workspaceTrust.eee8674571c5c0f4ea865274ed180362\\\",\\\"status.workspaceTrust.335f224169beac13614e3f98eac7b190\\\",\\\"status.workspaceTrust.1701791529243\\\",\\\"status.workspaceTrust.1701799361388\\\",\\\"status.workspaceTrust.acd1730dc09b267cf5ac4a485b4867eb\\\",\\\"status.workspaceTrust.1701800756151\\\",\\\"status.workspaceTrust.1701816872653\\\",\\\"status.workspaceTrust.39dec3c877c9667b0232a6a0f80f5c43\\\",\\\"status.workspaceTrust.1701822484214\\\",\\\"status.workspaceTrust.da603eaf2527eb0721b46c0d7632cb8f\\\",\\\"status.workspaceTrust.1701896902489\\\",\\\"status.workspaceTrust.1701898300503\\\",\\\"status.workspaceTrust.1701900534969\\\",\\\"status.workspaceTrust.1701902493954\\\",\\\"status.workspaceTrust.1701903618503\\\",\\\"status.workspaceTrust.1701903894983\\\",\\\"status.workspaceTrust.1701905408772\\\",\\\"status.workspaceTrust.1701953899959\\\",\\\"status.workspaceTrust.1701958552145\\\",\\\"status.workspaceTrust.1701963428085\\\",\\\"status.workspaceTrust.1702072777066\\\",\\\"status.workspaceTrust.1702336223137\\\",\\\"status.workspaceTrust.1702392992341\\\",\\\"status.workspaceTrust.1702399735733\\\",\\\"status.workspaceTrust.1702418249542\\\",\\\"status.workspaceTrust.1702478928626\\\",\\\"status.workspaceTrust.1702479965295\\\",\\\"status.workspaceTrust.1702485006626\\\",\\\"status.workspaceTrust.1702504885155\\\",\\\"status.workspaceTrust.1702508462022\\\",\\\"status.workspaceTrust.1702508491282\\\",\\\"status.workspaceTrust.1702553710265\\\",\\\"status.workspaceTrust.1702573580391\\\",\\\"status.workspaceTrust.9fc66e67b2e80cd117e26d58aabc2ae1\\\",\\\"status.workspaceTrust.839447ce7ddb4db5114ff16f8a53e666\\\",\\\"status.workspaceTrust.1706742870159\\\",\\\"status.workspaceTrust.2c8bba3e0d96116b21be61557027a6fd\\\",\\\"status.workspaceTrust.1706806581042\\\",\\\"status.workspaceTrust.68a23cd59c8d3cad00f3ab6d6ce12ae9\\\",\\\"status.workspaceTrust.1706818785243\\\",\\\"status.workspaceTrust.1706819098999\\\",\\\"status.workspaceTrust.1706820204694\\\",\\\"status.workspaceTrust.1706888695278\\\",\\\"status.workspaceTrust.b9f5052cbd9c07cf28102f7cc1b2bdb1\\\",\\\"status.workspaceTrust.1706895487690\\\",\\\"status.workspaceTrust.1706911812914\\\",\\\"status.workspaceTrust.1707149652297\\\",\\\"status.workspaceTrust.840c692c7a44a561a89dbf0b1011c377\\\",\\\"status.workspaceTrust.98eae51c9579bdba8299c836f7185b56\\\",\\\"status.workspaceTrust.1707160582050\\\",\\\"status.workspaceTrust.1707177935504\\\",\\\"status.workspaceTrust.1707236239656\\\",\\\"status.workspaceTrust.1707244215989\\\",\\\"status.workspaceTrust.1707250732231\\\",\\\"status.workspaceTrust.1707253682305\\\",\\\"status.workspaceTrust.1707255516448\\\",\\\"status.workspaceTrust.1707258566660\\\",\\\"status.workspaceTrust.1707261344177\\\",\\\"status.workspaceTrust.1707262136113\\\",\\\"status.workspaceTrust.56321a36854721e63a74f927bcff5c87\\\",\\\"status.workspaceTrust.1707332562638\\\",\\\"status.workspaceTrust.1707351940026\\\",\\\"status.workspaceTrust.1707406029929\\\",\\\"status.workspaceTrust.1707426191034\\\",\\\"status.workspaceTrust.1707428185541\\\",\\\"status.workspaceTrust.1707842148097\\\",\\\"status.workspaceTrust.1707926217756\\\",\\\"status.workspaceTrust.1708098881842\\\",\\\"status.workspaceTrust.1708444543998\\\",\\\"status.workspaceTrust.1708481717094\\\",\\\"status.workspaceTrust.1708562309743\\\",\\\"status.workspaceTrust.1708614996082\\\",\\\"status.workspaceTrust.1708629681551\\\",\\\"status.workspaceTrust.ac43c8570feb9aa1c3314b7d74571669\\\",\\\"status.workspaceTrust.1708715331692\\\",\\\"status.workspaceTrust.c3cdca62a1427ef95a438cce8888c1dd\\\",\\\"status.workspaceTrust.1709598359839\\\",\\\"status.workspaceTrust.1ddcc2b61364f24f72d91d51da23e542\\\"]\",\"workbench.view.extensions.state.hidden\":\"[{\\\"id\\\":\\\"workbench.views.extensions.installed\\\",\\\"isHidden\\\":true},{\\\"id\\\":\\\"workbench.views.extensions.searchOutdated\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.workspaceRecommendations\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.popular\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.searchRecentlyUpdated\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.otherRecommendations\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"extensions.recommendedList\\\",\\\"isHidden\\\":true},{\\\"id\\\":\\\"workbench.views.extensions.enabled\\\",\\\"isHidden\\\":true},{\\\"id\\\":\\\"workbench.views.extensions.disabled\\\",\\\"isHidden\\\":true},{\\\"id\\\":\\\"workbench.views.extensions.marketplace\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.searchInstalled\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.searchEnabled\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.searchDisabled\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.searchBuiltin\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.searchWorkspaceUnsupported\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.builtinFeatureExtensions\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.builtinThemeExtensions\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.builtinProgrammingLanguageExtensions\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.untrustedUnsupportedExtensions\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.untrustedPartiallySupportedExtensions\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.virtualUnsupportedExtensions\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.virtualPartiallySupportedExtensions\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.deprecatedExtensions\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.local.installed\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.remote.installed\\\",\\\"isHidden\\\":false}]\",\"commandPalette.mru.cache\":\"{\\\"usesLRU\\\":true,\\\"entries\\\":[{\\\"key\\\":\\\"workbench.profiles.actions.importProfile\\\",\\\"value\\\":1},{\\\"key\\\":\\\"editor.action.smartSelect.expand\\\",\\\"value\\\":11},{\\\"key\\\":\\\"git.deleteRemoteTag\\\",\\\"value\\\":25},{\\\"key\\\":\\\"git.fetch\\\",\\\"value\\\":27},{\\\"key\\\":\\\"git.fetchPrune\\\",\\\"value\\\":29},{\\\"key\\\":\\\"python.createTerminal\\\",\\\"value\\\":51},{\\\"key\\\":\\\"python.setInterpreter\\\",\\\"value\\\":74},{\\\"key\\\":\\\"opensshremotes.addNewSshHost\\\",\\\"value\\\":83},{\\\"key\\\":\\\"git.checkout\\\",\\\"value\\\":114},{\\\"key\\\":\\\"git.deleteBranch\\\",\\\"value\\\":118},{\\\"key\\\":\\\"python.createEnvironment\\\",\\\"value\\\":120},{\\\"key\\\":\\\"git.push\\\",\\\"value\\\":121},{\\\"key\\\":\\\"opensshremotes.openEmptyWindow\\\",\\\"value\\\":124},{\\\"key\\\":\\\"git.pullFrom\\\",\\\"value\\\":126},{\\\"key\\\":\\\"git.branchFrom\\\",\\\"value\\\":127}]}\",\"commandPalette.mru.counter\":\"128\",\"workbench.view.extension.test.state.hidden\":\"[{\\\"id\\\":\\\"workbench.view.testing\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.view.testCoverage\\\",\\\"isHidden\\\":false}]\",\"workbench.view.extension.dockerView.state.hidden\":\"[{\\\"id\\\":\\\"dockerContainers\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"dockerImages\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"dockerRegistries\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"dockerNetworks\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"dockerVolumes\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"vscode-docker.views.dockerContexts\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"vscode-docker.views.help\\\",\\\"isHidden\\\":false}]\",\"extensionTips/promptedExecutableTips\":\"{\\\"wsl\\\":[\\\"ms-vscode-remote.remote-wsl\\\"]}\",\"workbench.view.remote.state.hidden\":\"[{\\\"id\\\":\\\"targetsContainers\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"detailsContainers\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"devVolumes\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"targetsWsl\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"remoteTargets\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"remoteHub.views.workspaceRepositories\\\",\\\"isHidden\\\":false}]\",\"colorThemeData\":\"{\\\"id\\\":\\\"vs-dark vscode-theme-defaults-themes-dark_modern-json\\\",\\\"label\\\":\\\"Dark Modern\\\",\\\"settingsId\\\":\\\"Default Dark Modern\\\",\\\"themeTokenColors\\\":[{\\\"settings\\\":{\\\"foreground\\\":\\\"#D4D4D4\\\"},\\\"scope\\\":[\\\"meta.embedded\\\",\\\"source.groovy.embedded\\\",\\\"string meta.image.inline.markdown\\\",\\\"variable.legacy.builtin.python\\\"]},{\\\"settings\\\":{\\\"fontStyle\\\":\\\"italic\\\"},\\\"scope\\\":\\\"emphasis\\\"},{\\\"settings\\\":{\\\"fontStyle\\\":\\\"bold\\\"},\\\"scope\\\":\\\"strong\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#000080\\\"},\\\"scope\\\":\\\"header\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#6A9955\\\"},\\\"scope\\\":\\\"comment\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"constant.language\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#b5cea8\\\"},\\\"scope\\\":[\\\"constant.numeric\\\",\\\"variable.other.enummember\\\",\\\"keyword.operator.plus.exponent\\\",\\\"keyword.operator.minus.exponent\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#646695\\\"},\\\"scope\\\":\\\"constant.regexp\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"entity.name.tag\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#d7ba7d\\\"},\\\"scope\\\":[\\\"entity.name.tag.css\\\",\\\"entity.name.tag.less\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#9cdcfe\\\"},\\\"scope\\\":\\\"entity.other.attribute-name\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#d7ba7d\\\"},\\\"scope\\\":[\\\"entity.other.attribute-name.class.css\\\",\\\"source.css entity.other.attribute-name.class\\\",\\\"entity.other.attribute-name.id.css\\\",\\\"entity.other.attribute-name.parent-selector.css\\\",\\\"entity.other.attribute-name.parent.less\\\",\\\"source.css entity.other.attribute-name.pseudo-class\\\",\\\"entity.other.attribute-name.pseudo-element.css\\\",\\\"source.css.less entity.other.attribute-name.id\\\",\\\"entity.other.attribute-name.scss\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#f44747\\\"},\\\"scope\\\":\\\"invalid\\\"},{\\\"settings\\\":{\\\"fontStyle\\\":\\\"underline\\\"},\\\"scope\\\":\\\"markup.underline\\\"},{\\\"settings\\\":{\\\"fontStyle\\\":\\\"bold\\\",\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"markup.bold\\\"},{\\\"settings\\\":{\\\"fontStyle\\\":\\\"bold\\\",\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"markup.heading\\\"},{\\\"settings\\\":{\\\"fontStyle\\\":\\\"italic\\\"},\\\"scope\\\":\\\"markup.italic\\\"},{\\\"settings\\\":{\\\"fontStyle\\\":\\\"strikethrough\\\"},\\\"scope\\\":\\\"markup.strikethrough\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#b5cea8\\\"},\\\"scope\\\":\\\"markup.inserted\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#ce9178\\\"},\\\"scope\\\":\\\"markup.deleted\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"markup.changed\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#6A9955\\\"},\\\"scope\\\":\\\"punctuation.definition.quote.begin.markdown\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#6796e6\\\"},\\\"scope\\\":\\\"punctuation.definition.list.begin.markdown\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#ce9178\\\"},\\\"scope\\\":\\\"markup.inline.raw\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#808080\\\"},\\\"scope\\\":\\\"punctuation.definition.tag\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":[\\\"meta.preprocessor\\\",\\\"entity.name.function.preprocessor\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#ce9178\\\"},\\\"scope\\\":\\\"meta.preprocessor.string\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#b5cea8\\\"},\\\"scope\\\":\\\"meta.preprocessor.numeric\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#9cdcfe\\\"},\\\"scope\\\":\\\"meta.structure.dictionary.key.python\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"meta.diff.header\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"storage\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"storage.type\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":[\\\"storage.modifier\\\",\\\"keyword.operator.noexcept\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#ce9178\\\"},\\\"scope\\\":[\\\"string\\\",\\\"meta.embedded.assembly\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#ce9178\\\"},\\\"scope\\\":\\\"string.tag\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#ce9178\\\"},\\\"scope\\\":\\\"string.value\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#d16969\\\"},\\\"scope\\\":\\\"string.regexp\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":[\\\"punctuation.definition.template-expression.begin\\\",\\\"punctuation.definition.template-expression.end\\\",\\\"punctuation.section.embedded\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#d4d4d4\\\"},\\\"scope\\\":[\\\"meta.template.expression\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#9cdcfe\\\"},\\\"scope\\\":[\\\"support.type.vendored.property-name\\\",\\\"support.type.property-name\\\",\\\"source.css variable\\\",\\\"source.coffee.embedded\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"keyword\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"keyword.control\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#d4d4d4\\\"},\\\"scope\\\":\\\"keyword.operator\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":[\\\"keyword.operator.new\\\",\\\"keyword.operator.expression\\\",\\\"keyword.operator.cast\\\",\\\"keyword.operator.sizeof\\\",\\\"keyword.operator.alignof\\\",\\\"keyword.operator.typeid\\\",\\\"keyword.operator.alignas\\\",\\\"keyword.operator.instanceof\\\",\\\"keyword.operator.logical.python\\\",\\\"keyword.operator.wordlike\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#b5cea8\\\"},\\\"scope\\\":\\\"keyword.other.unit\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":[\\\"punctuation.section.embedded.begin.php\\\",\\\"punctuation.section.embedded.end.php\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#9cdcfe\\\"},\\\"scope\\\":\\\"support.function.git-rebase\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#b5cea8\\\"},\\\"scope\\\":\\\"constant.sha.git-rebase\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#d4d4d4\\\"},\\\"scope\\\":[\\\"storage.modifier.import.java\\\",\\\"variable.language.wildcard.java\\\",\\\"storage.modifier.package.java\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"variable.language\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#DCDCAA\\\"},\\\"scope\\\":[\\\"entity.name.function\\\",\\\"support.function\\\",\\\"support.constant.handlebars\\\",\\\"source.powershell variable.other.member\\\",\\\"entity.name.operator.custom-literal\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#4EC9B0\\\"},\\\"scope\\\":[\\\"support.class\\\",\\\"support.type\\\",\\\"entity.name.type\\\",\\\"entity.name.namespace\\\",\\\"entity.other.attribute\\\",\\\"entity.name.scope-resolution\\\",\\\"entity.name.class\\\",\\\"storage.type.numeric.go\\\",\\\"storage.type.byte.go\\\",\\\"storage.type.boolean.go\\\",\\\"storage.type.string.go\\\",\\\"storage.type.uintptr.go\\\",\\\"storage.type.error.go\\\",\\\"storage.type.rune.go\\\",\\\"storage.type.cs\\\",\\\"storage.type.generic.cs\\\",\\\"storage.type.modifier.cs\\\",\\\"storage.type.variable.cs\\\",\\\"storage.type.annotation.java\\\",\\\"storage.type.generic.java\\\",\\\"storage.type.java\\\",\\\"storage.type.object.array.java\\\",\\\"storage.type.primitive.array.java\\\",\\\"storage.type.primitive.java\\\",\\\"storage.type.token.java\\\",\\\"storage.type.groovy\\\",\\\"storage.type.annotation.groovy\\\",\\\"storage.type.parameters.groovy\\\",\\\"storage.type.generic.groovy\\\",\\\"storage.type.object.array.groovy\\\",\\\"storage.type.primitive.array.groovy\\\",\\\"storage.type.primitive.groovy\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#4EC9B0\\\"},\\\"scope\\\":[\\\"meta.type.cast.expr\\\",\\\"meta.type.new.expr\\\",\\\"support.constant.math\\\",\\\"support.constant.dom\\\",\\\"support.constant.json\\\",\\\"entity.other.inherited-class\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#C586C0\\\"},\\\"scope\\\":[\\\"keyword.control\\\",\\\"source.cpp keyword.operator.new\\\",\\\"keyword.operator.delete\\\",\\\"keyword.other.using\\\",\\\"keyword.other.directive.using\\\",\\\"keyword.other.operator\\\",\\\"entity.name.operator\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#9CDCFE\\\"},\\\"scope\\\":[\\\"variable\\\",\\\"meta.definition.variable.name\\\",\\\"support.variable\\\",\\\"entity.name.variable\\\",\\\"constant.other.placeholder\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#4FC1FF\\\"},\\\"scope\\\":[\\\"variable.other.constant\\\",\\\"variable.other.enummember\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#9CDCFE\\\"},\\\"scope\\\":[\\\"meta.object-literal.key\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#CE9178\\\"},\\\"scope\\\":[\\\"support.constant.property-value\\\",\\\"support.constant.font-name\\\",\\\"support.constant.media-type\\\",\\\"support.constant.media\\\",\\\"constant.other.color.rgb-value\\\",\\\"constant.other.rgb-value\\\",\\\"support.constant.color\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#CE9178\\\"},\\\"scope\\\":[\\\"punctuation.definition.group.regexp\\\",\\\"punctuation.definition.group.assertion.regexp\\\",\\\"punctuation.definition.character-class.regexp\\\",\\\"punctuation.character.set.begin.regexp\\\",\\\"punctuation.character.set.end.regexp\\\",\\\"keyword.operator.negation.regexp\\\",\\\"support.other.parenthesis.regexp\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#d16969\\\"},\\\"scope\\\":[\\\"constant.character.character-class.regexp\\\",\\\"constant.other.character-class.set.regexp\\\",\\\"constant.other.character-class.regexp\\\",\\\"constant.character.set.regexp\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#DCDCAA\\\"},\\\"scope\\\":[\\\"keyword.operator.or.regexp\\\",\\\"keyword.control.anchor.regexp\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#d7ba7d\\\"},\\\"scope\\\":\\\"keyword.operator.quantifier.regexp\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":[\\\"constant.character\\\",\\\"constant.other.option\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#d7ba7d\\\"},\\\"scope\\\":\\\"constant.character.escape\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#C8C8C8\\\"},\\\"scope\\\":\\\"entity.name.label\\\"}],\\\"semanticTokenRules\\\":[{\\\"_selector\\\":\\\"newOperator\\\",\\\"_style\\\":{\\\"_foreground\\\":\\\"#d4d4d4\\\",\\\"_bold\\\":null,\\\"_underline\\\":null,\\\"_italic\\\":null,\\\"_strikethrough\\\":null}},{\\\"_selector\\\":\\\"stringLiteral\\\",\\\"_style\\\":{\\\"_foreground\\\":\\\"#ce9178\\\",\\\"_bold\\\":null,\\\"_underline\\\":null,\\\"_italic\\\":null,\\\"_strikethrough\\\":null}},{\\\"_selector\\\":\\\"customLiteral\\\",\\\"_style\\\":{\\\"_foreground\\\":\\\"#d4d4d4\\\",\\\"_bold\\\":null,\\\"_underline\\\":null,\\\"_italic\\\":null,\\\"_strikethrough\\\":null}},{\\\"_selector\\\":\\\"numberLiteral\\\",\\\"_style\\\":{\\\"_foreground\\\":\\\"#b5cea8\\\",\\\"_bold\\\":null,\\\"_underline\\\":null,\\\"_italic\\\":null,\\\"_strikethrough\\\":null}},{\\\"_selector\\\":\\\"newOperator\\\",\\\"_style\\\":{\\\"_foreground\\\":\\\"#c586c0\\\",\\\"_bold\\\":null,\\\"_underline\\\":null,\\\"_italic\\\":null,\\\"_strikethrough\\\":null}},{\\\"_selector\\\":\\\"stringLiteral\\\",\\\"_style\\\":{\\\"_foreground\\\":\\\"#ce9178\\\",\\\"_bold\\\":null,\\\"_underline\\\":null,\\\"_italic\\\":null,\\\"_strikethrough\\\":null}},{\\\"_selector\\\":\\\"customLiteral\\\",\\\"_style\\\":{\\\"_foreground\\\":\\\"#dcdcaa\\\",\\\"_bold\\\":null,\\\"_underline\\\":null,\\\"_italic\\\":null,\\\"_strikethrough\\\":null}},{\\\"_selector\\\":\\\"numberLiteral\\\",\\\"_style\\\":{\\\"_foreground\\\":\\\"#b5cea8\\\",\\\"_bold\\\":null,\\\"_underline\\\":null,\\\"_italic\\\":null,\\\"_strikethrough\\\":null}}],\\\"extensionData\\\":{\\\"_extensionId\\\":\\\"vscode.theme-defaults\\\",\\\"_extensionIsBuiltin\\\":true,\\\"_extensionName\\\":\\\"theme-defaults\\\",\\\"_extensionPublisher\\\":\\\"vscode\\\"},\\\"themeSemanticHighlighting\\\":true,\\\"colorMap\\\":{\\\"checkbox.border\\\":\\\"#3c3c3c\\\",\\\"editor.background\\\":\\\"#1f1f1f\\\",\\\"editor.foreground\\\":\\\"#cccccc\\\",\\\"editor.inactiveSelectionBackground\\\":\\\"#3a3d41\\\",\\\"editorIndentGuide.background1\\\":\\\"#404040\\\",\\\"editorIndentGuide.activeBackground1\\\":\\\"#707070\\\",\\\"editor.selectionHighlightBackground\\\":\\\"#add6ff26\\\",\\\"list.dropBackground\\\":\\\"#383b3d\\\",\\\"activityBarBadge.background\\\":\\\"#0078d4\\\",\\\"sideBarTitle.foreground\\\":\\\"#cccccc\\\",\\\"input.placeholderForeground\\\":\\\"#989898\\\",\\\"menu.background\\\":\\\"#1f1f1f\\\",\\\"menu.foreground\\\":\\\"#cccccc\\\",\\\"menu.separatorBackground\\\":\\\"#454545\\\",\\\"menu.border\\\":\\\"#454545\\\",\\\"statusBarItem.remoteForeground\\\":\\\"#ffffff\\\",\\\"statusBarItem.remoteBackground\\\":\\\"#0078d4\\\",\\\"ports.iconRunningProcessForeground\\\":\\\"#369432\\\",\\\"sideBarSectionHeader.background\\\":\\\"#181818\\\",\\\"sideBarSectionHeader.border\\\":\\\"#2b2b2b\\\",\\\"tab.selectedBackground\\\":\\\"#222222\\\",\\\"tab.selectedForeground\\\":\\\"#ffffffa0\\\",\\\"tab.lastPinnedBorder\\\":\\\"#cccccc33\\\",\\\"list.activeSelectionIconForeground\\\":\\\"#ffffff\\\",\\\"terminal.inactiveSelectionBackground\\\":\\\"#3a3d41\\\",\\\"widget.border\\\":\\\"#313131\\\",\\\"actionBar.toggledBackground\\\":\\\"#383a49\\\",\\\"activityBar.activeBorder\\\":\\\"#0078d4\\\",\\\"activityBar.background\\\":\\\"#181818\\\",\\\"activityBar.border\\\":\\\"#2b2b2b\\\",\\\"activityBar.foreground\\\":\\\"#d7d7d7\\\",\\\"activityBar.inactiveForeground\\\":\\\"#868686\\\",\\\"activityBarBadge.foreground\\\":\\\"#ffffff\\\",\\\"badge.background\\\":\\\"#616161\\\",\\\"badge.foreground\\\":\\\"#f8f8f8\\\",\\\"button.background\\\":\\\"#0078d4\\\",\\\"button.border\\\":\\\"#ffffff12\\\",\\\"button.foreground\\\":\\\"#ffffff\\\",\\\"button.hoverBackground\\\":\\\"#026ec1\\\",\\\"button.secondaryBackground\\\":\\\"#313131\\\",\\\"button.secondaryForeground\\\":\\\"#cccccc\\\",\\\"button.secondaryHoverBackground\\\":\\\"#3c3c3c\\\",\\\"chat.slashCommandBackground\\\":\\\"#34414b\\\",\\\"chat.slashCommandForeground\\\":\\\"#40a6ff\\\",\\\"checkbox.background\\\":\\\"#313131\\\",\\\"debugToolBar.background\\\":\\\"#181818\\\",\\\"descriptionForeground\\\":\\\"#9d9d9d\\\",\\\"dropdown.background\\\":\\\"#313131\\\",\\\"dropdown.border\\\":\\\"#3c3c3c\\\",\\\"dropdown.foreground\\\":\\\"#cccccc\\\",\\\"dropdown.listBackground\\\":\\\"#1f1f1f\\\",\\\"editor.findMatchBackground\\\":\\\"#9e6a03\\\",\\\"editorGroup.border\\\":\\\"#ffffff17\\\",\\\"editorGroupHeader.tabsBackground\\\":\\\"#181818\\\",\\\"editorGroupHeader.tabsBorder\\\":\\\"#2b2b2b\\\",\\\"editorGutter.addedBackground\\\":\\\"#2ea043\\\",\\\"editorGutter.deletedBackground\\\":\\\"#f85149\\\",\\\"editorGutter.modifiedBackground\\\":\\\"#0078d4\\\",\\\"editorLineNumber.activeForeground\\\":\\\"#cccccc\\\",\\\"editorLineNumber.foreground\\\":\\\"#6e7681\\\",\\\"editorOverviewRuler.border\\\":\\\"#010409\\\",\\\"editorWidget.background\\\":\\\"#202020\\\",\\\"errorForeground\\\":\\\"#f85149\\\",\\\"focusBorder\\\":\\\"#0078d4\\\",\\\"foreground\\\":\\\"#cccccc\\\",\\\"icon.foreground\\\":\\\"#cccccc\\\",\\\"input.background\\\":\\\"#313131\\\",\\\"input.border\\\":\\\"#3c3c3c\\\",\\\"input.foreground\\\":\\\"#cccccc\\\",\\\"inputOption.activeBackground\\\":\\\"#2489db82\\\",\\\"inputOption.activeBorder\\\":\\\"#2488db\\\",\\\"keybindingLabel.foreground\\\":\\\"#cccccc\\\",\\\"menu.selectionBackground\\\":\\\"#0078d4\\\",\\\"notificationCenterHeader.background\\\":\\\"#1f1f1f\\\",\\\"notificationCenterHeader.foreground\\\":\\\"#cccccc\\\",\\\"notifications.background\\\":\\\"#1f1f1f\\\",\\\"notifications.border\\\":\\\"#2b2b2b\\\",\\\"notifications.foreground\\\":\\\"#cccccc\\\",\\\"panel.background\\\":\\\"#181818\\\",\\\"panel.border\\\":\\\"#2b2b2b\\\",\\\"panelInput.border\\\":\\\"#2b2b2b\\\",\\\"panelTitle.activeBorder\\\":\\\"#0078d4\\\",\\\"panelTitle.activeForeground\\\":\\\"#cccccc\\\",\\\"panelTitle.inactiveForeground\\\":\\\"#9d9d9d\\\",\\\"peekViewEditor.background\\\":\\\"#1f1f1f\\\",\\\"peekViewEditor.matchHighlightBackground\\\":\\\"#bb800966\\\",\\\"peekViewResult.background\\\":\\\"#1f1f1f\\\",\\\"peekViewResult.matchHighlightBackground\\\":\\\"#bb800966\\\",\\\"pickerGroup.border\\\":\\\"#3c3c3c\\\",\\\"progressBar.background\\\":\\\"#0078d4\\\",\\\"quickInput.background\\\":\\\"#222222\\\",\\\"quickInput.foreground\\\":\\\"#cccccc\\\",\\\"settings.dropdownBackground\\\":\\\"#313131\\\",\\\"settings.dropdownBorder\\\":\\\"#3c3c3c\\\",\\\"settings.headerForeground\\\":\\\"#ffffff\\\",\\\"settings.modifiedItemIndicator\\\":\\\"#bb800966\\\",\\\"sideBar.background\\\":\\\"#181818\\\",\\\"sideBar.border\\\":\\\"#2b2b2b\\\",\\\"sideBar.foreground\\\":\\\"#cccccc\\\",\\\"sideBarSectionHeader.foreground\\\":\\\"#cccccc\\\",\\\"statusBar.background\\\":\\\"#181818\\\",\\\"statusBar.border\\\":\\\"#2b2b2b\\\",\\\"statusBar.debuggingBackground\\\":\\\"#0078d4\\\",\\\"statusBar.debuggingForeground\\\":\\\"#ffffff\\\",\\\"statusBar.focusBorder\\\":\\\"#0078d4\\\",\\\"statusBar.foreground\\\":\\\"#cccccc\\\",\\\"statusBar.noFolderBackground\\\":\\\"#1f1f1f\\\",\\\"statusBarItem.focusBorder\\\":\\\"#0078d4\\\",\\\"statusBarItem.prominentBackground\\\":\\\"#6e768166\\\",\\\"tab.activeBackground\\\":\\\"#1f1f1f\\\",\\\"tab.activeBorder\\\":\\\"#1f1f1f\\\",\\\"tab.activeBorderTop\\\":\\\"#0078d4\\\",\\\"tab.activeForeground\\\":\\\"#ffffff\\\",\\\"tab.selectedBorderTop\\\":\\\"#6caddf\\\",\\\"tab.border\\\":\\\"#2b2b2b\\\",\\\"tab.hoverBackground\\\":\\\"#1f1f1f\\\",\\\"tab.inactiveBackground\\\":\\\"#181818\\\",\\\"tab.inactiveForeground\\\":\\\"#9d9d9d\\\",\\\"tab.unfocusedActiveBorder\\\":\\\"#1f1f1f\\\",\\\"tab.unfocusedActiveBorderTop\\\":\\\"#2b2b2b\\\",\\\"tab.unfocusedHoverBackground\\\":\\\"#1f1f1f\\\",\\\"terminal.foreground\\\":\\\"#cccccc\\\",\\\"terminal.tab.activeBorder\\\":\\\"#0078d4\\\",\\\"textBlockQuote.background\\\":\\\"#2b2b2b\\\",\\\"textBlockQuote.border\\\":\\\"#616161\\\",\\\"textCodeBlock.background\\\":\\\"#2b2b2b\\\",\\\"textLink.activeForeground\\\":\\\"#4daafc\\\",\\\"textLink.foreground\\\":\\\"#4daafc\\\",\\\"textPreformat.foreground\\\":\\\"#d0d0d0\\\",\\\"textPreformat.background\\\":\\\"#3c3c3c\\\",\\\"textSeparator.foreground\\\":\\\"#21262d\\\",\\\"titleBar.activeBackground\\\":\\\"#181818\\\",\\\"titleBar.activeForeground\\\":\\\"#cccccc\\\",\\\"titleBar.border\\\":\\\"#2b2b2b\\\",\\\"titleBar.inactiveBackground\\\":\\\"#1f1f1f\\\",\\\"titleBar.inactiveForeground\\\":\\\"#9d9d9d\\\",\\\"welcomePage.tileBackground\\\":\\\"#2b2b2b\\\",\\\"welcomePage.progress.foreground\\\":\\\"#0078d4\\\"},\\\"watch\\\":false}\",\"workbench.view.extension.package-explorer.state.hidden\":\"[{\\\"id\\\":\\\"pythonEnvironments\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workspaceEnvironments\\\",\\\"isHidden\\\":false}]\",\"workbench.panel.alignment\":\"center\",\"workbench.welcomePage.hiddenCategories\":\"[]\",\"userDataProfiles.state.hidden\":\"[{\\\"id\\\":\\\"workbench.views.profiles.export.preview\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.profiles.import.preview\\\",\\\"isHidden\\\":false}]\",\"~remote.forwardedPortsContainer.hidden\":\"[{\\\"id\\\":\\\"~remote.forwardedPorts\\\",\\\"isHidden\\\":false}]\",\"memento/gettingStartedService\":\"{\\\"settingsSync\\\":{\\\"done\\\":true},\\\"pickColorTheme\\\":{\\\"done\\\":true},\\\"commandPaletteTask\\\":{\\\"done\\\":true},\\\"extensionsWeb\\\":{\\\"done\\\":true},\\\"findLanguageExtensions\\\":{\\\"done\\\":true},\\\"pickAFolderTask-Mac\\\":{\\\"done\\\":true},\\\"pickAFolderTask-Other\\\":{\\\"done\\\":true},\\\"quickOpen\\\":{\\\"done\\\":true},\\\"commandPaletteTaskWeb\\\":{\\\"done\\\":true},\\\"installGit\\\":{\\\"done\\\":true},\\\"pickColorThemeWeb\\\":{\\\"done\\\":true},\\\"ms-python.python#pythonWelcome#python.createEnvironment\\\":{\\\"done\\\":true},\\\"ms-python.python#pythonWelcome2#python.createEnvironment2\\\":{\\\"done\\\":true},\\\"scm\\\":{\\\"done\\\":true},\\\"ms-python.python#pythonWelcome2#python.createPythonFolder\\\":{\\\"done\\\":true},\\\"ms-python.python#pythonDataScienceWelcome#python.createNewNotebook\\\":{\\\"done\\\":true},\\\"ms-azuretools.vscode-docker#dockerStart#openFolder\\\":{\\\"done\\\":true},\\\"ms-vscode-remote.remote-wsl#wslWalkthrough#create.project\\\":{\\\"done\\\":true},\\\"ms-python.python#pythonWelcome#python.selectInterpreter\\\":{\\\"done\\\":true},\\\"ms-vscode-remote.remote-wsl#wslWalkthrough#install.tools\\\":{\\\"done\\\":true},\\\"settings\\\":{\\\"done\\\":true},\\\"ms-vscode-remote.remote-wsl#wslWalkthrough#explore.commands\\\":{\\\"done\\\":true},\\\"ms-toolsai.jupyter#jupyterWelcome#ipynb.newUntitledIpynb\\\":{\\\"done\\\":true},\\\"quickOpenWeb\\\":{\\\"done\\\":true}}\",\"snippets.usageTimestamps\":\"[[\\\"python.json/if(main)\\\",1701898276566],[\\\"python.json/async/def\\\",1707499559275],[\\\"python.json/def(abstract class method)\\\",1707843586846],[\\\"python.json/else\\\",1711551909138],[\\\"python.json/def(static class method)\\\",1711561020537],[\\\"python.json/def\\\",1711709400081],[\\\"python.json/def(class method)\\\",1711717425798],[\\\"python.json/for\\\",1712269054568],[\\\"python.json/try/except\\\",1712274814161]]\",\"memento/workbench.editor.keybindings\":\"{\\\"searchHistory\\\":[\\\"\\\\\\\"ctrl+shift+k\\\\\\\"\\\",\\\"Tra\\\",\\\"Transf\\\",\\\"\\\\\\\"ctrl+shift+u\\\\\\\"\\\",\\\"Tras\\\",\\\"Trasform\\\",\\\"Trasfo\\\",\\\"Trans\\\",\\\"Transfor\\\"]}\",\"tabs-list-width-horizontal\":\"167\",\"workbench.activityBar.location\":\"default\",\"expandSuggestionDocs\":\"false\",\"workbench.panel.testResults.state.hidden\":\"[{\\\"id\\\":\\\"workbench.panel.testResults.view\\\",\\\"isHidden\\\":false}]\",\"fileBasedRecommendations/promptedRecommendations\":\"{\\\"powershell\\\":[\\\"ms-vscode.powershell\\\"],\\\"yaml\\\":[\\\"github.vscode-github-actions\\\"],\\\"dockercompose\\\":[\\\"ms-azuretools.vscode-docker\\\"]}\",\"workbench.view.extension.PowerShell.state.hidden\":\"[{\\\"id\\\":\\\"PowerShellCommands\\\",\\\"isHidden\\\":false}]\",\"workbench.view.extension.github-actions.state.hidden\":\"[{\\\"id\\\":\\\"github-actions.current-branch\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"github-actions.workflows\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"github-actions.settings\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"github-actions.empty-view\\\",\\\"isHidden\\\":false}]\",\"timeline.excludeSources\":\"[\\\"timeline.localHistory\\\"]\",\"remote.tunnels.toRestore.ssh-remote+2kgbalapp3.-626202016\":\"[{\\\"remoteHost\\\":\\\"localhost\\\",\\\"remotePort\\\":34277,\\\"localPort\\\":34277,\\\"localAddress\\\":\\\"localhost:34277\\\",\\\"localUri\\\":{\\\"$mid\\\":1,\\\"path\\\":\\\"/\\\",\\\"scheme\\\":\\\"http\\\",\\\"authority\\\":\\\"localhost:34277\\\"},\\\"protocol\\\":\\\"http\\\",\\\"source\\\":{\\\"source\\\":1,\\\"description\\\":\\\"Auto Forwarded\\\"}},{\\\"remoteHost\\\":\\\"localhost\\\",\\\"remotePort\\\":59678,\\\"localPort\\\":59678,\\\"localAddress\\\":\\\"localhost:59678\\\",\\\"localUri\\\":{\\\"$mid\\\":1,\\\"path\\\":\\\"/\\\",\\\"scheme\\\":\\\"http\\\",\\\"authority\\\":\\\"localhost:59678\\\"},\\\"protocol\\\":\\\"http\\\",\\\"source\\\":{\\\"source\\\":1,\\\"description\\\":\\\"Auto Forwarded\\\"}},{\\\"remoteHost\\\":\\\"localhost\\\",\\\"remotePort\\\":33167,\\\"localPort\\\":33167,\\\"localAddress\\\":\\\"localhost:33167\\\",\\\"localUri\\\":{\\\"$mid\\\":1,\\\"path\\\":\\\"/\\\",\\\"scheme\\\":\\\"http\\\",\\\"authority\\\":\\\"localhost:33167\\\"},\\\"protocol\\\":\\\"http\\\",\\\"source\\\":{\\\"source\\\":1,\\\"description\\\":\\\"Auto Forwarded\\\"}},{\\\"remoteHost\\\":\\\"localhost\\\",\\\"remotePort\\\":51216,\\\"localPort\\\":51216,\\\"localAddress\\\":\\\"localhost:51216\\\",\\\"localUri\\\":{\\\"$mid\\\":1,\\\"path\\\":\\\"/\\\",\\\"scheme\\\":\\\"http\\\",\\\"authority\\\":\\\"localhost:51216\\\"},\\\"protocol\\\":\\\"http\\\",\\\"source\\\":{\\\"source\\\":1,\\\"description\\\":\\\"Auto Forwarded\\\"}},{\\\"remoteHost\\\":\\\"localhost\\\",\\\"remotePort\\\":51208,\\\"localPort\\\":51208,\\\"localAddress\\\":\\\"localhost:51208\\\",\\\"localUri\\\":{\\\"$mid\\\":1,\\\"path\\\":\\\"/\\\",\\\"scheme\\\":\\\"http\\\",\\\"authority\\\":\\\"localhost:51208\\\"},\\\"protocol\\\":\\\"http\\\",\\\"source\\\":{\\\"source\\\":1,\\\"description\\\":\\\"Auto Forwarded\\\"}},{\\\"remoteHost\\\":\\\"localhost\\\",\\\"remotePort\\\":48712,\\\"localPort\\\":48712,\\\"localAddress\\\":\\\"localhost:48712\\\",\\\"localUri\\\":{\\\"$mid\\\":1,\\\"path\\\":\\\"/\\\",\\\"scheme\\\":\\\"http\\\",\\\"authority\\\":\\\"localhost:48712\\\"},\\\"protocol\\\":\\\"http\\\",\\\"source\\\":{\\\"source\\\":1,\\\"description\\\":\\\"Auto Forwarded\\\"}},{\\\"remoteHost\\\":\\\"localhost\\\",\\\"remotePort\\\":48698,\\\"localPort\\\":48698,\\\"localAddress\\\":\\\"localhost:48698\\\",\\\"localUri\\\":{\\\"$mid\\\":1,\\\"path\\\":\\\"/\\\",\\\"scheme\\\":\\\"http\\\",\\\"authority\\\":\\\"localhost:48698\\\"},\\\"protocol\\\":\\\"http\\\",\\\"source\\\":{\\\"source\\\":1,\\\"description\\\":\\\"Auto Forwarded\\\"}}]\",\"remote.tunnels.toRestoreExpiration.ssh-remote+2kgbalapp3.-626202016\":\"1712603637740\",\"memento/notebookGettingStarted2\":\"{\\\"hasOpenedNotebook\\\":true}\",\"workbench.view.extension.jupyter-variables.state.hidden\":\"[{\\\"id\\\":\\\"jupyterViewVariables\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"cell-tag\\\",\\\"isHidden\\\":false}]\",\"workbench.view.extension.terraform.state.hidden\":\"[{\\\"id\\\":\\\"terraform.providers\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"terraform.modules\\\",\\\"isHidden\\\":false}]\",\"workbench.view.extension.terraform-cloud.state.hidden\":\"[{\\\"id\\\":\\\"terraform.cloud.workspaces\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"terraform.cloud.runs\\\",\\\"isHidden\\\":false}]\",\"workbench.panel.chatSidebar.hidden\":\"[{\\\"id\\\":\\\"workbench.panel.chat.view.copilot\\\",\\\"isHidden\\\":false}]\"}}"} \ No newline at end of file diff --git a/scripts/resources/unreal/init_unreal.py b/scripts/resources/unreal/init_unreal.py new file mode 100644 index 00000000..0fb7eb21 --- /dev/null +++ b/scripts/resources/unreal/init_unreal.py @@ -0,0 +1,46 @@ +import os +import sys +import unreal +from pathlib import Path + +REPO_ROOT = os.environ.get('CONTAINER_REPO_FOLDER') +if REPO_ROOT: + REPO_ROOT = Path(REPO_ROOT) +else: + REPO_ROOT = Path(__file__).parent.parent.parent.parent + +debug = os.environ.get('UNREAL_DEBUGGING_ON', 'no').lower() == 'yes' + +if debug: + try: + import debugpy + python_exe_path = Path(sys.executable).parent.parent / 'ThirdParty' / 'Python3' / 'Linux' / 'bin' / 'python3' + if sys.platform == 'win32': + python_exe_path = Path(sys.executable).parent.parent / 'ThirdParty' / 'Python3' / 'Win64' / 'python' + + port = int(os.environ.get('UNREAL_DEBUG_PORT', 5679)) + debugpy.configure(python=os.environ.get('UNREAL_PYTHON_EXE', str(python_exe_path))) + if os.environ.get('TEST_ENVIRONMENT'): + debugpy.listen(('0.0.0.0', port)) + else: + debugpy.listen(port) + + unreal.log(f'Waiting for debugger to attach on port {port}...') # type: ignore + debugpy.wait_for_client() + except ImportError: + unreal.log_error( # type: ignore + 'Failed to initialize debugger because debugpy is not available ' + 'in the current python environment.' + ) + +sys.path.append(str(REPO_ROOT / 'src' / 'addons'/ 'send2ue' / 'dependencies')) +if os.environ.get('TEST_ENVIRONMENT'): + from rpc.server import RPCServer + rpc_server = RPCServer() + rpc_server.start_server_blocking() +else: + from rpc import unreal_server + rpc_server = unreal_server.RPCServer() + rpc_server.start(threaded=True) + +print('Unreal Engine RPC Server started') diff --git a/send2ue/core/io/__init__.py b/send2ue/core/io/__init__.py deleted file mode 100644 index 3447da60..00000000 --- a/send2ue/core/io/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -from . import fbx - -__all__ = [ - fbx -] diff --git a/send2ue/release_notes.md b/send2ue/release_notes.md deleted file mode 100644 index 7eb717f9..00000000 --- a/send2ue/release_notes.md +++ /dev/null @@ -1,17 +0,0 @@ -## Minor Changes -* Added collections as folder support for 'send to disk' - * [658](https://github.com/EpicGamesExt/BlenderTools/pull/658) -* Fixed Validation that detects invalid material assigned to polygon. - * [656](https://github.com/EpicGamesExt/BlenderTools/pull/656) -* Fixed export with object origin causes some collisions to be offset bug - * [587](https://github.com/EpicGamesExt/BlenderTools/issues/587) -* Fixed use object origin with combine meshes bug - * [627](https://github.com/EpicGamesExt/BlenderTools/issues/627) - * [628](https://github.com/EpicGamesExt/BlenderTools/issues/628) - -## Special Thanks -@SalamiArmi, @namrog84 - -## Tests Passing On -* Blender `3.3`, `3.6` (installed from blender.org) -* Unreal `5.3` diff --git a/send2ue/ui/addon_preferences.py b/send2ue/ui/addon_preferences.py deleted file mode 100644 index 008b29d6..00000000 --- a/send2ue/ui/addon_preferences.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright Epic Games, Inc. All Rights Reserved. - -import bpy -from ..properties import Send2UeAddonProperties -from ..constants import ToolInfo - - -class SendToUnrealPreferences(Send2UeAddonProperties, bpy.types.AddonPreferences): - """ - This class creates the settings interface in the send to unreal addon. - """ - bl_idname = ToolInfo.NAME.value - - def draw(self, context): - """ - This defines the draw method, which is in all Blender UI types that create interfaces. - - :param context: The context of this interface. - """ - row = self.layout.row() - row.prop(self, 'automatically_create_collections') - row = self.layout.row() - row.label(text='RPC Response Timeout') - row.prop(self, 'rpc_response_timeout', text='') - row = self.layout.row() - row.label(text='Extensions Repo Path:') - row = self.layout.row() - row = row.split(factor=0.95, align=True) - row.prop(self, 'extensions_repo_path', text='') - row.operator('send2ue.reload_extensions', text='', icon='UV_SYNC_SELECT') - -def register(): - """ - Registers the addon preferences when the addon is enabled. - """ - bpy.utils.register_class(SendToUnrealPreferences) - - -def unregister(): - """ - Unregisters the addon preferences when the addon is disabled. - """ - bpy.utils.unregister_class(SendToUnrealPreferences) diff --git a/send2ue/__init__.py b/src/addons/send2ue/__init__.py similarity index 90% rename from send2ue/__init__.py rename to src/addons/send2ue/__init__.py index 7f398f0d..9074cde2 100644 --- a/send2ue/__init__.py +++ b/src/addons/send2ue/__init__.py @@ -3,42 +3,41 @@ import bpy import os import importlib -from .constants import ToolInfo from . import operators, properties, constants from .dependencies import remote_execution, unreal -from .dependencies.unreal import UnrealRemoteCalls from .ui import header_menu, addon_preferences, file_browser, dialog from .core import formatting, validations, settings, utilities, export, ingest, extension, io bl_info = { "name": "Send to Unreal", - "author": "Epic Games Inc.", - "version": (2, 4, 3), - "blender": (3, 3, 0), + "author": "Epic Games Inc (now a community fork)", + "version": (2, 6, 6), + "blender": (3, 6, 0), "location": "Header > Pipeline > Send to Unreal", "description": "Sends an asset to the first open Unreal Editor instance on your machine.", "warning": "", - "wiki_url": "https://epicgamesext.github.io/BlenderTools/send2ue", + "wiki_url": "https://poly-hammer.github.io/BlenderTools/send2ue", "category": "Pipeline", } modules = [ export, ingest, + settings, unreal, utilities, formatting, validations, dialog, file_browser, - settings, operators, properties, constants, remote_execution, addon_preferences, extension, - io.fbx + io.fbx_b3, + io.fbx_b4 ] diff --git a/send2ue/constants.py b/src/addons/send2ue/constants.py similarity index 100% rename from send2ue/constants.py rename to src/addons/send2ue/constants.py diff --git a/send2ue/core/__init__.py b/src/addons/send2ue/core/__init__.py similarity index 100% rename from send2ue/core/__init__.py rename to src/addons/send2ue/core/__init__.py diff --git a/send2ue/core/export.py b/src/addons/send2ue/core/export.py similarity index 94% rename from send2ue/core/export.py rename to src/addons/send2ue/core/export.py index 4987c132..ae8f1b47 100644 --- a/send2ue/core/export.py +++ b/src/addons/send2ue/core/export.py @@ -80,14 +80,26 @@ def export_fbx_file(file_path, export_settings): :param str file_path: A file path where the file will be exported. :param dict export_settings: A dictionary of blender export settings for the specific file type. """ - io.fbx.export( - filepath=file_path, - use_selection=True, - bake_anim_use_nla_strips=True, - bake_anim_use_all_actions=False, - object_types={'ARMATURE', 'MESH', 'EMPTY'}, - **export_settings - ) + major_version = bpy.app.version[0] # type: ignore + + if major_version <= 3: + io.fbx_b3.export( + filepath=file_path, + use_selection=True, + bake_anim_use_nla_strips=True, + bake_anim_use_all_actions=False, + object_types={'ARMATURE', 'MESH', 'EMPTY'}, + **export_settings + ) + elif major_version >= 4: + io.fbx_b4.export( + filepath=file_path, + use_selection=True, + bake_anim_use_nla_strips=True, + bake_anim_use_all_actions=False, + object_types={'ARMATURE', 'MESH', 'EMPTY'}, + **export_settings + ) def export_alembic_file(file_path, export_settings): @@ -181,7 +193,7 @@ def get_asset_sockets(asset_name, properties): if mesh_object: for child in mesh_object.children: if child.type == 'EMPTY' and child.name.startswith(f'{PreFixToken.SOCKET.value}_'): - name = utilities.get_asset_name(child.name.replace(f'{PreFixToken.SOCKET.value}_', ''), properties) + name = utilities.get_asset_name(child.name.replace(f'{PreFixToken.SOCKET.value}_', '').split('.',1)[0], properties) relative_location = utilities.convert_blender_to_unreal_location( child.matrix_local.translation ) @@ -220,8 +232,9 @@ def export_mesh(asset_id, mesh_object, properties, lod=0): set_parent_rig_selection(mesh_object, properties) # select collision meshes - asset_name = utilities.get_asset_name(mesh_object.name, properties) - utilities.select_asset_collisions(asset_name, properties) + if lod == 0: + asset_name = utilities.get_asset_name(mesh_object.name, properties) + utilities.select_asset_collisions(asset_name, properties) # Note: this is a weird work around for morph targets not exporting when # particle systems are on the mesh. Making them not visible fixes this bug @@ -291,7 +304,7 @@ def export_hair(asset_id, properties): utilities.deselect_all_objects() # clear animation transformations prior to export so groom exports with no distortion - for scene_object in bpy.data.objects: + for scene_object in bpy.context.scene.objects: if scene_object.animation_data: if scene_object.animation_data.action: scene_object.animation_data.action = None @@ -529,8 +542,8 @@ def send2ue(properties): utilities.escape_local_view() # clear the asset_data and current id - bpy.context.window_manager.send2ue.asset_id = '' - bpy.context.window_manager.send2ue.asset_data.clear() + bpy.context.window_manager.send2ue.asset_id = '' # type: ignore + bpy.context.window_manager.send2ue.asset_data.clear() # type: ignore # if there are no failed validations continue validation_manager = validations.ValidationManager(properties) @@ -538,3 +551,5 @@ def send2ue(properties): # create the asset data create_asset_data(properties) ingest.assets(properties) + + bpy.context.window_manager.send2ue.object_collection_override.clear() # type: ignore \ No newline at end of file diff --git a/send2ue/core/extension.py b/src/addons/send2ue/core/extension.py similarity index 91% rename from send2ue/core/extension.py rename to src/addons/send2ue/core/extension.py index 5a956c2d..7b1c4325 100644 --- a/send2ue/core/extension.py +++ b/src/addons/send2ue/core/extension.py @@ -4,12 +4,15 @@ import bpy import sys import ast -import importlib.util import tempfile from . import settings from abc import abstractmethod from ..constants import ToolInfo, Extensions, ExtensionTasks from . import utilities +from .. import __package__ as base_package +from pathlib import Path +from importlib.machinery import SourceFileLoader +from importlib.util import module_from_spec, spec_from_loader def run_extension_filters(armature_objects, mesh_objects, hair_objects): @@ -262,6 +265,12 @@ class ExtensionCollector(ast.NodeVisitor): def __init__(self, file_path): super(ExtensionCollector, self).__init__() + + # Todo: Remove this when extensions don't need base classes + addons_folder = Path(__file__).parent.parent.parent + if addons_folder not in [Path(i) for i in sys.path]: + sys.path.insert(0, str(addons_folder)) + self._extension_module = self.get_module(file_path) self._extension_classes = [] @@ -274,15 +283,10 @@ def get_module(file_path): """ Gets the module from the file path. """ - path = os.path.dirname(file_path) - name, file_extension = os.path.splitext(os.path.basename(file_path)) - if path not in sys.path: - sys.path.insert(0, path) - module = importlib.import_module(name) - importlib.reload(module) - - # remove to prevent root module naming conflicts - sys.path.remove(path) + name = f'send2ue_extension_{Path(file_path).name}' + spec = spec_from_loader(name, SourceFileLoader(name, str(file_path))) + module = module_from_spec(spec) # type: ignore + spec.loader.exec_module(module) # type: ignore return module def get_extension_classes(self): @@ -299,7 +303,7 @@ def visit_ClassDef(self, node): """ extension_class = getattr(self._extension_module, node.name) - if issubclass(extension_class, ExtensionBase): + if ExtensionBase.__name__ in [i.__name__ for i in extension_class.__bases__]: self._extension_classes.append(extension_class) @@ -338,16 +342,17 @@ def _get_extension_classes(self): extensions = [] # add in the additional extensions from the addons preferences - addon = bpy.context.preferences.addons.get(ToolInfo.NAME.value) + addon = bpy.context.preferences.addons.get(base_package) if addon and addon.preferences: - if os.path.exists(addon.preferences.extensions_repo_path): - for file_name in os.listdir(addon.preferences.extensions_repo_path): - name, file_extension = os.path.splitext(file_name) - if file_extension == '.py': - extension_collector = ExtensionCollector( - os.path.join(addon.preferences.extensions_repo_path, file_name) - ) - extensions.extend(extension_collector.get_extension_classes()) + for extension_folder in addon.preferences.extension_folder_list: # type: ignore + if os.path.exists(extension_folder.folder_path): + for file_name in os.listdir(extension_folder.folder_path): + name, file_extension = os.path.splitext(file_name) + if file_extension == '.py': + extension_collector = ExtensionCollector( + os.path.join(extension_folder.folder_path, file_name) + ) + extensions.extend(extension_collector.get_extension_classes()) # add in the extensions that shipped with the addon for file_name in os.listdir(self.source_path): diff --git a/send2ue/core/formatting.py b/src/addons/send2ue/core/formatting.py similarity index 96% rename from send2ue/core/formatting.py rename to src/addons/send2ue/core/formatting.py index 12ea97bd..63fb2fc0 100644 --- a/send2ue/core/formatting.py +++ b/src/addons/send2ue/core/formatting.py @@ -2,7 +2,11 @@ import os import bpy -from ..dependencies.unreal import UnrealRemoteCalls, is_connected +from ..dependencies.unreal import is_connected +from ..dependencies.unreal import UnrealRemoteCalls as UnrealCalls +from ..dependencies.rpc.factory import make_remote + +UnrealRemoteCalls = make_remote(UnrealCalls) def set_property_error_message(property_name, error_message): @@ -107,6 +111,12 @@ def auto_format_unreal_folder_path(name, properties): name, error_message ) + elif not formatted_value.startswith('/'): + error_message = 'Path must have a leading forward slash. i.e. "/Game/"' + set_property_error_message( + name, + error_message + ) elif not len(formatted_value.split('/')) >= 2: error_message = 'Please specify at least a root folder location.' set_property_error_message( diff --git a/send2ue/core/ingest.py b/src/addons/send2ue/core/ingest.py similarity index 97% rename from send2ue/core/ingest.py rename to src/addons/send2ue/core/ingest.py index d9cf455f..8ff960da 100644 --- a/send2ue/core/ingest.py +++ b/src/addons/send2ue/core/ingest.py @@ -3,8 +3,11 @@ import bpy from . import settings, extension from ..constants import PathModes, ExtensionTasks, UnrealTypes -from ..dependencies.unreal import UnrealRemoteCalls +from ..dependencies.unreal import UnrealRemoteCalls as UnrealCalls from .utilities import track_progress, get_asset_id +from ..dependencies.rpc.factory import make_remote + +UnrealRemoteCalls = make_remote(UnrealCalls) @track_progress(message='Importing asset "{attribute}"...', attribute='file_path') diff --git a/src/addons/send2ue/core/io/__init__.py b/src/addons/send2ue/core/io/__init__.py new file mode 100644 index 00000000..b74b7cba --- /dev/null +++ b/src/addons/send2ue/core/io/__init__.py @@ -0,0 +1,6 @@ +from . import fbx_b3, fbx_b4 + +__all__ = [ + 'fbx_b3', + 'fbx_b4' +] diff --git a/send2ue/core/io/fbx.py b/src/addons/send2ue/core/io/fbx_b3.py similarity index 95% rename from send2ue/core/io/fbx.py rename to src/addons/send2ue/core/io/fbx_b3.py index fc843bf6..8f88dbb9 100644 --- a/send2ue/core/io/fbx.py +++ b/src/addons/send2ue/core/io/fbx_b3.py @@ -59,12 +59,6 @@ def export(**keywords): elem_props_template_finalize, fbx_name_class ) - - # Added version check to import new elem data type added in 4.0. Shading element was updated to use char instead of bool - if bpy.app.version >= (4,0,0): - from io_scene_fbx.fbx_utils import ( - elem_data_single_char - ) convert_rad_to_deg_iter = units_convertor_iter("radian", "degree") @@ -354,7 +348,10 @@ def fbx_data_object_elements(root, ob_obj, scene_data): obj_type = b"Camera" if ob_obj.type == 'ARMATURE': - if bpy.context.scene.send2ue.export_object_name_as_root: + if bpy.context.scene.send2ue.export_custom_root_name: + # if the user has provided a custom name for a root bone, use this directly + ob_obj.name = bpy.context.scene.send2ue.export_custom_root_name + elif bpy.context.scene.send2ue.export_object_name_as_root: # if the object is already named armature this forces the object name to root if 'armature' == ob_obj.name.lower(): ob_obj.name = 'root' @@ -410,7 +407,6 @@ def fbx_data_object_elements(root, ob_obj, scene_data): (object_world_location[1] - empty_world_location[1]) * SCALE_FACTOR, (object_world_location[2] - empty_world_location[2]) * SCALE_FACTOR )) - rot = (0, 0, 0) else: asset_world_location = asset_object.matrix_world.to_translation() loc = Vector(( @@ -423,8 +419,9 @@ def fbx_data_object_elements(root, ob_obj, scene_data): if asset_object == current_object: # clear rotation and scale only if spawning actor # https://github.com/EpicGamesExt/BlenderTools/issues/610 - rot = (0, 0, 0) - scale = (1.0 * SCALE_FACTOR, 1.0 * SCALE_FACTOR, 1.0 * SCALE_FACTOR) + if bpy.context.scene.send2ue.extensions.instance_assets.place_in_active_level: + rot = (0, 0, 0) + scale = (1.0 * SCALE_FACTOR, 1.0 * SCALE_FACTOR, 1.0 * SCALE_FACTOR) else: loc = Vector((0, 0, 0)) @@ -455,10 +452,7 @@ def fbx_data_object_elements(root, ob_obj, scene_data): # object type, etc. elem_data_single_int32(model, b"MultiLayer", 0) elem_data_single_int32(model, b"MultiTake", 0) - if (bpy.app.version >= (4,0,0)): - elem_data_single_char(model, b"Shading", b"\x01") # Shading was changed to a char from bool in blender 4 - else: - elem_data_single_bool(model, b"Shading", True) + elem_data_single_bool(model, b"Shading", True) elem_data_single_string(model, b"Culling", b"CullingOff") if obj_type == b"Camera": @@ -552,16 +546,17 @@ def fbx_data_bindpose_element(root, me_obj, me, scene_data, arm_obj=None, mat_wo export_fbx_bin.fbx_data_bindpose_element = fbx_data_bindpose_element # patch in a report method on self to fake the fbx export operator class - self = type( - 'Send2UeExportFBX', - (object,), - {'report': report_error} - ) - export_fbx_bin.save(self, bpy.context, **keywords) - - # now re-patch back the export bin module so that the existing fbx addon still has its original code - # https://github.com/EpicGamesExt/BlenderTools/issues/598 - export_fbx_bin.fbx_animations_do = original_fbx_animations_do - export_fbx_bin.fbx_data_armature_elements = original_fbx_data_armature_elements - export_fbx_bin.fbx_data_object_elements = original_fbx_data_object_elements - export_fbx_bin.fbx_data_bindpose_element = original_fbx_data_bindpose_element + try: + self = type( + 'Send2UeExportFBX', + (object,), + {'report': report_error} + ) + export_fbx_bin.save(self, bpy.context, **keywords) + finally: + # now re-patch back the export bin module so that the existing fbx addon still has its original code + # https://github.com/EpicGamesExt/BlenderTools/issues/598 + export_fbx_bin.fbx_animations_do = original_fbx_animations_do + export_fbx_bin.fbx_data_armature_elements = original_fbx_data_armature_elements + export_fbx_bin.fbx_data_object_elements = original_fbx_data_object_elements + export_fbx_bin.fbx_data_bindpose_element = original_fbx_data_bindpose_element \ No newline at end of file diff --git a/src/addons/send2ue/core/io/fbx_b4.py b/src/addons/send2ue/core/io/fbx_b4.py new file mode 100644 index 00000000..ecca5a86 --- /dev/null +++ b/src/addons/send2ue/core/io/fbx_b4.py @@ -0,0 +1,649 @@ +import os +import bpy +import numpy as np +from ..utilities import report_error +from mathutils import Vector +from importlib.machinery import SourceFileLoader + +SCALE_FACTOR = 100 + + +def export(**keywords): + """ + Note that this function imports the blender FBX addon's module and monkey patches + some functions to fix the scale factor and world origins of the objects, so that they import + nicely into unreal engine. + + The functions below have been tweaked from their originals here: + https://github.com/blender/blender-addons/blob/master/io_scene_fbx/export_fbx_bin.py + """ + import addon_utils + addons = {os.path.basename(os.path.dirname(module.__file__)): module.__file__ for module in addon_utils.modules()} + addon_folder_path = os.path.dirname(addons.get('io_scene_fbx')) + + # this load the io_scene_fbx module from the blender FBX addon + try: + SourceFileLoader('io_scene_fbx', os.path.join(addon_folder_path, '__init__.py')).load_module() + except RuntimeError as error: + print(error) + + import io_scene_fbx.export_fbx_bin as export_fbx_bin + from io_scene_fbx.export_fbx_bin import ( + fbx_data_bindpose_element, + AnimationCurveNodeWrapper + ) + from bpy_extras.io_utils import axis_conversion + from io_scene_fbx.fbx_utils import ( + FBX_MODELS_VERSION, + FBX_POSE_BIND_VERSION, + FBX_DEFORMER_SKIN_VERSION, + FBX_DEFORMER_CLUSTER_VERSION, + BLENDER_OBJECT_TYPES_MESHLIKE, + FBX_KTIME, + units_convertor_iter, + matrix4_to_array, + get_fbx_uuid_from_key, + get_blenderID_name, + get_blender_bindpose_key, + get_blender_anim_stack_key, + get_blender_anim_layer_key, + elem_empty, + elem_data_single_bool, + elem_data_single_int32, + elem_data_single_int64, + elem_data_single_float64, + elem_data_single_string, + elem_data_single_int32_array, + elem_data_single_float64_array, + elem_data_single_char, + elem_properties, + elem_props_template_init, + elem_props_template_set, + elem_props_template_finalize, + fbx_name_class + ) + + convert_rad_to_deg_iter = units_convertor_iter("radian", "degree") + + from io_scene_fbx.export_fbx_bin import fbx_data_element_custom_properties + + def fbx_animations_do(scene_data, ref_id, f_start, f_end, start_zero, objects=None, force_keep=False): + """ + Generate animation data (a single AnimStack) from objects, for a given frame range. + """ + bake_step = scene_data.settings.bake_anim_step + simplify_fac = scene_data.settings.bake_anim_simplify_factor + scene = scene_data.scene + depsgraph = scene_data.depsgraph + force_keying = scene_data.settings.bake_anim_use_all_bones + force_sek = scene_data.settings.bake_anim_force_startend_keying + gscale = scene_data.settings.global_scale + + if objects is not None: + # Add bones and duplis! + for ob_obj in tuple(objects): + if not ob_obj.is_object: + continue + if ob_obj.type == 'ARMATURE': + objects |= {bo_obj for bo_obj in ob_obj.bones if bo_obj in scene_data.objects} + for dp_obj in ob_obj.dupli_list_gen(depsgraph): + if dp_obj in scene_data.objects: + objects.add(dp_obj) + else: + objects = scene_data.objects + + back_currframe = scene.frame_current + animdata_ob = {} + p_rots = {} + + for ob_obj in objects: + if ob_obj.parented_to_armature: + continue + ACNW = AnimationCurveNodeWrapper + loc, rot, scale, _m, _mr = ob_obj.fbx_object_tx(scene_data) + rot_deg = tuple(convert_rad_to_deg_iter(rot)) + force_key = (simplify_fac == 0.0) or (ob_obj.is_bone and force_keying) + + animdata_ob[ob_obj] = (ACNW(ob_obj.key, 'LCL_TRANSLATION', force_key, force_sek, loc), + ACNW(ob_obj.key, 'LCL_ROTATION', force_key, force_sek, rot_deg), + ACNW(ob_obj.key, 'LCL_SCALING', force_key, force_sek, scale)) + p_rots[ob_obj] = rot + + force_key = (simplify_fac == 0.0) + animdata_shapes = {} + + for me, (me_key, _shapes_key, shapes) in scene_data.data_deformers_shape.items(): + # Ignore absolute shape keys for now! + if not me.shape_keys.use_relative: + continue + for shape, (channel_key, geom_key, _shape_verts_co, _shape_verts_idx) in shapes.items(): + acnode = AnimationCurveNodeWrapper(channel_key, 'SHAPE_KEY', force_key, force_sek, (0.0,)) + # Sooooo happy to have to twist again like a mad snake... Yes, we need to write those curves twice. :/ + acnode.add_group(me_key, shape.name, shape.name, (shape.name,)) + animdata_shapes[channel_key] = (acnode, me, shape) + + animdata_cameras = {} + for cam_obj, cam_key in scene_data.data_cameras.items(): + cam = cam_obj.bdata.data + acnode_lens = AnimationCurveNodeWrapper(cam_key, 'CAMERA_FOCAL', force_key, force_sek, (cam.lens,)) + acnode_focus_distance = AnimationCurveNodeWrapper(cam_key, 'CAMERA_FOCUS_DISTANCE', force_key, + force_sek, (cam.dof.focus_distance,)) + animdata_cameras[cam_key] = (acnode_lens, acnode_focus_distance, cam) + + # Get all parent bdata of animated dupli instances, so that we can quickly identify which instances in + # `depsgraph.object_instances` are animated and need their ObjectWrappers' matrices updated each frame. + dupli_parent_bdata = {dup.get_parent().bdata for dup in animdata_ob if dup.is_dupli} + has_animated_duplis = bool(dupli_parent_bdata) + + # Initialize keyframe times array. Each AnimationCurveNodeWrapper will share the same instance. + # `np.arange` excludes the `stop` argument like when using `range`, so we use np.nextafter to get the next + # representable value after f_end and use that as the `stop` argument instead. + currframes = np.arange(f_start, np.nextafter(f_end, np.inf), step=bake_step) + + # Convert from Blender time to FBX time. + fps = scene.render.fps / scene.render.fps_base + real_currframes = currframes - f_start if start_zero else currframes + real_currframes = (real_currframes / fps * FBX_KTIME).astype(np.int64) + + # Generator that yields the animated values of each frame in order. + def frame_values_gen(): + # Precalculate integer frames and subframes. + int_currframes = currframes.astype(int) + subframes = currframes - int_currframes + + # Create simpler iterables that return only the values we care about. + animdata_shapes_only = [shape for _anim_shape, _me, shape in animdata_shapes.values()] + animdata_cameras_only = [camera for _anim_camera_lens, _anim_camera_focus_distance, camera + in animdata_cameras.values()] + # Previous frame's rotation for each object in animdata_ob, this will be updated each frame. + animdata_ob_p_rots = p_rots.values() + + # Iterate through each frame and yield the values for that frame. + # Iterating .data, the memoryview of an array, is faster than iterating the array directly. + for int_currframe, subframe in zip(int_currframes.data, subframes.data): + scene.frame_set(int_currframe, subframe=subframe) + + if has_animated_duplis: + # Changing the scene's frame invalidates existing dupli instances. To get the updated matrices of duplis + # for this frame, we must get the duplis from the depsgraph again. + for dup in depsgraph.object_instances: + if (parent := dup.parent) and parent.original in dupli_parent_bdata: + # ObjectWrapper caches its instances. Attempting to create a new instance updates the existing + # ObjectWrapper instance with the current frame's matrix and then returns the existing instance. + ObjectWrapper(dup) + next_p_rots = [] + for ob_obj, p_rot in zip(animdata_ob, animdata_ob_p_rots): + + + # + # send2ue: Scale shennanigans + # + location_multiple = 100 + scale_factor = 1 + # if this curve is the object root then keep its scale at 1 + if len(str(ob_obj).split('|')) == 1: + location_multiple = 1 + # Todo add to FBX addon + scale_factor = SCALE_FACTOR + + + + # We compute baked loc/rot/scale for all objects (rot being euler-compat with previous value!). + loc, rot, scale, _m, _mr = ob_obj.fbx_object_tx(scene_data, rot_euler_compat=p_rot) + + + # + # send2ue: Make location keyframes relative to the armature object + # + # Todo add to FBX addon + # the armature object's position is the reference we use to offset all location keyframes + if ob_obj.type == 'ARMATURE': + location_offset = loc + # subtract the location offset from each location keyframe if the use_object_origin is on + if bpy.context.scene.send2ue.use_object_origin: + loc = Vector( + (loc[0] - location_offset[0], loc[1] - location_offset[1], loc[2] - location_offset[2])) + + + + next_p_rots.append(rot) + yield from loc * location_multiple # send2ue: Apply translation scalar + yield from rot + yield from scale / scale_factor # send2ue: Apply scale factor + animdata_ob_p_rots = next_p_rots + for shape in animdata_shapes_only: + yield shape.value + for camera in animdata_cameras_only: + yield camera.lens + yield camera.dof.focus_distance + + # Providing `count` to np.fromiter pre-allocates the array, avoiding extra memory allocations while iterating. + num_ob_values = len(animdata_ob) * 9 # Location, rotation and scale, each of which have x, y, and z components + num_shape_values = len(animdata_shapes) # Only 1 value per shape key + num_camera_values = len(animdata_cameras) * 2 # Focal length (`.lens`) and focus distance + num_values_per_frame = num_ob_values + num_shape_values + num_camera_values + num_frames = len(real_currframes) + all_values_flat = np.fromiter(frame_values_gen(), dtype=float, count=num_frames * num_values_per_frame) + + # Restore the scene's current frame. + scene.frame_set(back_currframe, subframe=0.0) + + # View such that each column is all values for a single frame and each row is all values for a single curve. + all_values = all_values_flat.reshape(num_frames, num_values_per_frame).T + # Split into views of the arrays for each curve type. + split_at = [num_ob_values, num_shape_values, num_camera_values] + # For unequal sized splits, np.split takes indices to split at, which can be acquired through a cumulative sum + # across the list. + # The last value isn't needed, because the last split is assumed to go to the end of the array. + split_at = np.cumsum(split_at[:-1]) + all_ob_values, all_shape_key_values, all_camera_values = np.split(all_values, split_at) + + all_anims = [] + + # Set location/rotation/scale curves. + # Split into equal sized views of the arrays for each object. + split_into = len(animdata_ob) + per_ob_values = np.split(all_ob_values, split_into) if split_into > 0 else () + for anims, ob_values in zip(animdata_ob.values(), per_ob_values): + # Split again into equal sized views of the location, rotation and scaling arrays. + loc_xyz, rot_xyz, sca_xyz = np.split(ob_values, 3) + # In-place convert from Blender rotation to FBX rotation. + np.rad2deg(rot_xyz, out=rot_xyz) + + anim_loc, anim_rot, anim_scale = anims + anim_loc.set_keyframes(real_currframes, loc_xyz) + anim_rot.set_keyframes(real_currframes, rot_xyz) + anim_scale.set_keyframes(real_currframes, sca_xyz) + all_anims.extend(anims) + + # Set shape key curves. + # There's only one array per shape key, so there's no need to split `all_shape_key_values`. + for (anim_shape, _me, _shape), shape_key_values in zip(animdata_shapes.values(), all_shape_key_values): + # In-place convert from Blender Shape Key Value to FBX Deform Percent. + shape_key_values *= 100.0 + anim_shape.set_keyframes(real_currframes, shape_key_values) + all_anims.append(anim_shape) + + # Set camera curves. + # Split into equal sized views of the arrays for each camera. + split_into = len(animdata_cameras) + per_camera_values = np.split(all_camera_values, split_into) if split_into > 0 else () + zipped = zip(animdata_cameras.values(), per_camera_values) + for (anim_camera_lens, anim_camera_focus_distance, _camera), (lens_values, focus_distance_values) in zipped: + # In-place convert from Blender focus distance to FBX. + focus_distance_values *= (1000 * gscale) + anim_camera_lens.set_keyframes(real_currframes, lens_values) + anim_camera_focus_distance.set_keyframes(real_currframes, focus_distance_values) + all_anims.append(anim_camera_lens) + all_anims.append(anim_camera_focus_distance) + + animations = {} + + # And now, produce final data (usable by FBX export code) + for anim in all_anims: + anim.simplify(simplify_fac, bake_step, force_keep) + if not anim: + continue + for obj_key, group_key, group, fbx_group, fbx_gname in anim.get_final_data(scene, ref_id, force_keep): + anim_data = animations.setdefault(obj_key, ("dummy_unused_key", {})) + anim_data[1][fbx_group] = (group_key, group, fbx_gname) + + astack_key = get_blender_anim_stack_key(scene, ref_id) + alayer_key = get_blender_anim_layer_key(scene, ref_id) + name = (get_blenderID_name(ref_id) if ref_id else scene.name).encode() + + if start_zero: + f_end -= f_start + f_start = 0.0 + + return (astack_key, animations, alayer_key, name, f_start, f_end) if animations else None + + def fbx_data_armature_elements(root, arm_obj, scene_data): + """ + Write: + * Bones "data" (NodeAttribute::LimbNode, contains pretty much nothing!). + * Deformers (i.e. Skin), bind between an armature and a mesh. + ** SubDeformers (i.e. Cluster), one per bone/vgroup pair. + * BindPose. + Note armature itself has no data, it is a mere "Null" Model... + """ + mat_world_arm = arm_obj.fbx_object_matrix(scene_data, global_space=True) + bones = tuple(bo_obj for bo_obj in arm_obj.bones if bo_obj in scene_data.objects) + + bone_radius_scale = 33.0 + + # Bones "data". + for bo_obj in bones: + bo = bo_obj.bdata + bo_data_key = scene_data.data_bones[bo_obj] + fbx_bo = elem_data_single_int64(root, b"NodeAttribute", get_fbx_uuid_from_key(bo_data_key)) + fbx_bo.add_string(fbx_name_class(bo.name.encode(), b"NodeAttribute")) + fbx_bo.add_string(b"LimbNode") + elem_data_single_string(fbx_bo, b"TypeFlags", b"Skeleton") + + tmpl = elem_props_template_init(scene_data.templates, b"Bone") + props = elem_properties(fbx_bo) + elem_props_template_set(tmpl, props, "p_double", b"Size", bo.head_radius * bone_radius_scale * SCALE_FACTOR) + elem_props_template_finalize(tmpl, props) + + # Custom properties. + if scene_data.settings.use_custom_props: + fbx_data_element_custom_properties(props, bo) + + # Store Blender bone length - XXX Not much useful actually :/ + # (LimbLength can't be used because it is a scale factor 0-1 for the parent-child distance: + # http://docs.autodesk.com/FBX/2014/ENU/FBX-SDK-Documentation/cpp_ref/class_fbx_skeleton.html#a9bbe2a70f4ed82cd162620259e649f0f ) + # elem_props_set(props, "p_double", "BlenderBoneLength".encode(), (bo.tail_local - bo.head_local).length, custom=True) + + # Skin deformers and BindPoses. + # Note: we might also use Deformers for our "parent to vertex" stuff??? + deformer = scene_data.data_deformers_skin.get(arm_obj, None) + if deformer is not None: + for me, (skin_key, ob_obj, clusters) in deformer.items(): + # BindPose. + mat_world_obj, mat_world_bones = fbx_data_bindpose_element(root, ob_obj, me, scene_data, + arm_obj, mat_world_arm, bones) + + # Deformer. + fbx_skin = elem_data_single_int64(root, b"Deformer", get_fbx_uuid_from_key(skin_key)) + fbx_skin.add_string(fbx_name_class(arm_obj.name.encode(), b"Deformer")) + fbx_skin.add_string(b"Skin") + + elem_data_single_int32(fbx_skin, b"Version", FBX_DEFORMER_SKIN_VERSION) + elem_data_single_float64(fbx_skin, b"Link_DeformAcuracy", 50.0) # Only vague idea what it is... + + # Pre-process vertex weights (also to check vertices assigned ot more than four bones). + ob = ob_obj.bdata + bo_vg_idx = {bo_obj.bdata.name: ob.vertex_groups[bo_obj.bdata.name].index + for bo_obj in clusters.keys() if bo_obj.bdata.name in ob.vertex_groups} + valid_idxs = set(bo_vg_idx.values()) + vgroups = {vg.index: {} for vg in ob.vertex_groups} + verts_vgroups = ( + sorted(((vg.group, vg.weight) for vg in v.groups if vg.weight and vg.group in valid_idxs), + key=lambda e: e[1], reverse=True) + for v in me.vertices) + for idx, vgs in enumerate(verts_vgroups): + for vg_idx, w in vgs: + vgroups[vg_idx][idx] = w + + for bo_obj, clstr_key in clusters.items(): + bo = bo_obj.bdata + # Find which vertices are affected by this bone/vgroup pair, and matching weights. + # Note we still write a cluster for bones not affecting the mesh, to get 'rest pose' data + # (the TransformBlah matrices). + vg_idx = bo_vg_idx.get(bo.name, None) + indices, weights = ((), ()) if vg_idx is None or not vgroups[vg_idx] else zip( + *vgroups[vg_idx].items()) + + # Create the cluster. + fbx_clstr = elem_data_single_int64(root, b"Deformer", get_fbx_uuid_from_key(clstr_key)) + fbx_clstr.add_string(fbx_name_class(bo.name.encode(), b"SubDeformer")) + fbx_clstr.add_string(b"Cluster") + + elem_data_single_int32(fbx_clstr, b"Version", FBX_DEFORMER_CLUSTER_VERSION) + # No idea what that user data might be... + fbx_userdata = elem_data_single_string(fbx_clstr, b"UserData", b"") + fbx_userdata.add_string(b"") + if indices: + elem_data_single_int32_array(fbx_clstr, b"Indexes", indices) + elem_data_single_float64_array(fbx_clstr, b"Weights", weights) + # Transform, TransformLink and TransformAssociateModel matrices... + # They seem to be doublons of BindPose ones??? Have armature (associatemodel) in addition, though. + # WARNING! Even though official FBX API presents Transform in global space, + # **it is stored in bone space in FBX data!** See: + # http://area.autodesk.com/forum/autodesk-fbx/fbx-sdk/why-the-values-return- + # by-fbxcluster-gettransformmatrix-x-not-same-with-the-value-in-ascii-fbx-file/ + # test_data[bo_obj.name] = matrix4_to_array(mat_world_bones[bo_obj].inverted_safe() @ mat_world_obj) + + # Todo add to FBX addon + transform_matrix = mat_world_bones[bo_obj].inverted_safe() @ mat_world_obj + transform_link_matrix = mat_world_bones[bo_obj] + transform_associate_model_matrix = mat_world_arm + + transform_matrix = transform_matrix.LocRotScale( + [i * SCALE_FACTOR for i in transform_matrix.to_translation()], + transform_matrix.to_quaternion(), + [i * SCALE_FACTOR for i in transform_matrix.to_scale()], + ) + + elem_data_single_float64_array(fbx_clstr, b"Transform", matrix4_to_array(transform_matrix)) + elem_data_single_float64_array(fbx_clstr, b"TransformLink", matrix4_to_array(transform_link_matrix)) + elem_data_single_float64_array(fbx_clstr, b"TransformAssociateModel", + matrix4_to_array(transform_associate_model_matrix)) + + def fbx_data_object_elements(root, ob_obj, scene_data): + """ + Write the Object (Model) data blocks. + Note this "Model" can also be bone or dupli! + """ + obj_type = b"Null" # default, sort of empty... + if ob_obj.is_bone: + obj_type = b"LimbNode" + elif (ob_obj.type == 'ARMATURE'): + if scene_data.settings.armature_nodetype == 'ROOT': + obj_type = b"Root" + elif scene_data.settings.armature_nodetype == 'LIMBNODE': + obj_type = b"LimbNode" + else: # Default, preferred option... + obj_type = b"Null" + elif (ob_obj.type in BLENDER_OBJECT_TYPES_MESHLIKE): + obj_type = b"Mesh" + elif (ob_obj.type == 'LIGHT'): + obj_type = b"Light" + elif (ob_obj.type == 'CAMERA'): + obj_type = b"Camera" + + if ob_obj.type == 'ARMATURE': + if bpy.context.scene.send2ue.export_custom_root_name: + # if the user has provided a custom name for a root bone, use this directly + ob_obj.name = bpy.context.scene.send2ue.export_custom_root_name + elif bpy.context.scene.send2ue.export_object_name_as_root: + # if the object is already named armature this forces the object name to root + if 'armature' == ob_obj.name.lower(): + ob_obj.name = 'root' + + # otherwise don't use the armature objects name as the root in unreal + else: + # Rename the armature object to 'Armature'. This is important, because this is a special + # reserved keyword for the Unreal FBX importer that will be ignored when the bone hierarchy + # is imported from the FBX file. That way there is not an additional root bone in the Unreal + # skeleton hierarchy. + ob_obj.name = 'Armature' + + model = elem_data_single_int64(root, b"Model", ob_obj.fbx_uuid) + model.add_string(fbx_name_class(ob_obj.name.encode(), b"Model")) + model.add_string(obj_type) + + elem_data_single_int32(model, b"Version", FBX_MODELS_VERSION) + + # Object transform info. + loc, rot, scale, matrix, matrix_rot = ob_obj.fbx_object_tx(scene_data) + rot = tuple(convert_rad_to_deg_iter(rot)) + + # Todo add to FBX addon + if ob_obj.type == 'ARMATURE': + scale = Vector((scale[0] / SCALE_FACTOR, scale[1] / SCALE_FACTOR, scale[2] / SCALE_FACTOR)) + if bpy.context.scene.send2ue.use_object_origin: + loc = Vector((0, 0, 0)) + + elif ob_obj.type == 'Ellipsis': + loc = Vector((loc[0] * SCALE_FACTOR, loc[1] * SCALE_FACTOR, loc[2] * SCALE_FACTOR)) + elif ob_obj.type == 'MESH': + # centers mesh object by their object origin + if bpy.context.scene.send2ue.use_object_origin: + asset_id = bpy.context.window_manager.send2ue.asset_id + asset_data = bpy.context.window_manager.send2ue.asset_data.get(asset_id) + + # if this is a static mesh then check that all other mesh objects in this export are + # centered relative the asset object + if asset_data['_asset_type'] == 'StaticMesh': + asset_object = bpy.data.objects.get(asset_data['_mesh_object_name']) + current_object = bpy.data.objects.get(ob_obj.name) + # get the world location of the current mesh + object_world_location = current_object.matrix_world.to_translation() + + # if this is using the empty from the combined meshes option + # https://github.com/EpicGamesExt/BlenderTools/issues/627 + empty_object_name = asset_data.get('empty_object_name') + if empty_object_name: + empty_object = bpy.data.objects.get(empty_object_name) + empty_world_location = empty_object.matrix_world.to_translation() + loc = Vector(( + (object_world_location[0] - empty_world_location[0]) * SCALE_FACTOR, + (object_world_location[1] - empty_world_location[1]) * SCALE_FACTOR, + (object_world_location[2] - empty_world_location[2]) * SCALE_FACTOR + )) + else: + asset_world_location = asset_object.matrix_world.to_translation() + loc = Vector(( + (object_world_location[0] - asset_world_location[0]), + (object_world_location[1] - asset_world_location[1]), + (object_world_location[2] - asset_world_location[2]) + )) + # only adjust the asset object so collisions and lods are not effected + # https://github.com/EpicGamesExt/BlenderTools/issues/587 + if asset_object == current_object: + # clear rotation and scale only if spawning actor + # https://github.com/EpicGamesExt/BlenderTools/issues/610 + if bpy.context.scene.send2ue.extensions.instance_assets.place_in_active_level: + rot = (0, 0, 0) + scale = (1.0 * SCALE_FACTOR, 1.0 * SCALE_FACTOR, 1.0 * SCALE_FACTOR) + else: + loc = Vector((0, 0, 0)) + + tmpl = elem_props_template_init(scene_data.templates, b"Model") + # For now add only loc/rot/scale... + props = elem_properties(model) + elem_props_template_set(tmpl, props, "p_lcl_translation", b"Lcl Translation", loc, + animatable=True, animated=((ob_obj.key, "Lcl Translation") in scene_data.animated)) + elem_props_template_set(tmpl, props, "p_lcl_rotation", b"Lcl Rotation", rot, + animatable=True, animated=((ob_obj.key, "Lcl Rotation") in scene_data.animated)) + elem_props_template_set(tmpl, props, "p_lcl_scaling", b"Lcl Scaling", scale, + animatable=True, animated=((ob_obj.key, "Lcl Scaling") in scene_data.animated)) + elem_props_template_set(tmpl, props, "p_visibility", b"Visibility", float(not ob_obj.hide)) + + # Absolutely no idea what this is, but seems mandatory for validity of the file, and defaults to + # invalid -1 value... + elem_props_template_set(tmpl, props, "p_integer", b"DefaultAttributeIndex", 0) + + elem_props_template_set(tmpl, props, "p_enum", b"InheritType", 1) # RSrs + + # Custom properties. + if scene_data.settings.use_custom_props: + # Here we want customprops from the 'pose' bone, not the 'edit' bone... + bdata = ob_obj.bdata_pose_bone if ob_obj.is_bone else ob_obj.bdata + fbx_data_element_custom_properties(props, bdata) + + # Those settings would obviously need to be edited in a complete version of the exporter, may depends on + # object type, etc. + elem_data_single_int32(model, b"MultiLayer", 0) + elem_data_single_int32(model, b"MultiTake", 0) + elem_data_single_char(model, b"Shading", b"\x01") # Shading was changed to a char from bool in blender 4 + + elem_data_single_string(model, b"Culling", b"CullingOff") + + if obj_type == b"Camera": + # Why, oh why are FBX cameras such a mess??? + # And WHY add camera data HERE??? Not even sure this is needed... + render = scene_data.scene.render + width = render.resolution_x * 1.0 + height = render.resolution_y * 1.0 + elem_props_template_set(tmpl, props, "p_enum", b"ResolutionMode", 0) # Don't know what it means + elem_props_template_set(tmpl, props, "p_double", b"AspectW", width) + elem_props_template_set(tmpl, props, "p_double", b"AspectH", height) + elem_props_template_set(tmpl, props, "p_bool", b"ViewFrustum", True) + elem_props_template_set(tmpl, props, "p_enum", b"BackgroundMode", 0) # Don't know what it means + elem_props_template_set(tmpl, props, "p_bool", b"ForegroundTransparent", True) + + elem_props_template_finalize(tmpl, props) + + def fbx_data_bindpose_element(root, me_obj, me, scene_data, arm_obj=None, mat_world_arm=None, bones=[]): + """ + Helper, since bindpose are used by both meshes shape keys and armature bones... + """ + if arm_obj is None: + arm_obj = me_obj + # We assume bind pose for our bones are their "Editmode" pose... + # All matrices are expected in global (world) space. + bindpose_key = get_blender_bindpose_key(arm_obj.bdata, me) + fbx_pose = elem_data_single_int64(root, b"Pose", get_fbx_uuid_from_key(bindpose_key)) + fbx_pose.add_string(fbx_name_class(me.name.encode(), b"Pose")) + fbx_pose.add_string(b"BindPose") + + elem_data_single_string(fbx_pose, b"Type", b"BindPose") + elem_data_single_int32(fbx_pose, b"Version", FBX_POSE_BIND_VERSION) + elem_data_single_int32(fbx_pose, b"NbPoseNodes", 1 + (1 if (arm_obj != me_obj) else 0) + len(bones)) + + # First node is mesh/object. + mat_world_obj = me_obj.fbx_object_matrix(scene_data, global_space=True) + fbx_posenode = elem_empty(fbx_pose, b"PoseNode") + elem_data_single_int64(fbx_posenode, b"Node", me_obj.fbx_uuid) + elem_data_single_float64_array(fbx_posenode, b"Matrix", matrix4_to_array(mat_world_obj)) + + # Second node is armature object itself. + if arm_obj != me_obj: + fbx_posenode = elem_empty(fbx_pose, b"PoseNode") + elem_data_single_int64(fbx_posenode, b"Node", arm_obj.fbx_uuid) + + # Todo merge into blenders FBX addon + mat_world_arm = mat_world_arm.LocRotScale( + mat_world_arm.to_translation(), + mat_world_arm.to_quaternion(), + [i / SCALE_FACTOR for i in mat_world_arm.to_scale()], + ) + + elem_data_single_float64_array(fbx_posenode, b"Matrix", matrix4_to_array(mat_world_arm)) + + # And all bones of armature! + mat_world_bones = {} + for bo_obj in bones: + bomat = bo_obj.fbx_object_matrix(scene_data, rest=True, global_space=True) + mat_world_bones[bo_obj] = bomat + fbx_posenode = elem_empty(fbx_pose, b"PoseNode") + elem_data_single_int64(fbx_posenode, b"Node", bo_obj.fbx_uuid) + + # Todo merge into blenders FBX addon + bomat = bomat.LocRotScale( + bomat.to_translation(), + bomat.to_quaternion(), + [i / SCALE_FACTOR for i in bomat.to_scale()] + ) + + elem_data_single_float64_array(fbx_posenode, b"Matrix", matrix4_to_array(bomat)) + + return mat_world_obj, mat_world_bones + + keywords["global_matrix"] = ( + axis_conversion( + to_forward=keywords['axis_forward'], + to_up=keywords['axis_up'], + ).to_4x4() + ) + + # save a copy of the original export bin + original_fbx_animations_do = export_fbx_bin.fbx_animations_do + original_fbx_data_armature_elements = export_fbx_bin.fbx_data_armature_elements + original_fbx_data_object_elements = export_fbx_bin.fbx_data_object_elements + original_fbx_data_bindpose_element = export_fbx_bin.fbx_data_bindpose_element + + # here is where we patch in our tweaked functions + export_fbx_bin.fbx_animations_do = fbx_animations_do + export_fbx_bin.fbx_data_armature_elements = fbx_data_armature_elements + export_fbx_bin.fbx_data_object_elements = fbx_data_object_elements + export_fbx_bin.fbx_data_bindpose_element = fbx_data_bindpose_element + + # patch in a report method on self to fake the fbx export operator class + try: + self = type( + 'Send2UeExportFBX', + (object,), + {'report': report_error} + ) + export_fbx_bin.save(self, bpy.context, **keywords) + finally: + # now re-patch back the export bin module so that the existing fbx addon still has its original code + # https://github.com/EpicGamesExt/BlenderTools/issues/598 + export_fbx_bin.fbx_animations_do = original_fbx_animations_do + export_fbx_bin.fbx_data_armature_elements = original_fbx_data_armature_elements + export_fbx_bin.fbx_data_object_elements = original_fbx_data_object_elements + export_fbx_bin.fbx_data_bindpose_element = original_fbx_data_bindpose_element \ No newline at end of file diff --git a/send2ue/core/settings.py b/src/addons/send2ue/core/settings.py similarity index 100% rename from send2ue/core/settings.py rename to src/addons/send2ue/core/settings.py diff --git a/send2ue/core/utilities.py b/src/addons/send2ue/core/utilities.py similarity index 96% rename from send2ue/core/utilities.py rename to src/addons/send2ue/core/utilities.py index 98f72f7d..4dc026d0 100644 --- a/send2ue/core/utilities.py +++ b/src/addons/send2ue/core/utilities.py @@ -9,6 +9,7 @@ import tempfile import base64 from . import settings, formatting +from .. import __package__ as base_package from ..ui import header_menu from ..dependencies import unreal from ..constants import BlenderTypes, UnrealTypes, ToolInfo, PreFixToken, PathModes, RegexPresets @@ -79,6 +80,17 @@ def get_operator_class_by_bl_idname(bl_idname): context, name = bl_idname.split('.') return getattr(bpy.types, f'{context.upper()}_OT_{name}', None) +def find_lod_gflags(string): + global_flags = r"\(\?[xims]*\)" + matches = re.findall(global_flags, string) + + return matches + +def strip_lod_gflags(string, matches): + for match in matches: + string = string.replace(match, "") + + return string def get_lod0_name(asset_name, properties): """ @@ -88,13 +100,13 @@ def get_lod0_name(asset_name, properties): :param PropertyData properties: A property data instance that contains all property values of the tool. :return str: The full name for lod0. """ - result = re.search(rf"({properties.lod_regex})", asset_name) + result = re.search(properties.lod_regex, asset_name) + if result: lod = result.groups()[-1] return asset_name.replace(lod, f'{lod[:-1]}0') return asset_name - def get_lod_index(asset_name, properties): """ Gets the lod index from the given asset name. @@ -103,7 +115,7 @@ def get_lod_index(asset_name, properties): :param PropertyData properties: A property data instance that contains all property values of the tool. :return int: The lod index """ - result = re.search(rf"({properties.lod_regex})", asset_name) + result = re.search(properties.lod_regex, asset_name) if result: lod = result.groups()[-1] return int(lod[-1]) @@ -186,7 +198,8 @@ def get_mesh_unreal_type(mesh_object): """ has_parent_rig = mesh_object.parent and mesh_object.parent.type == BlenderTypes.SKELETON rig = get_armature_modifier_rig_object(mesh_object) - if has_parent_rig or rig: + has_shapekey = mesh_object.active_shape_key + if has_parent_rig or rig or has_shapekey: return UnrealTypes.SKELETAL_MESH return UnrealTypes.STATIC_MESH @@ -290,7 +303,7 @@ def get_current_context(): :return dict: A dictionary of values that are the current context. """ object_contexts = {} - for scene_object in bpy.data.objects: + for scene_object in bpy.context.scene.objects: active_action_name = '' if scene_object.animation_data and scene_object.animation_data.action: active_action_name = scene_object.animation_data.action.name @@ -366,11 +379,17 @@ def get_from_collection(object_type): """ collection_objects = [] + # first check if the collection_objects is overridden + for collection_object in bpy.context.window_manager.send2ue.object_collection_override: # type: ignore + if collection_object.type == object_type: + collection_objects.append(collection_object) + # get the collection with the given name export_collection = bpy.data.collections.get(ToolInfo.EXPORT_COLLECTION.value) - if export_collection: + # if the collection exists and the collection_objects is not overridden + if export_collection and not collection_objects: # get all the objects in the collection - for collection_object in export_collection.all_objects: + for collection_object in export_collection.all_objects: # type: ignore # if the object is the correct type if collection_object.type == object_type: # if the object is visible @@ -411,9 +430,9 @@ def get_asset_name(asset_name, properties, lod=False): if properties.import_lods: # remove the lod name from the asset - result = re.search(rf"({properties.lod_regex})", asset_name) + result = re.search(properties.lod_regex, asset_name) if result and not lod: - asset_name = asset_name.replace(result.groups()[0], '') + asset_name = asset_name.split(result.groups()[0])[0] return asset_name @@ -669,7 +688,7 @@ def set_to_title(text): :param str text: The original text to convert to a title. :return str: The new title text. """ - return ' '.join([word.capitalize() for word in text.lower().split('_')]).strip('.json') + return ' '.join([word.capitalize() for word in text.lower().split('_')]).removesuffix('.json') def set_pose(rig_object, pose_values): @@ -825,12 +844,19 @@ def is_collision_of(asset_name, mesh_object_name, properties): # note we strip whitespace out of the collision name since whitespace is already striped out of the asset name # https://github.com/EpicGamesExt/BlenderTools/issues/397#issuecomment-1333982590 mesh_object_name = mesh_object_name.strip() + + # strip global regex flags + matches = find_lod_gflags(properties.lod_regex) + lod_regex = strip_lod_gflags(properties.lod_regex, matches) + match_prefix = ''.join(matches) + return bool( re.fullmatch( r"U(BX|CP|SP|CX)_" + asset_name + r"(_\d+)?", mesh_object_name ) or re.fullmatch( - r"U(BX|CP|SP|CX)_" + asset_name + rf"{properties.lod_regex}(_\d+)?", mesh_object_name + match_prefix + r"U(BX|CP|SP|CX)_" + asset_name + rf"{lod_regex}(_\d+)?", + mesh_object_name ) ) @@ -877,17 +903,12 @@ def remove_from_disk(path, directory=False): :param str path: An file path. :param bool directory: Whether or not the path is a directory. - """ - try: - original_umask = os.umask(0) - if os.path.exists(path): - os.chmod(path, 0o777) - if directory: - shutil.rmtree(path) - else: - os.remove(path) - finally: - os.umask(original_umask) + """ + if os.path.exists(path): + if directory: + shutil.rmtree(path, ignore_errors=True) + else: + os.remove(path) def remove_temp_folder(): @@ -907,7 +928,7 @@ def remove_temp_data(): """ temp_folder = get_temp_folder() if os.path.exists(temp_folder): - shutil.rmtree(temp_folder) + shutil.rmtree(temp_folder, ignore_errors=True) def remove_unpacked_files(unpacked_files): @@ -972,7 +993,7 @@ def escape_local_view(): for area in bpy.context.screen.areas: if area.type == 'VIEW_3D': if area.spaces[0].local_view: - for scene_object in bpy.data.objects: + for scene_object in bpy.context.scene.objects: scene_object.local_view_set(area.spaces[0], True) @@ -1102,14 +1123,17 @@ def setup_project(*args): bpy.ops.send2ue.reload_extensions() # create the scene collections - addon = bpy.context.preferences.addons.get(ToolInfo.NAME.value) + addon = bpy.context.preferences.addons.get(base_package) if addon and addon.preferences.automatically_create_collections: create_collections() # create the header menu - if importlib.util.find_spec('unpipe') is None: + if not os.environ.get('SEND2UE_HIDE_PIPELINE_MENU'): header_menu.add_pipeline_menu() + # create the quick access button + if addon.preferences.quick_access_button: + header_menu.add_quick_access_button() def draw_error_message(self, context): """ @@ -1208,7 +1232,7 @@ def deselect_all_objects(): """ This function deselects all object in the scene. """ - for scene_object in bpy.data.objects: + for scene_object in bpy.context.scene.objects: scene_object.select_set(False) diff --git a/send2ue/core/validations.py b/src/addons/send2ue/core/validations.py similarity index 94% rename from send2ue/core/validations.py rename to src/addons/send2ue/core/validations.py index 8943bed7..673d357c 100644 --- a/send2ue/core/validations.py +++ b/src/addons/send2ue/core/validations.py @@ -4,8 +4,11 @@ import os import bpy from . import utilities, formatting, extension -from ..dependencies.unreal import UnrealRemoteCalls from ..constants import BlenderTypes, PathModes, ToolInfo, Extensions, ExtensionTasks, RegexPresets +from ..dependencies.unreal import UnrealRemoteCalls as UnrealCalls +from ..dependencies.rpc.factory import make_remote + +UnrealRemoteCalls = make_remote(UnrealCalls) class ValidationManager: @@ -229,7 +232,7 @@ def validate_lod_names(self): """ if self.properties.import_lods: for mesh_object in self.mesh_objects: - result = re.search(rf"({self.properties.lod_regex})", mesh_object.name) + result = re.search(self.properties.lod_regex, mesh_object.name) if not result: utilities.report_error( f'Object "{mesh_object.name}" does not follow the correct lod naming convention defined in the ' @@ -285,7 +288,7 @@ def validate_required_unreal_plugins(self): """ Checks whether the required unreal plugins are enabled. """ - if self.properties.import_grooms and self.hair_objects: + if self.properties.validate_unreal_plugins and self.properties.import_grooms and self.hair_objects: # A dictionary of plugins where the key is the plugin name and value is the plugin label. groom_plugins = { 'HairStrands': 'Groom', @@ -333,6 +336,16 @@ def validate_required_unreal_project_settings(self): ) ) return False + + if self.properties.validate_project_settings and self.properties.path_mode != PathModes.SEND_TO_DISK.value: + if not UnrealRemoteCalls.is_using_legacy_fbx_importer(): + utilities.report_error( + "The Legacy FBX Importer must be used instead of Scene Interchange. Please run this command in the " + "Unreal Editor: Interchange.FeatureFlags.Import.FBX False. Otherwise, persist this in the project's " + "DefaultEngine.ini file." + ) + return False + return True # TODO: temporary validation before lods support for groom is added diff --git a/send2ue/dependencies/__init__.py b/src/addons/send2ue/dependencies/__init__.py similarity index 100% rename from send2ue/dependencies/__init__.py rename to src/addons/send2ue/dependencies/__init__.py diff --git a/send2ue/dependencies/remote_execution.py b/src/addons/send2ue/dependencies/remote_execution.py similarity index 91% rename from send2ue/dependencies/remote_execution.py rename to src/addons/send2ue/dependencies/remote_execution.py index 1f80fb62..a05680ac 100644 --- a/send2ue/dependencies/remote_execution.py +++ b/src/addons/send2ue/dependencies/remote_execution.py @@ -1,6 +1,5 @@ # Copyright Epic Games, Inc. All Rights Reserved. -import os import sys as _sys import json as _json import uuid as _uuid @@ -22,10 +21,6 @@ _NODE_PING_SECONDS = 1 # Number of seconds to wait before sending another "ping" message to discover remote notes _NODE_TIMEOUT_SECONDS = 5 # Number of seconds to wait before timing out a remote node that was discovered via UDP and has stopped sending "pong" responses -DEFAULT_MULTICAST_TTL = 0 # Multicast TTL (0 is limited to the local host, 1 is limited to the local subnet) -DEFAULT_MULTICAST_GROUP_ENDPOINT = ('239.0.0.1', 6766) # The multicast group endpoint tuple that the UDP multicast socket should join (must match the "Multicast Group Endpoint" setting in the Python plugin) -DEFAULT_MULTICAST_BIND_ADDRESS = '127.0.0.1' # The adapter address that the UDP multicast socket should bind to, or 127.0.0.1 to bind to all adapters (must match the "Multicast Bind Address" setting in the Python plugin) -DEFAULT_COMMAND_ENDPOINT = ('127.0.0.1', 6776) # The endpoint tuple for the TCP command connection hosted by this client (that the remote client will connect to) DEFAULT_RECEIVE_BUFFER_SIZE = 8192 # The default receive buffer size # Execution modes (these must match the names given to LexToString for EPythonCommandExecutionMode in IPythonScriptPlugin.h) @@ -35,22 +30,36 @@ class RemoteExecutionConfig(object): ''' - Configuration data for establishing a remote connection with a UE4 instance running Python. + Configuration data for establishing a remote connection with a Unreal Editor instance running Python. ''' def __init__(self): - self.multicast_ttl = DEFAULT_MULTICAST_TTL - self.multicast_group_endpoint = DEFAULT_MULTICAST_GROUP_ENDPOINT - self.multicast_bind_address = DEFAULT_MULTICAST_BIND_ADDRESS - self.command_endpoint = DEFAULT_COMMAND_ENDPOINT + import bpy + from .. import __package__ as base_package + # The multicast group endpoint tuple that the UDP multicast socket should join (must match the "Multicast Group Endpoint" setting in the Python plugin) + self.multicast_ttl = bpy.context.preferences.addons[base_package].preferences.multicast_ttl + + # The multicast group endpoint tuple that the UDP multicast socket should join (must match the "Multicast Group Endpoint" setting in the Python plugin) + host, port = bpy.context.preferences.addons[base_package].preferences.multicast_group_endpoint.split(':') + self.multicast_group_endpoint = (host, int(port)) + + # The endpoint tuple for the TCP command connection hosted by this client (that the remote client will connect to) + host, port = bpy.context.preferences.addons[base_package].preferences.command_endpoint.split(':') + self.command_endpoint = (host, int(port)) + + # The adapter address that the UDP multicast socket should bind to, or 0.0.0.0 to bind to all adapters (must match the "Multicast Bind Address" setting in the Python plugin) + self.multicast_bind_address = host class RemoteExecution(object): ''' - A remote execution session. This class can discover remote "nodes" (UE4 instances running Python), and allow you to open a command channel to a particular instance. + A remote execution session. This class can discover remote "nodes" (Unreal Editor instances running Python), and allow you to open a command channel to a particular instance. Args: config (RemoteExecutionConfig): Configuration controlling the connection settings for this session. ''' - def __init__(self, config=RemoteExecutionConfig()): + def __init__(self, config=None): + if not config: + config = RemoteExecutionConfig() + self._config = config self._broadcast_connection = None self._command_connection = None @@ -59,23 +68,23 @@ def __init__(self, config=RemoteExecutionConfig()): @property def remote_nodes(self): ''' - Get the current set of discovered remote "nodes" (UE4 instances running Python). + Get the current set of discovered remote "nodes" (Unreal Editor instances running Python). Returns: - list: A list of dicts containg the node ID and the other data. + list: A list of dicts containing the node ID and the other data. ''' return self._broadcast_connection.remote_nodes if self._broadcast_connection else [] def start(self): ''' - Start the remote execution session. This will begin the discovey process for remote "nodes" (UE4 instances running Python). + Start the remote execution session. This will begin the discovery process for remote "nodes" (Unreal Editor instances running Python). ''' self._broadcast_connection = _RemoteExecutionBroadcastConnection(self._config, self._node_id) self._broadcast_connection.open() def stop(self): ''' - Stop the remote execution session. This will end the discovey process for remote "nodes" (UE4 instances running Python), and close any open command connection. + Stop the remote execution session. This will end the discovery process for remote "nodes" (Unreal Editor instances running Python), and close any open command connection. ''' self.close_command_connection() if self._broadcast_connection: @@ -93,7 +102,7 @@ def has_command_connection(self): def open_command_connection(self, remote_node_id): ''' - Open a command connection to the given remote "node" (a UE4 instance running Python), closing any command connection that may currently be open. + Open a command connection to the given remote "node" (a Unreal Editor instance running Python), closing any command connection that may currently be open. Args: remote_node_id (string): The ID of the remote node (this can be obtained by querying `remote_nodes`). @@ -129,7 +138,7 @@ def run_command(self, command, unattended=True, exec_mode=MODE_EXEC_FILE, raise_ class _RemoteExecutionNode(object): ''' - A discovered remote "node" (aka, a UE4 instance running Python). + A discovered remote "node" (aka, a Unreal Editor instance running Python). Args: data (dict): The data representing this node (from its "pong" reponse). @@ -153,7 +162,7 @@ def should_timeout(self, now=None): class _RemoteExecutionBroadcastNodes(object): ''' - A thread-safe set of remote execution "nodes" (UE4 instances running Python). + A thread-safe set of remote execution "nodes" (Unreal Editor instances running Python). ''' def __init__(self): self._remote_nodes = {} @@ -162,7 +171,7 @@ def __init__(self): @property def remote_nodes(self): ''' - Get the current set of discovered remote "nodes" (UE4 instances running Python). + Get the current set of discovered remote "nodes" (Unreal Editor instances running Python). Returns: list: A list of dicts containg the node ID and the other data. @@ -223,7 +232,7 @@ def __init__(self, config, node_id): @property def remote_nodes(self): ''' - Get the current set of discovered remote "nodes" (UE4 instances running Python). + Get the current set of discovered remote "nodes" (Unreal Editor instances running Python). Returns: list: A list of dicts containg the node ID and the other data. @@ -232,7 +241,7 @@ def remote_nodes(self): def open(self): ''' - Open the UDP based messaging and discovery connection. This will begin the discovey process for remote "nodes" (UE4 instances running Python). + Open the UDP based messaging and discovery connection. This will begin the discovey process for remote "nodes" (Unreal Editor instances running Python). ''' self._running = True self._last_ping = None @@ -242,7 +251,7 @@ def open(self): def close(self): ''' - Close the UDP based messaging and discovery connection. This will end the discovey process for remote "nodes" (UE4 instances running Python). + Close the UDP based messaging and discovery connection. This will end the discovey process for remote "nodes" (Unreal Editor instances running Python). ''' self._running = False if self._broadcast_listen_thread: @@ -380,7 +389,7 @@ class _RemoteExecutionCommandConnection(object): Args: config (RemoteExecutionConfig): Configuration controlling the connection settings. node_id (string): The ID of the local "node" (this session). - remote_node_id (string): The ID of the remote "node" (the UE4 instance running Python). + remote_node_id (string): The ID of the remote "node" (the Unreal Editor instance running Python). ''' def __init__(self, config, node_id, remote_node_id): self._config = config @@ -541,7 +550,7 @@ def to_json(self): if self.data: json_obj['data'] = self.data return _json.dumps(json_obj, ensure_ascii=False) - + def to_json_bytes(self): ''' Convert this message to its JSON representation as UTF-8 bytes. diff --git a/send2ue/dependencies/rpc/__init__.py b/src/addons/send2ue/dependencies/rpc/__init__.py similarity index 100% rename from send2ue/dependencies/rpc/__init__.py rename to src/addons/send2ue/dependencies/rpc/__init__.py diff --git a/send2ue/dependencies/rpc/base_server.py b/src/addons/send2ue/dependencies/rpc/base_server.py similarity index 92% rename from send2ue/dependencies/rpc/base_server.py rename to src/addons/send2ue/dependencies/rpc/base_server.py index 4bd3e042..311c8010 100644 --- a/send2ue/dependencies/rpc/base_server.py +++ b/src/addons/send2ue/dependencies/rpc/base_server.py @@ -5,7 +5,9 @@ import time import logging import threading +import tempfile from http import HTTPStatus +from pathlib import Path from xmlrpc.server import SimpleXMLRPCServer, SimpleXMLRPCRequestHandler # importlib machinery needs to be available for importing client modules @@ -16,6 +18,7 @@ EXECUTION_QUEUE = queue.Queue() RETURN_VALUE_NAME = 'RPC_SERVER_RETURN_VALUE' ERROR_VALUE_NAME = 'RPC_SERVER_ERROR_VALUE' +TRACEBACK_FILE = Path(os.environ.get('RPC_TRACEBACK_FILE', Path(tempfile.gettempdir(), 'rpc', 'traceback.log'))) def run_in_main_thread(callable_instance, *args): @@ -99,6 +102,23 @@ def do_POST(self): else: self.report_401() + def _dispatch(self, method, params): + try: + return self.server.funcs[method](*params) # type: ignore + except Exception as error: + import traceback + traceback.print_exc() + + try: + # dump the traceback to a file so that the client can read it. + os.makedirs(TRACEBACK_FILE.parent, exist_ok=True) + with open(TRACEBACK_FILE, 'w') as file: + file.write(f'Error from server:\n{traceback.format_exc()}') + except PermissionError: + pass + + raise error + class BaseServer(SimpleXMLRPCServer): def __init__(self, *args, **kwargs): @@ -135,7 +155,6 @@ def __init__(self, name, port, is_thread=False): self.server.register_function(self.set_env) self.server.register_introspection_functions() self.server.register_multicall_functions() - logger.info(f'Started RPC server "{name}".') @staticmethod def is_running(): diff --git a/send2ue/dependencies/rpc/blender_server.py b/src/addons/send2ue/dependencies/rpc/blender_server.py similarity index 100% rename from send2ue/dependencies/rpc/blender_server.py rename to src/addons/send2ue/dependencies/rpc/blender_server.py diff --git a/send2ue/dependencies/rpc/client.py b/src/addons/send2ue/dependencies/rpc/client.py similarity index 74% rename from send2ue/dependencies/rpc/client.py rename to src/addons/send2ue/dependencies/rpc/client.py index 5f6dcba8..477d7a4f 100644 --- a/send2ue/dependencies/rpc/client.py +++ b/src/addons/send2ue/dependencies/rpc/client.py @@ -2,6 +2,9 @@ import re import logging import inspect +import tempfile +from typing import Optional, List +from pathlib import Path from xmlrpc.client import ( ServerProxy, Unmarshaller, @@ -12,6 +15,8 @@ ) logger = logging.getLogger(__package__) +TRACEBACK_FILE = Path(os.environ.get('RPC_TRACEBACK_FILE', Path(tempfile.gettempdir(), 'rpc', 'traceback.log'))) + class RPCUnmarshaller(Unmarshaller): def __init__(self, *args, **kwargs): @@ -20,15 +25,22 @@ def __init__(self, *args, **kwargs): self.builtin_exceptions = self._get_built_in_exceptions() @staticmethod - def _get_built_in_exceptions(): - """ - Gets a list of the built-in exception classes in python. + def _show_server_traceback() -> Optional[str]: + try: + if TRACEBACK_FILE.exists(): + with open(TRACEBACK_FILE, 'r') as file: + logger.error(file.read()) + except PermissionError: + pass - :return list[BaseException] A list of the built in exception classes in python: + @staticmethod + def _get_built_in_exceptions() -> List: + """ + Gets a list of the built in exception classes in python. """ builtin_exceptions = [] - for builtin_name, builtin_class in globals().get('__builtins__').items(): - if builtin_class and inspect.isclass(builtin_class) and issubclass(builtin_class, BaseException): + for _, builtin_class in globals().get('__builtins__', {}).items(): + if inspect.isclass(builtin_class) and issubclass(builtin_class, BaseException): builtin_exceptions.append(builtin_class) return builtin_exceptions @@ -36,15 +48,13 @@ def _get_built_in_exceptions(): def close(self): """ Override so we redefine the unmarshaller. - - :return tuple: A tuple of marshallables. """ if self._type is None or self._marks: raise ResponseError() if self._type == 'fault': marshallables = self._stack[0] - match = self.error_pattern.match(marshallables.get('faultString', '')) + match = self.error_pattern.match(marshallables.get('faultString', '')) # type: ignore if match: exception_name = match.group('exception').strip("") exception_message = match.group('exception_message') @@ -52,10 +62,12 @@ def close(self): if exception_name: for exception in self.builtin_exceptions: if exception.__name__ == exception_name: + self._show_server_traceback() raise exception(exception_message) # if all else fails just raise the fault - raise Fault(**marshallables) + self._show_server_traceback() + raise Fault(**marshallables) # type: ignore return tuple(self._stack) diff --git a/send2ue/dependencies/rpc/exceptions.py b/src/addons/send2ue/dependencies/rpc/exceptions.py similarity index 100% rename from send2ue/dependencies/rpc/exceptions.py rename to src/addons/send2ue/dependencies/rpc/exceptions.py diff --git a/send2ue/dependencies/rpc/factory.py b/src/addons/send2ue/dependencies/rpc/factory.py similarity index 78% rename from send2ue/dependencies/rpc/factory.py rename to src/addons/send2ue/dependencies/rpc/factory.py index cc6ae964..249f9c03 100644 --- a/send2ue/dependencies/rpc/factory.py +++ b/src/addons/send2ue/dependencies/rpc/factory.py @@ -6,6 +6,7 @@ import inspect import textwrap import unittest +from typing import Any, Iterator, Optional, Union, List, Tuple, Callable from xmlrpc.client import Fault from .client import RPCClient @@ -265,6 +266,110 @@ def decorate(cls): return cls return decorate +def execute_remotely( + port: int, + function: Callable, + args: Optional[Union[List, Tuple]] = None, + kwargs: Optional[dict] = None, + remap_pairs: Optional[List[Tuple[str, str]]] = None, + default_imports: Optional[List[str]] = None, + ): + """ + Executes the given function remotely. + """ + if not args: + args = [] + + validate_file_is_saved(function) + validate_key_word_parameters(function, kwargs) + rpc_factory = RPCFactory( + rpc_client=RPCClient(port), + remap_pairs=remap_pairs, + default_imports=default_imports + ) + return rpc_factory.run_function_remotely(function, args) + +def _make_remote( + port: int, + remap_pairs: Optional[List[Tuple[str, str]]] = None, + default_imports: Optional[List[str]] = None + ): + def decorator(function): + def wrapper(*args, **kwargs): + validate_key_word_parameters(function, kwargs) + return execute_remotely( + function=function, + args=args, + kwargs=kwargs, + port=port, + remap_pairs=remap_pairs, + default_imports=default_imports + ) + + return wrapper + + return decorator + + +def get_all_parent_classes(cls) -> Iterator[Any]: + """ + Gets all parent classes recursively upward from the given class. + """ + for _cls in cls.__bases__: + if object not in _cls.__bases__ and len(_cls.__bases__) >= 1: + yield from get_all_parent_classes(_cls) + yield _cls + +def make_remote( + reference: Any, + port: Optional[int] = None, + default_imports: Optional[List[str]] = None, + ) -> Callable: + """ + Makes the given class or function run remotely when invoked. + """ + if not default_imports: + default_imports = ['import unreal'] + remap_pairs = [] + unreal_port = int(os.environ.get('UNREAL_PORT', 9998)) + + # use a different remap pairs when inside a container + if os.environ.get('TEST_ENVIRONMENT'): + unreal_port = int(os.environ.get('UNREAL_PORT', 8998)) + remap_pairs = [(os.environ.get('HOST_REPO_FOLDER', ''), os.environ.get('CONTAINER_REPO_FOLDER', ''))] + + if not port: + port = unreal_port + + # if this is not a class then decorate it + if not inspect.isclass(reference): + return _make_remote( + port=port, + remap_pairs=remap_pairs, + default_imports=default_imports + )(reference) + + # if this is a class then decorate all its methods + methods = {} + for _cls in [*get_all_parent_classes(reference), reference]: + for attribute, value in _cls.__dict__.items(): + # dont look at magic methods + if not attribute.startswith('__'): + validate_class_method(_cls, value) + # note that we use getattr instead of passing the value directly. + methods[attribute] = _make_remote( + port=port, + remap_pairs=remap_pairs, + default_imports=default_imports + )(getattr(_cls, attribute)) + + # return a new class with the decorated methods all in the same class + return type( + reference.__name__, + (object,), + methods + ) + class RPCTestCase(unittest.TestCase): """ diff --git a/send2ue/dependencies/rpc/server.py b/src/addons/send2ue/dependencies/rpc/server.py similarity index 61% rename from send2ue/dependencies/rpc/server.py rename to src/addons/send2ue/dependencies/rpc/server.py index e4140050..4495c187 100644 --- a/send2ue/dependencies/rpc/server.py +++ b/src/addons/send2ue/dependencies/rpc/server.py @@ -1,8 +1,6 @@ import os -import sys -sys.path.append(os.path.dirname(__file__)) -from base_server import BaseRPCServerManager +from .base_server import BaseRPCServerManager class RPCServer(BaseRPCServerManager): @@ -13,8 +11,3 @@ def __init__(self): super(RPCServer, self).__init__() self.name = 'RPCServer' self.port = int(os.environ.get('RPC_PORT', 9998)) - - -if __name__ == '__main__': - rpc_server = RPCServer() - rpc_server.start(threaded=False) diff --git a/send2ue/dependencies/rpc/unreal_server.py b/src/addons/send2ue/dependencies/rpc/unreal_server.py similarity index 100% rename from send2ue/dependencies/rpc/unreal_server.py rename to src/addons/send2ue/dependencies/rpc/unreal_server.py diff --git a/send2ue/dependencies/rpc/validations.py b/src/addons/send2ue/dependencies/rpc/validations.py similarity index 97% rename from send2ue/dependencies/rpc/validations.py rename to src/addons/send2ue/dependencies/rpc/validations.py index e4a95877..8dd7dc9e 100644 --- a/send2ue/dependencies/rpc/validations.py +++ b/src/addons/send2ue/dependencies/rpc/validations.py @@ -16,8 +16,7 @@ def get_source_file_path(function): :param callable function: A callable. :return str: A file path. """ - client_module = inspect.getmodule(function) - return client_module.__file__ + return inspect.getsourcefile(function) def get_line_link(function): diff --git a/send2ue/dependencies/unreal.py b/src/addons/send2ue/dependencies/unreal.py similarity index 98% rename from send2ue/dependencies/unreal.py rename to src/addons/send2ue/dependencies/unreal.py index 3655dae5..b0d9bc06 100644 --- a/send2ue/dependencies/unreal.py +++ b/src/addons/send2ue/dependencies/unreal.py @@ -8,30 +8,17 @@ from xmlrpc.client import ProtocolError from http.client import RemoteDisconnected -sys.path.append(os.path.dirname(__file__)) -import rpc.factory -import remote_execution - try: import unreal except ModuleNotFoundError: pass -REMAP_PAIRS = [] UNREAL_PORT = int(os.environ.get('UNREAL_PORT', 9998)) # use a different remap pairs when inside a container if os.environ.get('TEST_ENVIRONMENT'): UNREAL_PORT = int(os.environ.get('UNREAL_PORT', 8998)) - REMAP_PAIRS = [(os.environ.get('HOST_REPO_FOLDER'), os.environ.get('CONTAINER_REPO_FOLDER'))] - -# this defines a the decorator that makes function run as remote call in unreal -remote_unreal_decorator = rpc.factory.remote_call( - port=UNREAL_PORT, - default_imports=['import unreal'], - remap_pairs=REMAP_PAIRS, -) -rpc_client = rpc.client.RPCClient(port=UNREAL_PORT) + unreal_response = '' @@ -153,6 +140,8 @@ def run_commands(commands): :param list commands: A formatted string of python commands that will be run by unreal engine. :return str: The stdout produced by the remote python command. """ + from . import remote_execution + # wrap the commands in a try except so that all exceptions can be logged in the output commands = ['try:'] + add_indent(commands, '\t') + ['except Exception as error:', '\tprint(error)'] @@ -169,6 +158,8 @@ def is_connected(): Checks the rpc server connection """ try: + from .rpc import client + rpc_client = client.RPCClient(port=UNREAL_PORT) return rpc_client.proxy.is_running() except (RemoteDisconnected, ConnectionRefusedError, ProtocolError): return False @@ -178,6 +169,8 @@ def set_rpc_env(key, value): """ Sets an env value on the unreal RPC server. """ + from .rpc import client + rpc_client = client.RPCClient(port=UNREAL_PORT) rpc_client.proxy.set_env(key, value) @@ -188,7 +181,8 @@ def bootstrap_unreal_with_rpc_server(): if not os.environ.get('TEST_ENVIRONMENT'): if not is_connected(): import bpy - rpc_response_timeout = bpy.context.preferences.addons["send2ue"].preferences.rpc_response_timeout + from .. import __package__ as base_package + rpc_response_timeout = bpy.context.preferences.addons[base_package].preferences.rpc_response_timeout dependencies_path = os.path.dirname(__file__) result = run_commands( [ @@ -455,8 +449,8 @@ def create_binding_asset(groom_asset_path, mesh_asset_path): ) # source groom asset and target skeletal mesh for the binding asset - groom_binding_asset.set_editor_property('groom', groom_asset) groom_binding_asset.set_editor_property('target_skeletal_mesh', mesh_asset) + groom_binding_asset.set_editor_property('groom', groom_asset) # if a previous version of the binding asset exists, consolidate all references with new asset if existing_binding_asset: @@ -984,7 +978,6 @@ def run_import(self, import_type='control_rig'): ) -@rpc.factory.remote_class(remote_unreal_decorator) class UnrealRemoteCalls: @staticmethod def get_lod_count(asset_path): @@ -1097,8 +1090,10 @@ def get_project_settings_value(config_name, section_name, setting_name): :param str setting_name: The setting to query in the supplied section. :return: Value of the queried setting. """ - engine_config_dir = unreal.Paths.project_config_dir() - config_path = f'{engine_config_dir}{config_name}.ini' + uproject_path = unreal.Paths.get_project_file_path() + config_path = os.path.join(os.path.dirname(uproject_path), 'Config', f'{config_name}.ini') # type: ignore + if not os.path.exists(config_path): + return None from configparser import ConfigParser # setting strict to False to bypass duplicate keys in the config file @@ -1106,6 +1101,14 @@ def get_project_settings_value(config_name, section_name, setting_name): parser.read(config_path) return parser.get(section_name, setting_name, fallback=None) + + @staticmethod + def is_using_legacy_fbx_importer(): + if float(unreal.SystemLibrary.get_engine_version().split('-')[0].rsplit('.',1)[0]) >= 5.5: + value = unreal.SystemLibrary.get_console_variable_string_value(r'Interchange.FeatureFlags.Import.FBX') + return value.lower() in ['false', '0'] + else: + return True @staticmethod def has_socket(asset_path, socket_name): diff --git a/send2ue/operators.py b/src/addons/send2ue/operators.py similarity index 80% rename from send2ue/operators.py rename to src/addons/send2ue/operators.py index 2ffdbdc8..c9b4fd64 100644 --- a/send2ue/operators.py +++ b/src/addons/send2ue/operators.py @@ -6,10 +6,11 @@ import threading from .constants import ToolInfo, ExtensionTasks from .core import export, utilities, settings, validations, extension -from .ui import file_browser, dialog +from .ui import file_browser, dialog, addon_preferences from .dependencies import unreal from .dependencies.rpc import blender_server from .properties import register_scene_properties, unregister_scene_properties +from . import __package__ as base_package class Send2Ue(bpy.types.Operator): @@ -17,7 +18,8 @@ class Send2Ue(bpy.types.Operator): bl_idname = "wm.send2ue" bl_label = "Push Assets" - def __init__(self): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) self.timer = None self.escape = False self.done = False @@ -251,15 +253,15 @@ class ReloadExtensions(bpy.types.Operator): bl_label = "Reload Extensions" def execute(self, context): - addon = bpy.context.preferences.addons.get(ToolInfo.NAME.value) + addon = bpy.context.preferences.addons.get(base_package) if addon: - extensions_repo_path = addon.preferences.extensions_repo_path - if extensions_repo_path: - if not os.path.exists(extensions_repo_path) or not os.path.isdir( - extensions_repo_path - ): - self.report(f'"{extensions_repo_path}" is not a folder path on disk.') - return {'FINISHED'} + for extension_folder in addon.preferences.extension_folder_list: # type: ignore + if extension_folder.folder_path: + if not os.path.exists(extension_folder.folder_path) or not os.path.isdir( + extension_folder.folder_path + ): + self.report(f'"{extension_folder.folder_path}" is not a folder path on disk.') + return {'FINISHED'} extension_factory = extension.ExtensionFactory() @@ -302,6 +304,62 @@ class NullOperator(bpy.types.Operator): def execute(self, context): return {'FINISHED'} + + +class GenericUIListOperator: + """Mix-in class containing functionality shared by operators + that deal with managing Blender list entries.""" + bl_options = {'REGISTER', 'UNDO', 'INTERNAL'} + + list_path: bpy.props.StringProperty() # type: ignore + active_index_path: bpy.props.StringProperty() # type: ignore + + def get_list(self, context): + return addon_preferences.get_context_attr(context, self.list_path) + + def get_active_index(self, context): + return addon_preferences.get_context_attr(context, self.active_index_path) + + def set_active_index(self, context, index): + addon_preferences.set_context_attr(context, self.active_index_path, index) + + +class UILIST_ADDON_PREFERENCES_OT_entry_remove(GenericUIListOperator, bpy.types.Operator): + """Remove the selected entry from the list""" + + bl_idname = "uilist.addon_preferences_entry_remove" + bl_label = "Remove Selected Entry" + + def execute(self, context): + addon_preferences = context.preferences.addons[ToolInfo.NAME.value] + my_list = self.get_list(addon_preferences) + active_index = self.get_active_index(addon_preferences) + + my_list.remove(active_index) + to_index = min(active_index, len(my_list) - 1) + self.set_active_index(addon_preferences, to_index) + + return {'FINISHED'} + + +class UILIST_ADDON_PREFERENCES_OT_entry_add(GenericUIListOperator, bpy.types.Operator): + """Add an entry to the list after the current active item""" + + bl_idname = "uilist.addon_preferences_entry_add" + bl_label = "Add Entry" + + def execute(self, context): + addon_preferences = context.preferences.addons[ToolInfo.NAME.value] + my_list = self.get_list(addon_preferences) + active_index = self.get_active_index(addon_preferences) + + to_index = min(len(my_list), active_index + 1) + + my_list.add() + my_list.move(len(my_list) - 1, to_index) + self.set_active_index(addon_preferences, to_index) + + return {'FINISHED'} operator_classes = [ @@ -315,6 +373,8 @@ def execute(self, context): ReloadExtensions, StartRPCServers, NullOperator, + UILIST_ADDON_PREFERENCES_OT_entry_remove, + UILIST_ADDON_PREFERENCES_OT_entry_add, ] diff --git a/send2ue/properties.py b/src/addons/send2ue/properties.py similarity index 89% rename from send2ue/properties.py rename to src/addons/send2ue/properties.py index e48ffde0..f90fa076 100644 --- a/send2ue/properties.py +++ b/src/addons/send2ue/properties.py @@ -1,11 +1,18 @@ # Copyright Epic Games, Inc. All Rights Reserved. import os -import uuid +import sys import bpy from .constants import ToolInfo, PathModes, Template from .core import settings, formatting, extension +class ExtensionFolder(bpy.types.PropertyGroup): + folder_path: bpy.props.StringProperty( + default='', + description='The folder location of the extension repo.', + subtype='FILE_PATH' + ) # type: ignore + class Send2UeAddonProperties: """ @@ -16,6 +23,12 @@ class Send2UeAddonProperties: default=True, description=f"This automatically creates the pre-defined collection (Export)" ) + quick_access_button: bpy.props.BoolProperty( + name="Enable quick access push button", + default=False, + description="Adds a Push Assets button next to the Pipeline menu" + ) + # ------------- Remote Execution settings ------------------ rpc_response_timeout: bpy.props.IntProperty( name="RPC Response Timeout", default=60, @@ -27,20 +40,42 @@ class Send2UeAddonProperties: set=settings.set_rpc_response_timeout, get=settings.get_rpc_response_timeout ) - extensions_repo_path: bpy.props.StringProperty( - name="Extensions Repo Path", - default="", - description=( - "Set this path to the folder that contains your Send to Unreal python extensions. All extensions " - "in this folder will be automatically loaded" - ) + multicast_ttl: bpy.props.IntProperty( + name="Multicast TTL", + default=0, + description=( + "Limits packet propagation for multicast connections. 0 restricts to local computer, 1 restricts to " + "local network. Default '0'" ) + ) + multicast_group_endpoint: bpy.props.StringProperty( + name="Multicast Group Endpoint", + default="239.0.0.1:6766", + description=( + "The multicast group endpoint that the UDP multicast socket should join. Must match setting " + "in Unreal." + ) + ) + command_endpoint: bpy.props.StringProperty( + name="Command Endpoint", + default="127.0.0.1:6776" if sys.platform == 'win32' else "0.0.0.0:6776", + description=( + "IP for UDP multicast to bind to and TCP command connection hosted by this client. " + "Must match setting in Unreal." + ) + ) + + extension_folder_list: bpy.props.CollectionProperty(type=ExtensionFolder) # type: ignore + extension_folder_list_active_index: bpy.props.IntProperty() # type: ignore class Send2UeWindowMangerProperties(bpy.types.PropertyGroup): """ This class holds the properties for a window. """ + # This can be set programmatically to override the default collection behavior. + # This is cleared back to an empty list after the send2ue operation has completed. + object_collection_override = [] # ------------- current asset info ------------------ asset_data = {} asset_id: bpy.props.StringProperty( @@ -138,7 +173,7 @@ class Send2UeSceneProperties(property_class): PathModes.SEND_TO_PROJECT.value, 'Send to Project', ( - 'Sends the intermediate files to a temporary location on disk and then imports them into' + 'Sends the intermediate files to a temporary location on disk and then imports them into ' 'the Unreal Project. This does not require any extra configuration, but might not be ideal if ' 'your intermediate files need to be under source control.' ), @@ -260,6 +295,14 @@ class Send2UeSceneProperties(property_class): "the first bone in the armature hierarchy is used as the root bone in unreal." ) ) + export_custom_root_name: bpy.props.StringProperty( + name="Custom root bone name", + default="", + description=( + "If specified, this adds a root bone by this name in Unreal. This overrides the " + "\"Export object name as root bone\" setting." + ) + ) export_custom_property_fcurves: bpy.props.BoolProperty( name="Export custom property fcurves", default=True, @@ -321,6 +364,7 @@ class Send2UeSceneProperties(property_class): description=( "Set a regular expression to determine an asset's lod identifier. The remaining unmatched string will " "be used as the asset name. The first matched group's last character should be the LOD index." + "Global modifier flags will NOT work in 4.0+. For example: (?i)" ) ) unreal_skeletal_mesh_lod_settings_path: bpy.props.StringProperty( @@ -477,6 +521,11 @@ class Send2UeSceneProperties(property_class): default=True, description="This checks that a mesh with an armature modifier has vertex groups" ) + validate_unreal_plugins: bpy.props.BoolProperty( + name="Check Unreal has required plugins", + default=True, + description="Disable only if you know Groom plugin is enabled but still get an error" + ) return Send2UeSceneProperties diff --git a/src/addons/send2ue/release_notes.md b/src/addons/send2ue/release_notes.md new file mode 100644 index 00000000..933fa925 --- /dev/null +++ b/src/addons/send2ue/release_notes.md @@ -0,0 +1,10 @@ +## Patch Changes +* Fixed traceback error (missing comma) + * [152](https://github.com/poly-hammer/BlenderTools/pull/152) + +## Special Thanks +@Kamushekp + +## Tests Passing On +* Blender `3.6`, `4.2` (installed from blender.org) +* Unreal `5.3`, `5.4` diff --git a/send2ue/resources/extensions/affixes.py b/src/addons/send2ue/resources/extensions/affixes.py similarity index 91% rename from send2ue/resources/extensions/affixes.py rename to src/addons/send2ue/resources/extensions/affixes.py index 311c60d9..0bc41235 100644 --- a/send2ue/resources/extensions/affixes.py +++ b/src/addons/send2ue/resources/extensions/affixes.py @@ -15,7 +15,7 @@ def add_affixes(): properties = bpy.context.scene.send2ue mesh_objects = utilities.get_from_collection(BlenderTypes.MESH) rig_objects = utilities.get_from_collection(BlenderTypes.SKELETON) - + for mesh_object in mesh_objects: if mesh_object.modifiers: is_armature = False @@ -34,14 +34,21 @@ def add_affixes(): mesh_object, properties.extensions.affixes.static_mesh_name_affix ) + elif mesh_object.active_shape_key: + append_affix( + mesh_object, + properties.extensions.affixes.skeletal_mesh_name_affix + ) else: append_affix(mesh_object, properties.extensions.affixes.static_mesh_name_affix) - + for slot in mesh_object.material_slots: if slot.material: append_affix(slot.material, properties.extensions.affixes.material_name_affix) texture_images = get_texture_images(mesh_object) + for image in texture_images: + save_image_filepath(image) rename_all_textures(texture_images, append_affix, properties) for rig_object in rig_objects: @@ -70,7 +77,7 @@ def remove_affixes(): discard_affix(mesh_object, properties.extensions.affixes.skeletal_mesh_name_affix) if old_mesh_object_name == mesh_object.name: break - + for slot in mesh_object.material_slots: discard_affix(slot.material, properties.extensions.affixes.material_name_affix) @@ -86,6 +93,9 @@ def remove_affixes(): for action in actions: discard_affix(action, properties.extensions.affixes.animation_sequence_name_affix) +def save_image_filepath(image): + path, filename = os.path.split(image.filepath_from_user()) + AffixesExtension.images_original_paths.append(path) def append_affix(scene_object, affix, is_image=False): """ @@ -210,6 +220,19 @@ def rename_texture(image, new_name): if os.path.exists(new_path): image.filepath = new_path +def restore_texture_paths(): + mesh_objects = utilities.get_from_collection(BlenderTypes.MESH) + for mesh_object in mesh_objects: + texture_images = get_texture_images(mesh_object) + + for image_index, image in enumerate(texture_images): + if image.source == 'FILE': + original_path = os.path.join( AffixesExtension.images_original_paths[image_index], image.name ) + + if not os.path.exists(original_path): + shutil.copy(image.filepath_from_user(), original_path) + + image.filepath = original_path def check_asset_affixes(self, context=None): """ @@ -245,6 +268,7 @@ class AffixesExtension(ExtensionBase): AddAssetAffixes, RemoveAssetAffixes ] + images_original_paths = [] show_name_affix_settings: bpy.props.BoolProperty(default=False) # ---------------------------- name affix settings -------------------------------- @@ -322,6 +346,7 @@ def pre_operation(self, properties): """ Defines the pre operation logic that will be run before the operation. """ + AffixesExtension.images_original_paths.clear() if self.auto_add_asset_name_affixes: add_affixes() @@ -331,6 +356,9 @@ def post_operation(self, properties): """ if self.auto_remove_asset_name_affixes: remove_affixes() + + if properties.import_materials_and_textures and self.auto_add_asset_name_affixes: + restore_texture_paths() def pre_validations(self, properties): """ diff --git a/src/addons/send2ue/resources/extensions/apply_groom_modifiers.py b/src/addons/send2ue/resources/extensions/apply_groom_modifiers.py new file mode 100644 index 00000000..5b166194 --- /dev/null +++ b/src/addons/send2ue/resources/extensions/apply_groom_modifiers.py @@ -0,0 +1,71 @@ +import bpy +from send2ue.core import utilities +from send2ue.constants import ToolInfo +from send2ue.core.extension import ExtensionBase + +# Get or create temp collection (necessary?) +def get_temp_collection(collection_name="GroomTempCollection"): + if collection_name in bpy.data.collections: + temp_collection = bpy.data.collections[collection_name] + else: + temp_collection = bpy.data.collections.new(name=collection_name) + bpy.context.scene.collection.children.link(temp_collection) + + return temp_collection + +# make copies of original objects, link to temp collection +def apply_groom_modifiers(): + properties = bpy.context.scene.send2ue + hair_objects = utilities.get_hair_objects(properties) + temp_collection = get_temp_collection() + + for hair_object in hair_objects: + hair_copy = hair_object.copy() + hair_copy.data = hair_object.data.copy() + temp_collection.objects.link(hair_copy) + + for modifier in hair_object.modifiers: + bpy.context.view_layer.objects.active = hair_object + if modifier.name != 'Surface Deform': + bpy.ops.object.modifier_apply(modifier=modifier.name) + +# Delete modified objects and restore original copies +def restore_groom_modifiers(): + temp_collection = get_temp_collection() + export_collection = bpy.data.collections.get(ToolInfo.EXPORT_COLLECTION.value) + hair_copies = temp_collection.all_objects + + for hair_copy in hair_copies: + original_name = hair_copy.name.split(".")[0] + modified_hair_object = bpy.data.objects.get(original_name) + if modified_hair_object: + bpy.data.objects.remove(modified_hair_object, do_unlink=True) + export_collection.objects.link(hair_copy) + temp_collection.objects.unlink(hair_copy) + hair_copy.name = original_name + + bpy.data.collections.remove(temp_collection) + +class ApplyGroomModifiersExtension(ExtensionBase): + name = 'applygroommodifiers' + + apply_groom_mods: bpy.props.BoolProperty( + name= "Apply Groom Modifiers", + default= False, + description="Automatically applies hair modifiers for export. " + "Modifiers restored after export finishes." + ) + + # Draws setting in extensions panel. + def draw_export(self, dialog, layout, properties): + box = layout.box() + box.label(text='Groom Modifiers:') + dialog.draw_property(self, box, 'apply_groom_mods') + + def pre_operation(self, properties): + if self.apply_groom_mods: + apply_groom_modifiers() + + def post_operation(self, properties): + if self.apply_groom_mods: + restore_groom_modifiers() \ No newline at end of file diff --git a/send2ue/resources/extensions/combine_assets.py b/src/addons/send2ue/resources/extensions/combine_assets.py similarity index 98% rename from send2ue/resources/extensions/combine_assets.py rename to src/addons/send2ue/resources/extensions/combine_assets.py index 9363bcc2..09746b36 100644 --- a/send2ue/resources/extensions/combine_assets.py +++ b/src/addons/send2ue/resources/extensions/combine_assets.py @@ -65,6 +65,8 @@ def draw_export(self, dialog, layout, properties): """ box = layout.box() dialog.draw_property(self, box, 'combine') + if self.combine == Options.CHILD_MESHES: + box.label(text="Meshes must be parented to an Empty to combine", icon="HELP") def pre_operation(self, properties): """ diff --git a/send2ue/resources/extensions/create_post_import_assets_for_groom.py b/src/addons/send2ue/resources/extensions/create_post_import_assets_for_groom.py similarity index 94% rename from send2ue/resources/extensions/create_post_import_assets_for_groom.py rename to src/addons/send2ue/resources/extensions/create_post_import_assets_for_groom.py index db80bc0c..c83f653a 100644 --- a/send2ue/resources/extensions/create_post_import_assets_for_groom.py +++ b/src/addons/send2ue/resources/extensions/create_post_import_assets_for_groom.py @@ -4,7 +4,8 @@ from send2ue.core.extension import ExtensionBase from send2ue.core import utilities from send2ue.constants import UnrealTypes -from send2ue.dependencies.unreal import UnrealRemoteCalls +from send2ue.dependencies.unreal import UnrealRemoteCalls as UnrealCalls +from send2ue.dependencies.rpc.factory import make_remote class CreatePostImportAssetsForGroom(ExtensionBase): @@ -56,6 +57,7 @@ def post_import(self, asset_data, properties): mesh_asset_data = utilities.get_related_mesh_asset_data_from_groom_asset_data(asset_data) groom_asset_path = asset_data.get('asset_path', '') mesh_asset_path = mesh_asset_data.get('asset_path', '') + UnrealRemoteCalls = make_remote(UnrealCalls) if not UnrealRemoteCalls.asset_exists(groom_asset_path): return diff --git a/send2ue/resources/extensions/instance_assets.py b/src/addons/send2ue/resources/extensions/instance_assets.py similarity index 90% rename from send2ue/resources/extensions/instance_assets.py rename to src/addons/send2ue/resources/extensions/instance_assets.py index fdc4c50c..e9b7c01b 100644 --- a/send2ue/resources/extensions/instance_assets.py +++ b/src/addons/send2ue/resources/extensions/instance_assets.py @@ -4,13 +4,14 @@ import os from send2ue.constants import UnrealTypes from send2ue.core.extension import ExtensionBase -from send2ue.dependencies.unreal import UnrealRemoteCalls from send2ue.core.utilities import ( convert_blender_rotation_to_unreal_rotation, convert_blender_to_unreal_location, get_armature_modifier_rig_object, get_asset_name ) +from send2ue.dependencies.unreal import UnrealRemoteCalls as UnrealCalls +from send2ue.dependencies.rpc.factory import make_remote STATIC_MESH_INSTANCE_NAMES = [] SKELETAL_MESH_INSTANCE_NAMES = [] @@ -135,10 +136,16 @@ def post_import(self, asset_data, properties): UnrealTypes.SKELETAL_MESH ]: scene_object = bpy.data.objects.get(asset_data['_mesh_object_name']) - unique_name = scene_object.name - location = list(scene_object.matrix_world.translation) - rotation = scene_object.rotation_euler - scale = scene_object.scale[:] + if scene_object.parent and scene_object.parent.type == 'EMPTY': + unique_name = scene_object.parent.name + location = list(scene_object.parent.matrix_world.translation) + rotation = scene_object.parent.rotation_euler + scale = scene_object.parent.scale[:] + else: + unique_name = scene_object.name + location = list(scene_object.matrix_world.translation) + rotation = scene_object.rotation_euler + scale = scene_object.scale[:] # anim sequences use the transforms of the first frame of the action if asset_type == UnrealTypes.ANIM_SEQUENCE: @@ -162,7 +169,7 @@ def post_import(self, asset_data, properties): break if unique_name: - UnrealRemoteCalls.instance_asset( + make_remote(UnrealCalls).instance_asset( asset_data['asset_path'], convert_blender_to_unreal_location(location), convert_blender_rotation_to_unreal_rotation(rotation), diff --git a/send2ue/resources/extensions/ue2rigify.py b/src/addons/send2ue/resources/extensions/ue2rigify.py similarity index 89% rename from send2ue/resources/extensions/ue2rigify.py rename to src/addons/send2ue/resources/extensions/ue2rigify.py index 352a07e5..f8ed8987 100644 --- a/send2ue/resources/extensions/ue2rigify.py +++ b/src/addons/send2ue/resources/extensions/ue2rigify.py @@ -35,7 +35,7 @@ def set_source_rig_hide_value(self, hide_value): :param bool hide_value: The hide value to set the source rig to. :return bool: The original hide value of the source rig. """ - if self.use_ue2rigify: + if self.use_ue2rigify and hasattr(bpy.context.scene, 'ue2rigify'): ue2rigify_properties = bpy.context.scene.ue2rigify if ue2rigify_properties.source_rig: self.original_hide_value = ue2rigify_properties.source_rig.hide_get() @@ -45,7 +45,7 @@ def set_ue2rigify_state(self): """ Sets the use_ue2rigify property depending on whether to use code from the ue2rigify addon or not. """ - if bpy.context.preferences.addons.get('ue2rigify'): + if bpy.context.preferences.addons.find('ue2rigify') and hasattr(bpy.context.scene, 'ue2rigify'): ue2rigify_properties = bpy.context.scene.ue2rigify if ue2rigify_properties.selected_mode == self.control_mode: self.use_ue2rigify = True @@ -62,7 +62,8 @@ def pre_operation(self, properties): # sync the track values if self.use_ue2rigify and self.auto_sync_control_nla_to_source: bpy.context.scene.frame_set(0) - bpy.ops.ue2rigify.sync_rig_actions() + if bpy.context.scene.ue2rigify.source_rig: + bpy.ops.ue2rigify.sync_rig_actions() def post_operation(self, properties): """ @@ -78,7 +79,7 @@ def pre_animation_export(self, asset_data, properties): asset_path = asset_data.get('asset_path') file_path = asset_data.get('file_path') control_rig_object = bpy.data.objects.get(self.control_rig_name) - action_name = asset_data.get('_action_name').strip(self.action_prefix) + action_name = asset_data.get('_action_name').removeprefix(self.action_prefix) if self.use_ue2rigify and control_rig_object: if control_rig_object.animation_data: @@ -95,7 +96,7 @@ def pre_animation_export(self, asset_data, properties): 'asset_path': f'{os.path.dirname(asset_path)}/{action_name}', 'file_path': os.path.join( os.path.dirname(file_path), - os.path.basename(file_path).strip(self.action_prefix) + os.path.basename(file_path).removeprefix(self.action_prefix) ) }) @@ -105,7 +106,7 @@ def post_animation_export(self, asset_data, properties): """ asset_path = asset_data.get('asset_path') control_rig_object = bpy.data.objects.get(self.control_rig_name) - action_name = os.path.basename(asset_path).strip(self.action_prefix) + action_name = os.path.basename(asset_path).removeprefix(self.action_prefix) if self.use_ue2rigify and control_rig_object: # mute the action diff --git a/send2ue/resources/extensions/use_collections_as_folders.py b/src/addons/send2ue/resources/extensions/use_collections_as_folders.py similarity index 54% rename from send2ue/resources/extensions/use_collections_as_folders.py rename to src/addons/send2ue/resources/extensions/use_collections_as_folders.py index 31fd8efb..01b02de7 100644 --- a/send2ue/resources/extensions/use_collections_as_folders.py +++ b/src/addons/send2ue/resources/extensions/use_collections_as_folders.py @@ -17,6 +17,43 @@ class UseCollectionsAsFoldersExtension(ExtensionBase): "the specified mesh folder in your unreal project" ) ) + + def pre_animation_export(self, asset_data, properties): + """ + Defines the pre animation export logic that uses blender collections as unreal folders + + :param dict asset_data: A mutable dictionary of asset data for the current asset. + :param Send2UeSceneProperties properties: The scene property group that contains all the addon properties. + """ + if self.use_collections_as_folders: + asset_type = asset_data.get('_asset_type') + if asset_type and asset_type in [UnrealTypes.ANIM_SEQUENCE]: + action_name = asset_data.get('_action_name') + if action_name: + action = bpy.data.actions.get(action_name) + + if not action: + print(f"Couldnt find action '{action_name}'.") + return + + # Grab armature object to then grab the collection from, as we can't grab it from the action itself + armature_object_name = asset_data['_armature_object_name'] + armature_object = bpy.data.objects.get(armature_object_name) + if not armature_object: + print(f"Couldnt find armature '{armature_object_name}'.") + return + + asset_name = utilities.get_asset_name(action_name, properties) + + _, file_extension = os.path.splitext(asset_data.get('file_path')) + export_path = self.get_full_export_path(properties, UnrealTypes.ANIM_SEQUENCE, armature_object) + file_name_with_extension = f'{asset_name}{file_extension}' + + file_path = os.path.join(export_path, file_name_with_extension) + + self.update_asset_data({ + 'file_path': file_path + }) def pre_mesh_export(self, asset_data, properties): """ @@ -27,9 +64,7 @@ def pre_mesh_export(self, asset_data, properties): """ if self.use_collections_as_folders: asset_type = asset_data.get('_asset_type') - if asset_type and asset_type in [UnrealTypes.ANIM_SEQUENCE, UnrealTypes.GROOM]: - print('Unsupported at this time') - elif asset_type and asset_type in [UnrealTypes.STATIC_MESH, UnrealTypes.SKELETAL_MESH]: + if asset_type and asset_type in [UnrealTypes.STATIC_MESH, UnrealTypes.SKELETAL_MESH]: object_name = asset_data.get('_mesh_object_name') if object_name: scene_object = bpy.data.objects.get(object_name) @@ -49,6 +84,36 @@ def pre_mesh_export(self, asset_data, properties): 'file_path': os.path.join(export_path, file_name_with_extension) }) + def pre_groom_export(self, asset_data, properties): + """ + Defines the pre groom export logic that uses blender collections as unreal folders + + :param dict asset_data: A mutable dictionary of asset data for the current asset. + :param Send2UeSceneProperties properties: The scene property group that contains all the addon properties. + """ + + if self.use_collections_as_folders: + asset_type = asset_data.get('_asset_type') + if asset_type and asset_type in [UnrealTypes.GROOM]: + object_name = asset_data.get('_object_name') + if object_name: + scene_object = bpy.data.objects.get(object_name) + particle_object_name = asset_data.get('_particle_object_name') + if particle_object_name: + scene_object = utilities.get_mesh_object_for_groom_name(object_name) + + asset_name = utilities.get_asset_name(object_name, properties) + + _, file_extension = os.path.splitext(asset_data.get('file_path')) + export_path = self.get_full_export_path(properties, asset_type, scene_object) + file_name_with_extension = f'{asset_name}{file_extension}' + file_path = os.path.join(export_path, file_name_with_extension) + self.update_asset_data({ + 'file_path': file_path + }) + + + def get_full_export_path(self, properties, asset_type, scene_object): """ Gets the unreal export path when use_collections_as_folders extension is active. @@ -73,17 +138,41 @@ def pre_import(self, asset_data, properties): if self.use_collections_as_folders: asset_type = asset_data.get('_asset_type') if asset_type and asset_type == UnrealTypes.ANIM_SEQUENCE: - object_name = asset_data['_armature_object_name'] - scene_object = bpy.data.objects.get(object_name) - # update skeletal asset path now that it is under new collections path - self.update_asset_data({ - 'skeleton_asset_path': utilities.get_skeleton_asset_path( - scene_object, - properties, - self.get_full_import_path, - scene_object, - ) - }) + action_name = asset_data.get('_action_name') + if action_name: + asset_name = utilities.get_asset_name(action_name, properties) + + armature_object_name = asset_data['_armature_object_name'] + armature_object = bpy.data.objects.get(armature_object_name) + + import_path = self.get_full_import_path(properties, UnrealTypes.ANIM_SEQUENCE, armature_object) + + self.update_asset_data({ + # update skeletal asset path now that it is under new collections path + 'skeleton_asset_path': utilities.get_skeleton_asset_path( + armature_object, + properties, + self.get_full_import_path, + armature_object, + ), + # update asset folder and path to the new path based on the collections + 'asset_folder': import_path, + 'asset_path': f'{import_path}{asset_name}' + }) + elif asset_type and asset_type == UnrealTypes.GROOM: + object_name = asset_data.get('_object_name') + if object_name: + scene_object = bpy.data.objects.get(object_name) + particle_object_name = asset_data.get('_particle_object_name') + if particle_object_name: + scene_object = utilities.get_mesh_object_for_groom_name(object_name) + + asset_name = utilities.get_asset_name(object_name, properties) + import_path = self.get_full_import_path(properties, asset_type, scene_object) + self.update_asset_data({ + 'asset_folder': import_path, + 'asset_path': f'{import_path}{asset_name}' + }) elif asset_type: object_name = asset_data.get('_mesh_object_name') if object_name: @@ -115,7 +204,10 @@ def get_full_import_path(self, properties, asset_type, scene_object): """ game_path = utilities.get_import_path(properties, asset_type) sub_path = self.get_collections_as_path(scene_object, properties) - import_path = f'{game_path}{sub_path}/' + if sub_path: + import_path = f'{game_path}{sub_path}/' + else: + import_path = f'{game_path}' return import_path def get_collections_as_path(self, scene_object, properties): @@ -130,10 +222,12 @@ def get_collections_as_path(self, scene_object, properties): if self.use_collections_as_folders and len(scene_object.users_collection) > 0: parent_collection = scene_object.users_collection[0] parent_collection_name = utilities.get_asset_name(parent_collection.name, properties) - parent_names.append(parent_collection_name) - self.set_parent_collection_names(parent_collection, parent_names, properties) - parent_names.reverse() - return '/'.join(parent_names).replace(f'{ToolInfo.EXPORT_COLLECTION.value}/', '') + if parent_collection_name != "Export": + parent_names.append(parent_collection_name) + if len(parent_names) > 0: + self.set_parent_collection_names(parent_collection, parent_names, properties) + parent_names.reverse() + return '/'.join(parent_names).replace(f'{ToolInfo.EXPORT_COLLECTION.value}/', '') return '' @@ -149,7 +243,8 @@ def set_parent_collection_names(self, collection, parent_names, properties): for parent_collection in bpy.data.collections: if collection.name in parent_collection.children.keys(): parent_collection_name = utilities.get_asset_name(parent_collection.name, properties) - parent_names.append(parent_collection_name) + if parent_collection_name != "Export": + parent_names.append(parent_collection_name) self.set_parent_collection_names(parent_collection, parent_names, properties) return None @@ -161,4 +256,4 @@ def draw_paths(self, dialog, layout, properties): :param bpy.types.UILayout layout: The extension layout area. :param Send2UeSceneProperties properties: The scene property group that contains all the addon properties. """ - dialog.draw_property(self, layout, 'use_collections_as_folders') + dialog.draw_property(self, layout, 'use_collections_as_folders') \ No newline at end of file diff --git a/send2ue/resources/extensions/use_immediate_parent_name.py b/src/addons/send2ue/resources/extensions/use_immediate_parent_name.py similarity index 100% rename from send2ue/resources/extensions/use_immediate_parent_name.py rename to src/addons/send2ue/resources/extensions/use_immediate_parent_name.py diff --git a/send2ue/resources/setting_templates/default.json b/src/addons/send2ue/resources/setting_templates/default.json similarity index 99% rename from send2ue/resources/setting_templates/default.json rename to src/addons/send2ue/resources/setting_templates/default.json index 2e855aae..7d8ee793 100644 --- a/send2ue/resources/setting_templates/default.json +++ b/src/addons/send2ue/resources/setting_templates/default.json @@ -316,5 +316,6 @@ "validate_project_settings": true, "validate_scene_scale": true, "validate_textures": false, - "validate_time_units": "off" + "validate_time_units": "off", + "validate_unreal_plugins": true } diff --git a/send2ue/resources/settings.json b/src/addons/send2ue/resources/settings.json similarity index 100% rename from send2ue/resources/settings.json rename to src/addons/send2ue/resources/settings.json diff --git a/send2ue/ui/__init__.py b/src/addons/send2ue/ui/__init__.py similarity index 100% rename from send2ue/ui/__init__.py rename to src/addons/send2ue/ui/__init__.py diff --git a/src/addons/send2ue/ui/addon_preferences.py b/src/addons/send2ue/ui/addon_preferences.py new file mode 100644 index 00000000..33b082e9 --- /dev/null +++ b/src/addons/send2ue/ui/addon_preferences.py @@ -0,0 +1,164 @@ +# Copyright Epic Games, Inc. All Rights Reserved. + +import bpy +from pathlib import Path +from ..properties import Send2UeAddonProperties, ExtensionFolder +from ..constants import ToolInfo +from .. import __package__ + + +def get_context_attr(context, data_path): + """Return the value of a context member based on its data path.""" + return context.path_resolve(data_path) + +def set_context_attr(context, data_path, value): + """Set the value of a context member based on its data path.""" + owner_path, attr_name = data_path.rsplit('.', 1) + owner = context.path_resolve(owner_path) + setattr(owner, attr_name, value) + +def _draw_add_remove_buttons( + *, + layout, + list_path, + active_index_path, + list_length, +): + """Draw the +/- buttons to add and remove list entries.""" + props = layout.operator("uilist.addon_preferences_entry_add", text="", icon='ADD') + props.list_path = list_path + props.active_index_path = active_index_path + + row = layout.row() + row.enabled = list_length > 0 + props = row.operator("uilist.addon_preferences_entry_remove", text="", icon='REMOVE') + props.list_path = list_path + props.active_index_path = active_index_path + +def draw_ui_list( + layout, + context, + class_name="UI_UL_list", + *, + unique_id, + list_path, + active_index_path, + insertion_operators=True, + menu_class_name="", + **kwargs, +): + """ + This overrides the draw_ui_list function from the generic_ui_list module + so that we can draw the add and remove buttons for a list in the addon preferences. + By default, the generic_ui_list module buttons link to ops that receive the scene + context, which is not what we want in this case. So we had to create new ops that + do this job. + """ + + row = layout.row() + + list_owner_path, list_prop_name = list_path.rsplit('.', 1) + list_owner = get_context_attr(context, list_owner_path) + + index_owner_path, index_prop_name = active_index_path.rsplit('.', 1) + index_owner = get_context_attr(context, index_owner_path) + + list_to_draw = get_context_attr(context, list_path) + + row.template_list( + class_name, + unique_id, + list_owner, list_prop_name, + index_owner, index_prop_name, + rows=4 if list_to_draw else 1, + **kwargs, + ) + + col = row.column() + + if insertion_operators: + _draw_add_remove_buttons( + layout=col, + list_path=list_path, + active_index_path=active_index_path, + list_length=len(list_to_draw), + ) + layout.separator() + + if menu_class_name: + col.menu(menu_class_name, icon='DOWNARROW_HLT', text="") + col.separator() + + # Return the right-side column. + return col + + +class FOLDER_UL_extension_path(bpy.types.UIList): + def draw_item(self, context, layout, data, item, icon, active_data, active_prop_name): + row = layout.row() + row.alert = False + if item.folder_path and not Path(item.folder_path).exists(): + row.alert = True + row.prop(item, "folder_path", text="", emboss=False) + +class SendToUnrealPreferences(Send2UeAddonProperties, bpy.types.AddonPreferences): + """ + This class creates the settings interface in the send to unreal addon. + """ + bl_idname = __package__ + + def draw(self, context): + """ + This defines the draw method, which is in all Blender UI types that create interfaces. + + :param context: The context of this interface. + """ + row = self.layout.row() + row.prop(self, 'quick_access_button') + row = self.layout.row() + row.prop(self, 'automatically_create_collections') + row = self.layout.row() + row.label(text='RPC Response Timeout') + row.prop(self, 'rpc_response_timeout', text='') + row = self.layout.row() + + row.label(text="Multicast TTL") + row.prop(self, 'multicast_ttl', text='') + row = self.layout.row() + row.label(text="Multicast Group Endpoint") + row.prop(self, 'multicast_group_endpoint', text='') + row = self.layout.row() + row.label(text="Command Endpoint") + row.prop(self, 'command_endpoint', text='') + row = self.layout.row() + + row.label(text='Extensions Repo Paths:') + row = self.layout.row() + draw_ui_list( + row, + context=bpy.context.preferences.addons[ToolInfo.NAME.value], + class_name="FOLDER_UL_extension_path", + list_path="preferences.extension_folder_list", + active_index_path="preferences.extension_folder_list_active_index", + unique_id="extension_folder_list_id", + insertion_operators=True + ) # type: ignore + row = self.layout.row() + row.operator('send2ue.reload_extensions', text='Reload All Extensions', icon='FILE_REFRESH') + +def register(): + """ + Registers the addon preferences when the addon is enabled. + """ + bpy.utils.register_class(ExtensionFolder) + bpy.utils.register_class(FOLDER_UL_extension_path) + bpy.utils.register_class(SendToUnrealPreferences) + + +def unregister(): + """ + Unregisters the addon preferences when the addon is disabled. + """ + bpy.utils.unregister_class(SendToUnrealPreferences) + bpy.utils.unregister_class(FOLDER_UL_extension_path) + bpy.utils.unregister_class(ExtensionFolder) diff --git a/send2ue/ui/dialog.py b/src/addons/send2ue/ui/dialog.py similarity index 98% rename from send2ue/ui/dialog.py rename to src/addons/send2ue/ui/dialog.py index 94a1ffa0..2ab6a2ea 100644 --- a/send2ue/ui/dialog.py +++ b/src/addons/send2ue/ui/dialog.py @@ -63,6 +63,7 @@ def draw_export_tab(self, layout): properties = bpy.context.scene.send2ue self.draw_property(properties, layout, 'use_object_origin') self.draw_property(properties, layout, 'export_object_name_as_root') + self.draw_property(properties, layout, 'export_custom_root_name', enabled=not properties.export_object_name_as_root) # animation settings box self.draw_expanding_section( @@ -278,6 +279,7 @@ def draw_validations_tab(self, layout): self.draw_property(properties, layout, 'validate_project_settings') self.draw_property(properties, layout, 'validate_object_names') self.draw_property(properties, layout, 'validate_meshes_for_vertex_groups') + self.draw_property(properties, layout, 'validate_unreal_plugins') def draw_extensions(self, layout): """ diff --git a/send2ue/ui/file_browser.py b/src/addons/send2ue/ui/file_browser.py similarity index 100% rename from send2ue/ui/file_browser.py rename to src/addons/send2ue/ui/file_browser.py diff --git a/send2ue/ui/header_menu.py b/src/addons/send2ue/ui/header_menu.py similarity index 93% rename from send2ue/ui/header_menu.py rename to src/addons/send2ue/ui/header_menu.py index 3b48f36f..4c2d36c9 100644 --- a/send2ue/ui/header_menu.py +++ b/src/addons/send2ue/ui/header_menu.py @@ -55,6 +55,20 @@ class TOPBAR_MT_Pipeline(bpy.types.Menu): def draw(self, context): pass +def quick_access(self, context): + self.layout.operator('wm.send2ue') + +def add_quick_access_button(): + try: + bpy.types.TOPBAR_MT_editor_menus.remove(quick_access) + finally: + bpy.types.TOPBAR_MT_editor_menus.append(quick_access) + +def remove_quick_access_button(): + try: + bpy.types.TOPBAR_MT_editor_menus.remove(quick_access) + finally: + pass def pipeline_menu(self, context): """ diff --git a/ue2rigify/__init__.py b/src/addons/ue2rigify/__init__.py similarity index 71% rename from ue2rigify/__init__.py rename to src/addons/ue2rigify/__init__.py index de8598af..a97789e3 100644 --- a/ue2rigify/__init__.py +++ b/src/addons/ue2rigify/__init__.py @@ -1,6 +1,5 @@ # Copyright Epic Games, Inc. All Rights Reserved. -import bpy import os import importlib from . import properties, operators, constants @@ -11,12 +10,12 @@ bl_info = { "name": "UE to Rigify", - "author": "Epic Games Inc.", + "author": "Epic Games Inc (now a community fork)", "description": "Allows you to drive a given rig and its animations with a Rigify rig.", - "version": (1, 6, 2), - "blender": (3, 3, 0), + "version": (1, 7, 5), + "blender": (3, 6, 0), "location": "3D View > Tools > UE to Rigify", - "wiki_url": "https://epicgamesext.github.io/BlenderTools/ue2rigify", + "wiki_url": "https://poly-hammer.github.io/BlenderTools/ue2rigify", "warning": "", "category": "Pipeline" } @@ -44,10 +43,6 @@ def register(): """ Registers the addon classes when the addon is enabled. """ - # TODO remove this when new undo is stable - bpy.context.preferences.experimental.use_undo_legacy = True - - templates.copy_default_templates() # reload the submodules if os.environ.get('UE2RIGIFY_DEV'): @@ -60,15 +55,21 @@ def register(): operators.register() nodes.register() + templates.copy_default_templates() + def unregister(): """ Unregisters the addon classes when the addon is disabled. """ - nodes.remove_pie_menu_hot_keys() - node_editor.unregister() - nodes.unregister() - operators.unregister() - view_3d.unregister() - addon_preferences.unregister() - properties.unregister() + try: + nodes.remove_pie_menu_hot_keys() + node_editor.unregister() + nodes.unregister() + operators.unregister() + view_3d.unregister() + addon_preferences.unregister() + properties.unregister() + except Exception as e: + print(f"Error un-registering UE2Rigify: \n{e}") + diff --git a/ue2rigify/constants.py b/src/addons/ue2rigify/constants.py similarity index 69% rename from ue2rigify/constants.py rename to src/addons/ue2rigify/constants.py index 79d911f4..4bf541c6 100644 --- a/ue2rigify/constants.py +++ b/src/addons/ue2rigify/constants.py @@ -1,4 +1,5 @@ # Copyright Epic Games, Inc. All Rights Reserved. +import bpy import os import tempfile from enum import Enum @@ -32,9 +33,15 @@ class Nodes: class Template: - RIG_TEMPLATES_PATH = os.path.join(tempfile.gettempdir(), ToolInfo.NAME.value, 'resources', 'rig_templates') - DEFAULT_MALE_TEMPLATE = 'male_mannequin' - DEFAULT_FEMALE_TEMPLATE = 'female_mannequin' + @staticmethod + def DEFAULT_RIG_TEMPLATES_PATH(): + if bpy.app.version[0] < 4: + return os.path.join(tempfile.gettempdir(), ToolInfo.NAME.value, 'resources', 'rig_templates', 'b3_6') + else: + return os.path.join(tempfile.gettempdir(), ToolInfo.NAME.value, 'resources', 'rig_templates', 'b4_0') + + DEFAULT_MALE_TEMPLATE = 'male_mannequin_UE4' + DEFAULT_FEMALE_TEMPLATE = 'female_mannequin_UE4' class Viewport: diff --git a/ue2rigify/core/__init__.py b/src/addons/ue2rigify/core/__init__.py similarity index 100% rename from ue2rigify/core/__init__.py rename to src/addons/ue2rigify/core/__init__.py diff --git a/ue2rigify/core/nodes.py b/src/addons/ue2rigify/core/nodes.py similarity index 99% rename from ue2rigify/core/nodes.py rename to src/addons/ue2rigify/core/nodes.py index 2316f483..a981a685 100644 --- a/ue2rigify/core/nodes.py +++ b/src/addons/ue2rigify/core/nodes.py @@ -8,9 +8,9 @@ from . import scene from . import utilities from ..ui import node_editor -from ..constants import ToolInfo, Nodes, Modes, Rigify +from ..constants import Nodes, Modes, Rigify from bpy.types import NodeTree, NodeSocket -from nodeitems_utils import NodeCategory, NodeItem +from nodeitems_utils import NodeItem addon_key_maps = [] pie_menu_classes = [] diff --git a/ue2rigify/core/scene.py b/src/addons/ue2rigify/core/scene.py similarity index 95% rename from ue2rigify/core/scene.py rename to src/addons/ue2rigify/core/scene.py index 376329f3..2ed0ef05 100644 --- a/ue2rigify/core/scene.py +++ b/src/addons/ue2rigify/core/scene.py @@ -267,7 +267,7 @@ def set_meta_rig(self=None, context=None): else: remove_metarig() create_meta_rig(self, file_path=os.path.join( - Template.RIG_TEMPLATES_PATH, + utilities.get_rig_template_path(), self.selected_starter_metarig_template, f'{Rigify.META_RIG_NAME}.py' )) @@ -368,7 +368,7 @@ def remove_metarig(): bpy.data.objects.remove(metarig_object) # remove the metarig object duplicates - for scene_object in bpy.data.objects: + for scene_object in bpy.context.scene.objects: if scene_object.name.startswith(f'{Rigify.META_RIG_NAME}.'): bpy.data.objects.remove(scene_object) @@ -697,7 +697,17 @@ def create_starter_metarig_template(properties): # create the selected metarig operator = properties.selected_starter_metarig_template - exec(operator) + if operator.startswith('bpy.ops'): + exec(operator) + else: + # If selected starter isn't set nor a default Rigify template i.e. ue manny + if not operator: + operator = Template.DEFAULT_MALE_TEMPLATE + create_meta_rig(properties, file_path=os.path.join( + utilities.get_rig_template_path(), + operator, + f'{Rigify.META_RIG_NAME}.py' + )) # get the meta rig object meta_rig_object = bpy.data.objects.get(Rigify.META_RIG_NAME) @@ -1066,6 +1076,9 @@ def sync_nla_track_data(control_rig_object, source_rig_object): if control_rig_object and source_rig_object: # get the nla tracks on the source rig control_nla_tracks = control_rig_object.animation_data.nla_tracks + # create AnimData if there isn't one + if source_rig_object.animation_data is None: + source_rig_object.animation_data_create() source_nla_tracks = source_rig_object.animation_data.nla_tracks # remove all the nla tracks from the source rig @@ -1343,15 +1356,16 @@ def load_metadata(properties): for attribute, value in visual_data.get('armature', {}).items(): setattr(rig_object.data, attribute, value) - # set the bone groups - for bone_group_name, bone_group_data in visual_data.get('bone_groups', {}).items(): - bone_group = rig_object.pose.bone_groups.get(bone_group_name) - if not bone_group: - bone_group = rig_object.pose.bone_groups.new(name=bone_group_name) - bone_group.color_set = bone_group_data['color_set'] - bone_group.colors.active = bone_group_data['colors']['active'] - bone_group.colors.normal = bone_group_data['colors']['normal'] - bone_group.colors.select = bone_group_data['colors']['select'] + # set the bone groups if b3 + if bpy.app.version[0] < 4: + for bone_group_name, bone_group_data in visual_data.get('bone_groups', {}).items(): + bone_group = rig_object.pose.bone_groups.get(bone_group_name) + if not bone_group: + bone_group = rig_object.pose.bone_groups.new(name=bone_group_name) + bone_group.color_set = bone_group_data['color_set'] + bone_group.colors.active = bone_group_data['colors']['active'] + bone_group.colors.normal = bone_group_data['colors']['normal'] + bone_group.colors.select = bone_group_data['colors']['select'] # set the bone attributes for bone_name, bone_data in visual_data.get('bones', {}).items(): @@ -1368,11 +1382,12 @@ def load_metadata(properties): bone.custom_shape_rotation_euler = custom_shape_data['rotation'] bone.custom_shape_scale_xyz = custom_shape_data['scale'] bone.use_custom_shape_bone_size = custom_shape_data['use_bone_size'] - - # set the bone group - bone_group = rig_object.pose.bone_groups.get(bone_data.get('bone_group', '')) - if bone_group: - bone.bone_group = bone_group + + # set the bone group if b3 + if bpy.app.version[0] < 4: + bone_group = rig_object.pose.bone_groups.get(bone_data.get('bone_group', '')) + if bone_group: + bone.bone_group = bone_group def save_metadata(properties): @@ -1386,16 +1401,20 @@ def save_metadata(properties): if rig_object: visual_data = { 'object': { - 'show_in_front': rig_object.show_in_front - }, - 'armature': { - 'show_group_colors': rig_object.data.show_group_colors, - 'show_names': rig_object.data.show_names, - 'show_bone_custom_shapes': rig_object.data.show_bone_custom_shapes - }, - 'bones': {}, - 'bone_groups': {} + 'show_in_front': rig_object.show_in_front + }, + 'armature': { + 'show_names': rig_object.data.show_names, + 'show_bone_custom_shapes': rig_object.data.show_bone_custom_shapes + }, + 'bones': {}, } + if bpy.app.version[0] < 4: + visual_data['armature']['show_group_colors'] = rig_object.data.show_group_colors + visual_data['bone_groups'] = {} + else: + visual_data['armature']['show_bone_colors'] = rig_object.data.show_bone_colors + visual_data['bone_colors'] = {} # save the bone settings for bone in rig_object.pose.bones: @@ -1410,23 +1429,25 @@ def save_metadata(properties): 'scale': bone.custom_shape_scale_xyz[:], 'use_bone_size': bone.use_custom_shape_bone_size } - # save bone group - if bone.bone_group: - bone_data['bone_group'] = bone.bone_group.name + # save bone group if b3 + if bpy.app.version[0] < 4: + if bone.bone_group: + bone_data['bone_group'] = bone.bone_group.name if bone_data: visual_data['bones'][bone.name] = bone_data - # save the bone_groups - for bone_group in rig_object.pose.bone_groups: - visual_data['bone_groups'][bone_group.name] = { - 'color_set': bone_group.color_set, - 'colors': { - 'normal': bone_group.colors.normal[:], - 'select': bone_group.colors.select[:], - 'active': bone_group.colors.active[:], + # save the bone_groups if b3 + if bpy.app.version[0] < 4: + for bone_group in rig_object.pose.bone_groups: + visual_data['bone_groups'][bone_group.name] = { + 'color_set': bone_group.color_set, + 'colors': { + 'normal': bone_group.colors.normal[:], + 'select': bone_group.colors.select[:], + 'active': bone_group.colors.active[:], + } } - } file_path = templates.get_template_file_path(f'{Modes.CONTROL.name.lower()}_metadata.json', properties) templates.save_json_file(visual_data, file_path) @@ -1438,7 +1459,7 @@ def edit_meta_rig_template(properties): :param object properties: The property group that contains variables that maintain the addon's correct state. """ - # if not creating a new template, initiate the + # if not creating a new template, initiate the metarig if properties.selected_rig_template != 'create_new': meta_rig_object = create_meta_rig(properties) else: diff --git a/ue2rigify/core/templates.py b/src/addons/ue2rigify/core/templates.py similarity index 92% rename from ue2rigify/core/templates.py rename to src/addons/ue2rigify/core/templates.py index 03065b09..ba2a86fb 100644 --- a/ue2rigify/core/templates.py +++ b/src/addons/ue2rigify/core/templates.py @@ -5,7 +5,6 @@ import bpy import json import shutil -import tempfile from mathutils import Color, Euler, Matrix, Quaternion, Vector from ..constants import Template, Modes, Rigify @@ -23,8 +22,10 @@ def copy_default_templates(): """ Copies the default addon templates to the user location. """ - template_location = os.path.join(os.path.dirname(__file__), os.path.pardir, 'resources', 'rig_templates') - shutil.copytree(template_location, Template.RIG_TEMPLATES_PATH, dirs_exist_ok=True) + sub_folder = 'b3_6' if bpy.app.version[0] < 4 else 'b4_0' + template_location = os.path.join(os.path.dirname(__file__), os.path.pardir, 'resources', 'rig_templates', sub_folder) + + shutil.copytree(template_location, utilities.get_rig_template_path(), dirs_exist_ok=True) def get_saved_node_data(properties): @@ -187,7 +188,7 @@ def get_rig_templates(self=None, context=None, index_offset=0): :return list: A list of tuples that define the rig template enumeration. """ rig_templates = [] - rig_template_directories = next(os.walk(Template.RIG_TEMPLATES_PATH))[1] + rig_template_directories = next(os.walk(utilities.get_rig_template_path()))[1] # ensure that the male and female template are first rig_templates.append(( @@ -206,6 +207,11 @@ def get_rig_templates(self=None, context=None, index_offset=0): 1 + index_offset )) + # remove from rig_template_directories + rig_template_directories.remove(Template.DEFAULT_MALE_TEMPLATE) + rig_template_directories.remove(Template.DEFAULT_FEMALE_TEMPLATE) + + # enumerate remaining templates with an offset of 2 for index, rig_template in enumerate(rig_template_directories, 2): if rig_template not in [Template.DEFAULT_MALE_TEMPLATE, Template.DEFAULT_FEMALE_TEMPLATE]: rig_templates.append(( @@ -233,7 +239,7 @@ def get_template_file_path(template_file_name, properties): template_name = re.sub(r'\W+', '_', properties.new_template_name).lower() return os.path.join( - Template.RIG_TEMPLATES_PATH, + utilities.get_rig_template_path(), template_name, template_file_name ) @@ -284,7 +290,7 @@ def remove_template_folder(properties, template): properties.selected_mode = Modes.SOURCE.name # delete the selected rig template folder - selected_template_path = os.path.join(Template.RIG_TEMPLATES_PATH, template) + selected_template_path = os.path.join(utilities.get_rig_template_path(), template) import logging logging.info(selected_template_path) @@ -302,16 +308,12 @@ def create_template_folder(template_name, properties): :param object properties: The property group that contains variables that maintain the addon's correct state. """ # remove non alpha numeric characters - template_name = re.sub(r'\W+', '_', template_name.strip()).lower() + template_name = parse_template_name(template_name) # create the template folder - template_path = os.path.join(Template.RIG_TEMPLATES_PATH, template_name) + template_path = os.path.join(utilities.get_rig_template_path(), template_name) if not os.path.exists(template_path): - try: - original_umask = os.umask(0) - os.makedirs(template_path, 0o777) - finally: - os.umask(original_umask) + os.makedirs(template_path, exist_ok=True) # keep checking the os file system till the new folder exists while not os.path.exists(template_path): @@ -359,15 +361,9 @@ def save_text_file(data, file_path): :param str file_path: The full file path to where the file will be saved. """ if '.py' in os.path.basename(file_path): - try: - original_umask = os.umask(0) - if os.path.exists(file_path): - os.chmod(file_path, 0o777) - file = open(file_path, 'w+') - finally: - os.umask(original_umask) - file.write(data) - file.close() + os.makedirs(os.path.dirname(file_path), exist_ok=True) + with open(file_path, 'w+') as file: + file.write(data) def save_json_file(data, file_path): @@ -378,15 +374,9 @@ def save_json_file(data, file_path): :param str file_path: The full file path to where the file will be saved. """ if '.json' in os.path.basename(file_path): - try: - original_umask = os.umask(0) - if os.path.exists(file_path): - os.chmod(file_path, 0o777) - file = open(file_path, 'w+') - finally: - os.umask(original_umask) - json.dump(data, file, indent=1) - file.close() + os.makedirs(os.path.dirname(file_path), exist_ok=True) + with open(file_path, 'w+') as file: + json.dump(data, file, indent=1) def save_constraints(constraints_data, properties): @@ -409,8 +399,8 @@ def import_zip(zip_file_path, properties): :param object properties: The property group that contains variables that maintain the addon's correct state. """ # get the template name and path from the zip file - template_name = os.path.basename(zip_file_path).replace('.zip', '') - template_folder_path = os.path.join(Template.RIG_TEMPLATES_PATH, template_name) + template_name = os.path.basename(zip_file_path).replace('.zip', '').lower() + template_folder_path = os.path.join(utilities.get_rig_template_path(), template_name) # create the template folder create_template_folder(template_name, properties) @@ -418,6 +408,8 @@ def import_zip(zip_file_path, properties): # unpack the zip file into the new template folder shutil.unpack_archive(zip_file_path, template_folder_path, 'zip') + # select new template + properties.selected_rig_template = parse_template_name(template_name) # TODO move to a shared location and define as a generic zip export def export_zip(zip_file_path, properties): @@ -431,7 +423,7 @@ def export_zip(zip_file_path, properties): no_extension_file_path = zip_file_path.replace('.zip', '') # zip up the folder and save it to the given path - template_folder_path = os.path.join(Template.RIG_TEMPLATES_PATH, properties.selected_export_template) + template_folder_path = os.path.join(utilities.get_rig_template_path(), properties.selected_export_template) shutil.make_archive(no_extension_file_path, 'zip', template_folder_path) # @@ -498,3 +490,7 @@ def safe_get_rig_templates(self, context): global _result_reference_get_rig_templates _result_reference_get_rig_templates = items return items + +def parse_template_name(template_name): + return re.sub(r'\W+', '_', template_name.strip()).lower() + diff --git a/ue2rigify/core/utilities.py b/src/addons/ue2rigify/core/utilities.py similarity index 94% rename from ue2rigify/core/utilities.py rename to src/addons/ue2rigify/core/utilities.py index 95155c0e..da54565f 100644 --- a/ue2rigify/core/utilities.py +++ b/src/addons/ue2rigify/core/utilities.py @@ -1,9 +1,11 @@ # Copyright Epic Games, Inc. All Rights Reserved. import bpy import re +import os from . import scene, templates -from ..constants import Viewport, Modes, Rigify +from ..constants import Viewport, Modes, Rigify, Template from mathutils import Vector, Quaternion +from .. import __package__ as base_package def get_modes(): @@ -447,8 +449,9 @@ def set_viewport_settings(viewport_settings, properties): # set a custom bone shape for all the bones previous_settings['red_sphere_bones'] = False if rig_object_settings.get('red_sphere_bones'): - # set a give the rig a custom color - set_rig_color(rig_object, 'THEME01', True) + # set a give the rig a custom color if b3 + if bpy.app.version[0] < 4: + set_rig_color(rig_object, 'THEME01', True) # create the display object for the bones display_object = bpy.data.objects.get(Viewport.DISPLAY_SPHERE) @@ -467,8 +470,9 @@ def set_viewport_settings(viewport_settings, properties): if not rig_object_settings.get('red_sphere_bones'): if rig_object.name != Rigify.CONTROL_RIG_NAME: - # remove the custom rig color - set_rig_color(rig_object, 'THEME01', False) + # remove the custom rig color if b3 + if bpy.app.version[0] < 4: + set_rig_color(rig_object, 'THEME01', False) for bone in rig_object.pose.bones: bone.custom_shape = None if bpy.app.version[0] > 2: @@ -476,16 +480,28 @@ def set_viewport_settings(viewport_settings, properties): else: bone.custom_shape_scale = 1 - # set the visible bone layers - if rig_object_settings.get('visible_bone_layers'): - visible_bone_layers = [] - for index, layer in enumerate(bpy.context.object.data.layers): - visible_bone_layers.append(layer) - if index in rig_object_settings['visible_bone_layers']: - bpy.context.object.data.layers[index] = True - else: - bpy.context.object.data.layers[index] = False - previous_settings['visible_bone_layers'] = visible_bone_layers + if bpy.app.version[0] < 4: + # set the visible bone layers if b3 + if rig_object_settings.get('visible_bone_layers'): + visible_bone_layers = [] + for index, layer in enumerate(bpy.context.object.data.layers): + visible_bone_layers.append(layer) + if index in rig_object_settings['visible_bone_layers']: + bpy.context.object.data.layers[index] = True + else: + bpy.context.object.data.layers[index] = False + previous_settings['visible_bone_layers'] = visible_bone_layers + else: + # set the visible bone collections if b4 + if rig_object_settings.get('visible_bone_collections'): + visible_bone_collections = [] + for collection in bpy.context.object.data.collections: + visible_bone_collections.append(collection.name) + if collection.name in rig_object_settings['visible_bone_collections']: + collection.is_visible = True + else: + collection.is_visible = False + previous_settings['visible_bone_collections'] = visible_bone_collections # store the previous viewport values in a dictionary in the tool properties bpy.context.scene.ue2rigify.previous_viewport_settings[rig_object_name] = previous_settings @@ -685,10 +701,16 @@ def toggle_expand_in_outliner(state=2): :param int state: 1 will expand all collections, 2 will collapse them. """ area = next(a for a in bpy.context.screen.areas if a.type == 'OUTLINER') - bpy.ops.outliner.show_hierarchy({'area': area}, 'INVOKE_DEFAULT') - for i in range(state): - bpy.ops.outliner.expanded_toggle({'area': area}) - area.tag_redraw() + + for area in bpy.context.screen.areas: + if area.type == 'OUTLINER': + for region in area.regions: + if region.type == 'WINDOW': + with bpy.context.temp_override(area=area, region=region): + bpy.ops.outliner.show_hierarchy() + for i in range(state): + bpy.ops.outliner.expanded_toggle() + area.tag_redraw() def focus_on_selected(): @@ -1163,3 +1185,15 @@ def get_rigify_bone_operator(un_hashed_operator_name, bone_name, properties): if output_bones and input_bones and ctrl_bones: return f'bpy.ops.{operator}({output_bones}, {input_bones}, {ctrl_bones})' + +def get_rig_template_path(): + preferences = bpy.context.preferences.addons.get(base_package).preferences + + template_path = preferences.custom_rig_template_path + # If custom_rig_template_path is empty, returns Temp folder + if template_path: + subpath = 'b3_6' if bpy.app.version[0] < 4 else 'b4_0' + template_path = os.path.join(template_path, subpath) + else: + template_path = Template.DEFAULT_RIG_TEMPLATES_PATH() + return template_path \ No newline at end of file diff --git a/ue2rigify/core/validations.py b/src/addons/ue2rigify/core/validations.py similarity index 100% rename from ue2rigify/core/validations.py rename to src/addons/ue2rigify/core/validations.py diff --git a/ue2rigify/operators.py b/src/addons/ue2rigify/operators.py similarity index 95% rename from ue2rigify/operators.py rename to src/addons/ue2rigify/operators.py index 7e1efe18..8a29e61d 100644 --- a/ue2rigify/operators.py +++ b/src/addons/ue2rigify/operators.py @@ -1,11 +1,22 @@ # Copyright Epic Games, Inc. All Rights Reserved. import bpy -from .constants import Modes, Rigify +from .constants import Modes, Rigify, Template from .ui import exporter from .core import scene, nodes, templates, utilities from bpy_extras.io_utils import ImportHelper +class SetDefault(bpy.types.Operator): + """Set a default control rig mode""" + bl_idname = "ue2rigify.set_default" + bl_label = "Default" + + def execute(self, context): + properties = bpy.context.scene.ue2rigify + properties.selected_mode = Modes.SOURCE.name + properties.selected_rig_template = Template.DEFAULT_MALE_TEMPLATE + return {'FINISHED'} + class ConvertToRigifyRig(bpy.types.Operator): """Convert the source rig to a control rig""" @@ -294,7 +305,8 @@ def execute(self, context): ConstrainSourceToDeform, RemoveConstraints, SwitchModes, - NullOperator + NullOperator, + SetDefault ] diff --git a/ue2rigify/properties.py b/src/addons/ue2rigify/properties.py similarity index 97% rename from ue2rigify/properties.py rename to src/addons/ue2rigify/properties.py index bcfb4412..63723446 100644 --- a/ue2rigify/properties.py +++ b/src/addons/ue2rigify/properties.py @@ -57,7 +57,8 @@ class UE2RigifyProperties(bpy.types.PropertyGroup): name="Metarig", description=tool_tips.starter_metarig_template_tool_tip, items=templates.safe_get_starter_metarig_templates, - update=scene.set_meta_rig + update=scene.set_meta_rig, + default=None ) selected_rig_template: bpy.props.EnumProperty( @@ -65,7 +66,8 @@ class UE2RigifyProperties(bpy.types.PropertyGroup): description=tool_tips.rig_template_tool_tip, items=templates.safe_populate_templates_dropdown, options={'ANIMATABLE'}, - update=templates.set_template + update=templates.set_template, + default=None ) selected_mode: bpy.props.EnumProperty( diff --git a/src/addons/ue2rigify/release_notes.md b/src/addons/ue2rigify/release_notes.md new file mode 100644 index 00000000..93e0525c --- /dev/null +++ b/src/addons/ue2rigify/release_notes.md @@ -0,0 +1,9 @@ +## Patch Changes +* Added template for UEFN Mannequin + * [111](https://github.com/poly-hammer/BlenderTools/pull/111) + +## Special Thanks +* @JoshQuake + +## Tests Passing On +* Blender `3.6`, `4.2` (installed from blender.org) \ No newline at end of file diff --git a/ue2rigify/resources/rig_templates/female_mannequin/control_metadata.json b/src/addons/ue2rigify/resources/rig_templates/b3_6/female_mannequin_UE4/control_metadata.json similarity index 100% rename from ue2rigify/resources/rig_templates/female_mannequin/control_metadata.json rename to src/addons/ue2rigify/resources/rig_templates/b3_6/female_mannequin_UE4/control_metadata.json diff --git a/ue2rigify/resources/rig_templates/female_mannequin/fk_to_source_links.json b/src/addons/ue2rigify/resources/rig_templates/b3_6/female_mannequin_UE4/fk_to_source_links.json similarity index 100% rename from ue2rigify/resources/rig_templates/female_mannequin/fk_to_source_links.json rename to src/addons/ue2rigify/resources/rig_templates/b3_6/female_mannequin_UE4/fk_to_source_links.json diff --git a/ue2rigify/resources/rig_templates/female_mannequin/fk_to_source_nodes.json b/src/addons/ue2rigify/resources/rig_templates/b3_6/female_mannequin_UE4/fk_to_source_nodes.json similarity index 100% rename from ue2rigify/resources/rig_templates/female_mannequin/fk_to_source_nodes.json rename to src/addons/ue2rigify/resources/rig_templates/b3_6/female_mannequin_UE4/fk_to_source_nodes.json diff --git a/ue2rigify/resources/rig_templates/female_mannequin/metarig.py b/src/addons/ue2rigify/resources/rig_templates/b3_6/female_mannequin_UE4/metarig.py similarity index 100% rename from ue2rigify/resources/rig_templates/female_mannequin/metarig.py rename to src/addons/ue2rigify/resources/rig_templates/b3_6/female_mannequin_UE4/metarig.py diff --git a/ue2rigify/resources/rig_templates/female_mannequin/source_to_deform_links.json b/src/addons/ue2rigify/resources/rig_templates/b3_6/female_mannequin_UE4/source_to_deform_links.json similarity index 100% rename from ue2rigify/resources/rig_templates/female_mannequin/source_to_deform_links.json rename to src/addons/ue2rigify/resources/rig_templates/b3_6/female_mannequin_UE4/source_to_deform_links.json diff --git a/ue2rigify/resources/rig_templates/female_mannequin/source_to_deform_nodes.json b/src/addons/ue2rigify/resources/rig_templates/b3_6/female_mannequin_UE4/source_to_deform_nodes.json similarity index 100% rename from ue2rigify/resources/rig_templates/female_mannequin/source_to_deform_nodes.json rename to src/addons/ue2rigify/resources/rig_templates/b3_6/female_mannequin_UE4/source_to_deform_nodes.json diff --git a/src/addons/ue2rigify/resources/rig_templates/b3_6/female_mannequin_UE5/fk_to_source_links.json b/src/addons/ue2rigify/resources/rig_templates/b3_6/female_mannequin_UE5/fk_to_source_links.json new file mode 100644 index 00000000..e8c45318 --- /dev/null +++ b/src/addons/ue2rigify/resources/rig_templates/b3_6/female_mannequin_UE5/fk_to_source_links.json @@ -0,0 +1,524 @@ +[ + { + "from_node": "Control Rig upper_arm_fk.L", + "to_node": "Source Rig upperarm_l", + "from_socket": "upper_arm_fk.L", + "to_socket": "upperarm_l" + }, + { + "from_node": "Control Rig upper_arm_fk.L", + "to_node": "Source Rig upperarm_l", + "from_socket": "upper_arm_fk.R", + "to_socket": "upperarm_r" + }, + { + "from_node": "Control Rig upper_arm_tweak.L", + "to_node": "Source Rig upperarm_correctiveRoot_l", + "from_socket": "upper_arm_tweak.L", + "to_socket": "upperarm_correctiveRoot_l" + }, + { + "from_node": "Control Rig upper_arm_tweak.L", + "to_node": "Source Rig upperarm_correctiveRoot_l", + "from_socket": "upper_arm_tweak.R", + "to_socket": "upperarm_correctiveRoot_r" + }, + { + "from_node": "Control Rig forearm_fk.L", + "to_node": "Source Rig lowerarm_l", + "from_socket": "forearm_fk.L", + "to_socket": "lowerarm_l" + }, + { + "from_node": "Control Rig forearm_fk.L", + "to_node": "Source Rig lowerarm_l", + "from_socket": "forearm_fk.R", + "to_socket": "lowerarm_r" + }, + { + "from_node": "Control Rig hand_fk.L", + "to_node": "Source Rig hand_l", + "from_socket": "hand_fk.L", + "to_socket": "hand_l" + }, + { + "from_node": "Control Rig hand_fk.L", + "to_node": "Source Rig hand_l", + "from_socket": "hand_fk.R", + "to_socket": "hand_r" + }, + { + "from_node": "Control Rig forearm_tweak.L", + "to_node": "Source Rig lowerarm_correctiveRoot_l", + "from_socket": "forearm_tweak.L", + "to_socket": "lowerarm_correctiveRoot_l" + }, + { + "from_node": "Control Rig forearm_tweak.L", + "to_node": "Source Rig lowerarm_correctiveRoot_l", + "from_socket": "forearm_tweak.R", + "to_socket": "lowerarm_correctiveRoot_r" + }, + { + "from_node": "Control Rig forearm_tweak.L.001", + "to_node": "Source Rig lowerarm_twist_02_l", + "from_socket": "forearm_tweak.L.001", + "to_socket": "lowerarm_twist_02_l" + }, + { + "from_node": "Control Rig forearm_tweak.L.001", + "to_node": "Source Rig lowerarm_twist_02_l", + "from_socket": "forearm_tweak.R.001", + "to_socket": "lowerarm_twist_02_r" + }, + { + "from_node": "Control Rig forearm_tweak.L.002", + "to_node": "Source Rig lowerarm_twist_01_l", + "from_socket": "forearm_tweak.L.002", + "to_socket": "lowerarm_twist_01_l" + }, + { + "from_node": "Control Rig forearm_tweak.L.002", + "to_node": "Source Rig lowerarm_twist_01_l", + "from_socket": "forearm_tweak.R.002", + "to_socket": "lowerarm_twist_01_r" + }, + { + "from_node": "Control Rig hand_tweak.L", + "to_node": "Source Rig hand_l.001", + "from_socket": "hand_tweak.L", + "to_socket": "hand_l" + }, + { + "from_node": "Control Rig hand_tweak.L", + "to_node": "Source Rig hand_l.001", + "from_socket": "hand_tweak.R", + "to_socket": "hand_r" + }, + { + "from_node": "Control Rig upper_arm_tweak.L.002", + "to_node": "Source Rig upperarm_twist_02_l", + "from_socket": "upper_arm_tweak.L.002", + "to_socket": "upperarm_twist_02_l" + }, + { + "from_node": "Control Rig upper_arm_tweak.L.002", + "to_node": "Source Rig upperarm_twist_02_l", + "from_socket": "upper_arm_tweak.R.002", + "to_socket": "upperarm_twist_02_r" + }, + { + "from_node": "Control Rig upper_arm_tweak.L.001", + "to_node": "Source Rig upperarm_twist_01_l", + "from_socket": "upper_arm_tweak.L.001", + "to_socket": "upperarm_twist_01_l" + }, + { + "from_node": "Control Rig upper_arm_tweak.L.001", + "to_node": "Source Rig upperarm_twist_01_l", + "from_socket": "upper_arm_tweak.R.001", + "to_socket": "upperarm_twist_01_r" + }, + { + "from_node": "Control Rig thumb.01.L", + "to_node": "Source Rig thumb_01_l", + "from_socket": "thumb.01.L", + "to_socket": "thumb_01_l" + }, + { + "from_node": "Control Rig thumb.01.L", + "to_node": "Source Rig thumb_01_l", + "from_socket": "thumb.01.R", + "to_socket": "thumb_01_r" + }, + { + "from_node": "Control Rig thumb.02.L", + "to_node": "Source Rig thumb_02_l", + "from_socket": "thumb.02.L", + "to_socket": "thumb_02_l" + }, + { + "from_node": "Control Rig thumb.02.L", + "to_node": "Source Rig thumb_02_l", + "from_socket": "thumb.02.R", + "to_socket": "thumb_02_r" + }, + { + "from_node": "Control Rig thumb.03.L", + "to_node": "Source Rig thumb_03_l", + "from_socket": "thumb.03.L", + "to_socket": "thumb_03_l" + }, + { + "from_node": "Control Rig thumb.03.L", + "to_node": "Source Rig thumb_03_l", + "from_socket": "thumb.03.R", + "to_socket": "thumb_03_r" + }, + { + "from_node": "Control Rig f_index.01.L", + "to_node": "Source Rig index_01_l", + "from_socket": "f_index.01.L", + "to_socket": "index_01_l" + }, + { + "from_node": "Control Rig f_index.01.L", + "to_node": "Source Rig index_01_l", + "from_socket": "f_index.01.R", + "to_socket": "index_01_r" + }, + { + "from_node": "Control Rig f_index.02.L", + "to_node": "Source Rig index_02_l", + "from_socket": "f_index.02.L", + "to_socket": "index_02_l" + }, + { + "from_node": "Control Rig f_index.02.L", + "to_node": "Source Rig index_02_l", + "from_socket": "f_index.02.R", + "to_socket": "index_02_r" + }, + { + "from_node": "Control Rig f_index.03.L", + "to_node": "Source Rig index_03_l", + "from_socket": "f_index.03.L", + "to_socket": "index_03_l" + }, + { + "from_node": "Control Rig f_index.03.L", + "to_node": "Source Rig index_03_l", + "from_socket": "f_index.03.R", + "to_socket": "index_03_r" + }, + { + "from_node": "Control Rig f_middle.01.L", + "to_node": "Source Rig middle_01_l", + "from_socket": "f_middle.01.L", + "to_socket": "middle_01_l" + }, + { + "from_node": "Control Rig f_middle.01.L", + "to_node": "Source Rig middle_01_l", + "from_socket": "f_middle.01.R", + "to_socket": "middle_01_r" + }, + { + "from_node": "Control Rig f_middle.02.L", + "to_node": "Source Rig middle_02_l", + "from_socket": "f_middle.02.L", + "to_socket": "middle_02_l" + }, + { + "from_node": "Control Rig f_middle.02.L", + "to_node": "Source Rig middle_02_l", + "from_socket": "f_middle.02.R", + "to_socket": "middle_02_r" + }, + { + "from_node": "Control Rig f_middle.03.L", + "to_node": "Source Rig middle_03_l", + "from_socket": "f_middle.03.L", + "to_socket": "middle_03_l" + }, + { + "from_node": "Control Rig f_middle.03.L", + "to_node": "Source Rig middle_03_l", + "from_socket": "f_middle.03.R", + "to_socket": "middle_03_r" + }, + { + "from_node": "Control Rig f_ring.01.L", + "to_node": "Source Rig ring_01_l", + "from_socket": "f_ring.01.L", + "to_socket": "ring_01_l" + }, + { + "from_node": "Control Rig f_ring.01.L", + "to_node": "Source Rig ring_01_l", + "from_socket": "f_ring.01.R", + "to_socket": "ring_01_r" + }, + { + "from_node": "Control Rig f_ring.02.L", + "to_node": "Source Rig ring_02_l", + "from_socket": "f_ring.02.L", + "to_socket": "ring_02_l" + }, + { + "from_node": "Control Rig f_ring.02.L", + "to_node": "Source Rig ring_02_l", + "from_socket": "f_ring.02.R", + "to_socket": "ring_02_r" + }, + { + "from_node": "Control Rig f_ring.03.L", + "to_node": "Source Rig ring_03_l", + "from_socket": "f_ring.03.L", + "to_socket": "ring_03_l" + }, + { + "from_node": "Control Rig f_ring.03.L", + "to_node": "Source Rig ring_03_l", + "from_socket": "f_ring.03.R", + "to_socket": "ring_03_r" + }, + { + "from_node": "Control Rig f_pinky.01.L", + "to_node": "Source Rig pinky_01_l", + "from_socket": "f_pinky.01.L", + "to_socket": "pinky_01_l" + }, + { + "from_node": "Control Rig f_pinky.01.L", + "to_node": "Source Rig pinky_01_l", + "from_socket": "f_pinky.01.R", + "to_socket": "pinky_01_r" + }, + { + "from_node": "Control Rig f_pinky.02.L", + "to_node": "Source Rig pinky_02_l", + "from_socket": "f_pinky.02.L", + "to_socket": "pinky_02_l" + }, + { + "from_node": "Control Rig f_pinky.02.L", + "to_node": "Source Rig pinky_02_l", + "from_socket": "f_pinky.02.R", + "to_socket": "pinky_02_r" + }, + { + "from_node": "Control Rig f_pinky.03.L", + "to_node": "Source Rig pinky_03_l", + "from_socket": "f_pinky.03.L", + "to_socket": "pinky_03_l" + }, + { + "from_node": "Control Rig f_pinky.03.L", + "to_node": "Source Rig pinky_03_l", + "from_socket": "f_pinky.03.R", + "to_socket": "pinky_03_r" + }, + { + "from_node": "Control Rig thigh_fk.L", + "to_node": "Source Rig thigh_l", + "from_socket": "thigh_fk.L", + "to_socket": "thigh_l" + }, + { + "from_node": "Control Rig thigh_fk.L", + "to_node": "Source Rig thigh_l", + "from_socket": "thigh_fk.R", + "to_socket": "thigh_r" + }, + { + "from_node": "Control Rig thigh_tweak.L", + "to_node": "Source Rig thigh_correctiveRoot_l", + "from_socket": "thigh_tweak.L", + "to_socket": "thigh_correctiveRoot_l" + }, + { + "from_node": "Control Rig thigh_tweak.L", + "to_node": "Source Rig thigh_correctiveRoot_l", + "from_socket": "thigh_tweak.R", + "to_socket": "thigh_correctiveRoot_r" + }, + { + "from_node": "Control Rig shin_fk.L", + "to_node": "Source Rig calf_l", + "from_socket": "shin_fk.L", + "to_socket": "calf_l" + }, + { + "from_node": "Control Rig shin_fk.L", + "to_node": "Source Rig calf_l", + "from_socket": "shin_fk.R", + "to_socket": "calf_r" + }, + { + "from_node": "Control Rig foot_fk.L", + "to_node": "Source Rig foot_l", + "from_socket": "foot_fk.L", + "to_socket": "foot_l" + }, + { + "from_node": "Control Rig foot_fk.L", + "to_node": "Source Rig foot_l", + "from_socket": "foot_fk.R", + "to_socket": "foot_r" + }, + { + "from_node": "Control Rig foot_tweak.L", + "to_node": "Source Rig foot_l.001", + "from_socket": "foot_tweak.L", + "to_socket": "foot_l" + }, + { + "from_node": "Control Rig foot_tweak.L", + "to_node": "Source Rig foot_l.001", + "from_socket": "foot_tweak.R", + "to_socket": "foot_r" + }, + { + "from_node": "Control Rig toe.L", + "to_node": "Source Rig ball_l", + "from_socket": "toe.L", + "to_socket": "ball_l" + }, + { + "from_node": "Control Rig toe.L", + "to_node": "Source Rig ball_l", + "from_socket": "toe.R", + "to_socket": "ball_r" + }, + { + "from_node": "Control Rig shin_tweak.L.001", + "to_node": "Source Rig calf_twist_02_l", + "from_socket": "shin_tweak.L.001", + "to_socket": "calf_twist_02_l" + }, + { + "from_node": "Control Rig shin_tweak.L.001", + "to_node": "Source Rig calf_twist_02_l", + "from_socket": "shin_tweak.R.001", + "to_socket": "calf_twist_02_r" + }, + { + "from_node": "Control Rig shin_tweak.L.002", + "to_node": "Source Rig calf_twist_01_l", + "from_socket": "shin_tweak.L.002", + "to_socket": "calf_twist_01_l" + }, + { + "from_node": "Control Rig shin_tweak.L.002", + "to_node": "Source Rig calf_twist_01_l", + "from_socket": "shin_tweak.R.002", + "to_socket": "calf_twist_01_r" + }, + { + "from_node": "Control Rig shin_tweak.L", + "to_node": "Source Rig calf_correctiveRoot_l", + "from_socket": "shin_tweak.L", + "to_socket": "calf_correctiveRoot_l" + }, + { + "from_node": "Control Rig shin_tweak.L", + "to_node": "Source Rig calf_correctiveRoot_l", + "from_socket": "shin_tweak.R", + "to_socket": "calf_correctiveRoot_r" + }, + { + "from_node": "Control Rig thigh_tweak.L.002", + "to_node": "Source Rig thigh_twist_02_l", + "from_socket": "thigh_tweak.L.002", + "to_socket": "thigh_twist_02_l" + }, + { + "from_node": "Control Rig thigh_tweak.L.002", + "to_node": "Source Rig thigh_twist_02_l", + "from_socket": "thigh_tweak.R.002", + "to_socket": "thigh_twist_02_r" + }, + { + "from_node": "Control Rig thigh_tweak.L.001", + "to_node": "Source Rig thigh_twist_01_l", + "from_socket": "thigh_tweak.L.001", + "to_socket": "thigh_twist_01_l" + }, + { + "from_node": "Control Rig thigh_tweak.L.001", + "to_node": "Source Rig thigh_twist_01_l", + "from_socket": "thigh_tweak.R.001", + "to_socket": "thigh_twist_01_r" + }, + { + "from_node": "Control Rig root", + "to_node": "root", + "from_socket": "root", + "to_socket": "object" + }, + { + "from_node": "Control Rig shoulder.L", + "to_node": "Source Rig clavicle_l", + "from_socket": "shoulder.L", + "to_socket": "clavicle_l" + }, + { + "from_node": "Control Rig shoulder.L", + "to_node": "Source Rig clavicle_l", + "from_socket": "shoulder.R", + "to_socket": "clavicle_r" + }, + { + "from_node": "Control Rig breast.L", + "to_node": "Source Rig clavicle_pec_l", + "from_socket": "breast.L", + "to_socket": "clavicle_pec_l" + }, + { + "from_node": "Control Rig breast.L", + "to_node": "Source Rig clavicle_pec_l", + "from_socket": "breast.R", + "to_socket": "clavicle_pec_r" + }, + { + "from_node": "Control Rig neck", + "to_node": "Source Rig neck_02.001", + "from_socket": "neck", + "to_socket": "neck_02" + }, + { + "from_node": "Control Rig head", + "to_node": "Source Rig head", + "from_socket": "head", + "to_socket": "head" + }, + { + "from_node": "Control Rig spine_fk", + "to_node": "Source Rig spine_01", + "from_socket": "spine_fk", + "to_socket": "spine_01" + }, + { + "from_node": "Control Rig spine_fk.001", + "to_node": "Source Rig spine_02", + "from_socket": "spine_fk.001", + "to_socket": "spine_02" + }, + { + "from_node": "Control Rig spine_fk.002", + "to_node": "Source Rig spine_02.001", + "from_socket": "spine_fk.002", + "to_socket": "spine_02" + }, + { + "from_node": "Control Rig spine_fk.003", + "to_node": "Source Rig spine_03", + "from_socket": "spine_fk.003", + "to_socket": "spine_03" + }, + { + "from_node": "Control Rig spine_fk.007", + "to_node": "Source Rig spine_04", + "from_socket": "spine_fk.007", + "to_socket": "spine_04" + }, + { + "from_node": "Control Rig spine_fk.008", + "to_node": "Source Rig spine_05", + "from_socket": "spine_fk.008", + "to_socket": "spine_05" + }, + { + "from_node": "Control Rig tweak_spine", + "to_node": "Source Rig pelvis", + "from_socket": "tweak_spine", + "to_socket": "pelvis" + }, + { + "from_node": "Control Rig tweak_spine.001", + "to_node": "Source Rig spine_01.001", + "from_socket": "tweak_spine.001", + "to_socket": "spine_01" + } +] \ No newline at end of file diff --git a/src/addons/ue2rigify/resources/rig_templates/b3_6/female_mannequin_UE5/fk_to_source_nodes.json b/src/addons/ue2rigify/resources/rig_templates/b3_6/female_mannequin_UE5/fk_to_source_nodes.json new file mode 100644 index 00000000..cfcd9354 --- /dev/null +++ b/src/addons/ue2rigify/resources/rig_templates/b3_6/female_mannequin_UE5/fk_to_source_nodes.json @@ -0,0 +1,2234 @@ +[ + { + "name": "Source Rig upperarm_l", + "label": "Source Rig upperarm_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 0.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "upperarm_l", + "upperarm_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig upper_arm_fk.L", + "label": "Control Rig upper_arm_fk.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 0.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upper_arm_fk.L", + "upper_arm_fk.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig upperarm_correctiveRoot_l", + "label": "Source Rig upperarm_correctiveRoot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 120.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "upperarm_correctiveRoot_l", + "upperarm_correctiveRoot_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig upper_arm_tweak.L", + "label": "Control Rig upper_arm_tweak.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 120.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upper_arm_tweak.L", + "upper_arm_tweak.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig lowerarm_l", + "label": "Source Rig lowerarm_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 240.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "lowerarm_l", + "lowerarm_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig forearm_fk.L", + "label": "Control Rig forearm_fk.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 240.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "forearm_fk.L", + "forearm_fk.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig hand_l", + "label": "Source Rig hand_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 360.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "hand_l", + "hand_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig hand_fk.L", + "label": "Control Rig hand_fk.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 360.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "hand_fk.L", + "hand_fk.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig lowerarm_correctiveRoot_l", + "label": "Source Rig lowerarm_correctiveRoot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 480.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "lowerarm_correctiveRoot_l", + "lowerarm_correctiveRoot_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig forearm_tweak.L", + "label": "Control Rig forearm_tweak.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 480.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "forearm_tweak.L", + "forearm_tweak.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig lowerarm_twist_02_l", + "label": "Source Rig lowerarm_twist_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 600.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "lowerarm_twist_02_l", + "lowerarm_twist_02_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig forearm_tweak.L.001", + "label": "Control Rig forearm_tweak.L.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 600.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "forearm_tweak.L.001", + "forearm_tweak.R.001" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig lowerarm_twist_01_l", + "label": "Source Rig lowerarm_twist_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 720.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "lowerarm_twist_01_l", + "lowerarm_twist_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig forearm_tweak.L.002", + "label": "Control Rig forearm_tweak.L.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 720.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "forearm_tweak.L.002", + "forearm_tweak.R.002" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig hand_l.001", + "label": "Source Rig hand_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 840.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "hand_l", + "hand_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig hand_tweak.L", + "label": "Control Rig hand_tweak.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 840.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "hand_tweak.L", + "hand_tweak.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig upperarm_twist_02_l", + "label": "Source Rig upperarm_twist_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 960.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "upperarm_twist_02_l", + "upperarm_twist_02_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig upper_arm_tweak.L.002", + "label": "Control Rig upper_arm_tweak.L.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 960.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upper_arm_tweak.L.002", + "upper_arm_tweak.R.002" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig upperarm_twist_01_l", + "label": "Source Rig upperarm_twist_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1080.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "upperarm_twist_01_l", + "upperarm_twist_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig upper_arm_tweak.L.001", + "label": "Control Rig upper_arm_tweak.L.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1080.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upper_arm_tweak.L.001", + "upper_arm_tweak.R.001" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig thumb_01_l", + "label": "Source Rig thumb_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1200.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "thumb_01_l", + "thumb_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig thumb.01.L", + "label": "Control Rig thumb.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1200.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thumb.01.L", + "thumb.01.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig thumb_02_l", + "label": "Source Rig thumb_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1320.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "thumb_02_l", + "thumb_02_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig thumb.02.L", + "label": "Control Rig thumb.02.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1320.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thumb.02.L", + "thumb.02.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig thumb_03_l", + "label": "Source Rig thumb_03_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1440.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "thumb_03_l", + "thumb_03_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig thumb.03.L", + "label": "Control Rig thumb.03.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1440.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thumb.03.L", + "thumb.03.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig index_01_l", + "label": "Source Rig index_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1560.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "index_01_l", + "index_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_index.01.L", + "label": "Control Rig f_index.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1560.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_index.01.L", + "f_index.01.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig index_02_l", + "label": "Source Rig index_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1680.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "index_02_l", + "index_02_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_index.02.L", + "label": "Control Rig f_index.02.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1680.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_index.02.L", + "f_index.02.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig index_03_l", + "label": "Source Rig index_03_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1800.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "index_03_l", + "index_03_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_index.03.L", + "label": "Control Rig f_index.03.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1800.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_index.03.L", + "f_index.03.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig middle_01_l", + "label": "Source Rig middle_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1920.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "middle_01_l", + "middle_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_middle.01.L", + "label": "Control Rig f_middle.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1920.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_middle.01.L", + "f_middle.01.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig middle_02_l", + "label": "Source Rig middle_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2040.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "middle_02_l", + "middle_02_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_middle.02.L", + "label": "Control Rig f_middle.02.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2040.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_middle.02.L", + "f_middle.02.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig middle_03_l", + "label": "Source Rig middle_03_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2160.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "middle_03_l", + "middle_03_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_middle.03.L", + "label": "Control Rig f_middle.03.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2160.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_middle.03.L", + "f_middle.03.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig ring_01_l", + "label": "Source Rig ring_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2280.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "ring_01_l", + "ring_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_ring.01.L", + "label": "Control Rig f_ring.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2280.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_ring.01.L", + "f_ring.01.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig ring_02_l", + "label": "Source Rig ring_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2400.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "ring_02_l", + "ring_02_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_ring.02.L", + "label": "Control Rig f_ring.02.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2400.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_ring.02.L", + "f_ring.02.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig ring_03_l", + "label": "Source Rig ring_03_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2520.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "ring_03_l", + "ring_03_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_ring.03.L", + "label": "Control Rig f_ring.03.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2520.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_ring.03.L", + "f_ring.03.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig pinky_01_l", + "label": "Source Rig pinky_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2640.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "pinky_01_l", + "pinky_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_pinky.01.L", + "label": "Control Rig f_pinky.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2640.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_pinky.01.L", + "f_pinky.01.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig pinky_02_l", + "label": "Source Rig pinky_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2760.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "pinky_02_l", + "pinky_02_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_pinky.02.L", + "label": "Control Rig f_pinky.02.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2760.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_pinky.02.L", + "f_pinky.02.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig pinky_03_l", + "label": "Source Rig pinky_03_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2880.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "pinky_03_l", + "pinky_03_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_pinky.03.L", + "label": "Control Rig f_pinky.03.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2880.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_pinky.03.L", + "f_pinky.03.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig thigh_l", + "label": "Source Rig thigh_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3000.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "thigh_l", + "thigh_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig thigh_fk.L", + "label": "Control Rig thigh_fk.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3000.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_fk.L", + "thigh_fk.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig thigh_correctiveRoot_l", + "label": "Source Rig thigh_correctiveRoot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3120.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "thigh_correctiveRoot_l", + "thigh_correctiveRoot_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig thigh_tweak.L", + "label": "Control Rig thigh_tweak.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3120.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_tweak.L", + "thigh_tweak.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig calf_l", + "label": "Source Rig calf_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3240.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "calf_l", + "calf_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig shin_fk.L", + "label": "Control Rig shin_fk.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3240.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "shin_fk.L", + "shin_fk.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig foot_l", + "label": "Source Rig foot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3360.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "foot_l", + "foot_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig foot_fk.L", + "label": "Control Rig foot_fk.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3360.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "foot_fk.L", + "foot_fk.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig foot_l.001", + "label": "Source Rig foot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3480.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "foot_l", + "foot_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig foot_tweak.L", + "label": "Control Rig foot_tweak.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3480.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "foot_tweak.L", + "foot_tweak.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig ball_l", + "label": "Source Rig ball_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3600.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "ball_l", + "ball_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig toe.L", + "label": "Control Rig toe.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3600.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "toe.L", + "toe.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig calf_twist_02_l", + "label": "Source Rig calf_twist_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3720.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "calf_twist_02_l", + "calf_twist_02_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig shin_tweak.L.001", + "label": "Control Rig shin_tweak.L.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3720.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "shin_tweak.L.001", + "shin_tweak.R.001" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig calf_twist_01_l", + "label": "Source Rig calf_twist_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3840.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "calf_twist_01_l", + "calf_twist_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig shin_tweak.L.002", + "label": "Control Rig shin_tweak.L.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3840.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "shin_tweak.L.002", + "shin_tweak.R.002" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig calf_correctiveRoot_l", + "label": "Source Rig calf_correctiveRoot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3960.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "calf_correctiveRoot_l", + "calf_correctiveRoot_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig shin_tweak.L", + "label": "Control Rig shin_tweak.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3960.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "shin_tweak.L", + "shin_tweak.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig thigh_twist_02_l", + "label": "Source Rig thigh_twist_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 4080.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "thigh_twist_02_l", + "thigh_twist_02_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig thigh_tweak.L.002", + "label": "Control Rig thigh_tweak.L.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 4080.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_tweak.L.002", + "thigh_tweak.R.002" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig thigh_twist_01_l", + "label": "Source Rig thigh_twist_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 4200.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "thigh_twist_01_l", + "thigh_twist_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig thigh_tweak.L.001", + "label": "Control Rig thigh_tweak.L.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 4200.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_tweak.L.001", + "thigh_tweak.R.001" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig root", + "label": "Control Rig root", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 4320.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "root" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "root", + "label": "root", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 299.52642822265625, + 4312.6982421875 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "object" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig clavicle_l", + "label": "Source Rig clavicle_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 305.962646484375, + 4413.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "clavicle_l", + "clavicle_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig clavicle_pec_l", + "label": "Source Rig clavicle_pec_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 305.962646484375, + 4533.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "clavicle_pec_l", + "clavicle_pec_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig breast.L", + "label": "Control Rig breast.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -294.037353515625, + 4533.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "breast.L", + "breast.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig shoulder.L", + "label": "Control Rig shoulder.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -294.037353515625, + 4413.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "shoulder.L", + "shoulder.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig neck_02.001", + "label": "Source Rig neck_02", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 6333.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "neck_02" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig neck", + "label": "Control Rig neck", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 6333.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "neck" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig head", + "label": "Source Rig head", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 6453.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "head" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig head", + "label": "Control Rig head", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 6453.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "head" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig spine_01", + "label": "Source Rig spine_01", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 6573.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "spine_01" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig spine_fk", + "label": "Control Rig spine_fk", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 6573.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_fk" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig spine_02", + "label": "Source Rig spine_02", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 6693.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "spine_02" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig spine_fk.001", + "label": "Control Rig spine_fk.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 6693.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_fk.001" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig spine_02.001", + "label": "Source Rig spine_02", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 6813.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "spine_02" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig spine_fk.002", + "label": "Control Rig spine_fk.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 6813.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_fk.002" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig spine_03", + "label": "Source Rig spine_03", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 6933.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "spine_03" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig spine_fk.003", + "label": "Control Rig spine_fk.003", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 6933.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_fk.003" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig spine_04", + "label": "Source Rig spine_04", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 7053.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "spine_04" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig spine_fk.007", + "label": "Control Rig spine_fk.007", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 7053.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_fk.007" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig spine_05", + "label": "Source Rig spine_05", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 7173.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "spine_05" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig spine_fk.008", + "label": "Control Rig spine_fk.008", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 7173.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_fk.008" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig pelvis", + "label": "Source Rig pelvis", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 7293.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "pelvis" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig tweak_spine", + "label": "Control Rig tweak_spine", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 7293.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "tweak_spine" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig spine_01.001", + "label": "Source Rig spine_01", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 7413.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "spine_01" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig tweak_spine.001", + "label": "Control Rig tweak_spine.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 7413.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "tweak_spine.001" + ], + "mode": "FK_TO_SOURCE" + } +] \ No newline at end of file diff --git a/src/addons/ue2rigify/resources/rig_templates/b3_6/female_mannequin_UE5/metarig.py b/src/addons/ue2rigify/resources/rig_templates/b3_6/female_mannequin_UE5/metarig.py new file mode 100644 index 00000000..44e69792 --- /dev/null +++ b/src/addons/ue2rigify/resources/rig_templates/b3_6/female_mannequin_UE5/metarig.py @@ -0,0 +1,1334 @@ +import bpy + +from mathutils import Color + +def create(obj): + # generated by rigify.utils.write_metarig + bpy.ops.object.mode_set(mode='EDIT') + arm = obj.data + + for i in range(6): + arm.rigify_colors.add() + + arm.rigify_colors[0].name = "Root" + arm.rigify_colors[0].active = Color((0.5490196347236633, 1.0, 1.0)) + arm.rigify_colors[0].normal = Color((0.4352940022945404, 0.18431399762630463, 0.4156860113143921)) + arm.rigify_colors[0].select = Color((0.31372547149658203, 0.7843138575553894, 1.0)) + arm.rigify_colors[0].standard_colors_lock = True + arm.rigify_colors[1].name = "IK" + arm.rigify_colors[1].active = Color((0.5490196347236633, 1.0, 1.0)) + arm.rigify_colors[1].normal = Color((0.6039220094680786, 0.0, 0.0)) + arm.rigify_colors[1].select = Color((0.31372547149658203, 0.7843138575553894, 1.0)) + arm.rigify_colors[1].standard_colors_lock = True + arm.rigify_colors[2].name = "Special" + arm.rigify_colors[2].active = Color((0.5490196347236633, 1.0, 1.0)) + arm.rigify_colors[2].normal = Color((0.9568629860877991, 0.7882350087165833, 0.04705899953842163)) + arm.rigify_colors[2].select = Color((0.31372547149658203, 0.7843138575553894, 1.0)) + arm.rigify_colors[2].standard_colors_lock = True + arm.rigify_colors[3].name = "Tweak" + arm.rigify_colors[3].active = Color((0.5490196347236633, 1.0, 1.0)) + arm.rigify_colors[3].normal = Color((0.03921600058674812, 0.21176500618457794, 0.5803920030593872)) + arm.rigify_colors[3].select = Color((0.31372547149658203, 0.7843138575553894, 1.0)) + arm.rigify_colors[3].standard_colors_lock = True + arm.rigify_colors[4].name = "FK" + arm.rigify_colors[4].active = Color((0.5490196347236633, 1.0, 1.0)) + arm.rigify_colors[4].normal = Color((0.11764699965715408, 0.5686269998550415, 0.035294000059366226)) + arm.rigify_colors[4].select = Color((0.31372547149658203, 0.7843138575553894, 1.0)) + arm.rigify_colors[4].standard_colors_lock = True + arm.rigify_colors[5].name = "Extra" + arm.rigify_colors[5].active = Color((0.5490196347236633, 1.0, 1.0)) + arm.rigify_colors[5].normal = Color((0.9686279892921448, 0.2509799897670746, 0.09411799907684326)) + arm.rigify_colors[5].select = Color((0.31372547149658203, 0.7843138575553894, 1.0)) + arm.rigify_colors[5].standard_colors_lock = True + + for i in range(29): + arm.rigify_layers.add() + + arm.rigify_layers[0].name = "Face" + arm.rigify_layers[0].row = 1 + arm.rigify_layers[0].selset = False + arm.rigify_layers[0].group = 5 + arm.rigify_layers[1].name = "Face (Primary)" + arm.rigify_layers[1].row = 2 + arm.rigify_layers[1].selset = False + arm.rigify_layers[1].group = 2 + arm.rigify_layers[2].name = "Face (Secondary)" + arm.rigify_layers[2].row = 2 + arm.rigify_layers[2].selset = False + arm.rigify_layers[2].group = 3 + arm.rigify_layers[3].name = "Torso" + arm.rigify_layers[3].row = 3 + arm.rigify_layers[3].selset = False + arm.rigify_layers[3].group = 3 + arm.rigify_layers[4].name = "Torso (Tweak)" + arm.rigify_layers[4].row = 4 + arm.rigify_layers[4].selset = False + arm.rigify_layers[4].group = 4 + arm.rigify_layers[5].name = "Fingers" + arm.rigify_layers[5].row = 5 + arm.rigify_layers[5].selset = False + arm.rigify_layers[5].group = 6 + arm.rigify_layers[6].name = "Fingers (Detail)" + arm.rigify_layers[6].row = 6 + arm.rigify_layers[6].selset = False + arm.rigify_layers[6].group = 5 + arm.rigify_layers[7].name = "Arm.L (IK)" + arm.rigify_layers[7].row = 7 + arm.rigify_layers[7].selset = False + arm.rigify_layers[7].group = 2 + arm.rigify_layers[8].name = "Arm.L (FK)" + arm.rigify_layers[8].row = 8 + arm.rigify_layers[8].selset = False + arm.rigify_layers[8].group = 5 + arm.rigify_layers[9].name = "Arm.L (Tweak)" + arm.rigify_layers[9].row = 9 + arm.rigify_layers[9].selset = False + arm.rigify_layers[9].group = 4 + arm.rigify_layers[10].name = "Arm.R (IK)" + arm.rigify_layers[10].row = 7 + arm.rigify_layers[10].selset = False + arm.rigify_layers[10].group = 2 + arm.rigify_layers[11].name = "Arm.R (FK)" + arm.rigify_layers[11].row = 8 + arm.rigify_layers[11].selset = False + arm.rigify_layers[11].group = 5 + arm.rigify_layers[12].name = "Arm.R (Tweak)" + arm.rigify_layers[12].row = 9 + arm.rigify_layers[12].selset = False + arm.rigify_layers[12].group = 4 + arm.rigify_layers[13].name = "Leg.L (IK)" + arm.rigify_layers[13].row = 10 + arm.rigify_layers[13].selset = False + arm.rigify_layers[13].group = 2 + arm.rigify_layers[14].name = "Leg.L (FK)" + arm.rigify_layers[14].row = 11 + arm.rigify_layers[14].selset = False + arm.rigify_layers[14].group = 5 + arm.rigify_layers[15].name = "Leg.L (Tweak)" + arm.rigify_layers[15].row = 12 + arm.rigify_layers[15].selset = False + arm.rigify_layers[15].group = 4 + arm.rigify_layers[16].name = "Leg.R (IK)" + arm.rigify_layers[16].row = 10 + arm.rigify_layers[16].selset = False + arm.rigify_layers[16].group = 2 + arm.rigify_layers[17].name = "Leg.R (FK)" + arm.rigify_layers[17].row = 11 + arm.rigify_layers[17].selset = False + arm.rigify_layers[17].group = 5 + arm.rigify_layers[18].name = "Leg.R (Tweak)" + arm.rigify_layers[18].row = 12 + arm.rigify_layers[18].selset = False + arm.rigify_layers[18].group = 4 + arm.rigify_layers[19].name = "" + arm.rigify_layers[19].row = 1 + arm.rigify_layers[19].selset = False + arm.rigify_layers[19].group = 0 + arm.rigify_layers[20].name = "" + arm.rigify_layers[20].row = 1 + arm.rigify_layers[20].selset = False + arm.rigify_layers[20].group = 0 + arm.rigify_layers[21].name = "" + arm.rigify_layers[21].row = 1 + arm.rigify_layers[21].selset = False + arm.rigify_layers[21].group = 0 + arm.rigify_layers[22].name = "" + arm.rigify_layers[22].row = 1 + arm.rigify_layers[22].selset = False + arm.rigify_layers[22].group = 0 + arm.rigify_layers[23].name = "" + arm.rigify_layers[23].row = 1 + arm.rigify_layers[23].selset = False + arm.rigify_layers[23].group = 0 + arm.rigify_layers[24].name = "" + arm.rigify_layers[24].row = 1 + arm.rigify_layers[24].selset = False + arm.rigify_layers[24].group = 0 + arm.rigify_layers[25].name = "" + arm.rigify_layers[25].row = 1 + arm.rigify_layers[25].selset = False + arm.rigify_layers[25].group = 0 + arm.rigify_layers[26].name = "" + arm.rigify_layers[26].row = 1 + arm.rigify_layers[26].selset = False + arm.rigify_layers[26].group = 0 + arm.rigify_layers[27].name = "" + arm.rigify_layers[27].row = 1 + arm.rigify_layers[27].selset = False + arm.rigify_layers[27].group = 0 + arm.rigify_layers[28].name = "Root" + arm.rigify_layers[28].row = 14 + arm.rigify_layers[28].selset = False + arm.rigify_layers[28].group = 1 + + bones = {} + + bone = arm.edit_bones.new('spine') + bone.head = 0.0000, -0.0238, 0.9869 + bone.tail = 0.0000, -0.0222, 1.0116 + bone.roll = 0.0000 + bone.use_connect = False + bones['spine'] = bone.name + bone = arm.edit_bones.new('spine.001') + bone.head = 0.0000, -0.0222, 1.0116 + bone.tail = 0.0000, -0.0340, 1.0601 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine']] + bones['spine.001'] = bone.name + bone = arm.edit_bones.new('thigh.L') + bone.head = 0.1115, -0.0265, 0.9547 + bone.tail = 0.1306, -0.0170, 0.4977 + bone.roll = -0.0442 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine']] + bones['thigh.L'] = bone.name + bone = arm.edit_bones.new('thigh.R') + bone.head = -0.1115, -0.0265, 0.9547 + bone.tail = -0.1306, -0.0170, 0.4977 + bone.roll = 0.0442 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine']] + bones['thigh.R'] = bone.name + bone = arm.edit_bones.new('spine.002') + bone.head = 0.0000, -0.0340, 1.0601 + bone.tail = 0.0000, -0.0431, 1.1358 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine.001']] + bones['spine.002'] = bone.name + bone = arm.edit_bones.new('shin.L') + bone.head = 0.1306, -0.0170, 0.4977 + bone.tail = 0.1468, -0.0004, 0.0813 + bone.roll = -0.0354 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thigh.L']] + bones['shin.L'] = bone.name + bone = arm.edit_bones.new('shin.R') + bone.head = -0.1306, -0.0170, 0.4977 + bone.tail = -0.1468, -0.0004, 0.0813 + bone.roll = 0.0354 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thigh.R']] + bones['shin.R'] = bone.name + bone = arm.edit_bones.new('spine.003') + bone.head = 0.0000, -0.0431, 1.1358 + bone.tail = 0.0000, -0.0377, 1.2241 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine.002']] + bones['spine.003'] = bone.name + bone = arm.edit_bones.new('foot.L') + bone.head = 0.1468, -0.0004, 0.0813 + bone.tail = 0.1663, -0.1332, 0.0117 + bone.roll = -0.5071 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['shin.L']] + bones['foot.L'] = bone.name + bone = arm.edit_bones.new('foot.R') + bone.head = -0.1468, -0.0004, 0.0813 + bone.tail = -0.1663, -0.1332, 0.0117 + bone.roll = 0.5071 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['shin.R']] + bones['foot.R'] = bone.name + bone = arm.edit_bones.new('spine.007') + bone.head = 0.0000, -0.0377, 1.2241 + bone.tail = 0.0000, -0.0013, 1.3953 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine.003']] + bones['spine.007'] = bone.name + bone = arm.edit_bones.new('toe.L') + bone.head = 0.1663, -0.1332, 0.0117 + bone.tail = 0.1864, -0.2388, 0.0117 + bone.roll = -0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['foot.L']] + bones['toe.L'] = bone.name + bone = arm.edit_bones.new('heel.02.L') + bone.head = 0.1331, 0.0103, 0.0000 + bone.tail = 0.2131, 0.0103, 0.0000 + bone.roll = -0.0000 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['foot.L']] + bones['heel.02.L'] = bone.name + bone = arm.edit_bones.new('toe.R') + bone.head = -0.1663, -0.1332, 0.0117 + bone.tail = -0.1864, -0.2388, 0.0117 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['foot.R']] + bones['toe.R'] = bone.name + bone = arm.edit_bones.new('heel.02.R') + bone.head = -0.1331, 0.0103, 0.0000 + bone.tail = -0.2131, 0.0103, 0.0000 + bone.roll = 0.0000 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['foot.R']] + bones['heel.02.R'] = bone.name + bone = arm.edit_bones.new('spine.008') + bone.head = 0.0000, -0.0013, 1.3953 + bone.tail = 0.0000, 0.0239, 1.5118 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine.007']] + bones['spine.008'] = bone.name + bone = arm.edit_bones.new('spine.004') + bone.head = 0.0000, 0.0239, 1.5118 + bone.tail = 0.0000, 0.0109, 1.5688 + bone.roll = 0.0000 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine.008']] + bones['spine.004'] = bone.name + bone = arm.edit_bones.new('shoulder.L') + bone.head = 0.0093, 0.0209, 1.4502 + bone.tail = 0.1606, 0.0251, 1.4284 + bone.roll = 0.4327 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine.008']] + bones['shoulder.L'] = bone.name + bone = arm.edit_bones.new('shoulder.R') + bone.head = -0.0093, 0.0209, 1.4502 + bone.tail = -0.1606, 0.0251, 1.4284 + bone.roll = -0.4327 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine.008']] + bones['shoulder.R'] = bone.name + bone = arm.edit_bones.new('breast.L') + bone.head = 0.0983, -0.1161, 1.3339 + bone.tail = 0.1165, -0.2435, 1.3375 + bone.roll = -0.3953 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine.008']] + bones['breast.L'] = bone.name + bone = arm.edit_bones.new('breast.R') + bone.head = -0.0983, -0.1161, 1.3339 + bone.tail = -0.1165, -0.2435, 1.3375 + bone.roll = 0.3953 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine.008']] + bones['breast.R'] = bone.name + bone = arm.edit_bones.new('spine.005') + bone.head = 0.0000, 0.0109, 1.5688 + bone.tail = 0.0000, -0.0014, 1.6250 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine.004']] + bones['spine.005'] = bone.name + bone = arm.edit_bones.new('upper_arm.L') + bone.head = 0.1606, 0.0251, 1.4284 + bone.tail = 0.3240, 0.0176, 1.2124 + bone.roll = 2.5927 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['shoulder.L']] + bones['upper_arm.L'] = bone.name + bone = arm.edit_bones.new('upper_arm.R') + bone.head = -0.1606, 0.0251, 1.4284 + bone.tail = -0.3240, 0.0176, 1.2124 + bone.roll = -2.5927 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['shoulder.R']] + bones['upper_arm.R'] = bone.name + bone = arm.edit_bones.new('spine.006') + bone.head = 0.0000, -0.0014, 1.6250 + bone.tail = 0.0000, -0.0017, 1.8234 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine.005']] + bones['spine.006'] = bone.name + bone = arm.edit_bones.new('forearm.L') + bone.head = 0.3240, 0.0176, 1.2124 + bone.tail = 0.4547, -0.1437, 1.0544 + bone.roll = 2.5571 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['upper_arm.L']] + bones['forearm.L'] = bone.name + bone = arm.edit_bones.new('forearm.R') + bone.head = -0.3240, 0.0176, 1.2124 + bone.tail = -0.4547, -0.1437, 1.0544 + bone.roll = -2.5571 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['upper_arm.R']] + bones['forearm.R'] = bone.name + bone = arm.edit_bones.new('hand.L') + bone.head = 0.4547, -0.1437, 1.0544 + bone.tail = 0.4913, -0.1962, 0.9960 + bone.roll = 2.8283 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['forearm.L']] + bones['hand.L'] = bone.name + bone = arm.edit_bones.new('hand.R') + bone.head = -0.4547, -0.1437, 1.0544 + bone.tail = -0.4913, -0.1962, 0.9960 + bone.roll = -2.8283 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['forearm.R']] + bones['hand.R'] = bone.name + bone = arm.edit_bones.new('palm.01.L') + bone.head = 0.4553, -0.1788, 1.0348 + bone.tail = 0.4748, -0.2142, 0.9994 + bone.roll = -1.5725 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.L']] + bones['palm.01.L'] = bone.name + bone = arm.edit_bones.new('palm.02.L') + bone.head = 0.4647, -0.1644, 1.0330 + bone.tail = 0.4913, -0.1962, 0.9960 + bone.roll = -1.8601 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.L']] + bones['palm.02.L'] = bone.name + bone = arm.edit_bones.new('palm.03.L') + bone.head = 0.4701, -0.1550, 1.0286 + bone.tail = 0.4964, -0.1741, 0.9907 + bone.roll = -1.9996 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.L']] + bones['palm.03.L'] = bone.name + bone = arm.edit_bones.new('palm.04.L') + bone.head = 0.4745, -0.1451, 1.0249 + bone.tail = 0.4949, -0.1542, 0.9833 + bone.roll = -1.9641 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.L']] + bones['palm.04.L'] = bone.name + bone = arm.edit_bones.new('palm.01.R') + bone.head = -0.4553, -0.1788, 1.0348 + bone.tail = -0.4748, -0.2142, 0.9994 + bone.roll = 1.5725 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.R']] + bones['palm.01.R'] = bone.name + bone = arm.edit_bones.new('palm.02.R') + bone.head = -0.4647, -0.1644, 1.0330 + bone.tail = -0.4913, -0.1962, 0.9960 + bone.roll = 1.8601 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.R']] + bones['palm.02.R'] = bone.name + bone = arm.edit_bones.new('palm.03.R') + bone.head = -0.4701, -0.1550, 1.0286 + bone.tail = -0.4964, -0.1741, 0.9907 + bone.roll = 1.9996 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.R']] + bones['palm.03.R'] = bone.name + bone = arm.edit_bones.new('palm.04.R') + bone.head = -0.4745, -0.1451, 1.0249 + bone.tail = -0.4949, -0.1542, 0.9833 + bone.roll = 1.9641 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.R']] + bones['palm.04.R'] = bone.name + bone = arm.edit_bones.new('palm.01.R.001') + bone.head = -0.4449, -0.2112, 0.9834 + bone.tail = -0.4688, -0.2515, 0.9479 + bone.roll = 1.7205 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.R']] + bones['palm.01.R.001'] = bone.name + bone = arm.edit_bones.new('f_index.01.L') + bone.head = 0.4748, -0.2142, 0.9994 + bone.tail = 0.4854, -0.2336, 0.9594 + bone.roll = -1.1540 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.01.L']] + bones['f_index.01.L'] = bone.name + bone = arm.edit_bones.new('thumb.01.L') + bone.head = 0.4383, -0.1723, 1.0368 + bone.tail = 0.4277, -0.2086, 1.0101 + bone.roll = 1.9270 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.01.L']] + bones['thumb.01.L'] = bone.name + bone = arm.edit_bones.new('f_middle.01.L') + bone.head = 0.4913, -0.1962, 0.9960 + bone.tail = 0.5008, -0.2145, 0.9513 + bone.roll = -1.2114 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.02.L']] + bones['f_middle.01.L'] = bone.name + bone = arm.edit_bones.new('f_ring.01.L') + bone.head = 0.4964, -0.1741, 0.9907 + bone.tail = 0.5070, -0.1887, 0.9522 + bone.roll = -1.5121 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.03.L']] + bones['f_ring.01.L'] = bone.name + bone = arm.edit_bones.new('f_pinky.01.L') + bone.head = 0.4949, -0.1542, 0.9833 + bone.tail = 0.5018, -0.1605, 0.9559 + bone.roll = -1.6868 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.04.L']] + bones['f_pinky.01.L'] = bone.name + bone = arm.edit_bones.new('f_index.01.R') + bone.head = -0.4748, -0.2142, 0.9994 + bone.tail = -0.4854, -0.2336, 0.9594 + bone.roll = 1.1540 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.01.R']] + bones['f_index.01.R'] = bone.name + bone = arm.edit_bones.new('thumb.01.R') + bone.head = -0.4383, -0.1723, 1.0368 + bone.tail = -0.4277, -0.2086, 1.0101 + bone.roll = -1.9270 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.01.R']] + bones['thumb.01.R'] = bone.name + bone = arm.edit_bones.new('f_middle.01.R') + bone.head = -0.4913, -0.1962, 0.9960 + bone.tail = -0.5008, -0.2145, 0.9513 + bone.roll = 1.2114 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.02.R']] + bones['f_middle.01.R'] = bone.name + bone = arm.edit_bones.new('f_ring.01.R') + bone.head = -0.4964, -0.1741, 0.9907 + bone.tail = -0.5070, -0.1887, 0.9522 + bone.roll = 1.5121 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.03.R']] + bones['f_ring.01.R'] = bone.name + bone = arm.edit_bones.new('f_pinky.01.R') + bone.head = -0.4949, -0.1542, 0.9833 + bone.tail = -0.5018, -0.1605, 0.9559 + bone.roll = 1.6868 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.04.R']] + bones['f_pinky.01.R'] = bone.name + bone = arm.edit_bones.new('f_index.02.L') + bone.head = 0.4854, -0.2336, 0.9594 + bone.tail = 0.4874, -0.2414, 0.9359 + bone.roll = -0.8668 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_index.01.L']] + bones['f_index.02.L'] = bone.name + bone = arm.edit_bones.new('thumb.02.L') + bone.head = 0.4277, -0.2086, 1.0101 + bone.tail = 0.4282, -0.2252, 0.9887 + bone.roll = 0.2203 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thumb.01.L']] + bones['thumb.02.L'] = bone.name + bone = arm.edit_bones.new('f_middle.02.L') + bone.head = 0.5008, -0.2145, 0.9513 + bone.tail = 0.4978, -0.2213, 0.9232 + bone.roll = -0.6286 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_middle.01.L']] + bones['f_middle.02.L'] = bone.name + bone = arm.edit_bones.new('f_ring.02.L') + bone.head = 0.5070, -0.1887, 0.9522 + bone.tail = 0.5010, -0.1960, 0.9213 + bone.roll = -0.8831 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_ring.01.L']] + bones['f_ring.02.L'] = bone.name + bone = arm.edit_bones.new('f_pinky.02.L') + bone.head = 0.5018, -0.1605, 0.9559 + bone.tail = 0.4997, -0.1641, 0.9385 + bone.roll = -1.2261 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_pinky.01.L']] + bones['f_pinky.02.L'] = bone.name + bone = arm.edit_bones.new('f_index.02.R') + bone.head = -0.4854, -0.2336, 0.9594 + bone.tail = -0.4874, -0.2414, 0.9359 + bone.roll = 0.8668 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_index.01.R']] + bones['f_index.02.R'] = bone.name + bone = arm.edit_bones.new('thumb.02.R') + bone.head = -0.4277, -0.2086, 1.0101 + bone.tail = -0.4282, -0.2252, 0.9887 + bone.roll = -0.2203 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thumb.01.R']] + bones['thumb.02.R'] = bone.name + bone = arm.edit_bones.new('f_middle.02.R') + bone.head = -0.5008, -0.2145, 0.9513 + bone.tail = -0.4978, -0.2213, 0.9232 + bone.roll = 0.6286 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_middle.01.R']] + bones['f_middle.02.R'] = bone.name + bone = arm.edit_bones.new('f_ring.02.R') + bone.head = -0.5070, -0.1887, 0.9522 + bone.tail = -0.5010, -0.1960, 0.9213 + bone.roll = 0.8831 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_ring.01.R']] + bones['f_ring.02.R'] = bone.name + bone = arm.edit_bones.new('f_pinky.02.R') + bone.head = -0.5018, -0.1605, 0.9559 + bone.tail = -0.4997, -0.1641, 0.9385 + bone.roll = 1.2261 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_pinky.01.R']] + bones['f_pinky.02.R'] = bone.name + bone = arm.edit_bones.new('f_index.03.L') + bone.head = 0.4874, -0.2414, 0.9359 + bone.tail = 0.4866, -0.2473, 0.9082 + bone.roll = -0.6488 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_index.02.L']] + bones['f_index.03.L'] = bone.name + bone = arm.edit_bones.new('thumb.03.L') + bone.head = 0.4282, -0.2252, 0.9887 + bone.tail = 0.4317, -0.2345, 0.9641 + bone.roll = 0.1726 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thumb.02.L']] + bones['thumb.03.L'] = bone.name + bone = arm.edit_bones.new('f_middle.03.L') + bone.head = 0.4978, -0.2213, 0.9232 + bone.tail = 0.4915, -0.2261, 0.8914 + bone.roll = -0.5997 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_middle.02.L']] + bones['f_middle.03.L'] = bone.name + bone = arm.edit_bones.new('f_ring.03.L') + bone.head = 0.5010, -0.1960, 0.9213 + bone.tail = 0.4921, -0.2004, 0.8890 + bone.roll = -0.7870 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_ring.02.L']] + bones['f_ring.03.L'] = bone.name + bone = arm.edit_bones.new('f_pinky.03.L') + bone.head = 0.4997, -0.1641, 0.9385 + bone.tail = 0.4951, -0.1678, 0.9150 + bone.roll = -1.1811 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_pinky.02.L']] + bones['f_pinky.03.L'] = bone.name + bone = arm.edit_bones.new('f_index.03.R') + bone.head = -0.4874, -0.2414, 0.9359 + bone.tail = -0.4866, -0.2473, 0.9082 + bone.roll = 0.6488 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_index.02.R']] + bones['f_index.03.R'] = bone.name + bone = arm.edit_bones.new('thumb.03.R') + bone.head = -0.4282, -0.2252, 0.9887 + bone.tail = -0.4317, -0.2345, 0.9641 + bone.roll = -0.1726 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thumb.02.R']] + bones['thumb.03.R'] = bone.name + bone = arm.edit_bones.new('f_middle.03.R') + bone.head = -0.4978, -0.2213, 0.9232 + bone.tail = -0.4915, -0.2261, 0.8914 + bone.roll = 0.5997 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_middle.02.R']] + bones['f_middle.03.R'] = bone.name + bone = arm.edit_bones.new('f_ring.03.R') + bone.head = -0.5010, -0.1960, 0.9213 + bone.tail = -0.4921, -0.2004, 0.8890 + bone.roll = 0.7870 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_ring.02.R']] + bones['f_ring.03.R'] = bone.name + bone = arm.edit_bones.new('f_pinky.03.R') + bone.head = -0.4997, -0.1641, 0.9385 + bone.tail = -0.4951, -0.1678, 0.9150 + bone.roll = 1.1811 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_pinky.02.R']] + bones['f_pinky.03.R'] = bone.name + + bpy.ops.object.mode_set(mode='OBJECT') + pbone = obj.pose.bones[bones['spine']] + pbone.rigify_type = 'spines.basic_spine' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.tweak_layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + try: + pbone.rigify_parameters.fk_layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + pbone = obj.pose.bones[bones['spine.001']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['thigh.L']] + pbone.rigify_type = 'limbs.super_limb' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.limb_type = "leg" + except AttributeError: + pass + try: + pbone.rigify_parameters.fk_layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + try: + pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + try: + pbone.rigify_parameters.segments = 3 + except AttributeError: + pass + pbone = obj.pose.bones[bones['thigh.R']] + pbone.rigify_type = 'limbs.super_limb' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.fk_layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + try: + pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + try: + pbone.rigify_parameters.limb_type = "leg" + except AttributeError: + pass + try: + pbone.rigify_parameters.segments = 3 + except AttributeError: + pass + pbone = obj.pose.bones[bones['spine.002']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['shin.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['shin.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['spine.003']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['foot.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['foot.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['spine.007']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['toe.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['heel.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['toe.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['heel.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['spine.008']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['spine.004']] + pbone.rigify_type = 'spines.super_head' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.connect_chain = True + except AttributeError: + pass + try: + pbone.rigify_parameters.tweak_layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + pbone = obj.pose.bones[bones['shoulder.L']] + pbone.rigify_type = 'basic.super_copy' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.make_widget = True + except AttributeError: + pass + try: + pbone.rigify_parameters.super_copy_widget_type = "shoulder" + except AttributeError: + pass + pbone = obj.pose.bones[bones['shoulder.R']] + pbone.rigify_type = 'basic.super_copy' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.make_widget = True + except AttributeError: + pass + try: + pbone.rigify_parameters.super_copy_widget_type = "shoulder" + except AttributeError: + pass + pbone = obj.pose.bones[bones['breast.L']] + pbone.rigify_type = 'basic.super_copy' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['breast.R']] + pbone.rigify_type = 'basic.super_copy' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['spine.005']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['upper_arm.L']] + pbone.rigify_type = 'limbs.super_limb' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + try: + pbone.rigify_parameters.fk_layers = [False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + try: + pbone.rigify_parameters.segments = 3 + except AttributeError: + pass + pbone = obj.pose.bones[bones['upper_arm.R']] + pbone.rigify_type = 'limbs.super_limb' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + try: + pbone.rigify_parameters.fk_layers = [False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + try: + pbone.rigify_parameters.segments = 3 + except AttributeError: + pass + pbone = obj.pose.bones[bones['spine.006']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['forearm.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['forearm.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['hand.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['hand.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['palm.01.L']] + pbone.rigify_type = 'limbs.super_palm' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['palm.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['palm.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['palm.04.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['palm.01.R']] + pbone.rigify_type = 'limbs.super_palm' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['palm.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['palm.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['palm.04.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['palm.01.R.001']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['f_index.01.L']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + pbone = obj.pose.bones[bones['thumb.01.L']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + pbone = obj.pose.bones[bones['f_middle.01.L']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + pbone = obj.pose.bones[bones['f_ring.01.L']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + pbone = obj.pose.bones[bones['f_pinky.01.L']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + pbone = obj.pose.bones[bones['f_index.01.R']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + pbone = obj.pose.bones[bones['thumb.01.R']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + pbone = obj.pose.bones[bones['f_middle.01.R']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + pbone = obj.pose.bones[bones['f_ring.01.R']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + pbone = obj.pose.bones[bones['f_pinky.01.R']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + pbone = obj.pose.bones[bones['f_index.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['thumb.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['f_middle.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['f_ring.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['f_pinky.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['f_index.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['thumb.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['f_middle.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['f_ring.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['f_pinky.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['f_index.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['thumb.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['f_middle.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['f_ring.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['f_pinky.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['f_index.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['thumb.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['f_middle.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['f_ring.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['f_pinky.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + + bpy.ops.object.mode_set(mode='EDIT') + for bone in arm.edit_bones: + bone.select = False + bone.select_head = False + bone.select_tail = False + for b in bones: + bone = arm.edit_bones[bones[b]] + bone.select = True + bone.select_head = True + bone.select_tail = True + bone.bbone_x = bone.bbone_z = bone.length * 0.05 + arm.edit_bones.active = bone + + arm.layers = [(x in [3, 5, 7, 10, 13, 16]) for x in range(32)] + + return bones + +if __name__ == "__main__": + create(bpy.context.active_object) diff --git a/src/addons/ue2rigify/resources/rig_templates/b3_6/female_mannequin_UE5/source_to_deform_links.json b/src/addons/ue2rigify/resources/rig_templates/b3_6/female_mannequin_UE5/source_to_deform_links.json new file mode 100644 index 00000000..8784bc77 --- /dev/null +++ b/src/addons/ue2rigify/resources/rig_templates/b3_6/female_mannequin_UE5/source_to_deform_links.json @@ -0,0 +1,518 @@ +[ + { + "from_node": "Source Rig upperarm_twist_01_l", + "to_node": "Control Rig DEF-upper_arm.L.001", + "from_socket": "upperarm_twist_01_l", + "to_socket": "DEF-upper_arm.L.001" + }, + { + "from_node": "Source Rig upperarm_twist_01_l", + "to_node": "Control Rig DEF-upper_arm.L.001", + "from_socket": "upperarm_twist_01_r", + "to_socket": "DEF-upper_arm.R.001" + }, + { + "from_node": "Source Rig upperarm_twist_02_l", + "to_node": "Control Rig DEF-upper_arm.L.002", + "from_socket": "upperarm_twist_02_l", + "to_socket": "DEF-upper_arm.L.002" + }, + { + "from_node": "Source Rig upperarm_twist_02_l", + "to_node": "Control Rig DEF-upper_arm.L.002", + "from_socket": "upperarm_twist_02_r", + "to_socket": "DEF-upper_arm.R.002" + }, + { + "from_node": "Source Rig lowerarm_l", + "to_node": "Control Rig DEF-forearm.L.001", + "from_socket": "lowerarm_l", + "to_socket": "DEF-forearm.L" + }, + { + "from_node": "Source Rig lowerarm_l", + "to_node": "Control Rig DEF-forearm.L.001", + "from_socket": "lowerarm_r", + "to_socket": "DEF-forearm.R" + }, + { + "from_node": "Source Rig upperarm_l", + "to_node": "Control Rig DEF-upper_arm.L.003", + "from_socket": "upperarm_l", + "to_socket": "DEF-upper_arm.L" + }, + { + "from_node": "Source Rig upperarm_l", + "to_node": "Control Rig DEF-upper_arm.L.003", + "from_socket": "upperarm_r", + "to_socket": "DEF-upper_arm.R" + }, + { + "from_node": "Source Rig upperarm_correctiveRoot_l.001", + "to_node": "Control Rig DEF-upper_arm.L.004", + "from_socket": "upperarm_correctiveRoot_l", + "to_socket": "DEF-upper_arm.L" + }, + { + "from_node": "Source Rig upperarm_correctiveRoot_l.001", + "to_node": "Control Rig DEF-upper_arm.L.004", + "from_socket": "upperarm_correctiveRoot_r", + "to_socket": "DEF-upper_arm.R" + }, + { + "from_node": "Source Rig hand_l", + "to_node": "Control Rig DEF-hand.L", + "from_socket": "hand_l", + "to_socket": "DEF-hand.L" + }, + { + "from_node": "Source Rig hand_l", + "to_node": "Control Rig DEF-hand.L", + "from_socket": "hand_r", + "to_socket": "DEF-hand.R" + }, + { + "from_node": "Source Rig lowerarm_twist_01_l", + "to_node": "Control Rig DEF-forearm.L.003", + "from_socket": "lowerarm_twist_01_l", + "to_socket": "DEF-forearm.L.002" + }, + { + "from_node": "Source Rig lowerarm_twist_01_l", + "to_node": "Control Rig DEF-forearm.L.003", + "from_socket": "lowerarm_twist_01_r", + "to_socket": "DEF-forearm.R.002" + }, + { + "from_node": "Source Rig lowerarm_twist_02_l", + "to_node": "Control Rig DEF-forearm.L.004", + "from_socket": "lowerarm_twist_02_l", + "to_socket": "DEF-forearm.L.001" + }, + { + "from_node": "Source Rig lowerarm_twist_02_l", + "to_node": "Control Rig DEF-forearm.L.004", + "from_socket": "lowerarm_twist_02_r", + "to_socket": "DEF-forearm.R.001" + }, + { + "from_node": "Source Rig thumb_01_l", + "to_node": "Control Rig DEF-thumb.01.L", + "from_socket": "thumb_01_l", + "to_socket": "DEF-thumb.01.L" + }, + { + "from_node": "Source Rig thumb_01_l", + "to_node": "Control Rig DEF-thumb.01.L", + "from_socket": "thumb_01_r", + "to_socket": "DEF-thumb.01.R" + }, + { + "from_node": "Source Rig thumb_02_l", + "to_node": "Control Rig DEF-thumb.02.L", + "from_socket": "thumb_02_l", + "to_socket": "DEF-thumb.02.L" + }, + { + "from_node": "Source Rig thumb_02_l", + "to_node": "Control Rig DEF-thumb.02.L", + "from_socket": "thumb_02_r", + "to_socket": "DEF-thumb.02.R" + }, + { + "from_node": "Source Rig thumb_03_l", + "to_node": "Control Rig DEF-thumb.03.L", + "from_socket": "thumb_03_l", + "to_socket": "DEF-thumb.03.L" + }, + { + "from_node": "Source Rig thumb_03_l", + "to_node": "Control Rig DEF-thumb.03.L", + "from_socket": "thumb_03_r", + "to_socket": "DEF-thumb.03.R" + }, + { + "from_node": "Source Rig index_metacarpal_l", + "to_node": "Control Rig DEF-palm.01.L", + "from_socket": "index_metacarpal_l", + "to_socket": "DEF-palm.01.L" + }, + { + "from_node": "Source Rig index_metacarpal_l", + "to_node": "Control Rig DEF-palm.01.L", + "from_socket": "index_metacarpal_r", + "to_socket": "DEF-palm.01.R" + }, + { + "from_node": "Source Rig index_01_l", + "to_node": "Control Rig DEF-f_index.01.L", + "from_socket": "index_01_l", + "to_socket": "DEF-f_index.01.L" + }, + { + "from_node": "Source Rig index_01_l", + "to_node": "Control Rig DEF-f_index.01.L", + "from_socket": "index_01_r", + "to_socket": "DEF-f_index.01.R" + }, + { + "from_node": "Source Rig index_02_l", + "to_node": "Control Rig DEF-f_index.02.L", + "from_socket": "index_02_l", + "to_socket": "DEF-f_index.02.L" + }, + { + "from_node": "Source Rig index_02_l", + "to_node": "Control Rig DEF-f_index.02.L", + "from_socket": "index_02_r", + "to_socket": "DEF-f_index.02.R" + }, + { + "from_node": "Source Rig index_03_l", + "to_node": "Control Rig DEF-f_index.03.L", + "from_socket": "index_03_l", + "to_socket": "DEF-f_index.03.L" + }, + { + "from_node": "Source Rig index_03_l", + "to_node": "Control Rig DEF-f_index.03.L", + "from_socket": "index_03_r", + "to_socket": "DEF-f_index.03.R" + }, + { + "from_node": "Source Rig middle_metacarpal_l", + "to_node": "Control Rig DEF-palm.02.L", + "from_socket": "middle_metacarpal_l", + "to_socket": "DEF-palm.02.L" + }, + { + "from_node": "Source Rig middle_metacarpal_l", + "to_node": "Control Rig DEF-palm.02.L", + "from_socket": "middle_metacarpal_r", + "to_socket": "DEF-palm.02.R" + }, + { + "from_node": "Source Rig middle_01_l", + "to_node": "Control Rig DEF-f_middle.01.L", + "from_socket": "middle_01_l", + "to_socket": "DEF-f_middle.01.L" + }, + { + "from_node": "Source Rig middle_01_l", + "to_node": "Control Rig DEF-f_middle.01.L", + "from_socket": "middle_01_r", + "to_socket": "DEF-f_middle.01.R" + }, + { + "from_node": "Source Rig middle_02_l", + "to_node": "Control Rig DEF-f_middle.02.L", + "from_socket": "middle_02_l", + "to_socket": "DEF-f_middle.02.L" + }, + { + "from_node": "Source Rig middle_02_l", + "to_node": "Control Rig DEF-f_middle.02.L", + "from_socket": "middle_02_r", + "to_socket": "DEF-f_middle.02.R" + }, + { + "from_node": "Source Rig middle_03_l", + "to_node": "Control Rig DEF-f_middle.03.L", + "from_socket": "middle_03_l", + "to_socket": "DEF-f_middle.03.L" + }, + { + "from_node": "Source Rig middle_03_l", + "to_node": "Control Rig DEF-f_middle.03.L", + "from_socket": "middle_03_r", + "to_socket": "DEF-f_middle.03.R" + }, + { + "from_node": "Source Rig ring_03_l", + "to_node": "Control Rig DEF-f_ring.03.L", + "from_socket": "ring_03_l", + "to_socket": "DEF-f_ring.03.L" + }, + { + "from_node": "Source Rig ring_03_l", + "to_node": "Control Rig DEF-f_ring.03.L", + "from_socket": "ring_03_r", + "to_socket": "DEF-f_ring.03.R" + }, + { + "from_node": "Source Rig thigh_l", + "to_node": "Control Rig DEF-thigh.L.001", + "from_socket": "thigh_l", + "to_socket": "DEF-thigh.L" + }, + { + "from_node": "Source Rig thigh_l", + "to_node": "Control Rig DEF-thigh.L.001", + "from_socket": "thigh_r", + "to_socket": "DEF-thigh.R" + }, + { + "from_node": "Source Rig lowerarm_correctiveRoot_l", + "to_node": "Control Rig DEF-forearm.L", + "from_socket": "lowerarm_correctiveRoot_l", + "to_socket": "DEF-forearm.L" + }, + { + "from_node": "Source Rig lowerarm_correctiveRoot_l", + "to_node": "Control Rig DEF-forearm.L", + "from_socket": "lowerarm_correctiveRoot_r", + "to_socket": "DEF-forearm.R" + }, + { + "from_node": "Source Rig thigh_twist_01_l", + "to_node": "Control Rig DEF-thigh.L.002", + "from_socket": "thigh_twist_01_l", + "to_socket": "DEF-thigh.L.001" + }, + { + "from_node": "Source Rig thigh_twist_01_r", + "to_node": "Control Rig DEF-thigh.R.001", + "from_socket": "thigh_twist_01_r", + "to_socket": "DEF-thigh.R.001" + }, + { + "from_node": "Source Rig thigh_twist_02_r", + "to_node": "Control Rig DEF-thigh.R.002", + "from_socket": "thigh_twist_02_r", + "to_socket": "DEF-thigh.R.002" + }, + { + "from_node": "Source Rig thigh_twist_02_l", + "to_node": "Control Rig DEF-thigh.L.003", + "from_socket": "thigh_twist_02_l", + "to_socket": "DEF-thigh.L.002" + }, + { + "from_node": "Source Rig calf_twist_02_l", + "to_node": "Control Rig DEF-shin.L.002", + "from_socket": "calf_twist_02_l", + "to_socket": "DEF-shin.L.001" + }, + { + "from_node": "Source Rig calf_twist_02_l", + "to_node": "Control Rig DEF-shin.L.002", + "from_socket": "calf_twist_02_r", + "to_socket": "DEF-shin.R.001" + }, + { + "from_node": "Source Rig calf_correctiveRoot_l.001", + "to_node": "Control Rig DEF-shin.L.003", + "from_socket": "calf_correctiveRoot_l", + "to_socket": "DEF-shin.L" + }, + { + "from_node": "Source Rig calf_correctiveRoot_l.001", + "to_node": "Control Rig DEF-shin.L.003", + "from_socket": "calf_correctiveRoot_r", + "to_socket": "DEF-shin.R" + }, + { + "from_node": "Source Rig calf_twist_01_l", + "to_node": "Control Rig DEF-shin.L.004", + "from_socket": "calf_twist_01_l", + "to_socket": "DEF-shin.L.002" + }, + { + "from_node": "Source Rig calf_twist_01_l", + "to_node": "Control Rig DEF-shin.L.004", + "from_socket": "calf_twist_01_r", + "to_socket": "DEF-shin.R.002" + }, + { + "from_node": "Source Rig foot_l", + "to_node": "Control Rig DEF-foot.L", + "from_socket": "foot_l", + "to_socket": "DEF-foot.L" + }, + { + "from_node": "Source Rig foot_l", + "to_node": "Control Rig DEF-foot.L", + "from_socket": "foot_r", + "to_socket": "DEF-foot.R" + }, + { + "from_node": "Source Rig ball_l", + "to_node": "Control Rig DEF-toe.L", + "from_socket": "ball_l", + "to_socket": "DEF-toe.L" + }, + { + "from_node": "Source Rig ball_l", + "to_node": "Control Rig DEF-toe.L", + "from_socket": "ball_r", + "to_socket": "DEF-toe.R" + }, + { + "from_node": "Source Rig calf_l.001", + "to_node": "Control Rig DEF-shin.L.001", + "from_socket": "calf_l", + "to_socket": "DEF-shin.L" + }, + { + "from_node": "Source Rig calf_l.001", + "to_node": "Control Rig DEF-shin.L.001", + "from_socket": "calf_r", + "to_socket": "DEF-shin.R" + }, + { + "from_node": "Source Rig thigh_correctiveRoot_l.001", + "to_node": "Control Rig DEF-thigh.L.004", + "from_socket": "thigh_correctiveRoot_l", + "to_socket": "DEF-thigh.L" + }, + { + "from_node": "Source Rig thigh_correctiveRoot_l.001", + "to_node": "Control Rig DEF-thigh.L.004", + "from_socket": "thigh_correctiveRoot_r", + "to_socket": "DEF-thigh.R" + }, + { + "from_node": "Source Rig pelvis", + "to_node": "Control Rig DEF-spine", + "from_socket": "pelvis", + "to_socket": "DEF-spine" + }, + { + "from_node": "Source Rig spine_01", + "to_node": "Control Rig DEF-spine.001", + "from_socket": "spine_01", + "to_socket": "DEF-spine.001" + }, + { + "from_node": "Source Rig spine_02", + "to_node": "Control Rig DEF-spine.002", + "from_socket": "spine_02", + "to_socket": "DEF-spine.002" + }, + { + "from_node": "Source Rig spine_03", + "to_node": "Control Rig DEF-spine.003", + "from_socket": "spine_03", + "to_socket": "DEF-spine.003" + }, + { + "from_node": "Source Rig spine_04", + "to_node": "Control Rig DEF-spine.007", + "from_socket": "spine_04", + "to_socket": "DEF-spine.007" + }, + { + "from_node": "Source Rig clavicle_pec_l", + "to_node": "Control Rig DEF-breast.L", + "from_socket": "clavicle_pec_l", + "to_socket": "DEF-breast.L" + }, + { + "from_node": "Source Rig clavicle_pec_l", + "to_node": "Control Rig DEF-breast.L", + "from_socket": "clavicle_pec_r", + "to_socket": "DEF-breast.R" + }, + { + "from_node": "Source Rig spine_05", + "to_node": "Control Rig DEF-spine.008", + "from_socket": "spine_05", + "to_socket": "DEF-spine.008" + }, + { + "from_node": "Source Rig clavicle_l", + "to_node": "Control Rig DEF-shoulder.L", + "from_socket": "clavicle_l", + "to_socket": "DEF-shoulder.L" + }, + { + "from_node": "Source Rig clavicle_l", + "to_node": "Control Rig DEF-shoulder.L", + "from_socket": "clavicle_r", + "to_socket": "DEF-shoulder.R" + }, + { + "from_node": "Source Rig neck_02", + "to_node": "Control Rig DEF-spine.005", + "from_socket": "neck_02", + "to_socket": "DEF-spine.005" + }, + { + "from_node": "Source Rig neck_01", + "to_node": "Control Rig DEF-spine.004", + "from_socket": "neck_01", + "to_socket": "DEF-spine.004" + }, + { + "from_node": "Source Rig head", + "to_node": "Control Rig DEF-spine.006", + "from_socket": "head", + "to_socket": "DEF-spine.006" + }, + { + "from_node": "root", + "to_node": "Control Rig root", + "from_socket": "object", + "to_socket": "root" + }, + { + "from_node": "Source Rig ring_01_l", + "to_node": "Control Rig DEF-f_ring.01.L", + "from_socket": "ring_01_l", + "to_socket": "DEF-f_ring.01.L" + }, + { + "from_node": "Source Rig ring_01_l", + "to_node": "Control Rig DEF-f_ring.01.L", + "from_socket": "ring_01_r", + "to_socket": "DEF-f_ring.01.R" + }, + { + "from_node": "Source Rig ring_02_l", + "to_node": "Control Rig DEF-f_ring.02.L", + "from_socket": "ring_02_l", + "to_socket": "DEF-f_ring.02.L" + }, + { + "from_node": "Source Rig ring_02_l", + "to_node": "Control Rig DEF-f_ring.02.L", + "from_socket": "ring_02_r", + "to_socket": "DEF-f_ring.02.R" + }, + { + "from_node": "Source Rig pinky_01_l", + "to_node": "Control Rig DEF-f_pinky.01.L", + "from_socket": "pinky_01_l", + "to_socket": "DEF-f_pinky.01.L" + }, + { + "from_node": "Source Rig pinky_01_l", + "to_node": "Control Rig DEF-f_pinky.01.L", + "from_socket": "pinky_01_r", + "to_socket": "DEF-f_pinky.01.R" + }, + { + "from_node": "Source Rig pinky_02_l", + "to_node": "Control Rig DEF-f_pinky.02.L", + "from_socket": "pinky_02_l", + "to_socket": "DEF-f_pinky.02.L" + }, + { + "from_node": "Source Rig pinky_02_l", + "to_node": "Control Rig DEF-f_pinky.02.L", + "from_socket": "pinky_02_r", + "to_socket": "DEF-f_pinky.02.R" + }, + { + "from_node": "Source Rig pinky_03_l", + "to_node": "Control ", + "from_socket": "pinky_03_l", + "to_socket": "DEF-f_pinky.03.L" + }, + { + "from_node": "Source Rig pinky_03_l", + "to_node": "Control ", + "from_socket": "pinky_03_r", + "to_socket": "DEF-f_pinky.03.R" + } +] \ No newline at end of file diff --git a/src/addons/ue2rigify/resources/rig_templates/b3_6/female_mannequin_UE5/source_to_deform_nodes.json b/src/addons/ue2rigify/resources/rig_templates/b3_6/female_mannequin_UE5/source_to_deform_nodes.json new file mode 100644 index 00000000..a05dada8 --- /dev/null +++ b/src/addons/ue2rigify/resources/rig_templates/b3_6/female_mannequin_UE5/source_to_deform_nodes.json @@ -0,0 +1,2274 @@ +[ + { + "name": "Source Rig upperarm_twist_01_l", + "label": "Source Rig upperarm_twist_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 120.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upperarm_twist_01_l", + "upperarm_twist_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-upper_arm.L.001", + "label": "Control Rig DEF-upper_arm.L.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 120.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-upper_arm.L.001", + "DEF-upper_arm.R.001" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig upperarm_twist_02_l", + "label": "Source Rig upperarm_twist_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 240.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upperarm_twist_02_l", + "upperarm_twist_02_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-upper_arm.L.002", + "label": "Control Rig DEF-upper_arm.L.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 240.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-upper_arm.L.002", + "DEF-upper_arm.R.002" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig lowerarm_l", + "label": "Source Rig lowerarm_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 480.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "lowerarm_l", + "lowerarm_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-forearm.L.001", + "label": "Control Rig DEF-forearm.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 480.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-forearm.L", + "DEF-forearm.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig upperarm_l", + "label": "Source Rig upperarm_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 600.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upperarm_l", + "upperarm_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-upper_arm.L.003", + "label": "Control Rig DEF-upper_arm.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 600.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-upper_arm.L", + "DEF-upper_arm.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig upperarm_correctiveRoot_l.001", + "label": "Source Rig upperarm_correctiveRoot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 840.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upperarm_correctiveRoot_l", + "upperarm_correctiveRoot_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-upper_arm.L.004", + "label": "Control Rig DEF-upper_arm.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 840.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-upper_arm.L", + "DEF-upper_arm.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig hand_l", + "label": "Source Rig hand_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 960.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "hand_l", + "hand_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-hand.L", + "label": "Control Rig DEF-hand.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 960.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-hand.L", + "DEF-hand.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig lowerarm_twist_01_l", + "label": "Source Rig lowerarm_twist_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1080.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "lowerarm_twist_01_l", + "lowerarm_twist_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-forearm.L.003", + "label": "Control Rig DEF-forearm.L.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1080.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-forearm.L.002", + "DEF-forearm.R.002" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig lowerarm_twist_02_l", + "label": "Source Rig lowerarm_twist_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1200.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "lowerarm_twist_02_l", + "lowerarm_twist_02_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-forearm.L.004", + "label": "Control Rig DEF-forearm.L.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1200.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-forearm.L.001", + "DEF-forearm.R.001" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig thumb_01_l", + "label": "Source Rig thumb_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1320.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thumb_01_l", + "thumb_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-thumb.01.L", + "label": "Control Rig DEF-thumb.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1320.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thumb.01.L", + "DEF-thumb.01.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig thumb_02_l", + "label": "Source Rig thumb_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1440.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thumb_02_l", + "thumb_02_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-thumb.02.L", + "label": "Control Rig DEF-thumb.02.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1440.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thumb.02.L", + "DEF-thumb.02.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig thumb_03_l", + "label": "Source Rig thumb_03_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1560.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thumb_03_l", + "thumb_03_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-thumb.03.L", + "label": "Control Rig DEF-thumb.03.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1560.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thumb.03.L", + "DEF-thumb.03.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig index_metacarpal_l", + "label": "Source Rig index_metacarpal_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1680.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "index_metacarpal_l", + "index_metacarpal_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-palm.01.L", + "label": "Control Rig DEF-palm.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1680.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-palm.01.L", + "DEF-palm.01.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig index_01_l", + "label": "Source Rig index_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1800.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "index_01_l", + "index_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_index.01.L", + "label": "Control Rig DEF-f_index.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1800.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_index.01.L", + "DEF-f_index.01.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig index_02_l", + "label": "Source Rig index_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1920.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "index_02_l", + "index_02_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_index.02.L", + "label": "Control Rig DEF-f_index.02.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1920.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_index.02.L", + "DEF-f_index.02.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig index_03_l", + "label": "Source Rig index_03_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2040.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "index_03_l", + "index_03_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_index.03.L", + "label": "Control Rig DEF-f_index.03.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2040.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_index.03.L", + "DEF-f_index.03.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig middle_metacarpal_l", + "label": "Source Rig middle_metacarpal_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2160.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "middle_metacarpal_l", + "middle_metacarpal_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-palm.02.L", + "label": "Control Rig DEF-palm.02.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2160.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-palm.02.L", + "DEF-palm.02.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig middle_01_l", + "label": "Source Rig middle_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2280.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "middle_01_l", + "middle_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_middle.01.L", + "label": "Control Rig DEF-f_middle.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2280.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_middle.01.L", + "DEF-f_middle.01.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig middle_02_l", + "label": "Source Rig middle_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2400.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "middle_02_l", + "middle_02_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_middle.02.L", + "label": "Control Rig DEF-f_middle.02.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2400.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_middle.02.L", + "DEF-f_middle.02.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig middle_03_l", + "label": "Source Rig middle_03_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2520.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "middle_03_l", + "middle_03_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_middle.03.L", + "label": "Control Rig DEF-f_middle.03.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2520.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_middle.03.L", + "DEF-f_middle.03.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig ring_03_l", + "label": "Source Rig ring_03_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2880.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "ring_03_l", + "ring_03_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_ring.03.L", + "label": "Control Rig DEF-f_ring.03.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2880.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_ring.03.L", + "DEF-f_ring.03.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig thigh_l", + "label": "Source Rig thigh_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3480.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_l", + "thigh_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-thigh.L.001", + "label": "Control Rig DEF-thigh.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3480.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thigh.L", + "DEF-thigh.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig lowerarm_correctiveRoot_l", + "label": "Source Rig lowerarm_correctiveRoot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3600.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "lowerarm_correctiveRoot_l", + "lowerarm_correctiveRoot_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-forearm.L", + "label": "Control Rig DEF-forearm.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3600.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-forearm.L", + "DEF-forearm.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig thigh_twist_01_l", + "label": "Source Rig thigh_twist_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -281.4216003417969, + 4074.18212890625 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_twist_01_l" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-thigh.L.002", + "label": "Control Rig DEF-thigh.L.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 301.9412841796875, + 4069.910400390625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thigh.L.001" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig thigh_twist_01_r", + "label": "Source Rig thigh_twist_01_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -284.6238708496094, + 4002.360107421875 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_twist_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-thigh.R.001", + "label": "Control Rig DEF-thigh.R.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 307.329345703125, + 4002.27392578125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thigh.R.001" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-thigh.R.002", + "label": "Control Rig DEF-thigh.R.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 310.2611083984375, + 3933.42138671875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thigh.R.002" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig thigh_twist_02_r", + "label": "Source Rig thigh_twist_02_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -281.69219970703125, + 3936.43798828125 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_twist_02_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig thigh_twist_02_l", + "label": "Source Rig thigh_twist_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -289.0215759277344, + 4154.71484375 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_twist_02_l" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig calf_twist_02_l", + "label": "Source Rig calf_twist_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 4274.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "calf_twist_02_l", + "calf_twist_02_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-shin.L.002", + "label": "Control Rig DEF-shin.L.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 4274.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-shin.L.001", + "DEF-shin.R.001" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig calf_correctiveRoot_l.001", + "label": "Source Rig calf_correctiveRoot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 4394.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "calf_correctiveRoot_l", + "calf_correctiveRoot_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-shin.L.003", + "label": "Control Rig DEF-shin.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 4394.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-shin.L", + "DEF-shin.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig calf_twist_01_l", + "label": "Source Rig calf_twist_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 4514.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "calf_twist_01_l", + "calf_twist_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-shin.L.004", + "label": "Control Rig DEF-shin.L.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 4514.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-shin.L.002", + "DEF-shin.R.002" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig foot_l", + "label": "Source Rig foot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 4634.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "foot_l", + "foot_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-foot.L", + "label": "Control Rig DEF-foot.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 4634.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-foot.L", + "DEF-foot.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig ball_l", + "label": "Source Rig ball_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 4754.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "ball_l", + "ball_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-toe.L", + "label": "Control Rig DEF-toe.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 4754.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-toe.L", + "DEF-toe.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig calf_l.001", + "label": "Source Rig calf_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 4874.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "calf_l", + "calf_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-shin.L.001", + "label": "Control Rig DEF-shin.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 4874.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-shin.L", + "DEF-shin.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig thigh_correctiveRoot_l.001", + "label": "Source Rig thigh_correctiveRoot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 4994.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_correctiveRoot_l", + "thigh_correctiveRoot_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-thigh.L.004", + "label": "Control Rig DEF-thigh.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 4994.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thigh.L", + "DEF-thigh.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig pelvis", + "label": "Source Rig pelvis", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 5114.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "pelvis" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.001", + "label": "Control Rig DEF-spine.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 5234.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.001" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.002", + "label": "Control Rig DEF-spine.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 5354.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.002" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.003", + "label": "Control Rig DEF-spine.003", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 5474.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.003" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.007", + "label": "Control Rig DEF-spine.007", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 5594.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.007" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig clavicle_pec_l", + "label": "Source Rig clavicle_pec_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 5714.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "clavicle_pec_l", + "clavicle_pec_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-breast.L", + "label": "Control Rig DEF-breast.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 5714.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-breast.L", + "DEF-breast.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig spine_05", + "label": "Source Rig spine_05", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 5834.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_05" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.008", + "label": "Control Rig DEF-spine.008", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 5834.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.008" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig clavicle_l", + "label": "Source Rig clavicle_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 5954.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "clavicle_l", + "clavicle_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-shoulder.L", + "label": "Control Rig DEF-shoulder.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 5954.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-shoulder.L", + "DEF-shoulder.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig neck_02", + "label": "Source Rig neck_02", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 6074.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "neck_02" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.005", + "label": "Control Rig DEF-spine.005", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 6074.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.005" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig neck_01", + "label": "Source Rig neck_01", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 6194.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "neck_01" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.004", + "label": "Control Rig DEF-spine.004", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 6194.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.004" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig head", + "label": "Source Rig head", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 6314.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "head" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.006", + "label": "Control Rig DEF-spine.006", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 6314.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.006" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-thigh.L.003", + "label": "Control Rig DEF-thigh.L.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 298.5340881347656, + 4147.3037109375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thigh.L.002" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "root", + "label": "root", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -256.8031921386719, + 6428.2255859375 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "object" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig root", + "label": "Control Rig root", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 296.83050537109375, + 6425.21240234375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "root" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig spine_02", + "label": "Source Rig spine_02", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 5354.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_02" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig spine_03", + "label": "Source Rig spine_03", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 5474.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_03" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig spine_04", + "label": "Source Rig spine_04", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 5594.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_04" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig spine_01", + "label": "Source Rig spine_01", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 5234.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_01" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine", + "label": "Control Rig DEF-spine", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 298.4156799316406, + 5113.13134765625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig ring_02_l", + "label": "Source Rig ring_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2760.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "ring_02_l", + "ring_02_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_ring.01.L", + "label": "Control Rig DEF-f_ring.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2640.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_ring.01.L", + "DEF-f_ring.01.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig ring_01_l", + "label": "Source Rig ring_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2640.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "ring_01_l", + "ring_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_ring.02.L", + "label": "Control Rig DEF-f_ring.02.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2760.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_ring.02.L", + "DEF-f_ring.02.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig pinky_01_l", + "label": "Source Rig pinky_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3000.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "pinky_01_l", + "pinky_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_pinky.01.L", + "label": "Control Rig DEF-f_pinky.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3000.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_pinky.01.L", + "DEF-f_pinky.01.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_pinky.02.L", + "label": "Control Rig DEF-f_pinky.02.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3120.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_pinky.02.L", + "DEF-f_pinky.02.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig pinky_02_l", + "label": "Source Rig pinky_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3120.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "pinky_02_l", + "pinky_02_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control ", + "label": "Control ", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 306.4084777832031, + 3237.693359375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_pinky.03.L", + "DEF-f_pinky.03.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig pinky_03_l", + "label": "Source Rig pinky_03_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3240.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "pinky_03_l", + "pinky_03_r" + ], + "mode": "SOURCE_TO_DEFORM" + } +] \ No newline at end of file diff --git a/ue2rigify/resources/rig_templates/male_mannequin/fk_to_source_links.json b/src/addons/ue2rigify/resources/rig_templates/b3_6/male_mannequin_UE4/fk_to_source_links.json similarity index 100% rename from ue2rigify/resources/rig_templates/male_mannequin/fk_to_source_links.json rename to src/addons/ue2rigify/resources/rig_templates/b3_6/male_mannequin_UE4/fk_to_source_links.json diff --git a/ue2rigify/resources/rig_templates/male_mannequin/fk_to_source_nodes.json b/src/addons/ue2rigify/resources/rig_templates/b3_6/male_mannequin_UE4/fk_to_source_nodes.json similarity index 100% rename from ue2rigify/resources/rig_templates/male_mannequin/fk_to_source_nodes.json rename to src/addons/ue2rigify/resources/rig_templates/b3_6/male_mannequin_UE4/fk_to_source_nodes.json diff --git a/ue2rigify/resources/rig_templates/male_mannequin/metarig.py b/src/addons/ue2rigify/resources/rig_templates/b3_6/male_mannequin_UE4/metarig.py similarity index 100% rename from ue2rigify/resources/rig_templates/male_mannequin/metarig.py rename to src/addons/ue2rigify/resources/rig_templates/b3_6/male_mannequin_UE4/metarig.py diff --git a/ue2rigify/resources/rig_templates/male_mannequin/source_to_deform_links.json b/src/addons/ue2rigify/resources/rig_templates/b3_6/male_mannequin_UE4/source_to_deform_links.json similarity index 100% rename from ue2rigify/resources/rig_templates/male_mannequin/source_to_deform_links.json rename to src/addons/ue2rigify/resources/rig_templates/b3_6/male_mannequin_UE4/source_to_deform_links.json diff --git a/ue2rigify/resources/rig_templates/male_mannequin/source_to_deform_nodes.json b/src/addons/ue2rigify/resources/rig_templates/b3_6/male_mannequin_UE4/source_to_deform_nodes.json similarity index 100% rename from ue2rigify/resources/rig_templates/male_mannequin/source_to_deform_nodes.json rename to src/addons/ue2rigify/resources/rig_templates/b3_6/male_mannequin_UE4/source_to_deform_nodes.json diff --git a/src/addons/ue2rigify/resources/rig_templates/b3_6/male_mannequin_UE5/fk_to_source_links.json b/src/addons/ue2rigify/resources/rig_templates/b3_6/male_mannequin_UE5/fk_to_source_links.json new file mode 100644 index 00000000..94e28088 --- /dev/null +++ b/src/addons/ue2rigify/resources/rig_templates/b3_6/male_mannequin_UE5/fk_to_source_links.json @@ -0,0 +1,548 @@ +[ + { + "from_node": "Control Rig upper_arm_fk.L", + "to_node": "Source Rig upperarm_l", + "from_socket": "upper_arm_fk.L", + "to_socket": "upperarm_l" + }, + { + "from_node": "Control Rig upper_arm_fk.L", + "to_node": "Source Rig upperarm_l", + "from_socket": "upper_arm_fk.R", + "to_socket": "upperarm_r" + }, + { + "from_node": "Control Rig upper_arm_tweak.L", + "to_node": "Source Rig upperarm_correctiveRoot_l", + "from_socket": "upper_arm_tweak.L", + "to_socket": "upperarm_correctiveRoot_l" + }, + { + "from_node": "Control Rig upper_arm_tweak.L", + "to_node": "Source Rig upperarm_correctiveRoot_l", + "from_socket": "upper_arm_tweak.R", + "to_socket": "upperarm_correctiveRoot_r" + }, + { + "from_node": "Control Rig forearm_fk.L", + "to_node": "Source Rig lowerarm_l", + "from_socket": "forearm_fk.L", + "to_socket": "lowerarm_l" + }, + { + "from_node": "Control Rig forearm_fk.L", + "to_node": "Source Rig lowerarm_l", + "from_socket": "forearm_fk.R", + "to_socket": "lowerarm_r" + }, + { + "from_node": "Control Rig hand_fk.L", + "to_node": "Source Rig hand_l", + "from_socket": "hand_fk.L", + "to_socket": "hand_l" + }, + { + "from_node": "Control Rig hand_fk.L", + "to_node": "Source Rig hand_l", + "from_socket": "hand_fk.R", + "to_socket": "hand_r" + }, + { + "from_node": "Control Rig forearm_tweak.L", + "to_node": "Source Rig lowerarm_correctiveRoot_l", + "from_socket": "forearm_tweak.L", + "to_socket": "lowerarm_correctiveRoot_l" + }, + { + "from_node": "Control Rig forearm_tweak.L", + "to_node": "Source Rig lowerarm_correctiveRoot_l", + "from_socket": "forearm_tweak.R", + "to_socket": "lowerarm_correctiveRoot_r" + }, + { + "from_node": "Control Rig forearm_tweak.L.001", + "to_node": "Source Rig lowerarm_twist_02_l", + "from_socket": "forearm_tweak.L.001", + "to_socket": "lowerarm_twist_02_l" + }, + { + "from_node": "Control Rig forearm_tweak.L.001", + "to_node": "Source Rig lowerarm_twist_02_l", + "from_socket": "forearm_tweak.R.001", + "to_socket": "lowerarm_twist_02_r" + }, + { + "from_node": "Control Rig forearm_tweak.L.002", + "to_node": "Source Rig lowerarm_twist_01_l", + "from_socket": "forearm_tweak.L.002", + "to_socket": "lowerarm_twist_01_l" + }, + { + "from_node": "Control Rig forearm_tweak.L.002", + "to_node": "Source Rig lowerarm_twist_01_l", + "from_socket": "forearm_tweak.R.002", + "to_socket": "lowerarm_twist_01_r" + }, + { + "from_node": "Control Rig hand_tweak.L", + "to_node": "Source Rig hand_l.001", + "from_socket": "hand_tweak.L", + "to_socket": "hand_l" + }, + { + "from_node": "Control Rig hand_tweak.L", + "to_node": "Source Rig hand_l.001", + "from_socket": "hand_tweak.R", + "to_socket": "hand_r" + }, + { + "from_node": "Control Rig upper_arm_tweak.L.002", + "to_node": "Source Rig upperarm_twist_02_l", + "from_socket": "upper_arm_tweak.L.002", + "to_socket": "upperarm_twist_02_l" + }, + { + "from_node": "Control Rig upper_arm_tweak.L.002", + "to_node": "Source Rig upperarm_twist_02_l", + "from_socket": "upper_arm_tweak.R.002", + "to_socket": "upperarm_twist_02_r" + }, + { + "from_node": "Control Rig upper_arm_tweak.L.001", + "to_node": "Source Rig upperarm_twist_01_l", + "from_socket": "upper_arm_tweak.L.001", + "to_socket": "upperarm_twist_01_l" + }, + { + "from_node": "Control Rig upper_arm_tweak.L.001", + "to_node": "Source Rig upperarm_twist_01_l", + "from_socket": "upper_arm_tweak.R.001", + "to_socket": "upperarm_twist_01_r" + }, + { + "from_node": "Control Rig thumb.01.L", + "to_node": "Source Rig thumb_01_l", + "from_socket": "thumb.01.L", + "to_socket": "thumb_01_l" + }, + { + "from_node": "Control Rig thumb.01.L", + "to_node": "Source Rig thumb_01_l", + "from_socket": "thumb.01.R", + "to_socket": "thumb_01_r" + }, + { + "from_node": "Control Rig thumb.02.L", + "to_node": "Source Rig thumb_02_l", + "from_socket": "thumb.02.L", + "to_socket": "thumb_02_l" + }, + { + "from_node": "Control Rig thumb.02.L", + "to_node": "Source Rig thumb_02_l", + "from_socket": "thumb.02.R", + "to_socket": "thumb_02_r" + }, + { + "from_node": "Control Rig thumb.03.L", + "to_node": "Source Rig thumb_03_l", + "from_socket": "thumb.03.L", + "to_socket": "thumb_03_l" + }, + { + "from_node": "Control Rig thumb.03.L", + "to_node": "Source Rig thumb_03_l", + "from_socket": "thumb.03.R", + "to_socket": "thumb_03_r" + }, + { + "from_node": "Control Rig f_index.01.L", + "to_node": "Source Rig index_01_l", + "from_socket": "f_index.01.L", + "to_socket": "index_01_l" + }, + { + "from_node": "Control Rig f_index.01.L", + "to_node": "Source Rig index_01_l", + "from_socket": "f_index.01.R", + "to_socket": "index_01_r" + }, + { + "from_node": "Control Rig f_index.02.L", + "to_node": "Source Rig index_02_l", + "from_socket": "f_index.02.L", + "to_socket": "index_02_l" + }, + { + "from_node": "Control Rig f_index.02.L", + "to_node": "Source Rig index_02_l", + "from_socket": "f_index.02.R", + "to_socket": "index_02_r" + }, + { + "from_node": "Control Rig f_index.03.L", + "to_node": "Source Rig index_03_l", + "from_socket": "f_index.03.L", + "to_socket": "index_03_l" + }, + { + "from_node": "Control Rig f_index.03.L", + "to_node": "Source Rig index_03_l", + "from_socket": "f_index.03.R", + "to_socket": "index_03_r" + }, + { + "from_node": "Control Rig f_middle.01.L", + "to_node": "Source Rig middle_01_l", + "from_socket": "f_middle.01.L", + "to_socket": "middle_01_l" + }, + { + "from_node": "Control Rig f_middle.01.L", + "to_node": "Source Rig middle_01_l", + "from_socket": "f_middle.01.R", + "to_socket": "middle_01_r" + }, + { + "from_node": "Control Rig f_middle.02.L", + "to_node": "Source Rig middle_02_l", + "from_socket": "f_middle.02.L", + "to_socket": "middle_02_l" + }, + { + "from_node": "Control Rig f_middle.02.L", + "to_node": "Source Rig middle_02_l", + "from_socket": "f_middle.02.R", + "to_socket": "middle_02_r" + }, + { + "from_node": "Control Rig f_middle.03.L", + "to_node": "Source Rig middle_03_l", + "from_socket": "f_middle.03.L", + "to_socket": "middle_03_l" + }, + { + "from_node": "Control Rig f_middle.03.L", + "to_node": "Source Rig middle_03_l", + "from_socket": "f_middle.03.R", + "to_socket": "middle_03_r" + }, + { + "from_node": "Control Rig f_ring.01.L", + "to_node": "Source Rig ring_01_l", + "from_socket": "f_ring.01.L", + "to_socket": "ring_01_l" + }, + { + "from_node": "Control Rig f_ring.01.L", + "to_node": "Source Rig ring_01_l", + "from_socket": "f_ring.01.R", + "to_socket": "ring_01_r" + }, + { + "from_node": "Control Rig f_ring.02.L", + "to_node": "Source Rig ring_02_l", + "from_socket": "f_ring.02.L", + "to_socket": "ring_02_l" + }, + { + "from_node": "Control Rig f_ring.02.L", + "to_node": "Source Rig ring_02_l", + "from_socket": "f_ring.02.R", + "to_socket": "ring_02_r" + }, + { + "from_node": "Control Rig f_ring.03.L", + "to_node": "Source Rig ring_03_l", + "from_socket": "f_ring.03.L", + "to_socket": "ring_03_l" + }, + { + "from_node": "Control Rig f_ring.03.L", + "to_node": "Source Rig ring_03_l", + "from_socket": "f_ring.03.R", + "to_socket": "ring_03_r" + }, + { + "from_node": "Control Rig f_pinky.01.L", + "to_node": "Source Rig pinky_01_l", + "from_socket": "f_pinky.01.L", + "to_socket": "pinky_01_l" + }, + { + "from_node": "Control Rig f_pinky.01.L", + "to_node": "Source Rig pinky_01_l", + "from_socket": "f_pinky.01.R", + "to_socket": "pinky_01_r" + }, + { + "from_node": "Control Rig f_pinky.02.L", + "to_node": "Source Rig pinky_02_l", + "from_socket": "f_pinky.02.L", + "to_socket": "pinky_02_l" + }, + { + "from_node": "Control Rig f_pinky.02.L", + "to_node": "Source Rig pinky_02_l", + "from_socket": "f_pinky.02.R", + "to_socket": "pinky_02_r" + }, + { + "from_node": "Control Rig f_pinky.03.L", + "to_node": "Source Rig pinky_03_l", + "from_socket": "f_pinky.03.L", + "to_socket": "pinky_03_l" + }, + { + "from_node": "Control Rig f_pinky.03.L", + "to_node": "Source Rig pinky_03_l", + "from_socket": "f_pinky.03.R", + "to_socket": "pinky_03_r" + }, + { + "from_node": "Control Rig thigh_fk.L", + "to_node": "Source Rig thigh_l", + "from_socket": "thigh_fk.L", + "to_socket": "thigh_l" + }, + { + "from_node": "Control Rig thigh_fk.L", + "to_node": "Source Rig thigh_l", + "from_socket": "thigh_fk.R", + "to_socket": "thigh_r" + }, + { + "from_node": "Control Rig thigh_tweak.L", + "to_node": "Source Rig thigh_correctiveRoot_l", + "from_socket": "thigh_tweak.L", + "to_socket": "thigh_correctiveRoot_l" + }, + { + "from_node": "Control Rig thigh_tweak.L", + "to_node": "Source Rig thigh_correctiveRoot_l", + "from_socket": "thigh_tweak.R", + "to_socket": "thigh_correctiveRoot_r" + }, + { + "from_node": "Control Rig shin_fk.L", + "to_node": "Source Rig calf_l", + "from_socket": "shin_fk.L", + "to_socket": "calf_l" + }, + { + "from_node": "Control Rig shin_fk.L", + "to_node": "Source Rig calf_l", + "from_socket": "shin_fk.R", + "to_socket": "calf_r" + }, + { + "from_node": "Control Rig foot_fk.L", + "to_node": "Source Rig foot_l", + "from_socket": "foot_fk.L", + "to_socket": "foot_l" + }, + { + "from_node": "Control Rig foot_fk.L", + "to_node": "Source Rig foot_l", + "from_socket": "foot_fk.R", + "to_socket": "foot_r" + }, + { + "from_node": "Control Rig foot_tweak.L", + "to_node": "Source Rig foot_l.001", + "from_socket": "foot_tweak.L", + "to_socket": "foot_l" + }, + { + "from_node": "Control Rig foot_tweak.L", + "to_node": "Source Rig foot_l.001", + "from_socket": "foot_tweak.R", + "to_socket": "foot_r" + }, + { + "from_node": "Control Rig toe.L", + "to_node": "Source Rig ball_l", + "from_socket": "toe.L", + "to_socket": "ball_l" + }, + { + "from_node": "Control Rig toe.L", + "to_node": "Source Rig ball_l", + "from_socket": "toe.R", + "to_socket": "ball_r" + }, + { + "from_node": "Control Rig shin_tweak.L.001", + "to_node": "Source Rig calf_twist_02_l", + "from_socket": "shin_tweak.L.001", + "to_socket": "calf_twist_02_l" + }, + { + "from_node": "Control Rig shin_tweak.L.001", + "to_node": "Source Rig calf_twist_02_l", + "from_socket": "shin_tweak.R.001", + "to_socket": "calf_twist_02_r" + }, + { + "from_node": "Control Rig shin_tweak.L.002", + "to_node": "Source Rig calf_twist_01_l", + "from_socket": "shin_tweak.L.002", + "to_socket": "calf_twist_01_l" + }, + { + "from_node": "Control Rig shin_tweak.L.002", + "to_node": "Source Rig calf_twist_01_l", + "from_socket": "shin_tweak.R.002", + "to_socket": "calf_twist_01_r" + }, + { + "from_node": "Control Rig shin_tweak.L", + "to_node": "Source Rig calf_correctiveRoot_l", + "from_socket": "shin_tweak.L", + "to_socket": "calf_correctiveRoot_l" + }, + { + "from_node": "Control Rig shin_tweak.L", + "to_node": "Source Rig calf_correctiveRoot_l", + "from_socket": "shin_tweak.R", + "to_socket": "calf_correctiveRoot_r" + }, + { + "from_node": "Control Rig thigh_tweak.L.002", + "to_node": "Source Rig thigh_twist_02_l", + "from_socket": "thigh_tweak.L.002", + "to_socket": "thigh_twist_02_l" + }, + { + "from_node": "Control Rig thigh_tweak.L.002", + "to_node": "Source Rig thigh_twist_02_l", + "from_socket": "thigh_tweak.R.002", + "to_socket": "thigh_twist_02_r" + }, + { + "from_node": "Control Rig thigh_tweak.L.001", + "to_node": "Source Rig thigh_twist_01_l", + "from_socket": "thigh_tweak.L.001", + "to_socket": "thigh_twist_01_l" + }, + { + "from_node": "Control Rig thigh_tweak.L.001", + "to_node": "Source Rig thigh_twist_01_l", + "from_socket": "thigh_tweak.R.001", + "to_socket": "thigh_twist_01_r" + }, + { + "from_node": "Control Rig root", + "to_node": "root", + "from_socket": "root", + "to_socket": "object" + }, + { + "from_node": "Control Rig shoulder.L", + "to_node": "Source Rig clavicle_l", + "from_socket": "shoulder.L", + "to_socket": "clavicle_l" + }, + { + "from_node": "Control Rig shoulder.L", + "to_node": "Source Rig clavicle_l", + "from_socket": "shoulder.R", + "to_socket": "clavicle_r" + }, + { + "from_node": "Control Rig breast.L", + "to_node": "Source Rig clavicle_pec_l", + "from_socket": "breast.L", + "to_socket": "clavicle_pec_l" + }, + { + "from_node": "Control Rig breast.L", + "to_node": "Source Rig clavicle_pec_l", + "from_socket": "breast.R", + "to_socket": "clavicle_pec_r" + }, + { + "from_node": "Control Rig neck", + "to_node": "Source Rig neck_02.001", + "from_socket": "neck", + "to_socket": "neck_02" + }, + { + "from_node": "Control Rig head", + "to_node": "Source Rig head", + "from_socket": "head", + "to_socket": "head" + }, + { + "from_node": "Control Rig spine_fk", + "to_node": "Source Rig spine_01", + "from_socket": "spine_fk", + "to_socket": "spine_01" + }, + { + "from_node": "Control Rig spine_fk.001", + "to_node": "Source Rig spine_02", + "from_socket": "spine_fk.001", + "to_socket": "spine_02" + }, + { + "from_node": "Control Rig spine_fk.002", + "to_node": "Source Rig spine_02.001", + "from_socket": "spine_fk.002", + "to_socket": "spine_02" + }, + { + "from_node": "Control Rig spine_fk.003", + "to_node": "Source Rig spine_03", + "from_socket": "spine_fk.003", + "to_socket": "spine_03" + }, + { + "from_node": "Control Rig spine_fk.007", + "to_node": "Source Rig spine_04", + "from_socket": "spine_fk.007", + "to_socket": "spine_04" + }, + { + "from_node": "Control Rig spine_fk.008", + "to_node": "Source Rig spine_05", + "from_socket": "spine_fk.008", + "to_socket": "spine_05" + }, + { + "from_node": "Control Rig tweak_spine", + "to_node": "Source Rig pelvis", + "from_socket": "tweak_spine", + "to_socket": "pelvis" + }, + { + "from_node": "Control Rig tweak_spine.001", + "to_node": "Source Rig spine_01.001", + "from_socket": "tweak_spine.001", + "to_socket": "spine_01" + }, + { + "from_node": "Control Rig hand_ik.R", + "to_node": "Source Rig ik_hand_r", + "from_socket": "hand_ik.R", + "to_socket": "ik_hand_r" + }, + { + "from_node": "Control Rig hand_ik.L", + "to_node": "Source Rig ik_hand_l", + "from_socket": "hand_ik.L", + "to_socket": "ik_hand_l" + }, + { + "from_node": "Control Rig foot_ik.R", + "to_node": "Source Rig ik_foot_r", + "from_socket": "foot_ik.R", + "to_socket": "ik_foot_r" + }, + { + "from_node": "Control Rig foot_ik.L", + "to_node": "Source Rig ik_foot_l", + "from_socket": "foot_ik.L", + "to_socket": "ik_foot_l" + } +] \ No newline at end of file diff --git a/src/addons/ue2rigify/resources/rig_templates/b3_6/male_mannequin_UE5/fk_to_source_nodes.json b/src/addons/ue2rigify/resources/rig_templates/b3_6/male_mannequin_UE5/fk_to_source_nodes.json new file mode 100644 index 00000000..98fb7525 --- /dev/null +++ b/src/addons/ue2rigify/resources/rig_templates/b3_6/male_mannequin_UE5/fk_to_source_nodes.json @@ -0,0 +1,2432 @@ +[ + { + "name": "Source Rig upperarm_l", + "label": "Source Rig upperarm_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 0.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "upperarm_l", + "upperarm_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig upper_arm_fk.L", + "label": "Control Rig upper_arm_fk.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 0.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upper_arm_fk.L", + "upper_arm_fk.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig upperarm_correctiveRoot_l", + "label": "Source Rig upperarm_correctiveRoot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 120.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "upperarm_correctiveRoot_l", + "upperarm_correctiveRoot_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig upper_arm_tweak.L", + "label": "Control Rig upper_arm_tweak.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 120.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upper_arm_tweak.L", + "upper_arm_tweak.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig lowerarm_l", + "label": "Source Rig lowerarm_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 240.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "lowerarm_l", + "lowerarm_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig forearm_fk.L", + "label": "Control Rig forearm_fk.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 240.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "forearm_fk.L", + "forearm_fk.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig hand_l", + "label": "Source Rig hand_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 360.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "hand_l", + "hand_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig hand_fk.L", + "label": "Control Rig hand_fk.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 360.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "hand_fk.L", + "hand_fk.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig lowerarm_correctiveRoot_l", + "label": "Source Rig lowerarm_correctiveRoot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 480.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "lowerarm_correctiveRoot_l", + "lowerarm_correctiveRoot_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig forearm_tweak.L", + "label": "Control Rig forearm_tweak.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 480.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "forearm_tweak.L", + "forearm_tweak.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig lowerarm_twist_02_l", + "label": "Source Rig lowerarm_twist_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 600.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "lowerarm_twist_02_l", + "lowerarm_twist_02_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig forearm_tweak.L.001", + "label": "Control Rig forearm_tweak.L.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 600.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "forearm_tweak.L.001", + "forearm_tweak.R.001" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig lowerarm_twist_01_l", + "label": "Source Rig lowerarm_twist_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 720.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "lowerarm_twist_01_l", + "lowerarm_twist_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig forearm_tweak.L.002", + "label": "Control Rig forearm_tweak.L.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 720.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "forearm_tweak.L.002", + "forearm_tweak.R.002" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig hand_l.001", + "label": "Source Rig hand_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 840.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "hand_l", + "hand_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig hand_tweak.L", + "label": "Control Rig hand_tweak.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 840.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "hand_tweak.L", + "hand_tweak.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig upperarm_twist_02_l", + "label": "Source Rig upperarm_twist_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 960.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "upperarm_twist_02_l", + "upperarm_twist_02_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig upper_arm_tweak.L.002", + "label": "Control Rig upper_arm_tweak.L.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 960.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upper_arm_tweak.L.002", + "upper_arm_tweak.R.002" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig upperarm_twist_01_l", + "label": "Source Rig upperarm_twist_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1080.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "upperarm_twist_01_l", + "upperarm_twist_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig upper_arm_tweak.L.001", + "label": "Control Rig upper_arm_tweak.L.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1080.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upper_arm_tweak.L.001", + "upper_arm_tweak.R.001" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig thumb_01_l", + "label": "Source Rig thumb_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1200.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "thumb_01_l", + "thumb_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig thumb.01.L", + "label": "Control Rig thumb.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1200.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thumb.01.L", + "thumb.01.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig thumb_02_l", + "label": "Source Rig thumb_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1320.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "thumb_02_l", + "thumb_02_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig thumb.02.L", + "label": "Control Rig thumb.02.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1320.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thumb.02.L", + "thumb.02.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig thumb_03_l", + "label": "Source Rig thumb_03_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1440.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "thumb_03_l", + "thumb_03_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig thumb.03.L", + "label": "Control Rig thumb.03.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1440.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thumb.03.L", + "thumb.03.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig index_01_l", + "label": "Source Rig index_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1560.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "index_01_l", + "index_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_index.01.L", + "label": "Control Rig f_index.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1560.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_index.01.L", + "f_index.01.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig index_02_l", + "label": "Source Rig index_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1680.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "index_02_l", + "index_02_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_index.02.L", + "label": "Control Rig f_index.02.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1680.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_index.02.L", + "f_index.02.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig index_03_l", + "label": "Source Rig index_03_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1800.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "index_03_l", + "index_03_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_index.03.L", + "label": "Control Rig f_index.03.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1800.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_index.03.L", + "f_index.03.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig middle_01_l", + "label": "Source Rig middle_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1920.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "middle_01_l", + "middle_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_middle.01.L", + "label": "Control Rig f_middle.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1920.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_middle.01.L", + "f_middle.01.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig middle_02_l", + "label": "Source Rig middle_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2040.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "middle_02_l", + "middle_02_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_middle.02.L", + "label": "Control Rig f_middle.02.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2040.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_middle.02.L", + "f_middle.02.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig middle_03_l", + "label": "Source Rig middle_03_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2160.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "middle_03_l", + "middle_03_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_middle.03.L", + "label": "Control Rig f_middle.03.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2160.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_middle.03.L", + "f_middle.03.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig ring_01_l", + "label": "Source Rig ring_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2280.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "ring_01_l", + "ring_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_ring.01.L", + "label": "Control Rig f_ring.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2280.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_ring.01.L", + "f_ring.01.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig ring_02_l", + "label": "Source Rig ring_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2400.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "ring_02_l", + "ring_02_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_ring.02.L", + "label": "Control Rig f_ring.02.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2400.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_ring.02.L", + "f_ring.02.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig ring_03_l", + "label": "Source Rig ring_03_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2520.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "ring_03_l", + "ring_03_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_ring.03.L", + "label": "Control Rig f_ring.03.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2520.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_ring.03.L", + "f_ring.03.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig pinky_01_l", + "label": "Source Rig pinky_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2640.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "pinky_01_l", + "pinky_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_pinky.01.L", + "label": "Control Rig f_pinky.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2640.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_pinky.01.L", + "f_pinky.01.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig pinky_02_l", + "label": "Source Rig pinky_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2760.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "pinky_02_l", + "pinky_02_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_pinky.02.L", + "label": "Control Rig f_pinky.02.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2760.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_pinky.02.L", + "f_pinky.02.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig pinky_03_l", + "label": "Source Rig pinky_03_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2880.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "pinky_03_l", + "pinky_03_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_pinky.03.L", + "label": "Control Rig f_pinky.03.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2880.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_pinky.03.L", + "f_pinky.03.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig thigh_l", + "label": "Source Rig thigh_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3000.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "thigh_l", + "thigh_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig thigh_fk.L", + "label": "Control Rig thigh_fk.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3000.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_fk.L", + "thigh_fk.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig thigh_correctiveRoot_l", + "label": "Source Rig thigh_correctiveRoot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3120.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "thigh_correctiveRoot_l", + "thigh_correctiveRoot_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig thigh_tweak.L", + "label": "Control Rig thigh_tweak.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3120.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_tweak.L", + "thigh_tweak.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig calf_l", + "label": "Source Rig calf_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3240.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "calf_l", + "calf_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig shin_fk.L", + "label": "Control Rig shin_fk.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3240.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "shin_fk.L", + "shin_fk.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig foot_l", + "label": "Source Rig foot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3360.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "foot_l", + "foot_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig foot_fk.L", + "label": "Control Rig foot_fk.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3360.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "foot_fk.L", + "foot_fk.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig foot_l.001", + "label": "Source Rig foot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3480.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "foot_l", + "foot_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig foot_tweak.L", + "label": "Control Rig foot_tweak.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3480.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "foot_tweak.L", + "foot_tweak.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig ball_l", + "label": "Source Rig ball_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3600.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "ball_l", + "ball_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig toe.L", + "label": "Control Rig toe.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3600.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "toe.L", + "toe.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig calf_twist_02_l", + "label": "Source Rig calf_twist_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3720.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "calf_twist_02_l", + "calf_twist_02_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig shin_tweak.L.001", + "label": "Control Rig shin_tweak.L.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3720.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "shin_tweak.L.001", + "shin_tweak.R.001" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig calf_twist_01_l", + "label": "Source Rig calf_twist_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3840.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "calf_twist_01_l", + "calf_twist_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig shin_tweak.L.002", + "label": "Control Rig shin_tweak.L.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3840.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "shin_tweak.L.002", + "shin_tweak.R.002" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig calf_correctiveRoot_l", + "label": "Source Rig calf_correctiveRoot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3960.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "calf_correctiveRoot_l", + "calf_correctiveRoot_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig shin_tweak.L", + "label": "Control Rig shin_tweak.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3960.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "shin_tweak.L", + "shin_tweak.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig thigh_twist_02_l", + "label": "Source Rig thigh_twist_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 4080.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "thigh_twist_02_l", + "thigh_twist_02_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig thigh_tweak.L.002", + "label": "Control Rig thigh_tweak.L.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 4080.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_tweak.L.002", + "thigh_tweak.R.002" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig thigh_twist_01_l", + "label": "Source Rig thigh_twist_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 4200.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "thigh_twist_01_l", + "thigh_twist_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig thigh_tweak.L.001", + "label": "Control Rig thigh_tweak.L.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 4200.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_tweak.L.001", + "thigh_tweak.R.001" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig root", + "label": "Control Rig root", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 4320.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "root" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "root", + "label": "root", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 299.52642822265625, + 4312.6982421875 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "object" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig clavicle_l", + "label": "Source Rig clavicle_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 305.962646484375, + 4413.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "clavicle_l", + "clavicle_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig clavicle_pec_l", + "label": "Source Rig clavicle_pec_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 305.962646484375, + 4533.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "clavicle_pec_l", + "clavicle_pec_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig breast.L", + "label": "Control Rig breast.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -294.037353515625, + 4533.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "breast.L", + "breast.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig shoulder.L", + "label": "Control Rig shoulder.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -294.037353515625, + 4413.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "shoulder.L", + "shoulder.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig neck_02.001", + "label": "Source Rig neck_02", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 6333.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "neck_02" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig neck", + "label": "Control Rig neck", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 6333.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "neck" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig head", + "label": "Source Rig head", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 6453.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "head" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig head", + "label": "Control Rig head", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 6453.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "head" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig spine_01", + "label": "Source Rig spine_01", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 6573.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "spine_01" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig spine_fk", + "label": "Control Rig spine_fk", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 6573.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_fk" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig spine_02", + "label": "Source Rig spine_02", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 6693.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "spine_02" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig spine_fk.001", + "label": "Control Rig spine_fk.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 6693.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_fk.001" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig spine_02.001", + "label": "Source Rig spine_02", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 6813.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "spine_02" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig spine_fk.002", + "label": "Control Rig spine_fk.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 6813.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_fk.002" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig spine_03", + "label": "Source Rig spine_03", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 6933.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "spine_03" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig spine_fk.003", + "label": "Control Rig spine_fk.003", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 6933.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_fk.003" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig spine_04", + "label": "Source Rig spine_04", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 7053.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "spine_04" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig spine_fk.007", + "label": "Control Rig spine_fk.007", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 7053.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_fk.007" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig spine_05", + "label": "Source Rig spine_05", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 7173.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "spine_05" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig spine_fk.008", + "label": "Control Rig spine_fk.008", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 7173.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_fk.008" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig pelvis", + "label": "Source Rig pelvis", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 7293.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "pelvis" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig tweak_spine", + "label": "Control Rig tweak_spine", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 7293.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "tweak_spine" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig spine_01.001", + "label": "Source Rig spine_01", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 7413.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "spine_01" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig tweak_spine.001", + "label": "Control Rig tweak_spine.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 7413.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "tweak_spine.001" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig ik_hand_l", + "label": "Source Rig ik_hand_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.4825134277344, + -114.02925872802734 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "ik_hand_l" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig ik_hand_r", + "label": "Source Rig ik_hand_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 293.60650634765625, + -181.3875274658203 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "ik_hand_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig ik_hand_gun", + "label": "Source Rig ik_hand_gun", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 299.1072998046875, + -270.7403564453125 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "ik_hand_gun" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig hand_ik.R", + "label": "Control Rig hand_ik.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -255.10076904296875, + -186.26626586914062 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "hand_ik.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig hand_ik.L", + "label": "Control Rig hand_ik.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -257.85107421875, + -118.907958984375 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "hand_ik.L" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig ik_foot_l", + "label": "Source Rig ik_foot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 305.98333740234375, + -333.35479736328125 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "ik_foot_l" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig ik_foot_r", + "label": "Source Rig ik_foot_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 301.8578186035156, + -400.71307373046875 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "ik_foot_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig foot_ik.R", + "label": "Control Rig foot_ik.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -241.34866333007812, + -399.33843994140625 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "foot_ik.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig foot_ik.L", + "label": "Control Rig foot_ik.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -228.97177124023438, + -325.1068115234375 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "foot_ik.L" + ], + "mode": "FK_TO_SOURCE" + } +] \ No newline at end of file diff --git a/src/addons/ue2rigify/resources/rig_templates/b3_6/male_mannequin_UE5/metarig.py b/src/addons/ue2rigify/resources/rig_templates/b3_6/male_mannequin_UE5/metarig.py new file mode 100644 index 00000000..c2d06604 --- /dev/null +++ b/src/addons/ue2rigify/resources/rig_templates/b3_6/male_mannequin_UE5/metarig.py @@ -0,0 +1,1334 @@ +import bpy + +from mathutils import Color + +def create(obj): + # generated by rigify.utils.write_metarig + bpy.ops.object.mode_set(mode='EDIT') + arm = obj.data + + for i in range(6): + arm.rigify_colors.add() + + arm.rigify_colors[0].name = "Root" + arm.rigify_colors[0].active = Color((0.5490196347236633, 1.0, 1.0)) + arm.rigify_colors[0].normal = Color((0.4352940022945404, 0.18431399762630463, 0.4156860113143921)) + arm.rigify_colors[0].select = Color((0.31372547149658203, 0.7843138575553894, 1.0)) + arm.rigify_colors[0].standard_colors_lock = True + arm.rigify_colors[1].name = "IK" + arm.rigify_colors[1].active = Color((0.5490196347236633, 1.0, 1.0)) + arm.rigify_colors[1].normal = Color((0.6039220094680786, 0.0, 0.0)) + arm.rigify_colors[1].select = Color((0.31372547149658203, 0.7843138575553894, 1.0)) + arm.rigify_colors[1].standard_colors_lock = True + arm.rigify_colors[2].name = "Special" + arm.rigify_colors[2].active = Color((0.5490196347236633, 1.0, 1.0)) + arm.rigify_colors[2].normal = Color((0.9568629860877991, 0.7882350087165833, 0.04705899953842163)) + arm.rigify_colors[2].select = Color((0.31372547149658203, 0.7843138575553894, 1.0)) + arm.rigify_colors[2].standard_colors_lock = True + arm.rigify_colors[3].name = "Tweak" + arm.rigify_colors[3].active = Color((0.5490196347236633, 1.0, 1.0)) + arm.rigify_colors[3].normal = Color((0.03921600058674812, 0.21176500618457794, 0.5803920030593872)) + arm.rigify_colors[3].select = Color((0.31372547149658203, 0.7843138575553894, 1.0)) + arm.rigify_colors[3].standard_colors_lock = True + arm.rigify_colors[4].name = "FK" + arm.rigify_colors[4].active = Color((0.5490196347236633, 1.0, 1.0)) + arm.rigify_colors[4].normal = Color((0.11764699965715408, 0.5686269998550415, 0.035294000059366226)) + arm.rigify_colors[4].select = Color((0.31372547149658203, 0.7843138575553894, 1.0)) + arm.rigify_colors[4].standard_colors_lock = True + arm.rigify_colors[5].name = "Extra" + arm.rigify_colors[5].active = Color((0.5490196347236633, 1.0, 1.0)) + arm.rigify_colors[5].normal = Color((0.9686279892921448, 0.2509799897670746, 0.09411799907684326)) + arm.rigify_colors[5].select = Color((0.31372547149658203, 0.7843138575553894, 1.0)) + arm.rigify_colors[5].standard_colors_lock = True + + for i in range(29): + arm.rigify_layers.add() + + arm.rigify_layers[0].name = "Face" + arm.rigify_layers[0].row = 1 + arm.rigify_layers[0].selset = False + arm.rigify_layers[0].group = 5 + arm.rigify_layers[1].name = "Face (Primary)" + arm.rigify_layers[1].row = 2 + arm.rigify_layers[1].selset = False + arm.rigify_layers[1].group = 2 + arm.rigify_layers[2].name = "Face (Secondary)" + arm.rigify_layers[2].row = 2 + arm.rigify_layers[2].selset = False + arm.rigify_layers[2].group = 3 + arm.rigify_layers[3].name = "Torso" + arm.rigify_layers[3].row = 3 + arm.rigify_layers[3].selset = False + arm.rigify_layers[3].group = 3 + arm.rigify_layers[4].name = "Torso (Tweak)" + arm.rigify_layers[4].row = 4 + arm.rigify_layers[4].selset = False + arm.rigify_layers[4].group = 4 + arm.rigify_layers[5].name = "Fingers" + arm.rigify_layers[5].row = 5 + arm.rigify_layers[5].selset = False + arm.rigify_layers[5].group = 6 + arm.rigify_layers[6].name = "Fingers (Detail)" + arm.rigify_layers[6].row = 6 + arm.rigify_layers[6].selset = False + arm.rigify_layers[6].group = 5 + arm.rigify_layers[7].name = "Arm.L (IK)" + arm.rigify_layers[7].row = 7 + arm.rigify_layers[7].selset = False + arm.rigify_layers[7].group = 2 + arm.rigify_layers[8].name = "Arm.L (FK)" + arm.rigify_layers[8].row = 8 + arm.rigify_layers[8].selset = False + arm.rigify_layers[8].group = 5 + arm.rigify_layers[9].name = "Arm.L (Tweak)" + arm.rigify_layers[9].row = 9 + arm.rigify_layers[9].selset = False + arm.rigify_layers[9].group = 4 + arm.rigify_layers[10].name = "Arm.R (IK)" + arm.rigify_layers[10].row = 7 + arm.rigify_layers[10].selset = False + arm.rigify_layers[10].group = 2 + arm.rigify_layers[11].name = "Arm.R (FK)" + arm.rigify_layers[11].row = 8 + arm.rigify_layers[11].selset = False + arm.rigify_layers[11].group = 5 + arm.rigify_layers[12].name = "Arm.R (Tweak)" + arm.rigify_layers[12].row = 9 + arm.rigify_layers[12].selset = False + arm.rigify_layers[12].group = 4 + arm.rigify_layers[13].name = "Leg.L (IK)" + arm.rigify_layers[13].row = 10 + arm.rigify_layers[13].selset = False + arm.rigify_layers[13].group = 2 + arm.rigify_layers[14].name = "Leg.L (FK)" + arm.rigify_layers[14].row = 11 + arm.rigify_layers[14].selset = False + arm.rigify_layers[14].group = 5 + arm.rigify_layers[15].name = "Leg.L (Tweak)" + arm.rigify_layers[15].row = 12 + arm.rigify_layers[15].selset = False + arm.rigify_layers[15].group = 4 + arm.rigify_layers[16].name = "Leg.R (IK)" + arm.rigify_layers[16].row = 10 + arm.rigify_layers[16].selset = False + arm.rigify_layers[16].group = 2 + arm.rigify_layers[17].name = "Leg.R (FK)" + arm.rigify_layers[17].row = 11 + arm.rigify_layers[17].selset = False + arm.rigify_layers[17].group = 5 + arm.rigify_layers[18].name = "Leg.R (Tweak)" + arm.rigify_layers[18].row = 12 + arm.rigify_layers[18].selset = False + arm.rigify_layers[18].group = 4 + arm.rigify_layers[19].name = "" + arm.rigify_layers[19].row = 1 + arm.rigify_layers[19].selset = False + arm.rigify_layers[19].group = 0 + arm.rigify_layers[20].name = "" + arm.rigify_layers[20].row = 1 + arm.rigify_layers[20].selset = False + arm.rigify_layers[20].group = 0 + arm.rigify_layers[21].name = "" + arm.rigify_layers[21].row = 1 + arm.rigify_layers[21].selset = False + arm.rigify_layers[21].group = 0 + arm.rigify_layers[22].name = "" + arm.rigify_layers[22].row = 1 + arm.rigify_layers[22].selset = False + arm.rigify_layers[22].group = 0 + arm.rigify_layers[23].name = "" + arm.rigify_layers[23].row = 1 + arm.rigify_layers[23].selset = False + arm.rigify_layers[23].group = 0 + arm.rigify_layers[24].name = "" + arm.rigify_layers[24].row = 1 + arm.rigify_layers[24].selset = False + arm.rigify_layers[24].group = 0 + arm.rigify_layers[25].name = "" + arm.rigify_layers[25].row = 1 + arm.rigify_layers[25].selset = False + arm.rigify_layers[25].group = 0 + arm.rigify_layers[26].name = "" + arm.rigify_layers[26].row = 1 + arm.rigify_layers[26].selset = False + arm.rigify_layers[26].group = 0 + arm.rigify_layers[27].name = "" + arm.rigify_layers[27].row = 1 + arm.rigify_layers[27].selset = False + arm.rigify_layers[27].group = 0 + arm.rigify_layers[28].name = "Root" + arm.rigify_layers[28].row = 14 + arm.rigify_layers[28].selset = False + arm.rigify_layers[28].group = 1 + + bones = {} + + bone = arm.edit_bones.new('spine') + bone.head = 0.0000, -0.0228, 0.9590 + bone.tail = 0.0000, -0.0205, 0.9957 + bone.roll = 0.0000 + bone.use_connect = False + bones['spine'] = bone.name + bone = arm.edit_bones.new('spine.001') + bone.head = 0.0000, -0.0205, 0.9957 + bone.tail = 0.0000, -0.0332, 1.0624 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine']] + bones['spine.001'] = bone.name + bone = arm.edit_bones.new('thigh.L') + bone.head = 0.0997, -0.0254, 0.9354 + bone.tail = 0.1233, -0.0260, 0.5027 + bone.roll = -0.0566 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine']] + bones['thigh.L'] = bone.name + bone = arm.edit_bones.new('thigh.R') + bone.head = -0.0997, -0.0254, 0.9354 + bone.tail = -0.1233, -0.0260, 0.5027 + bone.roll = 0.0566 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine']] + bones['thigh.R'] = bone.name + bone = arm.edit_bones.new('spine.002') + bone.head = 0.0000, -0.0332, 1.0624 + bone.tail = 0.0000, -0.0425, 1.1342 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine.001']] + bones['spine.002'] = bone.name + bone = arm.edit_bones.new('shin.L') + bone.head = 0.1233, -0.0260, 0.5027 + bone.tail = 0.1409, 0.0099, 0.0824 + bone.roll = -0.0384 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thigh.L']] + bones['shin.L'] = bone.name + bone = arm.edit_bones.new('shin.R') + bone.head = -0.1233, -0.0260, 0.5027 + bone.tail = -0.1409, 0.0099, 0.0824 + bone.roll = 0.0384 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thigh.R']] + bones['shin.R'] = bone.name + bone = arm.edit_bones.new('spine.003') + bone.head = 0.0000, -0.0425, 1.1342 + bone.tail = 0.0000, -0.0372, 1.2193 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine.002']] + bones['spine.003'] = bone.name + bone = arm.edit_bones.new('foot.L') + bone.head = 0.1409, 0.0099, 0.0824 + bone.tail = 0.1578, -0.1393, 0.0075 + bone.roll = -0.4102 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['shin.L']] + bones['foot.L'] = bone.name + bone = arm.edit_bones.new('foot.R') + bone.head = -0.1409, 0.0099, 0.0824 + bone.tail = -0.1578, -0.1393, 0.0075 + bone.roll = 0.4102 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['shin.R']] + bones['foot.R'] = bone.name + bone = arm.edit_bones.new('spine.007') + bone.head = 0.0000, -0.0372, 1.2193 + bone.tail = 0.0000, -0.0053, 1.4110 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine.003']] + bones['spine.007'] = bone.name + bone = arm.edit_bones.new('toe.L') + bone.head = 0.1578, -0.1393, 0.0075 + bone.tail = 0.1682, -0.2388, 0.0117 + bone.roll = -0.7566 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['foot.L']] + bones['toe.L'] = bone.name + bone = arm.edit_bones.new('heel.02.L') + bone.head = 0.1439, 0.0103, 0.0000 + bone.tail = 0.2239, 0.0103, 0.0000 + bone.roll = -0.0000 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['foot.L']] + bones['heel.02.L'] = bone.name + bone = arm.edit_bones.new('toe.R') + bone.head = -0.1578, -0.1393, 0.0075 + bone.tail = -0.1682, -0.2388, 0.0117 + bone.roll = 0.7566 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['foot.R']] + bones['toe.R'] = bone.name + bone = arm.edit_bones.new('heel.02.R') + bone.head = -0.1439, 0.0103, 0.0000 + bone.tail = -0.2239, 0.0103, 0.0000 + bone.roll = 0.0000 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['foot.R']] + bones['heel.02.R'] = bone.name + bone = arm.edit_bones.new('spine.008') + bone.head = 0.0000, -0.0053, 1.4110 + bone.tail = 0.0000, 0.0157, 1.5280 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine.007']] + bones['spine.008'] = bone.name + bone = arm.edit_bones.new('spine.004') + bone.head = 0.0000, 0.0157, 1.5280 + bone.tail = 0.0000, 0.0035, 1.5777 + bone.roll = 0.0000 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine.008']] + bones['spine.004'] = bone.name + bone = arm.edit_bones.new('shoulder.L') + bone.head = 0.0143, 0.0174, 1.4630 + bone.tail = 0.1901, 0.0256, 1.4358 + bone.roll = 0.4433 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine.008']] + bones['shoulder.L'] = bone.name + bone = arm.edit_bones.new('shoulder.R') + bone.head = -0.0143, 0.0174, 1.4630 + bone.tail = -0.1901, 0.0256, 1.4358 + bone.roll = -0.4433 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine.008']] + bones['shoulder.R'] = bone.name + bone = arm.edit_bones.new('breast.L') + bone.head = 0.0983, -0.1161, 1.3339 + bone.tail = 0.1165, -0.2435, 1.3375 + bone.roll = -0.3953 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine.008']] + bones['breast.L'] = bone.name + bone = arm.edit_bones.new('breast.R') + bone.head = -0.0983, -0.1161, 1.3339 + bone.tail = -0.1165, -0.2435, 1.3375 + bone.roll = 0.3953 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine.008']] + bones['breast.R'] = bone.name + bone = arm.edit_bones.new('spine.005') + bone.head = 0.0000, 0.0035, 1.5777 + bone.tail = 0.0000, -0.0066, 1.6258 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine.004']] + bones['spine.005'] = bone.name + bone = arm.edit_bones.new('upper_arm.L') + bone.head = 0.1901, 0.0256, 1.4358 + bone.tail = 0.3501, 0.0191, 1.2089 + bone.roll = 2.6290 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['shoulder.L']] + bones['upper_arm.L'] = bone.name + bone = arm.edit_bones.new('upper_arm.R') + bone.head = -0.1901, 0.0256, 1.4358 + bone.tail = -0.3501, 0.0191, 1.2089 + bone.roll = -2.6290 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['shoulder.R']] + bones['upper_arm.R'] = bone.name + bone = arm.edit_bones.new('spine.006') + bone.head = 0.0000, -0.0066, 1.6258 + bone.tail = 0.0000, -0.0017, 1.8234 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine.005']] + bones['spine.006'] = bone.name + bone = arm.edit_bones.new('forearm.L') + bone.head = 0.3501, 0.0191, 1.2089 + bone.tail = 0.4777, -0.1570, 1.0447 + bone.roll = 2.6064 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['upper_arm.L']] + bones['forearm.L'] = bone.name + bone = arm.edit_bones.new('forearm.R') + bone.head = -0.3501, 0.0191, 1.2089 + bone.tail = -0.4777, -0.1570, 1.0447 + bone.roll = -2.6064 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['upper_arm.R']] + bones['forearm.R'] = bone.name + bone = arm.edit_bones.new('hand.L') + bone.head = 0.4777, -0.1570, 1.0447 + bone.tail = 0.5265, -0.2198, 0.9922 + bone.roll = 2.5081 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['forearm.L']] + bones['hand.L'] = bone.name + bone = arm.edit_bones.new('hand.R') + bone.head = -0.4777, -0.1570, 1.0447 + bone.tail = -0.5265, -0.2198, 0.9922 + bone.roll = -2.5081 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['forearm.R']] + bones['hand.R'] = bone.name + bone = arm.edit_bones.new('palm.01.L') + bone.head = 0.4814, -0.1970, 1.0323 + bone.tail = 0.5053, -0.2373, 0.9968 + bone.roll = -1.5887 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.L']] + bones['palm.01.L'] = bone.name + bone = arm.edit_bones.new('palm.02.L') + bone.head = 0.4969, -0.1813, 1.0292 + bone.tail = 0.5265, -0.2198, 0.9922 + bone.roll = -1.8698 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.L']] + bones['palm.02.L'] = bone.name + bone = arm.edit_bones.new('palm.03.L') + bone.head = 0.5033, -0.1713, 1.0240 + bone.tail = 0.5369, -0.1978, 0.9872 + bone.roll = -2.2180 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.L']] + bones['palm.03.L'] = bone.name + bone = arm.edit_bones.new('palm.04.L') + bone.head = 0.5095, -0.1607, 1.0190 + bone.tail = 0.5354, -0.1763, 0.9797 + bone.roll = -2.1607 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.L']] + bones['palm.04.L'] = bone.name + bone = arm.edit_bones.new('palm.01.R') + bone.head = -0.4814, -0.1970, 1.0323 + bone.tail = -0.5053, -0.2373, 0.9968 + bone.roll = 1.5887 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.R']] + bones['palm.01.R'] = bone.name + bone = arm.edit_bones.new('palm.02.R') + bone.head = -0.4969, -0.1813, 1.0292 + bone.tail = -0.5265, -0.2198, 0.9922 + bone.roll = 1.8698 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.R']] + bones['palm.02.R'] = bone.name + bone = arm.edit_bones.new('palm.03.R') + bone.head = -0.5033, -0.1713, 1.0240 + bone.tail = -0.5369, -0.1978, 0.9872 + bone.roll = 2.2180 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.R']] + bones['palm.03.R'] = bone.name + bone = arm.edit_bones.new('palm.04.R') + bone.head = -0.5095, -0.1607, 1.0190 + bone.tail = -0.5354, -0.1763, 0.9797 + bone.roll = 2.1607 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.R']] + bones['palm.04.R'] = bone.name + bone = arm.edit_bones.new('palm.01.R.001') + bone.head = -0.4449, -0.2112, 0.9834 + bone.tail = -0.4688, -0.2515, 0.9479 + bone.roll = 1.7205 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.R']] + bones['palm.01.R.001'] = bone.name + bone = arm.edit_bones.new('f_index.01.L') + bone.head = 0.5053, -0.2373, 0.9968 + bone.tail = 0.5099, -0.2594, 0.9628 + bone.roll = -1.0508 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.01.L']] + bones['f_index.01.L'] = bone.name + bone = arm.edit_bones.new('thumb.01.L') + bone.head = 0.4623, -0.1850, 1.0296 + bone.tail = 0.4519, -0.2222, 1.0091 + bone.roll = 2.0516 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.01.L']] + bones['thumb.01.L'] = bone.name + bone = arm.edit_bones.new('f_middle.01.L') + bone.head = 0.5265, -0.2198, 0.9922 + bone.tail = 0.5297, -0.2427, 0.9460 + bone.roll = -1.0957 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.02.L']] + bones['f_middle.01.L'] = bone.name + bone = arm.edit_bones.new('f_ring.01.L') + bone.head = 0.5369, -0.1978, 0.9872 + bone.tail = 0.5447, -0.2169, 0.9419 + bone.roll = -1.4254 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.03.L']] + bones['f_ring.01.L'] = bone.name + bone = arm.edit_bones.new('f_pinky.01.L') + bone.head = 0.5354, -0.1763, 0.9797 + bone.tail = 0.5455, -0.1876, 0.9447 + bone.roll = -1.7761 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.04.L']] + bones['f_pinky.01.L'] = bone.name + bone = arm.edit_bones.new('f_index.01.R') + bone.head = -0.5053, -0.2373, 0.9968 + bone.tail = -0.5099, -0.2594, 0.9628 + bone.roll = 1.0508 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.01.R']] + bones['f_index.01.R'] = bone.name + bone = arm.edit_bones.new('thumb.01.R') + bone.head = -0.4623, -0.1850, 1.0296 + bone.tail = -0.4519, -0.2222, 1.0091 + bone.roll = -2.0516 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.01.R']] + bones['thumb.01.R'] = bone.name + bone = arm.edit_bones.new('f_middle.01.R') + bone.head = -0.5265, -0.2198, 0.9922 + bone.tail = -0.5297, -0.2427, 0.9460 + bone.roll = 1.0957 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.02.R']] + bones['f_middle.01.R'] = bone.name + bone = arm.edit_bones.new('f_ring.01.R') + bone.head = -0.5369, -0.1978, 0.9872 + bone.tail = -0.5447, -0.2169, 0.9419 + bone.roll = 1.4254 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.03.R']] + bones['f_ring.01.R'] = bone.name + bone = arm.edit_bones.new('f_pinky.01.R') + bone.head = -0.5354, -0.1763, 0.9797 + bone.tail = -0.5455, -0.1876, 0.9447 + bone.roll = 1.7761 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.04.R']] + bones['f_pinky.01.R'] = bone.name + bone = arm.edit_bones.new('f_index.02.L') + bone.head = 0.5099, -0.2594, 0.9628 + bone.tail = 0.5081, -0.2693, 0.9389 + bone.roll = -0.7441 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_index.01.L']] + bones['f_index.02.L'] = bone.name + bone = arm.edit_bones.new('thumb.02.L') + bone.head = 0.4519, -0.2222, 1.0091 + bone.tail = 0.4505, -0.2423, 0.9857 + bone.roll = 0.3206 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thumb.01.L']] + bones['thumb.02.L'] = bone.name + bone = arm.edit_bones.new('f_middle.02.L') + bone.head = 0.5297, -0.2427, 0.9460 + bone.tail = 0.5239, -0.2488, 0.9228 + bone.roll = -0.4900 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_middle.01.L']] + bones['f_middle.02.L'] = bone.name + bone = arm.edit_bones.new('f_ring.02.L') + bone.head = 0.5447, -0.2169, 0.9419 + bone.tail = 0.5415, -0.2225, 0.9201 + bone.roll = -0.9368 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_ring.01.L']] + bones['f_ring.02.L'] = bone.name + bone = arm.edit_bones.new('f_pinky.02.L') + bone.head = 0.5455, -0.1876, 0.9447 + bone.tail = 0.5436, -0.1920, 0.9248 + bone.roll = -1.2561 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_pinky.01.L']] + bones['f_pinky.02.L'] = bone.name + bone = arm.edit_bones.new('f_index.02.R') + bone.head = -0.5099, -0.2594, 0.9628 + bone.tail = -0.5081, -0.2693, 0.9389 + bone.roll = 0.7441 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_index.01.R']] + bones['f_index.02.R'] = bone.name + bone = arm.edit_bones.new('thumb.02.R') + bone.head = -0.4519, -0.2222, 1.0091 + bone.tail = -0.4505, -0.2423, 0.9857 + bone.roll = -0.3206 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thumb.01.R']] + bones['thumb.02.R'] = bone.name + bone = arm.edit_bones.new('f_middle.02.R') + bone.head = -0.5297, -0.2427, 0.9460 + bone.tail = -0.5239, -0.2488, 0.9228 + bone.roll = 0.4900 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_middle.01.R']] + bones['f_middle.02.R'] = bone.name + bone = arm.edit_bones.new('f_ring.02.R') + bone.head = -0.5447, -0.2169, 0.9419 + bone.tail = -0.5415, -0.2225, 0.9201 + bone.roll = 0.9368 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_ring.01.R']] + bones['f_ring.02.R'] = bone.name + bone = arm.edit_bones.new('f_pinky.02.R') + bone.head = -0.5455, -0.1876, 0.9447 + bone.tail = -0.5436, -0.1920, 0.9248 + bone.roll = 1.2561 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_pinky.01.R']] + bones['f_pinky.02.R'] = bone.name + bone = arm.edit_bones.new('f_index.03.L') + bone.head = 0.5081, -0.2693, 0.9389 + bone.tail = 0.5046, -0.2767, 0.9113 + bone.roll = -0.5305 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_index.02.L']] + bones['f_index.03.L'] = bone.name + bone = arm.edit_bones.new('thumb.03.L') + bone.head = 0.4505, -0.2423, 0.9857 + bone.tail = 0.4540, -0.2516, 0.9611 + bone.roll = 0.1726 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thumb.02.L']] + bones['thumb.03.L'] = bone.name + bone = arm.edit_bones.new('f_middle.03.L') + bone.head = 0.5239, -0.2488, 0.9228 + bone.tail = 0.5176, -0.2536, 0.8910 + bone.roll = -0.5997 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_middle.02.L']] + bones['f_middle.03.L'] = bone.name + bone = arm.edit_bones.new('f_ring.03.L') + bone.head = 0.5415, -0.2225, 0.9201 + bone.tail = 0.5326, -0.2269, 0.8878 + bone.roll = -0.7870 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_ring.02.L']] + bones['f_ring.03.L'] = bone.name + bone = arm.edit_bones.new('f_pinky.03.L') + bone.head = 0.5436, -0.1920, 0.9248 + bone.tail = 0.5390, -0.1957, 0.9013 + bone.roll = -1.1811 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_pinky.02.L']] + bones['f_pinky.03.L'] = bone.name + bone = arm.edit_bones.new('f_index.03.R') + bone.head = -0.5081, -0.2693, 0.9389 + bone.tail = -0.5046, -0.2767, 0.9113 + bone.roll = 0.5305 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_index.02.R']] + bones['f_index.03.R'] = bone.name + bone = arm.edit_bones.new('thumb.03.R') + bone.head = -0.4505, -0.2423, 0.9857 + bone.tail = -0.4540, -0.2516, 0.9611 + bone.roll = -0.1726 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thumb.02.R']] + bones['thumb.03.R'] = bone.name + bone = arm.edit_bones.new('f_middle.03.R') + bone.head = -0.5239, -0.2488, 0.9228 + bone.tail = -0.5176, -0.2536, 0.8910 + bone.roll = 0.5997 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_middle.02.R']] + bones['f_middle.03.R'] = bone.name + bone = arm.edit_bones.new('f_ring.03.R') + bone.head = -0.5415, -0.2225, 0.9201 + bone.tail = -0.5326, -0.2269, 0.8878 + bone.roll = 0.7870 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_ring.02.R']] + bones['f_ring.03.R'] = bone.name + bone = arm.edit_bones.new('f_pinky.03.R') + bone.head = -0.5436, -0.1920, 0.9248 + bone.tail = -0.5390, -0.1957, 0.9013 + bone.roll = 1.1811 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_pinky.02.R']] + bones['f_pinky.03.R'] = bone.name + + bpy.ops.object.mode_set(mode='OBJECT') + pbone = obj.pose.bones[bones['spine']] + pbone.rigify_type = 'spines.basic_spine' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.tweak_layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + try: + pbone.rigify_parameters.fk_layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + pbone = obj.pose.bones[bones['spine.001']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['thigh.L']] + pbone.rigify_type = 'limbs.super_limb' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.limb_type = "leg" + except AttributeError: + pass + try: + pbone.rigify_parameters.fk_layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + try: + pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + try: + pbone.rigify_parameters.segments = 3 + except AttributeError: + pass + pbone = obj.pose.bones[bones['thigh.R']] + pbone.rigify_type = 'limbs.super_limb' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.fk_layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + try: + pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + try: + pbone.rigify_parameters.limb_type = "leg" + except AttributeError: + pass + try: + pbone.rigify_parameters.segments = 3 + except AttributeError: + pass + pbone = obj.pose.bones[bones['spine.002']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['shin.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['shin.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['spine.003']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['foot.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['foot.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['spine.007']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['toe.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['heel.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['toe.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['heel.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['spine.008']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['spine.004']] + pbone.rigify_type = 'spines.super_head' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.connect_chain = True + except AttributeError: + pass + try: + pbone.rigify_parameters.tweak_layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + pbone = obj.pose.bones[bones['shoulder.L']] + pbone.rigify_type = 'basic.super_copy' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.make_widget = True + except AttributeError: + pass + try: + pbone.rigify_parameters.super_copy_widget_type = "shoulder" + except AttributeError: + pass + pbone = obj.pose.bones[bones['shoulder.R']] + pbone.rigify_type = 'basic.super_copy' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.make_widget = True + except AttributeError: + pass + try: + pbone.rigify_parameters.super_copy_widget_type = "shoulder" + except AttributeError: + pass + pbone = obj.pose.bones[bones['breast.L']] + pbone.rigify_type = 'basic.super_copy' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['breast.R']] + pbone.rigify_type = 'basic.super_copy' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['spine.005']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['upper_arm.L']] + pbone.rigify_type = 'limbs.super_limb' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + try: + pbone.rigify_parameters.fk_layers = [False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + try: + pbone.rigify_parameters.segments = 3 + except AttributeError: + pass + pbone = obj.pose.bones[bones['upper_arm.R']] + pbone.rigify_type = 'limbs.super_limb' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + try: + pbone.rigify_parameters.fk_layers = [False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + try: + pbone.rigify_parameters.segments = 3 + except AttributeError: + pass + pbone = obj.pose.bones[bones['spine.006']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['forearm.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['forearm.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['hand.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['hand.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['palm.01.L']] + pbone.rigify_type = 'limbs.super_palm' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['palm.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['palm.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['palm.04.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['palm.01.R']] + pbone.rigify_type = 'limbs.super_palm' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['palm.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['palm.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['palm.04.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['palm.01.R.001']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['f_index.01.L']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + pbone = obj.pose.bones[bones['thumb.01.L']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + pbone = obj.pose.bones[bones['f_middle.01.L']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + pbone = obj.pose.bones[bones['f_ring.01.L']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + pbone = obj.pose.bones[bones['f_pinky.01.L']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + pbone = obj.pose.bones[bones['f_index.01.R']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + pbone = obj.pose.bones[bones['thumb.01.R']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + pbone = obj.pose.bones[bones['f_middle.01.R']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + pbone = obj.pose.bones[bones['f_ring.01.R']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + pbone = obj.pose.bones[bones['f_pinky.01.R']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + pbone = obj.pose.bones[bones['f_index.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['thumb.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['f_middle.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['f_ring.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['f_pinky.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['f_index.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['thumb.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['f_middle.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['f_ring.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['f_pinky.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['f_index.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['thumb.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['f_middle.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['f_ring.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['f_pinky.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['f_index.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['thumb.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['f_middle.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['f_ring.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['f_pinky.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + + bpy.ops.object.mode_set(mode='EDIT') + for bone in arm.edit_bones: + bone.select = False + bone.select_head = False + bone.select_tail = False + for b in bones: + bone = arm.edit_bones[bones[b]] + bone.select = True + bone.select_head = True + bone.select_tail = True + bone.bbone_x = bone.bbone_z = bone.length * 0.05 + arm.edit_bones.active = bone + + arm.layers = [(x in [3, 5, 7, 10, 13, 16]) for x in range(32)] + + return bones + +if __name__ == "__main__": + create(bpy.context.active_object) diff --git a/src/addons/ue2rigify/resources/rig_templates/b3_6/male_mannequin_UE5/source_to_deform_links.json b/src/addons/ue2rigify/resources/rig_templates/b3_6/male_mannequin_UE5/source_to_deform_links.json new file mode 100644 index 00000000..c6d80599 --- /dev/null +++ b/src/addons/ue2rigify/resources/rig_templates/b3_6/male_mannequin_UE5/source_to_deform_links.json @@ -0,0 +1,548 @@ +[ + { + "from_node": "Source Rig upperarm_twist_01_l", + "to_node": "Control Rig DEF-upper_arm.L.001", + "from_socket": "upperarm_twist_01_l", + "to_socket": "DEF-upper_arm.L.001" + }, + { + "from_node": "Source Rig upperarm_twist_01_l", + "to_node": "Control Rig DEF-upper_arm.L.001", + "from_socket": "upperarm_twist_01_r", + "to_socket": "DEF-upper_arm.R.001" + }, + { + "from_node": "Source Rig upperarm_twist_02_l", + "to_node": "Control Rig DEF-upper_arm.L.002", + "from_socket": "upperarm_twist_02_l", + "to_socket": "DEF-upper_arm.L.002" + }, + { + "from_node": "Source Rig upperarm_twist_02_l", + "to_node": "Control Rig DEF-upper_arm.L.002", + "from_socket": "upperarm_twist_02_r", + "to_socket": "DEF-upper_arm.R.002" + }, + { + "from_node": "Source Rig lowerarm_l", + "to_node": "Control Rig DEF-forearm.L.001", + "from_socket": "lowerarm_l", + "to_socket": "DEF-forearm.L" + }, + { + "from_node": "Source Rig lowerarm_l", + "to_node": "Control Rig DEF-forearm.L.001", + "from_socket": "lowerarm_r", + "to_socket": "DEF-forearm.R" + }, + { + "from_node": "Source Rig upperarm_l", + "to_node": "Control Rig DEF-upper_arm.L.003", + "from_socket": "upperarm_l", + "to_socket": "DEF-upper_arm.L" + }, + { + "from_node": "Source Rig upperarm_l", + "to_node": "Control Rig DEF-upper_arm.L.003", + "from_socket": "upperarm_r", + "to_socket": "DEF-upper_arm.R" + }, + { + "from_node": "Source Rig upperarm_correctiveRoot_l.001", + "to_node": "Control Rig DEF-upper_arm.L.004", + "from_socket": "upperarm_correctiveRoot_l", + "to_socket": "DEF-upper_arm.L" + }, + { + "from_node": "Source Rig upperarm_correctiveRoot_l.001", + "to_node": "Control Rig DEF-upper_arm.L.004", + "from_socket": "upperarm_correctiveRoot_r", + "to_socket": "DEF-upper_arm.R" + }, + { + "from_node": "Source Rig hand_l", + "to_node": "Control Rig DEF-hand.L", + "from_socket": "hand_l", + "to_socket": "DEF-hand.L" + }, + { + "from_node": "Source Rig hand_l", + "to_node": "Control Rig DEF-hand.L", + "from_socket": "hand_r", + "to_socket": "DEF-hand.R" + }, + { + "from_node": "Source Rig lowerarm_twist_01_l", + "to_node": "Control Rig DEF-forearm.L.003", + "from_socket": "lowerarm_twist_01_l", + "to_socket": "DEF-forearm.L.002" + }, + { + "from_node": "Source Rig lowerarm_twist_01_l", + "to_node": "Control Rig DEF-forearm.L.003", + "from_socket": "lowerarm_twist_01_r", + "to_socket": "DEF-forearm.R.002" + }, + { + "from_node": "Source Rig lowerarm_twist_02_l", + "to_node": "Control Rig DEF-forearm.L.004", + "from_socket": "lowerarm_twist_02_l", + "to_socket": "DEF-forearm.L.001" + }, + { + "from_node": "Source Rig lowerarm_twist_02_l", + "to_node": "Control Rig DEF-forearm.L.004", + "from_socket": "lowerarm_twist_02_r", + "to_socket": "DEF-forearm.R.001" + }, + { + "from_node": "Source Rig thumb_01_l", + "to_node": "Control Rig DEF-thumb.01.L", + "from_socket": "thumb_01_l", + "to_socket": "DEF-thumb.01.L" + }, + { + "from_node": "Source Rig thumb_01_l", + "to_node": "Control Rig DEF-thumb.01.L", + "from_socket": "thumb_01_r", + "to_socket": "DEF-thumb.01.R" + }, + { + "from_node": "Source Rig thumb_02_l", + "to_node": "Control Rig DEF-thumb.02.L", + "from_socket": "thumb_02_l", + "to_socket": "DEF-thumb.02.L" + }, + { + "from_node": "Source Rig thumb_02_l", + "to_node": "Control Rig DEF-thumb.02.L", + "from_socket": "thumb_02_r", + "to_socket": "DEF-thumb.02.R" + }, + { + "from_node": "Source Rig thumb_03_l", + "to_node": "Control Rig DEF-thumb.03.L", + "from_socket": "thumb_03_l", + "to_socket": "DEF-thumb.03.L" + }, + { + "from_node": "Source Rig thumb_03_l", + "to_node": "Control Rig DEF-thumb.03.L", + "from_socket": "thumb_03_r", + "to_socket": "DEF-thumb.03.R" + }, + { + "from_node": "Source Rig index_metacarpal_l", + "to_node": "Control Rig DEF-palm.01.L", + "from_socket": "index_metacarpal_l", + "to_socket": "DEF-palm.01.L" + }, + { + "from_node": "Source Rig index_metacarpal_l", + "to_node": "Control Rig DEF-palm.01.L", + "from_socket": "index_metacarpal_r", + "to_socket": "DEF-palm.01.R" + }, + { + "from_node": "Source Rig index_01_l", + "to_node": "Control Rig DEF-f_index.01.L", + "from_socket": "index_01_l", + "to_socket": "DEF-f_index.01.L" + }, + { + "from_node": "Source Rig index_01_l", + "to_node": "Control Rig DEF-f_index.01.L", + "from_socket": "index_01_r", + "to_socket": "DEF-f_index.01.R" + }, + { + "from_node": "Source Rig index_02_l", + "to_node": "Control Rig DEF-f_index.02.L", + "from_socket": "index_02_l", + "to_socket": "DEF-f_index.02.L" + }, + { + "from_node": "Source Rig index_02_l", + "to_node": "Control Rig DEF-f_index.02.L", + "from_socket": "index_02_r", + "to_socket": "DEF-f_index.02.R" + }, + { + "from_node": "Source Rig index_03_l", + "to_node": "Control Rig DEF-f_index.03.L", + "from_socket": "index_03_l", + "to_socket": "DEF-f_index.03.L" + }, + { + "from_node": "Source Rig index_03_l", + "to_node": "Control Rig DEF-f_index.03.L", + "from_socket": "index_03_r", + "to_socket": "DEF-f_index.03.R" + }, + { + "from_node": "Source Rig middle_metacarpal_l", + "to_node": "Control Rig DEF-palm.02.L", + "from_socket": "middle_metacarpal_l", + "to_socket": "DEF-palm.02.L" + }, + { + "from_node": "Source Rig middle_metacarpal_l", + "to_node": "Control Rig DEF-palm.02.L", + "from_socket": "middle_metacarpal_r", + "to_socket": "DEF-palm.02.R" + }, + { + "from_node": "Source Rig middle_01_l", + "to_node": "Control Rig DEF-f_middle.01.L", + "from_socket": "middle_01_l", + "to_socket": "DEF-f_middle.01.L" + }, + { + "from_node": "Source Rig middle_01_l", + "to_node": "Control Rig DEF-f_middle.01.L", + "from_socket": "middle_01_r", + "to_socket": "DEF-f_middle.01.R" + }, + { + "from_node": "Source Rig middle_02_l", + "to_node": "Control Rig DEF-f_middle.02.L", + "from_socket": "middle_02_l", + "to_socket": "DEF-f_middle.02.L" + }, + { + "from_node": "Source Rig middle_02_l", + "to_node": "Control Rig DEF-f_middle.02.L", + "from_socket": "middle_02_r", + "to_socket": "DEF-f_middle.02.R" + }, + { + "from_node": "Source Rig middle_03_l", + "to_node": "Control Rig DEF-f_middle.03.L", + "from_socket": "middle_03_l", + "to_socket": "DEF-f_middle.03.L" + }, + { + "from_node": "Source Rig middle_03_l", + "to_node": "Control Rig DEF-f_middle.03.L", + "from_socket": "middle_03_r", + "to_socket": "DEF-f_middle.03.R" + }, + { + "from_node": "Source Rig ring_03_l", + "to_node": "Control Rig DEF-f_ring.03.L", + "from_socket": "ring_03_l", + "to_socket": "DEF-f_ring.03.L" + }, + { + "from_node": "Source Rig ring_03_l", + "to_node": "Control Rig DEF-f_ring.03.L", + "from_socket": "ring_03_r", + "to_socket": "DEF-f_ring.03.R" + }, + { + "from_node": "Source Rig thigh_l", + "to_node": "Control Rig DEF-thigh.L.001", + "from_socket": "thigh_l", + "to_socket": "DEF-thigh.L" + }, + { + "from_node": "Source Rig thigh_l", + "to_node": "Control Rig DEF-thigh.L.001", + "from_socket": "thigh_r", + "to_socket": "DEF-thigh.R" + }, + { + "from_node": "Source Rig lowerarm_correctiveRoot_l", + "to_node": "Control Rig DEF-forearm.L", + "from_socket": "lowerarm_correctiveRoot_l", + "to_socket": "DEF-forearm.L" + }, + { + "from_node": "Source Rig lowerarm_correctiveRoot_l", + "to_node": "Control Rig DEF-forearm.L", + "from_socket": "lowerarm_correctiveRoot_r", + "to_socket": "DEF-forearm.R" + }, + { + "from_node": "Source Rig thigh_twist_01_l", + "to_node": "Control Rig DEF-thigh.L.002", + "from_socket": "thigh_twist_01_l", + "to_socket": "DEF-thigh.L.001" + }, + { + "from_node": "Source Rig thigh_twist_01_r", + "to_node": "Control Rig DEF-thigh.R.001", + "from_socket": "thigh_twist_01_r", + "to_socket": "DEF-thigh.R.001" + }, + { + "from_node": "Source Rig thigh_twist_02_r", + "to_node": "Control Rig DEF-thigh.R.002", + "from_socket": "thigh_twist_02_r", + "to_socket": "DEF-thigh.R.002" + }, + { + "from_node": "Source Rig thigh_twist_02_l", + "to_node": "Control Rig DEF-thigh.L.003", + "from_socket": "thigh_twist_02_l", + "to_socket": "DEF-thigh.L.002" + }, + { + "from_node": "Source Rig calf_twist_02_l", + "to_node": "Control Rig DEF-shin.L.002", + "from_socket": "calf_twist_02_l", + "to_socket": "DEF-shin.L.001" + }, + { + "from_node": "Source Rig calf_twist_02_l", + "to_node": "Control Rig DEF-shin.L.002", + "from_socket": "calf_twist_02_r", + "to_socket": "DEF-shin.R.001" + }, + { + "from_node": "Source Rig calf_correctiveRoot_l.001", + "to_node": "Control Rig DEF-shin.L.003", + "from_socket": "calf_correctiveRoot_l", + "to_socket": "DEF-shin.L" + }, + { + "from_node": "Source Rig calf_correctiveRoot_l.001", + "to_node": "Control Rig DEF-shin.L.003", + "from_socket": "calf_correctiveRoot_r", + "to_socket": "DEF-shin.R" + }, + { + "from_node": "Source Rig calf_twist_01_l", + "to_node": "Control Rig DEF-shin.L.004", + "from_socket": "calf_twist_01_l", + "to_socket": "DEF-shin.L.002" + }, + { + "from_node": "Source Rig calf_twist_01_l", + "to_node": "Control Rig DEF-shin.L.004", + "from_socket": "calf_twist_01_r", + "to_socket": "DEF-shin.R.002" + }, + { + "from_node": "Source Rig foot_l", + "to_node": "Control Rig DEF-foot.L", + "from_socket": "foot_l", + "to_socket": "DEF-foot.L" + }, + { + "from_node": "Source Rig foot_l", + "to_node": "Control Rig DEF-foot.L", + "from_socket": "foot_r", + "to_socket": "DEF-foot.R" + }, + { + "from_node": "Source Rig ball_l", + "to_node": "Control Rig DEF-toe.L", + "from_socket": "ball_l", + "to_socket": "DEF-toe.L" + }, + { + "from_node": "Source Rig ball_l", + "to_node": "Control Rig DEF-toe.L", + "from_socket": "ball_r", + "to_socket": "DEF-toe.R" + }, + { + "from_node": "Source Rig calf_l.001", + "to_node": "Control Rig DEF-shin.L.001", + "from_socket": "calf_l", + "to_socket": "DEF-shin.L" + }, + { + "from_node": "Source Rig calf_l.001", + "to_node": "Control Rig DEF-shin.L.001", + "from_socket": "calf_r", + "to_socket": "DEF-shin.R" + }, + { + "from_node": "Source Rig thigh_correctiveRoot_l.001", + "to_node": "Control Rig DEF-thigh.L.004", + "from_socket": "thigh_correctiveRoot_l", + "to_socket": "DEF-thigh.L" + }, + { + "from_node": "Source Rig thigh_correctiveRoot_l.001", + "to_node": "Control Rig DEF-thigh.L.004", + "from_socket": "thigh_correctiveRoot_r", + "to_socket": "DEF-thigh.R" + }, + { + "from_node": "Source Rig pelvis", + "to_node": "Control Rig DEF-spine", + "from_socket": "pelvis", + "to_socket": "DEF-spine" + }, + { + "from_node": "Source Rig spine_01", + "to_node": "Control Rig DEF-spine.001", + "from_socket": "spine_01", + "to_socket": "DEF-spine.001" + }, + { + "from_node": "Source Rig spine_02", + "to_node": "Control Rig DEF-spine.002", + "from_socket": "spine_02", + "to_socket": "DEF-spine.002" + }, + { + "from_node": "Source Rig spine_03", + "to_node": "Control Rig DEF-spine.003", + "from_socket": "spine_03", + "to_socket": "DEF-spine.003" + }, + { + "from_node": "Source Rig spine_04", + "to_node": "Control Rig DEF-spine.007", + "from_socket": "spine_04", + "to_socket": "DEF-spine.007" + }, + { + "from_node": "Source Rig clavicle_pec_l", + "to_node": "Control Rig DEF-breast.L", + "from_socket": "clavicle_pec_l", + "to_socket": "DEF-breast.L" + }, + { + "from_node": "Source Rig clavicle_pec_l", + "to_node": "Control Rig DEF-breast.L", + "from_socket": "clavicle_pec_r", + "to_socket": "DEF-breast.R" + }, + { + "from_node": "Source Rig spine_05", + "to_node": "Control Rig DEF-spine.008", + "from_socket": "spine_05", + "to_socket": "DEF-spine.008" + }, + { + "from_node": "Source Rig clavicle_l", + "to_node": "Control Rig DEF-shoulder.L", + "from_socket": "clavicle_l", + "to_socket": "DEF-shoulder.L" + }, + { + "from_node": "Source Rig clavicle_l", + "to_node": "Control Rig DEF-shoulder.L", + "from_socket": "clavicle_r", + "to_socket": "DEF-shoulder.R" + }, + { + "from_node": "Source Rig neck_02", + "to_node": "Control Rig DEF-spine.005", + "from_socket": "neck_02", + "to_socket": "DEF-spine.005" + }, + { + "from_node": "Source Rig neck_01", + "to_node": "Control Rig DEF-spine.004", + "from_socket": "neck_01", + "to_socket": "DEF-spine.004" + }, + { + "from_node": "Source Rig head", + "to_node": "Control Rig DEF-spine.006", + "from_socket": "head", + "to_socket": "DEF-spine.006" + }, + { + "from_node": "root", + "to_node": "Control Rig root", + "from_socket": "object", + "to_socket": "root" + }, + { + "from_node": "Source Rig pinky_02_l", + "to_node": "Control Rig DEF-f_pinky.02.L", + "from_socket": "pinky_02_l", + "to_socket": "DEF-f_pinky.02.L" + }, + { + "from_node": "Source Rig pinky_02_l", + "to_node": "Control Rig DEF-f_pinky.02.L", + "from_socket": "pinky_02_r", + "to_socket": "DEF-f_pinky.02.R" + }, + { + "from_node": "Source Rig ring_01_l", + "to_node": "Control Rig DEF-f_ring.01.L.001", + "from_socket": "ring_01_l", + "to_socket": "DEF-f_ring.01.L" + }, + { + "from_node": "Source Rig ring_01_l", + "to_node": "Control Rig DEF-f_ring.01.L.001", + "from_socket": "ring_01_r", + "to_socket": "DEF-f_ring.01.R" + }, + { + "from_node": "Source Rig pinky_01_l", + "to_node": "Control Rig DEF-f_pinky.01.L", + "from_socket": "pinky_01_l", + "to_socket": "DEF-f_pinky.01.L" + }, + { + "from_node": "Source Rig pinky_01_l", + "to_node": "Control Rig DEF-f_pinky.01.L", + "from_socket": "pinky_01_r", + "to_socket": "DEF-f_pinky.01.R" + }, + { + "from_node": "Source Rig pinky_03_l", + "to_node": "Control Rig DEF-f_pinky.03.R", + "from_socket": "pinky_03_r", + "to_socket": "DEF-f_pinky.03.R" + }, + { + "from_node": "Source Rig pinky_03_l", + "to_node": "Control Rig DEF-f_pinky.03.R", + "from_socket": "pinky_03_l", + "to_socket": "DEF-f_pinky.03.L" + }, + { + "from_node": "Source Rig ik_hand_l", + "to_node": "Control Rig DEF-hand.L.001", + "from_socket": "ik_hand_l", + "to_socket": "DEF-hand.L" + }, + { + "from_node": "Source Rig ik_hand_r", + "to_node": "Control Rig DEF-hand.R", + "from_socket": "ik_hand_r", + "to_socket": "DEF-hand.R" + }, + { + "from_node": "Source Rig ik_hand_gun", + "to_node": "Control Rig DEF-hand.R.001", + "from_socket": "ik_hand_gun", + "to_socket": "DEF-hand.R" + }, + { + "from_node": "Source Rig ik_foot_l", + "to_node": "Control Rig DEF-foot.L.001", + "from_socket": "ik_foot_l", + "to_socket": "DEF-foot.L" + }, + { + "from_node": "Source Rig ik_foot_r", + "to_node": "Control Rig DEF-foot.R", + "from_socket": "ik_foot_r", + "to_socket": "DEF-foot.R" + }, + { + "from_node": "Source Rig ring_02_l", + "to_node": "Control Rig DEF-f_ring.02.R", + "from_socket": "ring_02_l", + "to_socket": "DEF-f_ring.02.L" + }, + { + "from_node": "Source Rig ring_02_l", + "to_node": "Control Rig DEF-f_ring.02.R", + "from_socket": "ring_02_r", + "to_socket": "DEF-f_ring.02.R" + } +] \ No newline at end of file diff --git a/src/addons/ue2rigify/resources/rig_templates/b3_6/male_mannequin_UE5/source_to_deform_nodes.json b/src/addons/ue2rigify/resources/rig_templates/b3_6/male_mannequin_UE5/source_to_deform_nodes.json new file mode 100644 index 00000000..b52451f7 --- /dev/null +++ b/src/addons/ue2rigify/resources/rig_templates/b3_6/male_mannequin_UE5/source_to_deform_nodes.json @@ -0,0 +1,2494 @@ +[ + { + "name": "Source Rig upperarm_twist_01_l", + "label": "Source Rig upperarm_twist_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 120.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upperarm_twist_01_l", + "upperarm_twist_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-upper_arm.L.001", + "label": "Control Rig DEF-upper_arm.L.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 120.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-upper_arm.L.001", + "DEF-upper_arm.R.001" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig upperarm_twist_02_l", + "label": "Source Rig upperarm_twist_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 240.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upperarm_twist_02_l", + "upperarm_twist_02_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-upper_arm.L.002", + "label": "Control Rig DEF-upper_arm.L.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 240.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-upper_arm.L.002", + "DEF-upper_arm.R.002" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig lowerarm_l", + "label": "Source Rig lowerarm_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 480.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "lowerarm_l", + "lowerarm_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-forearm.L.001", + "label": "Control Rig DEF-forearm.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 480.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-forearm.L", + "DEF-forearm.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig upperarm_l", + "label": "Source Rig upperarm_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 600.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upperarm_l", + "upperarm_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-upper_arm.L.003", + "label": "Control Rig DEF-upper_arm.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 600.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-upper_arm.L", + "DEF-upper_arm.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig upperarm_correctiveRoot_l.001", + "label": "Source Rig upperarm_correctiveRoot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 840.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upperarm_correctiveRoot_l", + "upperarm_correctiveRoot_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-upper_arm.L.004", + "label": "Control Rig DEF-upper_arm.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 840.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-upper_arm.L", + "DEF-upper_arm.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig hand_l", + "label": "Source Rig hand_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 960.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "hand_l", + "hand_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-hand.L", + "label": "Control Rig DEF-hand.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 960.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-hand.L", + "DEF-hand.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig lowerarm_twist_01_l", + "label": "Source Rig lowerarm_twist_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1080.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "lowerarm_twist_01_l", + "lowerarm_twist_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-forearm.L.003", + "label": "Control Rig DEF-forearm.L.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1080.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-forearm.L.002", + "DEF-forearm.R.002" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig lowerarm_twist_02_l", + "label": "Source Rig lowerarm_twist_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1200.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "lowerarm_twist_02_l", + "lowerarm_twist_02_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-forearm.L.004", + "label": "Control Rig DEF-forearm.L.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1200.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-forearm.L.001", + "DEF-forearm.R.001" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig thumb_01_l", + "label": "Source Rig thumb_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1320.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thumb_01_l", + "thumb_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-thumb.01.L", + "label": "Control Rig DEF-thumb.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1320.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thumb.01.L", + "DEF-thumb.01.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig thumb_02_l", + "label": "Source Rig thumb_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1440.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thumb_02_l", + "thumb_02_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-thumb.02.L", + "label": "Control Rig DEF-thumb.02.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1440.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thumb.02.L", + "DEF-thumb.02.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig thumb_03_l", + "label": "Source Rig thumb_03_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1560.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thumb_03_l", + "thumb_03_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-thumb.03.L", + "label": "Control Rig DEF-thumb.03.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1560.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thumb.03.L", + "DEF-thumb.03.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig index_metacarpal_l", + "label": "Source Rig index_metacarpal_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1680.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "index_metacarpal_l", + "index_metacarpal_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-palm.01.L", + "label": "Control Rig DEF-palm.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1680.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-palm.01.L", + "DEF-palm.01.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig index_01_l", + "label": "Source Rig index_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1800.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "index_01_l", + "index_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_index.01.L", + "label": "Control Rig DEF-f_index.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1800.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_index.01.L", + "DEF-f_index.01.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig index_02_l", + "label": "Source Rig index_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1920.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "index_02_l", + "index_02_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_index.02.L", + "label": "Control Rig DEF-f_index.02.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1920.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_index.02.L", + "DEF-f_index.02.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig index_03_l", + "label": "Source Rig index_03_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2040.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "index_03_l", + "index_03_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_index.03.L", + "label": "Control Rig DEF-f_index.03.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2040.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_index.03.L", + "DEF-f_index.03.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig middle_metacarpal_l", + "label": "Source Rig middle_metacarpal_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2160.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "middle_metacarpal_l", + "middle_metacarpal_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-palm.02.L", + "label": "Control Rig DEF-palm.02.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2160.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-palm.02.L", + "DEF-palm.02.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig middle_01_l", + "label": "Source Rig middle_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2280.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "middle_01_l", + "middle_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_middle.01.L", + "label": "Control Rig DEF-f_middle.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2280.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_middle.01.L", + "DEF-f_middle.01.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig middle_02_l", + "label": "Source Rig middle_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2400.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "middle_02_l", + "middle_02_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_middle.02.L", + "label": "Control Rig DEF-f_middle.02.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2400.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_middle.02.L", + "DEF-f_middle.02.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig middle_03_l", + "label": "Source Rig middle_03_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2520.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "middle_03_l", + "middle_03_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_middle.03.L", + "label": "Control Rig DEF-f_middle.03.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2520.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_middle.03.L", + "DEF-f_middle.03.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig ring_01_l", + "label": "Source Rig ring_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2640.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "ring_01_l", + "ring_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig ring_03_l", + "label": "Source Rig ring_03_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2880.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "ring_03_l", + "ring_03_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_ring.03.L", + "label": "Control Rig DEF-f_ring.03.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2880.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_ring.03.L", + "DEF-f_ring.03.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig thigh_l", + "label": "Source Rig thigh_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3480.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_l", + "thigh_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-thigh.L.001", + "label": "Control Rig DEF-thigh.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3480.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thigh.L", + "DEF-thigh.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig lowerarm_correctiveRoot_l", + "label": "Source Rig lowerarm_correctiveRoot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3600.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "lowerarm_correctiveRoot_l", + "lowerarm_correctiveRoot_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-forearm.L", + "label": "Control Rig DEF-forearm.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3600.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-forearm.L", + "DEF-forearm.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig thigh_twist_01_l", + "label": "Source Rig thigh_twist_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -281.4216003417969, + 4074.18212890625 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_twist_01_l" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-thigh.L.002", + "label": "Control Rig DEF-thigh.L.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 301.9412841796875, + 4069.910400390625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thigh.L.001" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig thigh_twist_01_r", + "label": "Source Rig thigh_twist_01_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -284.6238708496094, + 4002.360107421875 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_twist_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-thigh.R.001", + "label": "Control Rig DEF-thigh.R.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 307.329345703125, + 4002.27392578125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thigh.R.001" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-thigh.R.002", + "label": "Control Rig DEF-thigh.R.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 310.2611083984375, + 3933.42138671875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thigh.R.002" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig thigh_twist_02_r", + "label": "Source Rig thigh_twist_02_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -281.69219970703125, + 3936.43798828125 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_twist_02_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig thigh_twist_02_l", + "label": "Source Rig thigh_twist_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -289.0215759277344, + 4154.71484375 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_twist_02_l" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig calf_twist_02_l", + "label": "Source Rig calf_twist_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 4274.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "calf_twist_02_l", + "calf_twist_02_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-shin.L.002", + "label": "Control Rig DEF-shin.L.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 4274.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-shin.L.001", + "DEF-shin.R.001" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig calf_correctiveRoot_l.001", + "label": "Source Rig calf_correctiveRoot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 4394.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "calf_correctiveRoot_l", + "calf_correctiveRoot_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-shin.L.003", + "label": "Control Rig DEF-shin.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 4394.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-shin.L", + "DEF-shin.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig calf_twist_01_l", + "label": "Source Rig calf_twist_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 4514.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "calf_twist_01_l", + "calf_twist_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-shin.L.004", + "label": "Control Rig DEF-shin.L.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 4514.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-shin.L.002", + "DEF-shin.R.002" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig foot_l", + "label": "Source Rig foot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 4634.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "foot_l", + "foot_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-foot.L", + "label": "Control Rig DEF-foot.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 4634.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-foot.L", + "DEF-foot.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig ball_l", + "label": "Source Rig ball_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 4754.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "ball_l", + "ball_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-toe.L", + "label": "Control Rig DEF-toe.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 4754.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-toe.L", + "DEF-toe.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig calf_l.001", + "label": "Source Rig calf_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 4874.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "calf_l", + "calf_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-shin.L.001", + "label": "Control Rig DEF-shin.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 4874.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-shin.L", + "DEF-shin.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig thigh_correctiveRoot_l.001", + "label": "Source Rig thigh_correctiveRoot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 4994.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_correctiveRoot_l", + "thigh_correctiveRoot_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-thigh.L.004", + "label": "Control Rig DEF-thigh.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 4994.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thigh.L", + "DEF-thigh.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig pelvis", + "label": "Source Rig pelvis", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 5114.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "pelvis" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.001", + "label": "Control Rig DEF-spine.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 5234.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.001" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.002", + "label": "Control Rig DEF-spine.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 5354.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.002" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.003", + "label": "Control Rig DEF-spine.003", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 5474.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.003" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.007", + "label": "Control Rig DEF-spine.007", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 5594.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.007" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig clavicle_pec_l", + "label": "Source Rig clavicle_pec_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 5714.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "clavicle_pec_l", + "clavicle_pec_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-breast.L", + "label": "Control Rig DEF-breast.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 5714.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-breast.L", + "DEF-breast.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig spine_05", + "label": "Source Rig spine_05", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 5834.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_05" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.008", + "label": "Control Rig DEF-spine.008", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 5834.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.008" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig clavicle_l", + "label": "Source Rig clavicle_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 5954.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "clavicle_l", + "clavicle_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-shoulder.L", + "label": "Control Rig DEF-shoulder.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 5954.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-shoulder.L", + "DEF-shoulder.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig neck_02", + "label": "Source Rig neck_02", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 6074.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "neck_02" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.005", + "label": "Control Rig DEF-spine.005", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 6074.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.005" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig neck_01", + "label": "Source Rig neck_01", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 6194.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "neck_01" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.004", + "label": "Control Rig DEF-spine.004", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 6194.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.004" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig head", + "label": "Source Rig head", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 6314.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "head" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.006", + "label": "Control Rig DEF-spine.006", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 6314.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.006" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-thigh.L.003", + "label": "Control Rig DEF-thigh.L.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 298.5340881347656, + 4147.3037109375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thigh.L.002" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "root", + "label": "root", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -256.8031921386719, + 6428.2255859375 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "object" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig root", + "label": "Control Rig root", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 296.83050537109375, + 6425.21240234375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "root" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig spine_02", + "label": "Source Rig spine_02", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 5354.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_02" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig spine_03", + "label": "Source Rig spine_03", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 5474.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_03" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig spine_04", + "label": "Source Rig spine_04", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 5594.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_04" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig spine_01", + "label": "Source Rig spine_01", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 5234.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_01" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine", + "label": "Control Rig DEF-spine", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 298.4156799316406, + 5113.13134765625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig pinky_02_l", + "label": "Source Rig pinky_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3120.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "pinky_02_l", + "pinky_02_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig pinky_03_l", + "label": "Source Rig pinky_03_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3240.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "pinky_03_r", + "pinky_03_l" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_ring.01.L.001", + "label": "Control Rig DEF-f_ring.01.L.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 296.7509765625, + 2641.388427734375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_ring.01.L", + "DEF-f_ring.01.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_pinky.02.L", + "label": "Control Rig DEF-f_pinky.02.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 297.8045959472656, + 3123.689453125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_pinky.02.L", + "DEF-f_pinky.02.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig pinky_01_l", + "label": "Source Rig pinky_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3000.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "pinky_01_l", + "pinky_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_pinky.01.L", + "label": "Control Rig DEF-f_pinky.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 301.0512390136719, + 2999.224609375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_pinky.01.L", + "DEF-f_pinky.01.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_pinky.03.R", + "label": "Control Rig DEF-f_pinky.03.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 301.2749328613281, + 3243.97607421875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_pinky.03.R", + "DEF-f_pinky.03.L" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig ik_hand_l", + "label": "Source Rig ik_hand_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -248.22457885742188, + -49.42024230957031 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "ik_hand_l" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig ik_foot_l", + "label": "Source Rig ik_foot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -249.59979248046875, + -259.74298095703125 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "ik_foot_l" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig ik_foot_r", + "label": "Source Rig ik_foot_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -246.84939575195312, + -332.5998840332031 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "ik_foot_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig ik_hand_r", + "label": "Source Rig ik_hand_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -249.59979248046875, + -115.40389251708984 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "ik_hand_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig ik_hand_gun", + "label": "Source Rig ik_hand_gun", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -248.22459411621094, + -188.26075744628906 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "ik_hand_gun" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-hand.R.001", + "label": "Control Rig DEF-hand.R.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 270.2280578613281, + -192.38479614257812 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-hand.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-foot.L.001", + "label": "Control Rig DEF-foot.L.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 270.22802734375, + -267.9910583496094 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-foot.L" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-foot.R", + "label": "Control Rig DEF-foot.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 268.852783203125, + -335.3493347167969 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-foot.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-hand.L.001", + "label": "Control Rig DEF-hand.L.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 268.8526916503906, + -50.79493713378906 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-hand.L" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-hand.R", + "label": "Control Rig DEF-hand.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 268.85284423828125, + -119.52787017822266 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-hand.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig ring_02_l", + "label": "Source Rig ring_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2760.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "ring_02_l", + "ring_02_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_ring.02.R", + "label": "Control Rig DEF-f_ring.02.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 305.8134765625, + 2754.732666015625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_ring.02.R", + "DEF-f_ring.02.L" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + } +] \ No newline at end of file diff --git a/src/addons/ue2rigify/resources/rig_templates/b3_6/uefn_mannequin/control_metadata.json b/src/addons/ue2rigify/resources/rig_templates/b3_6/uefn_mannequin/control_metadata.json new file mode 100644 index 00000000..5bfd0a11 --- /dev/null +++ b/src/addons/ue2rigify/resources/rig_templates/b3_6/uefn_mannequin/control_metadata.json @@ -0,0 +1,2995 @@ +{ + "object": { + "show_in_front": false + }, + "armature": { + "show_names": false, + "show_bone_custom_shapes": true, + "show_bone_colors": true + }, + "bones": { + "root": { + "custom_shape": { + "name": "WGT-rig_root", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "VIS_upper_arm_ik_pole.L": { + "custom_shape": { + "name": "WGT-rig_VIS_upper_arm_ik_pole.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "VIS_upper_arm_ik_pole.R": { + "custom_shape": { + "name": "WGT-rig_VIS_upper_arm_ik_pole.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "VIS_thigh_ik_pole.L": { + "custom_shape": { + "name": "WGT-rig_VIS_thigh_ik_pole.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "VIS_thigh_ik_pole.R": { + "custom_shape": { + "name": "WGT-rig_VIS_thigh_ik_pole.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "torso": { + "custom_shape": { + "name": "WGT-rig_torso", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "hips": { + "custom_shape": { + "name": "WGT-rig_hips", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "chest": { + "custom_shape": { + "name": "WGT-rig_chest", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "spine_fk.001": { + "custom_shape": { + "name": "WGT-rig_spine_fk.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "spine_fk": { + "custom_shape": { + "name": "WGT-rig_spine_fk", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "tweak_spine": { + "custom_shape": { + "name": "WGT-rig_tweak_spine", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "toe.L": { + "custom_shape": { + "name": "WGT-rig_toe.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "foot_tweak.L": { + "custom_shape": { + "name": "WGT-rig_foot_tweak.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "shin_tweak.L": { + "custom_shape": { + "name": "WGT-rig_shin_tweak.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "shin_tweak.L.001": { + "custom_shape": { + "name": "WGT-rig_shin_tweak.L.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "shin_tweak.L.002": { + "custom_shape": { + "name": "WGT-rig_shin_tweak.L.002", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thigh_tweak.L.001": { + "custom_shape": { + "name": "WGT-rig_thigh_tweak.L.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thigh_tweak.L.002": { + "custom_shape": { + "name": "WGT-rig_thigh_tweak.L.002", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "toe.R": { + "custom_shape": { + "name": "WGT-rig_toe.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "foot_tweak.R": { + "custom_shape": { + "name": "WGT-rig_foot_tweak.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "shin_tweak.R": { + "custom_shape": { + "name": "WGT-rig_shin_tweak.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "shin_tweak.R.001": { + "custom_shape": { + "name": "WGT-rig_shin_tweak.R.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "shin_tweak.R.002": { + "custom_shape": { + "name": "WGT-rig_shin_tweak.R.002", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thigh_tweak.R.001": { + "custom_shape": { + "name": "WGT-rig_thigh_tweak.R.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thigh_tweak.R.002": { + "custom_shape": { + "name": "WGT-rig_thigh_tweak.R.002", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thigh_parent.L": { + "custom_shape": { + "name": "WGT-rig_thigh_parent.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thigh_fk.L": { + "custom_shape": { + "name": "WGT-rig_thigh_fk.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "shin_fk.L": { + "custom_shape": { + "name": "WGT-rig_shin_fk.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "foot_fk.L": { + "custom_shape": { + "name": "WGT-rig_foot_fk.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thigh_ik.L": { + "custom_shape": { + "name": "WGT-rig_thigh_ik.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thigh_tweak.L": { + "custom_shape": { + "name": "WGT-rig_thigh_tweak.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thigh_parent.R": { + "custom_shape": { + "name": "WGT-rig_thigh_parent.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thigh_fk.R": { + "custom_shape": { + "name": "WGT-rig_thigh_fk.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "shin_fk.R": { + "custom_shape": { + "name": "WGT-rig_shin_fk.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "foot_fk.R": { + "custom_shape": { + "name": "WGT-rig_foot_fk.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thigh_ik.R": { + "custom_shape": { + "name": "WGT-rig_thigh_ik.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thigh_tweak.R": { + "custom_shape": { + "name": "WGT-rig_thigh_tweak.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "tweak_spine.001": { + "custom_shape": { + "name": "WGT-rig_tweak_spine.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "spine_fk.002": { + "custom_shape": { + "name": "WGT-rig_spine_fk.002", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "tweak_spine.002": { + "custom_shape": { + "name": "WGT-rig_tweak_spine.002", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "spine_fk.003": { + "custom_shape": { + "name": "WGT-rig_spine_fk.003", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "tweak_spine.003": { + "custom_shape": { + "name": "WGT-rig_tweak_spine.003", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "spine_fk.007": { + "custom_shape": { + "name": "WGT-rig_spine_fk.007", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "tweak_spine.007": { + "custom_shape": { + "name": "WGT-rig_tweak_spine.007", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "spine_fk.008": { + "custom_shape": { + "name": "WGT-rig_spine_fk.008", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "neck": { + "custom_shape": { + "name": "WGT-rig_neck", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "head": { + "custom_shape": { + "name": "WGT-rig_head", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "tweak_spine.004": { + "custom_shape": { + "name": "WGT-rig_tweak_spine.004", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "tweak_spine.005": { + "custom_shape": { + "name": "WGT-rig_tweak_spine.005", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "tweak_spine.008": { + "custom_shape": { + "name": "WGT-rig_tweak_spine.008", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "hand_tweak.L": { + "custom_shape": { + "name": "WGT-rig_hand_tweak.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "forearm_tweak.L": { + "custom_shape": { + "name": "WGT-rig_forearm_tweak.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "forearm_tweak.L.001": { + "custom_shape": { + "name": "WGT-rig_forearm_tweak.L.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "forearm_tweak.L.002": { + "custom_shape": { + "name": "WGT-rig_forearm_tweak.L.002", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "upper_arm_tweak.L.001": { + "custom_shape": { + "name": "WGT-rig_upper_arm_tweak.L.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "upper_arm_tweak.L.002": { + "custom_shape": { + "name": "WGT-rig_upper_arm_tweak.L.002", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "upper_arm_parent.L": { + "custom_shape": { + "name": "WGT-rig_upper_arm_parent.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "upper_arm_fk.L": { + "custom_shape": { + "name": "WGT-rig_upper_arm_fk.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "forearm_fk.L": { + "custom_shape": { + "name": "WGT-rig_forearm_fk.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "hand_fk.L": { + "custom_shape": { + "name": "WGT-rig_hand_fk.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "upper_arm_ik.L": { + "custom_shape": { + "name": "WGT-rig_upper_arm_ik.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "upper_arm_tweak.L": { + "custom_shape": { + "name": "WGT-rig_upper_arm_tweak.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_index.01_master.L": { + "custom_shape": { + "name": "WGT-rig_f_index.01_master.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thumb.01_master.L": { + "custom_shape": { + "name": "WGT-rig_thumb.01_master.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_index.01.L": { + "custom_shape": { + "name": "WGT-rig_f_index.01.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_index.02.L": { + "custom_shape": { + "name": "WGT-rig_f_index.02.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_index.03.L": { + "custom_shape": { + "name": "WGT-rig_f_index.03.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_index.01.L.001": { + "custom_shape": { + "name": "WGT-rig_f_index.01.L.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thumb.01.L": { + "custom_shape": { + "name": "WGT-rig_thumb.01.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thumb.02.L": { + "custom_shape": { + "name": "WGT-rig_thumb.02.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thumb.03.L": { + "custom_shape": { + "name": "WGT-rig_thumb.03.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thumb.01.L.001": { + "custom_shape": { + "name": "WGT-rig_thumb.01.L.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_middle.01_master.L": { + "custom_shape": { + "name": "WGT-rig_f_middle.01_master.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_middle.01.L": { + "custom_shape": { + "name": "WGT-rig_f_middle.01.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_middle.02.L": { + "custom_shape": { + "name": "WGT-rig_f_middle.02.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_middle.03.L": { + "custom_shape": { + "name": "WGT-rig_f_middle.03.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_middle.01.L.001": { + "custom_shape": { + "name": "WGT-rig_f_middle.01.L.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_ring.01_master.L": { + "custom_shape": { + "name": "WGT-rig_f_ring.01_master.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_ring.01.L": { + "custom_shape": { + "name": "WGT-rig_f_ring.01.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_ring.02.L": { + "custom_shape": { + "name": "WGT-rig_f_ring.02.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_ring.03.L": { + "custom_shape": { + "name": "WGT-rig_f_ring.03.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_ring.01.L.001": { + "custom_shape": { + "name": "WGT-rig_f_ring.01.L.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_pinky.01_master.L": { + "custom_shape": { + "name": "WGT-rig_f_pinky.01_master.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_pinky.01.L": { + "custom_shape": { + "name": "WGT-rig_f_pinky.01.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_pinky.02.L": { + "custom_shape": { + "name": "WGT-rig_f_pinky.02.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_pinky.03.L": { + "custom_shape": { + "name": "WGT-rig_f_pinky.03.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_pinky.01.L.001": { + "custom_shape": { + "name": "WGT-rig_f_pinky.01.L.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "palm.L": { + "custom_shape": { + "name": "WGT-rig_palm.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "hand_tweak.R": { + "custom_shape": { + "name": "WGT-rig_hand_tweak.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "forearm_tweak.R": { + "custom_shape": { + "name": "WGT-rig_forearm_tweak.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "forearm_tweak.R.001": { + "custom_shape": { + "name": "WGT-rig_forearm_tweak.R.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "forearm_tweak.R.002": { + "custom_shape": { + "name": "WGT-rig_forearm_tweak.R.002", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "upper_arm_tweak.R.001": { + "custom_shape": { + "name": "WGT-rig_upper_arm_tweak.R.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "upper_arm_tweak.R.002": { + "custom_shape": { + "name": "WGT-rig_upper_arm_tweak.R.002", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "upper_arm_parent.R": { + "custom_shape": { + "name": "WGT-rig_upper_arm_parent.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "upper_arm_fk.R": { + "custom_shape": { + "name": "WGT-rig_upper_arm_fk.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "forearm_fk.R": { + "custom_shape": { + "name": "WGT-rig_forearm_fk.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "hand_fk.R": { + "custom_shape": { + "name": "WGT-rig_hand_fk.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "upper_arm_ik.R": { + "custom_shape": { + "name": "WGT-rig_upper_arm_ik.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "upper_arm_tweak.R": { + "custom_shape": { + "name": "WGT-rig_upper_arm_tweak.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_index.01_master.R": { + "custom_shape": { + "name": "WGT-rig_f_index.01_master.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thumb.01_master.R": { + "custom_shape": { + "name": "WGT-rig_thumb.01_master.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_index.01.R": { + "custom_shape": { + "name": "WGT-rig_f_index.01.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_index.02.R": { + "custom_shape": { + "name": "WGT-rig_f_index.02.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_index.03.R": { + "custom_shape": { + "name": "WGT-rig_f_index.03.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_index.01.R.001": { + "custom_shape": { + "name": "WGT-rig_f_index.01.R.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thumb.01.R": { + "custom_shape": { + "name": "WGT-rig_thumb.01.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thumb.02.R": { + "custom_shape": { + "name": "WGT-rig_thumb.02.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thumb.03.R": { + "custom_shape": { + "name": "WGT-rig_thumb.03.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thumb.01.R.001": { + "custom_shape": { + "name": "WGT-rig_thumb.01.R.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_middle.01_master.R": { + "custom_shape": { + "name": "WGT-rig_f_middle.01_master.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_middle.01.R": { + "custom_shape": { + "name": "WGT-rig_f_middle.01.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_middle.02.R": { + "custom_shape": { + "name": "WGT-rig_f_middle.02.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_middle.03.R": { + "custom_shape": { + "name": "WGT-rig_f_middle.03.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_middle.01.R.001": { + "custom_shape": { + "name": "WGT-rig_f_middle.01.R.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_ring.01_master.R": { + "custom_shape": { + "name": "WGT-rig_f_ring.01_master.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_ring.01.R": { + "custom_shape": { + "name": "WGT-rig_f_ring.01.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_ring.02.R": { + "custom_shape": { + "name": "WGT-rig_f_ring.02.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_ring.03.R": { + "custom_shape": { + "name": "WGT-rig_f_ring.03.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_ring.01.R.001": { + "custom_shape": { + "name": "WGT-rig_f_ring.01.R.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_pinky.01_master.R": { + "custom_shape": { + "name": "WGT-rig_f_pinky.01_master.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_pinky.01.R": { + "custom_shape": { + "name": "WGT-rig_f_pinky.01.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_pinky.02.R": { + "custom_shape": { + "name": "WGT-rig_f_pinky.02.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_pinky.03.R": { + "custom_shape": { + "name": "WGT-rig_f_pinky.03.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_pinky.01.R.001": { + "custom_shape": { + "name": "WGT-rig_f_pinky.01.R.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "palm.01.R": { + "custom_shape": { + "name": "WGT-rig_palm.01.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "breast.L": { + "custom_shape": { + "name": "WGT-rig_breast.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "breast.R": { + "custom_shape": { + "name": "WGT-rig_breast.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "shoulder.L": { + "custom_shape": { + "name": "WGT-rig_shoulder.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "shoulder.R": { + "custom_shape": { + "name": "WGT-rig_shoulder.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "hand_ik.L": { + "custom_shape": { + "name": "WGT-rig_hand_ik.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "upper_arm_ik_target.L": { + "custom_shape": { + "name": "WGT-rig_upper_arm_ik_target.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "hand_ik.R": { + "custom_shape": { + "name": "WGT-rig_hand_ik.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "upper_arm_ik_target.R": { + "custom_shape": { + "name": "WGT-rig_upper_arm_ik_target.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "foot_ik.L": { + "custom_shape": { + "name": "WGT-rig_foot_ik.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "foot_spin_ik.L": { + "custom_shape": { + "name": "WGT-rig_foot_spin_ik.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "foot_heel_ik.L": { + "custom_shape": { + "name": "WGT-rig_foot_heel_ik.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thigh_ik_target.L": { + "custom_shape": { + "name": "WGT-rig_thigh_ik_target.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "foot_ik.R": { + "custom_shape": { + "name": "WGT-rig_foot_ik.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "foot_spin_ik.R": { + "custom_shape": { + "name": "WGT-rig_foot_spin_ik.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "foot_heel_ik.R": { + "custom_shape": { + "name": "WGT-rig_foot_heel_ik.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thigh_ik_target.R": { + "custom_shape": { + "name": "WGT-rig_thigh_ik_target.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + } + }, + "bone_colors": {} +} \ No newline at end of file diff --git a/src/addons/ue2rigify/resources/rig_templates/b3_6/uefn_mannequin/fk_to_source_links.json b/src/addons/ue2rigify/resources/rig_templates/b3_6/uefn_mannequin/fk_to_source_links.json new file mode 100644 index 00000000..8f985594 --- /dev/null +++ b/src/addons/ue2rigify/resources/rig_templates/b3_6/uefn_mannequin/fk_to_source_links.json @@ -0,0 +1,512 @@ +[ + { + "from_node": "Control Rig root", + "to_node": "root", + "from_socket": "root", + "to_socket": "object" + }, + { + "from_node": "Control Rig shoulder.R", + "to_node": "Source Rig clavicle_r", + "from_socket": "shoulder.R", + "to_socket": "clavicle_r" + }, + { + "from_node": "Control Rig shoulder.R", + "to_node": "Source Rig clavicle_r", + "from_socket": "shoulder.L", + "to_socket": "clavicle_l" + }, + { + "from_node": "Control Rig neck", + "to_node": "Source Rig neck_02", + "from_socket": "neck", + "to_socket": "neck_02" + }, + { + "from_node": "Control Rig head", + "to_node": "Source Rig head", + "from_socket": "head", + "to_socket": "head" + }, + { + "from_node": "Control Rig spine_fk", + "to_node": "Source Rig spine_01.001", + "from_socket": "spine_fk", + "to_socket": "spine_01" + }, + { + "from_node": "Control Rig spine_fk.001", + "to_node": "Source Rig spine_02.001", + "from_socket": "spine_fk.001", + "to_socket": "spine_02" + }, + { + "from_node": "Control Rig spine_fk.002", + "to_node": "Source Rig spine_02", + "from_socket": "spine_fk.002", + "to_socket": "spine_02" + }, + { + "from_node": "Control Rig spine_fk.003", + "to_node": "Source Rig spine_03", + "from_socket": "spine_fk.003", + "to_socket": "spine_03" + }, + { + "from_node": "Control Rig spine_fk.007", + "to_node": "Source Rig spine_04", + "from_socket": "spine_fk.007", + "to_socket": "spine_04" + }, + { + "from_node": "Control Rig spine_fk.008", + "to_node": "Source Rig spine_05", + "from_socket": "spine_fk.008", + "to_socket": "spine_05" + }, + { + "from_node": "Control Rig tweak_spine", + "to_node": "Source Rig pelvis", + "from_socket": "tweak_spine", + "to_socket": "pelvis" + }, + { + "from_node": "Control Rig tweak_spine.001", + "to_node": "Source Rig spine_01", + "from_socket": "tweak_spine.001", + "to_socket": "spine_01" + }, + { + "from_node": "Control Rig thigh_tweak.R.001", + "to_node": "Source Rig thigh_twist_01_r", + "from_socket": "thigh_tweak.L.001", + "to_socket": "thigh_twist_01_l" + }, + { + "from_node": "Control Rig thigh_tweak.R.001", + "to_node": "Source Rig thigh_twist_01_r", + "from_socket": "thigh_tweak.R.001", + "to_socket": "thigh_twist_01_r" + }, + { + "from_node": "Control Rig shin_tweak.R", + "to_node": "Source Rig calf_r", + "from_socket": "shin_tweak.L", + "to_socket": "calf_l" + }, + { + "from_node": "Control Rig shin_tweak.R", + "to_node": "Source Rig calf_r", + "from_socket": "shin_tweak.R", + "to_socket": "calf_r" + }, + { + "from_node": "Control Rig shin_tweak.R.001", + "to_node": "Source Rig calf_twist_02_r", + "from_socket": "shin_tweak.L.001", + "to_socket": "calf_twist_02_l" + }, + { + "from_node": "Control Rig shin_tweak.R.001", + "to_node": "Source Rig calf_twist_02_r", + "from_socket": "shin_tweak.R.001", + "to_socket": "calf_twist_02_r" + }, + { + "from_node": "Control Rig shin_tweak.R.002", + "to_node": "Source Rig calf_twist_01_r", + "from_socket": "shin_tweak.L.002", + "to_socket": "calf_twist_01_l" + }, + { + "from_node": "Control Rig shin_tweak.R.002", + "to_node": "Source Rig calf_twist_01_r", + "from_socket": "shin_tweak.R.002", + "to_socket": "calf_twist_01_r" + }, + { + "from_node": "Control Rig toe.R", + "to_node": "Source Rig ball_r", + "from_socket": "toe.L", + "to_socket": "ball_l" + }, + { + "from_node": "Control Rig toe.R", + "to_node": "Source Rig ball_r", + "from_socket": "toe.R", + "to_socket": "ball_r" + }, + { + "from_node": "Control Rig foot_tweak.R", + "to_node": "Source Rig foot_r", + "from_socket": "foot_tweak.L", + "to_socket": "foot_l" + }, + { + "from_node": "Control Rig foot_tweak.R", + "to_node": "Source Rig foot_r", + "from_socket": "foot_tweak.R", + "to_socket": "foot_r" + }, + { + "from_node": "Control Rig foot_fk.R", + "to_node": "Source Rig foot_r.001", + "from_socket": "foot_fk.L", + "to_socket": "foot_l" + }, + { + "from_node": "Control Rig foot_fk.R", + "to_node": "Source Rig foot_r.001", + "from_socket": "foot_fk.R", + "to_socket": "foot_r" + }, + { + "from_node": "Control Rig shin_fk.R", + "to_node": "Source Rig calf_r.001", + "from_socket": "shin_fk.L", + "to_socket": "calf_l" + }, + { + "from_node": "Control Rig shin_fk.R", + "to_node": "Source Rig calf_r.001", + "from_socket": "shin_fk.R", + "to_socket": "calf_r" + }, + { + "from_node": "Control Rig thigh_tweak.R", + "to_node": "Control Rig thigh_fk.R.002", + "from_socket": "thigh_tweak.L", + "to_socket": "thigh_l" + }, + { + "from_node": "Control Rig thigh_tweak.R", + "to_node": "Control Rig thigh_fk.R.002", + "from_socket": "thigh_tweak.R", + "to_socket": "thigh_r" + }, + { + "from_node": "Control Rig thigh_fk.R", + "to_node": "Control Rig thigh_fk.R.001", + "from_socket": "thigh_fk.L", + "to_socket": "thigh_l" + }, + { + "from_node": "Control Rig thigh_fk.R", + "to_node": "Control Rig thigh_fk.R.001", + "from_socket": "thigh_fk.R", + "to_socket": "thigh_r" + }, + { + "from_node": "Control Rig f_pinky.01.L", + "to_node": "Source Rig pinky_01_l", + "from_socket": "f_pinky.03.L", + "to_socket": "pinky_03_l" + }, + { + "from_node": "Control Rig f_pinky.01.L", + "to_node": "Source Rig pinky_01_l", + "from_socket": "f_pinky.02.L", + "to_socket": "pinky_02_l" + }, + { + "from_node": "Control Rig f_pinky.01.L", + "to_node": "Source Rig pinky_01_l", + "from_socket": "f_pinky.01.L", + "to_socket": "pinky_01_l" + }, + { + "from_node": "Control Rig f_pinky.01.R", + "to_node": "Source Rig pinky_01_r", + "from_socket": "f_pinky.03.R", + "to_socket": "pinky_03_r" + }, + { + "from_node": "Control Rig f_pinky.01.R", + "to_node": "Source Rig pinky_01_r", + "from_socket": "f_pinky.02.R", + "to_socket": "pinky_02_r" + }, + { + "from_node": "Control Rig f_pinky.01.R", + "to_node": "Source Rig pinky_01_r", + "from_socket": "f_pinky.01.R", + "to_socket": "pinky_01_r" + }, + { + "from_node": "Control Rig f_ring.01.L", + "to_node": "Source Rig ring_01_l", + "from_socket": "f_ring.03.L", + "to_socket": "ring_03_l" + }, + { + "from_node": "Control Rig f_ring.01.L", + "to_node": "Source Rig ring_01_l", + "from_socket": "f_ring.02.L", + "to_socket": "ring_02_l" + }, + { + "from_node": "Control Rig f_ring.01.L", + "to_node": "Source Rig ring_01_l", + "from_socket": "f_ring.01.L", + "to_socket": "ring_01_l" + }, + { + "from_node": "Control Rig f_ring.01.R", + "to_node": "Source Rig ring_01_r", + "from_socket": "f_ring.03.R", + "to_socket": "ring_03_r" + }, + { + "from_node": "Control Rig f_ring.01.R", + "to_node": "Source Rig ring_01_r", + "from_socket": "f_ring.02.R", + "to_socket": "ring_02_r" + }, + { + "from_node": "Control Rig f_ring.01.R", + "to_node": "Source Rig ring_01_r", + "from_socket": "f_ring.01.R", + "to_socket": "ring_01_r" + }, + { + "from_node": "Control Rig f_middle.01.L", + "to_node": "Source Rig middle_01_l", + "from_socket": "f_middle.03.L", + "to_socket": "middle_03_l" + }, + { + "from_node": "Control Rig f_middle.01.L", + "to_node": "Source Rig middle_01_l", + "from_socket": "f_middle.02.L", + "to_socket": "middle_02_l" + }, + { + "from_node": "Control Rig f_middle.01.L", + "to_node": "Source Rig middle_01_l", + "from_socket": "f_middle.01.L", + "to_socket": "middle_01_l" + }, + { + "from_node": "Control Rig f_middle.01.R", + "to_node": "Source Rig middle_01_r", + "from_socket": "f_middle.03.R", + "to_socket": "middle_03_r" + }, + { + "from_node": "Control Rig f_middle.01.R", + "to_node": "Source Rig middle_01_r", + "from_socket": "f_middle.02.R", + "to_socket": "middle_02_r" + }, + { + "from_node": "Control Rig f_middle.01.R", + "to_node": "Source Rig middle_01_r", + "from_socket": "f_middle.01.R", + "to_socket": "middle_01_r" + }, + { + "from_node": "Control Rig f_index.01.L", + "to_node": "Source Rig index_01_l", + "from_socket": "f_index.03.L", + "to_socket": "index_03_l" + }, + { + "from_node": "Control Rig f_index.01.L", + "to_node": "Source Rig index_01_l", + "from_socket": "f_index.02.L", + "to_socket": "index_02_l" + }, + { + "from_node": "Control Rig f_index.01.L", + "to_node": "Source Rig index_01_l", + "from_socket": "f_index.01.L", + "to_socket": "index_01_l" + }, + { + "from_node": "Control Rig f_index.01.R", + "to_node": "Source Rig index_01_r", + "from_socket": "f_index.03.R", + "to_socket": "index_03_r" + }, + { + "from_node": "Control Rig f_index.01.R", + "to_node": "Source Rig index_01_r", + "from_socket": "f_index.02.R", + "to_socket": "index_02_r" + }, + { + "from_node": "Control Rig f_index.01.R", + "to_node": "Source Rig index_01_r", + "from_socket": "f_index.01.R", + "to_socket": "index_01_r" + }, + { + "from_node": "Control Rig thumb.01.L", + "to_node": "Source Rig thumb_01_l", + "from_socket": "thumb.03.L", + "to_socket": "thumb_03_l" + }, + { + "from_node": "Control Rig thumb.01.L", + "to_node": "Source Rig thumb_01_l", + "from_socket": "thumb.02.L", + "to_socket": "thumb_02_l" + }, + { + "from_node": "Control Rig thumb.01.L", + "to_node": "Source Rig thumb_01_l", + "from_socket": "thumb.01.L", + "to_socket": "thumb_01_l" + }, + { + "from_node": "Control Rig thumb.01.R", + "to_node": "Source Rig thumb_01_r", + "from_socket": "thumb.03.R", + "to_socket": "thumb_03_r" + }, + { + "from_node": "Control Rig thumb.01.R", + "to_node": "Source Rig thumb_01_r", + "from_socket": "thumb.02.R", + "to_socket": "thumb_02_r" + }, + { + "from_node": "Control Rig thumb.01.R", + "to_node": "Source Rig thumb_01_r", + "from_socket": "thumb.01.R", + "to_socket": "thumb_01_r" + }, + { + "from_node": "Control Rig upper_arm_tweak.R.001", + "to_node": "Source Rig upperarm_twist_01_r", + "from_socket": "upper_arm_tweak.L.001", + "to_socket": "upperarm_twist_01_l" + }, + { + "from_node": "Control Rig upper_arm_tweak.R.001", + "to_node": "Source Rig upperarm_twist_01_r", + "from_socket": "upper_arm_tweak.R.001", + "to_socket": "upperarm_twist_01_r" + }, + { + "from_node": "Control Rig upper_arm_tweak.R.002", + "to_node": "Source Rig upperarm_twist_02_r", + "from_socket": "upper_arm_tweak.L.002", + "to_socket": "upperarm_twist_02_l" + }, + { + "from_node": "Control Rig upper_arm_tweak.R.002", + "to_node": "Source Rig upperarm_twist_02_r", + "from_socket": "upper_arm_tweak.R.002", + "to_socket": "upperarm_twist_02_r" + }, + { + "from_node": "Control Rig hand_tweak.R", + "to_node": "Source Rig hand_r", + "from_socket": "hand_tweak.L", + "to_socket": "hand_l" + }, + { + "from_node": "Control Rig hand_tweak.R", + "to_node": "Source Rig hand_r", + "from_socket": "hand_tweak.R", + "to_socket": "hand_r" + }, + { + "from_node": "Control Rig forearm_tweak.R.002", + "to_node": "Source Rig lowerarm_twist_01_r", + "from_socket": "forearm_tweak.L.002", + "to_socket": "lowerarm_twist_01_l" + }, + { + "from_node": "Control Rig forearm_tweak.R.002", + "to_node": "Source Rig lowerarm_twist_01_r", + "from_socket": "forearm_tweak.R.002", + "to_socket": "lowerarm_twist_01_r" + }, + { + "from_node": "Control Rig forearm_tweak.R.001", + "to_node": "Source Rig lowerarm_twist_02_r", + "from_socket": "forearm_tweak.L.001", + "to_socket": "lowerarm_twist_02_l" + }, + { + "from_node": "Control Rig forearm_tweak.R.001", + "to_node": "Source Rig lowerarm_twist_02_r", + "from_socket": "forearm_tweak.R.001", + "to_socket": "lowerarm_twist_02_r" + }, + { + "from_node": "Control Rig hand_fk.R", + "to_node": "Source Rig hand_r.001", + "from_socket": "hand_fk.L", + "to_socket": "hand_l" + }, + { + "from_node": "Control Rig hand_fk.R", + "to_node": "Source Rig hand_r.001", + "from_socket": "hand_fk.R", + "to_socket": "hand_r" + }, + { + "from_node": "Control Rig forearm_fk.R", + "to_node": "Source Rig lowerarm_r", + "from_socket": "forearm_fk.L", + "to_socket": "lowerarm_l" + }, + { + "from_node": "Control Rig forearm_fk.R", + "to_node": "Source Rig lowerarm_r", + "from_socket": "forearm_fk.R", + "to_socket": "lowerarm_r" + }, + { + "from_node": "Control Rig upper_arm_tweak.R", + "to_node": "Source Rig upperarm_twist_01_r.002", + "from_socket": "upper_arm_tweak.L", + "to_socket": "upperarm_twist_01_l" + }, + { + "from_node": "Control Rig upper_arm_tweak.R", + "to_node": "Source Rig upperarm_twist_01_r.002", + "from_socket": "upper_arm_tweak.R", + "to_socket": "upperarm_twist_01_r" + }, + { + "from_node": "Control Rig upper_arm_fk.R", + "to_node": "Source Rig upperarm_r", + "from_socket": "upper_arm_fk.L", + "to_socket": "upperarm_l" + }, + { + "from_node": "Control Rig upper_arm_fk.R", + "to_node": "Source Rig upperarm_r", + "from_socket": "upper_arm_fk.R", + "to_socket": "upperarm_r" + }, + { + "from_node": "Control Rig hand_ik.R", + "to_node": "Source Rig ik_hand_r", + "from_socket": "hand_ik.L", + "to_socket": "ik_hand_l" + }, + { + "from_node": "Control Rig hand_ik.R", + "to_node": "Source Rig ik_hand_r", + "from_socket": "hand_ik.R", + "to_socket": "ik_hand_r" + }, + { + "from_node": "Control Rig foot_ik.R", + "to_node": "Source Rig ik_foot_r", + "from_socket": "foot_ik.L", + "to_socket": "ik_foot_l" + }, + { + "from_node": "Control Rig foot_ik.R", + "to_node": "Source Rig ik_foot_r", + "from_socket": "foot_ik.R", + "to_socket": "ik_foot_r" + } +] \ No newline at end of file diff --git a/src/addons/ue2rigify/resources/rig_templates/b3_6/uefn_mannequin/fk_to_source_nodes.json b/src/addons/ue2rigify/resources/rig_templates/b3_6/uefn_mannequin/fk_to_source_nodes.json new file mode 100644 index 00000000..6fbbf601 --- /dev/null +++ b/src/addons/ue2rigify/resources/rig_templates/b3_6/uefn_mannequin/fk_to_source_nodes.json @@ -0,0 +1,1978 @@ +[ + { + "name": "Control Rig tweak_spine", + "label": "Control Rig tweak_spine", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -337.4118347167969, + 1576.3341064453125 + ], + "width": 188.047119140625, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "tweak_spine" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig tweak_spine.001", + "label": "Control Rig tweak_spine.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -352.9218444824219, + 1684.91259765625 + ], + "width": 203.6903076171875, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "tweak_spine.001" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig spine_01", + "label": "Source Rig spine_01", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -80.28257751464844, + 1684.912353515625 + ], + "width": 194.7513427734375, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "spine_01" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig pelvis", + "label": "Source Rig pelvis", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -63.77410888671875, + 1575.55517578125 + ], + "width": 183.57785034179688, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "pelvis" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig spine_fk.008", + "label": "Control Rig spine_fk.008", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -347.3382873535156, + 1375.8642578125 + ], + "width": 193.63421630859375, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_fk.008" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig spine_fk.007", + "label": "Control Rig spine_fk.007", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -343.9861145019531, + 1275.41162109375 + ], + "width": 189.1646728515625, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_fk.007" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig spine_fk.003", + "label": "Control Rig spine_fk.003", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -348.4556579589844, + 1167.14599609375 + ], + "width": 192.516845703125, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_fk.003" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig spine_fk.002", + "label": "Control Rig spine_fk.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -346.2208557128906, + 1070.0419921875 + ], + "width": 189.16470336914062, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_fk.002" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig spine_fk.001", + "label": "Control Rig spine_fk.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -347.3382263183594, + 982.9830322265625 + ], + "width": 188.04733276367188, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_fk.001" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig spine_fk", + "label": "Control Rig spine_fk", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -343.9864807128906, + 883.646484375 + ], + "width": 185.8128662109375, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_fk" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig head", + "label": "Control Rig head", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -303.76055908203125, + 760.8717041015625 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "head" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig neck", + "label": "Control Rig neck", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -299.2909851074219, + 669.346923828125 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "neck" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig spine_05", + "label": "Source Rig spine_05", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -36.94643020629883, + 1376.9364013671875 + ], + "width": 185.81268310546875, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "spine_05" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig spine_04", + "label": "Source Rig spine_04", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -35.73052978515625, + 1274.58740234375 + ], + "width": 186.93008422851562, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "spine_04" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig spine_03", + "label": "Source Rig spine_03", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -30.1436767578125, + 1165.2052001953125 + ], + "width": 195.86917114257812, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "spine_03" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig spine_02", + "label": "Source Rig spine_02", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -34.61314010620117, + 1070.3330078125 + ], + "width": 208.16036987304688, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "spine_02" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig spine_02.001", + "label": "Source Rig spine_02.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -35.50727844238281, + 984.0518188476562 + ], + "width": 208.16036987304688, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "spine_02" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig spine_01.001", + "label": "Source Rig spine_01.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -33.4871826171875, + 886.3089599609375 + ], + "width": 203.69110107421875, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "spine_01" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig head", + "label": "Source Rig head", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -31.25241470336914, + 763.53271484375 + ], + "width": 203.69110107421875, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "head" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig neck_02", + "label": "Source Rig neck_02", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -14.49163818359375, + 669.7763671875 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "neck_02" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig shoulder.R", + "label": "Control Rig shoulder.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -336.0314636230469, + 536.2474365234375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "shoulder.L", + "shoulder.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig clavicle_r", + "label": "Source Rig clavicle_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -29.899250030517578, + 538.479736328125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "clavicle_l", + "clavicle_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig root", + "label": "Control Rig root", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -299.978515625, + 384.45086669921875 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "root" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "root", + "label": "root", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -19.57404327392578, + 385.56695556640625 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "object" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig thigh_tweak.R.001", + "label": "Control Rig thigh_tweak.R.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -354.6676025390625, + 237.67697143554688 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_tweak.L.001", + "thigh_tweak.R.001" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig thigh_twist_01_r", + "label": "Source Rig thigh_twist_01_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -41.81458282470703, + 237.677001953125 + ], + "width": 250.271728515625, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "thigh_twist_01_l", + "thigh_twist_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig shin_tweak.R", + "label": "Control Rig shin_tweak.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -363.5023193359375, + -94.82408142089844 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "shin_tweak.L", + "shin_tweak.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig calf_r", + "label": "Source Rig calf_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -35.618988037109375, + -95.38214874267578 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "calf_l", + "calf_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig shin_tweak.R.001", + "label": "Control Rig shin_tweak.R.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -363.9718933105469, + -187.82012939453125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "shin_tweak.L.001", + "shin_tweak.R.001" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig calf_twist_02_r", + "label": "Source Rig calf_twist_02_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -48.37723922729492, + -187.26205444335938 + ], + "width": 236.86590576171875, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "calf_twist_02_l", + "calf_twist_02_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig shin_tweak.R.002", + "label": "Control Rig shin_tweak.R.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -356.15185546875, + -271.53131103515625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "shin_tweak.L.002", + "shin_tweak.R.002" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig calf_twist_01_r", + "label": "Source Rig calf_twist_01_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -29.94425392150879, + -272.64752197265625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "calf_twist_01_l", + "calf_twist_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig toe.R", + "label": "Control Rig toe.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -371.23333740234375, + -599.679931640625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "toe.L", + "toe.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig ball_r", + "label": "Source Rig ball_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -38.32283401489258, + -598.5638427734375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "ball_l", + "ball_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig foot_tweak.R", + "label": "Control Rig foot_tweak.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -370.1162109375, + -707.388427734375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "foot_tweak.L", + "foot_tweak.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig foot_r", + "label": "Source Rig foot_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -34.971370697021484, + -706.830322265625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "foot_l", + "foot_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig foot_r.001", + "label": "Source Rig foot_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -40.467674255371094, + -822.43017578125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "foot_l", + "foot_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig foot_fk.R", + "label": "Control Rig foot_fk.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -365.07623291015625, + -823.197021484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "foot_fk.L", + "foot_fk.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig shin_fk.R", + "label": "Control Rig shin_fk.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -357.2562561035156, + -930.90576171875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "shin_fk.L", + "shin_fk.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig calf_r.001", + "label": "Source Rig calf_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -44.64667510986328, + -930.4466552734375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "calf_l", + "calf_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig thigh_fk.R", + "label": "Control Rig thigh_fk.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -356.512939453125, + -1307.2210693359375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_fk.L", + "thigh_fk.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig thigh_fk.R.001", + "label": "Control Rig thigh_fk.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -59.350826263427734, + -1305.5467529296875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "thigh_l", + "thigh_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig thigh_tweak.R", + "label": "Control Rig thigh_tweak.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -357.66937255859375, + -1190.216064453125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_tweak.L", + "thigh_tweak.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig thigh_fk.R.002", + "label": "Control Rig thigh_fk.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -61.10052490234375, + -1189.63623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "thigh_l", + "thigh_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_pinky.01.L", + "label": "Control Rig f_pinky.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -358.53973388671875, + -1488.48486328125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_pinky.03.L", + "f_pinky.02.L", + "f_pinky.01.L" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig pinky_01_l", + "label": "Source Rig pinky_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -64.76679229736328, + -1486.7454833984375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "pinky_03_l", + "pinky_02_l", + "pinky_01_l" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_pinky.01.R", + "label": "Control Rig f_pinky.01.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -353.31707763671875, + -1601.540771484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_pinky.03.R", + "f_pinky.02.R", + "f_pinky.01.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig pinky_01_r", + "label": "Source Rig pinky_01_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -56.93288040161133, + -1600.671142578125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "pinky_03_r", + "pinky_02_r", + "pinky_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_ring.01.L", + "label": "Control Rig f_ring.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -357.66925048828125, + -1718.94482421875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_ring.03.L", + "f_ring.02.L", + "f_ring.01.L" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig ring_01_l", + "label": "Source Rig ring_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -66.94288635253906, + -1716.7706298828125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "ring_03_l", + "ring_02_l", + "ring_01_l" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_ring.01.R", + "label": "Control Rig f_ring.01.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -356.36358642578125, + -1824.608642578125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_ring.03.R", + "f_ring.02.R", + "f_ring.01.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig ring_01_r", + "label": "Source Rig ring_01_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -59.54413604736328, + -1824.608642578125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "ring_03_r", + "ring_02_r", + "ring_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_middle.01.L", + "label": "Control Rig f_middle.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -364.8900451660156, + -1942.6514892578125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_middle.03.L", + "f_middle.02.L", + "f_middle.01.L" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig middle_01_l", + "label": "Source Rig middle_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -61.122711181640625, + -1943.5211181640625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "middle_03_l", + "middle_02_l", + "middle_01_l" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_middle.01.R", + "label": "Control Rig f_middle.01.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -361.9662780761719, + -2068.75244140625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_middle.03.R", + "f_middle.02.R", + "f_middle.01.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig middle_01_r", + "label": "Source Rig middle_01_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -66.50585174560547, + -2068.75244140625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "middle_03_r", + "middle_02_r", + "middle_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_index.01.L", + "label": "Control Rig f_index.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -356.7993469238281, + -2195.38720703125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_index.03.L", + "f_index.02.L", + "f_index.01.L" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig index_01_l", + "label": "Source Rig index_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -56.827842712402344, + -2195.38720703125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "index_03_l", + "index_02_l", + "index_01_l" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_index.01.R", + "label": "Control Rig f_index.01.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -349.29522705078125, + -2311.052490234375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_index.03.R", + "f_index.02.R", + "f_index.01.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig index_01_r", + "label": "Source Rig index_01_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -62.05046463012695, + -2308.878173828125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "index_03_r", + "index_02_r", + "index_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig thumb.01.L", + "label": "Control Rig thumb.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -350.60089111328125, + -2447.154296875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thumb.03.L", + "thumb.02.L", + "thumb.01.L" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig thumb_01_l", + "label": "Source Rig thumb_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -63.35609436035156, + -2445.849853515625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "thumb_03_l", + "thumb_02_l", + "thumb_01_l" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig thumb.01.R", + "label": "Control Rig thumb.01.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -350.6009216308594, + -2562.8193359375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thumb.03.R", + "thumb.02.R", + "thumb.01.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig thumb_01_r", + "label": "Source Rig thumb_01_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -59.87437057495117, + -2564.558349609375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "thumb_03_r", + "thumb_02_r", + "thumb_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig upper_arm_tweak.R.001", + "label": "Control Rig upper_arm_tweak.R.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -354.4617614746094, + -2791.53515625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upper_arm_tweak.L.001", + "upper_arm_tweak.R.001" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig upperarm_twist_01_r", + "label": "Source Rig upperarm_twist_01_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -58.077232360839844, + -2789.578125 + ], + "width": 310.10198974609375, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "upperarm_twist_01_l", + "upperarm_twist_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig upper_arm_tweak.R.002", + "label": "Control Rig upper_arm_tweak.R.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -350.54473876953125, + -2888.067138671875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upper_arm_tweak.L.002", + "upper_arm_tweak.R.002" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig upperarm_twist_02_r", + "label": "Source Rig upperarm_twist_02_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -67.21691131591797, + -2889.37158203125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "upperarm_twist_02_l", + "upperarm_twist_02_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig hand_tweak.R", + "label": "Control Rig hand_tweak.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -357.0730285644531, + -3038.084228515625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "hand_tweak.L", + "hand_tweak.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig hand_r", + "label": "Source Rig hand_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -63.95277404785156, + -3036.779296875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "hand_l", + "hand_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig forearm_tweak.R.002", + "label": "Control Rig forearm_tweak.R.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -367.5182800292969, + -3212.885498046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "forearm_tweak.L.002", + "forearm_tweak.R.002" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig lowerarm_twist_01_r", + "label": "Source Rig lowerarm_twist_01_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -74.39806365966797, + -3214.8427734375 + ], + "width": 276.47100830078125, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "lowerarm_twist_01_l", + "lowerarm_twist_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig forearm_tweak.R.001", + "label": "Control Rig forearm_tweak.R.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -330.073486328125, + -3381.75 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "forearm_tweak.L.001", + "forearm_tweak.R.001" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig lowerarm_twist_02_r", + "label": "Source Rig lowerarm_twist_02_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -43.387210845947266, + -3380.298095703125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "lowerarm_twist_02_l", + "lowerarm_twist_02_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig hand_fk.R", + "label": "Control Rig hand_fk.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -326.7447814941406, + -3548.134765625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "hand_fk.L", + "hand_fk.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig hand_r.001", + "label": "Source Rig hand_r.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -43.250946044921875, + -3546.701904296875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "hand_l", + "hand_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig forearm_fk.R", + "label": "Control Rig forearm_fk.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -327.150390625, + -3720.041259765625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "forearm_fk.L", + "forearm_fk.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig lowerarm_r", + "label": "Source Rig lowerarm_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -37.99358367919922, + -3719.0859375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "lowerarm_l", + "lowerarm_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig upper_arm_tweak.R", + "label": "Control Rig upper_arm_tweak.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -341.4887390136719, + -3884.30712890625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upper_arm_tweak.L", + "upper_arm_tweak.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig upperarm_twist_01_r.002", + "label": "Source Rig upperarm_twist_01_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -64.9507064819336, + -3883.019775390625 + ], + "width": 310.10198974609375, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "upperarm_twist_01_l", + "upperarm_twist_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig upper_arm_fk.R", + "label": "Control Rig upper_arm_fk.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -338.63885498046875, + -4074.45166015625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upper_arm_fk.L", + "upper_arm_fk.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig upperarm_r", + "label": "Source Rig upperarm_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -4.193665504455566, + -4073.799560546875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "upperarm_l", + "upperarm_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig hand_ik.R", + "label": "Control Rig hand_ik.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -349.4568176269531, + -4358.587890625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "hand_ik.L", + "hand_ik.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig ik_hand_r", + "label": "Source Rig ik_hand_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 7.013830184936523, + -4358.58740234375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "ik_hand_l", + "ik_hand_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig foot_ik.R", + "label": "Control Rig foot_ik.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -354.0269775390625, + -4543.83935546875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "foot_ik.L", + "foot_ik.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig ik_foot_r", + "label": "Source Rig ik_foot_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 7.013830184936523, + -4539.27294921875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "ik_foot_l", + "ik_foot_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + } +] \ No newline at end of file diff --git a/src/addons/ue2rigify/resources/rig_templates/b3_6/uefn_mannequin/metarig.py b/src/addons/ue2rigify/resources/rig_templates/b3_6/uefn_mannequin/metarig.py new file mode 100644 index 00000000..7963b713 --- /dev/null +++ b/src/addons/ue2rigify/resources/rig_templates/b3_6/uefn_mannequin/metarig.py @@ -0,0 +1,1338 @@ +import bpy + +from rna_prop_ui import rna_idprop_ui_create + +from mathutils import Color + + +def create(obj): # noqa + # generated by rigify.utils.write_metarig + bpy.ops.object.mode_set(mode='EDIT') + arm = obj.data + + for i in range(6): + arm.rigify_colors.add() + + arm.rigify_colors[0].name = "Root" + arm.rigify_colors[0].active = Color((0.5490, 1.0000, 1.0000)) + arm.rigify_colors[0].normal = Color((0.4353, 0.1843, 0.4157)) + arm.rigify_colors[0].select = Color((0.3137, 0.7843, 1.0000)) + arm.rigify_colors[0].standard_colors_lock = True + arm.rigify_colors[1].name = "IK" + arm.rigify_colors[1].active = Color((0.5490, 1.0000, 1.0000)) + arm.rigify_colors[1].normal = Color((0.6039, 0.0000, 0.0000)) + arm.rigify_colors[1].select = Color((0.3137, 0.7843, 1.0000)) + arm.rigify_colors[1].standard_colors_lock = True + arm.rigify_colors[2].name = "Special" + arm.rigify_colors[2].active = Color((0.5490, 1.0000, 1.0000)) + arm.rigify_colors[2].normal = Color((0.9569, 0.7882, 0.0471)) + arm.rigify_colors[2].select = Color((0.3137, 0.7843, 1.0000)) + arm.rigify_colors[2].standard_colors_lock = True + arm.rigify_colors[3].name = "Tweak" + arm.rigify_colors[3].active = Color((0.5490, 1.0000, 1.0000)) + arm.rigify_colors[3].normal = Color((0.0392, 0.2118, 0.5804)) + arm.rigify_colors[3].select = Color((0.3137, 0.7843, 1.0000)) + arm.rigify_colors[3].standard_colors_lock = True + arm.rigify_colors[4].name = "FK" + arm.rigify_colors[4].active = Color((0.5490, 1.0000, 1.0000)) + arm.rigify_colors[4].normal = Color((0.1176, 0.5686, 0.0353)) + arm.rigify_colors[4].select = Color((0.3137, 0.7843, 1.0000)) + arm.rigify_colors[4].standard_colors_lock = True + arm.rigify_colors[5].name = "Extra" + arm.rigify_colors[5].active = Color((0.5490, 1.0000, 1.0000)) + arm.rigify_colors[5].normal = Color((0.9686, 0.2510, 0.0941)) + arm.rigify_colors[5].select = Color((0.3137, 0.7843, 1.0000)) + arm.rigify_colors[5].standard_colors_lock = True + + for i in range(29): + arm.rigify_layers.add() + + arm.rigify_layers[0].name = "Face" + arm.rigify_layers[0].row = 1 + arm.rigify_layers[0].selset = False + arm.rigify_layers[0].group = 5 + arm.rigify_layers[1].name = "Face (Primary)" + arm.rigify_layers[1].row = 2 + arm.rigify_layers[1].selset = False + arm.rigify_layers[1].group = 2 + arm.rigify_layers[2].name = "Face (Secondary)" + arm.rigify_layers[2].row = 2 + arm.rigify_layers[2].selset = False + arm.rigify_layers[2].group = 3 + arm.rigify_layers[3].name = "Torso" + arm.rigify_layers[3].row = 3 + arm.rigify_layers[3].selset = False + arm.rigify_layers[3].group = 3 + arm.rigify_layers[4].name = "Torso (Tweak)" + arm.rigify_layers[4].row = 4 + arm.rigify_layers[4].selset = False + arm.rigify_layers[4].group = 4 + arm.rigify_layers[5].name = "Fingers" + arm.rigify_layers[5].row = 5 + arm.rigify_layers[5].selset = False + arm.rigify_layers[5].group = 6 + arm.rigify_layers[6].name = "Fingers (Detail)" + arm.rigify_layers[6].row = 6 + arm.rigify_layers[6].selset = False + arm.rigify_layers[6].group = 5 + arm.rigify_layers[7].name = "Arm.L (IK)" + arm.rigify_layers[7].row = 7 + arm.rigify_layers[7].selset = False + arm.rigify_layers[7].group = 2 + arm.rigify_layers[8].name = "Arm.L (FK)" + arm.rigify_layers[8].row = 8 + arm.rigify_layers[8].selset = False + arm.rigify_layers[8].group = 5 + arm.rigify_layers[9].name = "Arm.L (Tweak)" + arm.rigify_layers[9].row = 9 + arm.rigify_layers[9].selset = False + arm.rigify_layers[9].group = 4 + arm.rigify_layers[10].name = "Arm.R (IK)" + arm.rigify_layers[10].row = 7 + arm.rigify_layers[10].selset = False + arm.rigify_layers[10].group = 2 + arm.rigify_layers[11].name = "Arm.R (FK)" + arm.rigify_layers[11].row = 8 + arm.rigify_layers[11].selset = False + arm.rigify_layers[11].group = 5 + arm.rigify_layers[12].name = "Arm.R (Tweak)" + arm.rigify_layers[12].row = 9 + arm.rigify_layers[12].selset = False + arm.rigify_layers[12].group = 4 + arm.rigify_layers[13].name = "Leg.L (IK)" + arm.rigify_layers[13].row = 10 + arm.rigify_layers[13].selset = False + arm.rigify_layers[13].group = 2 + arm.rigify_layers[14].name = "Leg.L (FK)" + arm.rigify_layers[14].row = 11 + arm.rigify_layers[14].selset = False + arm.rigify_layers[14].group = 5 + arm.rigify_layers[15].name = "Leg.L (Tweak)" + arm.rigify_layers[15].row = 12 + arm.rigify_layers[15].selset = False + arm.rigify_layers[15].group = 4 + arm.rigify_layers[16].name = "Leg.R (IK)" + arm.rigify_layers[16].row = 10 + arm.rigify_layers[16].selset = False + arm.rigify_layers[16].group = 2 + arm.rigify_layers[17].name = "Leg.R (FK)" + arm.rigify_layers[17].row = 11 + arm.rigify_layers[17].selset = False + arm.rigify_layers[17].group = 5 + arm.rigify_layers[18].name = "Leg.R (Tweak)" + arm.rigify_layers[18].row = 12 + arm.rigify_layers[18].selset = False + arm.rigify_layers[18].group = 4 + arm.rigify_layers[19].name = "" + arm.rigify_layers[19].row = 1 + arm.rigify_layers[19].selset = False + arm.rigify_layers[19].group = 0 + arm.rigify_layers[20].name = "" + arm.rigify_layers[20].row = 1 + arm.rigify_layers[20].selset = False + arm.rigify_layers[20].group = 0 + arm.rigify_layers[21].name = "" + arm.rigify_layers[21].row = 1 + arm.rigify_layers[21].selset = False + arm.rigify_layers[21].group = 0 + arm.rigify_layers[22].name = "" + arm.rigify_layers[22].row = 1 + arm.rigify_layers[22].selset = False + arm.rigify_layers[22].group = 0 + arm.rigify_layers[23].name = "" + arm.rigify_layers[23].row = 1 + arm.rigify_layers[23].selset = False + arm.rigify_layers[23].group = 0 + arm.rigify_layers[24].name = "" + arm.rigify_layers[24].row = 1 + arm.rigify_layers[24].selset = False + arm.rigify_layers[24].group = 0 + arm.rigify_layers[25].name = "" + arm.rigify_layers[25].row = 1 + arm.rigify_layers[25].selset = False + arm.rigify_layers[25].group = 0 + arm.rigify_layers[26].name = "" + arm.rigify_layers[26].row = 1 + arm.rigify_layers[26].selset = False + arm.rigify_layers[26].group = 0 + arm.rigify_layers[27].name = "" + arm.rigify_layers[27].row = 1 + arm.rigify_layers[27].selset = False + arm.rigify_layers[27].group = 0 + arm.rigify_layers[28].name = "Root" + arm.rigify_layers[28].row = 14 + arm.rigify_layers[28].selset = False + arm.rigify_layers[28].group = 1 + + bones = {} + + bone = arm.edit_bones.new('spine') + bone.head = 0.0000, 0.0071, 0.9312 + bone.tail = 0.0000, 0.0110, 0.9989 + bone.roll = 0.0000 + bone.use_connect = False + bones['spine'] = bone.name + bone = arm.edit_bones.new('spine.001') + bone.head = 0.0000, 0.0110, 0.9989 + bone.tail = 0.0000, 0.0137, 1.0713 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine']] + bones['spine.001'] = bone.name + bone = arm.edit_bones.new('thigh.L') + bone.head = 0.0775, 0.0081, 0.9055 + bone.tail = 0.1221, 0.0100, 0.5176 + bone.roll = -0.1191 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine']] + bones['thigh.L'] = bone.name + bone = arm.edit_bones.new('thigh.R') + bone.head = -0.0775, 0.0081, 0.9055 + bone.tail = -0.1221, 0.0100, 0.5176 + bone.roll = 0.1191 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine']] + bones['thigh.R'] = bone.name + bone = arm.edit_bones.new('spine.002') + bone.head = 0.0000, 0.0137, 1.0713 + bone.tail = 0.0000, 0.0185, 1.1313 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine.001']] + bones['spine.002'] = bone.name + bone = arm.edit_bones.new('shin.L') + bone.head = 0.1221, 0.0100, 0.5176 + bone.tail = 0.1526, 0.0442, 0.0944 + bone.roll = -0.0674 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thigh.L']] + bones['shin.L'] = bone.name + bone = arm.edit_bones.new('shin.R') + bone.head = -0.1221, 0.0100, 0.5176 + bone.tail = -0.1526, 0.0442, 0.0944 + bone.roll = 0.0674 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thigh.R']] + bones['shin.R'] = bone.name + bone = arm.edit_bones.new('spine.003') + bone.head = 0.0000, 0.0185, 1.1313 + bone.tail = 0.0000, 0.0274, 1.2118 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine.002']] + bones['spine.003'] = bone.name + bone = arm.edit_bones.new('foot.L') + bone.head = 0.1526, 0.0442, 0.0944 + bone.tail = 0.1580, -0.0935, 0.0314 + bone.roll = -0.1511 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['shin.L']] + bones['foot.L'] = bone.name + bone = arm.edit_bones.new('foot.R') + bone.head = -0.1526, 0.0442, 0.0944 + bone.tail = -0.1580, -0.0935, 0.0314 + bone.roll = 0.1511 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['shin.R']] + bones['foot.R'] = bone.name + bone = arm.edit_bones.new('spine.007') + bone.head = 0.0000, 0.0274, 1.2118 + bone.tail = 0.0000, 0.0357, 1.3116 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine.003']] + bones['spine.007'] = bone.name + bone = arm.edit_bones.new('toe.L') + bone.head = 0.1580, -0.0935, 0.0314 + bone.tail = 0.1682, -0.2388, 0.0314 + bone.roll = 0.0073 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['foot.L']] + bones['toe.L'] = bone.name + bone = arm.edit_bones.new('heel.02.L') + bone.head = 0.1439, 0.0442, 0.0314 + bone.tail = 0.2239, 0.0442, 0.0314 + bone.roll = -0.0000 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['foot.L']] + bones['heel.02.L'] = bone.name + bone = arm.edit_bones.new('toe.R') + bone.head = -0.1580, -0.0935, 0.0314 + bone.tail = -0.1682, -0.2388, 0.0314 + bone.roll = -0.0073 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['foot.R']] + bones['toe.R'] = bone.name + bone = arm.edit_bones.new('heel.02.R') + bone.head = -0.1439, 0.0442, 0.0314 + bone.tail = -0.2239, 0.0442, 0.0314 + bone.roll = 0.0000 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['foot.R']] + bones['heel.02.R'] = bone.name + bone = arm.edit_bones.new('spine.008') + bone.head = 0.0000, 0.0357, 1.3116 + bone.tail = 0.0000, 0.0432, 1.4245 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine.007']] + bones['spine.008'] = bone.name + bone = arm.edit_bones.new('spine.004') + bone.head = 0.0000, 0.0432, 1.4245 + bone.tail = 0.0000, 0.0288, 1.4678 + bone.roll = 0.0000 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine.008']] + bones['spine.004'] = bone.name + bone = arm.edit_bones.new('shoulder.L') + bone.head = 0.0232, 0.0406, 1.3549 + bone.tail = 0.1778, 0.0484, 1.3445 + bone.roll = 0.3544 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine.008']] + bones['shoulder.L'] = bone.name + bone = arm.edit_bones.new('shoulder.R') + bone.head = -0.0232, 0.0406, 1.3549 + bone.tail = -0.1778, 0.0484, 1.3445 + bone.roll = -0.3543 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine.008']] + bones['shoulder.R'] = bone.name + bone = arm.edit_bones.new('breast.L') + bone.head = 0.0983, -0.1161, 1.3339 + bone.tail = 0.1165, -0.2435, 1.3375 + bone.roll = -0.3953 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine.008']] + bones['breast.L'] = bone.name + bone = arm.edit_bones.new('breast.R') + bone.head = -0.0983, -0.1161, 1.3339 + bone.tail = -0.1165, -0.2435, 1.3375 + bone.roll = 0.3953 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine.008']] + bones['breast.R'] = bone.name + bone = arm.edit_bones.new('spine.005') + bone.head = 0.0000, 0.0288, 1.4678 + bone.tail = 0.0000, 0.0169, 1.5203 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine.004']] + bones['spine.005'] = bone.name + bone = arm.edit_bones.new('upper_arm.L') + bone.head = 0.1778, 0.0484, 1.3445 + bone.tail = 0.3768, 0.0579, 1.1675 + bone.roll = 2.3792 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['shoulder.L']] + bones['upper_arm.L'] = bone.name + bone = arm.edit_bones.new('upper_arm.R') + bone.head = -0.1778, 0.0484, 1.3445 + bone.tail = -0.3768, 0.0579, 1.1675 + bone.roll = -2.3792 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['shoulder.R']] + bones['upper_arm.R'] = bone.name + bone = arm.edit_bones.new('spine.006') + bone.head = 0.0000, 0.0169, 1.5203 + bone.tail = 0.0000, 0.0169, 1.6712 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine.005']] + bones['spine.006'] = bone.name + bone = arm.edit_bones.new('forearm.L') + bone.head = 0.3768, 0.0579, 1.1675 + bone.tail = 0.5197, -0.0409, 1.0269 + bone.roll = 2.3839 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['upper_arm.L']] + bones['forearm.L'] = bone.name + bone = arm.edit_bones.new('forearm.R') + bone.head = -0.3768, 0.0579, 1.1675 + bone.tail = -0.5197, -0.0409, 1.0269 + bone.roll = -2.3839 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['upper_arm.R']] + bones['forearm.R'] = bone.name + bone = arm.edit_bones.new('hand.L') + bone.head = 0.5197, -0.0409, 1.0269 + bone.tail = 0.5676, -0.0778, 0.9535 + bone.roll = 2.7716 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['forearm.L']] + bones['hand.L'] = bone.name + bone = arm.edit_bones.new('hand.R') + bone.head = -0.5197, -0.0409, 1.0269 + bone.tail = -0.5676, -0.0778, 0.9535 + bone.roll = -2.8517 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['forearm.R']] + bones['hand.R'] = bone.name + bone = arm.edit_bones.new('palm.01.L') + bone.head = 0.5183, -0.0740, 1.0199 + bone.tail = 0.5622, -0.1063, 0.9573 + bone.roll = -1.7939 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.L']] + bones['palm.01.L'] = bone.name + bone = arm.edit_bones.new('palm.02.L') + bone.head = 0.5275, -0.0538, 1.0100 + bone.tail = 0.5676, -0.0778, 0.9535 + bone.roll = -1.8176 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.L']] + bones['palm.02.L'] = bone.name + bone = arm.edit_bones.new('palm.03.L') + bone.head = 0.5327, -0.0355, 1.0048 + bone.tail = 0.5714, -0.0525, 0.9483 + bone.roll = -2.0521 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.L']] + bones['palm.03.L'] = bone.name + bone = arm.edit_bones.new('palm.04.L') + bone.head = 0.5325, -0.0144, 1.0008 + bone.tail = 0.5759, -0.0305, 0.9459 + bone.roll = -2.2667 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.L']] + bones['palm.04.L'] = bone.name + bone = arm.edit_bones.new('palm.01.R') + bone.head = -0.5183, -0.0740, 1.0199 + bone.tail = -0.5622, -0.1063, 0.9573 + bone.roll = 1.6433 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.R']] + bones['palm.01.R'] = bone.name + bone = arm.edit_bones.new('palm.02.R') + bone.head = -0.5275, -0.0538, 1.0100 + bone.tail = -0.5676, -0.0778, 0.9535 + bone.roll = 1.8048 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.R']] + bones['palm.02.R'] = bone.name + bone = arm.edit_bones.new('palm.03.R') + bone.head = -0.5327, -0.0355, 1.0048 + bone.tail = -0.5714, -0.0525, 0.9483 + bone.roll = 2.0494 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.R']] + bones['palm.03.R'] = bone.name + bone = arm.edit_bones.new('palm.04.R') + bone.head = -0.5325, -0.0144, 1.0008 + bone.tail = -0.5759, -0.0305, 0.9459 + bone.roll = 2.2714 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.R']] + bones['palm.04.R'] = bone.name + bone = arm.edit_bones.new('palm.01.R.001') + bone.head = -0.5676, -0.0778, 0.9535 + bone.tail = -0.5997, -0.0978, 0.9130 + bone.roll = 1.8400 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.R']] + bones['palm.01.R.001'] = bone.name + bone = arm.edit_bones.new('f_index.01.L') + bone.head = 0.5622, -0.1063, 0.9573 + bone.tail = 0.5736, -0.1137, 0.9264 + bone.roll = -1.4617 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.01.L']] + bones['f_index.01.L'] = bone.name + bone = arm.edit_bones.new('thumb.01.L') + bone.head = 0.5156, -0.0676, 1.0196 + bone.tail = 0.4989, -0.0988, 0.9719 + bone.roll = 2.1368 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.01.L']] + bones['thumb.01.L'] = bone.name + bone = arm.edit_bones.new('f_middle.01.L') + bone.head = 0.5676, -0.0778, 0.9535 + bone.tail = 0.5867, -0.0889, 0.9199 + bone.roll = -1.8746 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.02.L']] + bones['f_middle.01.L'] = bone.name + bone = arm.edit_bones.new('f_ring.01.L') + bone.head = 0.5714, -0.0525, 0.9483 + bone.tail = 0.5859, -0.0628, 0.9164 + bone.roll = -1.7532 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.03.L']] + bones['f_ring.01.L'] = bone.name + bone = arm.edit_bones.new('f_pinky.01.L') + bone.head = 0.5759, -0.0305, 0.9459 + bone.tail = 0.5843, -0.0374, 0.9197 + bone.roll = -1.8104 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.04.L']] + bones['f_pinky.01.L'] = bone.name + bone = arm.edit_bones.new('f_index.01.R') + bone.head = -0.5622, -0.1063, 0.9573 + bone.tail = -0.5736, -0.1137, 0.9264 + bone.roll = 1.3657 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.01.R']] + bones['f_index.01.R'] = bone.name + bone = arm.edit_bones.new('thumb.01.R') + bone.head = -0.5156, -0.0676, 1.0196 + bone.tail = -0.4989, -0.0988, 0.9719 + bone.roll = -2.1368 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.01.R']] + bones['thumb.01.R'] = bone.name + bone = arm.edit_bones.new('f_middle.01.R') + bone.head = -0.5676, -0.0778, 0.9535 + bone.tail = -0.5865, -0.0893, 0.9200 + bone.roll = 1.6554 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.02.R']] + bones['f_middle.01.R'] = bone.name + bone = arm.edit_bones.new('f_ring.01.R') + bone.head = -0.5714, -0.0525, 0.9483 + bone.tail = -0.5859, -0.0628, 0.9164 + bone.roll = 1.7525 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.03.R']] + bones['f_ring.01.R'] = bone.name + bone = arm.edit_bones.new('f_pinky.01.R') + bone.head = -0.5759, -0.0305, 0.9459 + bone.tail = -0.5843, -0.0374, 0.9197 + bone.roll = 1.8102 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.04.R']] + bones['f_pinky.01.R'] = bone.name + bone = arm.edit_bones.new('f_index.02.L') + bone.head = 0.5736, -0.1137, 0.9264 + bone.tail = 0.5675, -0.1150, 0.9016 + bone.roll = -0.9033 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_index.01.L']] + bones['f_index.02.L'] = bone.name + bone = arm.edit_bones.new('thumb.02.L') + bone.head = 0.4989, -0.0988, 0.9719 + bone.tail = 0.4970, -0.1030, 0.9498 + bone.roll = 0.3404 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thumb.01.L']] + bones['thumb.02.L'] = bone.name + bone = arm.edit_bones.new('f_middle.02.L') + bone.head = 0.5867, -0.0889, 0.9199 + bone.tail = 0.5817, -0.0898, 0.8943 + bone.roll = -0.9324 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_middle.01.L']] + bones['f_middle.02.L'] = bone.name + bone = arm.edit_bones.new('f_ring.02.L') + bone.head = 0.5859, -0.0628, 0.9164 + bone.tail = 0.5805, -0.0668, 0.8932 + bone.roll = -0.8414 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_ring.01.L']] + bones['f_ring.02.L'] = bone.name + bone = arm.edit_bones.new('f_pinky.02.L') + bone.head = 0.5843, -0.0374, 0.9197 + bone.tail = 0.5779, -0.0410, 0.8989 + bone.roll = -1.0248 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_pinky.01.L']] + bones['f_pinky.02.L'] = bone.name + bone = arm.edit_bones.new('f_index.02.R') + bone.head = -0.5736, -0.1137, 0.9264 + bone.tail = -0.5675, -0.1150, 0.9016 + bone.roll = 0.6029 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_index.01.R']] + bones['f_index.02.R'] = bone.name + bone = arm.edit_bones.new('thumb.02.R') + bone.head = -0.4989, -0.0988, 0.9719 + bone.tail = -0.4970, -0.1030, 0.9498 + bone.roll = -0.3404 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thumb.01.R']] + bones['thumb.02.R'] = bone.name + bone = arm.edit_bones.new('f_middle.02.R') + bone.head = -0.5865, -0.0893, 0.9200 + bone.tail = -0.5816, -0.0903, 0.8943 + bone.roll = 0.5595 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_middle.01.R']] + bones['f_middle.02.R'] = bone.name + bone = arm.edit_bones.new('f_ring.02.R') + bone.head = -0.5859, -0.0628, 0.9164 + bone.tail = -0.5805, -0.0668, 0.8932 + bone.roll = 0.8449 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_ring.01.R']] + bones['f_ring.02.R'] = bone.name + bone = arm.edit_bones.new('f_pinky.02.R') + bone.head = -0.5843, -0.0374, 0.9197 + bone.tail = -0.5779, -0.0410, 0.8989 + bone.roll = 1.0264 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_pinky.01.R']] + bones['f_pinky.02.R'] = bone.name + bone = arm.edit_bones.new('f_index.03.L') + bone.head = 0.5675, -0.1150, 0.9016 + bone.tail = 0.5571, -0.1168, 0.8724 + bone.roll = -0.2907 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_index.02.L']] + bones['f_index.03.L'] = bone.name + bone = arm.edit_bones.new('thumb.03.L') + bone.head = 0.4970, -0.1030, 0.9498 + bone.tail = 0.5028, -0.1038, 0.9240 + bone.roll = 0.0761 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thumb.02.L']] + bones['thumb.03.L'] = bone.name + bone = arm.edit_bones.new('f_middle.03.L') + bone.head = 0.5817, -0.0898, 0.8943 + bone.tail = 0.5699, -0.0926, 0.8623 + bone.roll = -0.8834 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_middle.02.L']] + bones['f_middle.03.L'] = bone.name + bone = arm.edit_bones.new('f_ring.03.L') + bone.head = 0.5805, -0.0668, 0.8932 + bone.tail = 0.5701, -0.0722, 0.8609 + bone.roll = -0.7380 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_ring.02.L']] + bones['f_ring.03.L'] = bone.name + bone = arm.edit_bones.new('f_pinky.03.L') + bone.head = 0.5779, -0.0410, 0.8989 + bone.tail = 0.5712, -0.0449, 0.8760 + bone.roll = -1.0720 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_pinky.02.L']] + bones['f_pinky.03.L'] = bone.name + bone = arm.edit_bones.new('f_index.03.R') + bone.head = -0.5675, -0.1150, 0.9016 + bone.tail = -0.5594, -0.1131, 0.8727 + bone.roll = 0.4582 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_index.02.R']] + bones['f_index.03.R'] = bone.name + bone = arm.edit_bones.new('thumb.03.R') + bone.head = -0.4970, -0.1030, 0.9498 + bone.tail = -0.5028, -0.1038, 0.9240 + bone.roll = -0.0761 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thumb.02.R']] + bones['thumb.03.R'] = bone.name + bone = arm.edit_bones.new('f_middle.03.R') + bone.head = -0.5816, -0.0903, 0.8943 + bone.tail = -0.5771, -0.0913, 0.8616 + bone.roll = 0.6635 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_middle.02.R']] + bones['f_middle.03.R'] = bone.name + bone = arm.edit_bones.new('f_ring.03.R') + bone.head = -0.5805, -0.0668, 0.8932 + bone.tail = -0.5735, -0.0678, 0.8602 + bone.roll = 0.8540 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_ring.02.R']] + bones['f_ring.03.R'] = bone.name + bone = arm.edit_bones.new('f_pinky.03.R') + bone.head = -0.5779, -0.0410, 0.8989 + bone.tail = -0.5737, -0.0425, 0.8751 + bone.roll = 1.1989 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_pinky.02.R']] + bones['f_pinky.03.R'] = bone.name + + bpy.ops.object.mode_set(mode='OBJECT') + pbone = obj.pose.bones[bones['spine']] + pbone.rigify_type = 'spines.basic_spine' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.tweak_layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + try: + pbone.rigify_parameters.fk_layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + pbone = obj.pose.bones[bones['spine.001']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['thigh.L']] + pbone.rigify_type = 'limbs.super_limb' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.limb_type = "leg" + except AttributeError: + pass + try: + pbone.rigify_parameters.segments = 3 + except AttributeError: + pass + try: + pbone.rigify_parameters.fk_layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + try: + pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + pbone = obj.pose.bones[bones['thigh.R']] + pbone.rigify_type = 'limbs.super_limb' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.fk_layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + try: + pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + try: + pbone.rigify_parameters.limb_type = "leg" + except AttributeError: + pass + try: + pbone.rigify_parameters.segments = 3 + except AttributeError: + pass + pbone = obj.pose.bones[bones['spine.002']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['shin.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['shin.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['spine.003']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['foot.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['foot.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['spine.007']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['toe.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['heel.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['toe.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['heel.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['spine.008']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['spine.004']] + pbone.rigify_type = 'spines.super_head' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.connect_chain = True + except AttributeError: + pass + try: + pbone.rigify_parameters.tweak_layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + pbone = obj.pose.bones[bones['shoulder.L']] + pbone.rigify_type = 'basic.super_copy' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.make_widget = True + except AttributeError: + pass + try: + pbone.rigify_parameters.super_copy_widget_type = 'shoulder' + except AttributeError: + pass + pbone = obj.pose.bones[bones['shoulder.R']] + pbone.rigify_type = 'basic.super_copy' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.make_widget = True + except AttributeError: + pass + try: + pbone.rigify_parameters.super_copy_widget_type = 'shoulder' + except AttributeError: + pass + pbone = obj.pose.bones[bones['breast.L']] + pbone.rigify_type = 'basic.super_copy' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['breast.R']] + pbone.rigify_type = 'basic.super_copy' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['spine.005']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['upper_arm.L']] + pbone.rigify_type = 'limbs.super_limb' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.segments = 3 + except AttributeError: + pass + try: + pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + try: + pbone.rigify_parameters.fk_layers = [False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + pbone = obj.pose.bones[bones['upper_arm.R']] + pbone.rigify_type = 'limbs.super_limb' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.segments = 3 + except AttributeError: + pass + try: + pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + try: + pbone.rigify_parameters.fk_layers = [False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + pbone = obj.pose.bones[bones['spine.006']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['forearm.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['forearm.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['hand.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['hand.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['palm.01.L']] + pbone.rigify_type = 'limbs.super_palm' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['palm.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['palm.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['palm.04.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['palm.01.R']] + pbone.rigify_type = 'limbs.super_palm' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['palm.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['palm.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['palm.04.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['palm.01.R.001']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['f_index.01.L']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + pbone = obj.pose.bones[bones['thumb.01.L']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + pbone = obj.pose.bones[bones['f_middle.01.L']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + pbone = obj.pose.bones[bones['f_ring.01.L']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + pbone = obj.pose.bones[bones['f_pinky.01.L']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + pbone = obj.pose.bones[bones['f_index.01.R']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + pbone = obj.pose.bones[bones['thumb.01.R']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + pbone = obj.pose.bones[bones['f_middle.01.R']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + pbone = obj.pose.bones[bones['f_ring.01.R']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + pbone = obj.pose.bones[bones['f_pinky.01.R']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + try: + pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + except AttributeError: + pass + pbone = obj.pose.bones[bones['f_index.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['thumb.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['f_middle.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['f_ring.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['f_pinky.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['f_index.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['thumb.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['f_middle.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['f_ring.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['f_pinky.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['f_index.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['thumb.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['f_middle.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['f_ring.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['f_pinky.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['f_index.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['thumb.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['f_middle.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['f_ring.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + pbone = obj.pose.bones[bones['f_pinky.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + pbone.bone.layers = [False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False] + + bpy.ops.object.mode_set(mode='EDIT') + for bone in arm.edit_bones: + bone.select = False + bone.select_head = False + bone.select_tail = False + for b in bones: + bone = arm.edit_bones[bones[b]] + bone.select = True + bone.select_head = True + bone.select_tail = True + bone.bbone_x = bone.bbone_z = bone.length * 0.05 + arm.edit_bones.active = bone + + arm.layers = [(x in [3, 5, 7, 10, 13, 16]) for x in range(32)] + + return bones + + +if __name__ == "__main__": + create(bpy.context.active_object) diff --git a/src/addons/ue2rigify/resources/rig_templates/b3_6/uefn_mannequin/source_to_deform_links.json b/src/addons/ue2rigify/resources/rig_templates/b3_6/uefn_mannequin/source_to_deform_links.json new file mode 100644 index 00000000..baf9d91e --- /dev/null +++ b/src/addons/ue2rigify/resources/rig_templates/b3_6/uefn_mannequin/source_to_deform_links.json @@ -0,0 +1,500 @@ +[ + { + "from_node": "root", + "to_node": "Control Rig root", + "from_socket": "object", + "to_socket": "root" + }, + { + "from_node": "Source Rig head", + "to_node": "Control Rig DEF-spine.006", + "from_socket": "head", + "to_socket": "DEF-spine.006" + }, + { + "from_node": "Source Rig neck_01", + "to_node": "Control Rig DEF-spine.004", + "from_socket": "neck_01", + "to_socket": "DEF-spine.004" + }, + { + "from_node": "Source Rig neck_02", + "to_node": "Control Rig DEF-spine.005", + "from_socket": "neck_02", + "to_socket": "DEF-spine.005" + }, + { + "from_node": "Source Rig clavicle_r", + "to_node": "Control Rig DEF-shoulder.R", + "from_socket": "clavicle_l", + "to_socket": "DEF-shoulder.L" + }, + { + "from_node": "Source Rig clavicle_r", + "to_node": "Control Rig DEF-shoulder.R", + "from_socket": "clavicle_r", + "to_socket": "DEF-shoulder.R" + }, + { + "from_node": "Source Rig spine_05", + "to_node": "Control Rig DEF-spine.008", + "from_socket": "spine_05", + "to_socket": "DEF-spine.008" + }, + { + "from_node": "Source Rig spine_04", + "to_node": "Control Rig DEF-spine.007", + "from_socket": "spine_04", + "to_socket": "DEF-spine.007" + }, + { + "from_node": "Source Rig spine_03", + "to_node": "Control Rig DEF-spine.003", + "from_socket": "spine_03", + "to_socket": "DEF-spine.003" + }, + { + "from_node": "Source Rig spine_02", + "to_node": "Control Rig DEF-spine.002", + "from_socket": "spine_02", + "to_socket": "DEF-spine.002" + }, + { + "from_node": "Source Rig spine_01", + "to_node": "Control Rig DEF-spine.001", + "from_socket": "spine_01", + "to_socket": "DEF-spine.001" + }, + { + "from_node": "Source Rig pelvis", + "to_node": "Control Rig DEF-spine", + "from_socket": "pelvis", + "to_socket": "DEF-spine" + }, + { + "from_node": "Source Rig calf_r", + "to_node": "Control Rig DEF-shin.R", + "from_socket": "calf_l", + "to_socket": "DEF-shin.L" + }, + { + "from_node": "Source Rig calf_r", + "to_node": "Control Rig DEF-shin.R", + "from_socket": "calf_r", + "to_socket": "DEF-shin.R" + }, + { + "from_node": "Source Rig ball_r", + "to_node": "Control Rig DEF-toe.R", + "from_socket": "ball_l", + "to_socket": "DEF-toe.L" + }, + { + "from_node": "Source Rig ball_r", + "to_node": "Control Rig DEF-toe.R", + "from_socket": "ball_r", + "to_socket": "DEF-toe.R" + }, + { + "from_node": "Source Rig foot_r", + "to_node": "Control Rig DEF-foot.R", + "from_socket": "foot_l", + "to_socket": "DEF-foot.L" + }, + { + "from_node": "Source Rig foot_r", + "to_node": "Control Rig DEF-foot.R", + "from_socket": "foot_r", + "to_socket": "DEF-foot.R" + }, + { + "from_node": "Source Rig calf_twist_01_r", + "to_node": "Control Rig DEF-shin.R.002", + "from_socket": "calf_twist_01_l", + "to_socket": "DEF-shin.L.002" + }, + { + "from_node": "Source Rig calf_twist_01_r", + "to_node": "Control Rig DEF-shin.R.002", + "from_socket": "calf_twist_01_r", + "to_socket": "DEF-shin.R.002" + }, + { + "from_node": "Source Rig calf_twist_02_r", + "to_node": "Control Rig DEF-shin.R.001", + "from_socket": "calf_twist_02_l", + "to_socket": "DEF-shin.L.001" + }, + { + "from_node": "Source Rig calf_twist_02_r", + "to_node": "Control Rig DEF-shin.R.001", + "from_socket": "calf_twist_02_r", + "to_socket": "DEF-shin.R.001" + }, + { + "from_node": "Source Rig thigh_twist_01_r", + "to_node": "Control Rig DEF-thigh.R.001", + "from_socket": "thigh_twist_01_l", + "to_socket": "DEF-thigh.L.001" + }, + { + "from_node": "Source Rig thigh_twist_01_r", + "to_node": "Control Rig DEF-thigh.R.001", + "from_socket": "thigh_twist_01_r", + "to_socket": "DEF-thigh.R.001" + }, + { + "from_node": "Source Rig lowerarm_r", + "to_node": "Control Rig DEF-forearm.R", + "from_socket": "lowerarm_l", + "to_socket": "DEF-forearm.L" + }, + { + "from_node": "Source Rig lowerarm_r", + "to_node": "Control Rig DEF-forearm.R", + "from_socket": "lowerarm_r", + "to_socket": "DEF-forearm.R" + }, + { + "from_node": "Source Rig thigh_r", + "to_node": "Control Rig DEF-thigh.R", + "from_socket": "thigh_l", + "to_socket": "DEF-thigh.L" + }, + { + "from_node": "Source Rig thigh_r", + "to_node": "Control Rig DEF-thigh.R", + "from_socket": "thigh_r", + "to_socket": "DEF-thigh.R" + }, + { + "from_node": "Source Rig pinky_01_l", + "to_node": "Control Rig DEF-f_pinky.01.L", + "from_socket": "pinky_03_l", + "to_socket": "DEF-f_pinky.03.L" + }, + { + "from_node": "Source Rig pinky_01_l", + "to_node": "Control Rig DEF-f_pinky.01.L", + "from_socket": "pinky_02_l", + "to_socket": "DEF-f_pinky.02.L" + }, + { + "from_node": "Source Rig pinky_01_l", + "to_node": "Control Rig DEF-f_pinky.01.L", + "from_socket": "pinky_01_l", + "to_socket": "DEF-f_pinky.01.L" + }, + { + "from_node": "Source Rig pinky_01_r", + "to_node": "Control Rig DEF-f_pinky.01.R", + "from_socket": "pinky_03_r", + "to_socket": "DEF-f_pinky.03.R" + }, + { + "from_node": "Source Rig pinky_01_r", + "to_node": "Control Rig DEF-f_pinky.01.R", + "from_socket": "pinky_02_r", + "to_socket": "DEF-f_pinky.02.R" + }, + { + "from_node": "Source Rig pinky_01_r", + "to_node": "Control Rig DEF-f_pinky.01.R", + "from_socket": "pinky_01_r", + "to_socket": "DEF-f_pinky.01.R" + }, + { + "from_node": "Source Rig ring_01_l", + "to_node": "Control Rig DEF-f_ring.01.L", + "from_socket": "ring_03_l", + "to_socket": "DEF-f_ring.03.L" + }, + { + "from_node": "Source Rig ring_01_l", + "to_node": "Control Rig DEF-f_ring.01.L", + "from_socket": "ring_02_l", + "to_socket": "DEF-f_ring.02.L" + }, + { + "from_node": "Source Rig ring_01_l", + "to_node": "Control Rig DEF-f_ring.01.L", + "from_socket": "ring_01_l", + "to_socket": "DEF-f_ring.01.L" + }, + { + "from_node": "Source Rig ring_01_r", + "to_node": "Control Rig DEF-f_ring.01.R", + "from_socket": "ring_03_r", + "to_socket": "DEF-f_ring.03.R" + }, + { + "from_node": "Source Rig ring_01_r", + "to_node": "Control Rig DEF-f_ring.01.R", + "from_socket": "ring_02_r", + "to_socket": "DEF-f_ring.02.R" + }, + { + "from_node": "Source Rig ring_01_r", + "to_node": "Control Rig DEF-f_ring.01.R", + "from_socket": "ring_01_r", + "to_socket": "DEF-f_ring.01.R" + }, + { + "from_node": "Source Rig middle_01_l", + "to_node": "Control Rig DEF-f_middle.01.L", + "from_socket": "middle_03_l", + "to_socket": "DEF-f_middle.03.L" + }, + { + "from_node": "Source Rig middle_01_l", + "to_node": "Control Rig DEF-f_middle.01.L", + "from_socket": "middle_02_l", + "to_socket": "DEF-f_middle.02.L" + }, + { + "from_node": "Source Rig middle_01_l", + "to_node": "Control Rig DEF-f_middle.01.L", + "from_socket": "middle_01_l", + "to_socket": "DEF-f_middle.01.L" + }, + { + "from_node": "Source Rig middle_01_r", + "to_node": "Control Rig DEF-f_middle.01.R", + "from_socket": "middle_03_r", + "to_socket": "DEF-f_middle.03.R" + }, + { + "from_node": "Source Rig middle_01_r", + "to_node": "Control Rig DEF-f_middle.01.R", + "from_socket": "middle_02_r", + "to_socket": "DEF-f_middle.02.R" + }, + { + "from_node": "Source Rig middle_01_r", + "to_node": "Control Rig DEF-f_middle.01.R", + "from_socket": "middle_01_r", + "to_socket": "DEF-f_middle.01.R" + }, + { + "from_node": "Source Rig index_01_l", + "to_node": "Control Rig DEF-f_index.01.L", + "from_socket": "index_03_l", + "to_socket": "DEF-f_index.03.L" + }, + { + "from_node": "Source Rig index_01_l", + "to_node": "Control Rig DEF-f_index.01.L", + "from_socket": "index_02_l", + "to_socket": "DEF-f_index.02.L" + }, + { + "from_node": "Source Rig index_01_l", + "to_node": "Control Rig DEF-f_index.01.L", + "from_socket": "index_01_l", + "to_socket": "DEF-f_index.01.L" + }, + { + "from_node": "Source Rig index_01_r", + "to_node": "Control Rig DEF-f_index.01.R", + "from_socket": "index_03_r", + "to_socket": "DEF-f_index.03.R" + }, + { + "from_node": "Source Rig index_01_r", + "to_node": "Control Rig DEF-f_index.01.R", + "from_socket": "index_02_r", + "to_socket": "DEF-f_index.02.R" + }, + { + "from_node": "Source Rig index_01_r", + "to_node": "Control Rig DEF-f_index.01.R", + "from_socket": "index_01_r", + "to_socket": "DEF-f_index.01.R" + }, + { + "from_node": "Source Rig thumb_01_l", + "to_node": "Control Rig DEF-thumb.01.L", + "from_socket": "thumb_03_l", + "to_socket": "DEF-thumb.03.L" + }, + { + "from_node": "Source Rig thumb_01_l", + "to_node": "Control Rig DEF-thumb.01.L", + "from_socket": "thumb_02_l", + "to_socket": "DEF-thumb.02.L" + }, + { + "from_node": "Source Rig thumb_01_l", + "to_node": "Control Rig DEF-thumb.01.L", + "from_socket": "thumb_01_l", + "to_socket": "DEF-thumb.01.L" + }, + { + "from_node": "Source Rig thumb_01_r", + "to_node": "Control Rig DEF-thumb.01.R", + "from_socket": "thumb_03_r", + "to_socket": "DEF-thumb.03.R" + }, + { + "from_node": "Source Rig thumb_01_r", + "to_node": "Control Rig DEF-thumb.01.R", + "from_socket": "thumb_02_r", + "to_socket": "DEF-thumb.02.R" + }, + { + "from_node": "Source Rig thumb_01_r", + "to_node": "Control Rig DEF-thumb.01.R", + "from_socket": "thumb_01_r", + "to_socket": "DEF-thumb.01.R" + }, + { + "from_node": "Source Rig pinky_metacarpal_r", + "to_node": "Control Rig DEF-palm.04.R", + "from_socket": "pinky_metacarpal_l", + "to_socket": "DEF-palm.04.L" + }, + { + "from_node": "Source Rig pinky_metacarpal_r", + "to_node": "Control Rig DEF-palm.04.R", + "from_socket": "pinky_metacarpal_r", + "to_socket": "DEF-palm.04.R" + }, + { + "from_node": "Source Rig ring_metacarpal_r", + "to_node": "Control Rig DEF-palm.03.R", + "from_socket": "ring_metacarpal_l", + "to_socket": "DEF-palm.03.L" + }, + { + "from_node": "Source Rig ring_metacarpal_r", + "to_node": "Control Rig DEF-palm.03.R", + "from_socket": "ring_metacarpal_r", + "to_socket": "DEF-palm.03.R" + }, + { + "from_node": "Source Rig middle_metacarpal_r", + "to_node": "Control Rig DEF-palm.02.R", + "from_socket": "middle_metacarpal_l", + "to_socket": "DEF-palm.02.L" + }, + { + "from_node": "Source Rig middle_metacarpal_r", + "to_node": "Control Rig DEF-palm.02.R", + "from_socket": "middle_metacarpal_r", + "to_socket": "DEF-palm.02.R" + }, + { + "from_node": "Source Rig index_metacarpal_r", + "to_node": "Control Rig DEF-palm.01.R", + "from_socket": "index_metacarpal_l", + "to_socket": "DEF-palm.01.L" + }, + { + "from_node": "Source Rig index_metacarpal_r", + "to_node": "Control Rig DEF-palm.01.R", + "from_socket": "index_metacarpal_r", + "to_socket": "DEF-palm.01.R" + }, + { + "from_node": "Source Rig lowerarm_twist_01_r", + "to_node": "Control Rig DEF-forearm.R.002", + "from_socket": "lowerarm_twist_01_l", + "to_socket": "DEF-forearm.L.002" + }, + { + "from_node": "Source Rig lowerarm_twist_01_r", + "to_node": "Control Rig DEF-forearm.R.002", + "from_socket": "lowerarm_twist_01_r", + "to_socket": "DEF-forearm.R.002" + }, + { + "from_node": "Source Rig lowerarm_twist_02_r", + "to_node": "Control Rig DEF-forearm.R.001", + "from_socket": "lowerarm_twist_02_l", + "to_socket": "DEF-forearm.L.001" + }, + { + "from_node": "Source Rig lowerarm_twist_02_r", + "to_node": "Control Rig DEF-forearm.R.001", + "from_socket": "lowerarm_twist_02_r", + "to_socket": "DEF-forearm.R.001" + }, + { + "from_node": "Source Rig hand_r", + "to_node": "Control Rig DEF-hand.R", + "from_socket": "hand_l", + "to_socket": "DEF-hand.L" + }, + { + "from_node": "Source Rig hand_r", + "to_node": "Control Rig DEF-hand.R", + "from_socket": "hand_r", + "to_socket": "DEF-hand.R" + }, + { + "from_node": "Source Rig upperarm_r", + "to_node": "Control Rig DEF-upper_arm.R", + "from_socket": "upperarm_l", + "to_socket": "DEF-upper_arm.L" + }, + { + "from_node": "Source Rig upperarm_r", + "to_node": "Control Rig DEF-upper_arm.R", + "from_socket": "upperarm_r", + "to_socket": "DEF-upper_arm.R" + }, + { + "from_node": "Source Rig upperarm_twist_01_r", + "to_node": "Control Rig DEF-upper_arm.R.001", + "from_socket": "upperarm_twist_01_l", + "to_socket": "DEF-upper_arm.L.001" + }, + { + "from_node": "Source Rig upperarm_twist_01_r", + "to_node": "Control Rig DEF-upper_arm.R.001", + "from_socket": "upperarm_twist_01_r", + "to_socket": "DEF-upper_arm.R.001" + }, + { + "from_node": "Source Rig upperarm_twist_02_r", + "to_node": "Control Rig DEF-upper_arm.R.002", + "from_socket": "upperarm_twist_02_l", + "to_socket": "DEF-upper_arm.L.002" + }, + { + "from_node": "Source Rig upperarm_twist_02_r", + "to_node": "Control Rig DEF-upper_arm.R.002", + "from_socket": "upperarm_twist_02_r", + "to_socket": "DEF-upper_arm.R.002" + }, + { + "from_node": "Control Rig DEF-hand.R.002", + "to_node": "Control Rig DEF-hand.R.001", + "from_socket": "ik_hand_l", + "to_socket": "DEF-hand.L" + }, + { + "from_node": "Control Rig DEF-hand.R.002", + "to_node": "Control Rig DEF-hand.R.001", + "from_socket": "ik_hand_r", + "to_socket": "DEF-hand.R" + }, + { + "from_node": "Source Rig ik_hand_gun", + "to_node": "Control Rig DEF-hand.R.003", + "from_socket": "ik_hand_gun", + "to_socket": "DEF-hand.R" + }, + { + "from_node": "Source Rig ik_foot_r", + "to_node": "Control Rig DEF-foot.R.001", + "from_socket": "ik_foot_l", + "to_socket": "DEF-foot.L" + }, + { + "from_node": "Source Rig ik_foot_r", + "to_node": "Control Rig DEF-foot.R.001", + "from_socket": "ik_foot_r", + "to_socket": "DEF-foot.R" + } +] \ No newline at end of file diff --git a/src/addons/ue2rigify/resources/rig_templates/b3_6/uefn_mannequin/source_to_deform_nodes.json b/src/addons/ue2rigify/resources/rig_templates/b3_6/uefn_mannequin/source_to_deform_nodes.json new file mode 100644 index 00000000..fa5ce314 --- /dev/null +++ b/src/addons/ue2rigify/resources/rig_templates/b3_6/uefn_mannequin/source_to_deform_nodes.json @@ -0,0 +1,1978 @@ +[ + { + "name": "root", + "label": "root", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -613.6795043945312, + 1205.2103271484375 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "object" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig root", + "label": "Control Rig root", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -364.892822265625, + 1206.1993408203125 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "root" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig head", + "label": "Source Rig head", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -626.1997680664062, + 1057.1795654296875 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "head" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.006", + "label": "Control Rig DEF-spine.006", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -376.18035888671875, + 1057.1796875 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.006" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig neck_01", + "label": "Source Rig neck_01", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -622.5762939453125, + 936.5052490234375 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "neck_01" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.004", + "label": "Control Rig DEF-spine.004", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -401.54473876953125, + 936.5052490234375 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.004" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig neck_02", + "label": "Source Rig neck_02", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -623.7841796875, + 820.6578369140625 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "neck_02" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.005", + "label": "Control Rig DEF-spine.005", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -414.83074951171875, + 821.8645629882812 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.005" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig clavicle_r", + "label": "Source Rig clavicle_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -676.3244018554688, + 676.4519653320312 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "clavicle_l", + "clavicle_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-shoulder.R", + "label": "Control Rig DEF-shoulder.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -381.61553955078125, + 675.2451782226562 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-shoulder.L", + "DEF-shoulder.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig spine_05", + "label": "Source Rig spine_05", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -650.3562622070312, + 469.4952697753906 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_05" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.008", + "label": "Control Rig DEF-spine.008", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -407.79571533203125, + 469.495361328125 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.008" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig spine_04", + "label": "Source Rig spine_04", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -648.1004638671875, + 398.6346740722656 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_04" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.007", + "label": "Control Rig DEF-spine.007", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -407.743408203125, + 397.42791748046875 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.007" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig spine_03", + "label": "Source Rig spine_03", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -637.22998046875, + 304.5085144042969 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_03" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.003", + "label": "Control Rig DEF-spine.003", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -393.24957275390625, + 309.3356018066406 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.003" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig spine_02", + "label": "Source Rig spine_02", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -640.8534545898438, + 217.6229248046875 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_02" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.002", + "label": "Control Rig DEF-spine.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -377.5478515625, + 221.24325561523438 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.002" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig spine_01", + "label": "Source Rig spine_01", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -638.4378051757812, + 116.25646209716797 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_01" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.001", + "label": "Control Rig DEF-spine.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -387.21038818359375, + 117.46312713623047 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.001" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig pelvis", + "label": "Source Rig pelvis", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -642.0612182617188, + 16.09661102294922 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "pelvis" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine", + "label": "Control Rig DEF-spine", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -404.11993408203125, + 19.71685028076172 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-shin.L.001", + "label": "Control Rig DEF-shin.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -669.7352905273438, + -206.96047973632812 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_l", + "thigh_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-shin.L.002", + "label": "Control Rig DEF-shin.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -419.7156982421875, + -206.96051025390625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thigh.L", + "DEF-thigh.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig calf_r", + "label": "Source Rig calf_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -678.1900634765625, + -316.77435302734375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "calf_l", + "calf_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-shin.R", + "label": "Control Rig DEF-shin.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -425.15093994140625, + -316.17095947265625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-shin.L", + "DEF-shin.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig ball_r", + "label": "Source Rig ball_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -680.4808959960938, + -473.456787109375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "ball_l", + "ball_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-toe.R", + "label": "Control Rig DEF-toe.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -401.47344970703125, + -472.2500305175781 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-toe.L", + "DEF-toe.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig foot_r", + "label": "Source Rig foot_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -682.896484375, + -589.9076538085938 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "foot_l", + "foot_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-foot.R", + "label": "Control Rig DEF-foot.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -404.4930725097656, + -589.9077758789062 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-foot.L", + "DEF-foot.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig calf_twist_01_r", + "label": "Source Rig calf_twist_01_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -692.549072265625, + -752.03076171875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "calf_twist_01_l", + "calf_twist_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-shin.R.002", + "label": "Control Rig DEF-shin.R.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -397.8399353027344, + -750.2206420898438 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-shin.L.002", + "DEF-shin.R.002" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig calf_twist_02_r", + "label": "Source Rig calf_twist_02_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -691.3412475585938, + -873.9120483398438 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "calf_twist_02_l", + "calf_twist_02_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-shin.R.001", + "label": "Control Rig DEF-shin.R.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -405.6908264160156, + -875.7222290039062 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-shin.L.001", + "DEF-shin.R.001" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig thigh_twist_01_r", + "label": "Source Rig thigh_twist_01_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -686.5018920898438, + -1039.54638671875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_twist_01_l", + "thigh_twist_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-thigh.R.001", + "label": "Control Rig DEF-thigh.R.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -397.2279357910156, + -1038.94287109375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thigh.L.001", + "DEF-thigh.R.001" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig lowerarm_r", + "label": "Source Rig lowerarm_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -694.9546508789062, + -1198.0858154296875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "lowerarm_l", + "lowerarm_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-forearm.R", + "label": "Control Rig DEF-forearm.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -396.6220397949219, + -1195.67236328125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-forearm.L", + "DEF-forearm.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig thigh_r", + "label": "Source Rig thigh_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -693.8092041015625, + -1356.5272216796875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_l", + "thigh_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-thigh.R", + "label": "Control Rig DEF-thigh.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -388.8333740234375, + -1354.71728515625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thigh.L", + "DEF-thigh.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig pinky_01_l", + "label": "Source Rig pinky_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -673.6807861328125, + -1534.8900146484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "pinky_03_l", + "pinky_02_l", + "pinky_01_l" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_pinky.01.L", + "label": "Control Rig DEF-f_pinky.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -378.5688781738281, + -1535.694580078125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_pinky.03.L", + "DEF-f_pinky.02.L", + "DEF-f_pinky.01.L" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig pinky_01_r", + "label": "Source Rig pinky_01_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -671.26513671875, + -1645.1060791015625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "pinky_03_r", + "pinky_02_r", + "pinky_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_pinky.01.R", + "label": "Control Rig DEF-f_pinky.01.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -366.4906005859375, + -1646.715087890625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_pinky.03.R", + "DEF-f_pinky.02.R", + "DEF-f_pinky.01.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig ring_01_l", + "label": "Source Rig ring_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -658.008056640625, + -1867.3199462890625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "ring_03_l", + "ring_02_l", + "ring_01_l" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_ring.01.L", + "label": "Control Rig DEF-f_ring.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -371.75347900390625, + -1865.7108154296875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_ring.03.L", + "DEF-f_ring.02.L", + "DEF-f_ring.01.L" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig ring_01_r", + "label": "Source Rig ring_01_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -649.9558715820312, + -1998.452880859375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "ring_03_r", + "ring_02_r", + "ring_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_ring.01.R", + "label": "Control Rig DEF-f_ring.01.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -364.10394287109375, + -2002.0731201171875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_ring.03.R", + "DEF-f_ring.02.R", + "DEF-f_ring.01.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig middle_01_l", + "label": "Source Rig middle_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -650.7308959960938, + -2182.88037109375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "middle_03_l", + "middle_02_l", + "middle_01_l" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_middle.01.L", + "label": "Control Rig DEF-f_middle.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -357.6319274902344, + -2182.47802734375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_middle.03.L", + "DEF-f_middle.02.L", + "DEF-f_middle.01.L" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig middle_01_r", + "label": "Source Rig middle_01_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -658.3804321289062, + -2303.554931640625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "middle_03_r", + "middle_02_r", + "middle_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_middle.01.R", + "label": "Control Rig DEF-f_middle.01.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -340.3171691894531, + -2300.739013671875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_middle.03.R", + "DEF-f_middle.02.R", + "DEF-f_middle.01.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig index_01_l", + "label": "Source Rig index_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -649.1420288085938, + -2515.289306640625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "index_03_l", + "index_02_l", + "index_01_l" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_index.01.L", + "label": "Control Rig DEF-f_index.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -356.4456787109375, + -2511.6689453125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_index.03.L", + "DEF-f_index.02.L", + "DEF-f_index.01.L" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig index_01_r", + "label": "Source Rig index_01_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -647.5316162109375, + -2645.215576171875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "index_03_r", + "index_02_r", + "index_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_index.01.R", + "label": "Control Rig DEF-f_index.01.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -344.77001953125, + -2644.0087890625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_index.03.R", + "DEF-f_index.02.R", + "DEF-f_index.01.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig thumb_01_l", + "label": "Source Rig thumb_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -650.349853515625, + -2860.41845703125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thumb_03_l", + "thumb_02_l", + "thumb_01_l" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-thumb.01.L", + "label": "Control Rig DEF-thumb.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -335.1073913574219, + -2861.22314453125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thumb.03.L", + "DEF-thumb.02.L", + "DEF-thumb.01.L" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig thumb_01_r", + "label": "Source Rig thumb_01_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -643.5054931640625, + -3006.032958984375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thumb_03_r", + "thumb_02_r", + "thumb_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-thumb.01.R", + "label": "Control Rig DEF-thumb.01.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -323.8343811035156, + -3006.03271484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thumb.03.R", + "DEF-thumb.02.R", + "DEF-thumb.01.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig pinky_metacarpal_r", + "label": "Source Rig pinky_metacarpal_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -642.7376708984375, + -3187.518798828125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "pinky_metacarpal_l", + "pinky_metacarpal_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-palm.04.R", + "label": "Control Rig DEF-palm.04.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -341.9481201171875, + -3187.948486328125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-palm.04.L", + "DEF-palm.04.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig ring_metacarpal_r", + "label": "Source Rig ring_metacarpal_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -644.236328125, + -3271.605712890625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "ring_metacarpal_l", + "ring_metacarpal_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-palm.03.R", + "label": "Control Rig DEF-palm.03.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -348.6704406738281, + -3270.5732421875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-palm.03.L", + "DEF-palm.03.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig middle_metacarpal_r", + "label": "Source Rig middle_metacarpal_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -637.8878173828125, + -3368.987548828125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "middle_metacarpal_l", + "middle_metacarpal_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-palm.02.R", + "label": "Control Rig DEF-palm.02.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -346.0519104003906, + -3368.26171875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-palm.02.L", + "DEF-palm.02.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig index_metacarpal_r", + "label": "Source Rig index_metacarpal_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -635.890625, + -3455.935791015625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "index_metacarpal_l", + "index_metacarpal_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-palm.01.R", + "label": "Control Rig DEF-palm.01.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -345.49041748046875, + -3457.48486328125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-palm.01.L", + "DEF-palm.01.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig lowerarm_twist_01_r", + "label": "Source Rig lowerarm_twist_01_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -650.8260498046875, + -3621.564208984375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "lowerarm_twist_01_l", + "lowerarm_twist_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-forearm.R.002", + "label": "Control Rig DEF-forearm.R.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -348.0242614746094, + -3623.11328125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-forearm.L.002", + "DEF-forearm.R.002" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig lowerarm_twist_02_r", + "label": "Source Rig lowerarm_twist_02_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -653.4096069335938, + -3764.053466796875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "lowerarm_twist_02_l", + "lowerarm_twist_02_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-forearm.R.001", + "label": "Control Rig DEF-forearm.R.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -355.775146484375, + -3760.95556640625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-forearm.L.001", + "DEF-forearm.R.001" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig hand_r", + "label": "Source Rig hand_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -640.00732421875, + -3951.6962890625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "hand_l", + "hand_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-hand.R", + "label": "Control Rig DEF-hand.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -333.07171630859375, + -3952.212890625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-hand.L", + "DEF-hand.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig upperarm_r", + "label": "Source Rig upperarm_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -653.8892822265625, + -4120.96142578125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upperarm_l", + "upperarm_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-upper_arm.R", + "label": "Control Rig DEF-upper_arm.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -345.241455078125, + -4122.708984375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-upper_arm.L", + "DEF-upper_arm.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig upperarm_twist_01_r", + "label": "Source Rig upperarm_twist_01_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -655.7699584960938, + -4290.6552734375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upperarm_twist_01_l", + "upperarm_twist_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-upper_arm.R.001", + "label": "Control Rig DEF-upper_arm.R.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -335.6758728027344, + -4292.32958984375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-upper_arm.L.001", + "DEF-upper_arm.R.001" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig upperarm_twist_02_r", + "label": "Source Rig upperarm_twist_02_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -662.9928588867188, + -4453.42578125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upperarm_twist_02_l", + "upperarm_twist_02_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-upper_arm.R.002", + "label": "Control Rig DEF-upper_arm.R.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -344.0141296386719, + -4452.30908203125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-upper_arm.L.002", + "DEF-upper_arm.R.002" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-hand.R.001", + "label": "Control Rig DEF-hand.R.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -321.6926574707031, + -4616.6357421875 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-hand.L", + "DEF-hand.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-hand.R.002", + "label": "Control Rig DEF-hand.R.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -680.3355102539062, + -4614.40283203125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "ik_hand_l", + "ik_hand_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig ik_hand_gun", + "label": "Source Rig ik_hand_gun", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -663.5765380859375, + -4763.98291015625 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "ik_hand_gun" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-hand.R.003", + "label": "", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -322.0072937011719, + -4763.927734375 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-hand.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig ik_foot_r", + "label": "Source Rig ik_foot_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -715.6161499023438, + -4959.12060546875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "ik_foot_l", + "ik_foot_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-foot.R.001", + "label": "Control Rig DEF-foot.R.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -364.23126220703125, + -4957.44580078125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-foot.L", + "DEF-foot.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + } +] \ No newline at end of file diff --git a/src/addons/ue2rigify/resources/rig_templates/b4_0/female_mannequin_UE4/fk_to_source_links.json b/src/addons/ue2rigify/resources/rig_templates/b4_0/female_mannequin_UE4/fk_to_source_links.json new file mode 100644 index 00000000..04348306 --- /dev/null +++ b/src/addons/ue2rigify/resources/rig_templates/b4_0/female_mannequin_UE4/fk_to_source_links.json @@ -0,0 +1,530 @@ +[ + { + "from_node": "FK Legs", + "to_node": "Source Legs", + "from_socket": "toe.L", + "to_socket": "ball_l" + }, + { + "from_node": "FK Legs", + "to_node": "Source Legs", + "from_socket": "toe.R", + "to_socket": "ball_r" + }, + { + "from_node": "FK Legs", + "to_node": "Source Legs", + "from_socket": "foot_fk.L", + "to_socket": "foot_l" + }, + { + "from_node": "FK Legs", + "to_node": "Source Legs", + "from_socket": "foot_fk.R", + "to_socket": "foot_r" + }, + { + "from_node": "FK Legs", + "to_node": "Source Legs", + "from_socket": "shin_fk.L", + "to_socket": "calf_l" + }, + { + "from_node": "FK Legs", + "to_node": "Source Legs", + "from_socket": "shin_fk.R", + "to_socket": "calf_r" + }, + { + "from_node": "FK Legs", + "to_node": "Source Legs", + "from_socket": "thigh_fk.L", + "to_socket": "thigh_l" + }, + { + "from_node": "FK Legs", + "to_node": "Source Legs", + "from_socket": "thigh_fk.R", + "to_socket": "thigh_r" + }, + { + "from_node": "FK Arm", + "to_node": "Source Arm", + "from_socket": "forearm_fk.L", + "to_socket": "lowerarm_l" + }, + { + "from_node": "FK Arm", + "to_node": "Source Arm", + "from_socket": "forearm_fk.R", + "to_socket": "lowerarm_r" + }, + { + "from_node": "FK Arm", + "to_node": "Source Arm", + "from_socket": "upper_arm_fk.L", + "to_socket": "upperarm_l" + }, + { + "from_node": "FK Arm", + "to_node": "Source Arm", + "from_socket": "upper_arm_fk.R", + "to_socket": "upperarm_r" + }, + { + "from_node": "FK Arm", + "to_node": "Source Arm", + "from_socket": "hand_fk.L", + "to_socket": "hand_l" + }, + { + "from_node": "FK Arm", + "to_node": "Source Arm", + "from_socket": "hand_fk.R", + "to_socket": "hand_r" + }, + { + "from_node": "FK Legs Tweak", + "to_node": "Source Legs Tweak", + "from_socket": "thigh_tweak.L", + "to_socket": "thigh_l" + }, + { + "from_node": "FK Legs Tweak", + "to_node": "Source Legs Tweak", + "from_socket": "thigh_tweak.R", + "to_socket": "thigh_r" + }, + { + "from_node": "FK Legs Tweak", + "to_node": "Source Legs Tweak", + "from_socket": "foot_tweak.L", + "to_socket": "foot_l" + }, + { + "from_node": "FK Legs Tweak", + "to_node": "Source Legs Tweak", + "from_socket": "foot_tweak.R", + "to_socket": "foot_r" + }, + { + "from_node": "FK Legs Tweak", + "to_node": "Source Legs Tweak", + "from_socket": "shin_tweak.L.001", + "to_socket": "calf_twist_01_l" + }, + { + "from_node": "FK Legs Tweak", + "to_node": "Source Legs Tweak", + "from_socket": "shin_tweak.R.001", + "to_socket": "calf_twist_01_r" + }, + { + "from_node": "FK Legs Tweak", + "to_node": "Source Legs Tweak", + "from_socket": "shin_tweak.L", + "to_socket": "calf_l" + }, + { + "from_node": "FK Legs Tweak", + "to_node": "Source Legs Tweak", + "from_socket": "shin_tweak.R", + "to_socket": "calf_r" + }, + { + "from_node": "FK Legs Tweak", + "to_node": "Source Legs Tweak", + "from_socket": "thigh_tweak.L.001", + "to_socket": "thigh_twist_01_l" + }, + { + "from_node": "FK Legs Tweak", + "to_node": "Source Legs Tweak", + "from_socket": "thigh_tweak.R.001", + "to_socket": "thigh_twist_01_r" + }, + { + "from_node": "FK Arm Tweak", + "to_node": "Source Arm Tweak", + "from_socket": "hand_tweak.L", + "to_socket": "hand_l" + }, + { + "from_node": "FK Arm Tweak", + "to_node": "Source Arm Tweak", + "from_socket": "hand_tweak.R", + "to_socket": "hand_r" + }, + { + "from_node": "FK Arm Tweak", + "to_node": "Source Arm Tweak", + "from_socket": "forearm_tweak.L.001", + "to_socket": "lowerarm_twist_01_l" + }, + { + "from_node": "FK Arm Tweak", + "to_node": "Source Arm Tweak", + "from_socket": "forearm_tweak.R.001", + "to_socket": "lowerarm_twist_01_r" + }, + { + "from_node": "FK Arm Tweak", + "to_node": "Source Arm Tweak", + "from_socket": "forearm_tweak.L", + "to_socket": "lowerarm_l" + }, + { + "from_node": "FK Arm Tweak", + "to_node": "Source Arm Tweak", + "from_socket": "forearm_tweak.R", + "to_socket": "lowerarm_r" + }, + { + "from_node": "FK Arm Tweak", + "to_node": "Source Arm Tweak", + "from_socket": "upper_arm_tweak.L.001", + "to_socket": "upperarm_twist_01_l" + }, + { + "from_node": "FK Arm Tweak", + "to_node": "Source Arm Tweak", + "from_socket": "upper_arm_tweak.R.001", + "to_socket": "upperarm_twist_01_r" + }, + { + "from_node": "FK Arm Tweak", + "to_node": "Source Arm Tweak", + "from_socket": "upper_arm_tweak.L", + "to_socket": "upperarm_l" + }, + { + "from_node": "FK Arm Tweak", + "to_node": "Source Arm Tweak", + "from_socket": "upper_arm_tweak.R", + "to_socket": "upperarm_r" + }, + { + "from_node": "Control Rig torso", + "to_node": "Source Rig pelvis.001", + "from_socket": "torso", + "to_socket": "pelvis" + }, + { + "from_node": "FK Shoulder", + "to_node": "Source Shoulder", + "from_socket": "shoulder.R", + "to_socket": "clavicle_r" + }, + { + "from_node": "FK Shoulder", + "to_node": "Source Shoulder", + "from_socket": "shoulder.L", + "to_socket": "clavicle_l" + }, + { + "from_node": "FK Spine", + "to_node": "Source Spine", + "from_socket": "head", + "to_socket": "head" + }, + { + "from_node": "FK Spine", + "to_node": "Source Spine", + "from_socket": "neck", + "to_socket": "neck_01" + }, + { + "from_node": "FK Spine", + "to_node": "Source Spine", + "from_socket": "chest", + "to_socket": "spine_03" + }, + { + "from_node": "FK Spine", + "to_node": "Source Spine", + "from_socket": "spine_fk.002", + "to_socket": "spine_02" + }, + { + "from_node": "FK Spine", + "to_node": "Source Spine", + "from_socket": "spine_fk.001", + "to_socket": "spine_01" + }, + { + "from_node": "FK Spine", + "to_node": "Source Spine", + "from_socket": "hips", + "to_socket": "pelvis" + }, + { + "from_node": "FK Spine Tweak", + "to_node": "Source Spine Tweak", + "from_socket": "tweak_spine.004", + "to_socket": "neck_01" + }, + { + "from_node": "FK Spine Tweak", + "to_node": "Source Spine Tweak", + "from_socket": "tweak_spine.003", + "to_socket": "spine_03" + }, + { + "from_node": "FK Spine Tweak", + "to_node": "Source Spine Tweak", + "from_socket": "tweak_spine.002", + "to_socket": "spine_02" + }, + { + "from_node": "FK Spine Tweak", + "to_node": "Source Spine Tweak", + "from_socket": "tweak_spine.001", + "to_socket": "spine_01" + }, + { + "from_node": "FK Spine Tweak", + "to_node": "Source Spine Tweak", + "from_socket": "tweak_spine", + "to_socket": "pelvis" + }, + { + "from_node": "FK Hand", + "to_node": "Source Hand", + "from_socket": "f_pinky.03.L", + "to_socket": "pinky_03_l" + }, + { + "from_node": "FK Hand", + "to_node": "Source Hand", + "from_socket": "f_pinky.03.R", + "to_socket": "pinky_03_r" + }, + { + "from_node": "FK Hand", + "to_node": "Source Hand", + "from_socket": "f_pinky.02.L", + "to_socket": "pinky_02_l" + }, + { + "from_node": "FK Hand", + "to_node": "Source Hand", + "from_socket": "f_pinky.02.R", + "to_socket": "pinky_02_r" + }, + { + "from_node": "FK Hand", + "to_node": "Source Hand", + "from_socket": "f_pinky.01.L", + "to_socket": "pinky_01_l" + }, + { + "from_node": "FK Hand", + "to_node": "Source Hand", + "from_socket": "f_pinky.01.R", + "to_socket": "pinky_01_r" + }, + { + "from_node": "FK Hand", + "to_node": "Source Hand", + "from_socket": "f_ring.03.L", + "to_socket": "ring_03_l" + }, + { + "from_node": "FK Hand", + "to_node": "Source Hand", + "from_socket": "f_ring.03.R", + "to_socket": "ring_03_r" + }, + { + "from_node": "FK Hand", + "to_node": "Source Hand", + "from_socket": "f_ring.02.L", + "to_socket": "ring_02_l" + }, + { + "from_node": "FK Hand", + "to_node": "Source Hand", + "from_socket": "f_ring.02.R", + "to_socket": "ring_02_r" + }, + { + "from_node": "FK Hand", + "to_node": "Source Hand", + "from_socket": "f_ring.01.L", + "to_socket": "ring_01_l" + }, + { + "from_node": "FK Hand", + "to_node": "Source Hand", + "from_socket": "f_ring.01.R", + "to_socket": "ring_01_r" + }, + { + "from_node": "FK Hand", + "to_node": "Source Hand", + "from_socket": "f_middle.03.L", + "to_socket": "middle_03_l" + }, + { + "from_node": "FK Hand", + "to_node": "Source Hand", + "from_socket": "f_middle.03.R", + "to_socket": "middle_03_r" + }, + { + "from_node": "FK Hand", + "to_node": "Source Hand", + "from_socket": "f_middle.02.L", + "to_socket": "middle_02_l" + }, + { + "from_node": "FK Hand", + "to_node": "Source Hand", + "from_socket": "f_middle.02.R", + "to_socket": "middle_02_r" + }, + { + "from_node": "FK Hand", + "to_node": "Source Hand", + "from_socket": "f_middle.01.L", + "to_socket": "middle_01_l" + }, + { + "from_node": "FK Hand", + "to_node": "Source Hand", + "from_socket": "f_middle.01.R", + "to_socket": "middle_01_r" + }, + { + "from_node": "FK Hand", + "to_node": "Source Hand", + "from_socket": "f_index.03.L", + "to_socket": "index_03_l" + }, + { + "from_node": "FK Hand", + "to_node": "Source Hand", + "from_socket": "f_index.03.R", + "to_socket": "index_03_r" + }, + { + "from_node": "FK Hand", + "to_node": "Source Hand", + "from_socket": "f_index.02.L", + "to_socket": "index_02_l" + }, + { + "from_node": "FK Hand", + "to_node": "Source Hand", + "from_socket": "f_index.02.R", + "to_socket": "index_02_r" + }, + { + "from_node": "FK Hand", + "to_node": "Source Hand", + "from_socket": "f_index.01.L", + "to_socket": "index_01_l" + }, + { + "from_node": "FK Hand", + "to_node": "Source Hand", + "from_socket": "f_index.01.R", + "to_socket": "index_01_r" + }, + { + "from_node": "FK Hand", + "to_node": "Source Hand", + "from_socket": "thumb.03.L", + "to_socket": "thumb_03_l" + }, + { + "from_node": "FK Hand", + "to_node": "Source Hand", + "from_socket": "thumb.03.R", + "to_socket": "thumb_03_r" + }, + { + "from_node": "FK Hand", + "to_node": "Source Hand", + "from_socket": "thumb.02.L", + "to_socket": "thumb_02_l" + }, + { + "from_node": "FK Hand", + "to_node": "Source Hand", + "from_socket": "thumb.02.R", + "to_socket": "thumb_02_r" + }, + { + "from_node": "FK Hand", + "to_node": "Source Hand", + "from_socket": "thumb.01.L", + "to_socket": "thumb_01_l" + }, + { + "from_node": "FK Hand", + "to_node": "Source Hand", + "from_socket": "thumb.01.R", + "to_socket": "thumb_01_r" + }, + { + "from_node": "FK Hand Controls", + "to_node": "Source Rig pinky_01_l.001", + "from_socket": "f_pinky.01_master.L", + "to_socket": "pinky_01_l" + }, + { + "from_node": "FK Hand Controls", + "to_node": "Source Rig pinky_01_l.001", + "from_socket": "f_pinky.01_master.R", + "to_socket": "pinky_01_r" + }, + { + "from_node": "FK Hand Controls", + "to_node": "Source Rig pinky_01_l.001", + "from_socket": "f_ring.01_master.L", + "to_socket": "ring_01_l" + }, + { + "from_node": "FK Hand Controls", + "to_node": "Source Rig pinky_01_l.001", + "from_socket": "f_ring.01_master.R", + "to_socket": "ring_01_r" + }, + { + "from_node": "FK Hand Controls", + "to_node": "Source Rig pinky_01_l.001", + "from_socket": "f_middle.01_master.L", + "to_socket": "middle_01_l" + }, + { + "from_node": "FK Hand Controls", + "to_node": "Source Rig pinky_01_l.001", + "from_socket": "f_middle.01_master.R", + "to_socket": "middle_01_r" + }, + { + "from_node": "FK Hand Controls", + "to_node": "Source Rig pinky_01_l.001", + "from_socket": "f_index.01_master.L", + "to_socket": "index_01_l" + }, + { + "from_node": "FK Hand Controls", + "to_node": "Source Rig pinky_01_l.001", + "from_socket": "f_index.01_master.R", + "to_socket": "index_01_r" + }, + { + "from_node": "FK Hand Controls", + "to_node": "Source Rig pinky_01_l.001", + "from_socket": "thumb.01_master.L", + "to_socket": "thumb_01_l" + }, + { + "from_node": "FK Hand Controls", + "to_node": "Source Rig pinky_01_l.001", + "from_socket": "thumb.01_master.R", + "to_socket": "thumb_01_r" + } +] \ No newline at end of file diff --git a/src/addons/ue2rigify/resources/rig_templates/b4_0/female_mannequin_UE4/fk_to_source_nodes.json b/src/addons/ue2rigify/resources/rig_templates/b4_0/female_mannequin_UE4/fk_to_source_nodes.json new file mode 100644 index 00000000..997d6529 --- /dev/null +++ b/src/addons/ue2rigify/resources/rig_templates/b4_0/female_mannequin_UE4/fk_to_source_nodes.json @@ -0,0 +1,598 @@ +[ + { + "name": "FK Legs", + "label": "FK Legs", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 180.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "toe.L", + "toe.R", + "foot_fk.L", + "foot_fk.R", + "shin_fk.L", + "shin_fk.R", + "thigh_fk.L", + "thigh_fk.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Legs", + "label": "Source Legs", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 180.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "ball_l", + "ball_r", + "foot_l", + "foot_r", + "calf_l", + "calf_r", + "thigh_l", + "thigh_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "FK Legs Tweak", + "label": "FK Legs Tweak", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 474.12603759765625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_tweak.L", + "thigh_tweak.R", + "foot_tweak.L", + "foot_tweak.R", + "shin_tweak.L.001", + "shin_tweak.R.001", + "shin_tweak.L", + "shin_tweak.R", + "thigh_tweak.L.001", + "thigh_tweak.R.001" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "FK Arm", + "label": "FK Arm", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 702.3451538085938 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "forearm_fk.L", + "forearm_fk.R", + "upper_arm_fk.L", + "upper_arm_fk.R", + "hand_fk.L", + "hand_fk.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Arm", + "label": "Source Arm", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 299.9999694824219, + 702.3451538085938 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "lowerarm_l", + "lowerarm_r", + "upperarm_l", + "upperarm_r", + "hand_l", + "hand_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Legs Tweak", + "label": "Source Legs Tweak", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0000305175781, + 474.12603759765625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "thigh_l", + "thigh_r", + "foot_l", + "foot_r", + "calf_twist_01_l", + "calf_twist_01_r", + "calf_l", + "calf_r", + "thigh_twist_01_l", + "thigh_twist_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "FK Arm Tweak", + "label": "FK Arm Tweak", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1062.34521484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "hand_tweak.L", + "hand_tweak.R", + "forearm_tweak.L.001", + "forearm_tweak.R.001", + "forearm_tweak.L", + "forearm_tweak.R", + "upper_arm_tweak.L.001", + "upper_arm_tweak.R.001", + "upper_arm_tweak.L", + "upper_arm_tweak.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Arm Tweak", + "label": "Source Arm Tweak", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1062.34521484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "hand_l", + "hand_r", + "lowerarm_twist_01_l", + "lowerarm_twist_01_r", + "lowerarm_l", + "lowerarm_r", + "upperarm_twist_01_l", + "upperarm_twist_01_r", + "upperarm_l", + "upperarm_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig pelvis.001", + "label": "Source Rig pelvis", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 309.4255676269531, + -76.4423828125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "pelvis" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig torso", + "label": "Control Rig torso", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -290.574462890625, + -76.4423828125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "torso" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "FK Shoulder", + "label": "FK Shoulder", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 801.0189819335938 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "shoulder.R", + "shoulder.L" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Shoulder", + "label": "Source Shoulder", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 801.0189819335938 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "clavicle_r", + "clavicle_l" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "FK Spine", + "label": "FK Spine", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -297.4525451660156, + 1296.658447265625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "head", + "neck", + "chest", + "spine_fk.002", + "spine_fk.001", + "hips" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Spine", + "label": "Source Spine", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 302.5474853515625, + 1296.658447265625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "head", + "neck_01", + "spine_03", + "spine_02", + "spine_01", + "pelvis" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "FK Spine Tweak", + "label": "FK Spine Tweak", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1504.038818359375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "tweak_spine.004", + "tweak_spine.003", + "tweak_spine.002", + "tweak_spine.001", + "tweak_spine" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Spine Tweak", + "label": "Source Spine Tweak", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1504.038818359375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "neck_01", + "spine_03", + "spine_02", + "spine_01", + "pelvis" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Hand", + "label": "Source Hand", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.00006103515625, + 2288.437744140625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "pinky_03_l", + "pinky_03_r", + "pinky_02_l", + "pinky_02_r", + "pinky_01_l", + "pinky_01_r", + "ring_03_l", + "ring_03_r", + "ring_02_l", + "ring_02_r", + "ring_01_l", + "ring_01_r", + "middle_03_l", + "middle_03_r", + "middle_02_l", + "middle_02_r", + "middle_01_l", + "middle_01_r", + "index_03_l", + "index_03_r", + "index_02_l", + "index_02_r", + "index_01_l", + "index_01_r", + "thumb_03_l", + "thumb_03_r", + "thumb_02_l", + "thumb_02_r", + "thumb_01_l", + "thumb_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "FK Hand", + "label": "FK Hand", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2288.437744140625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_pinky.03.L", + "f_pinky.03.R", + "f_pinky.02.L", + "f_pinky.02.R", + "f_pinky.01.L", + "f_pinky.01.R", + "f_ring.03.L", + "f_ring.03.R", + "f_ring.02.L", + "f_ring.02.R", + "f_ring.01.L", + "f_ring.01.R", + "f_middle.03.L", + "f_middle.03.R", + "f_middle.02.L", + "f_middle.02.R", + "f_middle.01.L", + "f_middle.01.R", + "f_index.03.L", + "f_index.03.R", + "f_index.02.L", + "f_index.02.R", + "f_index.01.L", + "f_index.01.R", + "thumb.03.L", + "thumb.03.R", + "thumb.02.L", + "thumb.02.R", + "thumb.01.L", + "thumb.01.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "FK Hand Controls", + "label": "FK Hand Controls", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -305.9546203613281, + 2651.373046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_pinky.01_master.L", + "f_pinky.01_master.R", + "f_ring.01_master.L", + "f_ring.01_master.R", + "f_middle.01_master.L", + "f_middle.01_master.R", + "f_index.01_master.L", + "f_index.01_master.R", + "thumb.01_master.L", + "thumb.01_master.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Hand Controls", + "label": "Source Hand Controls", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 305.95465087890625, + 2648.400390625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "pinky_01_l", + "pinky_01_r", + "ring_01_l", + "ring_01_r", + "middle_01_l", + "middle_01_r", + "index_01_l", + "index_01_r", + "thumb_01_l", + "thumb_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + } +] \ No newline at end of file diff --git a/src/addons/ue2rigify/resources/rig_templates/b4_0/female_mannequin_UE4/metarig.py b/src/addons/ue2rigify/resources/rig_templates/b4_0/female_mannequin_UE4/metarig.py new file mode 100644 index 00000000..b4294080 --- /dev/null +++ b/src/addons/ue2rigify/resources/rig_templates/b4_0/female_mannequin_UE4/metarig.py @@ -0,0 +1,970 @@ +import bpy + +from rna_prop_ui import rna_idprop_ui_create + +from mathutils import Color + + +def create(obj): # noqa + # generated by rigify.utils.write_metarig + bpy.ops.object.mode_set(mode='EDIT') + arm = obj.data + + for i in range(6): + arm.rigify_colors.add() + + arm.rigify_colors[0].name = "Root" + arm.rigify_colors[0].active = Color((0.5490, 1.0000, 1.0000)) + arm.rigify_colors[0].normal = Color((0.4353, 0.1843, 0.4157)) + arm.rigify_colors[0].select = Color((0.3137, 0.7843, 1.0000)) + arm.rigify_colors[0].standard_colors_lock = True + arm.rigify_colors[1].name = "IK" + arm.rigify_colors[1].active = Color((0.5490, 1.0000, 1.0000)) + arm.rigify_colors[1].normal = Color((0.6039, 0.0000, 0.0000)) + arm.rigify_colors[1].select = Color((0.3137, 0.7843, 1.0000)) + arm.rigify_colors[1].standard_colors_lock = True + arm.rigify_colors[2].name = "Special" + arm.rigify_colors[2].active = Color((0.5490, 1.0000, 1.0000)) + arm.rigify_colors[2].normal = Color((0.9569, 0.7882, 0.0471)) + arm.rigify_colors[2].select = Color((0.3137, 0.7843, 1.0000)) + arm.rigify_colors[2].standard_colors_lock = True + arm.rigify_colors[3].name = "Tweak" + arm.rigify_colors[3].active = Color((0.5490, 1.0000, 1.0000)) + arm.rigify_colors[3].normal = Color((0.0392, 0.2118, 0.5804)) + arm.rigify_colors[3].select = Color((0.3137, 0.7843, 1.0000)) + arm.rigify_colors[3].standard_colors_lock = True + arm.rigify_colors[4].name = "FK" + arm.rigify_colors[4].active = Color((0.5490, 1.0000, 1.0000)) + arm.rigify_colors[4].normal = Color((0.1176, 0.5686, 0.0353)) + arm.rigify_colors[4].select = Color((0.3137, 0.7843, 1.0000)) + arm.rigify_colors[4].standard_colors_lock = True + arm.rigify_colors[5].name = "Extra" + arm.rigify_colors[5].active = Color((0.5490, 1.0000, 1.0000)) + arm.rigify_colors[5].normal = Color((0.9686, 0.2510, 0.0941)) + arm.rigify_colors[5].select = Color((0.3137, 0.7843, 1.0000)) + arm.rigify_colors[5].standard_colors_lock = True + + bone_collections = {} + + for bcoll in list(arm.collections): + arm.collections.remove(bcoll) + + def add_bone_collection(name, *, ui_row=0, ui_title='', sel_set=False, color_set_id=0): + new_bcoll = arm.collections.new(name) + new_bcoll.rigify_ui_row = ui_row + new_bcoll.rigify_ui_title = ui_title + new_bcoll.rigify_sel_set = sel_set + new_bcoll.rigify_color_set_id = color_set_id + bone_collections[name] = new_bcoll + + def assign_bone_collections(pose_bone, *coll_names): + assert not len(pose_bone.bone.collections) + for name in coll_names: + bone_collections[name].assign(pose_bone) + + def assign_bone_collection_refs(params, attr_name, *coll_names): + ref_list = getattr(params, attr_name + '_coll_refs', None) + if ref_list is not None: + for name in coll_names: + ref_list.add().set_collection(bone_collections[name]) + + add_bone_collection('Face', ui_row=1, color_set_id=5) + add_bone_collection('Face (Primary)', ui_row=2, color_set_id=2) + add_bone_collection('Face (Secondary)', ui_row=2, color_set_id=3) + add_bone_collection('Torso', ui_row=3, color_set_id=3) + add_bone_collection('Torso (Tweak)', ui_row=4, color_set_id=4) + add_bone_collection('Fingers', ui_row=5, color_set_id=6) + add_bone_collection('Fingers (Detail)', ui_row=6, color_set_id=5) + add_bone_collection('Arm.L (IK)', ui_row=7, color_set_id=2) + add_bone_collection('Arm.L (FK)', ui_row=8, color_set_id=5) + add_bone_collection('Arm.L (Tweak)', ui_row=9, color_set_id=4) + add_bone_collection('Arm.R (IK)', ui_row=7, color_set_id=2) + add_bone_collection('Arm.R (FK)', ui_row=8, color_set_id=5) + add_bone_collection('Arm.R (Tweak)', ui_row=9, color_set_id=4) + add_bone_collection('Leg.L (IK)', ui_row=10, color_set_id=2) + add_bone_collection('Leg.L (FK)', ui_row=11, color_set_id=5) + add_bone_collection('Leg.L (Tweak)', ui_row=12, color_set_id=4) + add_bone_collection('Leg.R (IK)', ui_row=10, color_set_id=2) + add_bone_collection('Leg.R (FK)', ui_row=11, color_set_id=5) + add_bone_collection('Leg.R (Tweak)', ui_row=12, color_set_id=4) + add_bone_collection('Root', ui_row=15, color_set_id=1) + + bones = {} + + bone = arm.edit_bones.new('spine') + bone.head = 0.0000, 0.0106, 0.9675 + bone.tail = 0.0000, -0.0040, 1.1192 + bone.roll = -0.0000 + bone.use_connect = False + bones['spine'] = bone.name + bone = arm.edit_bones.new('spine.001') + bone.head = 0.0000, -0.0040, 1.1192 + bone.tail = 0.0000, 0.0094, 1.2186 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine']] + bones['spine.001'] = bone.name + bone = arm.edit_bones.new('thigh.L') + bone.head = 0.0903, 0.0240, 0.9346 + bone.tail = 0.1328, 0.0397, 0.5159 + bone.roll = 1.5921 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine']] + bones['thigh.L'] = bone.name + bone = arm.edit_bones.new('thigh.R') + bone.head = -0.0903, 0.0240, 0.9346 + bone.tail = -0.1328, 0.0397, 0.5159 + bone.roll = -1.5921 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine']] + bones['thigh.R'] = bone.name + bone = arm.edit_bones.new('spine.002') + bone.head = 0.0000, 0.0094, 1.2186 + bone.tail = 0.0000, 0.0329, 1.3880 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine.001']] + bones['spine.002'] = bone.name + bone = arm.edit_bones.new('shin.L') + bone.head = 0.1328, 0.0397, 0.5159 + bone.tail = 0.1521, 0.0738, 0.1240 + bone.roll = 1.5925 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thigh.L']] + bones['shin.L'] = bone.name + bone = arm.edit_bones.new('shin.R') + bone.head = -0.1328, 0.0397, 0.5159 + bone.tail = -0.1521, 0.0738, 0.1240 + bone.roll = -1.5925 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thigh.R']] + bones['shin.R'] = bone.name + bone = arm.edit_bones.new('spine.003') + bone.head = 0.0000, 0.0329, 1.3880 + bone.tail = 0.0000, 0.0552, 1.4832 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine.002']] + bones['spine.003'] = bone.name + bone = arm.edit_bones.new('foot.L') + bone.head = 0.1521, 0.0738, 0.1240 + bone.tail = 0.1626, -0.0570, 0.0162 + bone.roll = -0.0423 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['shin.L']] + bones['foot.L'] = bone.name + bone = arm.edit_bones.new('foot.R') + bone.head = -0.1521, 0.0738, 0.1240 + bone.tail = -0.1626, -0.0570, 0.0162 + bone.roll = 0.0423 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['shin.R']] + bones['foot.R'] = bone.name + bone = arm.edit_bones.new('spine.004') + bone.head = 0.0000, 0.0552, 1.4832 + bone.tail = 0.0000, 0.0561, 1.6126 + bone.roll = 0.0000 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine.003']] + bones['spine.004'] = bone.name + bone = arm.edit_bones.new('shoulder.L') + bone.head = 0.0235, 0.0740, 1.4291 + bone.tail = 0.1243, 0.1036, 1.4399 + bone.roll = -1.5708 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine.003']] + bones['shoulder.L'] = bone.name + bone = arm.edit_bones.new('shoulder.R') + bone.head = -0.0235, 0.0740, 1.4291 + bone.tail = -0.1243, 0.1036, 1.4399 + bone.roll = 1.5708 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine.003']] + bones['shoulder.R'] = bone.name + bone = arm.edit_bones.new('toe.L') + bone.head = 0.1626, -0.0570, 0.0162 + bone.tail = 0.1545, -0.1203, 0.0144 + bone.roll = -0.2618 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['foot.L']] + bones['toe.L'] = bone.name + bone = arm.edit_bones.new('heel.02.L') + bone.head = 0.1411, 0.1219, 0.0000 + bone.tail = 0.2211, 0.1219, 0.0000 + bone.roll = -0.0000 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['foot.L']] + bones['heel.02.L'] = bone.name + bone = arm.edit_bones.new('toe.R') + bone.head = -0.1626, -0.0570, 0.0162 + bone.tail = -0.1545, -0.1203, 0.0144 + bone.roll = 0.2618 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['foot.R']] + bones['toe.R'] = bone.name + bone = arm.edit_bones.new('heel.02.R') + bone.head = -0.1411, 0.1219, 0.0000 + bone.tail = -0.2211, 0.1219, 0.0000 + bone.roll = 0.0000 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['foot.R']] + bones['heel.02.R'] = bone.name + bone = arm.edit_bones.new('spine.005') + bone.head = 0.0000, 0.0561, 1.6126 + bone.tail = 0.0000, 0.0610, 1.7299 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine.004']] + bones['spine.005'] = bone.name + bone = arm.edit_bones.new('upper_arm.L') + bone.head = 0.1153, 0.0751, 1.4071 + bone.tail = 0.3201, 0.1163, 1.2145 + bone.roll = -1.6802 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['shoulder.L']] + bones['upper_arm.L'] = bone.name + bone = arm.edit_bones.new('upper_arm.R') + bone.head = -0.1153, 0.0751, 1.4071 + bone.tail = -0.3201, 0.1163, 1.2145 + bone.roll = 1.6802 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['shoulder.R']] + bones['upper_arm.R'] = bone.name + bone = arm.edit_bones.new('forearm.L') + bone.head = 0.3201, 0.1163, 1.2145 + bone.tail = 0.4874, 0.0301, 1.0781 + bone.roll = -1.5334 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['upper_arm.L']] + bones['forearm.L'] = bone.name + bone = arm.edit_bones.new('forearm.R') + bone.head = -0.3201, 0.1163, 1.2145 + bone.tail = -0.4874, 0.0301, 1.0781 + bone.roll = 1.5334 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['upper_arm.R']] + bones['forearm.R'] = bone.name + bone = arm.edit_bones.new('hand.L') + bone.head = 0.4874, 0.0301, 1.0781 + bone.tail = 0.5474, -0.0116, 1.0188 + bone.roll = 0.7854 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['forearm.L']] + bones['hand.L'] = bone.name + bone = arm.edit_bones.new('hand.R') + bone.head = -0.4874, 0.0301, 1.0781 + bone.tail = -0.5474, -0.0116, 1.0188 + bone.roll = -0.7854 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['forearm.R']] + bones['hand.R'] = bone.name + bone = arm.edit_bones.new('f_index.01.L') + bone.head = 0.5381, -0.0300, 1.0126 + bone.tail = 0.5530, -0.0396, 0.9820 + bone.roll = -0.0000 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.L']] + bones['f_index.01.L'] = bone.name + bone = arm.edit_bones.new('thumb.01.L') + bone.head = 0.4934, -0.0050, 1.0437 + bone.tail = 0.4942, -0.0311, 1.0260 + bone.roll = 0.2618 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.L']] + bones['thumb.01.L'] = bone.name + bone = arm.edit_bones.new('f_middle.01.L') + bone.head = 0.5508, -0.0113, 1.0106 + bone.tail = 0.5683, -0.0203, 0.9772 + bone.roll = -0.2618 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.L']] + bones['f_middle.01.L'] = bone.name + bone = arm.edit_bones.new('f_ring.01.L') + bone.head = 0.5525, 0.0086, 1.0073 + bone.tail = 0.5690, 0.0023, 0.9790 + bone.roll = -0.5236 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.L']] + bones['f_ring.01.L'] = bone.name + bone = arm.edit_bones.new('f_pinky.01.L') + bone.head = 0.5489, 0.0272, 1.0076 + bone.tail = 0.5635, 0.0259, 0.9815 + bone.roll = -0.7854 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.L']] + bones['f_pinky.01.L'] = bone.name + bone = arm.edit_bones.new('f_index.01.R') + bone.head = -0.5381, -0.0300, 1.0126 + bone.tail = -0.5530, -0.0396, 0.9820 + bone.roll = 0.0000 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.R']] + bones['f_index.01.R'] = bone.name + bone = arm.edit_bones.new('thumb.01.R') + bone.head = -0.4934, -0.0050, 1.0437 + bone.tail = -0.4942, -0.0311, 1.0260 + bone.roll = -0.2618 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.R']] + bones['thumb.01.R'] = bone.name + bone = arm.edit_bones.new('f_middle.01.R') + bone.head = -0.5508, -0.0113, 1.0106 + bone.tail = -0.5683, -0.0203, 0.9772 + bone.roll = 0.2618 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.R']] + bones['f_middle.01.R'] = bone.name + bone = arm.edit_bones.new('f_ring.01.R') + bone.head = -0.5525, 0.0086, 1.0073 + bone.tail = -0.5690, 0.0023, 0.9790 + bone.roll = 0.5236 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.R']] + bones['f_ring.01.R'] = bone.name + bone = arm.edit_bones.new('f_pinky.01.R') + bone.head = -0.5489, 0.0272, 1.0076 + bone.tail = -0.5635, 0.0259, 0.9815 + bone.roll = 0.7854 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.R']] + bones['f_pinky.01.R'] = bone.name + bone = arm.edit_bones.new('f_index.02.L') + bone.head = 0.5530, -0.0396, 0.9820 + bone.tail = 0.5585, -0.0461, 0.9554 + bone.roll = 0.3044 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_index.01.L']] + bones['f_index.02.L'] = bone.name + bone = arm.edit_bones.new('thumb.02.L') + bone.head = 0.4942, -0.0311, 1.0260 + bone.tail = 0.4964, -0.0521, 0.9998 + bone.roll = 0.2020 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thumb.01.L']] + bones['thumb.02.L'] = bone.name + bone = arm.edit_bones.new('f_middle.02.L') + bone.head = 0.5683, -0.0203, 0.9772 + bone.tail = 0.5757, -0.0269, 0.9498 + bone.roll = 0.0022 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_middle.01.L']] + bones['f_middle.02.L'] = bone.name + bone = arm.edit_bones.new('f_ring.02.L') + bone.head = 0.5690, 0.0023, 0.9790 + bone.tail = 0.5748, -0.0027, 0.9518 + bone.roll = -0.1482 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_ring.01.L']] + bones['f_ring.02.L'] = bone.name + bone = arm.edit_bones.new('f_pinky.02.L') + bone.head = 0.5635, 0.0259, 0.9815 + bone.tail = 0.5717, 0.0239, 0.9583 + bone.roll = -0.6040 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_pinky.01.L']] + bones['f_pinky.02.L'] = bone.name + bone = arm.edit_bones.new('f_index.02.R') + bone.head = -0.5530, -0.0396, 0.9820 + bone.tail = -0.5585, -0.0461, 0.9554 + bone.roll = -0.3044 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_index.01.R']] + bones['f_index.02.R'] = bone.name + bone = arm.edit_bones.new('thumb.02.R') + bone.head = -0.4942, -0.0311, 1.0260 + bone.tail = -0.4964, -0.0521, 0.9998 + bone.roll = -0.2020 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thumb.01.R']] + bones['thumb.02.R'] = bone.name + bone = arm.edit_bones.new('f_middle.02.R') + bone.head = -0.5683, -0.0203, 0.9772 + bone.tail = -0.5757, -0.0269, 0.9498 + bone.roll = -0.0022 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_middle.01.R']] + bones['f_middle.02.R'] = bone.name + bone = arm.edit_bones.new('f_ring.02.R') + bone.head = -0.5690, 0.0023, 0.9790 + bone.tail = -0.5748, -0.0027, 0.9518 + bone.roll = 0.1482 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_ring.01.R']] + bones['f_ring.02.R'] = bone.name + bone = arm.edit_bones.new('f_pinky.02.R') + bone.head = -0.5635, 0.0259, 0.9815 + bone.tail = -0.5717, 0.0239, 0.9583 + bone.roll = 0.6040 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_pinky.01.R']] + bones['f_pinky.02.R'] = bone.name + bone = arm.edit_bones.new('f_index.03.L') + bone.head = 0.5585, -0.0461, 0.9554 + bone.tail = 0.5666, -0.0537, 0.9317 + bone.roll = 0.1551 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_index.02.L']] + bones['f_index.03.L'] = bone.name + bone = arm.edit_bones.new('thumb.03.L') + bone.head = 0.4964, -0.0521, 0.9998 + bone.tail = 0.4970, -0.0689, 0.9784 + bone.roll = 0.3097 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thumb.02.L']] + bones['thumb.03.L'] = bone.name + bone = arm.edit_bones.new('f_middle.03.L') + bone.head = 0.5757, -0.0269, 0.9498 + bone.tail = 0.5869, -0.0337, 0.9254 + bone.roll = -0.1971 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_middle.02.L']] + bones['f_middle.03.L'] = bone.name + bone = arm.edit_bones.new('f_ring.03.L') + bone.head = 0.5748, -0.0027, 0.9518 + bone.tail = 0.5833, -0.0066, 0.9291 + bone.roll = -0.3228 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_ring.02.L']] + bones['f_ring.03.L'] = bone.name + bone = arm.edit_bones.new('f_pinky.03.L') + bone.head = 0.5717, 0.0239, 0.9583 + bone.tail = 0.5792, 0.0222, 0.9405 + bone.roll = -0.6636 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_pinky.02.L']] + bones['f_pinky.03.L'] = bone.name + bone = arm.edit_bones.new('f_index.03.R') + bone.head = -0.5585, -0.0461, 0.9554 + bone.tail = -0.5666, -0.0537, 0.9317 + bone.roll = -0.1551 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_index.02.R']] + bones['f_index.03.R'] = bone.name + bone = arm.edit_bones.new('thumb.03.R') + bone.head = -0.4964, -0.0521, 0.9998 + bone.tail = -0.4970, -0.0689, 0.9784 + bone.roll = -0.3097 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thumb.02.R']] + bones['thumb.03.R'] = bone.name + bone = arm.edit_bones.new('f_middle.03.R') + bone.head = -0.5757, -0.0269, 0.9498 + bone.tail = -0.5869, -0.0337, 0.9254 + bone.roll = 0.1971 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_middle.02.R']] + bones['f_middle.03.R'] = bone.name + bone = arm.edit_bones.new('f_ring.03.R') + bone.head = -0.5748, -0.0027, 0.9518 + bone.tail = -0.5833, -0.0066, 0.9291 + bone.roll = 0.3228 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_ring.02.R']] + bones['f_ring.03.R'] = bone.name + bone = arm.edit_bones.new('f_pinky.03.R') + bone.head = -0.5717, 0.0239, 0.9583 + bone.tail = -0.5792, 0.0222, 0.9405 + bone.roll = 0.6636 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_pinky.02.R']] + bones['f_pinky.03.R'] = bone.name + + bpy.ops.object.mode_set(mode='OBJECT') + pbone = obj.pose.bones[bones['spine']] + pbone.rigify_type = 'spines.basic_spine' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + try: + pbone.rigify_parameters.pivot_pos = 2 + except AttributeError: + pass + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Torso (Tweak)') + assign_bone_collection_refs(pbone.rigify_parameters, 'fk', 'Torso (Tweak)') + pbone = obj.pose.bones[bones['spine.001']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + pbone = obj.pose.bones[bones['thigh.L']] + pbone.rigify_type = 'limbs.super_limb' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.L (IK)') + try: + pbone.rigify_parameters.limb_type = 'leg' + except AttributeError: + pass + assign_bone_collection_refs(pbone.rigify_parameters, 'fk', 'Leg.L (FK)') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Leg.L (Tweak)') + pbone = obj.pose.bones[bones['thigh.R']] + pbone.rigify_type = 'limbs.super_limb' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.R (IK)') + try: + pbone.rigify_parameters.limb_type = 'leg' + except AttributeError: + pass + assign_bone_collection_refs(pbone.rigify_parameters, 'fk', 'Leg.R (FK)') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Leg.R (Tweak)') + pbone = obj.pose.bones[bones['spine.002']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + pbone = obj.pose.bones[bones['shin.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.L (IK)') + pbone = obj.pose.bones[bones['shin.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.R (IK)') + pbone = obj.pose.bones[bones['spine.003']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + pbone = obj.pose.bones[bones['foot.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.L (IK)') + pbone = obj.pose.bones[bones['foot.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.R (IK)') + pbone = obj.pose.bones[bones['spine.004']] + pbone.rigify_type = 'spines.super_head' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + try: + pbone.rigify_parameters.connect_chain = True + except AttributeError: + pass + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Torso (Tweak)') + pbone = obj.pose.bones[bones['shoulder.L']] + pbone.rigify_type = 'basic.super_copy' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Torso') + try: + pbone.rigify_parameters.make_widget = False + except AttributeError: + pass + pbone = obj.pose.bones[bones['shoulder.R']] + pbone.rigify_type = 'basic.super_copy' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Torso') + try: + pbone.rigify_parameters.make_widget = False + except AttributeError: + pass + pbone = obj.pose.bones[bones['toe.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.L (IK)') + pbone = obj.pose.bones[bones['heel.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.L (IK)') + pbone = obj.pose.bones[bones['toe.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.R (IK)') + pbone = obj.pose.bones[bones['heel.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.R (IK)') + pbone = obj.pose.bones[bones['spine.005']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + pbone = obj.pose.bones[bones['upper_arm.L']] + pbone.rigify_type = 'limbs.super_limb' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Arm.L (IK)') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Arm.L (Tweak)') + assign_bone_collection_refs(pbone.rigify_parameters, 'fk', 'Arm.L (FK)') + pbone = obj.pose.bones[bones['upper_arm.R']] + pbone.rigify_type = 'limbs.super_limb' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Arm.R (IK)') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Arm.R (Tweak)') + assign_bone_collection_refs(pbone.rigify_parameters, 'fk', 'Arm.R (FK)') + pbone = obj.pose.bones[bones['forearm.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Arm.L (IK)') + pbone = obj.pose.bones[bones['forearm.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Arm.R (IK)') + pbone = obj.pose.bones[bones['hand.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Arm.L (IK)') + pbone = obj.pose.bones[bones['hand.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Arm.R (IK)') + pbone = obj.pose.bones[bones['f_index.01.L']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['thumb.01.L']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_middle.01.L']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_ring.01.L']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_pinky.01.L']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_index.01.R']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['thumb.01.R']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_middle.01.R']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_ring.01.R']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_pinky.01.R']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_index.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['thumb.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_middle.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_ring.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_pinky.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_index.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['thumb.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_middle.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_ring.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_pinky.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_index.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['thumb.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_middle.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_ring.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_pinky.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_index.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['thumb.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_middle.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_ring.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_pinky.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + + bpy.ops.object.mode_set(mode='EDIT') + for bone in arm.edit_bones: + bone.select = False + bone.select_head = False + bone.select_tail = False + for b in bones: + bone = arm.edit_bones[bones[b]] + bone.select = True + bone.select_head = True + bone.select_tail = True + bone.bbone_x = bone.bbone_z = bone.length * 0.05 + arm.edit_bones.active = bone + + arm.collections.active_index = 0 + + return bones + + +if __name__ == "__main__": + create(bpy.context.active_object) diff --git a/src/addons/ue2rigify/resources/rig_templates/b4_0/female_mannequin_UE4/source_to_deform_links.json b/src/addons/ue2rigify/resources/rig_templates/b4_0/female_mannequin_UE4/source_to_deform_links.json new file mode 100644 index 00000000..cee615c5 --- /dev/null +++ b/src/addons/ue2rigify/resources/rig_templates/b4_0/female_mannequin_UE4/source_to_deform_links.json @@ -0,0 +1,362 @@ +[ + { + "from_node": "Source Arms", + "to_node": "DEF Arms", + "from_socket": "hand_l", + "to_socket": "DEF-hand.L" + }, + { + "from_node": "Source Arms", + "to_node": "DEF Arms", + "from_socket": "hand_r", + "to_socket": "DEF-hand.R" + }, + { + "from_node": "Source Arms", + "to_node": "DEF Arms", + "from_socket": "lowerarm_twist_01_l", + "to_socket": "DEF-forearm.L.001" + }, + { + "from_node": "Source Arms", + "to_node": "DEF Arms", + "from_socket": "lowerarm_twist_01_r", + "to_socket": "DEF-forearm.R.001" + }, + { + "from_node": "Source Arms", + "to_node": "DEF Arms", + "from_socket": "lowerarm_l", + "to_socket": "DEF-forearm.L" + }, + { + "from_node": "Source Arms", + "to_node": "DEF Arms", + "from_socket": "lowerarm_r", + "to_socket": "DEF-forearm.R" + }, + { + "from_node": "Source Arms", + "to_node": "DEF Arms", + "from_socket": "upperarm_twist_01_l", + "to_socket": "DEF-upper_arm.L.001" + }, + { + "from_node": "Source Arms", + "to_node": "DEF Arms", + "from_socket": "upperarm_twist_01_r", + "to_socket": "DEF-upper_arm.R.001" + }, + { + "from_node": "Source Arms", + "to_node": "DEF Arms", + "from_socket": "upperarm_l", + "to_socket": "DEF-upper_arm.L" + }, + { + "from_node": "Source Arms", + "to_node": "DEF Arms", + "from_socket": "upperarm_r", + "to_socket": "DEF-upper_arm.R" + }, + { + "from_node": "Source Legs", + "to_node": "DEF Legs", + "from_socket": "ball_l", + "to_socket": "DEF-toe.L" + }, + { + "from_node": "Source Legs", + "to_node": "DEF Legs", + "from_socket": "ball_r", + "to_socket": "DEF-toe.R" + }, + { + "from_node": "Source Legs", + "to_node": "DEF Legs", + "from_socket": "foot_l", + "to_socket": "DEF-foot.L" + }, + { + "from_node": "Source Legs", + "to_node": "DEF Legs", + "from_socket": "foot_r", + "to_socket": "DEF-foot.R" + }, + { + "from_node": "Source Legs", + "to_node": "DEF Legs", + "from_socket": "calf_twist_01_l", + "to_socket": "DEF-shin.L.001" + }, + { + "from_node": "Source Legs", + "to_node": "DEF Legs", + "from_socket": "calf_twist_01_r", + "to_socket": "DEF-shin.R.001" + }, + { + "from_node": "Source Legs", + "to_node": "DEF Legs", + "from_socket": "calf_l", + "to_socket": "DEF-shin.L" + }, + { + "from_node": "Source Legs", + "to_node": "DEF Legs", + "from_socket": "calf_r", + "to_socket": "DEF-shin.R" + }, + { + "from_node": "Source Legs", + "to_node": "DEF Legs", + "from_socket": "thigh_twist_01_l", + "to_socket": "DEF-thigh.L.001" + }, + { + "from_node": "Source Legs", + "to_node": "DEF Legs", + "from_socket": "thigh_twist_01_r", + "to_socket": "DEF-thigh.R.001" + }, + { + "from_node": "Source Legs", + "to_node": "DEF Legs", + "from_socket": "thigh_l", + "to_socket": "DEF-thigh.L" + }, + { + "from_node": "Source Legs", + "to_node": "DEF Legs", + "from_socket": "thigh_r", + "to_socket": "DEF-thigh.R" + }, + { + "from_node": "Source Spine", + "to_node": "DEF Spine", + "from_socket": "pelvis", + "to_socket": "DEF-spine" + }, + { + "from_node": "Source Spine", + "to_node": "DEF Spine", + "from_socket": "head", + "to_socket": "DEF-spine.005" + }, + { + "from_node": "Source Spine", + "to_node": "DEF Spine", + "from_socket": "neck_01", + "to_socket": "DEF-spine.004" + }, + { + "from_node": "Source Spine", + "to_node": "DEF Spine", + "from_socket": "spine_03", + "to_socket": "DEF-spine.003" + }, + { + "from_node": "Source Spine", + "to_node": "DEF Spine", + "from_socket": "spine_02", + "to_socket": "DEF-spine.002" + }, + { + "from_node": "Source Spine", + "to_node": "DEF Spine", + "from_socket": "spine_01", + "to_socket": "DEF-spine.001" + }, + { + "from_node": "Source Hand", + "to_node": "DEF Hand", + "from_socket": "pinky_03_l", + "to_socket": "DEF-f_pinky.03.L" + }, + { + "from_node": "Source Hand", + "to_node": "DEF Hand", + "from_socket": "pinky_03_r", + "to_socket": "DEF-f_pinky.03.R" + }, + { + "from_node": "Source Hand", + "to_node": "DEF Hand", + "from_socket": "pinky_02_l", + "to_socket": "DEF-f_pinky.02.L" + }, + { + "from_node": "Source Hand", + "to_node": "DEF Hand", + "from_socket": "pinky_02_r", + "to_socket": "DEF-f_pinky.02.R" + }, + { + "from_node": "Source Hand", + "to_node": "DEF Hand", + "from_socket": "pinky_01_l", + "to_socket": "DEF-f_pinky.01.L" + }, + { + "from_node": "Source Hand", + "to_node": "DEF Hand", + "from_socket": "pinky_01_r", + "to_socket": "DEF-f_pinky.01.R" + }, + { + "from_node": "Source Hand", + "to_node": "DEF Hand", + "from_socket": "ring_03_l", + "to_socket": "DEF-f_ring.03.L" + }, + { + "from_node": "Source Hand", + "to_node": "DEF Hand", + "from_socket": "ring_03_r", + "to_socket": "DEF-f_ring.03.R" + }, + { + "from_node": "Source Hand", + "to_node": "DEF Hand", + "from_socket": "ring_02_l", + "to_socket": "DEF-f_ring.02.L" + }, + { + "from_node": "Source Hand", + "to_node": "DEF Hand", + "from_socket": "ring_02_r", + "to_socket": "DEF-f_ring.02.R" + }, + { + "from_node": "Source Hand", + "to_node": "DEF Hand", + "from_socket": "ring_01_l", + "to_socket": "DEF-f_ring.01.L" + }, + { + "from_node": "Source Hand", + "to_node": "DEF Hand", + "from_socket": "ring_01_r", + "to_socket": "DEF-f_ring.01.R" + }, + { + "from_node": "Source Hand", + "to_node": "DEF Hand", + "from_socket": "middle_03_l", + "to_socket": "DEF-f_middle.03.L" + }, + { + "from_node": "Source Hand", + "to_node": "DEF Hand", + "from_socket": "middle_03_r", + "to_socket": "DEF-f_middle.03.R" + }, + { + "from_node": "Source Hand", + "to_node": "DEF Hand", + "from_socket": "middle_02_l", + "to_socket": "DEF-f_middle.02.L" + }, + { + "from_node": "Source Hand", + "to_node": "DEF Hand", + "from_socket": "middle_02_r", + "to_socket": "DEF-f_middle.02.R" + }, + { + "from_node": "Source Hand", + "to_node": "DEF Hand", + "from_socket": "middle_01_l", + "to_socket": "DEF-f_middle.01.L" + }, + { + "from_node": "Source Hand", + "to_node": "DEF Hand", + "from_socket": "middle_01_r", + "to_socket": "DEF-f_middle.01.R" + }, + { + "from_node": "Source Hand", + "to_node": "DEF Hand", + "from_socket": "index_03_l", + "to_socket": "DEF-f_index.03.L" + }, + { + "from_node": "Source Hand", + "to_node": "DEF Hand", + "from_socket": "index_03_r", + "to_socket": "DEF-f_index.03.R" + }, + { + "from_node": "Source Hand", + "to_node": "DEF Hand", + "from_socket": "index_02_l", + "to_socket": "DEF-f_index.02.L" + }, + { + "from_node": "Source Hand", + "to_node": "DEF Hand", + "from_socket": "index_02_r", + "to_socket": "DEF-f_index.02.R" + }, + { + "from_node": "Source Hand", + "to_node": "DEF Hand", + "from_socket": "index_01_l", + "to_socket": "DEF-f_index.01.L" + }, + { + "from_node": "Source Hand", + "to_node": "DEF Hand", + "from_socket": "index_01_r", + "to_socket": "DEF-f_index.01.R" + }, + { + "from_node": "Source Hand", + "to_node": "DEF Hand", + "from_socket": "thumb_03_l", + "to_socket": "DEF-thumb.03.L" + }, + { + "from_node": "Source Hand", + "to_node": "DEF Hand", + "from_socket": "thumb_03_r", + "to_socket": "DEF-thumb.03.R" + }, + { + "from_node": "Source Hand", + "to_node": "DEF Hand", + "from_socket": "thumb_02_l", + "to_socket": "DEF-thumb.02.L" + }, + { + "from_node": "Source Hand", + "to_node": "DEF Hand", + "from_socket": "thumb_02_r", + "to_socket": "DEF-thumb.02.R" + }, + { + "from_node": "Source Hand", + "to_node": "DEF Hand", + "from_socket": "thumb_01_l", + "to_socket": "DEF-thumb.01.L" + }, + { + "from_node": "Source Hand", + "to_node": "DEF Hand", + "from_socket": "thumb_01_r", + "to_socket": "DEF-thumb.01.R" + }, + { + "from_node": "Source Rig clavicle_r", + "to_node": "Control Rig DEF-shoulder.R", + "from_socket": "clavicle_r", + "to_socket": "DEF-shoulder.R" + }, + { + "from_node": "Source Rig clavicle_r", + "to_node": "Control Rig DEF-shoulder.R", + "from_socket": "clavicle_l", + "to_socket": "DEF-shoulder.L" + } +] \ No newline at end of file diff --git a/src/addons/ue2rigify/resources/rig_templates/b4_0/female_mannequin_UE4/source_to_deform_nodes.json b/src/addons/ue2rigify/resources/rig_templates/b4_0/female_mannequin_UE4/source_to_deform_nodes.json new file mode 100644 index 00000000..a632384c --- /dev/null +++ b/src/addons/ue2rigify/resources/rig_templates/b4_0/female_mannequin_UE4/source_to_deform_nodes.json @@ -0,0 +1,332 @@ +[ + { + "name": "Source Arms", + "label": "Source Arms", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 240.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "hand_l", + "hand_r", + "lowerarm_twist_01_l", + "lowerarm_twist_01_r", + "lowerarm_l", + "lowerarm_r", + "upperarm_twist_01_l", + "upperarm_twist_01_r", + "upperarm_l", + "upperarm_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "DEF Arms", + "label": "DEF Arms", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 240.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-hand.L", + "DEF-hand.R", + "DEF-forearm.L.001", + "DEF-forearm.R.001", + "DEF-forearm.L", + "DEF-forearm.R", + "DEF-upper_arm.L.001", + "DEF-upper_arm.R.001", + "DEF-upper_arm.L", + "DEF-upper_arm.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Legs", + "label": "Source Legs", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 660.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "ball_l", + "ball_r", + "foot_l", + "foot_r", + "calf_twist_01_l", + "calf_twist_01_r", + "calf_l", + "calf_r", + "thigh_twist_01_l", + "thigh_twist_01_r", + "thigh_l", + "thigh_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "DEF Legs", + "label": "DEF Legs", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 660.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-toe.L", + "DEF-toe.R", + "DEF-foot.L", + "DEF-foot.R", + "DEF-shin.L.001", + "DEF-shin.R.001", + "DEF-shin.L", + "DEF-shin.R", + "DEF-thigh.L.001", + "DEF-thigh.R.001", + "DEF-thigh.L", + "DEF-thigh.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Spine", + "label": "Source Spine", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -286.2301025390625, + 920.5067138671875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "pelvis", + "head", + "neck_01", + "spine_03", + "spine_02", + "spine_01" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "DEF Spine", + "label": "DEF Spine", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 313.7698669433594, + 920.5067138671875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine", + "DEF-spine.005", + "DEF-spine.004", + "DEF-spine.003", + "DEF-spine.002", + "DEF-spine.001" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Hand", + "label": "Source Hand", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1880.5067138671875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "pinky_03_l", + "pinky_03_r", + "pinky_02_l", + "pinky_02_r", + "pinky_01_l", + "pinky_01_r", + "ring_03_l", + "ring_03_r", + "ring_02_l", + "ring_02_r", + "ring_01_l", + "ring_01_r", + "middle_03_l", + "middle_03_r", + "middle_02_l", + "middle_02_r", + "middle_01_l", + "middle_01_r", + "index_03_l", + "index_03_r", + "index_02_l", + "index_02_r", + "index_01_l", + "index_01_r", + "thumb_03_l", + "thumb_03_r", + "thumb_02_l", + "thumb_02_r", + "thumb_01_l", + "thumb_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "DEF Hand", + "label": "DEF Hand", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1880.5067138671875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_pinky.03.L", + "DEF-f_pinky.03.R", + "DEF-f_pinky.02.L", + "DEF-f_pinky.02.R", + "DEF-f_pinky.01.L", + "DEF-f_pinky.01.R", + "DEF-f_ring.03.L", + "DEF-f_ring.03.R", + "DEF-f_ring.02.L", + "DEF-f_ring.02.R", + "DEF-f_ring.01.L", + "DEF-f_ring.01.R", + "DEF-f_middle.03.L", + "DEF-f_middle.03.R", + "DEF-f_middle.02.L", + "DEF-f_middle.02.R", + "DEF-f_middle.01.L", + "DEF-f_middle.01.R", + "DEF-f_index.03.L", + "DEF-f_index.03.R", + "DEF-f_index.02.L", + "DEF-f_index.02.R", + "DEF-f_index.01.L", + "DEF-f_index.01.R", + "DEF-thumb.03.L", + "DEF-thumb.03.R", + "DEF-thumb.02.L", + "DEF-thumb.02.R", + "DEF-thumb.01.L", + "DEF-thumb.01.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Shoulder", + "label": "Source Shoulder", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 335.59747314453125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "clavicle_r", + "clavicle_l" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "DEF Shoulder", + "label": "DEF Shoulder", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 335.59747314453125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-shoulder.R", + "DEF-shoulder.L" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + } +] \ No newline at end of file diff --git a/src/addons/ue2rigify/resources/rig_templates/b4_0/female_mannequin_UE5/fk_to_source_links.json b/src/addons/ue2rigify/resources/rig_templates/b4_0/female_mannequin_UE5/fk_to_source_links.json new file mode 100644 index 00000000..e8c45318 --- /dev/null +++ b/src/addons/ue2rigify/resources/rig_templates/b4_0/female_mannequin_UE5/fk_to_source_links.json @@ -0,0 +1,524 @@ +[ + { + "from_node": "Control Rig upper_arm_fk.L", + "to_node": "Source Rig upperarm_l", + "from_socket": "upper_arm_fk.L", + "to_socket": "upperarm_l" + }, + { + "from_node": "Control Rig upper_arm_fk.L", + "to_node": "Source Rig upperarm_l", + "from_socket": "upper_arm_fk.R", + "to_socket": "upperarm_r" + }, + { + "from_node": "Control Rig upper_arm_tweak.L", + "to_node": "Source Rig upperarm_correctiveRoot_l", + "from_socket": "upper_arm_tweak.L", + "to_socket": "upperarm_correctiveRoot_l" + }, + { + "from_node": "Control Rig upper_arm_tweak.L", + "to_node": "Source Rig upperarm_correctiveRoot_l", + "from_socket": "upper_arm_tweak.R", + "to_socket": "upperarm_correctiveRoot_r" + }, + { + "from_node": "Control Rig forearm_fk.L", + "to_node": "Source Rig lowerarm_l", + "from_socket": "forearm_fk.L", + "to_socket": "lowerarm_l" + }, + { + "from_node": "Control Rig forearm_fk.L", + "to_node": "Source Rig lowerarm_l", + "from_socket": "forearm_fk.R", + "to_socket": "lowerarm_r" + }, + { + "from_node": "Control Rig hand_fk.L", + "to_node": "Source Rig hand_l", + "from_socket": "hand_fk.L", + "to_socket": "hand_l" + }, + { + "from_node": "Control Rig hand_fk.L", + "to_node": "Source Rig hand_l", + "from_socket": "hand_fk.R", + "to_socket": "hand_r" + }, + { + "from_node": "Control Rig forearm_tweak.L", + "to_node": "Source Rig lowerarm_correctiveRoot_l", + "from_socket": "forearm_tweak.L", + "to_socket": "lowerarm_correctiveRoot_l" + }, + { + "from_node": "Control Rig forearm_tweak.L", + "to_node": "Source Rig lowerarm_correctiveRoot_l", + "from_socket": "forearm_tweak.R", + "to_socket": "lowerarm_correctiveRoot_r" + }, + { + "from_node": "Control Rig forearm_tweak.L.001", + "to_node": "Source Rig lowerarm_twist_02_l", + "from_socket": "forearm_tweak.L.001", + "to_socket": "lowerarm_twist_02_l" + }, + { + "from_node": "Control Rig forearm_tweak.L.001", + "to_node": "Source Rig lowerarm_twist_02_l", + "from_socket": "forearm_tweak.R.001", + "to_socket": "lowerarm_twist_02_r" + }, + { + "from_node": "Control Rig forearm_tweak.L.002", + "to_node": "Source Rig lowerarm_twist_01_l", + "from_socket": "forearm_tweak.L.002", + "to_socket": "lowerarm_twist_01_l" + }, + { + "from_node": "Control Rig forearm_tweak.L.002", + "to_node": "Source Rig lowerarm_twist_01_l", + "from_socket": "forearm_tweak.R.002", + "to_socket": "lowerarm_twist_01_r" + }, + { + "from_node": "Control Rig hand_tweak.L", + "to_node": "Source Rig hand_l.001", + "from_socket": "hand_tweak.L", + "to_socket": "hand_l" + }, + { + "from_node": "Control Rig hand_tweak.L", + "to_node": "Source Rig hand_l.001", + "from_socket": "hand_tweak.R", + "to_socket": "hand_r" + }, + { + "from_node": "Control Rig upper_arm_tweak.L.002", + "to_node": "Source Rig upperarm_twist_02_l", + "from_socket": "upper_arm_tweak.L.002", + "to_socket": "upperarm_twist_02_l" + }, + { + "from_node": "Control Rig upper_arm_tweak.L.002", + "to_node": "Source Rig upperarm_twist_02_l", + "from_socket": "upper_arm_tweak.R.002", + "to_socket": "upperarm_twist_02_r" + }, + { + "from_node": "Control Rig upper_arm_tweak.L.001", + "to_node": "Source Rig upperarm_twist_01_l", + "from_socket": "upper_arm_tweak.L.001", + "to_socket": "upperarm_twist_01_l" + }, + { + "from_node": "Control Rig upper_arm_tweak.L.001", + "to_node": "Source Rig upperarm_twist_01_l", + "from_socket": "upper_arm_tweak.R.001", + "to_socket": "upperarm_twist_01_r" + }, + { + "from_node": "Control Rig thumb.01.L", + "to_node": "Source Rig thumb_01_l", + "from_socket": "thumb.01.L", + "to_socket": "thumb_01_l" + }, + { + "from_node": "Control Rig thumb.01.L", + "to_node": "Source Rig thumb_01_l", + "from_socket": "thumb.01.R", + "to_socket": "thumb_01_r" + }, + { + "from_node": "Control Rig thumb.02.L", + "to_node": "Source Rig thumb_02_l", + "from_socket": "thumb.02.L", + "to_socket": "thumb_02_l" + }, + { + "from_node": "Control Rig thumb.02.L", + "to_node": "Source Rig thumb_02_l", + "from_socket": "thumb.02.R", + "to_socket": "thumb_02_r" + }, + { + "from_node": "Control Rig thumb.03.L", + "to_node": "Source Rig thumb_03_l", + "from_socket": "thumb.03.L", + "to_socket": "thumb_03_l" + }, + { + "from_node": "Control Rig thumb.03.L", + "to_node": "Source Rig thumb_03_l", + "from_socket": "thumb.03.R", + "to_socket": "thumb_03_r" + }, + { + "from_node": "Control Rig f_index.01.L", + "to_node": "Source Rig index_01_l", + "from_socket": "f_index.01.L", + "to_socket": "index_01_l" + }, + { + "from_node": "Control Rig f_index.01.L", + "to_node": "Source Rig index_01_l", + "from_socket": "f_index.01.R", + "to_socket": "index_01_r" + }, + { + "from_node": "Control Rig f_index.02.L", + "to_node": "Source Rig index_02_l", + "from_socket": "f_index.02.L", + "to_socket": "index_02_l" + }, + { + "from_node": "Control Rig f_index.02.L", + "to_node": "Source Rig index_02_l", + "from_socket": "f_index.02.R", + "to_socket": "index_02_r" + }, + { + "from_node": "Control Rig f_index.03.L", + "to_node": "Source Rig index_03_l", + "from_socket": "f_index.03.L", + "to_socket": "index_03_l" + }, + { + "from_node": "Control Rig f_index.03.L", + "to_node": "Source Rig index_03_l", + "from_socket": "f_index.03.R", + "to_socket": "index_03_r" + }, + { + "from_node": "Control Rig f_middle.01.L", + "to_node": "Source Rig middle_01_l", + "from_socket": "f_middle.01.L", + "to_socket": "middle_01_l" + }, + { + "from_node": "Control Rig f_middle.01.L", + "to_node": "Source Rig middle_01_l", + "from_socket": "f_middle.01.R", + "to_socket": "middle_01_r" + }, + { + "from_node": "Control Rig f_middle.02.L", + "to_node": "Source Rig middle_02_l", + "from_socket": "f_middle.02.L", + "to_socket": "middle_02_l" + }, + { + "from_node": "Control Rig f_middle.02.L", + "to_node": "Source Rig middle_02_l", + "from_socket": "f_middle.02.R", + "to_socket": "middle_02_r" + }, + { + "from_node": "Control Rig f_middle.03.L", + "to_node": "Source Rig middle_03_l", + "from_socket": "f_middle.03.L", + "to_socket": "middle_03_l" + }, + { + "from_node": "Control Rig f_middle.03.L", + "to_node": "Source Rig middle_03_l", + "from_socket": "f_middle.03.R", + "to_socket": "middle_03_r" + }, + { + "from_node": "Control Rig f_ring.01.L", + "to_node": "Source Rig ring_01_l", + "from_socket": "f_ring.01.L", + "to_socket": "ring_01_l" + }, + { + "from_node": "Control Rig f_ring.01.L", + "to_node": "Source Rig ring_01_l", + "from_socket": "f_ring.01.R", + "to_socket": "ring_01_r" + }, + { + "from_node": "Control Rig f_ring.02.L", + "to_node": "Source Rig ring_02_l", + "from_socket": "f_ring.02.L", + "to_socket": "ring_02_l" + }, + { + "from_node": "Control Rig f_ring.02.L", + "to_node": "Source Rig ring_02_l", + "from_socket": "f_ring.02.R", + "to_socket": "ring_02_r" + }, + { + "from_node": "Control Rig f_ring.03.L", + "to_node": "Source Rig ring_03_l", + "from_socket": "f_ring.03.L", + "to_socket": "ring_03_l" + }, + { + "from_node": "Control Rig f_ring.03.L", + "to_node": "Source Rig ring_03_l", + "from_socket": "f_ring.03.R", + "to_socket": "ring_03_r" + }, + { + "from_node": "Control Rig f_pinky.01.L", + "to_node": "Source Rig pinky_01_l", + "from_socket": "f_pinky.01.L", + "to_socket": "pinky_01_l" + }, + { + "from_node": "Control Rig f_pinky.01.L", + "to_node": "Source Rig pinky_01_l", + "from_socket": "f_pinky.01.R", + "to_socket": "pinky_01_r" + }, + { + "from_node": "Control Rig f_pinky.02.L", + "to_node": "Source Rig pinky_02_l", + "from_socket": "f_pinky.02.L", + "to_socket": "pinky_02_l" + }, + { + "from_node": "Control Rig f_pinky.02.L", + "to_node": "Source Rig pinky_02_l", + "from_socket": "f_pinky.02.R", + "to_socket": "pinky_02_r" + }, + { + "from_node": "Control Rig f_pinky.03.L", + "to_node": "Source Rig pinky_03_l", + "from_socket": "f_pinky.03.L", + "to_socket": "pinky_03_l" + }, + { + "from_node": "Control Rig f_pinky.03.L", + "to_node": "Source Rig pinky_03_l", + "from_socket": "f_pinky.03.R", + "to_socket": "pinky_03_r" + }, + { + "from_node": "Control Rig thigh_fk.L", + "to_node": "Source Rig thigh_l", + "from_socket": "thigh_fk.L", + "to_socket": "thigh_l" + }, + { + "from_node": "Control Rig thigh_fk.L", + "to_node": "Source Rig thigh_l", + "from_socket": "thigh_fk.R", + "to_socket": "thigh_r" + }, + { + "from_node": "Control Rig thigh_tweak.L", + "to_node": "Source Rig thigh_correctiveRoot_l", + "from_socket": "thigh_tweak.L", + "to_socket": "thigh_correctiveRoot_l" + }, + { + "from_node": "Control Rig thigh_tweak.L", + "to_node": "Source Rig thigh_correctiveRoot_l", + "from_socket": "thigh_tweak.R", + "to_socket": "thigh_correctiveRoot_r" + }, + { + "from_node": "Control Rig shin_fk.L", + "to_node": "Source Rig calf_l", + "from_socket": "shin_fk.L", + "to_socket": "calf_l" + }, + { + "from_node": "Control Rig shin_fk.L", + "to_node": "Source Rig calf_l", + "from_socket": "shin_fk.R", + "to_socket": "calf_r" + }, + { + "from_node": "Control Rig foot_fk.L", + "to_node": "Source Rig foot_l", + "from_socket": "foot_fk.L", + "to_socket": "foot_l" + }, + { + "from_node": "Control Rig foot_fk.L", + "to_node": "Source Rig foot_l", + "from_socket": "foot_fk.R", + "to_socket": "foot_r" + }, + { + "from_node": "Control Rig foot_tweak.L", + "to_node": "Source Rig foot_l.001", + "from_socket": "foot_tweak.L", + "to_socket": "foot_l" + }, + { + "from_node": "Control Rig foot_tweak.L", + "to_node": "Source Rig foot_l.001", + "from_socket": "foot_tweak.R", + "to_socket": "foot_r" + }, + { + "from_node": "Control Rig toe.L", + "to_node": "Source Rig ball_l", + "from_socket": "toe.L", + "to_socket": "ball_l" + }, + { + "from_node": "Control Rig toe.L", + "to_node": "Source Rig ball_l", + "from_socket": "toe.R", + "to_socket": "ball_r" + }, + { + "from_node": "Control Rig shin_tweak.L.001", + "to_node": "Source Rig calf_twist_02_l", + "from_socket": "shin_tweak.L.001", + "to_socket": "calf_twist_02_l" + }, + { + "from_node": "Control Rig shin_tweak.L.001", + "to_node": "Source Rig calf_twist_02_l", + "from_socket": "shin_tweak.R.001", + "to_socket": "calf_twist_02_r" + }, + { + "from_node": "Control Rig shin_tweak.L.002", + "to_node": "Source Rig calf_twist_01_l", + "from_socket": "shin_tweak.L.002", + "to_socket": "calf_twist_01_l" + }, + { + "from_node": "Control Rig shin_tweak.L.002", + "to_node": "Source Rig calf_twist_01_l", + "from_socket": "shin_tweak.R.002", + "to_socket": "calf_twist_01_r" + }, + { + "from_node": "Control Rig shin_tweak.L", + "to_node": "Source Rig calf_correctiveRoot_l", + "from_socket": "shin_tweak.L", + "to_socket": "calf_correctiveRoot_l" + }, + { + "from_node": "Control Rig shin_tweak.L", + "to_node": "Source Rig calf_correctiveRoot_l", + "from_socket": "shin_tweak.R", + "to_socket": "calf_correctiveRoot_r" + }, + { + "from_node": "Control Rig thigh_tweak.L.002", + "to_node": "Source Rig thigh_twist_02_l", + "from_socket": "thigh_tweak.L.002", + "to_socket": "thigh_twist_02_l" + }, + { + "from_node": "Control Rig thigh_tweak.L.002", + "to_node": "Source Rig thigh_twist_02_l", + "from_socket": "thigh_tweak.R.002", + "to_socket": "thigh_twist_02_r" + }, + { + "from_node": "Control Rig thigh_tweak.L.001", + "to_node": "Source Rig thigh_twist_01_l", + "from_socket": "thigh_tweak.L.001", + "to_socket": "thigh_twist_01_l" + }, + { + "from_node": "Control Rig thigh_tweak.L.001", + "to_node": "Source Rig thigh_twist_01_l", + "from_socket": "thigh_tweak.R.001", + "to_socket": "thigh_twist_01_r" + }, + { + "from_node": "Control Rig root", + "to_node": "root", + "from_socket": "root", + "to_socket": "object" + }, + { + "from_node": "Control Rig shoulder.L", + "to_node": "Source Rig clavicle_l", + "from_socket": "shoulder.L", + "to_socket": "clavicle_l" + }, + { + "from_node": "Control Rig shoulder.L", + "to_node": "Source Rig clavicle_l", + "from_socket": "shoulder.R", + "to_socket": "clavicle_r" + }, + { + "from_node": "Control Rig breast.L", + "to_node": "Source Rig clavicle_pec_l", + "from_socket": "breast.L", + "to_socket": "clavicle_pec_l" + }, + { + "from_node": "Control Rig breast.L", + "to_node": "Source Rig clavicle_pec_l", + "from_socket": "breast.R", + "to_socket": "clavicle_pec_r" + }, + { + "from_node": "Control Rig neck", + "to_node": "Source Rig neck_02.001", + "from_socket": "neck", + "to_socket": "neck_02" + }, + { + "from_node": "Control Rig head", + "to_node": "Source Rig head", + "from_socket": "head", + "to_socket": "head" + }, + { + "from_node": "Control Rig spine_fk", + "to_node": "Source Rig spine_01", + "from_socket": "spine_fk", + "to_socket": "spine_01" + }, + { + "from_node": "Control Rig spine_fk.001", + "to_node": "Source Rig spine_02", + "from_socket": "spine_fk.001", + "to_socket": "spine_02" + }, + { + "from_node": "Control Rig spine_fk.002", + "to_node": "Source Rig spine_02.001", + "from_socket": "spine_fk.002", + "to_socket": "spine_02" + }, + { + "from_node": "Control Rig spine_fk.003", + "to_node": "Source Rig spine_03", + "from_socket": "spine_fk.003", + "to_socket": "spine_03" + }, + { + "from_node": "Control Rig spine_fk.007", + "to_node": "Source Rig spine_04", + "from_socket": "spine_fk.007", + "to_socket": "spine_04" + }, + { + "from_node": "Control Rig spine_fk.008", + "to_node": "Source Rig spine_05", + "from_socket": "spine_fk.008", + "to_socket": "spine_05" + }, + { + "from_node": "Control Rig tweak_spine", + "to_node": "Source Rig pelvis", + "from_socket": "tweak_spine", + "to_socket": "pelvis" + }, + { + "from_node": "Control Rig tweak_spine.001", + "to_node": "Source Rig spine_01.001", + "from_socket": "tweak_spine.001", + "to_socket": "spine_01" + } +] \ No newline at end of file diff --git a/src/addons/ue2rigify/resources/rig_templates/b4_0/female_mannequin_UE5/fk_to_source_nodes.json b/src/addons/ue2rigify/resources/rig_templates/b4_0/female_mannequin_UE5/fk_to_source_nodes.json new file mode 100644 index 00000000..cfcd9354 --- /dev/null +++ b/src/addons/ue2rigify/resources/rig_templates/b4_0/female_mannequin_UE5/fk_to_source_nodes.json @@ -0,0 +1,2234 @@ +[ + { + "name": "Source Rig upperarm_l", + "label": "Source Rig upperarm_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 0.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "upperarm_l", + "upperarm_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig upper_arm_fk.L", + "label": "Control Rig upper_arm_fk.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 0.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upper_arm_fk.L", + "upper_arm_fk.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig upperarm_correctiveRoot_l", + "label": "Source Rig upperarm_correctiveRoot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 120.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "upperarm_correctiveRoot_l", + "upperarm_correctiveRoot_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig upper_arm_tweak.L", + "label": "Control Rig upper_arm_tweak.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 120.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upper_arm_tweak.L", + "upper_arm_tweak.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig lowerarm_l", + "label": "Source Rig lowerarm_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 240.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "lowerarm_l", + "lowerarm_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig forearm_fk.L", + "label": "Control Rig forearm_fk.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 240.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "forearm_fk.L", + "forearm_fk.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig hand_l", + "label": "Source Rig hand_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 360.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "hand_l", + "hand_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig hand_fk.L", + "label": "Control Rig hand_fk.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 360.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "hand_fk.L", + "hand_fk.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig lowerarm_correctiveRoot_l", + "label": "Source Rig lowerarm_correctiveRoot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 480.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "lowerarm_correctiveRoot_l", + "lowerarm_correctiveRoot_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig forearm_tweak.L", + "label": "Control Rig forearm_tweak.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 480.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "forearm_tweak.L", + "forearm_tweak.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig lowerarm_twist_02_l", + "label": "Source Rig lowerarm_twist_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 600.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "lowerarm_twist_02_l", + "lowerarm_twist_02_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig forearm_tweak.L.001", + "label": "Control Rig forearm_tweak.L.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 600.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "forearm_tweak.L.001", + "forearm_tweak.R.001" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig lowerarm_twist_01_l", + "label": "Source Rig lowerarm_twist_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 720.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "lowerarm_twist_01_l", + "lowerarm_twist_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig forearm_tweak.L.002", + "label": "Control Rig forearm_tweak.L.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 720.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "forearm_tweak.L.002", + "forearm_tweak.R.002" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig hand_l.001", + "label": "Source Rig hand_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 840.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "hand_l", + "hand_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig hand_tweak.L", + "label": "Control Rig hand_tweak.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 840.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "hand_tweak.L", + "hand_tweak.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig upperarm_twist_02_l", + "label": "Source Rig upperarm_twist_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 960.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "upperarm_twist_02_l", + "upperarm_twist_02_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig upper_arm_tweak.L.002", + "label": "Control Rig upper_arm_tweak.L.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 960.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upper_arm_tweak.L.002", + "upper_arm_tweak.R.002" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig upperarm_twist_01_l", + "label": "Source Rig upperarm_twist_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1080.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "upperarm_twist_01_l", + "upperarm_twist_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig upper_arm_tweak.L.001", + "label": "Control Rig upper_arm_tweak.L.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1080.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upper_arm_tweak.L.001", + "upper_arm_tweak.R.001" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig thumb_01_l", + "label": "Source Rig thumb_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1200.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "thumb_01_l", + "thumb_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig thumb.01.L", + "label": "Control Rig thumb.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1200.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thumb.01.L", + "thumb.01.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig thumb_02_l", + "label": "Source Rig thumb_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1320.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "thumb_02_l", + "thumb_02_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig thumb.02.L", + "label": "Control Rig thumb.02.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1320.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thumb.02.L", + "thumb.02.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig thumb_03_l", + "label": "Source Rig thumb_03_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1440.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "thumb_03_l", + "thumb_03_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig thumb.03.L", + "label": "Control Rig thumb.03.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1440.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thumb.03.L", + "thumb.03.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig index_01_l", + "label": "Source Rig index_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1560.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "index_01_l", + "index_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_index.01.L", + "label": "Control Rig f_index.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1560.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_index.01.L", + "f_index.01.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig index_02_l", + "label": "Source Rig index_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1680.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "index_02_l", + "index_02_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_index.02.L", + "label": "Control Rig f_index.02.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1680.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_index.02.L", + "f_index.02.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig index_03_l", + "label": "Source Rig index_03_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1800.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "index_03_l", + "index_03_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_index.03.L", + "label": "Control Rig f_index.03.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1800.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_index.03.L", + "f_index.03.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig middle_01_l", + "label": "Source Rig middle_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1920.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "middle_01_l", + "middle_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_middle.01.L", + "label": "Control Rig f_middle.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1920.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_middle.01.L", + "f_middle.01.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig middle_02_l", + "label": "Source Rig middle_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2040.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "middle_02_l", + "middle_02_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_middle.02.L", + "label": "Control Rig f_middle.02.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2040.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_middle.02.L", + "f_middle.02.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig middle_03_l", + "label": "Source Rig middle_03_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2160.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "middle_03_l", + "middle_03_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_middle.03.L", + "label": "Control Rig f_middle.03.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2160.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_middle.03.L", + "f_middle.03.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig ring_01_l", + "label": "Source Rig ring_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2280.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "ring_01_l", + "ring_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_ring.01.L", + "label": "Control Rig f_ring.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2280.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_ring.01.L", + "f_ring.01.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig ring_02_l", + "label": "Source Rig ring_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2400.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "ring_02_l", + "ring_02_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_ring.02.L", + "label": "Control Rig f_ring.02.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2400.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_ring.02.L", + "f_ring.02.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig ring_03_l", + "label": "Source Rig ring_03_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2520.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "ring_03_l", + "ring_03_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_ring.03.L", + "label": "Control Rig f_ring.03.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2520.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_ring.03.L", + "f_ring.03.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig pinky_01_l", + "label": "Source Rig pinky_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2640.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "pinky_01_l", + "pinky_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_pinky.01.L", + "label": "Control Rig f_pinky.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2640.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_pinky.01.L", + "f_pinky.01.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig pinky_02_l", + "label": "Source Rig pinky_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2760.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "pinky_02_l", + "pinky_02_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_pinky.02.L", + "label": "Control Rig f_pinky.02.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2760.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_pinky.02.L", + "f_pinky.02.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig pinky_03_l", + "label": "Source Rig pinky_03_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2880.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "pinky_03_l", + "pinky_03_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_pinky.03.L", + "label": "Control Rig f_pinky.03.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2880.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_pinky.03.L", + "f_pinky.03.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig thigh_l", + "label": "Source Rig thigh_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3000.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "thigh_l", + "thigh_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig thigh_fk.L", + "label": "Control Rig thigh_fk.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3000.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_fk.L", + "thigh_fk.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig thigh_correctiveRoot_l", + "label": "Source Rig thigh_correctiveRoot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3120.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "thigh_correctiveRoot_l", + "thigh_correctiveRoot_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig thigh_tweak.L", + "label": "Control Rig thigh_tweak.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3120.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_tweak.L", + "thigh_tweak.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig calf_l", + "label": "Source Rig calf_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3240.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "calf_l", + "calf_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig shin_fk.L", + "label": "Control Rig shin_fk.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3240.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "shin_fk.L", + "shin_fk.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig foot_l", + "label": "Source Rig foot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3360.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "foot_l", + "foot_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig foot_fk.L", + "label": "Control Rig foot_fk.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3360.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "foot_fk.L", + "foot_fk.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig foot_l.001", + "label": "Source Rig foot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3480.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "foot_l", + "foot_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig foot_tweak.L", + "label": "Control Rig foot_tweak.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3480.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "foot_tweak.L", + "foot_tweak.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig ball_l", + "label": "Source Rig ball_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3600.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "ball_l", + "ball_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig toe.L", + "label": "Control Rig toe.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3600.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "toe.L", + "toe.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig calf_twist_02_l", + "label": "Source Rig calf_twist_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3720.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "calf_twist_02_l", + "calf_twist_02_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig shin_tweak.L.001", + "label": "Control Rig shin_tweak.L.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3720.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "shin_tweak.L.001", + "shin_tweak.R.001" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig calf_twist_01_l", + "label": "Source Rig calf_twist_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3840.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "calf_twist_01_l", + "calf_twist_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig shin_tweak.L.002", + "label": "Control Rig shin_tweak.L.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3840.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "shin_tweak.L.002", + "shin_tweak.R.002" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig calf_correctiveRoot_l", + "label": "Source Rig calf_correctiveRoot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3960.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "calf_correctiveRoot_l", + "calf_correctiveRoot_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig shin_tweak.L", + "label": "Control Rig shin_tweak.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3960.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "shin_tweak.L", + "shin_tweak.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig thigh_twist_02_l", + "label": "Source Rig thigh_twist_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 4080.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "thigh_twist_02_l", + "thigh_twist_02_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig thigh_tweak.L.002", + "label": "Control Rig thigh_tweak.L.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 4080.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_tweak.L.002", + "thigh_tweak.R.002" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig thigh_twist_01_l", + "label": "Source Rig thigh_twist_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 4200.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "thigh_twist_01_l", + "thigh_twist_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig thigh_tweak.L.001", + "label": "Control Rig thigh_tweak.L.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 4200.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_tweak.L.001", + "thigh_tweak.R.001" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig root", + "label": "Control Rig root", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 4320.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "root" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "root", + "label": "root", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 299.52642822265625, + 4312.6982421875 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "object" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig clavicle_l", + "label": "Source Rig clavicle_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 305.962646484375, + 4413.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "clavicle_l", + "clavicle_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig clavicle_pec_l", + "label": "Source Rig clavicle_pec_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 305.962646484375, + 4533.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "clavicle_pec_l", + "clavicle_pec_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig breast.L", + "label": "Control Rig breast.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -294.037353515625, + 4533.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "breast.L", + "breast.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig shoulder.L", + "label": "Control Rig shoulder.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -294.037353515625, + 4413.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "shoulder.L", + "shoulder.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig neck_02.001", + "label": "Source Rig neck_02", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 6333.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "neck_02" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig neck", + "label": "Control Rig neck", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 6333.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "neck" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig head", + "label": "Source Rig head", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 6453.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "head" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig head", + "label": "Control Rig head", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 6453.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "head" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig spine_01", + "label": "Source Rig spine_01", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 6573.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "spine_01" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig spine_fk", + "label": "Control Rig spine_fk", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 6573.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_fk" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig spine_02", + "label": "Source Rig spine_02", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 6693.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "spine_02" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig spine_fk.001", + "label": "Control Rig spine_fk.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 6693.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_fk.001" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig spine_02.001", + "label": "Source Rig spine_02", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 6813.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "spine_02" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig spine_fk.002", + "label": "Control Rig spine_fk.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 6813.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_fk.002" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig spine_03", + "label": "Source Rig spine_03", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 6933.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "spine_03" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig spine_fk.003", + "label": "Control Rig spine_fk.003", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 6933.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_fk.003" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig spine_04", + "label": "Source Rig spine_04", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 7053.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "spine_04" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig spine_fk.007", + "label": "Control Rig spine_fk.007", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 7053.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_fk.007" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig spine_05", + "label": "Source Rig spine_05", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 7173.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "spine_05" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig spine_fk.008", + "label": "Control Rig spine_fk.008", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 7173.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_fk.008" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig pelvis", + "label": "Source Rig pelvis", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 7293.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "pelvis" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig tweak_spine", + "label": "Control Rig tweak_spine", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 7293.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "tweak_spine" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig spine_01.001", + "label": "Source Rig spine_01", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 7413.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "spine_01" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig tweak_spine.001", + "label": "Control Rig tweak_spine.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 7413.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "tweak_spine.001" + ], + "mode": "FK_TO_SOURCE" + } +] \ No newline at end of file diff --git a/src/addons/ue2rigify/resources/rig_templates/b4_0/female_mannequin_UE5/metarig.py b/src/addons/ue2rigify/resources/rig_templates/b4_0/female_mannequin_UE5/metarig.py new file mode 100644 index 00000000..bddb4506 --- /dev/null +++ b/src/addons/ue2rigify/resources/rig_templates/b4_0/female_mannequin_UE5/metarig.py @@ -0,0 +1,1200 @@ +import bpy + +from rna_prop_ui import rna_idprop_ui_create + +from mathutils import Color + + +def create(obj): # noqa + # generated by rigify.utils.write_metarig + bpy.ops.object.mode_set(mode='EDIT') + arm = obj.data + + for i in range(6): + arm.rigify_colors.add() + + arm.rigify_colors[0].name = "Root" + arm.rigify_colors[0].active = Color((0.5490, 1.0000, 1.0000)) + arm.rigify_colors[0].normal = Color((0.4353, 0.1843, 0.4157)) + arm.rigify_colors[0].select = Color((0.3137, 0.7843, 1.0000)) + arm.rigify_colors[0].standard_colors_lock = True + arm.rigify_colors[1].name = "IK" + arm.rigify_colors[1].active = Color((0.5490, 1.0000, 1.0000)) + arm.rigify_colors[1].normal = Color((0.6039, 0.0000, 0.0000)) + arm.rigify_colors[1].select = Color((0.3137, 0.7843, 1.0000)) + arm.rigify_colors[1].standard_colors_lock = True + arm.rigify_colors[2].name = "Special" + arm.rigify_colors[2].active = Color((0.5490, 1.0000, 1.0000)) + arm.rigify_colors[2].normal = Color((0.9569, 0.7882, 0.0471)) + arm.rigify_colors[2].select = Color((0.3137, 0.7843, 1.0000)) + arm.rigify_colors[2].standard_colors_lock = True + arm.rigify_colors[3].name = "Tweak" + arm.rigify_colors[3].active = Color((0.5490, 1.0000, 1.0000)) + arm.rigify_colors[3].normal = Color((0.0392, 0.2118, 0.5804)) + arm.rigify_colors[3].select = Color((0.3137, 0.7843, 1.0000)) + arm.rigify_colors[3].standard_colors_lock = True + arm.rigify_colors[4].name = "FK" + arm.rigify_colors[4].active = Color((0.5490, 1.0000, 1.0000)) + arm.rigify_colors[4].normal = Color((0.1176, 0.5686, 0.0353)) + arm.rigify_colors[4].select = Color((0.3137, 0.7843, 1.0000)) + arm.rigify_colors[4].standard_colors_lock = True + arm.rigify_colors[5].name = "Extra" + arm.rigify_colors[5].active = Color((0.5490, 1.0000, 1.0000)) + arm.rigify_colors[5].normal = Color((0.9686, 0.2510, 0.0941)) + arm.rigify_colors[5].select = Color((0.3137, 0.7843, 1.0000)) + arm.rigify_colors[5].standard_colors_lock = True + + bone_collections = {} + + for bcoll in list(arm.collections): + arm.collections.remove(bcoll) + + def add_bone_collection(name, *, ui_row=0, ui_title='', sel_set=False, color_set_id=0): + new_bcoll = arm.collections.new(name) + new_bcoll.rigify_ui_row = ui_row + new_bcoll.rigify_ui_title = ui_title + new_bcoll.rigify_sel_set = sel_set + new_bcoll.rigify_color_set_id = color_set_id + bone_collections[name] = new_bcoll + + def assign_bone_collections(pose_bone, *coll_names): + assert not len(pose_bone.bone.collections) + for name in coll_names: + bone_collections[name].assign(pose_bone) + + def assign_bone_collection_refs(params, attr_name, *coll_names): + ref_list = getattr(params, attr_name + '_coll_refs', None) + if ref_list is not None: + for name in coll_names: + ref_list.add().set_collection(bone_collections[name]) + + add_bone_collection('Face', ui_row=1, color_set_id=5) + add_bone_collection('Face (Primary)', ui_row=2, color_set_id=2) + add_bone_collection('Face (Secondary)', ui_row=2, color_set_id=3) + add_bone_collection('Torso', ui_row=3, color_set_id=3) + add_bone_collection('Torso (Tweak)', ui_row=4, color_set_id=4) + add_bone_collection('Fingers', ui_row=5, color_set_id=6) + add_bone_collection('Fingers (Detail)', ui_row=6, color_set_id=5) + add_bone_collection('Arm.L (IK)', ui_row=7, color_set_id=2) + add_bone_collection('Arm.L (FK)', ui_row=8, color_set_id=5) + add_bone_collection('Arm.L (Tweak)', ui_row=9, color_set_id=4) + add_bone_collection('Arm.R (IK)', ui_row=7, color_set_id=2) + add_bone_collection('Arm.R (FK)', ui_row=8, color_set_id=5) + add_bone_collection('Arm.R (Tweak)', ui_row=9, color_set_id=4) + add_bone_collection('Leg.L (IK)', ui_row=10, color_set_id=2) + add_bone_collection('Leg.L (FK)', ui_row=11, color_set_id=5) + add_bone_collection('Leg.L (Tweak)', ui_row=12, color_set_id=4) + add_bone_collection('Leg.R (IK)', ui_row=10, color_set_id=2) + add_bone_collection('Leg.R (FK)', ui_row=11, color_set_id=5) + add_bone_collection('Leg.R (Tweak)', ui_row=12, color_set_id=4) + add_bone_collection('Root', ui_row=15, color_set_id=1) + + bones = {} + + bone = arm.edit_bones.new('spine') + bone.head = 0.0000, -0.0238, 0.9869 + bone.tail = 0.0000, -0.0222, 1.0116 + bone.roll = 0.0000 + bone.use_connect = False + bones['spine'] = bone.name + bone = arm.edit_bones.new('spine.001') + bone.head = 0.0000, -0.0222, 1.0116 + bone.tail = 0.0000, -0.0340, 1.0601 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine']] + bones['spine.001'] = bone.name + bone = arm.edit_bones.new('thigh.L') + bone.head = 0.1115, -0.0265, 0.9547 + bone.tail = 0.1306, -0.0170, 0.4977 + bone.roll = -0.0442 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine']] + bones['thigh.L'] = bone.name + bone = arm.edit_bones.new('thigh.R') + bone.head = -0.1115, -0.0265, 0.9547 + bone.tail = -0.1306, -0.0170, 0.4977 + bone.roll = 0.0442 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine']] + bones['thigh.R'] = bone.name + bone = arm.edit_bones.new('spine.002') + bone.head = 0.0000, -0.0340, 1.0601 + bone.tail = 0.0000, -0.0431, 1.1358 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine.001']] + bones['spine.002'] = bone.name + bone = arm.edit_bones.new('shin.L') + bone.head = 0.1306, -0.0170, 0.4977 + bone.tail = 0.1468, -0.0004, 0.0813 + bone.roll = -0.0354 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thigh.L']] + bones['shin.L'] = bone.name + bone = arm.edit_bones.new('shin.R') + bone.head = -0.1306, -0.0170, 0.4977 + bone.tail = -0.1468, -0.0004, 0.0813 + bone.roll = 0.0354 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thigh.R']] + bones['shin.R'] = bone.name + bone = arm.edit_bones.new('spine.003') + bone.head = 0.0000, -0.0431, 1.1358 + bone.tail = 0.0000, -0.0377, 1.2241 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine.002']] + bones['spine.003'] = bone.name + bone = arm.edit_bones.new('foot.L') + bone.head = 0.1468, -0.0004, 0.0813 + bone.tail = 0.1663, -0.1332, 0.0117 + bone.roll = -0.5071 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['shin.L']] + bones['foot.L'] = bone.name + bone = arm.edit_bones.new('foot.R') + bone.head = -0.1468, -0.0004, 0.0813 + bone.tail = -0.1663, -0.1332, 0.0117 + bone.roll = 0.5071 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['shin.R']] + bones['foot.R'] = bone.name + bone = arm.edit_bones.new('spine.007') + bone.head = 0.0000, -0.0377, 1.2241 + bone.tail = 0.0000, -0.0013, 1.3953 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine.003']] + bones['spine.007'] = bone.name + bone = arm.edit_bones.new('toe.L') + bone.head = 0.1663, -0.1332, 0.0117 + bone.tail = 0.1864, -0.2388, 0.0117 + bone.roll = -0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['foot.L']] + bones['toe.L'] = bone.name + bone = arm.edit_bones.new('heel.02.L') + bone.head = 0.1331, 0.0103, 0.0000 + bone.tail = 0.2131, 0.0103, 0.0000 + bone.roll = -0.0000 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['foot.L']] + bones['heel.02.L'] = bone.name + bone = arm.edit_bones.new('toe.R') + bone.head = -0.1663, -0.1332, 0.0117 + bone.tail = -0.1864, -0.2388, 0.0117 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['foot.R']] + bones['toe.R'] = bone.name + bone = arm.edit_bones.new('heel.02.R') + bone.head = -0.1331, 0.0103, 0.0000 + bone.tail = -0.2131, 0.0103, 0.0000 + bone.roll = 0.0000 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['foot.R']] + bones['heel.02.R'] = bone.name + bone = arm.edit_bones.new('spine.008') + bone.head = 0.0000, -0.0013, 1.3953 + bone.tail = 0.0000, 0.0239, 1.5118 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine.007']] + bones['spine.008'] = bone.name + bone = arm.edit_bones.new('spine.004') + bone.head = 0.0000, 0.0239, 1.5118 + bone.tail = 0.0000, 0.0109, 1.5688 + bone.roll = 0.0000 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine.008']] + bones['spine.004'] = bone.name + bone = arm.edit_bones.new('shoulder.L') + bone.head = 0.0093, 0.0209, 1.4502 + bone.tail = 0.1606, 0.0251, 1.4284 + bone.roll = 0.4327 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine.008']] + bones['shoulder.L'] = bone.name + bone = arm.edit_bones.new('shoulder.R') + bone.head = -0.0093, 0.0209, 1.4502 + bone.tail = -0.1606, 0.0251, 1.4284 + bone.roll = -0.4327 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine.008']] + bones['shoulder.R'] = bone.name + bone = arm.edit_bones.new('breast.L') + bone.head = 0.0983, -0.1161, 1.3339 + bone.tail = 0.1165, -0.2435, 1.3375 + bone.roll = -0.3953 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine.008']] + bones['breast.L'] = bone.name + bone = arm.edit_bones.new('breast.R') + bone.head = -0.0983, -0.1161, 1.3339 + bone.tail = -0.1165, -0.2435, 1.3375 + bone.roll = 0.3953 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine.008']] + bones['breast.R'] = bone.name + bone = arm.edit_bones.new('spine.005') + bone.head = 0.0000, 0.0109, 1.5688 + bone.tail = 0.0000, -0.0014, 1.6250 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine.004']] + bones['spine.005'] = bone.name + bone = arm.edit_bones.new('upper_arm.L') + bone.head = 0.1606, 0.0251, 1.4284 + bone.tail = 0.3240, 0.0176, 1.2124 + bone.roll = 2.5927 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['shoulder.L']] + bones['upper_arm.L'] = bone.name + bone = arm.edit_bones.new('upper_arm.R') + bone.head = -0.1606, 0.0251, 1.4284 + bone.tail = -0.3240, 0.0176, 1.2124 + bone.roll = -2.5927 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['shoulder.R']] + bones['upper_arm.R'] = bone.name + bone = arm.edit_bones.new('spine.006') + bone.head = 0.0000, -0.0014, 1.6250 + bone.tail = 0.0000, -0.0017, 1.8234 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine.005']] + bones['spine.006'] = bone.name + bone = arm.edit_bones.new('forearm.L') + bone.head = 0.3240, 0.0176, 1.2124 + bone.tail = 0.4547, -0.1437, 1.0544 + bone.roll = 2.5571 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['upper_arm.L']] + bones['forearm.L'] = bone.name + bone = arm.edit_bones.new('forearm.R') + bone.head = -0.3240, 0.0176, 1.2124 + bone.tail = -0.4547, -0.1437, 1.0544 + bone.roll = -2.5571 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['upper_arm.R']] + bones['forearm.R'] = bone.name + bone = arm.edit_bones.new('hand.L') + bone.head = 0.4547, -0.1437, 1.0544 + bone.tail = 0.4913, -0.1962, 0.9960 + bone.roll = 2.8283 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['forearm.L']] + bones['hand.L'] = bone.name + bone = arm.edit_bones.new('hand.R') + bone.head = -0.4547, -0.1437, 1.0544 + bone.tail = -0.4913, -0.1962, 0.9960 + bone.roll = -2.8283 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['forearm.R']] + bones['hand.R'] = bone.name + bone = arm.edit_bones.new('palm.01.L') + bone.head = 0.4553, -0.1788, 1.0348 + bone.tail = 0.4748, -0.2142, 0.9994 + bone.roll = -1.5725 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.L']] + bones['palm.01.L'] = bone.name + bone = arm.edit_bones.new('palm.02.L') + bone.head = 0.4647, -0.1644, 1.0330 + bone.tail = 0.4913, -0.1962, 0.9960 + bone.roll = -1.8601 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.L']] + bones['palm.02.L'] = bone.name + bone = arm.edit_bones.new('palm.03.L') + bone.head = 0.4701, -0.1550, 1.0286 + bone.tail = 0.4964, -0.1741, 0.9907 + bone.roll = -1.9996 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.L']] + bones['palm.03.L'] = bone.name + bone = arm.edit_bones.new('palm.04.L') + bone.head = 0.4745, -0.1451, 1.0249 + bone.tail = 0.4949, -0.1542, 0.9833 + bone.roll = -1.9641 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.L']] + bones['palm.04.L'] = bone.name + bone = arm.edit_bones.new('palm.01.R') + bone.head = -0.4553, -0.1788, 1.0348 + bone.tail = -0.4748, -0.2142, 0.9994 + bone.roll = 1.5725 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.R']] + bones['palm.01.R'] = bone.name + bone = arm.edit_bones.new('palm.02.R') + bone.head = -0.4647, -0.1644, 1.0330 + bone.tail = -0.4913, -0.1962, 0.9960 + bone.roll = 1.8601 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.R']] + bones['palm.02.R'] = bone.name + bone = arm.edit_bones.new('palm.03.R') + bone.head = -0.4701, -0.1550, 1.0286 + bone.tail = -0.4964, -0.1741, 0.9907 + bone.roll = 1.9996 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.R']] + bones['palm.03.R'] = bone.name + bone = arm.edit_bones.new('palm.04.R') + bone.head = -0.4745, -0.1451, 1.0249 + bone.tail = -0.4949, -0.1542, 0.9833 + bone.roll = 1.9641 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.R']] + bones['palm.04.R'] = bone.name + bone = arm.edit_bones.new('palm.01.R.001') + bone.head = -0.4449, -0.2112, 0.9834 + bone.tail = -0.4688, -0.2515, 0.9479 + bone.roll = 1.7205 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.R']] + bones['palm.01.R.001'] = bone.name + bone = arm.edit_bones.new('f_index.01.L') + bone.head = 0.4748, -0.2142, 0.9994 + bone.tail = 0.4854, -0.2336, 0.9594 + bone.roll = -1.1540 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.01.L']] + bones['f_index.01.L'] = bone.name + bone = arm.edit_bones.new('thumb.01.L') + bone.head = 0.4383, -0.1723, 1.0368 + bone.tail = 0.4277, -0.2086, 1.0101 + bone.roll = 1.9270 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.01.L']] + bones['thumb.01.L'] = bone.name + bone = arm.edit_bones.new('f_middle.01.L') + bone.head = 0.4913, -0.1962, 0.9960 + bone.tail = 0.5008, -0.2145, 0.9513 + bone.roll = -1.2114 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.02.L']] + bones['f_middle.01.L'] = bone.name + bone = arm.edit_bones.new('f_ring.01.L') + bone.head = 0.4964, -0.1741, 0.9907 + bone.tail = 0.5070, -0.1887, 0.9522 + bone.roll = -1.5121 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.03.L']] + bones['f_ring.01.L'] = bone.name + bone = arm.edit_bones.new('f_pinky.01.L') + bone.head = 0.4949, -0.1542, 0.9833 + bone.tail = 0.5018, -0.1605, 0.9559 + bone.roll = -1.6868 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.04.L']] + bones['f_pinky.01.L'] = bone.name + bone = arm.edit_bones.new('f_index.01.R') + bone.head = -0.4748, -0.2142, 0.9994 + bone.tail = -0.4854, -0.2336, 0.9594 + bone.roll = 1.1540 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.01.R']] + bones['f_index.01.R'] = bone.name + bone = arm.edit_bones.new('thumb.01.R') + bone.head = -0.4383, -0.1723, 1.0368 + bone.tail = -0.4277, -0.2086, 1.0101 + bone.roll = -1.9270 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.01.R']] + bones['thumb.01.R'] = bone.name + bone = arm.edit_bones.new('f_middle.01.R') + bone.head = -0.4913, -0.1962, 0.9960 + bone.tail = -0.5008, -0.2145, 0.9513 + bone.roll = 1.2114 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.02.R']] + bones['f_middle.01.R'] = bone.name + bone = arm.edit_bones.new('f_ring.01.R') + bone.head = -0.4964, -0.1741, 0.9907 + bone.tail = -0.5070, -0.1887, 0.9522 + bone.roll = 1.5121 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.03.R']] + bones['f_ring.01.R'] = bone.name + bone = arm.edit_bones.new('f_pinky.01.R') + bone.head = -0.4949, -0.1542, 0.9833 + bone.tail = -0.5018, -0.1605, 0.9559 + bone.roll = 1.6868 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.04.R']] + bones['f_pinky.01.R'] = bone.name + bone = arm.edit_bones.new('f_index.02.L') + bone.head = 0.4854, -0.2336, 0.9594 + bone.tail = 0.4874, -0.2414, 0.9359 + bone.roll = -0.8668 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_index.01.L']] + bones['f_index.02.L'] = bone.name + bone = arm.edit_bones.new('thumb.02.L') + bone.head = 0.4277, -0.2086, 1.0101 + bone.tail = 0.4282, -0.2252, 0.9887 + bone.roll = 0.2203 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thumb.01.L']] + bones['thumb.02.L'] = bone.name + bone = arm.edit_bones.new('f_middle.02.L') + bone.head = 0.5008, -0.2145, 0.9513 + bone.tail = 0.4978, -0.2213, 0.9232 + bone.roll = -0.6286 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_middle.01.L']] + bones['f_middle.02.L'] = bone.name + bone = arm.edit_bones.new('f_ring.02.L') + bone.head = 0.5070, -0.1887, 0.9522 + bone.tail = 0.5010, -0.1960, 0.9213 + bone.roll = -0.8831 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_ring.01.L']] + bones['f_ring.02.L'] = bone.name + bone = arm.edit_bones.new('f_pinky.02.L') + bone.head = 0.5018, -0.1605, 0.9559 + bone.tail = 0.4997, -0.1641, 0.9385 + bone.roll = -1.2261 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_pinky.01.L']] + bones['f_pinky.02.L'] = bone.name + bone = arm.edit_bones.new('f_index.02.R') + bone.head = -0.4854, -0.2336, 0.9594 + bone.tail = -0.4874, -0.2414, 0.9359 + bone.roll = 0.8668 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_index.01.R']] + bones['f_index.02.R'] = bone.name + bone = arm.edit_bones.new('thumb.02.R') + bone.head = -0.4277, -0.2086, 1.0101 + bone.tail = -0.4282, -0.2252, 0.9887 + bone.roll = -0.2203 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thumb.01.R']] + bones['thumb.02.R'] = bone.name + bone = arm.edit_bones.new('f_middle.02.R') + bone.head = -0.5008, -0.2145, 0.9513 + bone.tail = -0.4978, -0.2213, 0.9232 + bone.roll = 0.6286 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_middle.01.R']] + bones['f_middle.02.R'] = bone.name + bone = arm.edit_bones.new('f_ring.02.R') + bone.head = -0.5070, -0.1887, 0.9522 + bone.tail = -0.5010, -0.1960, 0.9213 + bone.roll = 0.8831 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_ring.01.R']] + bones['f_ring.02.R'] = bone.name + bone = arm.edit_bones.new('f_pinky.02.R') + bone.head = -0.5018, -0.1605, 0.9559 + bone.tail = -0.4997, -0.1641, 0.9385 + bone.roll = 1.2261 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_pinky.01.R']] + bones['f_pinky.02.R'] = bone.name + bone = arm.edit_bones.new('f_index.03.L') + bone.head = 0.4874, -0.2414, 0.9359 + bone.tail = 0.4866, -0.2473, 0.9082 + bone.roll = -0.6488 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_index.02.L']] + bones['f_index.03.L'] = bone.name + bone = arm.edit_bones.new('thumb.03.L') + bone.head = 0.4282, -0.2252, 0.9887 + bone.tail = 0.4317, -0.2345, 0.9641 + bone.roll = 0.1726 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thumb.02.L']] + bones['thumb.03.L'] = bone.name + bone = arm.edit_bones.new('f_middle.03.L') + bone.head = 0.4978, -0.2213, 0.9232 + bone.tail = 0.4915, -0.2261, 0.8914 + bone.roll = -0.5997 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_middle.02.L']] + bones['f_middle.03.L'] = bone.name + bone = arm.edit_bones.new('f_ring.03.L') + bone.head = 0.5010, -0.1960, 0.9213 + bone.tail = 0.4921, -0.2004, 0.8890 + bone.roll = -0.7870 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_ring.02.L']] + bones['f_ring.03.L'] = bone.name + bone = arm.edit_bones.new('f_pinky.03.L') + bone.head = 0.4997, -0.1641, 0.9385 + bone.tail = 0.4951, -0.1678, 0.9150 + bone.roll = -1.1811 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_pinky.02.L']] + bones['f_pinky.03.L'] = bone.name + bone = arm.edit_bones.new('f_index.03.R') + bone.head = -0.4874, -0.2414, 0.9359 + bone.tail = -0.4866, -0.2473, 0.9082 + bone.roll = 0.6488 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_index.02.R']] + bones['f_index.03.R'] = bone.name + bone = arm.edit_bones.new('thumb.03.R') + bone.head = -0.4282, -0.2252, 0.9887 + bone.tail = -0.4317, -0.2345, 0.9641 + bone.roll = -0.1726 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thumb.02.R']] + bones['thumb.03.R'] = bone.name + bone = arm.edit_bones.new('f_middle.03.R') + bone.head = -0.4978, -0.2213, 0.9232 + bone.tail = -0.4915, -0.2261, 0.8914 + bone.roll = 0.5997 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_middle.02.R']] + bones['f_middle.03.R'] = bone.name + bone = arm.edit_bones.new('f_ring.03.R') + bone.head = -0.5010, -0.1960, 0.9213 + bone.tail = -0.4921, -0.2004, 0.8890 + bone.roll = 0.7870 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_ring.02.R']] + bones['f_ring.03.R'] = bone.name + bone = arm.edit_bones.new('f_pinky.03.R') + bone.head = -0.4997, -0.1641, 0.9385 + bone.tail = -0.4951, -0.1678, 0.9150 + bone.roll = 1.1811 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_pinky.02.R']] + bones['f_pinky.03.R'] = bone.name + + bpy.ops.object.mode_set(mode='OBJECT') + pbone = obj.pose.bones[bones['spine']] + pbone.rigify_type = 'spines.basic_spine' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Torso (Tweak)') + assign_bone_collection_refs(pbone.rigify_parameters, 'fk', 'Torso (Tweak)') + pbone = obj.pose.bones[bones['spine.001']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + pbone = obj.pose.bones[bones['thigh.L']] + pbone.rigify_type = 'limbs.super_limb' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.L (IK)') + try: + pbone.rigify_parameters.limb_type = 'leg' + except AttributeError: + pass + try: + pbone.rigify_parameters.segments = 3 + except AttributeError: + pass + assign_bone_collection_refs(pbone.rigify_parameters, 'fk', 'Leg.L (FK)') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Leg.L (Tweak)') + pbone = obj.pose.bones[bones['thigh.R']] + pbone.rigify_type = 'limbs.super_limb' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.R (IK)') + try: + pbone.rigify_parameters.limb_type = 'leg' + except AttributeError: + pass + try: + pbone.rigify_parameters.segments = 3 + except AttributeError: + pass + assign_bone_collection_refs(pbone.rigify_parameters, 'fk', 'Leg.R (FK)') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Leg.R (Tweak)') + pbone = obj.pose.bones[bones['spine.002']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + pbone = obj.pose.bones[bones['shin.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.L (IK)') + pbone = obj.pose.bones[bones['shin.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.R (IK)') + pbone = obj.pose.bones[bones['spine.003']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + pbone = obj.pose.bones[bones['foot.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.L (IK)') + pbone = obj.pose.bones[bones['foot.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.R (IK)') + pbone = obj.pose.bones[bones['spine.007']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + pbone = obj.pose.bones[bones['toe.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.L (IK)') + pbone = obj.pose.bones[bones['heel.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.L (IK)') + pbone = obj.pose.bones[bones['toe.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.R (IK)') + pbone = obj.pose.bones[bones['heel.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.R (IK)') + pbone = obj.pose.bones[bones['spine.008']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + pbone = obj.pose.bones[bones['spine.004']] + pbone.rigify_type = 'spines.super_head' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + try: + pbone.rigify_parameters.connect_chain = True + except AttributeError: + pass + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Torso (Tweak)') + pbone = obj.pose.bones[bones['shoulder.L']] + pbone.rigify_type = 'basic.super_copy' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Torso') + try: + pbone.rigify_parameters.make_widget = True + except AttributeError: + pass + try: + pbone.rigify_parameters.super_copy_widget_type = 'shoulder' + except AttributeError: + pass + pbone = obj.pose.bones[bones['shoulder.R']] + pbone.rigify_type = 'basic.super_copy' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Torso') + try: + pbone.rigify_parameters.make_widget = True + except AttributeError: + pass + try: + pbone.rigify_parameters.super_copy_widget_type = 'shoulder' + except AttributeError: + pass + pbone = obj.pose.bones[bones['breast.L']] + pbone.rigify_type = 'basic.super_copy' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Torso') + pbone = obj.pose.bones[bones['breast.R']] + pbone.rigify_type = 'basic.super_copy' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Torso') + pbone = obj.pose.bones[bones['spine.005']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + pbone = obj.pose.bones[bones['upper_arm.L']] + pbone.rigify_type = 'limbs.super_limb' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Arm.L (IK)') + try: + pbone.rigify_parameters.segments = 3 + except AttributeError: + pass + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Arm.L (Tweak)') + assign_bone_collection_refs(pbone.rigify_parameters, 'fk', 'Arm.L (FK)') + pbone = obj.pose.bones[bones['upper_arm.R']] + pbone.rigify_type = 'limbs.super_limb' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Arm.R (IK)') + try: + pbone.rigify_parameters.segments = 3 + except AttributeError: + pass + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Arm.R (Tweak)') + assign_bone_collection_refs(pbone.rigify_parameters, 'fk', 'Arm.R (FK)') + pbone = obj.pose.bones[bones['spine.006']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + pbone = obj.pose.bones[bones['forearm.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Arm.L (IK)') + pbone = obj.pose.bones[bones['forearm.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Arm.R (IK)') + pbone = obj.pose.bones[bones['hand.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Arm.L (IK)') + pbone = obj.pose.bones[bones['hand.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Arm.R (IK)') + pbone = obj.pose.bones[bones['palm.01.L']] + pbone.rigify_type = 'limbs.super_palm' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['palm.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['palm.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['palm.04.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['palm.01.R']] + pbone.rigify_type = 'limbs.super_palm' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['palm.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['palm.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['palm.04.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['palm.01.R.001']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_index.01.L']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['thumb.01.L']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_middle.01.L']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_ring.01.L']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_pinky.01.L']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_index.01.R']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['thumb.01.R']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_middle.01.R']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_ring.01.R']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_pinky.01.R']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_index.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['thumb.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_middle.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_ring.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_pinky.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_index.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['thumb.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_middle.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_ring.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_pinky.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_index.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['thumb.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_middle.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_ring.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_pinky.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_index.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['thumb.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_middle.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_ring.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_pinky.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + + bpy.ops.object.mode_set(mode='EDIT') + for bone in arm.edit_bones: + bone.select = False + bone.select_head = False + bone.select_tail = False + for b in bones: + bone = arm.edit_bones[bones[b]] + bone.select = True + bone.select_head = True + bone.select_tail = True + bone.bbone_x = bone.bbone_z = bone.length * 0.05 + arm.edit_bones.active = bone + + arm.collections.active_index = 0 + + return bones + + +if __name__ == "__main__": + create(bpy.context.active_object) diff --git a/src/addons/ue2rigify/resources/rig_templates/b4_0/female_mannequin_UE5/source_to_deform_links.json b/src/addons/ue2rigify/resources/rig_templates/b4_0/female_mannequin_UE5/source_to_deform_links.json new file mode 100644 index 00000000..8784bc77 --- /dev/null +++ b/src/addons/ue2rigify/resources/rig_templates/b4_0/female_mannequin_UE5/source_to_deform_links.json @@ -0,0 +1,518 @@ +[ + { + "from_node": "Source Rig upperarm_twist_01_l", + "to_node": "Control Rig DEF-upper_arm.L.001", + "from_socket": "upperarm_twist_01_l", + "to_socket": "DEF-upper_arm.L.001" + }, + { + "from_node": "Source Rig upperarm_twist_01_l", + "to_node": "Control Rig DEF-upper_arm.L.001", + "from_socket": "upperarm_twist_01_r", + "to_socket": "DEF-upper_arm.R.001" + }, + { + "from_node": "Source Rig upperarm_twist_02_l", + "to_node": "Control Rig DEF-upper_arm.L.002", + "from_socket": "upperarm_twist_02_l", + "to_socket": "DEF-upper_arm.L.002" + }, + { + "from_node": "Source Rig upperarm_twist_02_l", + "to_node": "Control Rig DEF-upper_arm.L.002", + "from_socket": "upperarm_twist_02_r", + "to_socket": "DEF-upper_arm.R.002" + }, + { + "from_node": "Source Rig lowerarm_l", + "to_node": "Control Rig DEF-forearm.L.001", + "from_socket": "lowerarm_l", + "to_socket": "DEF-forearm.L" + }, + { + "from_node": "Source Rig lowerarm_l", + "to_node": "Control Rig DEF-forearm.L.001", + "from_socket": "lowerarm_r", + "to_socket": "DEF-forearm.R" + }, + { + "from_node": "Source Rig upperarm_l", + "to_node": "Control Rig DEF-upper_arm.L.003", + "from_socket": "upperarm_l", + "to_socket": "DEF-upper_arm.L" + }, + { + "from_node": "Source Rig upperarm_l", + "to_node": "Control Rig DEF-upper_arm.L.003", + "from_socket": "upperarm_r", + "to_socket": "DEF-upper_arm.R" + }, + { + "from_node": "Source Rig upperarm_correctiveRoot_l.001", + "to_node": "Control Rig DEF-upper_arm.L.004", + "from_socket": "upperarm_correctiveRoot_l", + "to_socket": "DEF-upper_arm.L" + }, + { + "from_node": "Source Rig upperarm_correctiveRoot_l.001", + "to_node": "Control Rig DEF-upper_arm.L.004", + "from_socket": "upperarm_correctiveRoot_r", + "to_socket": "DEF-upper_arm.R" + }, + { + "from_node": "Source Rig hand_l", + "to_node": "Control Rig DEF-hand.L", + "from_socket": "hand_l", + "to_socket": "DEF-hand.L" + }, + { + "from_node": "Source Rig hand_l", + "to_node": "Control Rig DEF-hand.L", + "from_socket": "hand_r", + "to_socket": "DEF-hand.R" + }, + { + "from_node": "Source Rig lowerarm_twist_01_l", + "to_node": "Control Rig DEF-forearm.L.003", + "from_socket": "lowerarm_twist_01_l", + "to_socket": "DEF-forearm.L.002" + }, + { + "from_node": "Source Rig lowerarm_twist_01_l", + "to_node": "Control Rig DEF-forearm.L.003", + "from_socket": "lowerarm_twist_01_r", + "to_socket": "DEF-forearm.R.002" + }, + { + "from_node": "Source Rig lowerarm_twist_02_l", + "to_node": "Control Rig DEF-forearm.L.004", + "from_socket": "lowerarm_twist_02_l", + "to_socket": "DEF-forearm.L.001" + }, + { + "from_node": "Source Rig lowerarm_twist_02_l", + "to_node": "Control Rig DEF-forearm.L.004", + "from_socket": "lowerarm_twist_02_r", + "to_socket": "DEF-forearm.R.001" + }, + { + "from_node": "Source Rig thumb_01_l", + "to_node": "Control Rig DEF-thumb.01.L", + "from_socket": "thumb_01_l", + "to_socket": "DEF-thumb.01.L" + }, + { + "from_node": "Source Rig thumb_01_l", + "to_node": "Control Rig DEF-thumb.01.L", + "from_socket": "thumb_01_r", + "to_socket": "DEF-thumb.01.R" + }, + { + "from_node": "Source Rig thumb_02_l", + "to_node": "Control Rig DEF-thumb.02.L", + "from_socket": "thumb_02_l", + "to_socket": "DEF-thumb.02.L" + }, + { + "from_node": "Source Rig thumb_02_l", + "to_node": "Control Rig DEF-thumb.02.L", + "from_socket": "thumb_02_r", + "to_socket": "DEF-thumb.02.R" + }, + { + "from_node": "Source Rig thumb_03_l", + "to_node": "Control Rig DEF-thumb.03.L", + "from_socket": "thumb_03_l", + "to_socket": "DEF-thumb.03.L" + }, + { + "from_node": "Source Rig thumb_03_l", + "to_node": "Control Rig DEF-thumb.03.L", + "from_socket": "thumb_03_r", + "to_socket": "DEF-thumb.03.R" + }, + { + "from_node": "Source Rig index_metacarpal_l", + "to_node": "Control Rig DEF-palm.01.L", + "from_socket": "index_metacarpal_l", + "to_socket": "DEF-palm.01.L" + }, + { + "from_node": "Source Rig index_metacarpal_l", + "to_node": "Control Rig DEF-palm.01.L", + "from_socket": "index_metacarpal_r", + "to_socket": "DEF-palm.01.R" + }, + { + "from_node": "Source Rig index_01_l", + "to_node": "Control Rig DEF-f_index.01.L", + "from_socket": "index_01_l", + "to_socket": "DEF-f_index.01.L" + }, + { + "from_node": "Source Rig index_01_l", + "to_node": "Control Rig DEF-f_index.01.L", + "from_socket": "index_01_r", + "to_socket": "DEF-f_index.01.R" + }, + { + "from_node": "Source Rig index_02_l", + "to_node": "Control Rig DEF-f_index.02.L", + "from_socket": "index_02_l", + "to_socket": "DEF-f_index.02.L" + }, + { + "from_node": "Source Rig index_02_l", + "to_node": "Control Rig DEF-f_index.02.L", + "from_socket": "index_02_r", + "to_socket": "DEF-f_index.02.R" + }, + { + "from_node": "Source Rig index_03_l", + "to_node": "Control Rig DEF-f_index.03.L", + "from_socket": "index_03_l", + "to_socket": "DEF-f_index.03.L" + }, + { + "from_node": "Source Rig index_03_l", + "to_node": "Control Rig DEF-f_index.03.L", + "from_socket": "index_03_r", + "to_socket": "DEF-f_index.03.R" + }, + { + "from_node": "Source Rig middle_metacarpal_l", + "to_node": "Control Rig DEF-palm.02.L", + "from_socket": "middle_metacarpal_l", + "to_socket": "DEF-palm.02.L" + }, + { + "from_node": "Source Rig middle_metacarpal_l", + "to_node": "Control Rig DEF-palm.02.L", + "from_socket": "middle_metacarpal_r", + "to_socket": "DEF-palm.02.R" + }, + { + "from_node": "Source Rig middle_01_l", + "to_node": "Control Rig DEF-f_middle.01.L", + "from_socket": "middle_01_l", + "to_socket": "DEF-f_middle.01.L" + }, + { + "from_node": "Source Rig middle_01_l", + "to_node": "Control Rig DEF-f_middle.01.L", + "from_socket": "middle_01_r", + "to_socket": "DEF-f_middle.01.R" + }, + { + "from_node": "Source Rig middle_02_l", + "to_node": "Control Rig DEF-f_middle.02.L", + "from_socket": "middle_02_l", + "to_socket": "DEF-f_middle.02.L" + }, + { + "from_node": "Source Rig middle_02_l", + "to_node": "Control Rig DEF-f_middle.02.L", + "from_socket": "middle_02_r", + "to_socket": "DEF-f_middle.02.R" + }, + { + "from_node": "Source Rig middle_03_l", + "to_node": "Control Rig DEF-f_middle.03.L", + "from_socket": "middle_03_l", + "to_socket": "DEF-f_middle.03.L" + }, + { + "from_node": "Source Rig middle_03_l", + "to_node": "Control Rig DEF-f_middle.03.L", + "from_socket": "middle_03_r", + "to_socket": "DEF-f_middle.03.R" + }, + { + "from_node": "Source Rig ring_03_l", + "to_node": "Control Rig DEF-f_ring.03.L", + "from_socket": "ring_03_l", + "to_socket": "DEF-f_ring.03.L" + }, + { + "from_node": "Source Rig ring_03_l", + "to_node": "Control Rig DEF-f_ring.03.L", + "from_socket": "ring_03_r", + "to_socket": "DEF-f_ring.03.R" + }, + { + "from_node": "Source Rig thigh_l", + "to_node": "Control Rig DEF-thigh.L.001", + "from_socket": "thigh_l", + "to_socket": "DEF-thigh.L" + }, + { + "from_node": "Source Rig thigh_l", + "to_node": "Control Rig DEF-thigh.L.001", + "from_socket": "thigh_r", + "to_socket": "DEF-thigh.R" + }, + { + "from_node": "Source Rig lowerarm_correctiveRoot_l", + "to_node": "Control Rig DEF-forearm.L", + "from_socket": "lowerarm_correctiveRoot_l", + "to_socket": "DEF-forearm.L" + }, + { + "from_node": "Source Rig lowerarm_correctiveRoot_l", + "to_node": "Control Rig DEF-forearm.L", + "from_socket": "lowerarm_correctiveRoot_r", + "to_socket": "DEF-forearm.R" + }, + { + "from_node": "Source Rig thigh_twist_01_l", + "to_node": "Control Rig DEF-thigh.L.002", + "from_socket": "thigh_twist_01_l", + "to_socket": "DEF-thigh.L.001" + }, + { + "from_node": "Source Rig thigh_twist_01_r", + "to_node": "Control Rig DEF-thigh.R.001", + "from_socket": "thigh_twist_01_r", + "to_socket": "DEF-thigh.R.001" + }, + { + "from_node": "Source Rig thigh_twist_02_r", + "to_node": "Control Rig DEF-thigh.R.002", + "from_socket": "thigh_twist_02_r", + "to_socket": "DEF-thigh.R.002" + }, + { + "from_node": "Source Rig thigh_twist_02_l", + "to_node": "Control Rig DEF-thigh.L.003", + "from_socket": "thigh_twist_02_l", + "to_socket": "DEF-thigh.L.002" + }, + { + "from_node": "Source Rig calf_twist_02_l", + "to_node": "Control Rig DEF-shin.L.002", + "from_socket": "calf_twist_02_l", + "to_socket": "DEF-shin.L.001" + }, + { + "from_node": "Source Rig calf_twist_02_l", + "to_node": "Control Rig DEF-shin.L.002", + "from_socket": "calf_twist_02_r", + "to_socket": "DEF-shin.R.001" + }, + { + "from_node": "Source Rig calf_correctiveRoot_l.001", + "to_node": "Control Rig DEF-shin.L.003", + "from_socket": "calf_correctiveRoot_l", + "to_socket": "DEF-shin.L" + }, + { + "from_node": "Source Rig calf_correctiveRoot_l.001", + "to_node": "Control Rig DEF-shin.L.003", + "from_socket": "calf_correctiveRoot_r", + "to_socket": "DEF-shin.R" + }, + { + "from_node": "Source Rig calf_twist_01_l", + "to_node": "Control Rig DEF-shin.L.004", + "from_socket": "calf_twist_01_l", + "to_socket": "DEF-shin.L.002" + }, + { + "from_node": "Source Rig calf_twist_01_l", + "to_node": "Control Rig DEF-shin.L.004", + "from_socket": "calf_twist_01_r", + "to_socket": "DEF-shin.R.002" + }, + { + "from_node": "Source Rig foot_l", + "to_node": "Control Rig DEF-foot.L", + "from_socket": "foot_l", + "to_socket": "DEF-foot.L" + }, + { + "from_node": "Source Rig foot_l", + "to_node": "Control Rig DEF-foot.L", + "from_socket": "foot_r", + "to_socket": "DEF-foot.R" + }, + { + "from_node": "Source Rig ball_l", + "to_node": "Control Rig DEF-toe.L", + "from_socket": "ball_l", + "to_socket": "DEF-toe.L" + }, + { + "from_node": "Source Rig ball_l", + "to_node": "Control Rig DEF-toe.L", + "from_socket": "ball_r", + "to_socket": "DEF-toe.R" + }, + { + "from_node": "Source Rig calf_l.001", + "to_node": "Control Rig DEF-shin.L.001", + "from_socket": "calf_l", + "to_socket": "DEF-shin.L" + }, + { + "from_node": "Source Rig calf_l.001", + "to_node": "Control Rig DEF-shin.L.001", + "from_socket": "calf_r", + "to_socket": "DEF-shin.R" + }, + { + "from_node": "Source Rig thigh_correctiveRoot_l.001", + "to_node": "Control Rig DEF-thigh.L.004", + "from_socket": "thigh_correctiveRoot_l", + "to_socket": "DEF-thigh.L" + }, + { + "from_node": "Source Rig thigh_correctiveRoot_l.001", + "to_node": "Control Rig DEF-thigh.L.004", + "from_socket": "thigh_correctiveRoot_r", + "to_socket": "DEF-thigh.R" + }, + { + "from_node": "Source Rig pelvis", + "to_node": "Control Rig DEF-spine", + "from_socket": "pelvis", + "to_socket": "DEF-spine" + }, + { + "from_node": "Source Rig spine_01", + "to_node": "Control Rig DEF-spine.001", + "from_socket": "spine_01", + "to_socket": "DEF-spine.001" + }, + { + "from_node": "Source Rig spine_02", + "to_node": "Control Rig DEF-spine.002", + "from_socket": "spine_02", + "to_socket": "DEF-spine.002" + }, + { + "from_node": "Source Rig spine_03", + "to_node": "Control Rig DEF-spine.003", + "from_socket": "spine_03", + "to_socket": "DEF-spine.003" + }, + { + "from_node": "Source Rig spine_04", + "to_node": "Control Rig DEF-spine.007", + "from_socket": "spine_04", + "to_socket": "DEF-spine.007" + }, + { + "from_node": "Source Rig clavicle_pec_l", + "to_node": "Control Rig DEF-breast.L", + "from_socket": "clavicle_pec_l", + "to_socket": "DEF-breast.L" + }, + { + "from_node": "Source Rig clavicle_pec_l", + "to_node": "Control Rig DEF-breast.L", + "from_socket": "clavicle_pec_r", + "to_socket": "DEF-breast.R" + }, + { + "from_node": "Source Rig spine_05", + "to_node": "Control Rig DEF-spine.008", + "from_socket": "spine_05", + "to_socket": "DEF-spine.008" + }, + { + "from_node": "Source Rig clavicle_l", + "to_node": "Control Rig DEF-shoulder.L", + "from_socket": "clavicle_l", + "to_socket": "DEF-shoulder.L" + }, + { + "from_node": "Source Rig clavicle_l", + "to_node": "Control Rig DEF-shoulder.L", + "from_socket": "clavicle_r", + "to_socket": "DEF-shoulder.R" + }, + { + "from_node": "Source Rig neck_02", + "to_node": "Control Rig DEF-spine.005", + "from_socket": "neck_02", + "to_socket": "DEF-spine.005" + }, + { + "from_node": "Source Rig neck_01", + "to_node": "Control Rig DEF-spine.004", + "from_socket": "neck_01", + "to_socket": "DEF-spine.004" + }, + { + "from_node": "Source Rig head", + "to_node": "Control Rig DEF-spine.006", + "from_socket": "head", + "to_socket": "DEF-spine.006" + }, + { + "from_node": "root", + "to_node": "Control Rig root", + "from_socket": "object", + "to_socket": "root" + }, + { + "from_node": "Source Rig ring_01_l", + "to_node": "Control Rig DEF-f_ring.01.L", + "from_socket": "ring_01_l", + "to_socket": "DEF-f_ring.01.L" + }, + { + "from_node": "Source Rig ring_01_l", + "to_node": "Control Rig DEF-f_ring.01.L", + "from_socket": "ring_01_r", + "to_socket": "DEF-f_ring.01.R" + }, + { + "from_node": "Source Rig ring_02_l", + "to_node": "Control Rig DEF-f_ring.02.L", + "from_socket": "ring_02_l", + "to_socket": "DEF-f_ring.02.L" + }, + { + "from_node": "Source Rig ring_02_l", + "to_node": "Control Rig DEF-f_ring.02.L", + "from_socket": "ring_02_r", + "to_socket": "DEF-f_ring.02.R" + }, + { + "from_node": "Source Rig pinky_01_l", + "to_node": "Control Rig DEF-f_pinky.01.L", + "from_socket": "pinky_01_l", + "to_socket": "DEF-f_pinky.01.L" + }, + { + "from_node": "Source Rig pinky_01_l", + "to_node": "Control Rig DEF-f_pinky.01.L", + "from_socket": "pinky_01_r", + "to_socket": "DEF-f_pinky.01.R" + }, + { + "from_node": "Source Rig pinky_02_l", + "to_node": "Control Rig DEF-f_pinky.02.L", + "from_socket": "pinky_02_l", + "to_socket": "DEF-f_pinky.02.L" + }, + { + "from_node": "Source Rig pinky_02_l", + "to_node": "Control Rig DEF-f_pinky.02.L", + "from_socket": "pinky_02_r", + "to_socket": "DEF-f_pinky.02.R" + }, + { + "from_node": "Source Rig pinky_03_l", + "to_node": "Control ", + "from_socket": "pinky_03_l", + "to_socket": "DEF-f_pinky.03.L" + }, + { + "from_node": "Source Rig pinky_03_l", + "to_node": "Control ", + "from_socket": "pinky_03_r", + "to_socket": "DEF-f_pinky.03.R" + } +] \ No newline at end of file diff --git a/src/addons/ue2rigify/resources/rig_templates/b4_0/female_mannequin_UE5/source_to_deform_nodes.json b/src/addons/ue2rigify/resources/rig_templates/b4_0/female_mannequin_UE5/source_to_deform_nodes.json new file mode 100644 index 00000000..a05dada8 --- /dev/null +++ b/src/addons/ue2rigify/resources/rig_templates/b4_0/female_mannequin_UE5/source_to_deform_nodes.json @@ -0,0 +1,2274 @@ +[ + { + "name": "Source Rig upperarm_twist_01_l", + "label": "Source Rig upperarm_twist_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 120.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upperarm_twist_01_l", + "upperarm_twist_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-upper_arm.L.001", + "label": "Control Rig DEF-upper_arm.L.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 120.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-upper_arm.L.001", + "DEF-upper_arm.R.001" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig upperarm_twist_02_l", + "label": "Source Rig upperarm_twist_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 240.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upperarm_twist_02_l", + "upperarm_twist_02_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-upper_arm.L.002", + "label": "Control Rig DEF-upper_arm.L.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 240.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-upper_arm.L.002", + "DEF-upper_arm.R.002" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig lowerarm_l", + "label": "Source Rig lowerarm_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 480.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "lowerarm_l", + "lowerarm_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-forearm.L.001", + "label": "Control Rig DEF-forearm.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 480.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-forearm.L", + "DEF-forearm.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig upperarm_l", + "label": "Source Rig upperarm_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 600.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upperarm_l", + "upperarm_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-upper_arm.L.003", + "label": "Control Rig DEF-upper_arm.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 600.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-upper_arm.L", + "DEF-upper_arm.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig upperarm_correctiveRoot_l.001", + "label": "Source Rig upperarm_correctiveRoot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 840.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upperarm_correctiveRoot_l", + "upperarm_correctiveRoot_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-upper_arm.L.004", + "label": "Control Rig DEF-upper_arm.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 840.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-upper_arm.L", + "DEF-upper_arm.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig hand_l", + "label": "Source Rig hand_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 960.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "hand_l", + "hand_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-hand.L", + "label": "Control Rig DEF-hand.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 960.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-hand.L", + "DEF-hand.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig lowerarm_twist_01_l", + "label": "Source Rig lowerarm_twist_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1080.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "lowerarm_twist_01_l", + "lowerarm_twist_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-forearm.L.003", + "label": "Control Rig DEF-forearm.L.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1080.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-forearm.L.002", + "DEF-forearm.R.002" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig lowerarm_twist_02_l", + "label": "Source Rig lowerarm_twist_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1200.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "lowerarm_twist_02_l", + "lowerarm_twist_02_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-forearm.L.004", + "label": "Control Rig DEF-forearm.L.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1200.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-forearm.L.001", + "DEF-forearm.R.001" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig thumb_01_l", + "label": "Source Rig thumb_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1320.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thumb_01_l", + "thumb_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-thumb.01.L", + "label": "Control Rig DEF-thumb.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1320.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thumb.01.L", + "DEF-thumb.01.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig thumb_02_l", + "label": "Source Rig thumb_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1440.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thumb_02_l", + "thumb_02_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-thumb.02.L", + "label": "Control Rig DEF-thumb.02.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1440.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thumb.02.L", + "DEF-thumb.02.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig thumb_03_l", + "label": "Source Rig thumb_03_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1560.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thumb_03_l", + "thumb_03_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-thumb.03.L", + "label": "Control Rig DEF-thumb.03.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1560.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thumb.03.L", + "DEF-thumb.03.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig index_metacarpal_l", + "label": "Source Rig index_metacarpal_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1680.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "index_metacarpal_l", + "index_metacarpal_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-palm.01.L", + "label": "Control Rig DEF-palm.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1680.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-palm.01.L", + "DEF-palm.01.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig index_01_l", + "label": "Source Rig index_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1800.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "index_01_l", + "index_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_index.01.L", + "label": "Control Rig DEF-f_index.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1800.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_index.01.L", + "DEF-f_index.01.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig index_02_l", + "label": "Source Rig index_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1920.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "index_02_l", + "index_02_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_index.02.L", + "label": "Control Rig DEF-f_index.02.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1920.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_index.02.L", + "DEF-f_index.02.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig index_03_l", + "label": "Source Rig index_03_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2040.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "index_03_l", + "index_03_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_index.03.L", + "label": "Control Rig DEF-f_index.03.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2040.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_index.03.L", + "DEF-f_index.03.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig middle_metacarpal_l", + "label": "Source Rig middle_metacarpal_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2160.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "middle_metacarpal_l", + "middle_metacarpal_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-palm.02.L", + "label": "Control Rig DEF-palm.02.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2160.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-palm.02.L", + "DEF-palm.02.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig middle_01_l", + "label": "Source Rig middle_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2280.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "middle_01_l", + "middle_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_middle.01.L", + "label": "Control Rig DEF-f_middle.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2280.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_middle.01.L", + "DEF-f_middle.01.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig middle_02_l", + "label": "Source Rig middle_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2400.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "middle_02_l", + "middle_02_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_middle.02.L", + "label": "Control Rig DEF-f_middle.02.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2400.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_middle.02.L", + "DEF-f_middle.02.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig middle_03_l", + "label": "Source Rig middle_03_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2520.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "middle_03_l", + "middle_03_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_middle.03.L", + "label": "Control Rig DEF-f_middle.03.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2520.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_middle.03.L", + "DEF-f_middle.03.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig ring_03_l", + "label": "Source Rig ring_03_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2880.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "ring_03_l", + "ring_03_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_ring.03.L", + "label": "Control Rig DEF-f_ring.03.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2880.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_ring.03.L", + "DEF-f_ring.03.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig thigh_l", + "label": "Source Rig thigh_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3480.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_l", + "thigh_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-thigh.L.001", + "label": "Control Rig DEF-thigh.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3480.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thigh.L", + "DEF-thigh.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig lowerarm_correctiveRoot_l", + "label": "Source Rig lowerarm_correctiveRoot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3600.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "lowerarm_correctiveRoot_l", + "lowerarm_correctiveRoot_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-forearm.L", + "label": "Control Rig DEF-forearm.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3600.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-forearm.L", + "DEF-forearm.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig thigh_twist_01_l", + "label": "Source Rig thigh_twist_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -281.4216003417969, + 4074.18212890625 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_twist_01_l" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-thigh.L.002", + "label": "Control Rig DEF-thigh.L.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 301.9412841796875, + 4069.910400390625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thigh.L.001" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig thigh_twist_01_r", + "label": "Source Rig thigh_twist_01_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -284.6238708496094, + 4002.360107421875 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_twist_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-thigh.R.001", + "label": "Control Rig DEF-thigh.R.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 307.329345703125, + 4002.27392578125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thigh.R.001" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-thigh.R.002", + "label": "Control Rig DEF-thigh.R.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 310.2611083984375, + 3933.42138671875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thigh.R.002" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig thigh_twist_02_r", + "label": "Source Rig thigh_twist_02_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -281.69219970703125, + 3936.43798828125 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_twist_02_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig thigh_twist_02_l", + "label": "Source Rig thigh_twist_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -289.0215759277344, + 4154.71484375 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_twist_02_l" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig calf_twist_02_l", + "label": "Source Rig calf_twist_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 4274.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "calf_twist_02_l", + "calf_twist_02_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-shin.L.002", + "label": "Control Rig DEF-shin.L.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 4274.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-shin.L.001", + "DEF-shin.R.001" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig calf_correctiveRoot_l.001", + "label": "Source Rig calf_correctiveRoot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 4394.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "calf_correctiveRoot_l", + "calf_correctiveRoot_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-shin.L.003", + "label": "Control Rig DEF-shin.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 4394.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-shin.L", + "DEF-shin.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig calf_twist_01_l", + "label": "Source Rig calf_twist_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 4514.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "calf_twist_01_l", + "calf_twist_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-shin.L.004", + "label": "Control Rig DEF-shin.L.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 4514.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-shin.L.002", + "DEF-shin.R.002" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig foot_l", + "label": "Source Rig foot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 4634.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "foot_l", + "foot_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-foot.L", + "label": "Control Rig DEF-foot.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 4634.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-foot.L", + "DEF-foot.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig ball_l", + "label": "Source Rig ball_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 4754.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "ball_l", + "ball_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-toe.L", + "label": "Control Rig DEF-toe.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 4754.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-toe.L", + "DEF-toe.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig calf_l.001", + "label": "Source Rig calf_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 4874.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "calf_l", + "calf_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-shin.L.001", + "label": "Control Rig DEF-shin.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 4874.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-shin.L", + "DEF-shin.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig thigh_correctiveRoot_l.001", + "label": "Source Rig thigh_correctiveRoot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 4994.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_correctiveRoot_l", + "thigh_correctiveRoot_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-thigh.L.004", + "label": "Control Rig DEF-thigh.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 4994.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thigh.L", + "DEF-thigh.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig pelvis", + "label": "Source Rig pelvis", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 5114.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "pelvis" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.001", + "label": "Control Rig DEF-spine.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 5234.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.001" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.002", + "label": "Control Rig DEF-spine.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 5354.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.002" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.003", + "label": "Control Rig DEF-spine.003", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 5474.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.003" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.007", + "label": "Control Rig DEF-spine.007", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 5594.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.007" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig clavicle_pec_l", + "label": "Source Rig clavicle_pec_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 5714.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "clavicle_pec_l", + "clavicle_pec_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-breast.L", + "label": "Control Rig DEF-breast.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 5714.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-breast.L", + "DEF-breast.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig spine_05", + "label": "Source Rig spine_05", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 5834.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_05" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.008", + "label": "Control Rig DEF-spine.008", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 5834.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.008" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig clavicle_l", + "label": "Source Rig clavicle_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 5954.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "clavicle_l", + "clavicle_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-shoulder.L", + "label": "Control Rig DEF-shoulder.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 5954.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-shoulder.L", + "DEF-shoulder.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig neck_02", + "label": "Source Rig neck_02", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 6074.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "neck_02" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.005", + "label": "Control Rig DEF-spine.005", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 6074.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.005" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig neck_01", + "label": "Source Rig neck_01", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 6194.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "neck_01" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.004", + "label": "Control Rig DEF-spine.004", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 6194.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.004" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig head", + "label": "Source Rig head", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 6314.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "head" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.006", + "label": "Control Rig DEF-spine.006", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 6314.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.006" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-thigh.L.003", + "label": "Control Rig DEF-thigh.L.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 298.5340881347656, + 4147.3037109375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thigh.L.002" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "root", + "label": "root", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -256.8031921386719, + 6428.2255859375 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "object" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig root", + "label": "Control Rig root", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 296.83050537109375, + 6425.21240234375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "root" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig spine_02", + "label": "Source Rig spine_02", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 5354.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_02" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig spine_03", + "label": "Source Rig spine_03", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 5474.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_03" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig spine_04", + "label": "Source Rig spine_04", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 5594.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_04" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig spine_01", + "label": "Source Rig spine_01", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 5234.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_01" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine", + "label": "Control Rig DEF-spine", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 298.4156799316406, + 5113.13134765625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig ring_02_l", + "label": "Source Rig ring_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2760.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "ring_02_l", + "ring_02_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_ring.01.L", + "label": "Control Rig DEF-f_ring.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2640.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_ring.01.L", + "DEF-f_ring.01.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig ring_01_l", + "label": "Source Rig ring_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2640.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "ring_01_l", + "ring_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_ring.02.L", + "label": "Control Rig DEF-f_ring.02.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2760.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_ring.02.L", + "DEF-f_ring.02.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig pinky_01_l", + "label": "Source Rig pinky_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3000.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "pinky_01_l", + "pinky_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_pinky.01.L", + "label": "Control Rig DEF-f_pinky.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3000.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_pinky.01.L", + "DEF-f_pinky.01.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_pinky.02.L", + "label": "Control Rig DEF-f_pinky.02.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3120.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_pinky.02.L", + "DEF-f_pinky.02.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig pinky_02_l", + "label": "Source Rig pinky_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3120.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "pinky_02_l", + "pinky_02_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control ", + "label": "Control ", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 306.4084777832031, + 3237.693359375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_pinky.03.L", + "DEF-f_pinky.03.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig pinky_03_l", + "label": "Source Rig pinky_03_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3240.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "pinky_03_l", + "pinky_03_r" + ], + "mode": "SOURCE_TO_DEFORM" + } +] \ No newline at end of file diff --git a/src/addons/ue2rigify/resources/rig_templates/b4_0/male_mannequin_UE4/fk_to_source_links.json b/src/addons/ue2rigify/resources/rig_templates/b4_0/male_mannequin_UE4/fk_to_source_links.json new file mode 100644 index 00000000..0e3244b0 --- /dev/null +++ b/src/addons/ue2rigify/resources/rig_templates/b4_0/male_mannequin_UE4/fk_to_source_links.json @@ -0,0 +1,536 @@ +[ + { + "from_node": "Control Rig forearm_tweak.L.001", + "to_node": "Source Rig lowerarm_twist_01_l", + "from_socket": "forearm_tweak.L.001", + "to_socket": "lowerarm_twist_01_l" + }, + { + "from_node": "Control Rig forearm_tweak.L.001", + "to_node": "Source Rig lowerarm_twist_01_l", + "from_socket": "hand_tweak.L", + "to_socket": "hand_l" + }, + { + "from_node": "Control Rig forearm_tweak.L.001", + "to_node": "Source Rig lowerarm_twist_01_l", + "from_socket": "forearm_tweak.L", + "to_socket": "lowerarm_l" + }, + { + "from_node": "Control Rig forearm_tweak.L.001", + "to_node": "Source Rig lowerarm_twist_01_l", + "from_socket": "upper_arm_tweak.L", + "to_socket": "upperarm_twist_01_l" + }, + { + "from_node": "Control Rig upper_arm_tweak.R", + "to_node": "Source Rig hand_r.001", + "from_socket": "upper_arm_tweak.R", + "to_socket": "upperarm_twist_01_r" + }, + { + "from_node": "Control Rig upper_arm_tweak.R", + "to_node": "Source Rig hand_r.001", + "from_socket": "forearm_tweak.R", + "to_socket": "lowerarm_r" + }, + { + "from_node": "Control Rig upper_arm_tweak.R", + "to_node": "Source Rig hand_r.001", + "from_socket": "forearm_tweak.R.001", + "to_socket": "lowerarm_twist_01_r" + }, + { + "from_node": "Control Rig upper_arm_tweak.R", + "to_node": "Source Rig hand_r.001", + "from_socket": "hand_tweak.R", + "to_socket": "hand_r" + }, + { + "from_node": "Control Rig thumb.03.L", + "to_node": "Source Rig thumb_03_l", + "from_socket": "thumb.03.L", + "to_socket": "thumb_03_l" + }, + { + "from_node": "Control Rig thumb.03.L", + "to_node": "Source Rig thumb_03_l", + "from_socket": "thumb.02.L", + "to_socket": "thumb_02_l" + }, + { + "from_node": "Control Rig thumb.03.L", + "to_node": "Source Rig thumb_03_l", + "from_socket": "thumb.01.L", + "to_socket": "thumb_01_l" + }, + { + "from_node": "Control Rig f_index.03.L", + "to_node": "Source Rig index_03_l", + "from_socket": "f_index.03.L", + "to_socket": "index_03_l" + }, + { + "from_node": "Control Rig f_index.03.L", + "to_node": "Source Rig index_03_l", + "from_socket": "f_index.02.L", + "to_socket": "index_02_l" + }, + { + "from_node": "Control Rig f_index.03.L", + "to_node": "Source Rig index_03_l", + "from_socket": "f_index.01.L", + "to_socket": "index_01_l" + }, + { + "from_node": "Control Rig f_ring.03.L", + "to_node": "Source Rig ring_03_l", + "from_socket": "f_ring.03.L", + "to_socket": "ring_03_l" + }, + { + "from_node": "Control Rig f_ring.03.L", + "to_node": "Source Rig ring_03_l", + "from_socket": "f_ring.02.L", + "to_socket": "ring_02_l" + }, + { + "from_node": "Control Rig f_ring.03.L", + "to_node": "Source Rig ring_03_l", + "from_socket": "f_ring.01.L", + "to_socket": "ring_01_l" + }, + { + "from_node": "Control Rig f_pinky.03.L", + "to_node": "Source Rig pinky_03_l", + "from_socket": "f_pinky.03.L", + "to_socket": "pinky_03_l" + }, + { + "from_node": "Control Rig f_pinky.03.L", + "to_node": "Source Rig pinky_03_l", + "from_socket": "f_pinky.02.L", + "to_socket": "pinky_02_l" + }, + { + "from_node": "Control Rig f_pinky.03.L", + "to_node": "Source Rig pinky_03_l", + "from_socket": "f_pinky.01.L", + "to_socket": "pinky_01_l" + }, + { + "from_node": "Control Rig thumb.02.R", + "to_node": "Source Rig thumb_03_r", + "from_socket": "thumb.03.R", + "to_socket": "thumb_03_r" + }, + { + "from_node": "Control Rig thumb.02.R", + "to_node": "Source Rig thumb_03_r", + "from_socket": "thumb.02.R", + "to_socket": "thumb_02_r" + }, + { + "from_node": "Control Rig thumb.02.R", + "to_node": "Source Rig thumb_03_r", + "from_socket": "thumb.01.R", + "to_socket": "thumb_01_r" + }, + { + "from_node": "Control Rig f_index.03.R", + "to_node": "Source Rig index_03_r", + "from_socket": "f_index.03.R", + "to_socket": "index_03_r" + }, + { + "from_node": "Control Rig f_index.03.R", + "to_node": "Source Rig index_03_r", + "from_socket": "f_index.02.R", + "to_socket": "index_02_r" + }, + { + "from_node": "Control Rig f_index.03.R", + "to_node": "Source Rig index_03_r", + "from_socket": "f_index.01.R", + "to_socket": "index_01_r" + }, + { + "from_node": "Control Rig f_middle.03.R", + "to_node": "Source Rig middle_03_r", + "from_socket": "f_middle.03.R", + "to_socket": "middle_03_r" + }, + { + "from_node": "Control Rig f_middle.03.R", + "to_node": "Source Rig middle_03_r", + "from_socket": "f_middle.02.R", + "to_socket": "middle_02_r" + }, + { + "from_node": "Control Rig f_middle.03.R", + "to_node": "Source Rig middle_03_r", + "from_socket": "f_middle.01.R", + "to_socket": "middle_01_r" + }, + { + "from_node": "Control Rig f_ring.03.R", + "to_node": "Source Rig ring_03_r", + "from_socket": "f_ring.03.R", + "to_socket": "ring_03_r" + }, + { + "from_node": "Control Rig f_ring.03.R", + "to_node": "Source Rig ring_03_r", + "from_socket": "f_ring.02.R", + "to_socket": "ring_02_r" + }, + { + "from_node": "Control Rig f_ring.03.R", + "to_node": "Source Rig ring_03_r", + "from_socket": "f_ring.01.R", + "to_socket": "ring_01_r" + }, + { + "from_node": "Control Rig f_pinky.03.R", + "to_node": "Source Rig pinky_03_r", + "from_socket": "f_pinky.03.R", + "to_socket": "pinky_03_r" + }, + { + "from_node": "Control Rig f_pinky.03.R", + "to_node": "Source Rig pinky_03_r", + "from_socket": "f_pinky.02.R", + "to_socket": "pinky_02_r" + }, + { + "from_node": "Control Rig f_pinky.03.R", + "to_node": "Source Rig pinky_03_r", + "from_socket": "f_pinky.01.R", + "to_socket": "pinky_01_r" + }, + { + "from_node": "Control Rig hips", + "to_node": "Source Rig pelvis", + "from_socket": "hips", + "to_socket": "pelvis" + }, + { + "from_node": "Control Rig torso", + "to_node": "Source Rig pelvis.003", + "from_socket": "torso", + "to_socket": "pelvis" + }, + { + "from_node": "Control Rig tweak_spine.004", + "to_node": "Source Rig neck_01", + "from_socket": "tweak_spine.004", + "to_socket": "neck_01" + }, + { + "from_node": "Control Rig tweak_spine.004", + "to_node": "Source Rig neck_01", + "from_socket": "tweak_spine.003", + "to_socket": "spine_03" + }, + { + "from_node": "Control Rig tweak_spine.004", + "to_node": "Source Rig neck_01", + "from_socket": "tweak_spine.002", + "to_socket": "spine_02" + }, + { + "from_node": "Control Rig tweak_spine.004", + "to_node": "Source Rig neck_01", + "from_socket": "tweak_spine.001", + "to_socket": "spine_01" + }, + { + "from_node": "Control Rig tweak_spine.004", + "to_node": "Source Rig neck_01", + "from_socket": "tweak_spine", + "to_socket": "pelvis" + }, + { + "from_node": "Control Rig head", + "to_node": "Source Rig head", + "from_socket": "head", + "to_socket": "head" + }, + { + "from_node": "Control Rig head", + "to_node": "Source Rig head", + "from_socket": "neck", + "to_socket": "neck_01" + }, + { + "from_node": "Control Rig head", + "to_node": "Source Rig head", + "from_socket": "spine_fk.003", + "to_socket": "spine_03" + }, + { + "from_node": "Control Rig head", + "to_node": "Source Rig head", + "from_socket": "spine_fk.002", + "to_socket": "spine_02" + }, + { + "from_node": "Control Rig head", + "to_node": "Source Rig head", + "from_socket": "spine_fk.001", + "to_socket": "spine_01" + }, + { + "from_node": "Control Rig head", + "to_node": "Source Rig head", + "from_socket": "spine_fk", + "to_socket": "pelvis" + }, + { + "from_node": "Control Rig chest", + "to_node": "Source Rig spine_02", + "from_socket": "chest", + "to_socket": "spine_02" + }, + { + "from_node": "Control Rig shoulder.L", + "to_node": "Source Rig clavicle_l", + "from_socket": "shoulder.L", + "to_socket": "clavicle_l" + }, + { + "from_node": "Control Rig shoulder.L", + "to_node": "Source Rig clavicle_l", + "from_socket": "hand_fk.L", + "to_socket": "hand_l" + }, + { + "from_node": "Control Rig shoulder.L", + "to_node": "Source Rig clavicle_l", + "from_socket": "upper_arm_fk.L", + "to_socket": "upperarm_l" + }, + { + "from_node": "Control Rig shoulder.L", + "to_node": "Source Rig clavicle_l", + "from_socket": "forearm_fk.L", + "to_socket": "lowerarm_l" + }, + { + "from_node": "Control Rig shoulder.R", + "to_node": "Source Rig clavicle_r", + "from_socket": "shoulder.R", + "to_socket": "clavicle_r" + }, + { + "from_node": "Control Rig shoulder.R", + "to_node": "Source Rig clavicle_r", + "from_socket": "hand_fk.R", + "to_socket": "hand_r" + }, + { + "from_node": "Control Rig shoulder.R", + "to_node": "Source Rig clavicle_r", + "from_socket": "upper_arm_fk.R", + "to_socket": "upperarm_r" + }, + { + "from_node": "Control Rig shoulder.R", + "to_node": "Source Rig clavicle_r", + "from_socket": "forearm_fk.R", + "to_socket": "lowerarm_r" + }, + { + "from_node": "Control Rig foot_tweak.L", + "to_node": "Source Rig thigh_l", + "from_socket": "foot_tweak.L", + "to_socket": "foot_l" + }, + { + "from_node": "Control Rig foot_tweak.L", + "to_node": "Source Rig thigh_l", + "from_socket": "shin_tweak.L.001", + "to_socket": "calf_twist_01_l" + }, + { + "from_node": "Control Rig foot_tweak.L", + "to_node": "Source Rig thigh_l", + "from_socket": "shin_tweak.L", + "to_socket": "calf_l" + }, + { + "from_node": "Control Rig foot_tweak.L", + "to_node": "Source Rig thigh_l", + "from_socket": "thigh_tweak.L.001", + "to_socket": "thigh_twist_01_l" + }, + { + "from_node": "Control Rig foot_tweak.L", + "to_node": "Source Rig thigh_l", + "from_socket": "thigh_tweak.L", + "to_socket": "thigh_l" + }, + { + "from_node": "Control Rig toe.L", + "to_node": "Source Rig ball_l", + "from_socket": "toe.L", + "to_socket": "ball_l" + }, + { + "from_node": "Control Rig toe.L", + "to_node": "Source Rig ball_l", + "from_socket": "foot_fk.L", + "to_socket": "foot_l" + }, + { + "from_node": "Control Rig toe.L", + "to_node": "Source Rig ball_l", + "from_socket": "shin_fk.L", + "to_socket": "calf_l" + }, + { + "from_node": "Control Rig toe.L", + "to_node": "Source Rig ball_l", + "from_socket": "thigh_fk.L", + "to_socket": "thigh_l" + }, + { + "from_node": "Control Rig thigh_tweak.R", + "to_node": "Source Rig calf_r", + "from_socket": "shin_tweak.R", + "to_socket": "calf_r" + }, + { + "from_node": "Control Rig thigh_tweak.R", + "to_node": "Source Rig calf_r", + "from_socket": "foot_tweak.R", + "to_socket": "foot_r" + }, + { + "from_node": "Control Rig thigh_tweak.R", + "to_node": "Source Rig calf_r", + "from_socket": "shin_tweak.R.001", + "to_socket": "calf_twist_01_r" + }, + { + "from_node": "Control Rig thigh_tweak.R", + "to_node": "Source Rig calf_r", + "from_socket": "thigh_tweak.R.001", + "to_socket": "thigh_twist_01_r" + }, + { + "from_node": "Control Rig thigh_tweak.R", + "to_node": "Source Rig calf_r", + "from_socket": "thigh_tweak.R", + "to_socket": "thigh_r" + }, + { + "from_node": "Control Rig toe.R", + "to_node": "Source Rig ball_r", + "from_socket": "toe.R", + "to_socket": "ball_r" + }, + { + "from_node": "Control Rig toe.R", + "to_node": "Source Rig ball_r", + "from_socket": "foot_fk.R", + "to_socket": "foot_r" + }, + { + "from_node": "Control Rig toe.R", + "to_node": "Source Rig ball_r", + "from_socket": "shin_fk.R", + "to_socket": "calf_r" + }, + { + "from_node": "Control Rig toe.R", + "to_node": "Source Rig ball_r", + "from_socket": "thigh_fk.R", + "to_socket": "thigh_r" + }, + { + "from_node": "Control Rig f_middle.03.L", + "to_node": "Source Rig middle_03_l", + "from_socket": "f_middle.01.L", + "to_socket": "middle_01_l" + }, + { + "from_node": "Control Rig f_middle.03.L", + "to_node": "Source Rig middle_03_l", + "from_socket": "f_middle.02.L", + "to_socket": "middle_02_l" + }, + { + "from_node": "Control Rig f_middle.03.L", + "to_node": "Source Rig middle_03_l", + "from_socket": "f_middle.03.L", + "to_socket": "middle_03_l" + }, + { + "from_node": "Control Rig f_pinky.01_master.L", + "to_node": "Source Rig hand_l.004", + "from_socket": "f_pinky.01_master.L", + "to_socket": "hand_l" + }, + { + "from_node": "Control Rig f_pinky.01_master.L", + "to_node": "Source Rig hand_l.003", + "from_socket": "f_ring.01_master.L", + "to_socket": "hand_l" + }, + { + "from_node": "Control Rig f_pinky.01_master.L", + "to_node": "Source Rig hand_l.002", + "from_socket": "f_middle.01_master.L", + "to_socket": "hand_l" + }, + { + "from_node": "Control Rig f_pinky.01_master.L", + "to_node": "Source Rig hand_l.001", + "from_socket": "f_index.01_master.L", + "to_socket": "hand_l" + }, + { + "from_node": "Control Rig f_pinky.01_master.L", + "to_node": "Source Rig hand_l", + "from_socket": "thumb.01_master.L", + "to_socket": "hand_l" + }, + { + "from_node": "Control Rig f_middle.01_master.R", + "to_node": "Source Rig hand_r.005", + "from_socket": "f_middle.01_master.R", + "to_socket": "hand_r" + }, + { + "from_node": "Control Rig f_middle.01_master.R", + "to_node": "Source Rig hand_r.004", + "from_socket": "f_index.01_master.R", + "to_socket": "hand_r" + }, + { + "from_node": "Control Rig f_middle.01_master.R", + "to_node": "Source Rig hand_r.003", + "from_socket": "f_ring.01_master.R", + "to_socket": "hand_r" + }, + { + "from_node": "Control Rig f_middle.01_master.R", + "to_node": "Source Rig hand_r.002", + "from_socket": "f_pinky.01_master.R", + "to_socket": "hand_r" + }, + { + "from_node": "Control Rig f_middle.01_master.R", + "to_node": "Source Rig hand_r", + "from_socket": "thumb.01_master.R", + "to_socket": "hand_r" + }, + { + "from_node": "Control Rig root", + "to_node": "Source Rig Object", + "from_socket": "root", + "to_socket": "object" + } +] \ No newline at end of file diff --git a/src/addons/ue2rigify/resources/rig_templates/b4_0/male_mannequin_UE4/fk_to_source_nodes.json b/src/addons/ue2rigify/resources/rig_templates/b4_0/male_mannequin_UE4/fk_to_source_nodes.json new file mode 100644 index 00000000..56db9500 --- /dev/null +++ b/src/addons/ue2rigify/resources/rig_templates/b4_0/male_mannequin_UE4/fk_to_source_nodes.json @@ -0,0 +1,1440 @@ +[ + { + "name": "Control Rig thumb.03.L", + "label": "Control Left Thumb", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 685.791015625, + -10.972412109375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thumb.03.L", + "thumb.02.L", + "thumb.01.L" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig thumb_03_l", + "label": "Source Left Thumb", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 1285.791015625, + -10.972412109375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "thumb_03_l", + "thumb_02_l", + "thumb_01_l" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_index.03.L", + "label": "Control Left Index Finger", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 685.791015625, + 112.38653564453125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_index.03.L", + "f_index.02.L", + "f_index.01.L" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig index_03_l", + "label": "Source Left Index Finger", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 1285.791015625, + 112.38653564453125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "index_03_l", + "index_02_l", + "index_01_l" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_ring.03.L", + "label": "Control Left Ring Finger", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 685.791015625, + 359.10430908203125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_ring.03.L", + "f_ring.02.L", + "f_ring.01.L" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig ring_03_l", + "label": "Source Left Ring Finger", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 1285.791015625, + 359.10430908203125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "ring_03_l", + "ring_02_l", + "ring_01_l" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig pinky_03_l", + "label": "Source Left Pinky Finger", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 1285.791015625, + 482.46319580078125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "pinky_03_l", + "pinky_02_l", + "pinky_01_l" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_pinky.03.L", + "label": "Control Left Pinky Finger", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 685.791015625, + 482.46319580078125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_pinky.03.L", + "f_pinky.02.L", + "f_pinky.01.L" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig thumb_03_r", + "label": "Source Right Thumb", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -1801.885498046875, + -55.51385498046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "thumb_03_r", + "thumb_02_r", + "thumb_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig thumb.02.R", + "label": "Control Right Thumb", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -2413.97314453125, + -46.4539794921875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thumb.03.R", + "thumb.02.R", + "thumb.01.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_index.03.R", + "label": "Control Right Index Finger", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -2413.97314453125, + 93.88739013671875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_index.03.R", + "f_index.02.R", + "f_index.01.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig index_03_r", + "label": "Source Left Index Finger", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -1813.97314453125, + 84.8275146484375 + ], + "width": 208.06948852539062, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "index_03_r", + "index_02_r", + "index_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_middle.03.R", + "label": "Control Right Middle Finger", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -2407.92919921875, + 237.2486572265625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_middle.03.R", + "f_middle.02.R", + "f_middle.01.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig middle_03_r", + "label": "Source Right Middle Finger", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -1815.4671630859375, + 234.228759765625 + ], + "width": 209.1331787109375, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "middle_03_r", + "middle_02_r", + "middle_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_ring.03.R", + "label": "Control Right Ring Finger", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -2405.67138671875, + 394.0137939453125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_ring.03.R", + "f_ring.02.R", + "f_ring.01.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig ring_03_r", + "label": "Source Right Ring Finger", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -1805.67138671875, + 394.0137939453125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "ring_03_r", + "ring_02_r", + "ring_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_pinky.03.R", + "label": "Control Right Pinky Finger", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -2398.646240234375, + 541.7542724609375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_pinky.03.R", + "f_pinky.02.R", + "f_pinky.01.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig pinky_03_r", + "label": "Source Right Pinky Finger", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -1806.744384765625, + 538.51708984375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "pinky_03_r", + "pinky_02_r", + "pinky_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig middle_03_l", + "label": "Source Left Middle Finger", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 1285.791015625, + 235.74542236328125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "middle_03_l", + "middle_02_l", + "middle_01_l" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_middle.03.L", + "label": "Control Left Middle Finger", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 685.791015625, + 235.74542236328125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_middle.03.L", + "f_middle.02.L", + "f_middle.01.L" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig hand_l", + "label": "Source Rig hand_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 2221.10205078125, + 53.59649658203125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "hand_l" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig hand_l.001", + "label": "Source Rig hand_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 2221.10205078125, + 173.59649658203125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "hand_l" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig hand_l.002", + "label": "Source Rig hand_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 2221.10205078125, + 293.59649658203125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "hand_l" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig hand_l.003", + "label": "Source Rig hand_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 2221.10205078125, + 413.59649658203125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "hand_l" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig hand_l.004", + "label": "Source Rig hand_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 2221.10205078125, + 533.5964965820312 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "hand_l" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_middle.01_master.R", + "label": "Control Right Hand Finger Masters", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -3372.335205078125, + 245.40802001953125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_middle.01_master.R", + "f_index.01_master.R", + "f_ring.01_master.R", + "f_pinky.01_master.R", + "thumb.01_master.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig hand_r", + "label": "Source Rig hand_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -2772.335205078125, + -19.762054443359375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "hand_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig hand_r.002", + "label": "Source Rig hand_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -2772.335205078125, + 112.82298278808594 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "hand_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig hand_r.003", + "label": "Source Rig hand_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -2772.335205078125, + 245.40802001953125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "hand_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig hand_r.004", + "label": "Source Rig hand_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -2772.335205078125, + 377.9930419921875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "hand_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig hand_r.005", + "label": "Source Rig hand_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -2772.335205078125, + 510.5780944824219 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "hand_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_pinky.01_master.L", + "label": "Control Left Hand Finger Masters", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 1584.479248046875, + 293.59649658203125 + ], + "width": 236.622802734375, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_pinky.01_master.L", + "f_ring.01_master.L", + "f_middle.01_master.L", + "f_index.01_master.L", + "thumb.01_master.L" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig thigh_l", + "label": "Source Left Leg Twists", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 321.50946044921875, + -1288.2855224609375 + ], + "width": 275.40740966796875, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "foot_l", + "calf_twist_01_l", + "calf_l", + "thigh_twist_01_l", + "thigh_l" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig thigh_tweak.R", + "label": "Control Right Leg Tweaks", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -1281.862060546875, + -1288.2855224609375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "shin_tweak.R", + "foot_tweak.R", + "shin_tweak.R.001", + "thigh_tweak.R.001", + "thigh_tweak.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig toe.R", + "label": "Control Right Leg", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -1281.862060546875, + -1105.7874755859375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "toe.R", + "foot_fk.R", + "shin_fk.R", + "thigh_fk.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig ball_l", + "label": "Source Left Leg", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 331.624755859375, + -1100.1251220703125 + ], + "width": 256.183349609375, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "ball_l", + "foot_l", + "calf_l", + "thigh_l" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig shoulder.R", + "label": "Control Right Arm", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -1313.1983642578125, + 147.95822143554688 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "shoulder.R", + "hand_fk.R", + "upper_arm_fk.R", + "forearm_fk.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig clavicle_l", + "label": "Source Rig Arm", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 315.02410888671875, + 147.95822143554688 + ], + "width": 259.793701171875, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "clavicle_l", + "hand_l", + "upperarm_l", + "lowerarm_l" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig upper_arm_tweak.R", + "label": "Control Right Arm Tweak", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -1313.14013671875, + 320.4245300292969 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upper_arm_tweak.R", + "forearm_tweak.R", + "forearm_tweak.R.001", + "hand_tweak.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig lowerarm_twist_01_l", + "label": "Source Left Arm Twist", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 303.9902648925781, + 320.4245300292969 + ], + "width": 269.0958251953125, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "lowerarm_twist_01_l", + "hand_l", + "lowerarm_l", + "upperarm_twist_01_l" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig calf_r", + "label": "Source RIght Leg Twists", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -746.414794921875, + -1288.2855224609375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "calf_r", + "foot_r", + "calf_twist_01_r", + "thigh_twist_01_r", + "thigh_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig ball_r", + "label": "Source Right Leg", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -746.414794921875, + -1105.7874755859375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "ball_r", + "foot_r", + "calf_r", + "thigh_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig hips", + "label": "Control Rig hips", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -746.414794921875, + -816.5067749023438 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "hips" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig torso", + "label": "Control Rig torso", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -746.414794921875, + -751.8955078125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "torso" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig hand_r.001", + "label": "Source Right Twist", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -746.414794921875, + 320.424560546875 + ], + "width": 279.400390625, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "upperarm_twist_01_r", + "lowerarm_r", + "lowerarm_twist_01_r", + "hand_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig clavicle_r", + "label": "Source Right Arm", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -746.414794921875, + 147.958251953125 + ], + "width": 284.61553955078125, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "clavicle_r", + "hand_r", + "upperarm_r", + "lowerarm_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig tweak_spine.004", + "label": "Control Spine Tweaks", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -746.414794921875, + -255.156982421875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "tweak_spine.004", + "tweak_spine.003", + "tweak_spine.002", + "tweak_spine.001", + "tweak_spine" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig chest", + "label": "Control Rig Chest", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -746.414794921875, + -428.4759521484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "chest" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig foot_tweak.L", + "label": "Control Left Leg Tweaks", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -238.98362731933594, + -1288.2855224609375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "foot_tweak.L", + "shin_tweak.L.001", + "shin_tweak.L", + "thigh_tweak.L.001", + "thigh_tweak.L" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig toe.L", + "label": "Control Left Leg", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -238.98362731933594, + -1095.4461669921875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "toe.L", + "foot_fk.L", + "shin_fk.L", + "thigh_fk.L" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig pelvis", + "label": "Source Rig pelvis", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -238.98362731933594, + -816.5067749023438 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "pelvis" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig head", + "label": "Source Spine", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -238.98362731933594, + -507.27252197265625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "head", + "neck_01", + "spine_03", + "spine_02", + "spine_01", + "pelvis" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig pelvis.003", + "label": "Source Rig pelvis", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -238.98362731933594, + -751.8955078125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "pelvis" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig spine_02", + "label": "Source Rig spine_02", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -238.98362731933594, + -428.4759521484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "spine_02" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig neck_01", + "label": "Source Spine", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -238.98362731933594, + -255.156982421875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "neck_01", + "spine_03", + "spine_02", + "spine_01", + "pelvis" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig shoulder.L", + "label": "Control Rig Arm", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -238.98362731933594, + 147.958251953125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "shoulder.L", + "hand_fk.L", + "upper_arm_fk.L", + "forearm_fk.L" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig forearm_tweak.L.001", + "label": "Control Left Arm Tweak", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -238.98362731933594, + 320.424560546875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "forearm_tweak.L.001", + "hand_tweak.L", + "forearm_tweak.L", + "upper_arm_tweak.L" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig head", + "label": "Control Spine", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -746.414794921875, + -507.27252197265625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "head", + "neck", + "spine_fk.003", + "spine_fk.002", + "spine_fk.001", + "spine_fk" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig root", + "label": "", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -681.6506958007812, + -1614.481689453125 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "root" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig Object", + "label": "", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -238.98362731933594, + -1614.481689453125 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "object" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + } +] \ No newline at end of file diff --git a/src/addons/ue2rigify/resources/rig_templates/b4_0/male_mannequin_UE4/metarig.py b/src/addons/ue2rigify/resources/rig_templates/b4_0/male_mannequin_UE4/metarig.py new file mode 100644 index 00000000..a9f1f287 --- /dev/null +++ b/src/addons/ue2rigify/resources/rig_templates/b4_0/male_mannequin_UE4/metarig.py @@ -0,0 +1,1932 @@ +import bpy + +from rna_prop_ui import rna_idprop_ui_create + +from mathutils import Color + + +def create(obj): # noqa + # generated by rigify.utils.write_metarig + bpy.ops.object.mode_set(mode='EDIT') + arm = obj.data + + for i in range(6): + arm.rigify_colors.add() + + arm.rigify_colors[0].name = "Root" + arm.rigify_colors[0].active = Color((0.5490, 1.0000, 1.0000)) + arm.rigify_colors[0].normal = Color((0.4353, 0.1843, 0.4157)) + arm.rigify_colors[0].select = Color((0.3137, 0.7843, 1.0000)) + arm.rigify_colors[0].standard_colors_lock = True + arm.rigify_colors[1].name = "IK" + arm.rigify_colors[1].active = Color((0.5490, 1.0000, 1.0000)) + arm.rigify_colors[1].normal = Color((0.6039, 0.0000, 0.0000)) + arm.rigify_colors[1].select = Color((0.3137, 0.7843, 1.0000)) + arm.rigify_colors[1].standard_colors_lock = True + arm.rigify_colors[2].name = "Special" + arm.rigify_colors[2].active = Color((0.5490, 1.0000, 1.0000)) + arm.rigify_colors[2].normal = Color((0.9569, 0.7882, 0.0471)) + arm.rigify_colors[2].select = Color((0.3137, 0.7843, 1.0000)) + arm.rigify_colors[2].standard_colors_lock = True + arm.rigify_colors[3].name = "Tweak" + arm.rigify_colors[3].active = Color((0.5490, 1.0000, 1.0000)) + arm.rigify_colors[3].normal = Color((0.0392, 0.2118, 0.5804)) + arm.rigify_colors[3].select = Color((0.3137, 0.7843, 1.0000)) + arm.rigify_colors[3].standard_colors_lock = True + arm.rigify_colors[4].name = "FK" + arm.rigify_colors[4].active = Color((0.5490, 1.0000, 1.0000)) + arm.rigify_colors[4].normal = Color((0.1176, 0.5686, 0.0353)) + arm.rigify_colors[4].select = Color((0.3137, 0.7843, 1.0000)) + arm.rigify_colors[4].standard_colors_lock = True + arm.rigify_colors[5].name = "Extra" + arm.rigify_colors[5].active = Color((0.5490, 1.0000, 1.0000)) + arm.rigify_colors[5].normal = Color((0.9686, 0.2510, 0.0941)) + arm.rigify_colors[5].select = Color((0.3137, 0.7843, 1.0000)) + arm.rigify_colors[5].standard_colors_lock = True + + bone_collections = {} + + for bcoll in list(arm.collections): + arm.collections.remove(bcoll) + + def add_bone_collection(name, *, ui_row=0, ui_title='', sel_set=False, color_set_id=0): + new_bcoll = arm.collections.new(name) + new_bcoll.rigify_ui_row = ui_row + new_bcoll.rigify_ui_title = ui_title + new_bcoll.rigify_sel_set = sel_set + new_bcoll.rigify_color_set_id = color_set_id + bone_collections[name] = new_bcoll + + def assign_bone_collections(pose_bone, *coll_names): + assert not len(pose_bone.bone.collections) + for name in coll_names: + bone_collections[name].assign(pose_bone) + + def assign_bone_collection_refs(params, attr_name, *coll_names): + ref_list = getattr(params, attr_name + '_coll_refs', None) + if ref_list is not None: + for name in coll_names: + ref_list.add().set_collection(bone_collections[name]) + + add_bone_collection('Face', ui_row=1, color_set_id=5) + add_bone_collection('Face (Primary)', ui_row=2, color_set_id=2) + add_bone_collection('Face (Secondary)', ui_row=2, color_set_id=3) + add_bone_collection('Torso', ui_row=3, color_set_id=3) + add_bone_collection('Torso (Tweak)', ui_row=4, color_set_id=4) + add_bone_collection('Fingers', ui_row=5, color_set_id=6) + add_bone_collection('Fingers (Detail)', ui_row=6, color_set_id=5) + add_bone_collection('Arm.L (IK)', ui_row=7, color_set_id=2) + add_bone_collection('Arm.L (FK)', ui_row=8, color_set_id=5) + add_bone_collection('Arm.L (Tweak)', ui_row=9, color_set_id=4) + add_bone_collection('Arm.R (IK)', ui_row=7, color_set_id=2) + add_bone_collection('Arm.R (FK)', ui_row=8, color_set_id=5) + add_bone_collection('Arm.R (Tweak)', ui_row=9, color_set_id=4) + add_bone_collection('Leg.L (IK)', ui_row=10, color_set_id=2) + add_bone_collection('Leg.L (FK)', ui_row=11, color_set_id=5) + add_bone_collection('Leg.L (Tweak)', ui_row=12, color_set_id=4) + add_bone_collection('Leg.R (IK)', ui_row=10, color_set_id=2) + add_bone_collection('Leg.R (FK)', ui_row=11, color_set_id=5) + add_bone_collection('Leg.R (Tweak)', ui_row=12, color_set_id=4) + add_bone_collection('Root', ui_row=15, color_set_id=1) + + bones = {} + + bone = arm.edit_bones.new('spine') + bone.head = 0.0000, 0.0106, 0.9675 + bone.tail = 0.0000, 0.0017, 1.0756 + bone.roll = -0.0000 + bone.use_connect = False + bones['spine'] = bone.name + bone = arm.edit_bones.new('spine.001') + bone.head = 0.0000, 0.0017, 1.0756 + bone.tail = 0.0000, 0.0152, 1.2676 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine']] + bones['spine.001'] = bone.name + bone = arm.edit_bones.new('thigh.L') + bone.head = 0.0901, 0.0053, 0.9530 + bone.tail = 0.1422, 0.0180, 0.5307 + bone.roll = 1.5708 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine']] + bones['thigh.L'] = bone.name + bone = arm.edit_bones.new('thigh.R') + bone.head = -0.0901, 0.0053, 0.9530 + bone.tail = -0.1422, 0.0180, 0.5307 + bone.roll = -1.5708 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine']] + bones['thigh.R'] = bone.name + bone = arm.edit_bones.new('spine.002') + bone.head = 0.0000, 0.0152, 1.2676 + bone.tail = 0.0000, 0.0350, 1.4003 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine.001']] + bones['spine.002'] = bone.name + bone = arm.edit_bones.new('shin.L') + bone.head = 0.1422, 0.0180, 0.5307 + bone.tail = 0.1708, 0.0807, 0.1347 + bone.roll = 1.5708 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thigh.L']] + bones['shin.L'] = bone.name + bone = arm.edit_bones.new('shin.R') + bone.head = -0.1422, 0.0180, 0.5307 + bone.tail = -0.1708, 0.0807, 0.1347 + bone.roll = -1.5708 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thigh.R']] + bones['shin.R'] = bone.name + bone = arm.edit_bones.new('spine.003') + bone.head = 0.0000, 0.0350, 1.4003 + bone.tail = 0.0000, 0.0587, 1.5642 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine.002']] + bones['spine.003'] = bone.name + bone = arm.edit_bones.new('foot.L') + bone.head = 0.1708, 0.0807, 0.1347 + bone.tail = 0.1791, -0.0836, 0.0281 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['shin.L']] + bones['foot.L'] = bone.name + bone = arm.edit_bones.new('foot.R') + bone.head = -0.1708, 0.0807, 0.1347 + bone.tail = -0.1791, -0.0836, 0.0281 + bone.roll = -0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['shin.R']] + bones['foot.R'] = bone.name + bone = arm.edit_bones.new('spine.004') + bone.head = 0.0000, 0.0587, 1.5642 + bone.tail = 0.0000, 0.0398, 1.6552 + bone.roll = 0.0000 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine.003']] + bones['spine.004'] = bone.name + bone = arm.edit_bones.new('shoulder.L') + bone.head = 0.0378, 0.0276, 1.5220 + bone.tail = 0.1386, 0.0572, 1.5328 + bone.roll = -1.5708 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine.003']] + bones['shoulder.L'] = bone.name + bone = arm.edit_bones.new('shoulder.R') + bone.head = -0.0378, 0.0276, 1.5220 + bone.tail = -0.1386, 0.0572, 1.5328 + bone.roll = 1.5708 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine.003']] + bones['shoulder.R'] = bone.name + bone = arm.edit_bones.new('toe.L') + bone.head = 0.1791, -0.0836, 0.0281 + bone.tail = 0.1841, -0.1424, 0.0065 + bone.roll = 2.6716 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['foot.L']] + bones['toe.L'] = bone.name + bone = arm.edit_bones.new('heel.02.L') + bone.head = 0.1411, 0.1383, 0.0000 + bone.tail = 0.2211, 0.1383, 0.0000 + bone.roll = 0.0000 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['foot.L']] + bones['heel.02.L'] = bone.name + bone = arm.edit_bones.new('toe.R') + bone.head = -0.1791, -0.0836, 0.0281 + bone.tail = -0.1841, -0.1424, 0.0065 + bone.roll = -2.6716 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['foot.R']] + bones['toe.R'] = bone.name + bone = arm.edit_bones.new('heel.02.R') + bone.head = -0.1411, 0.1383, 0.0000 + bone.tail = -0.2211, 0.1383, 0.0000 + bone.roll = -0.0000 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['foot.R']] + bones['heel.02.R'] = bone.name + bone = arm.edit_bones.new('spine.005') + bone.head = 0.0000, 0.0398, 1.6552 + bone.tail = 0.0000, 0.0335, 1.8253 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine.004']] + bones['spine.005'] = bone.name + bone = arm.edit_bones.new('upper_arm.L') + bone.head = 0.1770, 0.0971, 1.4953 + bone.tail = 0.3726, 0.1191, 1.2645 + bone.roll = -1.5708 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['shoulder.L']] + bones['upper_arm.L'] = bone.name + bone = arm.edit_bones.new('upper_arm.R') + bone.head = -0.1770, 0.0971, 1.4953 + bone.tail = -0.3726, 0.1191, 1.2645 + bone.roll = 1.5708 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['shoulder.R']] + bones['upper_arm.R'] = bone.name + bone = arm.edit_bones.new('forearm.L') + bone.head = 0.3726, 0.1191, 1.2645 + bone.tail = 0.5665, 0.0034, 1.1168 + bone.roll = -1.5708 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['upper_arm.L']] + bones['forearm.L'] = bone.name + bone = arm.edit_bones.new('forearm.R') + bone.head = -0.3726, 0.1191, 1.2645 + bone.tail = -0.5665, 0.0034, 1.1168 + bone.roll = 1.5708 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['upper_arm.R']] + bones['forearm.R'] = bone.name + bone = arm.edit_bones.new('hand.L') + bone.head = 0.5665, 0.0034, 1.1168 + bone.tail = 0.6265, -0.0383, 1.0575 + bone.roll = 0.7854 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['forearm.L']] + bones['hand.L'] = bone.name + bone = arm.edit_bones.new('hand.R') + bone.head = -0.5665, 0.0034, 1.1168 + bone.tail = -0.6265, -0.0383, 1.0575 + bone.roll = -0.7854 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['forearm.R']] + bones['hand.R'] = bone.name + bone = arm.edit_bones.new('f_index.01.L') + bone.head = 0.6304, -0.0677, 1.0381 + bone.tail = 0.6467, -0.0809, 1.0008 + bone.roll = 1.5708 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.L']] + bones['f_index.01.L'] = bone.name + bone = arm.edit_bones.new('thumb.01.L') + bone.head = 0.5748, -0.0388, 1.0764 + bone.tail = 0.5761, -0.0708, 1.0547 + bone.roll = 1.5708 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.L']] + bones['thumb.01.L'] = bone.name + bone = arm.edit_bones.new('f_middle.01.L') + bone.head = 0.6449, -0.0448, 1.0348 + bone.tail = 0.6653, -0.0572, 0.9950 + bone.roll = 1.5708 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.L']] + bones['f_middle.01.L'] = bone.name + bone = arm.edit_bones.new('f_ring.01.L') + bone.head = 0.6458, -0.0208, 1.0304 + bone.tail = 0.6659, -0.0298, 0.9920 + bone.roll = 1.5708 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.L']] + bones['f_ring.01.L'] = bone.name + bone = arm.edit_bones.new('f_pinky.01.L') + bone.head = 0.6403, 0.0016, 1.0302 + bone.tail = 0.6594, -0.0013, 1.0002 + bone.roll = 1.5708 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.L']] + bones['f_pinky.01.L'] = bone.name + bone = arm.edit_bones.new('f_index.01.R') + bone.head = -0.6304, -0.0677, 1.0381 + bone.tail = -0.6467, -0.0809, 1.0008 + bone.roll = -1.5708 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.R']] + bones['f_index.01.R'] = bone.name + bone = arm.edit_bones.new('thumb.01.R') + bone.head = -0.5748, -0.0388, 1.0764 + bone.tail = -0.5761, -0.0708, 1.0547 + bone.roll = -1.5708 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.R']] + bones['thumb.01.R'] = bone.name + bone = arm.edit_bones.new('f_middle.01.R') + bone.head = -0.6449, -0.0448, 1.0348 + bone.tail = -0.6653, -0.0572, 0.9950 + bone.roll = -1.5708 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.R']] + bones['f_middle.01.R'] = bone.name + bone = arm.edit_bones.new('f_ring.01.R') + bone.head = -0.6458, -0.0208, 1.0304 + bone.tail = -0.6659, -0.0298, 0.9920 + bone.roll = -1.5708 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.R']] + bones['f_ring.01.R'] = bone.name + bone = arm.edit_bones.new('f_pinky.01.R') + bone.head = -0.6403, 0.0016, 1.0302 + bone.tail = -0.6594, -0.0013, 1.0002 + bone.roll = -1.5708 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.R']] + bones['f_pinky.01.R'] = bone.name + bone = arm.edit_bones.new('f_index.02.L') + bone.head = 0.6467, -0.0809, 1.0008 + bone.tail = 0.6544, -0.0876, 0.9684 + bone.roll = 1.5708 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_index.01.L']] + bones['f_index.02.L'] = bone.name + bone = arm.edit_bones.new('thumb.02.L') + bone.head = 0.5761, -0.0708, 1.0547 + bone.tail = 0.5778, -0.0957, 1.0226 + bone.roll = 1.5708 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thumb.01.L']] + bones['thumb.02.L'] = bone.name + bone = arm.edit_bones.new('f_middle.02.L') + bone.head = 0.6653, -0.0572, 0.9950 + bone.tail = 0.6743, -0.0654, 0.9606 + bone.roll = 1.5708 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_middle.01.L']] + bones['f_middle.02.L'] = bone.name + bone = arm.edit_bones.new('f_ring.02.L') + bone.head = 0.6659, -0.0298, 0.9920 + bone.tail = 0.6743, -0.0355, 0.9587 + bone.roll = 1.5708 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_ring.01.L']] + bones['f_ring.02.L'] = bone.name + bone = arm.edit_bones.new('f_pinky.02.L') + bone.head = 0.6594, -0.0013, 1.0002 + bone.tail = 0.6701, -0.0035, 0.9724 + bone.roll = 1.5708 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_pinky.01.L']] + bones['f_pinky.02.L'] = bone.name + bone = arm.edit_bones.new('f_index.02.R') + bone.head = -0.6467, -0.0809, 1.0008 + bone.tail = -0.6544, -0.0876, 0.9684 + bone.roll = -1.5708 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_index.01.R']] + bones['f_index.02.R'] = bone.name + bone = arm.edit_bones.new('thumb.02.R') + bone.head = -0.5761, -0.0708, 1.0547 + bone.tail = -0.5778, -0.0957, 1.0226 + bone.roll = -1.5708 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thumb.01.R']] + bones['thumb.02.R'] = bone.name + bone = arm.edit_bones.new('f_middle.02.R') + bone.head = -0.6653, -0.0572, 0.9950 + bone.tail = -0.6743, -0.0654, 0.9606 + bone.roll = -1.5708 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_middle.01.R']] + bones['f_middle.02.R'] = bone.name + bone = arm.edit_bones.new('f_ring.02.R') + bone.head = -0.6659, -0.0298, 0.9920 + bone.tail = -0.6743, -0.0355, 0.9587 + bone.roll = -1.5708 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_ring.01.R']] + bones['f_ring.02.R'] = bone.name + bone = arm.edit_bones.new('f_pinky.02.R') + bone.head = -0.6594, -0.0013, 1.0002 + bone.tail = -0.6701, -0.0035, 0.9724 + bone.roll = -1.5708 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_pinky.01.R']] + bones['f_pinky.02.R'] = bone.name + bone = arm.edit_bones.new('f_index.03.L') + bone.head = 0.6544, -0.0876, 0.9684 + bone.tail = 0.6583, -0.0948, 0.9461 + bone.roll = 1.5708 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_index.02.L']] + bones['f_index.03.L'] = bone.name + bone = arm.edit_bones.new('thumb.03.L') + bone.head = 0.5778, -0.0957, 1.0226 + bone.tail = 0.5775, -0.1175, 0.9963 + bone.roll = 1.5708 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thumb.02.L']] + bones['thumb.03.L'] = bone.name + bone = arm.edit_bones.new('f_middle.03.L') + bone.head = 0.6743, -0.0654, 0.9606 + bone.tail = 0.6802, -0.0708, 0.9339 + bone.roll = 1.5708 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_middle.02.L']] + bones['f_middle.03.L'] = bone.name + bone = arm.edit_bones.new('f_ring.03.L') + bone.head = 0.6743, -0.0355, 0.9587 + bone.tail = 0.6787, -0.0373, 0.9337 + bone.roll = 1.5708 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_ring.02.L']] + bones['f_ring.03.L'] = bone.name + bone = arm.edit_bones.new('f_pinky.03.L') + bone.head = 0.6701, -0.0035, 0.9724 + bone.tail = 0.6762, -0.0055, 0.9499 + bone.roll = 1.5708 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_pinky.02.L']] + bones['f_pinky.03.L'] = bone.name + bone = arm.edit_bones.new('f_index.03.R') + bone.head = -0.6544, -0.0876, 0.9684 + bone.tail = -0.6583, -0.0948, 0.9461 + bone.roll = -1.5708 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_index.02.R']] + bones['f_index.03.R'] = bone.name + bone = arm.edit_bones.new('thumb.03.R') + bone.head = -0.5778, -0.0957, 1.0226 + bone.tail = -0.5775, -0.1175, 0.9963 + bone.roll = -1.5708 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thumb.02.R']] + bones['thumb.03.R'] = bone.name + bone = arm.edit_bones.new('f_middle.03.R') + bone.head = -0.6743, -0.0654, 0.9606 + bone.tail = -0.6802, -0.0708, 0.9339 + bone.roll = -1.5708 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_middle.02.R']] + bones['f_middle.03.R'] = bone.name + bone = arm.edit_bones.new('f_ring.03.R') + bone.head = -0.6743, -0.0355, 0.9587 + bone.tail = -0.6787, -0.0373, 0.9337 + bone.roll = -1.5708 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_ring.02.R']] + bones['f_ring.03.R'] = bone.name + bone = arm.edit_bones.new('f_pinky.03.R') + bone.head = -0.6701, -0.0035, 0.9724 + bone.tail = -0.6762, -0.0055, 0.9499 + bone.roll = -1.5708 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_pinky.02.R']] + bones['f_pinky.03.R'] = bone.name + + bpy.ops.object.mode_set(mode='OBJECT') + pbone = obj.pose.bones[bones['spine']] + pbone.rigify_type = 'spines.basic_spine' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Torso (Tweak)') + assign_bone_collection_refs(pbone.rigify_parameters, 'fk', 'Torso (Tweak)') + pbone = obj.pose.bones[bones['spine.001']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + pbone = obj.pose.bones[bones['thigh.L']] + pbone.rigify_type = 'limbs.super_limb' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.L (IK)') + try: + pbone.rigify_parameters.limb_type = 'leg' + except AttributeError: + pass + assign_bone_collection_refs(pbone.rigify_parameters, 'fk', 'Leg.L (FK)') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Leg.L (Tweak)') + pbone = obj.pose.bones[bones['thigh.R']] + pbone.rigify_type = 'limbs.super_limb' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.R (IK)') + try: + pbone.rigify_parameters.limb_type = 'leg' + except AttributeError: + pass + assign_bone_collection_refs(pbone.rigify_parameters, 'fk', 'Leg.R (FK)') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Leg.R (Tweak)') + pbone = obj.pose.bones[bones['spine.002']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + pbone = obj.pose.bones[bones['shin.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.L (IK)') + pbone = obj.pose.bones[bones['shin.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.R (IK)') + pbone = obj.pose.bones[bones['spine.003']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + pbone = obj.pose.bones[bones['foot.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.L (IK)') + pbone = obj.pose.bones[bones['foot.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.R (IK)') + pbone = obj.pose.bones[bones['spine.004']] + pbone.rigify_type = 'spines.super_head' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + try: + pbone.rigify_parameters.connect_chain = True + except AttributeError: + pass + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Torso (Tweak)') + pbone = obj.pose.bones[bones['shoulder.L']] + pbone.rigify_type = 'basic.super_copy' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Torso') + try: + pbone.rigify_parameters.make_widget = False + except AttributeError: + pass + pbone = obj.pose.bones[bones['shoulder.R']] + pbone.rigify_type = 'basic.super_copy' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Torso') + try: + pbone.rigify_parameters.make_widget = False + except AttributeError: + pass + pbone = obj.pose.bones[bones['toe.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.L (IK)') + pbone = obj.pose.bones[bones['heel.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.L (IK)') + pbone = obj.pose.bones[bones['toe.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.R (IK)') + pbone = obj.pose.bones[bones['heel.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.R (IK)') + pbone = obj.pose.bones[bones['spine.005']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + pbone = obj.pose.bones[bones['upper_arm.L']] + pbone.rigify_type = 'limbs.super_limb' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Arm.L (IK)') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Arm.L (Tweak)') + assign_bone_collection_refs(pbone.rigify_parameters, 'fk', 'Arm.L (FK)') + pbone = obj.pose.bones[bones['upper_arm.R']] + pbone.rigify_type = 'limbs.super_limb' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Arm.R (IK)') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Arm.R (Tweak)') + assign_bone_collection_refs(pbone.rigify_parameters, 'fk', 'Arm.R (FK)') + pbone = obj.pose.bones[bones['forearm.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Arm.L (IK)') + pbone = obj.pose.bones[bones['forearm.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Arm.R (IK)') + pbone = obj.pose.bones[bones['hand.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Arm.L (IK)') + pbone = obj.pose.bones[bones['hand.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Arm.R (IK)') + pbone = obj.pose.bones[bones['f_index.01.L']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['thumb.01.L']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_middle.01.L']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_ring.01.L']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_pinky.01.L']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_index.01.R']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['thumb.01.R']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_middle.01.R']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_ring.01.R']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_pinky.01.R']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_index.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['thumb.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_middle.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_ring.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_pinky.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_index.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['thumb.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_middle.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_ring.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_pinky.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_index.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['thumb.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_middle.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_ring.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_pinky.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_index.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['thumb.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_middle.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_ring.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_pinky.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + + bpy.ops.object.mode_set(mode='EDIT') + for bone in arm.edit_bones: + bone.select = False + bone.select_head = False + bone.select_tail = False + for b in bones: + bone = arm.edit_bones[bones[b]] + bone.select = True + bone.select_head = True + bone.select_tail = True + bone.bbone_x = bone.bbone_z = bone.length * 0.05 + arm.edit_bones.active = bone + + arm.collections.active_index = 0 + + return bones + + +if __name__ == "__main__": + create(bpy.context.active_object) +import bpy + +from rna_prop_ui import rna_idprop_ui_create + +from mathutils import Color + + +def create(obj): # noqa + # generated by rigify.utils.write_metarig + bpy.ops.object.mode_set(mode='EDIT') + arm = obj.data + + for i in range(6): + arm.rigify_colors.add() + + arm.rigify_colors[0].name = "Root" + arm.rigify_colors[0].active = Color((0.5490, 1.0000, 1.0000)) + arm.rigify_colors[0].normal = Color((0.4353, 0.1843, 0.4157)) + arm.rigify_colors[0].select = Color((0.3137, 0.7843, 1.0000)) + arm.rigify_colors[0].standard_colors_lock = True + arm.rigify_colors[1].name = "IK" + arm.rigify_colors[1].active = Color((0.5490, 1.0000, 1.0000)) + arm.rigify_colors[1].normal = Color((0.6039, 0.0000, 0.0000)) + arm.rigify_colors[1].select = Color((0.3137, 0.7843, 1.0000)) + arm.rigify_colors[1].standard_colors_lock = True + arm.rigify_colors[2].name = "Special" + arm.rigify_colors[2].active = Color((0.5490, 1.0000, 1.0000)) + arm.rigify_colors[2].normal = Color((0.9569, 0.7882, 0.0471)) + arm.rigify_colors[2].select = Color((0.3137, 0.7843, 1.0000)) + arm.rigify_colors[2].standard_colors_lock = True + arm.rigify_colors[3].name = "Tweak" + arm.rigify_colors[3].active = Color((0.5490, 1.0000, 1.0000)) + arm.rigify_colors[3].normal = Color((0.0392, 0.2118, 0.5804)) + arm.rigify_colors[3].select = Color((0.3137, 0.7843, 1.0000)) + arm.rigify_colors[3].standard_colors_lock = True + arm.rigify_colors[4].name = "FK" + arm.rigify_colors[4].active = Color((0.5490, 1.0000, 1.0000)) + arm.rigify_colors[4].normal = Color((0.1176, 0.5686, 0.0353)) + arm.rigify_colors[4].select = Color((0.3137, 0.7843, 1.0000)) + arm.rigify_colors[4].standard_colors_lock = True + arm.rigify_colors[5].name = "Extra" + arm.rigify_colors[5].active = Color((0.5490, 1.0000, 1.0000)) + arm.rigify_colors[5].normal = Color((0.9686, 0.2510, 0.0941)) + arm.rigify_colors[5].select = Color((0.3137, 0.7843, 1.0000)) + arm.rigify_colors[5].standard_colors_lock = True + + bone_collections = {} + + for bcoll in list(arm.collections): + arm.collections.remove(bcoll) + + def add_bone_collection(name, *, ui_row=0, ui_title='', sel_set=False, color_set_id=0): + new_bcoll = arm.collections.new(name) + new_bcoll.rigify_ui_row = ui_row + new_bcoll.rigify_ui_title = ui_title + new_bcoll.rigify_sel_set = sel_set + new_bcoll.rigify_color_set_id = color_set_id + bone_collections[name] = new_bcoll + + def assign_bone_collections(pose_bone, *coll_names): + assert not len(pose_bone.bone.collections) + for name in coll_names: + bone_collections[name].assign(pose_bone) + + def assign_bone_collection_refs(params, attr_name, *coll_names): + ref_list = getattr(params, attr_name + '_coll_refs', None) + if ref_list is not None: + for name in coll_names: + ref_list.add().set_collection(bone_collections[name]) + + add_bone_collection('Face', ui_row=1, color_set_id=5) + add_bone_collection('Face (Primary)', ui_row=2, color_set_id=2) + add_bone_collection('Face (Secondary)', ui_row=2, color_set_id=3) + add_bone_collection('Torso', ui_row=3, color_set_id=3) + add_bone_collection('Torso (Tweak)', ui_row=4, color_set_id=4) + add_bone_collection('Fingers', ui_row=5, color_set_id=6) + add_bone_collection('Fingers (Detail)', ui_row=6, color_set_id=5) + add_bone_collection('Arm.L (IK)', ui_row=7, color_set_id=2) + add_bone_collection('Arm.L (FK)', ui_row=8, color_set_id=5) + add_bone_collection('Arm.L (Tweak)', ui_row=9, color_set_id=4) + add_bone_collection('Arm.R (IK)', ui_row=7, color_set_id=2) + add_bone_collection('Arm.R (FK)', ui_row=8, color_set_id=5) + add_bone_collection('Arm.R (Tweak)', ui_row=9, color_set_id=4) + add_bone_collection('Leg.L (IK)', ui_row=10, color_set_id=2) + add_bone_collection('Leg.L (FK)', ui_row=11, color_set_id=5) + add_bone_collection('Leg.L (Tweak)', ui_row=12, color_set_id=4) + add_bone_collection('Leg.R (IK)', ui_row=10, color_set_id=2) + add_bone_collection('Leg.R (FK)', ui_row=11, color_set_id=5) + add_bone_collection('Leg.R (Tweak)', ui_row=12, color_set_id=4) + add_bone_collection('Root', ui_row=15, color_set_id=1) + + bones = {} + + bone = arm.edit_bones.new('spine') + bone.head = 0.0000, 0.0106, 0.9675 + bone.tail = 0.0000, 0.0017, 1.0756 + bone.roll = -0.0000 + bone.use_connect = False + bones['spine'] = bone.name + bone = arm.edit_bones.new('spine.001') + bone.head = 0.0000, 0.0017, 1.0756 + bone.tail = 0.0000, 0.0152, 1.2676 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine']] + bones['spine.001'] = bone.name + bone = arm.edit_bones.new('thigh.L') + bone.head = 0.0901, 0.0053, 0.9530 + bone.tail = 0.1422, 0.0180, 0.5307 + bone.roll = 1.5708 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine']] + bones['thigh.L'] = bone.name + bone = arm.edit_bones.new('thigh.R') + bone.head = -0.0901, 0.0053, 0.9530 + bone.tail = -0.1422, 0.0180, 0.5307 + bone.roll = -1.5708 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine']] + bones['thigh.R'] = bone.name + bone = arm.edit_bones.new('spine.002') + bone.head = 0.0000, 0.0152, 1.2676 + bone.tail = 0.0000, 0.0350, 1.4003 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine.001']] + bones['spine.002'] = bone.name + bone = arm.edit_bones.new('shin.L') + bone.head = 0.1422, 0.0180, 0.5307 + bone.tail = 0.1708, 0.0807, 0.1347 + bone.roll = 1.5708 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thigh.L']] + bones['shin.L'] = bone.name + bone = arm.edit_bones.new('shin.R') + bone.head = -0.1422, 0.0180, 0.5307 + bone.tail = -0.1708, 0.0807, 0.1347 + bone.roll = -1.5708 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thigh.R']] + bones['shin.R'] = bone.name + bone = arm.edit_bones.new('spine.003') + bone.head = 0.0000, 0.0350, 1.4003 + bone.tail = 0.0000, 0.0587, 1.5642 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine.002']] + bones['spine.003'] = bone.name + bone = arm.edit_bones.new('foot.L') + bone.head = 0.1708, 0.0807, 0.1347 + bone.tail = 0.1791, -0.0836, 0.0281 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['shin.L']] + bones['foot.L'] = bone.name + bone = arm.edit_bones.new('foot.R') + bone.head = -0.1708, 0.0807, 0.1347 + bone.tail = -0.1791, -0.0836, 0.0281 + bone.roll = -0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['shin.R']] + bones['foot.R'] = bone.name + bone = arm.edit_bones.new('spine.004') + bone.head = 0.0000, 0.0587, 1.5642 + bone.tail = 0.0000, 0.0398, 1.6552 + bone.roll = 0.0000 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine.003']] + bones['spine.004'] = bone.name + bone = arm.edit_bones.new('shoulder.L') + bone.head = 0.0378, 0.0276, 1.5220 + bone.tail = 0.1386, 0.0572, 1.5328 + bone.roll = -1.5708 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine.003']] + bones['shoulder.L'] = bone.name + bone = arm.edit_bones.new('shoulder.R') + bone.head = -0.0378, 0.0276, 1.5220 + bone.tail = -0.1386, 0.0572, 1.5328 + bone.roll = 1.5708 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine.003']] + bones['shoulder.R'] = bone.name + bone = arm.edit_bones.new('toe.L') + bone.head = 0.1791, -0.0836, 0.0281 + bone.tail = 0.1841, -0.1424, 0.0065 + bone.roll = 2.6716 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['foot.L']] + bones['toe.L'] = bone.name + bone = arm.edit_bones.new('heel.02.L') + bone.head = 0.1411, 0.1383, 0.0000 + bone.tail = 0.2211, 0.1383, 0.0000 + bone.roll = 0.0000 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['foot.L']] + bones['heel.02.L'] = bone.name + bone = arm.edit_bones.new('toe.R') + bone.head = -0.1791, -0.0836, 0.0281 + bone.tail = -0.1841, -0.1424, 0.0065 + bone.roll = -2.6716 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['foot.R']] + bones['toe.R'] = bone.name + bone = arm.edit_bones.new('heel.02.R') + bone.head = -0.1411, 0.1383, 0.0000 + bone.tail = -0.2211, 0.1383, 0.0000 + bone.roll = -0.0000 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['foot.R']] + bones['heel.02.R'] = bone.name + bone = arm.edit_bones.new('spine.005') + bone.head = 0.0000, 0.0398, 1.6552 + bone.tail = 0.0000, 0.0335, 1.8253 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine.004']] + bones['spine.005'] = bone.name + bone = arm.edit_bones.new('upper_arm.L') + bone.head = 0.1770, 0.0971, 1.4953 + bone.tail = 0.3726, 0.1191, 1.2645 + bone.roll = -1.5708 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['shoulder.L']] + bones['upper_arm.L'] = bone.name + bone = arm.edit_bones.new('upper_arm.R') + bone.head = -0.1770, 0.0971, 1.4953 + bone.tail = -0.3726, 0.1191, 1.2645 + bone.roll = 1.5708 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['shoulder.R']] + bones['upper_arm.R'] = bone.name + bone = arm.edit_bones.new('forearm.L') + bone.head = 0.3726, 0.1191, 1.2645 + bone.tail = 0.5665, 0.0034, 1.1168 + bone.roll = -1.5708 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['upper_arm.L']] + bones['forearm.L'] = bone.name + bone = arm.edit_bones.new('forearm.R') + bone.head = -0.3726, 0.1191, 1.2645 + bone.tail = -0.5665, 0.0034, 1.1168 + bone.roll = 1.5708 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['upper_arm.R']] + bones['forearm.R'] = bone.name + bone = arm.edit_bones.new('hand.L') + bone.head = 0.5665, 0.0034, 1.1168 + bone.tail = 0.6265, -0.0383, 1.0575 + bone.roll = 0.7854 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['forearm.L']] + bones['hand.L'] = bone.name + bone = arm.edit_bones.new('hand.R') + bone.head = -0.5665, 0.0034, 1.1168 + bone.tail = -0.6265, -0.0383, 1.0575 + bone.roll = -0.7854 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['forearm.R']] + bones['hand.R'] = bone.name + bone = arm.edit_bones.new('f_index.01.L') + bone.head = 0.6304, -0.0677, 1.0381 + bone.tail = 0.6467, -0.0809, 1.0008 + bone.roll = 1.5708 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.L']] + bones['f_index.01.L'] = bone.name + bone = arm.edit_bones.new('thumb.01.L') + bone.head = 0.5748, -0.0388, 1.0764 + bone.tail = 0.5761, -0.0708, 1.0547 + bone.roll = 1.5708 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.L']] + bones['thumb.01.L'] = bone.name + bone = arm.edit_bones.new('f_middle.01.L') + bone.head = 0.6449, -0.0448, 1.0348 + bone.tail = 0.6653, -0.0572, 0.9950 + bone.roll = 1.5708 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.L']] + bones['f_middle.01.L'] = bone.name + bone = arm.edit_bones.new('f_ring.01.L') + bone.head = 0.6458, -0.0208, 1.0304 + bone.tail = 0.6659, -0.0298, 0.9920 + bone.roll = 1.5708 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.L']] + bones['f_ring.01.L'] = bone.name + bone = arm.edit_bones.new('f_pinky.01.L') + bone.head = 0.6403, 0.0016, 1.0302 + bone.tail = 0.6594, -0.0013, 1.0002 + bone.roll = 1.5708 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.L']] + bones['f_pinky.01.L'] = bone.name + bone = arm.edit_bones.new('f_index.01.R') + bone.head = -0.6304, -0.0677, 1.0381 + bone.tail = -0.6467, -0.0809, 1.0008 + bone.roll = -1.5708 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.R']] + bones['f_index.01.R'] = bone.name + bone = arm.edit_bones.new('thumb.01.R') + bone.head = -0.5748, -0.0388, 1.0764 + bone.tail = -0.5761, -0.0708, 1.0547 + bone.roll = -1.5708 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.R']] + bones['thumb.01.R'] = bone.name + bone = arm.edit_bones.new('f_middle.01.R') + bone.head = -0.6449, -0.0448, 1.0348 + bone.tail = -0.6653, -0.0572, 0.9950 + bone.roll = -1.5708 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.R']] + bones['f_middle.01.R'] = bone.name + bone = arm.edit_bones.new('f_ring.01.R') + bone.head = -0.6458, -0.0208, 1.0304 + bone.tail = -0.6659, -0.0298, 0.9920 + bone.roll = -1.5708 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.R']] + bones['f_ring.01.R'] = bone.name + bone = arm.edit_bones.new('f_pinky.01.R') + bone.head = -0.6403, 0.0016, 1.0302 + bone.tail = -0.6594, -0.0013, 1.0002 + bone.roll = -1.5708 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.R']] + bones['f_pinky.01.R'] = bone.name + bone = arm.edit_bones.new('f_index.02.L') + bone.head = 0.6467, -0.0809, 1.0008 + bone.tail = 0.6544, -0.0876, 0.9684 + bone.roll = 1.5708 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_index.01.L']] + bones['f_index.02.L'] = bone.name + bone = arm.edit_bones.new('thumb.02.L') + bone.head = 0.5761, -0.0708, 1.0547 + bone.tail = 0.5778, -0.0957, 1.0226 + bone.roll = 1.5708 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thumb.01.L']] + bones['thumb.02.L'] = bone.name + bone = arm.edit_bones.new('f_middle.02.L') + bone.head = 0.6653, -0.0572, 0.9950 + bone.tail = 0.6743, -0.0654, 0.9606 + bone.roll = 1.5708 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_middle.01.L']] + bones['f_middle.02.L'] = bone.name + bone = arm.edit_bones.new('f_ring.02.L') + bone.head = 0.6659, -0.0298, 0.9920 + bone.tail = 0.6743, -0.0355, 0.9587 + bone.roll = 1.5708 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_ring.01.L']] + bones['f_ring.02.L'] = bone.name + bone = arm.edit_bones.new('f_pinky.02.L') + bone.head = 0.6594, -0.0013, 1.0002 + bone.tail = 0.6701, -0.0035, 0.9724 + bone.roll = 1.5708 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_pinky.01.L']] + bones['f_pinky.02.L'] = bone.name + bone = arm.edit_bones.new('f_index.02.R') + bone.head = -0.6467, -0.0809, 1.0008 + bone.tail = -0.6544, -0.0876, 0.9684 + bone.roll = -1.5708 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_index.01.R']] + bones['f_index.02.R'] = bone.name + bone = arm.edit_bones.new('thumb.02.R') + bone.head = -0.5761, -0.0708, 1.0547 + bone.tail = -0.5778, -0.0957, 1.0226 + bone.roll = -1.5708 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thumb.01.R']] + bones['thumb.02.R'] = bone.name + bone = arm.edit_bones.new('f_middle.02.R') + bone.head = -0.6653, -0.0572, 0.9950 + bone.tail = -0.6743, -0.0654, 0.9606 + bone.roll = -1.5708 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_middle.01.R']] + bones['f_middle.02.R'] = bone.name + bone = arm.edit_bones.new('f_ring.02.R') + bone.head = -0.6659, -0.0298, 0.9920 + bone.tail = -0.6743, -0.0355, 0.9587 + bone.roll = -1.5708 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_ring.01.R']] + bones['f_ring.02.R'] = bone.name + bone = arm.edit_bones.new('f_pinky.02.R') + bone.head = -0.6594, -0.0013, 1.0002 + bone.tail = -0.6701, -0.0035, 0.9724 + bone.roll = -1.5708 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_pinky.01.R']] + bones['f_pinky.02.R'] = bone.name + bone = arm.edit_bones.new('f_index.03.L') + bone.head = 0.6544, -0.0876, 0.9684 + bone.tail = 0.6583, -0.0948, 0.9461 + bone.roll = 1.5708 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_index.02.L']] + bones['f_index.03.L'] = bone.name + bone = arm.edit_bones.new('thumb.03.L') + bone.head = 0.5778, -0.0957, 1.0226 + bone.tail = 0.5775, -0.1175, 0.9963 + bone.roll = 1.5708 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thumb.02.L']] + bones['thumb.03.L'] = bone.name + bone = arm.edit_bones.new('f_middle.03.L') + bone.head = 0.6743, -0.0654, 0.9606 + bone.tail = 0.6802, -0.0708, 0.9339 + bone.roll = 1.5708 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_middle.02.L']] + bones['f_middle.03.L'] = bone.name + bone = arm.edit_bones.new('f_ring.03.L') + bone.head = 0.6743, -0.0355, 0.9587 + bone.tail = 0.6787, -0.0373, 0.9337 + bone.roll = 1.5708 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_ring.02.L']] + bones['f_ring.03.L'] = bone.name + bone = arm.edit_bones.new('f_pinky.03.L') + bone.head = 0.6701, -0.0035, 0.9724 + bone.tail = 0.6762, -0.0055, 0.9499 + bone.roll = 1.5708 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_pinky.02.L']] + bones['f_pinky.03.L'] = bone.name + bone = arm.edit_bones.new('f_index.03.R') + bone.head = -0.6544, -0.0876, 0.9684 + bone.tail = -0.6583, -0.0948, 0.9461 + bone.roll = -1.5708 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_index.02.R']] + bones['f_index.03.R'] = bone.name + bone = arm.edit_bones.new('thumb.03.R') + bone.head = -0.5778, -0.0957, 1.0226 + bone.tail = -0.5775, -0.1175, 0.9963 + bone.roll = -1.5708 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thumb.02.R']] + bones['thumb.03.R'] = bone.name + bone = arm.edit_bones.new('f_middle.03.R') + bone.head = -0.6743, -0.0654, 0.9606 + bone.tail = -0.6802, -0.0708, 0.9339 + bone.roll = -1.5708 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_middle.02.R']] + bones['f_middle.03.R'] = bone.name + bone = arm.edit_bones.new('f_ring.03.R') + bone.head = -0.6743, -0.0355, 0.9587 + bone.tail = -0.6787, -0.0373, 0.9337 + bone.roll = -1.5708 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_ring.02.R']] + bones['f_ring.03.R'] = bone.name + bone = arm.edit_bones.new('f_pinky.03.R') + bone.head = -0.6701, -0.0035, 0.9724 + bone.tail = -0.6762, -0.0055, 0.9499 + bone.roll = -1.5708 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_pinky.02.R']] + bones['f_pinky.03.R'] = bone.name + + bpy.ops.object.mode_set(mode='OBJECT') + pbone = obj.pose.bones[bones['spine']] + pbone.rigify_type = 'spines.basic_spine' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Torso (Tweak)') + assign_bone_collection_refs(pbone.rigify_parameters, 'fk', 'Torso (Tweak)') + pbone = obj.pose.bones[bones['spine.001']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + pbone = obj.pose.bones[bones['thigh.L']] + pbone.rigify_type = 'limbs.super_limb' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.L (IK)') + try: + pbone.rigify_parameters.limb_type = 'leg' + except AttributeError: + pass + assign_bone_collection_refs(pbone.rigify_parameters, 'fk', 'Leg.L (FK)') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Leg.L (Tweak)') + pbone = obj.pose.bones[bones['thigh.R']] + pbone.rigify_type = 'limbs.super_limb' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.R (IK)') + try: + pbone.rigify_parameters.limb_type = 'leg' + except AttributeError: + pass + assign_bone_collection_refs(pbone.rigify_parameters, 'fk', 'Leg.R (FK)') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Leg.R (Tweak)') + pbone = obj.pose.bones[bones['spine.002']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + pbone = obj.pose.bones[bones['shin.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.L (IK)') + pbone = obj.pose.bones[bones['shin.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.R (IK)') + pbone = obj.pose.bones[bones['spine.003']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + pbone = obj.pose.bones[bones['foot.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.L (IK)') + pbone = obj.pose.bones[bones['foot.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.R (IK)') + pbone = obj.pose.bones[bones['spine.004']] + pbone.rigify_type = 'spines.super_head' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + try: + pbone.rigify_parameters.connect_chain = True + except AttributeError: + pass + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Torso (Tweak)') + pbone = obj.pose.bones[bones['shoulder.L']] + pbone.rigify_type = 'basic.super_copy' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Torso') + try: + pbone.rigify_parameters.make_widget = False + except AttributeError: + pass + pbone = obj.pose.bones[bones['shoulder.R']] + pbone.rigify_type = 'basic.super_copy' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Torso') + try: + pbone.rigify_parameters.make_widget = False + except AttributeError: + pass + pbone = obj.pose.bones[bones['toe.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.L (IK)') + pbone = obj.pose.bones[bones['heel.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.L (IK)') + pbone = obj.pose.bones[bones['toe.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.R (IK)') + pbone = obj.pose.bones[bones['heel.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.R (IK)') + pbone = obj.pose.bones[bones['spine.005']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + pbone = obj.pose.bones[bones['upper_arm.L']] + pbone.rigify_type = 'limbs.super_limb' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Arm.L (IK)') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Arm.L (Tweak)') + assign_bone_collection_refs(pbone.rigify_parameters, 'fk', 'Arm.L (FK)') + pbone = obj.pose.bones[bones['upper_arm.R']] + pbone.rigify_type = 'limbs.super_limb' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Arm.R (IK)') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Arm.R (Tweak)') + assign_bone_collection_refs(pbone.rigify_parameters, 'fk', 'Arm.R (FK)') + pbone = obj.pose.bones[bones['forearm.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Arm.L (IK)') + pbone = obj.pose.bones[bones['forearm.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Arm.R (IK)') + pbone = obj.pose.bones[bones['hand.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Arm.L (IK)') + pbone = obj.pose.bones[bones['hand.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Arm.R (IK)') + pbone = obj.pose.bones[bones['f_index.01.L']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['thumb.01.L']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_middle.01.L']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_ring.01.L']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_pinky.01.L']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_index.01.R']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['thumb.01.R']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_middle.01.R']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_ring.01.R']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_pinky.01.R']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_index.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['thumb.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_middle.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_ring.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_pinky.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_index.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['thumb.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_middle.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_ring.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_pinky.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_index.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['thumb.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_middle.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_ring.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_pinky.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_index.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['thumb.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_middle.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_ring.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_pinky.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + + bpy.ops.object.mode_set(mode='EDIT') + for bone in arm.edit_bones: + bone.select = False + bone.select_head = False + bone.select_tail = False + for b in bones: + bone = arm.edit_bones[bones[b]] + bone.select = True + bone.select_head = True + bone.select_tail = True + bone.bbone_x = bone.bbone_z = bone.length * 0.05 + arm.edit_bones.active = bone + + arm.collections.active_index = 0 + + return bones + + +if __name__ == "__main__": + create(bpy.context.active_object) diff --git a/src/addons/ue2rigify/resources/rig_templates/b4_0/male_mannequin_UE4/source_to_deform_links.json b/src/addons/ue2rigify/resources/rig_templates/b4_0/male_mannequin_UE4/source_to_deform_links.json new file mode 100644 index 00000000..9a62a654 --- /dev/null +++ b/src/addons/ue2rigify/resources/rig_templates/b4_0/male_mannequin_UE4/source_to_deform_links.json @@ -0,0 +1,368 @@ +[ + { + "from_node": "Source Left Leg ", + "to_node": "Control Left Leg", + "from_socket": "calf_twist_01_l", + "to_socket": "DEF-shin.L.001" + }, + { + "from_node": "Source Left Leg ", + "to_node": "Control Left Leg", + "from_socket": "foot_l", + "to_socket": "DEF-foot.L" + }, + { + "from_node": "Source Left Leg ", + "to_node": "Control Left Leg", + "from_socket": "thigh_twist_01_l", + "to_socket": "DEF-thigh.L.001" + }, + { + "from_node": "Source Left Leg ", + "to_node": "Control Left Leg", + "from_socket": "ball_l", + "to_socket": "DEF-toe.L" + }, + { + "from_node": "Source Left Leg ", + "to_node": "Control Left Leg", + "from_socket": "calf_l", + "to_socket": "DEF-shin.L" + }, + { + "from_node": "Source Left Leg ", + "to_node": "Control Left Leg", + "from_socket": "thigh_l", + "to_socket": "DEF-thigh.L" + }, + { + "from_node": "Source Right Leg", + "to_node": "Control Right Leg", + "from_socket": "foot_r", + "to_socket": "DEF-foot.R" + }, + { + "from_node": "Source Right Leg", + "to_node": "Control Right Leg", + "from_socket": "thigh_twist_01_r", + "to_socket": "DEF-thigh.R.001" + }, + { + "from_node": "Source Right Leg", + "to_node": "Control Right Leg", + "from_socket": "ball_r", + "to_socket": "DEF-toe.R" + }, + { + "from_node": "Source Right Leg", + "to_node": "Control Right Leg", + "from_socket": "calf_twist_01_r", + "to_socket": "DEF-shin.R.001" + }, + { + "from_node": "Source Right Leg", + "to_node": "Control Right Leg", + "from_socket": "calf_r", + "to_socket": "DEF-shin.R" + }, + { + "from_node": "Source Right Leg", + "to_node": "Control Right Leg", + "from_socket": "thigh_r", + "to_socket": "DEF-thigh.R" + }, + { + "from_node": "Source Spine", + "to_node": "Control Spine", + "from_socket": "head", + "to_socket": "DEF-spine.005" + }, + { + "from_node": "Source Spine", + "to_node": "Control Spine", + "from_socket": "neck_01", + "to_socket": "DEF-spine.004" + }, + { + "from_node": "Source Spine", + "to_node": "Control Spine", + "from_socket": "spine_03", + "to_socket": "DEF-spine.003" + }, + { + "from_node": "Source Spine", + "to_node": "Control Spine", + "from_socket": "spine_02", + "to_socket": "DEF-spine.002" + }, + { + "from_node": "Source Spine", + "to_node": "Control Spine", + "from_socket": "spine_01", + "to_socket": "DEF-spine.001" + }, + { + "from_node": "Source Spine", + "to_node": "Control Spine", + "from_socket": "pelvis", + "to_socket": "DEF-spine" + }, + { + "from_node": "Source Left Thumb", + "to_node": "Control Left Thumb", + "from_socket": "thumb_03_l", + "to_socket": "DEF-thumb.03.L" + }, + { + "from_node": "Source Left Thumb", + "to_node": "Control Left Thumb", + "from_socket": "thumb_02_l", + "to_socket": "DEF-thumb.02.L" + }, + { + "from_node": "Source Left Thumb", + "to_node": "Control Left Thumb", + "from_socket": "thumb_01_l", + "to_socket": "DEF-thumb.01.L" + }, + { + "from_node": "Source Left Index Finger", + "to_node": "Control Left Index Finger", + "from_socket": "index_01_l", + "to_socket": "DEF-f_index.01.L" + }, + { + "from_node": "Source Left Index Finger", + "to_node": "Control Left Index Finger", + "from_socket": "index_02_l", + "to_socket": "DEF-f_index.02.L" + }, + { + "from_node": "Source Left Index Finger", + "to_node": "Control Left Index Finger", + "from_socket": "index_03_l", + "to_socket": "DEF-f_index.03.L" + }, + { + "from_node": "Source Left Middle Finger", + "to_node": "Control Left Middle Finger", + "from_socket": "middle_01_l", + "to_socket": "DEF-f_middle.01.L" + }, + { + "from_node": "Source Left Middle Finger", + "to_node": "Control Left Middle Finger", + "from_socket": "middle_03_l", + "to_socket": "DEF-f_middle.03.L" + }, + { + "from_node": "Source Left Middle Finger", + "to_node": "Control Left Middle Finger", + "from_socket": "middle_02_l", + "to_socket": "DEF-f_middle.02.L" + }, + { + "from_node": "Source Left Ring Finger", + "to_node": "Control Left Ring Finger", + "from_socket": "ring_03_l", + "to_socket": "DEF-f_ring.03.L" + }, + { + "from_node": "Source Left Ring Finger", + "to_node": "Control Left Ring Finger", + "from_socket": "ring_02_l", + "to_socket": "DEF-f_ring.02.L" + }, + { + "from_node": "Source Left Ring Finger", + "to_node": "Control Left Ring Finger", + "from_socket": "ring_01_l", + "to_socket": "DEF-f_ring.01.L" + }, + { + "from_node": "Source Left Pinky Finger", + "to_node": "Control Left Pinky Finger", + "from_socket": "pinky_03_l", + "to_socket": "DEF-f_pinky.03.L" + }, + { + "from_node": "Source Left Pinky Finger", + "to_node": "Control Left Pinky Finger", + "from_socket": "pinky_02_l", + "to_socket": "DEF-f_pinky.02.L" + }, + { + "from_node": "Source Left Pinky Finger", + "to_node": "Control Left Pinky Finger", + "from_socket": "pinky_01_l", + "to_socket": "DEF-f_pinky.01.L" + }, + { + "from_node": "Source Right Thumb", + "to_node": "Control Right Thumb", + "from_socket": "thumb_03_r", + "to_socket": "DEF-thumb.03.R" + }, + { + "from_node": "Source Right Thumb", + "to_node": "Control Right Thumb", + "from_socket": "thumb_02_r", + "to_socket": "DEF-thumb.02.R" + }, + { + "from_node": "Source Right Thumb", + "to_node": "Control Right Thumb", + "from_socket": "thumb_01_r", + "to_socket": "DEF-thumb.01.R" + }, + { + "from_node": "Source Right Index Finger", + "to_node": "Control Right Index Finger", + "from_socket": "index_03_r", + "to_socket": "DEF-f_index.03.R" + }, + { + "from_node": "Source Right Index Finger", + "to_node": "Control Right Index Finger", + "from_socket": "index_02_r", + "to_socket": "DEF-f_index.02.R" + }, + { + "from_node": "Source Right Index Finger", + "to_node": "Control Right Index Finger", + "from_socket": "index_01_r", + "to_socket": "DEF-f_index.01.R" + }, + { + "from_node": "Source Right Middle Finger", + "to_node": "Control Right Middle Finger", + "from_socket": "middle_03_r", + "to_socket": "DEF-f_middle.03.R" + }, + { + "from_node": "Source Right Middle Finger", + "to_node": "Control Right Middle Finger", + "from_socket": "middle_02_r", + "to_socket": "DEF-f_middle.02.R" + }, + { + "from_node": "Source Right Middle Finger", + "to_node": "Control Right Middle Finger", + "from_socket": "middle_01_r", + "to_socket": "DEF-f_middle.01.R" + }, + { + "from_node": "Source Right Ring Finger", + "to_node": "Control Right Ring Finger", + "from_socket": "ring_03_r", + "to_socket": "DEF-f_ring.03.R" + }, + { + "from_node": "Source Right Ring Finger", + "to_node": "Control Right Ring Finger", + "from_socket": "ring_02_r", + "to_socket": "DEF-f_ring.02.R" + }, + { + "from_node": "Source Right Ring Finger", + "to_node": "Control Right Ring Finger", + "from_socket": "ring_01_r", + "to_socket": "DEF-f_ring.01.R" + }, + { + "from_node": "Source Right Pinky Finger", + "to_node": "Control Right Pinky Finger", + "from_socket": "pinky_01_r", + "to_socket": "DEF-f_pinky.01.R" + }, + { + "from_node": "Source Right Pinky Finger", + "to_node": "Control Right Pinky Finger", + "from_socket": "pinky_02_r", + "to_socket": "DEF-f_pinky.02.R" + }, + { + "from_node": "Source Right Pinky Finger", + "to_node": "Control Right Pinky Finger", + "from_socket": "pinky_03_r", + "to_socket": "DEF-f_pinky.03.R" + }, + { + "from_node": "Source Rig clavicle_l", + "to_node": "Control Rig DEF-shoulder.L", + "from_socket": "clavicle_l", + "to_socket": "DEF-shoulder.L" + }, + { + "from_node": "Source Rig clavicle_l", + "to_node": "Control Rig DEF-shoulder.L", + "from_socket": "hand_l", + "to_socket": "DEF-hand.L" + }, + { + "from_node": "Source Rig clavicle_l", + "to_node": "Control Rig DEF-shoulder.L", + "from_socket": "lowerarm_l", + "to_socket": "DEF-forearm.L" + }, + { + "from_node": "Source Rig clavicle_l", + "to_node": "Control Rig DEF-shoulder.L", + "from_socket": "upperarm_l", + "to_socket": "DEF-upper_arm.L" + }, + { + "from_node": "Source Rig lowerarm_twist_01_l", + "to_node": "Control Rig DEF-forearm.L.001", + "from_socket": "lowerarm_twist_01_l", + "to_socket": "DEF-forearm.L.001" + }, + { + "from_node": "Source Rig lowerarm_twist_01_l", + "to_node": "Control Rig DEF-forearm.L.001", + "from_socket": "upperarm_twist_01_l", + "to_socket": "DEF-upper_arm.L" + }, + { + "from_node": "Source Rig hand_r", + "to_node": "Control Rig DEF-hand.R", + "from_socket": "hand_r", + "to_socket": "DEF-hand.R" + }, + { + "from_node": "Source Rig hand_r", + "to_node": "Control Rig DEF-hand.R", + "from_socket": "lowerarm_r", + "to_socket": "DEF-forearm.R" + }, + { + "from_node": "Source Rig hand_r", + "to_node": "Control Rig DEF-hand.R", + "from_socket": "upperarm_r", + "to_socket": "DEF-upper_arm.R" + }, + { + "from_node": "Source Rig hand_r", + "to_node": "Control Rig DEF-hand.R", + "from_socket": "clavicle_r", + "to_socket": "DEF-shoulder.R" + }, + { + "from_node": "Source Rig lowerarm_twist_01_r", + "to_node": "Control Rig DEF-forearm.R.001", + "from_socket": "lowerarm_twist_01_r", + "to_socket": "DEF-forearm.R.001" + }, + { + "from_node": "Source Rig lowerarm_twist_01_r", + "to_node": "Control Rig DEF-forearm.R.001", + "from_socket": "upperarm_twist_01_r", + "to_socket": "DEF-upper_arm.R" + }, + { + "from_node": "Source Rig Object", + "to_node": "Control Rig root", + "from_socket": "object", + "to_socket": "root" + } +] \ No newline at end of file diff --git a/src/addons/ue2rigify/resources/rig_templates/b4_0/male_mannequin_UE4/source_to_deform_nodes.json b/src/addons/ue2rigify/resources/rig_templates/b4_0/male_mannequin_UE4/source_to_deform_nodes.json new file mode 100644 index 00000000..a0920996 --- /dev/null +++ b/src/addons/ue2rigify/resources/rig_templates/b4_0/male_mannequin_UE4/source_to_deform_nodes.json @@ -0,0 +1,880 @@ +[ + { + "name": "Control Spine", + "label": "Control Spine", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 337.606689453125, + 1288.3826904296875 + ], + "width": 244.7388916015625, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.005", + "DEF-spine.004", + "DEF-spine.003", + "DEF-spine.002", + "DEF-spine.001", + "DEF-spine" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Left Index Finger", + "label": "Source Left Index Finger", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 398.0936584472656, + 1686.2913818359375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "index_01_l", + "index_02_l", + "index_03_l" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Left Thumb", + "label": "Source Left Thumb", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 392.1676330566406, + 1550.2945556640625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thumb_03_l", + "thumb_02_l", + "thumb_01_l" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Left Middle Finger", + "label": "Source Left Middle Finger", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 395.0823669433594, + 1827.6441650390625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "middle_01_l", + "middle_03_l", + "middle_02_l" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Left Ring Finger", + "label": "Source Left Ring Finger", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 401.5351867675781, + 1966.158447265625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "ring_03_l", + "ring_02_l", + "ring_01_l" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Left Ring Finger", + "label": "Control Left Ring Finger", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 1021.9049072265625, + 1960.2542724609375 + ], + "width": 207.9583740234375, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_ring.03.L", + "DEF-f_ring.02.L", + "DEF-f_ring.01.L" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Left Middle Finger", + "label": "Control Left Middle Finger", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 1020.5491943359375, + 1824.4620361328125 + ], + "width": 209.5301513671875, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_middle.01.L", + "DEF-f_middle.03.L", + "DEF-f_middle.02.L" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Left Thumb", + "label": "Control Left Thumb", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 1023.8115234375, + 1543.93017578125 + ], + "width": 220.00457763671875, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thumb.03.L", + "DEF-thumb.02.L", + "DEF-thumb.01.L" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Left Index Finger", + "label": "Control Left Index Finger", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 1020.3770751953125, + 1681.51806640625 + ], + "width": 216.1654052734375, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_index.01.L", + "DEF-f_index.02.L", + "DEF-f_index.03.L" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Left Pinky Finger", + "label": "Source Left Pinky Finger", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 405.2091979980469, + 2105.741943359375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "pinky_03_l", + "pinky_02_l", + "pinky_01_l" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Left Pinky Finger", + "label": "Control Left Pinky Finger", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 1020.0912475585938, + 2105.741943359375 + ], + "width": 205.580810546875, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_pinky.03.L", + "DEF-f_pinky.02.L", + "DEF-f_pinky.01.L" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Right Leg", + "label": "Source Right Leg", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -909.172119140625, + 856.314453125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "foot_r", + "thigh_twist_01_r", + "ball_r", + "calf_twist_01_r", + "calf_r", + "thigh_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Left Leg", + "label": "Control Left Leg", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 1001.4664306640625, + 862.24609375 + ], + "width": 250.00469970703125, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-shin.L.001", + "DEF-foot.L", + "DEF-thigh.L.001", + "DEF-toe.L", + "DEF-shin.L", + "DEF-thigh.L" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Left Leg ", + "label": "Source Left Leg ", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 365.9084167480469, + 862.1489868164062 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "calf_twist_01_l", + "foot_l", + "thigh_twist_01_l", + "ball_l", + "calf_l", + "thigh_l" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Right Pinky Finger", + "label": "Source Right Pinky Finger", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -895.021484375, + 2126.25 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "pinky_01_r", + "pinky_02_r", + "pinky_03_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Right Middle Finger", + "label": "Source Right Middle Finger", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -884.536376953125, + 1832.59423828125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "middle_03_r", + "middle_02_r", + "middle_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Right Ring Finger", + "label": "Source Right Ring Finger", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -889.0211181640625, + 1986.1513671875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "ring_03_r", + "ring_02_r", + "ring_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Right Index Finger", + "label": "Source Right Index Finger", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -887.8488159179688, + 1680.8033447265625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "index_03_r", + "index_02_r", + "index_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Right Thumb", + "label": "Source Right Thumb", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -889.4405517578125, + 1542.434326171875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thumb_03_r", + "thumb_02_r", + "thumb_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig clavicle_l", + "label": "Source Left Arm", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 377.4468994140625, + 491.7364196777344 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "clavicle_l", + "hand_l", + "lowerarm_l", + "upperarm_l" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig lowerarm_twist_01_l", + "label": "Source Right Arm Twist", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 379.4681091308594, + 604.5411376953125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "lowerarm_twist_01_l", + "upperarm_twist_01_l" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-forearm.L.001", + "label": "Control Left Arm", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 1036.2532958984375, + 604.5411376953125 + ], + "width": 246.9674072265625, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-forearm.L.001", + "DEF-upper_arm.L" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-shoulder.L", + "label": "Control Left Arm", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 1040.3956298828125, + 493.69268798828125 + ], + "width": 246.9671630859375, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-shoulder.L", + "DEF-hand.L", + "DEF-forearm.L", + "DEF-upper_arm.L" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig lowerarm_twist_01_r", + "label": "Source Right Twist", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -903.2749633789062, + 591.1119384765625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "lowerarm_twist_01_r", + "upperarm_twist_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig hand_r", + "label": "Source Right Arm", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -897.6362915039062, + 480.1002197265625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "hand_r", + "lowerarm_r", + "upperarm_r", + "clavicle_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Spine", + "label": "Source Spine", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -288.0794982910156, + 1294.8017578125 + ], + "width": 222.369384765625, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "head", + "neck_01", + "spine_03", + "spine_02", + "spine_01", + "pelvis" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Right Leg", + "label": "Control Right Leg", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -301.3240661621094, + 854.4548950195312 + ], + "width": 250.275634765625, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-foot.R", + "DEF-thigh.R.001", + "DEF-toe.R", + "DEF-shin.R.001", + "DEF-shin.R", + "DEF-thigh.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Right Thumb", + "label": "Control Right Thumb", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -289.4405517578125, + 1542.434326171875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thumb.03.R", + "DEF-thumb.02.R", + "DEF-thumb.01.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Right Pinky Finger", + "label": "Control Right Pinky Finger", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -283.8596496582031, + 2129.625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_pinky.01.R", + "DEF-f_pinky.02.R", + "DEF-f_pinky.03.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Right Index Finger", + "label": "Control Right Index Finger", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -291.0322265625, + 1683.6904296875 + ], + "width": 206.3668212890625, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_index.03.R", + "DEF-f_index.02.R", + "DEF-f_index.01.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Right Ring Finger", + "label": "Control Right Ring Finger", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -284.63360595703125, + 1985.01708984375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_ring.03.R", + "DEF-f_ring.02.R", + "DEF-f_ring.01.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Right Middle Finger", + "label": "Control Right Middle Finger", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -287.8488464355469, + 1829.2772216796875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_middle.03.R", + "DEF-f_middle.02.R", + "DEF-f_middle.01.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-forearm.R.001", + "label": "Control Right Arm", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -303.27496337890625, + 591.1119384765625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-forearm.R.001", + "DEF-upper_arm.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-hand.R", + "label": "Control Right Arm", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -297.63629150390625, + 480.1002197265625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-hand.R", + "DEF-forearm.R", + "DEF-upper_arm.R", + "DEF-shoulder.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig Object", + "label": "", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -241.25387573242188, + 169.654296875 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "object" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig root", + "label": "", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 379.0954284667969, + 154.46432495117188 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "root" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + } +] \ No newline at end of file diff --git a/src/addons/ue2rigify/resources/rig_templates/b4_0/male_mannequin_UE5/fk_to_source_links.json b/src/addons/ue2rigify/resources/rig_templates/b4_0/male_mannequin_UE5/fk_to_source_links.json new file mode 100644 index 00000000..94e28088 --- /dev/null +++ b/src/addons/ue2rigify/resources/rig_templates/b4_0/male_mannequin_UE5/fk_to_source_links.json @@ -0,0 +1,548 @@ +[ + { + "from_node": "Control Rig upper_arm_fk.L", + "to_node": "Source Rig upperarm_l", + "from_socket": "upper_arm_fk.L", + "to_socket": "upperarm_l" + }, + { + "from_node": "Control Rig upper_arm_fk.L", + "to_node": "Source Rig upperarm_l", + "from_socket": "upper_arm_fk.R", + "to_socket": "upperarm_r" + }, + { + "from_node": "Control Rig upper_arm_tweak.L", + "to_node": "Source Rig upperarm_correctiveRoot_l", + "from_socket": "upper_arm_tweak.L", + "to_socket": "upperarm_correctiveRoot_l" + }, + { + "from_node": "Control Rig upper_arm_tweak.L", + "to_node": "Source Rig upperarm_correctiveRoot_l", + "from_socket": "upper_arm_tweak.R", + "to_socket": "upperarm_correctiveRoot_r" + }, + { + "from_node": "Control Rig forearm_fk.L", + "to_node": "Source Rig lowerarm_l", + "from_socket": "forearm_fk.L", + "to_socket": "lowerarm_l" + }, + { + "from_node": "Control Rig forearm_fk.L", + "to_node": "Source Rig lowerarm_l", + "from_socket": "forearm_fk.R", + "to_socket": "lowerarm_r" + }, + { + "from_node": "Control Rig hand_fk.L", + "to_node": "Source Rig hand_l", + "from_socket": "hand_fk.L", + "to_socket": "hand_l" + }, + { + "from_node": "Control Rig hand_fk.L", + "to_node": "Source Rig hand_l", + "from_socket": "hand_fk.R", + "to_socket": "hand_r" + }, + { + "from_node": "Control Rig forearm_tweak.L", + "to_node": "Source Rig lowerarm_correctiveRoot_l", + "from_socket": "forearm_tweak.L", + "to_socket": "lowerarm_correctiveRoot_l" + }, + { + "from_node": "Control Rig forearm_tweak.L", + "to_node": "Source Rig lowerarm_correctiveRoot_l", + "from_socket": "forearm_tweak.R", + "to_socket": "lowerarm_correctiveRoot_r" + }, + { + "from_node": "Control Rig forearm_tweak.L.001", + "to_node": "Source Rig lowerarm_twist_02_l", + "from_socket": "forearm_tweak.L.001", + "to_socket": "lowerarm_twist_02_l" + }, + { + "from_node": "Control Rig forearm_tweak.L.001", + "to_node": "Source Rig lowerarm_twist_02_l", + "from_socket": "forearm_tweak.R.001", + "to_socket": "lowerarm_twist_02_r" + }, + { + "from_node": "Control Rig forearm_tweak.L.002", + "to_node": "Source Rig lowerarm_twist_01_l", + "from_socket": "forearm_tweak.L.002", + "to_socket": "lowerarm_twist_01_l" + }, + { + "from_node": "Control Rig forearm_tweak.L.002", + "to_node": "Source Rig lowerarm_twist_01_l", + "from_socket": "forearm_tweak.R.002", + "to_socket": "lowerarm_twist_01_r" + }, + { + "from_node": "Control Rig hand_tweak.L", + "to_node": "Source Rig hand_l.001", + "from_socket": "hand_tweak.L", + "to_socket": "hand_l" + }, + { + "from_node": "Control Rig hand_tweak.L", + "to_node": "Source Rig hand_l.001", + "from_socket": "hand_tweak.R", + "to_socket": "hand_r" + }, + { + "from_node": "Control Rig upper_arm_tweak.L.002", + "to_node": "Source Rig upperarm_twist_02_l", + "from_socket": "upper_arm_tweak.L.002", + "to_socket": "upperarm_twist_02_l" + }, + { + "from_node": "Control Rig upper_arm_tweak.L.002", + "to_node": "Source Rig upperarm_twist_02_l", + "from_socket": "upper_arm_tweak.R.002", + "to_socket": "upperarm_twist_02_r" + }, + { + "from_node": "Control Rig upper_arm_tweak.L.001", + "to_node": "Source Rig upperarm_twist_01_l", + "from_socket": "upper_arm_tweak.L.001", + "to_socket": "upperarm_twist_01_l" + }, + { + "from_node": "Control Rig upper_arm_tweak.L.001", + "to_node": "Source Rig upperarm_twist_01_l", + "from_socket": "upper_arm_tweak.R.001", + "to_socket": "upperarm_twist_01_r" + }, + { + "from_node": "Control Rig thumb.01.L", + "to_node": "Source Rig thumb_01_l", + "from_socket": "thumb.01.L", + "to_socket": "thumb_01_l" + }, + { + "from_node": "Control Rig thumb.01.L", + "to_node": "Source Rig thumb_01_l", + "from_socket": "thumb.01.R", + "to_socket": "thumb_01_r" + }, + { + "from_node": "Control Rig thumb.02.L", + "to_node": "Source Rig thumb_02_l", + "from_socket": "thumb.02.L", + "to_socket": "thumb_02_l" + }, + { + "from_node": "Control Rig thumb.02.L", + "to_node": "Source Rig thumb_02_l", + "from_socket": "thumb.02.R", + "to_socket": "thumb_02_r" + }, + { + "from_node": "Control Rig thumb.03.L", + "to_node": "Source Rig thumb_03_l", + "from_socket": "thumb.03.L", + "to_socket": "thumb_03_l" + }, + { + "from_node": "Control Rig thumb.03.L", + "to_node": "Source Rig thumb_03_l", + "from_socket": "thumb.03.R", + "to_socket": "thumb_03_r" + }, + { + "from_node": "Control Rig f_index.01.L", + "to_node": "Source Rig index_01_l", + "from_socket": "f_index.01.L", + "to_socket": "index_01_l" + }, + { + "from_node": "Control Rig f_index.01.L", + "to_node": "Source Rig index_01_l", + "from_socket": "f_index.01.R", + "to_socket": "index_01_r" + }, + { + "from_node": "Control Rig f_index.02.L", + "to_node": "Source Rig index_02_l", + "from_socket": "f_index.02.L", + "to_socket": "index_02_l" + }, + { + "from_node": "Control Rig f_index.02.L", + "to_node": "Source Rig index_02_l", + "from_socket": "f_index.02.R", + "to_socket": "index_02_r" + }, + { + "from_node": "Control Rig f_index.03.L", + "to_node": "Source Rig index_03_l", + "from_socket": "f_index.03.L", + "to_socket": "index_03_l" + }, + { + "from_node": "Control Rig f_index.03.L", + "to_node": "Source Rig index_03_l", + "from_socket": "f_index.03.R", + "to_socket": "index_03_r" + }, + { + "from_node": "Control Rig f_middle.01.L", + "to_node": "Source Rig middle_01_l", + "from_socket": "f_middle.01.L", + "to_socket": "middle_01_l" + }, + { + "from_node": "Control Rig f_middle.01.L", + "to_node": "Source Rig middle_01_l", + "from_socket": "f_middle.01.R", + "to_socket": "middle_01_r" + }, + { + "from_node": "Control Rig f_middle.02.L", + "to_node": "Source Rig middle_02_l", + "from_socket": "f_middle.02.L", + "to_socket": "middle_02_l" + }, + { + "from_node": "Control Rig f_middle.02.L", + "to_node": "Source Rig middle_02_l", + "from_socket": "f_middle.02.R", + "to_socket": "middle_02_r" + }, + { + "from_node": "Control Rig f_middle.03.L", + "to_node": "Source Rig middle_03_l", + "from_socket": "f_middle.03.L", + "to_socket": "middle_03_l" + }, + { + "from_node": "Control Rig f_middle.03.L", + "to_node": "Source Rig middle_03_l", + "from_socket": "f_middle.03.R", + "to_socket": "middle_03_r" + }, + { + "from_node": "Control Rig f_ring.01.L", + "to_node": "Source Rig ring_01_l", + "from_socket": "f_ring.01.L", + "to_socket": "ring_01_l" + }, + { + "from_node": "Control Rig f_ring.01.L", + "to_node": "Source Rig ring_01_l", + "from_socket": "f_ring.01.R", + "to_socket": "ring_01_r" + }, + { + "from_node": "Control Rig f_ring.02.L", + "to_node": "Source Rig ring_02_l", + "from_socket": "f_ring.02.L", + "to_socket": "ring_02_l" + }, + { + "from_node": "Control Rig f_ring.02.L", + "to_node": "Source Rig ring_02_l", + "from_socket": "f_ring.02.R", + "to_socket": "ring_02_r" + }, + { + "from_node": "Control Rig f_ring.03.L", + "to_node": "Source Rig ring_03_l", + "from_socket": "f_ring.03.L", + "to_socket": "ring_03_l" + }, + { + "from_node": "Control Rig f_ring.03.L", + "to_node": "Source Rig ring_03_l", + "from_socket": "f_ring.03.R", + "to_socket": "ring_03_r" + }, + { + "from_node": "Control Rig f_pinky.01.L", + "to_node": "Source Rig pinky_01_l", + "from_socket": "f_pinky.01.L", + "to_socket": "pinky_01_l" + }, + { + "from_node": "Control Rig f_pinky.01.L", + "to_node": "Source Rig pinky_01_l", + "from_socket": "f_pinky.01.R", + "to_socket": "pinky_01_r" + }, + { + "from_node": "Control Rig f_pinky.02.L", + "to_node": "Source Rig pinky_02_l", + "from_socket": "f_pinky.02.L", + "to_socket": "pinky_02_l" + }, + { + "from_node": "Control Rig f_pinky.02.L", + "to_node": "Source Rig pinky_02_l", + "from_socket": "f_pinky.02.R", + "to_socket": "pinky_02_r" + }, + { + "from_node": "Control Rig f_pinky.03.L", + "to_node": "Source Rig pinky_03_l", + "from_socket": "f_pinky.03.L", + "to_socket": "pinky_03_l" + }, + { + "from_node": "Control Rig f_pinky.03.L", + "to_node": "Source Rig pinky_03_l", + "from_socket": "f_pinky.03.R", + "to_socket": "pinky_03_r" + }, + { + "from_node": "Control Rig thigh_fk.L", + "to_node": "Source Rig thigh_l", + "from_socket": "thigh_fk.L", + "to_socket": "thigh_l" + }, + { + "from_node": "Control Rig thigh_fk.L", + "to_node": "Source Rig thigh_l", + "from_socket": "thigh_fk.R", + "to_socket": "thigh_r" + }, + { + "from_node": "Control Rig thigh_tweak.L", + "to_node": "Source Rig thigh_correctiveRoot_l", + "from_socket": "thigh_tweak.L", + "to_socket": "thigh_correctiveRoot_l" + }, + { + "from_node": "Control Rig thigh_tweak.L", + "to_node": "Source Rig thigh_correctiveRoot_l", + "from_socket": "thigh_tweak.R", + "to_socket": "thigh_correctiveRoot_r" + }, + { + "from_node": "Control Rig shin_fk.L", + "to_node": "Source Rig calf_l", + "from_socket": "shin_fk.L", + "to_socket": "calf_l" + }, + { + "from_node": "Control Rig shin_fk.L", + "to_node": "Source Rig calf_l", + "from_socket": "shin_fk.R", + "to_socket": "calf_r" + }, + { + "from_node": "Control Rig foot_fk.L", + "to_node": "Source Rig foot_l", + "from_socket": "foot_fk.L", + "to_socket": "foot_l" + }, + { + "from_node": "Control Rig foot_fk.L", + "to_node": "Source Rig foot_l", + "from_socket": "foot_fk.R", + "to_socket": "foot_r" + }, + { + "from_node": "Control Rig foot_tweak.L", + "to_node": "Source Rig foot_l.001", + "from_socket": "foot_tweak.L", + "to_socket": "foot_l" + }, + { + "from_node": "Control Rig foot_tweak.L", + "to_node": "Source Rig foot_l.001", + "from_socket": "foot_tweak.R", + "to_socket": "foot_r" + }, + { + "from_node": "Control Rig toe.L", + "to_node": "Source Rig ball_l", + "from_socket": "toe.L", + "to_socket": "ball_l" + }, + { + "from_node": "Control Rig toe.L", + "to_node": "Source Rig ball_l", + "from_socket": "toe.R", + "to_socket": "ball_r" + }, + { + "from_node": "Control Rig shin_tweak.L.001", + "to_node": "Source Rig calf_twist_02_l", + "from_socket": "shin_tweak.L.001", + "to_socket": "calf_twist_02_l" + }, + { + "from_node": "Control Rig shin_tweak.L.001", + "to_node": "Source Rig calf_twist_02_l", + "from_socket": "shin_tweak.R.001", + "to_socket": "calf_twist_02_r" + }, + { + "from_node": "Control Rig shin_tweak.L.002", + "to_node": "Source Rig calf_twist_01_l", + "from_socket": "shin_tweak.L.002", + "to_socket": "calf_twist_01_l" + }, + { + "from_node": "Control Rig shin_tweak.L.002", + "to_node": "Source Rig calf_twist_01_l", + "from_socket": "shin_tweak.R.002", + "to_socket": "calf_twist_01_r" + }, + { + "from_node": "Control Rig shin_tweak.L", + "to_node": "Source Rig calf_correctiveRoot_l", + "from_socket": "shin_tweak.L", + "to_socket": "calf_correctiveRoot_l" + }, + { + "from_node": "Control Rig shin_tweak.L", + "to_node": "Source Rig calf_correctiveRoot_l", + "from_socket": "shin_tweak.R", + "to_socket": "calf_correctiveRoot_r" + }, + { + "from_node": "Control Rig thigh_tweak.L.002", + "to_node": "Source Rig thigh_twist_02_l", + "from_socket": "thigh_tweak.L.002", + "to_socket": "thigh_twist_02_l" + }, + { + "from_node": "Control Rig thigh_tweak.L.002", + "to_node": "Source Rig thigh_twist_02_l", + "from_socket": "thigh_tweak.R.002", + "to_socket": "thigh_twist_02_r" + }, + { + "from_node": "Control Rig thigh_tweak.L.001", + "to_node": "Source Rig thigh_twist_01_l", + "from_socket": "thigh_tweak.L.001", + "to_socket": "thigh_twist_01_l" + }, + { + "from_node": "Control Rig thigh_tweak.L.001", + "to_node": "Source Rig thigh_twist_01_l", + "from_socket": "thigh_tweak.R.001", + "to_socket": "thigh_twist_01_r" + }, + { + "from_node": "Control Rig root", + "to_node": "root", + "from_socket": "root", + "to_socket": "object" + }, + { + "from_node": "Control Rig shoulder.L", + "to_node": "Source Rig clavicle_l", + "from_socket": "shoulder.L", + "to_socket": "clavicle_l" + }, + { + "from_node": "Control Rig shoulder.L", + "to_node": "Source Rig clavicle_l", + "from_socket": "shoulder.R", + "to_socket": "clavicle_r" + }, + { + "from_node": "Control Rig breast.L", + "to_node": "Source Rig clavicle_pec_l", + "from_socket": "breast.L", + "to_socket": "clavicle_pec_l" + }, + { + "from_node": "Control Rig breast.L", + "to_node": "Source Rig clavicle_pec_l", + "from_socket": "breast.R", + "to_socket": "clavicle_pec_r" + }, + { + "from_node": "Control Rig neck", + "to_node": "Source Rig neck_02.001", + "from_socket": "neck", + "to_socket": "neck_02" + }, + { + "from_node": "Control Rig head", + "to_node": "Source Rig head", + "from_socket": "head", + "to_socket": "head" + }, + { + "from_node": "Control Rig spine_fk", + "to_node": "Source Rig spine_01", + "from_socket": "spine_fk", + "to_socket": "spine_01" + }, + { + "from_node": "Control Rig spine_fk.001", + "to_node": "Source Rig spine_02", + "from_socket": "spine_fk.001", + "to_socket": "spine_02" + }, + { + "from_node": "Control Rig spine_fk.002", + "to_node": "Source Rig spine_02.001", + "from_socket": "spine_fk.002", + "to_socket": "spine_02" + }, + { + "from_node": "Control Rig spine_fk.003", + "to_node": "Source Rig spine_03", + "from_socket": "spine_fk.003", + "to_socket": "spine_03" + }, + { + "from_node": "Control Rig spine_fk.007", + "to_node": "Source Rig spine_04", + "from_socket": "spine_fk.007", + "to_socket": "spine_04" + }, + { + "from_node": "Control Rig spine_fk.008", + "to_node": "Source Rig spine_05", + "from_socket": "spine_fk.008", + "to_socket": "spine_05" + }, + { + "from_node": "Control Rig tweak_spine", + "to_node": "Source Rig pelvis", + "from_socket": "tweak_spine", + "to_socket": "pelvis" + }, + { + "from_node": "Control Rig tweak_spine.001", + "to_node": "Source Rig spine_01.001", + "from_socket": "tweak_spine.001", + "to_socket": "spine_01" + }, + { + "from_node": "Control Rig hand_ik.R", + "to_node": "Source Rig ik_hand_r", + "from_socket": "hand_ik.R", + "to_socket": "ik_hand_r" + }, + { + "from_node": "Control Rig hand_ik.L", + "to_node": "Source Rig ik_hand_l", + "from_socket": "hand_ik.L", + "to_socket": "ik_hand_l" + }, + { + "from_node": "Control Rig foot_ik.R", + "to_node": "Source Rig ik_foot_r", + "from_socket": "foot_ik.R", + "to_socket": "ik_foot_r" + }, + { + "from_node": "Control Rig foot_ik.L", + "to_node": "Source Rig ik_foot_l", + "from_socket": "foot_ik.L", + "to_socket": "ik_foot_l" + } +] \ No newline at end of file diff --git a/src/addons/ue2rigify/resources/rig_templates/b4_0/male_mannequin_UE5/fk_to_source_nodes.json b/src/addons/ue2rigify/resources/rig_templates/b4_0/male_mannequin_UE5/fk_to_source_nodes.json new file mode 100644 index 00000000..98fb7525 --- /dev/null +++ b/src/addons/ue2rigify/resources/rig_templates/b4_0/male_mannequin_UE5/fk_to_source_nodes.json @@ -0,0 +1,2432 @@ +[ + { + "name": "Source Rig upperarm_l", + "label": "Source Rig upperarm_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 0.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "upperarm_l", + "upperarm_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig upper_arm_fk.L", + "label": "Control Rig upper_arm_fk.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 0.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upper_arm_fk.L", + "upper_arm_fk.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig upperarm_correctiveRoot_l", + "label": "Source Rig upperarm_correctiveRoot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 120.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "upperarm_correctiveRoot_l", + "upperarm_correctiveRoot_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig upper_arm_tweak.L", + "label": "Control Rig upper_arm_tweak.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 120.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upper_arm_tweak.L", + "upper_arm_tweak.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig lowerarm_l", + "label": "Source Rig lowerarm_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 240.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "lowerarm_l", + "lowerarm_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig forearm_fk.L", + "label": "Control Rig forearm_fk.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 240.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "forearm_fk.L", + "forearm_fk.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig hand_l", + "label": "Source Rig hand_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 360.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "hand_l", + "hand_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig hand_fk.L", + "label": "Control Rig hand_fk.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 360.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "hand_fk.L", + "hand_fk.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig lowerarm_correctiveRoot_l", + "label": "Source Rig lowerarm_correctiveRoot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 480.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "lowerarm_correctiveRoot_l", + "lowerarm_correctiveRoot_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig forearm_tweak.L", + "label": "Control Rig forearm_tweak.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 480.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "forearm_tweak.L", + "forearm_tweak.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig lowerarm_twist_02_l", + "label": "Source Rig lowerarm_twist_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 600.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "lowerarm_twist_02_l", + "lowerarm_twist_02_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig forearm_tweak.L.001", + "label": "Control Rig forearm_tweak.L.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 600.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "forearm_tweak.L.001", + "forearm_tweak.R.001" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig lowerarm_twist_01_l", + "label": "Source Rig lowerarm_twist_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 720.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "lowerarm_twist_01_l", + "lowerarm_twist_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig forearm_tweak.L.002", + "label": "Control Rig forearm_tweak.L.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 720.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "forearm_tweak.L.002", + "forearm_tweak.R.002" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig hand_l.001", + "label": "Source Rig hand_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 840.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "hand_l", + "hand_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig hand_tweak.L", + "label": "Control Rig hand_tweak.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 840.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "hand_tweak.L", + "hand_tweak.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig upperarm_twist_02_l", + "label": "Source Rig upperarm_twist_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 960.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "upperarm_twist_02_l", + "upperarm_twist_02_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig upper_arm_tweak.L.002", + "label": "Control Rig upper_arm_tweak.L.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 960.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upper_arm_tweak.L.002", + "upper_arm_tweak.R.002" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig upperarm_twist_01_l", + "label": "Source Rig upperarm_twist_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1080.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "upperarm_twist_01_l", + "upperarm_twist_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig upper_arm_tweak.L.001", + "label": "Control Rig upper_arm_tweak.L.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1080.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upper_arm_tweak.L.001", + "upper_arm_tweak.R.001" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig thumb_01_l", + "label": "Source Rig thumb_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1200.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "thumb_01_l", + "thumb_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig thumb.01.L", + "label": "Control Rig thumb.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1200.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thumb.01.L", + "thumb.01.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig thumb_02_l", + "label": "Source Rig thumb_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1320.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "thumb_02_l", + "thumb_02_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig thumb.02.L", + "label": "Control Rig thumb.02.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1320.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thumb.02.L", + "thumb.02.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig thumb_03_l", + "label": "Source Rig thumb_03_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1440.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "thumb_03_l", + "thumb_03_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig thumb.03.L", + "label": "Control Rig thumb.03.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1440.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thumb.03.L", + "thumb.03.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig index_01_l", + "label": "Source Rig index_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1560.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "index_01_l", + "index_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_index.01.L", + "label": "Control Rig f_index.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1560.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_index.01.L", + "f_index.01.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig index_02_l", + "label": "Source Rig index_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1680.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "index_02_l", + "index_02_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_index.02.L", + "label": "Control Rig f_index.02.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1680.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_index.02.L", + "f_index.02.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig index_03_l", + "label": "Source Rig index_03_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1800.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "index_03_l", + "index_03_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_index.03.L", + "label": "Control Rig f_index.03.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1800.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_index.03.L", + "f_index.03.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig middle_01_l", + "label": "Source Rig middle_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1920.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "middle_01_l", + "middle_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_middle.01.L", + "label": "Control Rig f_middle.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1920.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_middle.01.L", + "f_middle.01.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig middle_02_l", + "label": "Source Rig middle_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2040.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "middle_02_l", + "middle_02_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_middle.02.L", + "label": "Control Rig f_middle.02.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2040.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_middle.02.L", + "f_middle.02.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig middle_03_l", + "label": "Source Rig middle_03_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2160.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "middle_03_l", + "middle_03_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_middle.03.L", + "label": "Control Rig f_middle.03.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2160.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_middle.03.L", + "f_middle.03.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig ring_01_l", + "label": "Source Rig ring_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2280.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "ring_01_l", + "ring_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_ring.01.L", + "label": "Control Rig f_ring.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2280.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_ring.01.L", + "f_ring.01.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig ring_02_l", + "label": "Source Rig ring_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2400.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "ring_02_l", + "ring_02_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_ring.02.L", + "label": "Control Rig f_ring.02.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2400.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_ring.02.L", + "f_ring.02.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig ring_03_l", + "label": "Source Rig ring_03_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2520.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "ring_03_l", + "ring_03_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_ring.03.L", + "label": "Control Rig f_ring.03.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2520.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_ring.03.L", + "f_ring.03.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig pinky_01_l", + "label": "Source Rig pinky_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2640.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "pinky_01_l", + "pinky_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_pinky.01.L", + "label": "Control Rig f_pinky.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2640.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_pinky.01.L", + "f_pinky.01.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig pinky_02_l", + "label": "Source Rig pinky_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2760.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "pinky_02_l", + "pinky_02_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_pinky.02.L", + "label": "Control Rig f_pinky.02.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2760.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_pinky.02.L", + "f_pinky.02.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig pinky_03_l", + "label": "Source Rig pinky_03_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2880.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "pinky_03_l", + "pinky_03_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_pinky.03.L", + "label": "Control Rig f_pinky.03.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2880.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_pinky.03.L", + "f_pinky.03.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig thigh_l", + "label": "Source Rig thigh_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3000.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "thigh_l", + "thigh_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig thigh_fk.L", + "label": "Control Rig thigh_fk.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3000.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_fk.L", + "thigh_fk.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig thigh_correctiveRoot_l", + "label": "Source Rig thigh_correctiveRoot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3120.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "thigh_correctiveRoot_l", + "thigh_correctiveRoot_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig thigh_tweak.L", + "label": "Control Rig thigh_tweak.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3120.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_tweak.L", + "thigh_tweak.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig calf_l", + "label": "Source Rig calf_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3240.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "calf_l", + "calf_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig shin_fk.L", + "label": "Control Rig shin_fk.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3240.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "shin_fk.L", + "shin_fk.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig foot_l", + "label": "Source Rig foot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3360.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "foot_l", + "foot_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig foot_fk.L", + "label": "Control Rig foot_fk.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3360.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "foot_fk.L", + "foot_fk.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig foot_l.001", + "label": "Source Rig foot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3480.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "foot_l", + "foot_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig foot_tweak.L", + "label": "Control Rig foot_tweak.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3480.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "foot_tweak.L", + "foot_tweak.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig ball_l", + "label": "Source Rig ball_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3600.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "ball_l", + "ball_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig toe.L", + "label": "Control Rig toe.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3600.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "toe.L", + "toe.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig calf_twist_02_l", + "label": "Source Rig calf_twist_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3720.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "calf_twist_02_l", + "calf_twist_02_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig shin_tweak.L.001", + "label": "Control Rig shin_tweak.L.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3720.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "shin_tweak.L.001", + "shin_tweak.R.001" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig calf_twist_01_l", + "label": "Source Rig calf_twist_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3840.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "calf_twist_01_l", + "calf_twist_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig shin_tweak.L.002", + "label": "Control Rig shin_tweak.L.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3840.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "shin_tweak.L.002", + "shin_tweak.R.002" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig calf_correctiveRoot_l", + "label": "Source Rig calf_correctiveRoot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3960.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "calf_correctiveRoot_l", + "calf_correctiveRoot_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig shin_tweak.L", + "label": "Control Rig shin_tweak.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3960.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "shin_tweak.L", + "shin_tweak.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig thigh_twist_02_l", + "label": "Source Rig thigh_twist_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 4080.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "thigh_twist_02_l", + "thigh_twist_02_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig thigh_tweak.L.002", + "label": "Control Rig thigh_tweak.L.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 4080.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_tweak.L.002", + "thigh_tweak.R.002" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig thigh_twist_01_l", + "label": "Source Rig thigh_twist_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 4200.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "thigh_twist_01_l", + "thigh_twist_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig thigh_tweak.L.001", + "label": "Control Rig thigh_tweak.L.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 4200.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_tweak.L.001", + "thigh_tweak.R.001" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig root", + "label": "Control Rig root", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 4320.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "root" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "root", + "label": "root", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 299.52642822265625, + 4312.6982421875 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "object" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig clavicle_l", + "label": "Source Rig clavicle_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 305.962646484375, + 4413.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "clavicle_l", + "clavicle_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig clavicle_pec_l", + "label": "Source Rig clavicle_pec_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 305.962646484375, + 4533.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "clavicle_pec_l", + "clavicle_pec_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig breast.L", + "label": "Control Rig breast.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -294.037353515625, + 4533.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "breast.L", + "breast.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig shoulder.L", + "label": "Control Rig shoulder.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -294.037353515625, + 4413.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "shoulder.L", + "shoulder.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig neck_02.001", + "label": "Source Rig neck_02", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 6333.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "neck_02" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig neck", + "label": "Control Rig neck", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 6333.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "neck" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig head", + "label": "Source Rig head", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 6453.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "head" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig head", + "label": "Control Rig head", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 6453.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "head" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig spine_01", + "label": "Source Rig spine_01", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 6573.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "spine_01" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig spine_fk", + "label": "Control Rig spine_fk", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 6573.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_fk" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig spine_02", + "label": "Source Rig spine_02", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 6693.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "spine_02" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig spine_fk.001", + "label": "Control Rig spine_fk.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 6693.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_fk.001" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig spine_02.001", + "label": "Source Rig spine_02", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 6813.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "spine_02" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig spine_fk.002", + "label": "Control Rig spine_fk.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 6813.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_fk.002" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig spine_03", + "label": "Source Rig spine_03", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 6933.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "spine_03" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig spine_fk.003", + "label": "Control Rig spine_fk.003", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 6933.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_fk.003" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig spine_04", + "label": "Source Rig spine_04", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 7053.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "spine_04" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig spine_fk.007", + "label": "Control Rig spine_fk.007", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 7053.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_fk.007" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig spine_05", + "label": "Source Rig spine_05", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 7173.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "spine_05" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig spine_fk.008", + "label": "Control Rig spine_fk.008", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 7173.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_fk.008" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig pelvis", + "label": "Source Rig pelvis", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 7293.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "pelvis" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig tweak_spine", + "label": "Control Rig tweak_spine", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 7293.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "tweak_spine" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig spine_01.001", + "label": "Source Rig spine_01", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 7413.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "spine_01" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig tweak_spine.001", + "label": "Control Rig tweak_spine.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 7413.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "tweak_spine.001" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig ik_hand_l", + "label": "Source Rig ik_hand_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.4825134277344, + -114.02925872802734 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "ik_hand_l" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig ik_hand_r", + "label": "Source Rig ik_hand_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 293.60650634765625, + -181.3875274658203 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "ik_hand_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig ik_hand_gun", + "label": "Source Rig ik_hand_gun", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 299.1072998046875, + -270.7403564453125 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "ik_hand_gun" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig hand_ik.R", + "label": "Control Rig hand_ik.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -255.10076904296875, + -186.26626586914062 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "hand_ik.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig hand_ik.L", + "label": "Control Rig hand_ik.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -257.85107421875, + -118.907958984375 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "hand_ik.L" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig ik_foot_l", + "label": "Source Rig ik_foot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 305.98333740234375, + -333.35479736328125 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "ik_foot_l" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig ik_foot_r", + "label": "Source Rig ik_foot_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 301.8578186035156, + -400.71307373046875 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "ik_foot_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig foot_ik.R", + "label": "Control Rig foot_ik.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -241.34866333007812, + -399.33843994140625 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "foot_ik.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig foot_ik.L", + "label": "Control Rig foot_ik.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -228.97177124023438, + -325.1068115234375 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "foot_ik.L" + ], + "mode": "FK_TO_SOURCE" + } +] \ No newline at end of file diff --git a/src/addons/ue2rigify/resources/rig_templates/b4_0/male_mannequin_UE5/metarig.py b/src/addons/ue2rigify/resources/rig_templates/b4_0/male_mannequin_UE5/metarig.py new file mode 100644 index 00000000..1de615e1 --- /dev/null +++ b/src/addons/ue2rigify/resources/rig_templates/b4_0/male_mannequin_UE5/metarig.py @@ -0,0 +1,1200 @@ +import bpy + +from rna_prop_ui import rna_idprop_ui_create + +from mathutils import Color + + +def create(obj): # noqa + # generated by rigify.utils.write_metarig + bpy.ops.object.mode_set(mode='EDIT') + arm = obj.data + + for i in range(6): + arm.rigify_colors.add() + + arm.rigify_colors[0].name = "Root" + arm.rigify_colors[0].active = Color((0.5490, 1.0000, 1.0000)) + arm.rigify_colors[0].normal = Color((0.4353, 0.1843, 0.4157)) + arm.rigify_colors[0].select = Color((0.3137, 0.7843, 1.0000)) + arm.rigify_colors[0].standard_colors_lock = True + arm.rigify_colors[1].name = "IK" + arm.rigify_colors[1].active = Color((0.5490, 1.0000, 1.0000)) + arm.rigify_colors[1].normal = Color((0.6039, 0.0000, 0.0000)) + arm.rigify_colors[1].select = Color((0.3137, 0.7843, 1.0000)) + arm.rigify_colors[1].standard_colors_lock = True + arm.rigify_colors[2].name = "Special" + arm.rigify_colors[2].active = Color((0.5490, 1.0000, 1.0000)) + arm.rigify_colors[2].normal = Color((0.9569, 0.7882, 0.0471)) + arm.rigify_colors[2].select = Color((0.3137, 0.7843, 1.0000)) + arm.rigify_colors[2].standard_colors_lock = True + arm.rigify_colors[3].name = "Tweak" + arm.rigify_colors[3].active = Color((0.5490, 1.0000, 1.0000)) + arm.rigify_colors[3].normal = Color((0.0392, 0.2118, 0.5804)) + arm.rigify_colors[3].select = Color((0.3137, 0.7843, 1.0000)) + arm.rigify_colors[3].standard_colors_lock = True + arm.rigify_colors[4].name = "FK" + arm.rigify_colors[4].active = Color((0.5490, 1.0000, 1.0000)) + arm.rigify_colors[4].normal = Color((0.1176, 0.5686, 0.0353)) + arm.rigify_colors[4].select = Color((0.3137, 0.7843, 1.0000)) + arm.rigify_colors[4].standard_colors_lock = True + arm.rigify_colors[5].name = "Extra" + arm.rigify_colors[5].active = Color((0.5490, 1.0000, 1.0000)) + arm.rigify_colors[5].normal = Color((0.9686, 0.2510, 0.0941)) + arm.rigify_colors[5].select = Color((0.3137, 0.7843, 1.0000)) + arm.rigify_colors[5].standard_colors_lock = True + + bone_collections = {} + + for bcoll in list(arm.collections): + arm.collections.remove(bcoll) + + def add_bone_collection(name, *, ui_row=0, ui_title='', sel_set=False, color_set_id=0): + new_bcoll = arm.collections.new(name) + new_bcoll.rigify_ui_row = ui_row + new_bcoll.rigify_ui_title = ui_title + new_bcoll.rigify_sel_set = sel_set + new_bcoll.rigify_color_set_id = color_set_id + bone_collections[name] = new_bcoll + + def assign_bone_collections(pose_bone, *coll_names): + assert not len(pose_bone.bone.collections) + for name in coll_names: + bone_collections[name].assign(pose_bone) + + def assign_bone_collection_refs(params, attr_name, *coll_names): + ref_list = getattr(params, attr_name + '_coll_refs', None) + if ref_list is not None: + for name in coll_names: + ref_list.add().set_collection(bone_collections[name]) + + add_bone_collection('Face', ui_row=1, color_set_id=5) + add_bone_collection('Face (Primary)', ui_row=2, color_set_id=2) + add_bone_collection('Face (Secondary)', ui_row=2, color_set_id=3) + add_bone_collection('Torso', ui_row=3, color_set_id=3) + add_bone_collection('Torso (Tweak)', ui_row=4, color_set_id=4) + add_bone_collection('Fingers', ui_row=5, color_set_id=6) + add_bone_collection('Fingers (Detail)', ui_row=6, color_set_id=5) + add_bone_collection('Arm.L (IK)', ui_row=7, color_set_id=2) + add_bone_collection('Arm.L (FK)', ui_row=8, color_set_id=5) + add_bone_collection('Arm.L (Tweak)', ui_row=9, color_set_id=4) + add_bone_collection('Arm.R (IK)', ui_row=7, color_set_id=2) + add_bone_collection('Arm.R (FK)', ui_row=8, color_set_id=5) + add_bone_collection('Arm.R (Tweak)', ui_row=9, color_set_id=4) + add_bone_collection('Leg.L (IK)', ui_row=10, color_set_id=2) + add_bone_collection('Leg.L (FK)', ui_row=11, color_set_id=5) + add_bone_collection('Leg.L (Tweak)', ui_row=12, color_set_id=4) + add_bone_collection('Leg.R (IK)', ui_row=10, color_set_id=2) + add_bone_collection('Leg.R (FK)', ui_row=11, color_set_id=5) + add_bone_collection('Leg.R (Tweak)', ui_row=12, color_set_id=4) + add_bone_collection('Root', ui_row=15, color_set_id=1) + + bones = {} + + bone = arm.edit_bones.new('spine') + bone.head = 0.0000, -0.0228, 0.9590 + bone.tail = 0.0000, -0.0205, 0.9957 + bone.roll = 0.0000 + bone.use_connect = False + bones['spine'] = bone.name + bone = arm.edit_bones.new('spine.001') + bone.head = 0.0000, -0.0205, 0.9957 + bone.tail = 0.0000, -0.0332, 1.0624 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine']] + bones['spine.001'] = bone.name + bone = arm.edit_bones.new('thigh.L') + bone.head = 0.0997, -0.0254, 0.9354 + bone.tail = 0.1233, -0.0260, 0.5027 + bone.roll = -0.0566 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine']] + bones['thigh.L'] = bone.name + bone = arm.edit_bones.new('thigh.R') + bone.head = -0.0997, -0.0254, 0.9354 + bone.tail = -0.1233, -0.0260, 0.5027 + bone.roll = 0.0566 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine']] + bones['thigh.R'] = bone.name + bone = arm.edit_bones.new('spine.002') + bone.head = 0.0000, -0.0332, 1.0624 + bone.tail = 0.0000, -0.0425, 1.1342 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine.001']] + bones['spine.002'] = bone.name + bone = arm.edit_bones.new('shin.L') + bone.head = 0.1233, -0.0260, 0.5027 + bone.tail = 0.1409, 0.0099, 0.0824 + bone.roll = -0.0384 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thigh.L']] + bones['shin.L'] = bone.name + bone = arm.edit_bones.new('shin.R') + bone.head = -0.1233, -0.0260, 0.5027 + bone.tail = -0.1409, 0.0099, 0.0824 + bone.roll = 0.0384 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thigh.R']] + bones['shin.R'] = bone.name + bone = arm.edit_bones.new('spine.003') + bone.head = 0.0000, -0.0425, 1.1342 + bone.tail = 0.0000, -0.0372, 1.2193 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine.002']] + bones['spine.003'] = bone.name + bone = arm.edit_bones.new('foot.L') + bone.head = 0.1409, 0.0099, 0.0824 + bone.tail = 0.1578, -0.1393, 0.0075 + bone.roll = -0.4102 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['shin.L']] + bones['foot.L'] = bone.name + bone = arm.edit_bones.new('foot.R') + bone.head = -0.1409, 0.0099, 0.0824 + bone.tail = -0.1578, -0.1393, 0.0075 + bone.roll = 0.4102 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['shin.R']] + bones['foot.R'] = bone.name + bone = arm.edit_bones.new('spine.007') + bone.head = 0.0000, -0.0372, 1.2193 + bone.tail = 0.0000, -0.0053, 1.4110 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine.003']] + bones['spine.007'] = bone.name + bone = arm.edit_bones.new('toe.L') + bone.head = 0.1578, -0.1393, 0.0075 + bone.tail = 0.1682, -0.2388, 0.0117 + bone.roll = -0.7566 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['foot.L']] + bones['toe.L'] = bone.name + bone = arm.edit_bones.new('heel.02.L') + bone.head = 0.1439, 0.0103, 0.0000 + bone.tail = 0.2239, 0.0103, 0.0000 + bone.roll = -0.0000 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['foot.L']] + bones['heel.02.L'] = bone.name + bone = arm.edit_bones.new('toe.R') + bone.head = -0.1578, -0.1393, 0.0075 + bone.tail = -0.1682, -0.2388, 0.0117 + bone.roll = 0.7566 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['foot.R']] + bones['toe.R'] = bone.name + bone = arm.edit_bones.new('heel.02.R') + bone.head = -0.1439, 0.0103, 0.0000 + bone.tail = -0.2239, 0.0103, 0.0000 + bone.roll = 0.0000 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['foot.R']] + bones['heel.02.R'] = bone.name + bone = arm.edit_bones.new('spine.008') + bone.head = 0.0000, -0.0053, 1.4110 + bone.tail = 0.0000, 0.0157, 1.5280 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine.007']] + bones['spine.008'] = bone.name + bone = arm.edit_bones.new('spine.004') + bone.head = 0.0000, 0.0157, 1.5280 + bone.tail = 0.0000, 0.0035, 1.5777 + bone.roll = 0.0000 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine.008']] + bones['spine.004'] = bone.name + bone = arm.edit_bones.new('shoulder.L') + bone.head = 0.0143, 0.0174, 1.4630 + bone.tail = 0.1901, 0.0256, 1.4358 + bone.roll = 0.4433 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine.008']] + bones['shoulder.L'] = bone.name + bone = arm.edit_bones.new('shoulder.R') + bone.head = -0.0143, 0.0174, 1.4630 + bone.tail = -0.1901, 0.0256, 1.4358 + bone.roll = -0.4433 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine.008']] + bones['shoulder.R'] = bone.name + bone = arm.edit_bones.new('breast.L') + bone.head = 0.0983, -0.1161, 1.3339 + bone.tail = 0.1165, -0.2435, 1.3375 + bone.roll = -0.3953 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine.008']] + bones['breast.L'] = bone.name + bone = arm.edit_bones.new('breast.R') + bone.head = -0.0983, -0.1161, 1.3339 + bone.tail = -0.1165, -0.2435, 1.3375 + bone.roll = 0.3953 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine.008']] + bones['breast.R'] = bone.name + bone = arm.edit_bones.new('spine.005') + bone.head = 0.0000, 0.0035, 1.5777 + bone.tail = 0.0000, -0.0066, 1.6258 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine.004']] + bones['spine.005'] = bone.name + bone = arm.edit_bones.new('upper_arm.L') + bone.head = 0.1901, 0.0256, 1.4358 + bone.tail = 0.3501, 0.0191, 1.2089 + bone.roll = 2.6290 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['shoulder.L']] + bones['upper_arm.L'] = bone.name + bone = arm.edit_bones.new('upper_arm.R') + bone.head = -0.1901, 0.0256, 1.4358 + bone.tail = -0.3501, 0.0191, 1.2089 + bone.roll = -2.6290 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['shoulder.R']] + bones['upper_arm.R'] = bone.name + bone = arm.edit_bones.new('spine.006') + bone.head = 0.0000, -0.0066, 1.6258 + bone.tail = 0.0000, -0.0017, 1.8234 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine.005']] + bones['spine.006'] = bone.name + bone = arm.edit_bones.new('forearm.L') + bone.head = 0.3501, 0.0191, 1.2089 + bone.tail = 0.4777, -0.1570, 1.0447 + bone.roll = 2.6064 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['upper_arm.L']] + bones['forearm.L'] = bone.name + bone = arm.edit_bones.new('forearm.R') + bone.head = -0.3501, 0.0191, 1.2089 + bone.tail = -0.4777, -0.1570, 1.0447 + bone.roll = -2.6064 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['upper_arm.R']] + bones['forearm.R'] = bone.name + bone = arm.edit_bones.new('hand.L') + bone.head = 0.4777, -0.1570, 1.0447 + bone.tail = 0.5265, -0.2198, 0.9922 + bone.roll = 2.5081 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['forearm.L']] + bones['hand.L'] = bone.name + bone = arm.edit_bones.new('hand.R') + bone.head = -0.4777, -0.1570, 1.0447 + bone.tail = -0.5265, -0.2198, 0.9922 + bone.roll = -2.5081 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['forearm.R']] + bones['hand.R'] = bone.name + bone = arm.edit_bones.new('palm.01.L') + bone.head = 0.4814, -0.1970, 1.0323 + bone.tail = 0.5053, -0.2373, 0.9968 + bone.roll = -1.5887 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.L']] + bones['palm.01.L'] = bone.name + bone = arm.edit_bones.new('palm.02.L') + bone.head = 0.4969, -0.1813, 1.0292 + bone.tail = 0.5265, -0.2198, 0.9922 + bone.roll = -1.8698 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.L']] + bones['palm.02.L'] = bone.name + bone = arm.edit_bones.new('palm.03.L') + bone.head = 0.5033, -0.1713, 1.0240 + bone.tail = 0.5369, -0.1978, 0.9872 + bone.roll = -2.2180 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.L']] + bones['palm.03.L'] = bone.name + bone = arm.edit_bones.new('palm.04.L') + bone.head = 0.5095, -0.1607, 1.0190 + bone.tail = 0.5354, -0.1763, 0.9797 + bone.roll = -2.1607 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.L']] + bones['palm.04.L'] = bone.name + bone = arm.edit_bones.new('palm.01.R') + bone.head = -0.4814, -0.1970, 1.0323 + bone.tail = -0.5053, -0.2373, 0.9968 + bone.roll = 1.5887 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.R']] + bones['palm.01.R'] = bone.name + bone = arm.edit_bones.new('palm.02.R') + bone.head = -0.4969, -0.1813, 1.0292 + bone.tail = -0.5265, -0.2198, 0.9922 + bone.roll = 1.8698 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.R']] + bones['palm.02.R'] = bone.name + bone = arm.edit_bones.new('palm.03.R') + bone.head = -0.5033, -0.1713, 1.0240 + bone.tail = -0.5369, -0.1978, 0.9872 + bone.roll = 2.2180 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.R']] + bones['palm.03.R'] = bone.name + bone = arm.edit_bones.new('palm.04.R') + bone.head = -0.5095, -0.1607, 1.0190 + bone.tail = -0.5354, -0.1763, 0.9797 + bone.roll = 2.1607 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.R']] + bones['palm.04.R'] = bone.name + bone = arm.edit_bones.new('palm.01.R.001') + bone.head = -0.4449, -0.2112, 0.9834 + bone.tail = -0.4688, -0.2515, 0.9479 + bone.roll = 1.7205 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.R']] + bones['palm.01.R.001'] = bone.name + bone = arm.edit_bones.new('f_index.01.L') + bone.head = 0.5053, -0.2373, 0.9968 + bone.tail = 0.5099, -0.2594, 0.9628 + bone.roll = -1.0508 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.01.L']] + bones['f_index.01.L'] = bone.name + bone = arm.edit_bones.new('thumb.01.L') + bone.head = 0.4623, -0.1850, 1.0296 + bone.tail = 0.4519, -0.2222, 1.0091 + bone.roll = 2.0516 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.01.L']] + bones['thumb.01.L'] = bone.name + bone = arm.edit_bones.new('f_middle.01.L') + bone.head = 0.5265, -0.2198, 0.9922 + bone.tail = 0.5297, -0.2427, 0.9460 + bone.roll = -1.0957 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.02.L']] + bones['f_middle.01.L'] = bone.name + bone = arm.edit_bones.new('f_ring.01.L') + bone.head = 0.5369, -0.1978, 0.9872 + bone.tail = 0.5447, -0.2169, 0.9419 + bone.roll = -1.4254 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.03.L']] + bones['f_ring.01.L'] = bone.name + bone = arm.edit_bones.new('f_pinky.01.L') + bone.head = 0.5354, -0.1763, 0.9797 + bone.tail = 0.5455, -0.1876, 0.9447 + bone.roll = -1.7761 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.04.L']] + bones['f_pinky.01.L'] = bone.name + bone = arm.edit_bones.new('f_index.01.R') + bone.head = -0.5053, -0.2373, 0.9968 + bone.tail = -0.5099, -0.2594, 0.9628 + bone.roll = 1.0508 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.01.R']] + bones['f_index.01.R'] = bone.name + bone = arm.edit_bones.new('thumb.01.R') + bone.head = -0.4623, -0.1850, 1.0296 + bone.tail = -0.4519, -0.2222, 1.0091 + bone.roll = -2.0516 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.01.R']] + bones['thumb.01.R'] = bone.name + bone = arm.edit_bones.new('f_middle.01.R') + bone.head = -0.5265, -0.2198, 0.9922 + bone.tail = -0.5297, -0.2427, 0.9460 + bone.roll = 1.0957 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.02.R']] + bones['f_middle.01.R'] = bone.name + bone = arm.edit_bones.new('f_ring.01.R') + bone.head = -0.5369, -0.1978, 0.9872 + bone.tail = -0.5447, -0.2169, 0.9419 + bone.roll = 1.4254 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.03.R']] + bones['f_ring.01.R'] = bone.name + bone = arm.edit_bones.new('f_pinky.01.R') + bone.head = -0.5354, -0.1763, 0.9797 + bone.tail = -0.5455, -0.1876, 0.9447 + bone.roll = 1.7761 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.04.R']] + bones['f_pinky.01.R'] = bone.name + bone = arm.edit_bones.new('f_index.02.L') + bone.head = 0.5099, -0.2594, 0.9628 + bone.tail = 0.5081, -0.2693, 0.9389 + bone.roll = -0.7441 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_index.01.L']] + bones['f_index.02.L'] = bone.name + bone = arm.edit_bones.new('thumb.02.L') + bone.head = 0.4519, -0.2222, 1.0091 + bone.tail = 0.4505, -0.2423, 0.9857 + bone.roll = 0.3206 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thumb.01.L']] + bones['thumb.02.L'] = bone.name + bone = arm.edit_bones.new('f_middle.02.L') + bone.head = 0.5297, -0.2427, 0.9460 + bone.tail = 0.5239, -0.2488, 0.9228 + bone.roll = -0.4900 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_middle.01.L']] + bones['f_middle.02.L'] = bone.name + bone = arm.edit_bones.new('f_ring.02.L') + bone.head = 0.5447, -0.2169, 0.9419 + bone.tail = 0.5415, -0.2225, 0.9201 + bone.roll = -0.9368 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_ring.01.L']] + bones['f_ring.02.L'] = bone.name + bone = arm.edit_bones.new('f_pinky.02.L') + bone.head = 0.5455, -0.1876, 0.9447 + bone.tail = 0.5436, -0.1920, 0.9248 + bone.roll = -1.2561 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_pinky.01.L']] + bones['f_pinky.02.L'] = bone.name + bone = arm.edit_bones.new('f_index.02.R') + bone.head = -0.5099, -0.2594, 0.9628 + bone.tail = -0.5081, -0.2693, 0.9389 + bone.roll = 0.7441 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_index.01.R']] + bones['f_index.02.R'] = bone.name + bone = arm.edit_bones.new('thumb.02.R') + bone.head = -0.4519, -0.2222, 1.0091 + bone.tail = -0.4505, -0.2423, 0.9857 + bone.roll = -0.3206 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thumb.01.R']] + bones['thumb.02.R'] = bone.name + bone = arm.edit_bones.new('f_middle.02.R') + bone.head = -0.5297, -0.2427, 0.9460 + bone.tail = -0.5239, -0.2488, 0.9228 + bone.roll = 0.4900 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_middle.01.R']] + bones['f_middle.02.R'] = bone.name + bone = arm.edit_bones.new('f_ring.02.R') + bone.head = -0.5447, -0.2169, 0.9419 + bone.tail = -0.5415, -0.2225, 0.9201 + bone.roll = 0.9368 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_ring.01.R']] + bones['f_ring.02.R'] = bone.name + bone = arm.edit_bones.new('f_pinky.02.R') + bone.head = -0.5455, -0.1876, 0.9447 + bone.tail = -0.5436, -0.1920, 0.9248 + bone.roll = 1.2561 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_pinky.01.R']] + bones['f_pinky.02.R'] = bone.name + bone = arm.edit_bones.new('f_index.03.L') + bone.head = 0.5081, -0.2693, 0.9389 + bone.tail = 0.5046, -0.2767, 0.9113 + bone.roll = -0.5305 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_index.02.L']] + bones['f_index.03.L'] = bone.name + bone = arm.edit_bones.new('thumb.03.L') + bone.head = 0.4505, -0.2423, 0.9857 + bone.tail = 0.4540, -0.2516, 0.9611 + bone.roll = 0.1726 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thumb.02.L']] + bones['thumb.03.L'] = bone.name + bone = arm.edit_bones.new('f_middle.03.L') + bone.head = 0.5239, -0.2488, 0.9228 + bone.tail = 0.5176, -0.2536, 0.8910 + bone.roll = -0.5997 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_middle.02.L']] + bones['f_middle.03.L'] = bone.name + bone = arm.edit_bones.new('f_ring.03.L') + bone.head = 0.5415, -0.2225, 0.9201 + bone.tail = 0.5326, -0.2269, 0.8878 + bone.roll = -0.7870 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_ring.02.L']] + bones['f_ring.03.L'] = bone.name + bone = arm.edit_bones.new('f_pinky.03.L') + bone.head = 0.5436, -0.1920, 0.9248 + bone.tail = 0.5390, -0.1957, 0.9013 + bone.roll = -1.1811 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_pinky.02.L']] + bones['f_pinky.03.L'] = bone.name + bone = arm.edit_bones.new('f_index.03.R') + bone.head = -0.5081, -0.2693, 0.9389 + bone.tail = -0.5046, -0.2767, 0.9113 + bone.roll = 0.5305 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_index.02.R']] + bones['f_index.03.R'] = bone.name + bone = arm.edit_bones.new('thumb.03.R') + bone.head = -0.4505, -0.2423, 0.9857 + bone.tail = -0.4540, -0.2516, 0.9611 + bone.roll = -0.1726 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thumb.02.R']] + bones['thumb.03.R'] = bone.name + bone = arm.edit_bones.new('f_middle.03.R') + bone.head = -0.5239, -0.2488, 0.9228 + bone.tail = -0.5176, -0.2536, 0.8910 + bone.roll = 0.5997 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_middle.02.R']] + bones['f_middle.03.R'] = bone.name + bone = arm.edit_bones.new('f_ring.03.R') + bone.head = -0.5415, -0.2225, 0.9201 + bone.tail = -0.5326, -0.2269, 0.8878 + bone.roll = 0.7870 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_ring.02.R']] + bones['f_ring.03.R'] = bone.name + bone = arm.edit_bones.new('f_pinky.03.R') + bone.head = -0.5436, -0.1920, 0.9248 + bone.tail = -0.5390, -0.1957, 0.9013 + bone.roll = 1.1811 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_pinky.02.R']] + bones['f_pinky.03.R'] = bone.name + + bpy.ops.object.mode_set(mode='OBJECT') + pbone = obj.pose.bones[bones['spine']] + pbone.rigify_type = 'spines.basic_spine' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Torso (Tweak)') + assign_bone_collection_refs(pbone.rigify_parameters, 'fk', 'Torso (Tweak)') + pbone = obj.pose.bones[bones['spine.001']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + pbone = obj.pose.bones[bones['thigh.L']] + pbone.rigify_type = 'limbs.super_limb' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.L (IK)') + try: + pbone.rigify_parameters.limb_type = 'leg' + except AttributeError: + pass + try: + pbone.rigify_parameters.segments = 3 + except AttributeError: + pass + assign_bone_collection_refs(pbone.rigify_parameters, 'fk', 'Leg.L (FK)') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Leg.L (Tweak)') + pbone = obj.pose.bones[bones['thigh.R']] + pbone.rigify_type = 'limbs.super_limb' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.R (IK)') + try: + pbone.rigify_parameters.limb_type = 'leg' + except AttributeError: + pass + try: + pbone.rigify_parameters.segments = 3 + except AttributeError: + pass + assign_bone_collection_refs(pbone.rigify_parameters, 'fk', 'Leg.R (FK)') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Leg.R (Tweak)') + pbone = obj.pose.bones[bones['spine.002']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + pbone = obj.pose.bones[bones['shin.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.L (IK)') + pbone = obj.pose.bones[bones['shin.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.R (IK)') + pbone = obj.pose.bones[bones['spine.003']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + pbone = obj.pose.bones[bones['foot.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.L (IK)') + pbone = obj.pose.bones[bones['foot.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.R (IK)') + pbone = obj.pose.bones[bones['spine.007']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + pbone = obj.pose.bones[bones['toe.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.L (IK)') + pbone = obj.pose.bones[bones['heel.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.L (IK)') + pbone = obj.pose.bones[bones['toe.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.R (IK)') + pbone = obj.pose.bones[bones['heel.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.R (IK)') + pbone = obj.pose.bones[bones['spine.008']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + pbone = obj.pose.bones[bones['spine.004']] + pbone.rigify_type = 'spines.super_head' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + try: + pbone.rigify_parameters.connect_chain = True + except AttributeError: + pass + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Torso (Tweak)') + pbone = obj.pose.bones[bones['shoulder.L']] + pbone.rigify_type = 'basic.super_copy' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Torso') + try: + pbone.rigify_parameters.make_widget = True + except AttributeError: + pass + try: + pbone.rigify_parameters.super_copy_widget_type = 'shoulder' + except AttributeError: + pass + pbone = obj.pose.bones[bones['shoulder.R']] + pbone.rigify_type = 'basic.super_copy' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Torso') + try: + pbone.rigify_parameters.make_widget = True + except AttributeError: + pass + try: + pbone.rigify_parameters.super_copy_widget_type = 'shoulder' + except AttributeError: + pass + pbone = obj.pose.bones[bones['breast.L']] + pbone.rigify_type = 'basic.super_copy' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Torso') + pbone = obj.pose.bones[bones['breast.R']] + pbone.rigify_type = 'basic.super_copy' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Torso') + pbone = obj.pose.bones[bones['spine.005']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + pbone = obj.pose.bones[bones['upper_arm.L']] + pbone.rigify_type = 'limbs.super_limb' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Arm.L (IK)') + try: + pbone.rigify_parameters.segments = 3 + except AttributeError: + pass + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Arm.L (Tweak)') + assign_bone_collection_refs(pbone.rigify_parameters, 'fk', 'Arm.L (FK)') + pbone = obj.pose.bones[bones['upper_arm.R']] + pbone.rigify_type = 'limbs.super_limb' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Arm.R (IK)') + try: + pbone.rigify_parameters.segments = 3 + except AttributeError: + pass + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Arm.R (Tweak)') + assign_bone_collection_refs(pbone.rigify_parameters, 'fk', 'Arm.R (FK)') + pbone = obj.pose.bones[bones['spine.006']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + pbone = obj.pose.bones[bones['forearm.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Arm.L (IK)') + pbone = obj.pose.bones[bones['forearm.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Arm.R (IK)') + pbone = obj.pose.bones[bones['hand.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Arm.L (IK)') + pbone = obj.pose.bones[bones['hand.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Arm.R (IK)') + pbone = obj.pose.bones[bones['palm.01.L']] + pbone.rigify_type = 'limbs.super_palm' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['palm.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['palm.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['palm.04.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['palm.01.R']] + pbone.rigify_type = 'limbs.super_palm' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['palm.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['palm.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['palm.04.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['palm.01.R.001']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_index.01.L']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['thumb.01.L']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_middle.01.L']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_ring.01.L']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_pinky.01.L']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_index.01.R']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['thumb.01.R']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_middle.01.R']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_ring.01.R']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_pinky.01.R']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_index.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['thumb.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_middle.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_ring.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_pinky.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_index.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['thumb.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_middle.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_ring.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_pinky.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_index.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['thumb.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_middle.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_ring.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_pinky.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_index.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['thumb.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_middle.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_ring.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_pinky.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + + bpy.ops.object.mode_set(mode='EDIT') + for bone in arm.edit_bones: + bone.select = False + bone.select_head = False + bone.select_tail = False + for b in bones: + bone = arm.edit_bones[bones[b]] + bone.select = True + bone.select_head = True + bone.select_tail = True + bone.bbone_x = bone.bbone_z = bone.length * 0.05 + arm.edit_bones.active = bone + + arm.collections.active_index = 0 + + return bones + + +if __name__ == "__main__": + create(bpy.context.active_object) diff --git a/src/addons/ue2rigify/resources/rig_templates/b4_0/male_mannequin_UE5/source_to_deform_links.json b/src/addons/ue2rigify/resources/rig_templates/b4_0/male_mannequin_UE5/source_to_deform_links.json new file mode 100644 index 00000000..c6d80599 --- /dev/null +++ b/src/addons/ue2rigify/resources/rig_templates/b4_0/male_mannequin_UE5/source_to_deform_links.json @@ -0,0 +1,548 @@ +[ + { + "from_node": "Source Rig upperarm_twist_01_l", + "to_node": "Control Rig DEF-upper_arm.L.001", + "from_socket": "upperarm_twist_01_l", + "to_socket": "DEF-upper_arm.L.001" + }, + { + "from_node": "Source Rig upperarm_twist_01_l", + "to_node": "Control Rig DEF-upper_arm.L.001", + "from_socket": "upperarm_twist_01_r", + "to_socket": "DEF-upper_arm.R.001" + }, + { + "from_node": "Source Rig upperarm_twist_02_l", + "to_node": "Control Rig DEF-upper_arm.L.002", + "from_socket": "upperarm_twist_02_l", + "to_socket": "DEF-upper_arm.L.002" + }, + { + "from_node": "Source Rig upperarm_twist_02_l", + "to_node": "Control Rig DEF-upper_arm.L.002", + "from_socket": "upperarm_twist_02_r", + "to_socket": "DEF-upper_arm.R.002" + }, + { + "from_node": "Source Rig lowerarm_l", + "to_node": "Control Rig DEF-forearm.L.001", + "from_socket": "lowerarm_l", + "to_socket": "DEF-forearm.L" + }, + { + "from_node": "Source Rig lowerarm_l", + "to_node": "Control Rig DEF-forearm.L.001", + "from_socket": "lowerarm_r", + "to_socket": "DEF-forearm.R" + }, + { + "from_node": "Source Rig upperarm_l", + "to_node": "Control Rig DEF-upper_arm.L.003", + "from_socket": "upperarm_l", + "to_socket": "DEF-upper_arm.L" + }, + { + "from_node": "Source Rig upperarm_l", + "to_node": "Control Rig DEF-upper_arm.L.003", + "from_socket": "upperarm_r", + "to_socket": "DEF-upper_arm.R" + }, + { + "from_node": "Source Rig upperarm_correctiveRoot_l.001", + "to_node": "Control Rig DEF-upper_arm.L.004", + "from_socket": "upperarm_correctiveRoot_l", + "to_socket": "DEF-upper_arm.L" + }, + { + "from_node": "Source Rig upperarm_correctiveRoot_l.001", + "to_node": "Control Rig DEF-upper_arm.L.004", + "from_socket": "upperarm_correctiveRoot_r", + "to_socket": "DEF-upper_arm.R" + }, + { + "from_node": "Source Rig hand_l", + "to_node": "Control Rig DEF-hand.L", + "from_socket": "hand_l", + "to_socket": "DEF-hand.L" + }, + { + "from_node": "Source Rig hand_l", + "to_node": "Control Rig DEF-hand.L", + "from_socket": "hand_r", + "to_socket": "DEF-hand.R" + }, + { + "from_node": "Source Rig lowerarm_twist_01_l", + "to_node": "Control Rig DEF-forearm.L.003", + "from_socket": "lowerarm_twist_01_l", + "to_socket": "DEF-forearm.L.002" + }, + { + "from_node": "Source Rig lowerarm_twist_01_l", + "to_node": "Control Rig DEF-forearm.L.003", + "from_socket": "lowerarm_twist_01_r", + "to_socket": "DEF-forearm.R.002" + }, + { + "from_node": "Source Rig lowerarm_twist_02_l", + "to_node": "Control Rig DEF-forearm.L.004", + "from_socket": "lowerarm_twist_02_l", + "to_socket": "DEF-forearm.L.001" + }, + { + "from_node": "Source Rig lowerarm_twist_02_l", + "to_node": "Control Rig DEF-forearm.L.004", + "from_socket": "lowerarm_twist_02_r", + "to_socket": "DEF-forearm.R.001" + }, + { + "from_node": "Source Rig thumb_01_l", + "to_node": "Control Rig DEF-thumb.01.L", + "from_socket": "thumb_01_l", + "to_socket": "DEF-thumb.01.L" + }, + { + "from_node": "Source Rig thumb_01_l", + "to_node": "Control Rig DEF-thumb.01.L", + "from_socket": "thumb_01_r", + "to_socket": "DEF-thumb.01.R" + }, + { + "from_node": "Source Rig thumb_02_l", + "to_node": "Control Rig DEF-thumb.02.L", + "from_socket": "thumb_02_l", + "to_socket": "DEF-thumb.02.L" + }, + { + "from_node": "Source Rig thumb_02_l", + "to_node": "Control Rig DEF-thumb.02.L", + "from_socket": "thumb_02_r", + "to_socket": "DEF-thumb.02.R" + }, + { + "from_node": "Source Rig thumb_03_l", + "to_node": "Control Rig DEF-thumb.03.L", + "from_socket": "thumb_03_l", + "to_socket": "DEF-thumb.03.L" + }, + { + "from_node": "Source Rig thumb_03_l", + "to_node": "Control Rig DEF-thumb.03.L", + "from_socket": "thumb_03_r", + "to_socket": "DEF-thumb.03.R" + }, + { + "from_node": "Source Rig index_metacarpal_l", + "to_node": "Control Rig DEF-palm.01.L", + "from_socket": "index_metacarpal_l", + "to_socket": "DEF-palm.01.L" + }, + { + "from_node": "Source Rig index_metacarpal_l", + "to_node": "Control Rig DEF-palm.01.L", + "from_socket": "index_metacarpal_r", + "to_socket": "DEF-palm.01.R" + }, + { + "from_node": "Source Rig index_01_l", + "to_node": "Control Rig DEF-f_index.01.L", + "from_socket": "index_01_l", + "to_socket": "DEF-f_index.01.L" + }, + { + "from_node": "Source Rig index_01_l", + "to_node": "Control Rig DEF-f_index.01.L", + "from_socket": "index_01_r", + "to_socket": "DEF-f_index.01.R" + }, + { + "from_node": "Source Rig index_02_l", + "to_node": "Control Rig DEF-f_index.02.L", + "from_socket": "index_02_l", + "to_socket": "DEF-f_index.02.L" + }, + { + "from_node": "Source Rig index_02_l", + "to_node": "Control Rig DEF-f_index.02.L", + "from_socket": "index_02_r", + "to_socket": "DEF-f_index.02.R" + }, + { + "from_node": "Source Rig index_03_l", + "to_node": "Control Rig DEF-f_index.03.L", + "from_socket": "index_03_l", + "to_socket": "DEF-f_index.03.L" + }, + { + "from_node": "Source Rig index_03_l", + "to_node": "Control Rig DEF-f_index.03.L", + "from_socket": "index_03_r", + "to_socket": "DEF-f_index.03.R" + }, + { + "from_node": "Source Rig middle_metacarpal_l", + "to_node": "Control Rig DEF-palm.02.L", + "from_socket": "middle_metacarpal_l", + "to_socket": "DEF-palm.02.L" + }, + { + "from_node": "Source Rig middle_metacarpal_l", + "to_node": "Control Rig DEF-palm.02.L", + "from_socket": "middle_metacarpal_r", + "to_socket": "DEF-palm.02.R" + }, + { + "from_node": "Source Rig middle_01_l", + "to_node": "Control Rig DEF-f_middle.01.L", + "from_socket": "middle_01_l", + "to_socket": "DEF-f_middle.01.L" + }, + { + "from_node": "Source Rig middle_01_l", + "to_node": "Control Rig DEF-f_middle.01.L", + "from_socket": "middle_01_r", + "to_socket": "DEF-f_middle.01.R" + }, + { + "from_node": "Source Rig middle_02_l", + "to_node": "Control Rig DEF-f_middle.02.L", + "from_socket": "middle_02_l", + "to_socket": "DEF-f_middle.02.L" + }, + { + "from_node": "Source Rig middle_02_l", + "to_node": "Control Rig DEF-f_middle.02.L", + "from_socket": "middle_02_r", + "to_socket": "DEF-f_middle.02.R" + }, + { + "from_node": "Source Rig middle_03_l", + "to_node": "Control Rig DEF-f_middle.03.L", + "from_socket": "middle_03_l", + "to_socket": "DEF-f_middle.03.L" + }, + { + "from_node": "Source Rig middle_03_l", + "to_node": "Control Rig DEF-f_middle.03.L", + "from_socket": "middle_03_r", + "to_socket": "DEF-f_middle.03.R" + }, + { + "from_node": "Source Rig ring_03_l", + "to_node": "Control Rig DEF-f_ring.03.L", + "from_socket": "ring_03_l", + "to_socket": "DEF-f_ring.03.L" + }, + { + "from_node": "Source Rig ring_03_l", + "to_node": "Control Rig DEF-f_ring.03.L", + "from_socket": "ring_03_r", + "to_socket": "DEF-f_ring.03.R" + }, + { + "from_node": "Source Rig thigh_l", + "to_node": "Control Rig DEF-thigh.L.001", + "from_socket": "thigh_l", + "to_socket": "DEF-thigh.L" + }, + { + "from_node": "Source Rig thigh_l", + "to_node": "Control Rig DEF-thigh.L.001", + "from_socket": "thigh_r", + "to_socket": "DEF-thigh.R" + }, + { + "from_node": "Source Rig lowerarm_correctiveRoot_l", + "to_node": "Control Rig DEF-forearm.L", + "from_socket": "lowerarm_correctiveRoot_l", + "to_socket": "DEF-forearm.L" + }, + { + "from_node": "Source Rig lowerarm_correctiveRoot_l", + "to_node": "Control Rig DEF-forearm.L", + "from_socket": "lowerarm_correctiveRoot_r", + "to_socket": "DEF-forearm.R" + }, + { + "from_node": "Source Rig thigh_twist_01_l", + "to_node": "Control Rig DEF-thigh.L.002", + "from_socket": "thigh_twist_01_l", + "to_socket": "DEF-thigh.L.001" + }, + { + "from_node": "Source Rig thigh_twist_01_r", + "to_node": "Control Rig DEF-thigh.R.001", + "from_socket": "thigh_twist_01_r", + "to_socket": "DEF-thigh.R.001" + }, + { + "from_node": "Source Rig thigh_twist_02_r", + "to_node": "Control Rig DEF-thigh.R.002", + "from_socket": "thigh_twist_02_r", + "to_socket": "DEF-thigh.R.002" + }, + { + "from_node": "Source Rig thigh_twist_02_l", + "to_node": "Control Rig DEF-thigh.L.003", + "from_socket": "thigh_twist_02_l", + "to_socket": "DEF-thigh.L.002" + }, + { + "from_node": "Source Rig calf_twist_02_l", + "to_node": "Control Rig DEF-shin.L.002", + "from_socket": "calf_twist_02_l", + "to_socket": "DEF-shin.L.001" + }, + { + "from_node": "Source Rig calf_twist_02_l", + "to_node": "Control Rig DEF-shin.L.002", + "from_socket": "calf_twist_02_r", + "to_socket": "DEF-shin.R.001" + }, + { + "from_node": "Source Rig calf_correctiveRoot_l.001", + "to_node": "Control Rig DEF-shin.L.003", + "from_socket": "calf_correctiveRoot_l", + "to_socket": "DEF-shin.L" + }, + { + "from_node": "Source Rig calf_correctiveRoot_l.001", + "to_node": "Control Rig DEF-shin.L.003", + "from_socket": "calf_correctiveRoot_r", + "to_socket": "DEF-shin.R" + }, + { + "from_node": "Source Rig calf_twist_01_l", + "to_node": "Control Rig DEF-shin.L.004", + "from_socket": "calf_twist_01_l", + "to_socket": "DEF-shin.L.002" + }, + { + "from_node": "Source Rig calf_twist_01_l", + "to_node": "Control Rig DEF-shin.L.004", + "from_socket": "calf_twist_01_r", + "to_socket": "DEF-shin.R.002" + }, + { + "from_node": "Source Rig foot_l", + "to_node": "Control Rig DEF-foot.L", + "from_socket": "foot_l", + "to_socket": "DEF-foot.L" + }, + { + "from_node": "Source Rig foot_l", + "to_node": "Control Rig DEF-foot.L", + "from_socket": "foot_r", + "to_socket": "DEF-foot.R" + }, + { + "from_node": "Source Rig ball_l", + "to_node": "Control Rig DEF-toe.L", + "from_socket": "ball_l", + "to_socket": "DEF-toe.L" + }, + { + "from_node": "Source Rig ball_l", + "to_node": "Control Rig DEF-toe.L", + "from_socket": "ball_r", + "to_socket": "DEF-toe.R" + }, + { + "from_node": "Source Rig calf_l.001", + "to_node": "Control Rig DEF-shin.L.001", + "from_socket": "calf_l", + "to_socket": "DEF-shin.L" + }, + { + "from_node": "Source Rig calf_l.001", + "to_node": "Control Rig DEF-shin.L.001", + "from_socket": "calf_r", + "to_socket": "DEF-shin.R" + }, + { + "from_node": "Source Rig thigh_correctiveRoot_l.001", + "to_node": "Control Rig DEF-thigh.L.004", + "from_socket": "thigh_correctiveRoot_l", + "to_socket": "DEF-thigh.L" + }, + { + "from_node": "Source Rig thigh_correctiveRoot_l.001", + "to_node": "Control Rig DEF-thigh.L.004", + "from_socket": "thigh_correctiveRoot_r", + "to_socket": "DEF-thigh.R" + }, + { + "from_node": "Source Rig pelvis", + "to_node": "Control Rig DEF-spine", + "from_socket": "pelvis", + "to_socket": "DEF-spine" + }, + { + "from_node": "Source Rig spine_01", + "to_node": "Control Rig DEF-spine.001", + "from_socket": "spine_01", + "to_socket": "DEF-spine.001" + }, + { + "from_node": "Source Rig spine_02", + "to_node": "Control Rig DEF-spine.002", + "from_socket": "spine_02", + "to_socket": "DEF-spine.002" + }, + { + "from_node": "Source Rig spine_03", + "to_node": "Control Rig DEF-spine.003", + "from_socket": "spine_03", + "to_socket": "DEF-spine.003" + }, + { + "from_node": "Source Rig spine_04", + "to_node": "Control Rig DEF-spine.007", + "from_socket": "spine_04", + "to_socket": "DEF-spine.007" + }, + { + "from_node": "Source Rig clavicle_pec_l", + "to_node": "Control Rig DEF-breast.L", + "from_socket": "clavicle_pec_l", + "to_socket": "DEF-breast.L" + }, + { + "from_node": "Source Rig clavicle_pec_l", + "to_node": "Control Rig DEF-breast.L", + "from_socket": "clavicle_pec_r", + "to_socket": "DEF-breast.R" + }, + { + "from_node": "Source Rig spine_05", + "to_node": "Control Rig DEF-spine.008", + "from_socket": "spine_05", + "to_socket": "DEF-spine.008" + }, + { + "from_node": "Source Rig clavicle_l", + "to_node": "Control Rig DEF-shoulder.L", + "from_socket": "clavicle_l", + "to_socket": "DEF-shoulder.L" + }, + { + "from_node": "Source Rig clavicle_l", + "to_node": "Control Rig DEF-shoulder.L", + "from_socket": "clavicle_r", + "to_socket": "DEF-shoulder.R" + }, + { + "from_node": "Source Rig neck_02", + "to_node": "Control Rig DEF-spine.005", + "from_socket": "neck_02", + "to_socket": "DEF-spine.005" + }, + { + "from_node": "Source Rig neck_01", + "to_node": "Control Rig DEF-spine.004", + "from_socket": "neck_01", + "to_socket": "DEF-spine.004" + }, + { + "from_node": "Source Rig head", + "to_node": "Control Rig DEF-spine.006", + "from_socket": "head", + "to_socket": "DEF-spine.006" + }, + { + "from_node": "root", + "to_node": "Control Rig root", + "from_socket": "object", + "to_socket": "root" + }, + { + "from_node": "Source Rig pinky_02_l", + "to_node": "Control Rig DEF-f_pinky.02.L", + "from_socket": "pinky_02_l", + "to_socket": "DEF-f_pinky.02.L" + }, + { + "from_node": "Source Rig pinky_02_l", + "to_node": "Control Rig DEF-f_pinky.02.L", + "from_socket": "pinky_02_r", + "to_socket": "DEF-f_pinky.02.R" + }, + { + "from_node": "Source Rig ring_01_l", + "to_node": "Control Rig DEF-f_ring.01.L.001", + "from_socket": "ring_01_l", + "to_socket": "DEF-f_ring.01.L" + }, + { + "from_node": "Source Rig ring_01_l", + "to_node": "Control Rig DEF-f_ring.01.L.001", + "from_socket": "ring_01_r", + "to_socket": "DEF-f_ring.01.R" + }, + { + "from_node": "Source Rig pinky_01_l", + "to_node": "Control Rig DEF-f_pinky.01.L", + "from_socket": "pinky_01_l", + "to_socket": "DEF-f_pinky.01.L" + }, + { + "from_node": "Source Rig pinky_01_l", + "to_node": "Control Rig DEF-f_pinky.01.L", + "from_socket": "pinky_01_r", + "to_socket": "DEF-f_pinky.01.R" + }, + { + "from_node": "Source Rig pinky_03_l", + "to_node": "Control Rig DEF-f_pinky.03.R", + "from_socket": "pinky_03_r", + "to_socket": "DEF-f_pinky.03.R" + }, + { + "from_node": "Source Rig pinky_03_l", + "to_node": "Control Rig DEF-f_pinky.03.R", + "from_socket": "pinky_03_l", + "to_socket": "DEF-f_pinky.03.L" + }, + { + "from_node": "Source Rig ik_hand_l", + "to_node": "Control Rig DEF-hand.L.001", + "from_socket": "ik_hand_l", + "to_socket": "DEF-hand.L" + }, + { + "from_node": "Source Rig ik_hand_r", + "to_node": "Control Rig DEF-hand.R", + "from_socket": "ik_hand_r", + "to_socket": "DEF-hand.R" + }, + { + "from_node": "Source Rig ik_hand_gun", + "to_node": "Control Rig DEF-hand.R.001", + "from_socket": "ik_hand_gun", + "to_socket": "DEF-hand.R" + }, + { + "from_node": "Source Rig ik_foot_l", + "to_node": "Control Rig DEF-foot.L.001", + "from_socket": "ik_foot_l", + "to_socket": "DEF-foot.L" + }, + { + "from_node": "Source Rig ik_foot_r", + "to_node": "Control Rig DEF-foot.R", + "from_socket": "ik_foot_r", + "to_socket": "DEF-foot.R" + }, + { + "from_node": "Source Rig ring_02_l", + "to_node": "Control Rig DEF-f_ring.02.R", + "from_socket": "ring_02_l", + "to_socket": "DEF-f_ring.02.L" + }, + { + "from_node": "Source Rig ring_02_l", + "to_node": "Control Rig DEF-f_ring.02.R", + "from_socket": "ring_02_r", + "to_socket": "DEF-f_ring.02.R" + } +] \ No newline at end of file diff --git a/src/addons/ue2rigify/resources/rig_templates/b4_0/male_mannequin_UE5/source_to_deform_nodes.json b/src/addons/ue2rigify/resources/rig_templates/b4_0/male_mannequin_UE5/source_to_deform_nodes.json new file mode 100644 index 00000000..b52451f7 --- /dev/null +++ b/src/addons/ue2rigify/resources/rig_templates/b4_0/male_mannequin_UE5/source_to_deform_nodes.json @@ -0,0 +1,2494 @@ +[ + { + "name": "Source Rig upperarm_twist_01_l", + "label": "Source Rig upperarm_twist_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 120.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upperarm_twist_01_l", + "upperarm_twist_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-upper_arm.L.001", + "label": "Control Rig DEF-upper_arm.L.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 120.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-upper_arm.L.001", + "DEF-upper_arm.R.001" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig upperarm_twist_02_l", + "label": "Source Rig upperarm_twist_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 240.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upperarm_twist_02_l", + "upperarm_twist_02_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-upper_arm.L.002", + "label": "Control Rig DEF-upper_arm.L.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 240.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-upper_arm.L.002", + "DEF-upper_arm.R.002" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig lowerarm_l", + "label": "Source Rig lowerarm_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 480.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "lowerarm_l", + "lowerarm_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-forearm.L.001", + "label": "Control Rig DEF-forearm.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 480.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-forearm.L", + "DEF-forearm.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig upperarm_l", + "label": "Source Rig upperarm_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 600.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upperarm_l", + "upperarm_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-upper_arm.L.003", + "label": "Control Rig DEF-upper_arm.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 600.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-upper_arm.L", + "DEF-upper_arm.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig upperarm_correctiveRoot_l.001", + "label": "Source Rig upperarm_correctiveRoot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 840.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upperarm_correctiveRoot_l", + "upperarm_correctiveRoot_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-upper_arm.L.004", + "label": "Control Rig DEF-upper_arm.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 840.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-upper_arm.L", + "DEF-upper_arm.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig hand_l", + "label": "Source Rig hand_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 960.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "hand_l", + "hand_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-hand.L", + "label": "Control Rig DEF-hand.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 960.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-hand.L", + "DEF-hand.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig lowerarm_twist_01_l", + "label": "Source Rig lowerarm_twist_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1080.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "lowerarm_twist_01_l", + "lowerarm_twist_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-forearm.L.003", + "label": "Control Rig DEF-forearm.L.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1080.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-forearm.L.002", + "DEF-forearm.R.002" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig lowerarm_twist_02_l", + "label": "Source Rig lowerarm_twist_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1200.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "lowerarm_twist_02_l", + "lowerarm_twist_02_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-forearm.L.004", + "label": "Control Rig DEF-forearm.L.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1200.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-forearm.L.001", + "DEF-forearm.R.001" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig thumb_01_l", + "label": "Source Rig thumb_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1320.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thumb_01_l", + "thumb_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-thumb.01.L", + "label": "Control Rig DEF-thumb.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1320.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thumb.01.L", + "DEF-thumb.01.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig thumb_02_l", + "label": "Source Rig thumb_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1440.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thumb_02_l", + "thumb_02_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-thumb.02.L", + "label": "Control Rig DEF-thumb.02.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1440.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thumb.02.L", + "DEF-thumb.02.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig thumb_03_l", + "label": "Source Rig thumb_03_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1560.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thumb_03_l", + "thumb_03_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-thumb.03.L", + "label": "Control Rig DEF-thumb.03.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1560.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thumb.03.L", + "DEF-thumb.03.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig index_metacarpal_l", + "label": "Source Rig index_metacarpal_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1680.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "index_metacarpal_l", + "index_metacarpal_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-palm.01.L", + "label": "Control Rig DEF-palm.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1680.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-palm.01.L", + "DEF-palm.01.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig index_01_l", + "label": "Source Rig index_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1800.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "index_01_l", + "index_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_index.01.L", + "label": "Control Rig DEF-f_index.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1800.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_index.01.L", + "DEF-f_index.01.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig index_02_l", + "label": "Source Rig index_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1920.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "index_02_l", + "index_02_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_index.02.L", + "label": "Control Rig DEF-f_index.02.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1920.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_index.02.L", + "DEF-f_index.02.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig index_03_l", + "label": "Source Rig index_03_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2040.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "index_03_l", + "index_03_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_index.03.L", + "label": "Control Rig DEF-f_index.03.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2040.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_index.03.L", + "DEF-f_index.03.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig middle_metacarpal_l", + "label": "Source Rig middle_metacarpal_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2160.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "middle_metacarpal_l", + "middle_metacarpal_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-palm.02.L", + "label": "Control Rig DEF-palm.02.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2160.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-palm.02.L", + "DEF-palm.02.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig middle_01_l", + "label": "Source Rig middle_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2280.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "middle_01_l", + "middle_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_middle.01.L", + "label": "Control Rig DEF-f_middle.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2280.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_middle.01.L", + "DEF-f_middle.01.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig middle_02_l", + "label": "Source Rig middle_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2400.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "middle_02_l", + "middle_02_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_middle.02.L", + "label": "Control Rig DEF-f_middle.02.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2400.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_middle.02.L", + "DEF-f_middle.02.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig middle_03_l", + "label": "Source Rig middle_03_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2520.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "middle_03_l", + "middle_03_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_middle.03.L", + "label": "Control Rig DEF-f_middle.03.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2520.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_middle.03.L", + "DEF-f_middle.03.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig ring_01_l", + "label": "Source Rig ring_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2640.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "ring_01_l", + "ring_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig ring_03_l", + "label": "Source Rig ring_03_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2880.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "ring_03_l", + "ring_03_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_ring.03.L", + "label": "Control Rig DEF-f_ring.03.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2880.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_ring.03.L", + "DEF-f_ring.03.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig thigh_l", + "label": "Source Rig thigh_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3480.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_l", + "thigh_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-thigh.L.001", + "label": "Control Rig DEF-thigh.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3480.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thigh.L", + "DEF-thigh.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig lowerarm_correctiveRoot_l", + "label": "Source Rig lowerarm_correctiveRoot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3600.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "lowerarm_correctiveRoot_l", + "lowerarm_correctiveRoot_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-forearm.L", + "label": "Control Rig DEF-forearm.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3600.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-forearm.L", + "DEF-forearm.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig thigh_twist_01_l", + "label": "Source Rig thigh_twist_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -281.4216003417969, + 4074.18212890625 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_twist_01_l" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-thigh.L.002", + "label": "Control Rig DEF-thigh.L.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 301.9412841796875, + 4069.910400390625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thigh.L.001" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig thigh_twist_01_r", + "label": "Source Rig thigh_twist_01_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -284.6238708496094, + 4002.360107421875 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_twist_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-thigh.R.001", + "label": "Control Rig DEF-thigh.R.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 307.329345703125, + 4002.27392578125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thigh.R.001" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-thigh.R.002", + "label": "Control Rig DEF-thigh.R.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 310.2611083984375, + 3933.42138671875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thigh.R.002" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig thigh_twist_02_r", + "label": "Source Rig thigh_twist_02_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -281.69219970703125, + 3936.43798828125 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_twist_02_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig thigh_twist_02_l", + "label": "Source Rig thigh_twist_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -289.0215759277344, + 4154.71484375 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_twist_02_l" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig calf_twist_02_l", + "label": "Source Rig calf_twist_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 4274.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "calf_twist_02_l", + "calf_twist_02_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-shin.L.002", + "label": "Control Rig DEF-shin.L.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 4274.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-shin.L.001", + "DEF-shin.R.001" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig calf_correctiveRoot_l.001", + "label": "Source Rig calf_correctiveRoot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 4394.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "calf_correctiveRoot_l", + "calf_correctiveRoot_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-shin.L.003", + "label": "Control Rig DEF-shin.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 4394.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-shin.L", + "DEF-shin.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig calf_twist_01_l", + "label": "Source Rig calf_twist_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 4514.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "calf_twist_01_l", + "calf_twist_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-shin.L.004", + "label": "Control Rig DEF-shin.L.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 4514.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-shin.L.002", + "DEF-shin.R.002" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig foot_l", + "label": "Source Rig foot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 4634.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "foot_l", + "foot_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-foot.L", + "label": "Control Rig DEF-foot.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 4634.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-foot.L", + "DEF-foot.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig ball_l", + "label": "Source Rig ball_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 4754.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "ball_l", + "ball_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-toe.L", + "label": "Control Rig DEF-toe.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 4754.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-toe.L", + "DEF-toe.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig calf_l.001", + "label": "Source Rig calf_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 4874.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "calf_l", + "calf_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-shin.L.001", + "label": "Control Rig DEF-shin.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 4874.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-shin.L", + "DEF-shin.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig thigh_correctiveRoot_l.001", + "label": "Source Rig thigh_correctiveRoot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 4994.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_correctiveRoot_l", + "thigh_correctiveRoot_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-thigh.L.004", + "label": "Control Rig DEF-thigh.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 4994.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thigh.L", + "DEF-thigh.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig pelvis", + "label": "Source Rig pelvis", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 5114.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "pelvis" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.001", + "label": "Control Rig DEF-spine.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 5234.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.001" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.002", + "label": "Control Rig DEF-spine.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 5354.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.002" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.003", + "label": "Control Rig DEF-spine.003", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 5474.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.003" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.007", + "label": "Control Rig DEF-spine.007", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 5594.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.007" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig clavicle_pec_l", + "label": "Source Rig clavicle_pec_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 5714.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "clavicle_pec_l", + "clavicle_pec_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-breast.L", + "label": "Control Rig DEF-breast.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 5714.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-breast.L", + "DEF-breast.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig spine_05", + "label": "Source Rig spine_05", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 5834.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_05" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.008", + "label": "Control Rig DEF-spine.008", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 5834.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.008" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig clavicle_l", + "label": "Source Rig clavicle_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 5954.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "clavicle_l", + "clavicle_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-shoulder.L", + "label": "Control Rig DEF-shoulder.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 5954.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-shoulder.L", + "DEF-shoulder.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig neck_02", + "label": "Source Rig neck_02", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 6074.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "neck_02" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.005", + "label": "Control Rig DEF-spine.005", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 6074.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.005" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig neck_01", + "label": "Source Rig neck_01", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 6194.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "neck_01" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.004", + "label": "Control Rig DEF-spine.004", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 6194.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.004" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig head", + "label": "Source Rig head", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 6314.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "head" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.006", + "label": "Control Rig DEF-spine.006", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 6314.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.006" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-thigh.L.003", + "label": "Control Rig DEF-thigh.L.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 298.5340881347656, + 4147.3037109375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thigh.L.002" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "root", + "label": "root", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -256.8031921386719, + 6428.2255859375 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "object" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig root", + "label": "Control Rig root", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 296.83050537109375, + 6425.21240234375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "root" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig spine_02", + "label": "Source Rig spine_02", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 5354.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_02" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig spine_03", + "label": "Source Rig spine_03", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 5474.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_03" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig spine_04", + "label": "Source Rig spine_04", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 5594.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_04" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig spine_01", + "label": "Source Rig spine_01", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 5234.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_01" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine", + "label": "Control Rig DEF-spine", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 298.4156799316406, + 5113.13134765625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig pinky_02_l", + "label": "Source Rig pinky_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3120.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "pinky_02_l", + "pinky_02_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig pinky_03_l", + "label": "Source Rig pinky_03_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3240.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "pinky_03_r", + "pinky_03_l" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_ring.01.L.001", + "label": "Control Rig DEF-f_ring.01.L.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 296.7509765625, + 2641.388427734375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_ring.01.L", + "DEF-f_ring.01.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_pinky.02.L", + "label": "Control Rig DEF-f_pinky.02.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 297.8045959472656, + 3123.689453125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_pinky.02.L", + "DEF-f_pinky.02.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig pinky_01_l", + "label": "Source Rig pinky_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3000.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "pinky_01_l", + "pinky_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_pinky.01.L", + "label": "Control Rig DEF-f_pinky.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 301.0512390136719, + 2999.224609375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_pinky.01.L", + "DEF-f_pinky.01.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_pinky.03.R", + "label": "Control Rig DEF-f_pinky.03.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 301.2749328613281, + 3243.97607421875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_pinky.03.R", + "DEF-f_pinky.03.L" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig ik_hand_l", + "label": "Source Rig ik_hand_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -248.22457885742188, + -49.42024230957031 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "ik_hand_l" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig ik_foot_l", + "label": "Source Rig ik_foot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -249.59979248046875, + -259.74298095703125 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "ik_foot_l" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig ik_foot_r", + "label": "Source Rig ik_foot_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -246.84939575195312, + -332.5998840332031 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "ik_foot_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig ik_hand_r", + "label": "Source Rig ik_hand_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -249.59979248046875, + -115.40389251708984 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "ik_hand_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig ik_hand_gun", + "label": "Source Rig ik_hand_gun", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -248.22459411621094, + -188.26075744628906 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "ik_hand_gun" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-hand.R.001", + "label": "Control Rig DEF-hand.R.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 270.2280578613281, + -192.38479614257812 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-hand.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-foot.L.001", + "label": "Control Rig DEF-foot.L.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 270.22802734375, + -267.9910583496094 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-foot.L" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-foot.R", + "label": "Control Rig DEF-foot.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 268.852783203125, + -335.3493347167969 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-foot.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-hand.L.001", + "label": "Control Rig DEF-hand.L.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 268.8526916503906, + -50.79493713378906 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-hand.L" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-hand.R", + "label": "Control Rig DEF-hand.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 268.85284423828125, + -119.52787017822266 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-hand.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig ring_02_l", + "label": "Source Rig ring_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2760.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "ring_02_l", + "ring_02_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_ring.02.R", + "label": "Control Rig DEF-f_ring.02.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 305.8134765625, + 2754.732666015625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_ring.02.R", + "DEF-f_ring.02.L" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + } +] \ No newline at end of file diff --git a/src/addons/ue2rigify/resources/rig_templates/b4_0/metahuman/control_metadata.json b/src/addons/ue2rigify/resources/rig_templates/b4_0/metahuman/control_metadata.json new file mode 100644 index 00000000..5bfd0a11 --- /dev/null +++ b/src/addons/ue2rigify/resources/rig_templates/b4_0/metahuman/control_metadata.json @@ -0,0 +1,2995 @@ +{ + "object": { + "show_in_front": false + }, + "armature": { + "show_names": false, + "show_bone_custom_shapes": true, + "show_bone_colors": true + }, + "bones": { + "root": { + "custom_shape": { + "name": "WGT-rig_root", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "VIS_upper_arm_ik_pole.L": { + "custom_shape": { + "name": "WGT-rig_VIS_upper_arm_ik_pole.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "VIS_upper_arm_ik_pole.R": { + "custom_shape": { + "name": "WGT-rig_VIS_upper_arm_ik_pole.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "VIS_thigh_ik_pole.L": { + "custom_shape": { + "name": "WGT-rig_VIS_thigh_ik_pole.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "VIS_thigh_ik_pole.R": { + "custom_shape": { + "name": "WGT-rig_VIS_thigh_ik_pole.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "torso": { + "custom_shape": { + "name": "WGT-rig_torso", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "hips": { + "custom_shape": { + "name": "WGT-rig_hips", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "chest": { + "custom_shape": { + "name": "WGT-rig_chest", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "spine_fk.001": { + "custom_shape": { + "name": "WGT-rig_spine_fk.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "spine_fk": { + "custom_shape": { + "name": "WGT-rig_spine_fk", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "tweak_spine": { + "custom_shape": { + "name": "WGT-rig_tweak_spine", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "toe.L": { + "custom_shape": { + "name": "WGT-rig_toe.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "foot_tweak.L": { + "custom_shape": { + "name": "WGT-rig_foot_tweak.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "shin_tweak.L": { + "custom_shape": { + "name": "WGT-rig_shin_tweak.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "shin_tweak.L.001": { + "custom_shape": { + "name": "WGT-rig_shin_tweak.L.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "shin_tweak.L.002": { + "custom_shape": { + "name": "WGT-rig_shin_tweak.L.002", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thigh_tweak.L.001": { + "custom_shape": { + "name": "WGT-rig_thigh_tweak.L.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thigh_tweak.L.002": { + "custom_shape": { + "name": "WGT-rig_thigh_tweak.L.002", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "toe.R": { + "custom_shape": { + "name": "WGT-rig_toe.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "foot_tweak.R": { + "custom_shape": { + "name": "WGT-rig_foot_tweak.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "shin_tweak.R": { + "custom_shape": { + "name": "WGT-rig_shin_tweak.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "shin_tweak.R.001": { + "custom_shape": { + "name": "WGT-rig_shin_tweak.R.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "shin_tweak.R.002": { + "custom_shape": { + "name": "WGT-rig_shin_tweak.R.002", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thigh_tweak.R.001": { + "custom_shape": { + "name": "WGT-rig_thigh_tweak.R.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thigh_tweak.R.002": { + "custom_shape": { + "name": "WGT-rig_thigh_tweak.R.002", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thigh_parent.L": { + "custom_shape": { + "name": "WGT-rig_thigh_parent.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thigh_fk.L": { + "custom_shape": { + "name": "WGT-rig_thigh_fk.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "shin_fk.L": { + "custom_shape": { + "name": "WGT-rig_shin_fk.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "foot_fk.L": { + "custom_shape": { + "name": "WGT-rig_foot_fk.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thigh_ik.L": { + "custom_shape": { + "name": "WGT-rig_thigh_ik.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thigh_tweak.L": { + "custom_shape": { + "name": "WGT-rig_thigh_tweak.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thigh_parent.R": { + "custom_shape": { + "name": "WGT-rig_thigh_parent.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thigh_fk.R": { + "custom_shape": { + "name": "WGT-rig_thigh_fk.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "shin_fk.R": { + "custom_shape": { + "name": "WGT-rig_shin_fk.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "foot_fk.R": { + "custom_shape": { + "name": "WGT-rig_foot_fk.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thigh_ik.R": { + "custom_shape": { + "name": "WGT-rig_thigh_ik.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thigh_tweak.R": { + "custom_shape": { + "name": "WGT-rig_thigh_tweak.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "tweak_spine.001": { + "custom_shape": { + "name": "WGT-rig_tweak_spine.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "spine_fk.002": { + "custom_shape": { + "name": "WGT-rig_spine_fk.002", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "tweak_spine.002": { + "custom_shape": { + "name": "WGT-rig_tweak_spine.002", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "spine_fk.003": { + "custom_shape": { + "name": "WGT-rig_spine_fk.003", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "tweak_spine.003": { + "custom_shape": { + "name": "WGT-rig_tweak_spine.003", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "spine_fk.007": { + "custom_shape": { + "name": "WGT-rig_spine_fk.007", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "tweak_spine.007": { + "custom_shape": { + "name": "WGT-rig_tweak_spine.007", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "spine_fk.008": { + "custom_shape": { + "name": "WGT-rig_spine_fk.008", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "neck": { + "custom_shape": { + "name": "WGT-rig_neck", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "head": { + "custom_shape": { + "name": "WGT-rig_head", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "tweak_spine.004": { + "custom_shape": { + "name": "WGT-rig_tweak_spine.004", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "tweak_spine.005": { + "custom_shape": { + "name": "WGT-rig_tweak_spine.005", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "tweak_spine.008": { + "custom_shape": { + "name": "WGT-rig_tweak_spine.008", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "hand_tweak.L": { + "custom_shape": { + "name": "WGT-rig_hand_tweak.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "forearm_tweak.L": { + "custom_shape": { + "name": "WGT-rig_forearm_tweak.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "forearm_tweak.L.001": { + "custom_shape": { + "name": "WGT-rig_forearm_tweak.L.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "forearm_tweak.L.002": { + "custom_shape": { + "name": "WGT-rig_forearm_tweak.L.002", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "upper_arm_tweak.L.001": { + "custom_shape": { + "name": "WGT-rig_upper_arm_tweak.L.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "upper_arm_tweak.L.002": { + "custom_shape": { + "name": "WGT-rig_upper_arm_tweak.L.002", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "upper_arm_parent.L": { + "custom_shape": { + "name": "WGT-rig_upper_arm_parent.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "upper_arm_fk.L": { + "custom_shape": { + "name": "WGT-rig_upper_arm_fk.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "forearm_fk.L": { + "custom_shape": { + "name": "WGT-rig_forearm_fk.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "hand_fk.L": { + "custom_shape": { + "name": "WGT-rig_hand_fk.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "upper_arm_ik.L": { + "custom_shape": { + "name": "WGT-rig_upper_arm_ik.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "upper_arm_tweak.L": { + "custom_shape": { + "name": "WGT-rig_upper_arm_tweak.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_index.01_master.L": { + "custom_shape": { + "name": "WGT-rig_f_index.01_master.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thumb.01_master.L": { + "custom_shape": { + "name": "WGT-rig_thumb.01_master.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_index.01.L": { + "custom_shape": { + "name": "WGT-rig_f_index.01.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_index.02.L": { + "custom_shape": { + "name": "WGT-rig_f_index.02.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_index.03.L": { + "custom_shape": { + "name": "WGT-rig_f_index.03.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_index.01.L.001": { + "custom_shape": { + "name": "WGT-rig_f_index.01.L.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thumb.01.L": { + "custom_shape": { + "name": "WGT-rig_thumb.01.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thumb.02.L": { + "custom_shape": { + "name": "WGT-rig_thumb.02.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thumb.03.L": { + "custom_shape": { + "name": "WGT-rig_thumb.03.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thumb.01.L.001": { + "custom_shape": { + "name": "WGT-rig_thumb.01.L.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_middle.01_master.L": { + "custom_shape": { + "name": "WGT-rig_f_middle.01_master.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_middle.01.L": { + "custom_shape": { + "name": "WGT-rig_f_middle.01.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_middle.02.L": { + "custom_shape": { + "name": "WGT-rig_f_middle.02.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_middle.03.L": { + "custom_shape": { + "name": "WGT-rig_f_middle.03.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_middle.01.L.001": { + "custom_shape": { + "name": "WGT-rig_f_middle.01.L.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_ring.01_master.L": { + "custom_shape": { + "name": "WGT-rig_f_ring.01_master.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_ring.01.L": { + "custom_shape": { + "name": "WGT-rig_f_ring.01.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_ring.02.L": { + "custom_shape": { + "name": "WGT-rig_f_ring.02.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_ring.03.L": { + "custom_shape": { + "name": "WGT-rig_f_ring.03.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_ring.01.L.001": { + "custom_shape": { + "name": "WGT-rig_f_ring.01.L.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_pinky.01_master.L": { + "custom_shape": { + "name": "WGT-rig_f_pinky.01_master.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_pinky.01.L": { + "custom_shape": { + "name": "WGT-rig_f_pinky.01.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_pinky.02.L": { + "custom_shape": { + "name": "WGT-rig_f_pinky.02.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_pinky.03.L": { + "custom_shape": { + "name": "WGT-rig_f_pinky.03.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_pinky.01.L.001": { + "custom_shape": { + "name": "WGT-rig_f_pinky.01.L.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "palm.L": { + "custom_shape": { + "name": "WGT-rig_palm.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "hand_tweak.R": { + "custom_shape": { + "name": "WGT-rig_hand_tweak.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "forearm_tweak.R": { + "custom_shape": { + "name": "WGT-rig_forearm_tweak.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "forearm_tweak.R.001": { + "custom_shape": { + "name": "WGT-rig_forearm_tweak.R.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "forearm_tweak.R.002": { + "custom_shape": { + "name": "WGT-rig_forearm_tweak.R.002", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "upper_arm_tweak.R.001": { + "custom_shape": { + "name": "WGT-rig_upper_arm_tweak.R.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "upper_arm_tweak.R.002": { + "custom_shape": { + "name": "WGT-rig_upper_arm_tweak.R.002", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "upper_arm_parent.R": { + "custom_shape": { + "name": "WGT-rig_upper_arm_parent.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "upper_arm_fk.R": { + "custom_shape": { + "name": "WGT-rig_upper_arm_fk.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "forearm_fk.R": { + "custom_shape": { + "name": "WGT-rig_forearm_fk.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "hand_fk.R": { + "custom_shape": { + "name": "WGT-rig_hand_fk.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "upper_arm_ik.R": { + "custom_shape": { + "name": "WGT-rig_upper_arm_ik.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "upper_arm_tweak.R": { + "custom_shape": { + "name": "WGT-rig_upper_arm_tweak.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_index.01_master.R": { + "custom_shape": { + "name": "WGT-rig_f_index.01_master.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thumb.01_master.R": { + "custom_shape": { + "name": "WGT-rig_thumb.01_master.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_index.01.R": { + "custom_shape": { + "name": "WGT-rig_f_index.01.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_index.02.R": { + "custom_shape": { + "name": "WGT-rig_f_index.02.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_index.03.R": { + "custom_shape": { + "name": "WGT-rig_f_index.03.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_index.01.R.001": { + "custom_shape": { + "name": "WGT-rig_f_index.01.R.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thumb.01.R": { + "custom_shape": { + "name": "WGT-rig_thumb.01.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thumb.02.R": { + "custom_shape": { + "name": "WGT-rig_thumb.02.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thumb.03.R": { + "custom_shape": { + "name": "WGT-rig_thumb.03.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thumb.01.R.001": { + "custom_shape": { + "name": "WGT-rig_thumb.01.R.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_middle.01_master.R": { + "custom_shape": { + "name": "WGT-rig_f_middle.01_master.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_middle.01.R": { + "custom_shape": { + "name": "WGT-rig_f_middle.01.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_middle.02.R": { + "custom_shape": { + "name": "WGT-rig_f_middle.02.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_middle.03.R": { + "custom_shape": { + "name": "WGT-rig_f_middle.03.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_middle.01.R.001": { + "custom_shape": { + "name": "WGT-rig_f_middle.01.R.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_ring.01_master.R": { + "custom_shape": { + "name": "WGT-rig_f_ring.01_master.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_ring.01.R": { + "custom_shape": { + "name": "WGT-rig_f_ring.01.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_ring.02.R": { + "custom_shape": { + "name": "WGT-rig_f_ring.02.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_ring.03.R": { + "custom_shape": { + "name": "WGT-rig_f_ring.03.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_ring.01.R.001": { + "custom_shape": { + "name": "WGT-rig_f_ring.01.R.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_pinky.01_master.R": { + "custom_shape": { + "name": "WGT-rig_f_pinky.01_master.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_pinky.01.R": { + "custom_shape": { + "name": "WGT-rig_f_pinky.01.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_pinky.02.R": { + "custom_shape": { + "name": "WGT-rig_f_pinky.02.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_pinky.03.R": { + "custom_shape": { + "name": "WGT-rig_f_pinky.03.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_pinky.01.R.001": { + "custom_shape": { + "name": "WGT-rig_f_pinky.01.R.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "palm.01.R": { + "custom_shape": { + "name": "WGT-rig_palm.01.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "breast.L": { + "custom_shape": { + "name": "WGT-rig_breast.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "breast.R": { + "custom_shape": { + "name": "WGT-rig_breast.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "shoulder.L": { + "custom_shape": { + "name": "WGT-rig_shoulder.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "shoulder.R": { + "custom_shape": { + "name": "WGT-rig_shoulder.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "hand_ik.L": { + "custom_shape": { + "name": "WGT-rig_hand_ik.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "upper_arm_ik_target.L": { + "custom_shape": { + "name": "WGT-rig_upper_arm_ik_target.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "hand_ik.R": { + "custom_shape": { + "name": "WGT-rig_hand_ik.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "upper_arm_ik_target.R": { + "custom_shape": { + "name": "WGT-rig_upper_arm_ik_target.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "foot_ik.L": { + "custom_shape": { + "name": "WGT-rig_foot_ik.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "foot_spin_ik.L": { + "custom_shape": { + "name": "WGT-rig_foot_spin_ik.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "foot_heel_ik.L": { + "custom_shape": { + "name": "WGT-rig_foot_heel_ik.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thigh_ik_target.L": { + "custom_shape": { + "name": "WGT-rig_thigh_ik_target.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "foot_ik.R": { + "custom_shape": { + "name": "WGT-rig_foot_ik.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "foot_spin_ik.R": { + "custom_shape": { + "name": "WGT-rig_foot_spin_ik.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "foot_heel_ik.R": { + "custom_shape": { + "name": "WGT-rig_foot_heel_ik.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thigh_ik_target.R": { + "custom_shape": { + "name": "WGT-rig_thigh_ik_target.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + } + }, + "bone_colors": {} +} \ No newline at end of file diff --git a/src/addons/ue2rigify/resources/rig_templates/b4_0/metahuman/fk_to_source_links.json b/src/addons/ue2rigify/resources/rig_templates/b4_0/metahuman/fk_to_source_links.json new file mode 100644 index 00000000..94e28088 --- /dev/null +++ b/src/addons/ue2rigify/resources/rig_templates/b4_0/metahuman/fk_to_source_links.json @@ -0,0 +1,548 @@ +[ + { + "from_node": "Control Rig upper_arm_fk.L", + "to_node": "Source Rig upperarm_l", + "from_socket": "upper_arm_fk.L", + "to_socket": "upperarm_l" + }, + { + "from_node": "Control Rig upper_arm_fk.L", + "to_node": "Source Rig upperarm_l", + "from_socket": "upper_arm_fk.R", + "to_socket": "upperarm_r" + }, + { + "from_node": "Control Rig upper_arm_tweak.L", + "to_node": "Source Rig upperarm_correctiveRoot_l", + "from_socket": "upper_arm_tweak.L", + "to_socket": "upperarm_correctiveRoot_l" + }, + { + "from_node": "Control Rig upper_arm_tweak.L", + "to_node": "Source Rig upperarm_correctiveRoot_l", + "from_socket": "upper_arm_tweak.R", + "to_socket": "upperarm_correctiveRoot_r" + }, + { + "from_node": "Control Rig forearm_fk.L", + "to_node": "Source Rig lowerarm_l", + "from_socket": "forearm_fk.L", + "to_socket": "lowerarm_l" + }, + { + "from_node": "Control Rig forearm_fk.L", + "to_node": "Source Rig lowerarm_l", + "from_socket": "forearm_fk.R", + "to_socket": "lowerarm_r" + }, + { + "from_node": "Control Rig hand_fk.L", + "to_node": "Source Rig hand_l", + "from_socket": "hand_fk.L", + "to_socket": "hand_l" + }, + { + "from_node": "Control Rig hand_fk.L", + "to_node": "Source Rig hand_l", + "from_socket": "hand_fk.R", + "to_socket": "hand_r" + }, + { + "from_node": "Control Rig forearm_tweak.L", + "to_node": "Source Rig lowerarm_correctiveRoot_l", + "from_socket": "forearm_tweak.L", + "to_socket": "lowerarm_correctiveRoot_l" + }, + { + "from_node": "Control Rig forearm_tweak.L", + "to_node": "Source Rig lowerarm_correctiveRoot_l", + "from_socket": "forearm_tweak.R", + "to_socket": "lowerarm_correctiveRoot_r" + }, + { + "from_node": "Control Rig forearm_tweak.L.001", + "to_node": "Source Rig lowerarm_twist_02_l", + "from_socket": "forearm_tweak.L.001", + "to_socket": "lowerarm_twist_02_l" + }, + { + "from_node": "Control Rig forearm_tweak.L.001", + "to_node": "Source Rig lowerarm_twist_02_l", + "from_socket": "forearm_tweak.R.001", + "to_socket": "lowerarm_twist_02_r" + }, + { + "from_node": "Control Rig forearm_tweak.L.002", + "to_node": "Source Rig lowerarm_twist_01_l", + "from_socket": "forearm_tweak.L.002", + "to_socket": "lowerarm_twist_01_l" + }, + { + "from_node": "Control Rig forearm_tweak.L.002", + "to_node": "Source Rig lowerarm_twist_01_l", + "from_socket": "forearm_tweak.R.002", + "to_socket": "lowerarm_twist_01_r" + }, + { + "from_node": "Control Rig hand_tweak.L", + "to_node": "Source Rig hand_l.001", + "from_socket": "hand_tweak.L", + "to_socket": "hand_l" + }, + { + "from_node": "Control Rig hand_tweak.L", + "to_node": "Source Rig hand_l.001", + "from_socket": "hand_tweak.R", + "to_socket": "hand_r" + }, + { + "from_node": "Control Rig upper_arm_tweak.L.002", + "to_node": "Source Rig upperarm_twist_02_l", + "from_socket": "upper_arm_tweak.L.002", + "to_socket": "upperarm_twist_02_l" + }, + { + "from_node": "Control Rig upper_arm_tweak.L.002", + "to_node": "Source Rig upperarm_twist_02_l", + "from_socket": "upper_arm_tweak.R.002", + "to_socket": "upperarm_twist_02_r" + }, + { + "from_node": "Control Rig upper_arm_tweak.L.001", + "to_node": "Source Rig upperarm_twist_01_l", + "from_socket": "upper_arm_tweak.L.001", + "to_socket": "upperarm_twist_01_l" + }, + { + "from_node": "Control Rig upper_arm_tweak.L.001", + "to_node": "Source Rig upperarm_twist_01_l", + "from_socket": "upper_arm_tweak.R.001", + "to_socket": "upperarm_twist_01_r" + }, + { + "from_node": "Control Rig thumb.01.L", + "to_node": "Source Rig thumb_01_l", + "from_socket": "thumb.01.L", + "to_socket": "thumb_01_l" + }, + { + "from_node": "Control Rig thumb.01.L", + "to_node": "Source Rig thumb_01_l", + "from_socket": "thumb.01.R", + "to_socket": "thumb_01_r" + }, + { + "from_node": "Control Rig thumb.02.L", + "to_node": "Source Rig thumb_02_l", + "from_socket": "thumb.02.L", + "to_socket": "thumb_02_l" + }, + { + "from_node": "Control Rig thumb.02.L", + "to_node": "Source Rig thumb_02_l", + "from_socket": "thumb.02.R", + "to_socket": "thumb_02_r" + }, + { + "from_node": "Control Rig thumb.03.L", + "to_node": "Source Rig thumb_03_l", + "from_socket": "thumb.03.L", + "to_socket": "thumb_03_l" + }, + { + "from_node": "Control Rig thumb.03.L", + "to_node": "Source Rig thumb_03_l", + "from_socket": "thumb.03.R", + "to_socket": "thumb_03_r" + }, + { + "from_node": "Control Rig f_index.01.L", + "to_node": "Source Rig index_01_l", + "from_socket": "f_index.01.L", + "to_socket": "index_01_l" + }, + { + "from_node": "Control Rig f_index.01.L", + "to_node": "Source Rig index_01_l", + "from_socket": "f_index.01.R", + "to_socket": "index_01_r" + }, + { + "from_node": "Control Rig f_index.02.L", + "to_node": "Source Rig index_02_l", + "from_socket": "f_index.02.L", + "to_socket": "index_02_l" + }, + { + "from_node": "Control Rig f_index.02.L", + "to_node": "Source Rig index_02_l", + "from_socket": "f_index.02.R", + "to_socket": "index_02_r" + }, + { + "from_node": "Control Rig f_index.03.L", + "to_node": "Source Rig index_03_l", + "from_socket": "f_index.03.L", + "to_socket": "index_03_l" + }, + { + "from_node": "Control Rig f_index.03.L", + "to_node": "Source Rig index_03_l", + "from_socket": "f_index.03.R", + "to_socket": "index_03_r" + }, + { + "from_node": "Control Rig f_middle.01.L", + "to_node": "Source Rig middle_01_l", + "from_socket": "f_middle.01.L", + "to_socket": "middle_01_l" + }, + { + "from_node": "Control Rig f_middle.01.L", + "to_node": "Source Rig middle_01_l", + "from_socket": "f_middle.01.R", + "to_socket": "middle_01_r" + }, + { + "from_node": "Control Rig f_middle.02.L", + "to_node": "Source Rig middle_02_l", + "from_socket": "f_middle.02.L", + "to_socket": "middle_02_l" + }, + { + "from_node": "Control Rig f_middle.02.L", + "to_node": "Source Rig middle_02_l", + "from_socket": "f_middle.02.R", + "to_socket": "middle_02_r" + }, + { + "from_node": "Control Rig f_middle.03.L", + "to_node": "Source Rig middle_03_l", + "from_socket": "f_middle.03.L", + "to_socket": "middle_03_l" + }, + { + "from_node": "Control Rig f_middle.03.L", + "to_node": "Source Rig middle_03_l", + "from_socket": "f_middle.03.R", + "to_socket": "middle_03_r" + }, + { + "from_node": "Control Rig f_ring.01.L", + "to_node": "Source Rig ring_01_l", + "from_socket": "f_ring.01.L", + "to_socket": "ring_01_l" + }, + { + "from_node": "Control Rig f_ring.01.L", + "to_node": "Source Rig ring_01_l", + "from_socket": "f_ring.01.R", + "to_socket": "ring_01_r" + }, + { + "from_node": "Control Rig f_ring.02.L", + "to_node": "Source Rig ring_02_l", + "from_socket": "f_ring.02.L", + "to_socket": "ring_02_l" + }, + { + "from_node": "Control Rig f_ring.02.L", + "to_node": "Source Rig ring_02_l", + "from_socket": "f_ring.02.R", + "to_socket": "ring_02_r" + }, + { + "from_node": "Control Rig f_ring.03.L", + "to_node": "Source Rig ring_03_l", + "from_socket": "f_ring.03.L", + "to_socket": "ring_03_l" + }, + { + "from_node": "Control Rig f_ring.03.L", + "to_node": "Source Rig ring_03_l", + "from_socket": "f_ring.03.R", + "to_socket": "ring_03_r" + }, + { + "from_node": "Control Rig f_pinky.01.L", + "to_node": "Source Rig pinky_01_l", + "from_socket": "f_pinky.01.L", + "to_socket": "pinky_01_l" + }, + { + "from_node": "Control Rig f_pinky.01.L", + "to_node": "Source Rig pinky_01_l", + "from_socket": "f_pinky.01.R", + "to_socket": "pinky_01_r" + }, + { + "from_node": "Control Rig f_pinky.02.L", + "to_node": "Source Rig pinky_02_l", + "from_socket": "f_pinky.02.L", + "to_socket": "pinky_02_l" + }, + { + "from_node": "Control Rig f_pinky.02.L", + "to_node": "Source Rig pinky_02_l", + "from_socket": "f_pinky.02.R", + "to_socket": "pinky_02_r" + }, + { + "from_node": "Control Rig f_pinky.03.L", + "to_node": "Source Rig pinky_03_l", + "from_socket": "f_pinky.03.L", + "to_socket": "pinky_03_l" + }, + { + "from_node": "Control Rig f_pinky.03.L", + "to_node": "Source Rig pinky_03_l", + "from_socket": "f_pinky.03.R", + "to_socket": "pinky_03_r" + }, + { + "from_node": "Control Rig thigh_fk.L", + "to_node": "Source Rig thigh_l", + "from_socket": "thigh_fk.L", + "to_socket": "thigh_l" + }, + { + "from_node": "Control Rig thigh_fk.L", + "to_node": "Source Rig thigh_l", + "from_socket": "thigh_fk.R", + "to_socket": "thigh_r" + }, + { + "from_node": "Control Rig thigh_tweak.L", + "to_node": "Source Rig thigh_correctiveRoot_l", + "from_socket": "thigh_tweak.L", + "to_socket": "thigh_correctiveRoot_l" + }, + { + "from_node": "Control Rig thigh_tweak.L", + "to_node": "Source Rig thigh_correctiveRoot_l", + "from_socket": "thigh_tweak.R", + "to_socket": "thigh_correctiveRoot_r" + }, + { + "from_node": "Control Rig shin_fk.L", + "to_node": "Source Rig calf_l", + "from_socket": "shin_fk.L", + "to_socket": "calf_l" + }, + { + "from_node": "Control Rig shin_fk.L", + "to_node": "Source Rig calf_l", + "from_socket": "shin_fk.R", + "to_socket": "calf_r" + }, + { + "from_node": "Control Rig foot_fk.L", + "to_node": "Source Rig foot_l", + "from_socket": "foot_fk.L", + "to_socket": "foot_l" + }, + { + "from_node": "Control Rig foot_fk.L", + "to_node": "Source Rig foot_l", + "from_socket": "foot_fk.R", + "to_socket": "foot_r" + }, + { + "from_node": "Control Rig foot_tweak.L", + "to_node": "Source Rig foot_l.001", + "from_socket": "foot_tweak.L", + "to_socket": "foot_l" + }, + { + "from_node": "Control Rig foot_tweak.L", + "to_node": "Source Rig foot_l.001", + "from_socket": "foot_tweak.R", + "to_socket": "foot_r" + }, + { + "from_node": "Control Rig toe.L", + "to_node": "Source Rig ball_l", + "from_socket": "toe.L", + "to_socket": "ball_l" + }, + { + "from_node": "Control Rig toe.L", + "to_node": "Source Rig ball_l", + "from_socket": "toe.R", + "to_socket": "ball_r" + }, + { + "from_node": "Control Rig shin_tweak.L.001", + "to_node": "Source Rig calf_twist_02_l", + "from_socket": "shin_tweak.L.001", + "to_socket": "calf_twist_02_l" + }, + { + "from_node": "Control Rig shin_tweak.L.001", + "to_node": "Source Rig calf_twist_02_l", + "from_socket": "shin_tweak.R.001", + "to_socket": "calf_twist_02_r" + }, + { + "from_node": "Control Rig shin_tweak.L.002", + "to_node": "Source Rig calf_twist_01_l", + "from_socket": "shin_tweak.L.002", + "to_socket": "calf_twist_01_l" + }, + { + "from_node": "Control Rig shin_tweak.L.002", + "to_node": "Source Rig calf_twist_01_l", + "from_socket": "shin_tweak.R.002", + "to_socket": "calf_twist_01_r" + }, + { + "from_node": "Control Rig shin_tweak.L", + "to_node": "Source Rig calf_correctiveRoot_l", + "from_socket": "shin_tweak.L", + "to_socket": "calf_correctiveRoot_l" + }, + { + "from_node": "Control Rig shin_tweak.L", + "to_node": "Source Rig calf_correctiveRoot_l", + "from_socket": "shin_tweak.R", + "to_socket": "calf_correctiveRoot_r" + }, + { + "from_node": "Control Rig thigh_tweak.L.002", + "to_node": "Source Rig thigh_twist_02_l", + "from_socket": "thigh_tweak.L.002", + "to_socket": "thigh_twist_02_l" + }, + { + "from_node": "Control Rig thigh_tweak.L.002", + "to_node": "Source Rig thigh_twist_02_l", + "from_socket": "thigh_tweak.R.002", + "to_socket": "thigh_twist_02_r" + }, + { + "from_node": "Control Rig thigh_tweak.L.001", + "to_node": "Source Rig thigh_twist_01_l", + "from_socket": "thigh_tweak.L.001", + "to_socket": "thigh_twist_01_l" + }, + { + "from_node": "Control Rig thigh_tweak.L.001", + "to_node": "Source Rig thigh_twist_01_l", + "from_socket": "thigh_tweak.R.001", + "to_socket": "thigh_twist_01_r" + }, + { + "from_node": "Control Rig root", + "to_node": "root", + "from_socket": "root", + "to_socket": "object" + }, + { + "from_node": "Control Rig shoulder.L", + "to_node": "Source Rig clavicle_l", + "from_socket": "shoulder.L", + "to_socket": "clavicle_l" + }, + { + "from_node": "Control Rig shoulder.L", + "to_node": "Source Rig clavicle_l", + "from_socket": "shoulder.R", + "to_socket": "clavicle_r" + }, + { + "from_node": "Control Rig breast.L", + "to_node": "Source Rig clavicle_pec_l", + "from_socket": "breast.L", + "to_socket": "clavicle_pec_l" + }, + { + "from_node": "Control Rig breast.L", + "to_node": "Source Rig clavicle_pec_l", + "from_socket": "breast.R", + "to_socket": "clavicle_pec_r" + }, + { + "from_node": "Control Rig neck", + "to_node": "Source Rig neck_02.001", + "from_socket": "neck", + "to_socket": "neck_02" + }, + { + "from_node": "Control Rig head", + "to_node": "Source Rig head", + "from_socket": "head", + "to_socket": "head" + }, + { + "from_node": "Control Rig spine_fk", + "to_node": "Source Rig spine_01", + "from_socket": "spine_fk", + "to_socket": "spine_01" + }, + { + "from_node": "Control Rig spine_fk.001", + "to_node": "Source Rig spine_02", + "from_socket": "spine_fk.001", + "to_socket": "spine_02" + }, + { + "from_node": "Control Rig spine_fk.002", + "to_node": "Source Rig spine_02.001", + "from_socket": "spine_fk.002", + "to_socket": "spine_02" + }, + { + "from_node": "Control Rig spine_fk.003", + "to_node": "Source Rig spine_03", + "from_socket": "spine_fk.003", + "to_socket": "spine_03" + }, + { + "from_node": "Control Rig spine_fk.007", + "to_node": "Source Rig spine_04", + "from_socket": "spine_fk.007", + "to_socket": "spine_04" + }, + { + "from_node": "Control Rig spine_fk.008", + "to_node": "Source Rig spine_05", + "from_socket": "spine_fk.008", + "to_socket": "spine_05" + }, + { + "from_node": "Control Rig tweak_spine", + "to_node": "Source Rig pelvis", + "from_socket": "tweak_spine", + "to_socket": "pelvis" + }, + { + "from_node": "Control Rig tweak_spine.001", + "to_node": "Source Rig spine_01.001", + "from_socket": "tweak_spine.001", + "to_socket": "spine_01" + }, + { + "from_node": "Control Rig hand_ik.R", + "to_node": "Source Rig ik_hand_r", + "from_socket": "hand_ik.R", + "to_socket": "ik_hand_r" + }, + { + "from_node": "Control Rig hand_ik.L", + "to_node": "Source Rig ik_hand_l", + "from_socket": "hand_ik.L", + "to_socket": "ik_hand_l" + }, + { + "from_node": "Control Rig foot_ik.R", + "to_node": "Source Rig ik_foot_r", + "from_socket": "foot_ik.R", + "to_socket": "ik_foot_r" + }, + { + "from_node": "Control Rig foot_ik.L", + "to_node": "Source Rig ik_foot_l", + "from_socket": "foot_ik.L", + "to_socket": "ik_foot_l" + } +] \ No newline at end of file diff --git a/src/addons/ue2rigify/resources/rig_templates/b4_0/metahuman/fk_to_source_nodes.json b/src/addons/ue2rigify/resources/rig_templates/b4_0/metahuman/fk_to_source_nodes.json new file mode 100644 index 00000000..98fb7525 --- /dev/null +++ b/src/addons/ue2rigify/resources/rig_templates/b4_0/metahuman/fk_to_source_nodes.json @@ -0,0 +1,2432 @@ +[ + { + "name": "Source Rig upperarm_l", + "label": "Source Rig upperarm_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 0.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "upperarm_l", + "upperarm_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig upper_arm_fk.L", + "label": "Control Rig upper_arm_fk.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 0.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upper_arm_fk.L", + "upper_arm_fk.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig upperarm_correctiveRoot_l", + "label": "Source Rig upperarm_correctiveRoot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 120.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "upperarm_correctiveRoot_l", + "upperarm_correctiveRoot_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig upper_arm_tweak.L", + "label": "Control Rig upper_arm_tweak.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 120.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upper_arm_tweak.L", + "upper_arm_tweak.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig lowerarm_l", + "label": "Source Rig lowerarm_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 240.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "lowerarm_l", + "lowerarm_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig forearm_fk.L", + "label": "Control Rig forearm_fk.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 240.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "forearm_fk.L", + "forearm_fk.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig hand_l", + "label": "Source Rig hand_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 360.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "hand_l", + "hand_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig hand_fk.L", + "label": "Control Rig hand_fk.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 360.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "hand_fk.L", + "hand_fk.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig lowerarm_correctiveRoot_l", + "label": "Source Rig lowerarm_correctiveRoot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 480.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "lowerarm_correctiveRoot_l", + "lowerarm_correctiveRoot_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig forearm_tweak.L", + "label": "Control Rig forearm_tweak.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 480.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "forearm_tweak.L", + "forearm_tweak.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig lowerarm_twist_02_l", + "label": "Source Rig lowerarm_twist_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 600.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "lowerarm_twist_02_l", + "lowerarm_twist_02_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig forearm_tweak.L.001", + "label": "Control Rig forearm_tweak.L.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 600.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "forearm_tweak.L.001", + "forearm_tweak.R.001" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig lowerarm_twist_01_l", + "label": "Source Rig lowerarm_twist_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 720.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "lowerarm_twist_01_l", + "lowerarm_twist_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig forearm_tweak.L.002", + "label": "Control Rig forearm_tweak.L.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 720.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "forearm_tweak.L.002", + "forearm_tweak.R.002" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig hand_l.001", + "label": "Source Rig hand_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 840.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "hand_l", + "hand_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig hand_tweak.L", + "label": "Control Rig hand_tweak.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 840.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "hand_tweak.L", + "hand_tweak.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig upperarm_twist_02_l", + "label": "Source Rig upperarm_twist_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 960.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "upperarm_twist_02_l", + "upperarm_twist_02_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig upper_arm_tweak.L.002", + "label": "Control Rig upper_arm_tweak.L.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 960.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upper_arm_tweak.L.002", + "upper_arm_tweak.R.002" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig upperarm_twist_01_l", + "label": "Source Rig upperarm_twist_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1080.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "upperarm_twist_01_l", + "upperarm_twist_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig upper_arm_tweak.L.001", + "label": "Control Rig upper_arm_tweak.L.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1080.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upper_arm_tweak.L.001", + "upper_arm_tweak.R.001" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig thumb_01_l", + "label": "Source Rig thumb_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1200.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "thumb_01_l", + "thumb_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig thumb.01.L", + "label": "Control Rig thumb.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1200.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thumb.01.L", + "thumb.01.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig thumb_02_l", + "label": "Source Rig thumb_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1320.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "thumb_02_l", + "thumb_02_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig thumb.02.L", + "label": "Control Rig thumb.02.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1320.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thumb.02.L", + "thumb.02.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig thumb_03_l", + "label": "Source Rig thumb_03_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1440.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "thumb_03_l", + "thumb_03_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig thumb.03.L", + "label": "Control Rig thumb.03.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1440.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thumb.03.L", + "thumb.03.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig index_01_l", + "label": "Source Rig index_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1560.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "index_01_l", + "index_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_index.01.L", + "label": "Control Rig f_index.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1560.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_index.01.L", + "f_index.01.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig index_02_l", + "label": "Source Rig index_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1680.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "index_02_l", + "index_02_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_index.02.L", + "label": "Control Rig f_index.02.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1680.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_index.02.L", + "f_index.02.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig index_03_l", + "label": "Source Rig index_03_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1800.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "index_03_l", + "index_03_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_index.03.L", + "label": "Control Rig f_index.03.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1800.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_index.03.L", + "f_index.03.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig middle_01_l", + "label": "Source Rig middle_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1920.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "middle_01_l", + "middle_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_middle.01.L", + "label": "Control Rig f_middle.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1920.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_middle.01.L", + "f_middle.01.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig middle_02_l", + "label": "Source Rig middle_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2040.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "middle_02_l", + "middle_02_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_middle.02.L", + "label": "Control Rig f_middle.02.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2040.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_middle.02.L", + "f_middle.02.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig middle_03_l", + "label": "Source Rig middle_03_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2160.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "middle_03_l", + "middle_03_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_middle.03.L", + "label": "Control Rig f_middle.03.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2160.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_middle.03.L", + "f_middle.03.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig ring_01_l", + "label": "Source Rig ring_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2280.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "ring_01_l", + "ring_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_ring.01.L", + "label": "Control Rig f_ring.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2280.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_ring.01.L", + "f_ring.01.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig ring_02_l", + "label": "Source Rig ring_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2400.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "ring_02_l", + "ring_02_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_ring.02.L", + "label": "Control Rig f_ring.02.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2400.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_ring.02.L", + "f_ring.02.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig ring_03_l", + "label": "Source Rig ring_03_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2520.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "ring_03_l", + "ring_03_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_ring.03.L", + "label": "Control Rig f_ring.03.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2520.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_ring.03.L", + "f_ring.03.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig pinky_01_l", + "label": "Source Rig pinky_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2640.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "pinky_01_l", + "pinky_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_pinky.01.L", + "label": "Control Rig f_pinky.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2640.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_pinky.01.L", + "f_pinky.01.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig pinky_02_l", + "label": "Source Rig pinky_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2760.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "pinky_02_l", + "pinky_02_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_pinky.02.L", + "label": "Control Rig f_pinky.02.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2760.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_pinky.02.L", + "f_pinky.02.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig pinky_03_l", + "label": "Source Rig pinky_03_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2880.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "pinky_03_l", + "pinky_03_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_pinky.03.L", + "label": "Control Rig f_pinky.03.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2880.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_pinky.03.L", + "f_pinky.03.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig thigh_l", + "label": "Source Rig thigh_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3000.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "thigh_l", + "thigh_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig thigh_fk.L", + "label": "Control Rig thigh_fk.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3000.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_fk.L", + "thigh_fk.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig thigh_correctiveRoot_l", + "label": "Source Rig thigh_correctiveRoot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3120.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "thigh_correctiveRoot_l", + "thigh_correctiveRoot_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig thigh_tweak.L", + "label": "Control Rig thigh_tweak.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3120.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_tweak.L", + "thigh_tweak.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig calf_l", + "label": "Source Rig calf_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3240.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "calf_l", + "calf_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig shin_fk.L", + "label": "Control Rig shin_fk.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3240.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "shin_fk.L", + "shin_fk.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig foot_l", + "label": "Source Rig foot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3360.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "foot_l", + "foot_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig foot_fk.L", + "label": "Control Rig foot_fk.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3360.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "foot_fk.L", + "foot_fk.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig foot_l.001", + "label": "Source Rig foot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3480.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "foot_l", + "foot_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig foot_tweak.L", + "label": "Control Rig foot_tweak.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3480.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "foot_tweak.L", + "foot_tweak.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig ball_l", + "label": "Source Rig ball_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3600.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "ball_l", + "ball_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig toe.L", + "label": "Control Rig toe.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3600.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "toe.L", + "toe.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig calf_twist_02_l", + "label": "Source Rig calf_twist_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3720.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "calf_twist_02_l", + "calf_twist_02_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig shin_tweak.L.001", + "label": "Control Rig shin_tweak.L.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3720.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "shin_tweak.L.001", + "shin_tweak.R.001" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig calf_twist_01_l", + "label": "Source Rig calf_twist_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3840.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "calf_twist_01_l", + "calf_twist_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig shin_tweak.L.002", + "label": "Control Rig shin_tweak.L.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3840.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "shin_tweak.L.002", + "shin_tweak.R.002" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig calf_correctiveRoot_l", + "label": "Source Rig calf_correctiveRoot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3960.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "calf_correctiveRoot_l", + "calf_correctiveRoot_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig shin_tweak.L", + "label": "Control Rig shin_tweak.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3960.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "shin_tweak.L", + "shin_tweak.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig thigh_twist_02_l", + "label": "Source Rig thigh_twist_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 4080.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "thigh_twist_02_l", + "thigh_twist_02_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig thigh_tweak.L.002", + "label": "Control Rig thigh_tweak.L.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 4080.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_tweak.L.002", + "thigh_tweak.R.002" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig thigh_twist_01_l", + "label": "Source Rig thigh_twist_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 4200.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "thigh_twist_01_l", + "thigh_twist_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig thigh_tweak.L.001", + "label": "Control Rig thigh_tweak.L.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 4200.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_tweak.L.001", + "thigh_tweak.R.001" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig root", + "label": "Control Rig root", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 4320.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "root" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "root", + "label": "root", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 299.52642822265625, + 4312.6982421875 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "object" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig clavicle_l", + "label": "Source Rig clavicle_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 305.962646484375, + 4413.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "clavicle_l", + "clavicle_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig clavicle_pec_l", + "label": "Source Rig clavicle_pec_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 305.962646484375, + 4533.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "clavicle_pec_l", + "clavicle_pec_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig breast.L", + "label": "Control Rig breast.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -294.037353515625, + 4533.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "breast.L", + "breast.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig shoulder.L", + "label": "Control Rig shoulder.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -294.037353515625, + 4413.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "shoulder.L", + "shoulder.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig neck_02.001", + "label": "Source Rig neck_02", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 6333.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "neck_02" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig neck", + "label": "Control Rig neck", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 6333.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "neck" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig head", + "label": "Source Rig head", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 6453.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "head" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig head", + "label": "Control Rig head", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 6453.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "head" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig spine_01", + "label": "Source Rig spine_01", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 6573.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "spine_01" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig spine_fk", + "label": "Control Rig spine_fk", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 6573.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_fk" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig spine_02", + "label": "Source Rig spine_02", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 6693.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "spine_02" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig spine_fk.001", + "label": "Control Rig spine_fk.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 6693.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_fk.001" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig spine_02.001", + "label": "Source Rig spine_02", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 6813.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "spine_02" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig spine_fk.002", + "label": "Control Rig spine_fk.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 6813.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_fk.002" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig spine_03", + "label": "Source Rig spine_03", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 6933.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "spine_03" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig spine_fk.003", + "label": "Control Rig spine_fk.003", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 6933.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_fk.003" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig spine_04", + "label": "Source Rig spine_04", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 7053.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "spine_04" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig spine_fk.007", + "label": "Control Rig spine_fk.007", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 7053.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_fk.007" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig spine_05", + "label": "Source Rig spine_05", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 7173.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "spine_05" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig spine_fk.008", + "label": "Control Rig spine_fk.008", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 7173.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_fk.008" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig pelvis", + "label": "Source Rig pelvis", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 7293.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "pelvis" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig tweak_spine", + "label": "Control Rig tweak_spine", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 7293.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "tweak_spine" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig spine_01.001", + "label": "Source Rig spine_01", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 7413.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "spine_01" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig tweak_spine.001", + "label": "Control Rig tweak_spine.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 7413.3623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "tweak_spine.001" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig ik_hand_l", + "label": "Source Rig ik_hand_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.4825134277344, + -114.02925872802734 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "ik_hand_l" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig ik_hand_r", + "label": "Source Rig ik_hand_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 293.60650634765625, + -181.3875274658203 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "ik_hand_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig ik_hand_gun", + "label": "Source Rig ik_hand_gun", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 299.1072998046875, + -270.7403564453125 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "ik_hand_gun" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig hand_ik.R", + "label": "Control Rig hand_ik.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -255.10076904296875, + -186.26626586914062 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "hand_ik.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig hand_ik.L", + "label": "Control Rig hand_ik.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -257.85107421875, + -118.907958984375 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "hand_ik.L" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig ik_foot_l", + "label": "Source Rig ik_foot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 305.98333740234375, + -333.35479736328125 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "ik_foot_l" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig ik_foot_r", + "label": "Source Rig ik_foot_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 301.8578186035156, + -400.71307373046875 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "ik_foot_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig foot_ik.R", + "label": "Control Rig foot_ik.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -241.34866333007812, + -399.33843994140625 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "foot_ik.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig foot_ik.L", + "label": "Control Rig foot_ik.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -228.97177124023438, + -325.1068115234375 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "foot_ik.L" + ], + "mode": "FK_TO_SOURCE" + } +] \ No newline at end of file diff --git a/src/addons/ue2rigify/resources/rig_templates/b4_0/metahuman/metarig.py b/src/addons/ue2rigify/resources/rig_templates/b4_0/metahuman/metarig.py new file mode 100644 index 00000000..72e25407 --- /dev/null +++ b/src/addons/ue2rigify/resources/rig_templates/b4_0/metahuman/metarig.py @@ -0,0 +1,1200 @@ +import bpy + +from rna_prop_ui import rna_idprop_ui_create + +from mathutils import Color + + +def create(obj): # noqa + # generated by rigify.utils.write_metarig + bpy.ops.object.mode_set(mode='EDIT') + arm = obj.data + + for i in range(6): + arm.rigify_colors.add() + + arm.rigify_colors[0].name = "Root" + arm.rigify_colors[0].active = Color((0.5490, 1.0000, 1.0000)) + arm.rigify_colors[0].normal = Color((0.4353, 0.1843, 0.4157)) + arm.rigify_colors[0].select = Color((0.3137, 0.7843, 1.0000)) + arm.rigify_colors[0].standard_colors_lock = True + arm.rigify_colors[1].name = "IK" + arm.rigify_colors[1].active = Color((0.5490, 1.0000, 1.0000)) + arm.rigify_colors[1].normal = Color((0.6039, 0.0000, 0.0000)) + arm.rigify_colors[1].select = Color((0.3137, 0.7843, 1.0000)) + arm.rigify_colors[1].standard_colors_lock = True + arm.rigify_colors[2].name = "Special" + arm.rigify_colors[2].active = Color((0.5490, 1.0000, 1.0000)) + arm.rigify_colors[2].normal = Color((0.9569, 0.7882, 0.0471)) + arm.rigify_colors[2].select = Color((0.3137, 0.7843, 1.0000)) + arm.rigify_colors[2].standard_colors_lock = True + arm.rigify_colors[3].name = "Tweak" + arm.rigify_colors[3].active = Color((0.5490, 1.0000, 1.0000)) + arm.rigify_colors[3].normal = Color((0.0392, 0.2118, 0.5804)) + arm.rigify_colors[3].select = Color((0.3137, 0.7843, 1.0000)) + arm.rigify_colors[3].standard_colors_lock = True + arm.rigify_colors[4].name = "FK" + arm.rigify_colors[4].active = Color((0.5490, 1.0000, 1.0000)) + arm.rigify_colors[4].normal = Color((0.1176, 0.5686, 0.0353)) + arm.rigify_colors[4].select = Color((0.3137, 0.7843, 1.0000)) + arm.rigify_colors[4].standard_colors_lock = True + arm.rigify_colors[5].name = "Extra" + arm.rigify_colors[5].active = Color((0.5490, 1.0000, 1.0000)) + arm.rigify_colors[5].normal = Color((0.9686, 0.2510, 0.0941)) + arm.rigify_colors[5].select = Color((0.3137, 0.7843, 1.0000)) + arm.rigify_colors[5].standard_colors_lock = True + + bone_collections = {} + + for bcoll in list(arm.collections_all): + arm.collections.remove(bcoll) + + def add_bone_collection(name, *, parent=None, ui_row=0, ui_title='', sel_set=False, color_set_id=0): + new_bcoll = arm.collections.new(name, parent=bone_collections.get(parent)) + new_bcoll.rigify_ui_row = ui_row + new_bcoll.rigify_ui_title = ui_title + new_bcoll.rigify_sel_set = sel_set + new_bcoll.rigify_color_set_id = color_set_id + bone_collections[name] = new_bcoll + + def assign_bone_collections(pose_bone, *coll_names): + assert not len(pose_bone.bone.collections) + for name in coll_names: + bone_collections[name].assign(pose_bone) + + def assign_bone_collection_refs(params, attr_name, *coll_names): + ref_list = getattr(params, attr_name + '_coll_refs', None) + if ref_list is not None: + for name in coll_names: + ref_list.add().set_collection(bone_collections[name]) + + add_bone_collection('Face', ui_row=1, color_set_id=5) + add_bone_collection('Face (Primary)', ui_row=2, color_set_id=2) + add_bone_collection('Face (Secondary)', ui_row=2, color_set_id=3) + add_bone_collection('Torso', ui_row=3, color_set_id=3) + add_bone_collection('Torso (Tweak)', ui_row=4, color_set_id=4) + add_bone_collection('Fingers', ui_row=5, color_set_id=6) + add_bone_collection('Fingers (Detail)', ui_row=6, color_set_id=5) + add_bone_collection('Arm.L (IK)', ui_row=7, color_set_id=2) + add_bone_collection('Arm.L (FK)', ui_row=8, color_set_id=5) + add_bone_collection('Arm.L (Tweak)', ui_row=9, color_set_id=4) + add_bone_collection('Arm.R (IK)', ui_row=7, color_set_id=2) + add_bone_collection('Arm.R (FK)', ui_row=8, color_set_id=5) + add_bone_collection('Arm.R (Tweak)', ui_row=9, color_set_id=4) + add_bone_collection('Leg.L (IK)', ui_row=10, color_set_id=2) + add_bone_collection('Leg.L (FK)', ui_row=11, color_set_id=5) + add_bone_collection('Leg.L (Tweak)', ui_row=12, color_set_id=4) + add_bone_collection('Leg.R (IK)', ui_row=10, color_set_id=2) + add_bone_collection('Leg.R (FK)', ui_row=11, color_set_id=5) + add_bone_collection('Leg.R (Tweak)', ui_row=12, color_set_id=4) + add_bone_collection('Root', ui_row=15, color_set_id=1) + + bones = {} + + bone = arm.edit_bones.new('spine') + bone.head = 0.0000, -0.0234, 0.9659 + bone.tail = 0.0000, -0.0232, 1.0016 + bone.roll = 0.0000 + bone.use_connect = False + bones['spine'] = bone.name + bone = arm.edit_bones.new('spine.001') + bone.head = 0.0000, -0.0232, 1.0016 + bone.tail = 0.0000, -0.0374, 1.0634 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine']] + bones['spine.001'] = bone.name + bone = arm.edit_bones.new('thigh.L') + bone.head = 0.1017, -0.0253, 0.9554 + bone.tail = 0.1233, -0.0158, 0.4949 + bone.roll = -0.0489 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine']] + bones['thigh.L'] = bone.name + bone = arm.edit_bones.new('thigh.R') + bone.head = -0.1017, -0.0253, 0.9554 + bone.tail = -0.1233, -0.0158, 0.4949 + bone.roll = 0.0489 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine']] + bones['thigh.R'] = bone.name + bone = arm.edit_bones.new('spine.002') + bone.head = 0.0000, -0.0374, 1.0634 + bone.tail = 0.0000, -0.0445, 1.1344 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine.001']] + bones['spine.002'] = bone.name + bone = arm.edit_bones.new('shin.L') + bone.head = 0.1233, -0.0158, 0.4949 + bone.tail = 0.1415, 0.0002, 0.0816 + bone.roll = -0.0405 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thigh.L']] + bones['shin.L'] = bone.name + bone = arm.edit_bones.new('shin.R') + bone.head = -0.1233, -0.0158, 0.4949 + bone.tail = -0.1415, 0.0002, 0.0816 + bone.roll = 0.0405 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thigh.R']] + bones['shin.R'] = bone.name + bone = arm.edit_bones.new('spine.003') + bone.head = 0.0000, -0.0445, 1.1344 + bone.tail = 0.0000, -0.0386, 1.2224 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine.002']] + bones['spine.003'] = bone.name + bone = arm.edit_bones.new('foot.L') + bone.head = 0.1415, 0.0002, 0.0816 + bone.tail = 0.1636, -0.1354, 0.0110 + bone.roll = -0.5633 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['shin.L']] + bones['foot.L'] = bone.name + bone = arm.edit_bones.new('foot.R') + bone.head = -0.1415, 0.0002, 0.0816 + bone.tail = -0.1636, -0.1354, 0.0110 + bone.roll = 0.5633 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['shin.R']] + bones['foot.R'] = bone.name + bone = arm.edit_bones.new('spine.007') + bone.head = 0.0000, -0.0386, 1.2224 + bone.tail = 0.0000, -0.0099, 1.3535 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine.003']] + bones['spine.007'] = bone.name + bone = arm.edit_bones.new('toe.L') + bone.head = 0.1636, -0.1354, 0.0110 + bone.tail = 0.1740, -0.2349, 0.0152 + bone.roll = -0.7566 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['foot.L']] + bones['toe.L'] = bone.name + bone = arm.edit_bones.new('heel.02.L') + bone.head = 0.1439, 0.0103, 0.0110 + bone.tail = 0.2239, 0.0103, 0.0110 + bone.roll = -0.0000 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['foot.L']] + bones['heel.02.L'] = bone.name + bone = arm.edit_bones.new('toe.R') + bone.head = -0.1636, -0.1354, 0.0110 + bone.tail = -0.1740, -0.2349, 0.0152 + bone.roll = 0.7566 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['foot.R']] + bones['toe.R'] = bone.name + bone = arm.edit_bones.new('heel.02.R') + bone.head = -0.1439, 0.0103, 0.0110 + bone.tail = -0.2239, 0.0103, 0.0110 + bone.roll = 0.0000 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['foot.R']] + bones['heel.02.R'] = bone.name + bone = arm.edit_bones.new('spine.008') + bone.head = 0.0000, -0.0099, 1.3535 + bone.tail = 0.0000, 0.0147, 1.5134 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine.007']] + bones['spine.008'] = bone.name + bone = arm.edit_bones.new('spine.004') + bone.head = 0.0000, 0.0147, 1.5134 + bone.tail = 0.0000, 0.0026, 1.5684 + bone.roll = 0.0000 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine.008']] + bones['spine.004'] = bone.name + bone = arm.edit_bones.new('shoulder.L') + bone.head = 0.0115, 0.0183, 1.4517 + bone.tail = 0.1901, 0.0256, 1.4358 + bone.roll = 0.3814 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine.008']] + bones['shoulder.L'] = bone.name + bone = arm.edit_bones.new('shoulder.R') + bone.head = -0.0115, 0.0183, 1.4517 + bone.tail = -0.1901, 0.0256, 1.4358 + bone.roll = -0.3814 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine.008']] + bones['shoulder.R'] = bone.name + bone = arm.edit_bones.new('breast.L') + bone.head = 0.1211, -0.1157, 1.3342 + bone.tail = 0.1393, -0.2431, 1.3378 + bone.roll = -0.3953 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine.008']] + bones['breast.L'] = bone.name + bone = arm.edit_bones.new('breast.R') + bone.head = -0.1211, -0.1157, 1.3342 + bone.tail = -0.1393, -0.2431, 1.3378 + bone.roll = 0.3953 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine.008']] + bones['breast.R'] = bone.name + bone = arm.edit_bones.new('spine.005') + bone.head = 0.0000, 0.0026, 1.5684 + bone.tail = 0.0000, -0.0088, 1.6254 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine.004']] + bones['spine.005'] = bone.name + bone = arm.edit_bones.new('upper_arm.L') + bone.head = 0.1731, 0.0219, 1.4292 + bone.tail = 0.3700, 0.0132, 1.1712 + bone.roll = 2.5900 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['shoulder.L']] + bones['upper_arm.L'] = bone.name + bone = arm.edit_bones.new('upper_arm.R') + bone.head = -0.1731, 0.0219, 1.4292 + bone.tail = -0.3700, 0.0132, 1.1712 + bone.roll = -2.5900 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['shoulder.R']] + bones['upper_arm.R'] = bone.name + bone = arm.edit_bones.new('spine.006') + bone.head = 0.0000, -0.0088, 1.6254 + bone.tail = 0.0000, -0.0039, 1.8230 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine.005']] + bones['spine.006'] = bone.name + bone = arm.edit_bones.new('forearm.L') + bone.head = 0.3700, 0.0132, 1.1712 + bone.tail = 0.5030, -0.1497, 1.0119 + bone.roll = 2.5032 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['upper_arm.L']] + bones['forearm.L'] = bone.name + bone = arm.edit_bones.new('forearm.R') + bone.head = -0.3700, 0.0132, 1.1712 + bone.tail = -0.5030, -0.1497, 1.0119 + bone.roll = -2.5032 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['upper_arm.R']] + bones['forearm.R'] = bone.name + bone = arm.edit_bones.new('hand.L') + bone.head = 0.5030, -0.1497, 1.0119 + bone.tail = 0.5617, -0.2074, 0.9638 + bone.roll = 2.2670 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['forearm.L']] + bones['hand.L'] = bone.name + bone = arm.edit_bones.new('hand.R') + bone.head = -0.5030, -0.1497, 1.0119 + bone.tail = -0.5617, -0.2074, 0.9638 + bone.roll = -2.2670 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['forearm.R']] + bones['hand.R'] = bone.name + bone = arm.edit_bones.new('palm.01.L') + bone.head = 0.5101, -0.1851, 1.0015 + bone.tail = 0.5344, -0.2215, 0.9730 + bone.roll = -1.7965 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.L']] + bones['palm.01.L'] = bone.name + bone = arm.edit_bones.new('palm.02.L') + bone.head = 0.5152, -0.1706, 0.9947 + bone.tail = 0.5467, -0.2031, 0.9642 + bone.roll = -2.0912 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.L']] + bones['palm.02.L'] = bone.name + bone = arm.edit_bones.new('palm.03.L') + bone.head = 0.5179, -0.1626, 0.9888 + bone.tail = 0.5458, -0.1845, 0.9541 + bone.roll = -2.1395 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.L']] + bones['palm.03.L'] = bone.name + bone = arm.edit_bones.new('palm.04.L') + bone.head = 0.5202, -0.1539, 0.9823 + bone.tail = 0.5401, -0.1685, 0.9424 + bone.roll = -2.0016 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.L']] + bones['palm.04.L'] = bone.name + bone = arm.edit_bones.new('palm.01.R') + bone.head = -0.5101, -0.1851, 1.0015 + bone.tail = -0.5344, -0.2215, 0.9730 + bone.roll = 1.7965 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.R']] + bones['palm.01.R'] = bone.name + bone = arm.edit_bones.new('palm.02.R') + bone.head = -0.5152, -0.1706, 0.9947 + bone.tail = -0.5467, -0.2031, 0.9642 + bone.roll = 2.0912 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.R']] + bones['palm.02.R'] = bone.name + bone = arm.edit_bones.new('palm.03.R') + bone.head = -0.5179, -0.1626, 0.9888 + bone.tail = -0.5458, -0.1845, 0.9541 + bone.roll = 2.1395 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.R']] + bones['palm.03.R'] = bone.name + bone = arm.edit_bones.new('palm.04.R') + bone.head = -0.5202, -0.1539, 0.9823 + bone.tail = -0.5401, -0.1685, 0.9424 + bone.roll = 2.0016 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.R']] + bones['palm.04.R'] = bone.name + bone = arm.edit_bones.new('palm.01.R.001') + bone.head = -0.4449, -0.2112, 0.9834 + bone.tail = -0.4688, -0.2515, 0.9479 + bone.roll = 1.7205 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.R']] + bones['palm.01.R.001'] = bone.name + bone = arm.edit_bones.new('f_index.01.L') + bone.head = 0.5344, -0.2215, 0.9730 + bone.tail = 0.5422, -0.2480, 0.9420 + bone.roll = -1.2322 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.01.L']] + bones['f_index.01.L'] = bone.name + bone = arm.edit_bones.new('thumb.01.L') + bone.head = 0.4933, -0.1793, 1.0050 + bone.tail = 0.4910, -0.2232, 0.9879 + bone.roll = 1.3860 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.01.L']] + bones['thumb.01.L'] = bone.name + bone = arm.edit_bones.new('f_middle.01.L') + bone.head = 0.5467, -0.2031, 0.9642 + bone.tail = 0.5569, -0.2295, 0.9290 + bone.roll = -1.4256 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.02.L']] + bones['f_middle.01.L'] = bone.name + bone = arm.edit_bones.new('f_ring.01.L') + bone.head = 0.5458, -0.1845, 0.9541 + bone.tail = 0.5571, -0.2020, 0.9209 + bone.roll = -1.6520 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.03.L']] + bones['f_ring.01.L'] = bone.name + bone = arm.edit_bones.new('f_pinky.01.L') + bone.head = 0.5401, -0.1685, 0.9424 + bone.tail = 0.5464, -0.1775, 0.9167 + bone.roll = -1.7155 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.04.L']] + bones['f_pinky.01.L'] = bone.name + bone = arm.edit_bones.new('f_index.01.R') + bone.head = -0.5344, -0.2215, 0.9730 + bone.tail = -0.5422, -0.2480, 0.9420 + bone.roll = 1.2322 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.01.R']] + bones['f_index.01.R'] = bone.name + bone = arm.edit_bones.new('thumb.01.R') + bone.head = -0.4933, -0.1793, 1.0050 + bone.tail = -0.4910, -0.2232, 0.9879 + bone.roll = -1.3860 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.01.R']] + bones['thumb.01.R'] = bone.name + bone = arm.edit_bones.new('f_middle.01.R') + bone.head = -0.5467, -0.2031, 0.9642 + bone.tail = -0.5569, -0.2295, 0.9290 + bone.roll = 1.4256 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.02.R']] + bones['f_middle.01.R'] = bone.name + bone = arm.edit_bones.new('f_ring.01.R') + bone.head = -0.5458, -0.1845, 0.9541 + bone.tail = -0.5571, -0.2020, 0.9209 + bone.roll = 1.6520 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.03.R']] + bones['f_ring.01.R'] = bone.name + bone = arm.edit_bones.new('f_pinky.01.R') + bone.head = -0.5401, -0.1685, 0.9424 + bone.tail = -0.5464, -0.1775, 0.9167 + bone.roll = 1.7155 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.04.R']] + bones['f_pinky.01.R'] = bone.name + bone = arm.edit_bones.new('f_index.02.L') + bone.head = 0.5422, -0.2480, 0.9420 + bone.tail = 0.5423, -0.2609, 0.9234 + bone.roll = -0.8658 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_index.01.L']] + bones['f_index.02.L'] = bone.name + bone = arm.edit_bones.new('thumb.02.L') + bone.head = 0.4910, -0.2232, 0.9879 + bone.tail = 0.4917, -0.2441, 0.9699 + bone.roll = 0.1471 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thumb.01.L']] + bones['thumb.02.L'] = bone.name + bone = arm.edit_bones.new('f_middle.02.L') + bone.head = 0.5569, -0.2295, 0.9290 + bone.tail = 0.5539, -0.2442, 0.9037 + bone.roll = -0.6708 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_middle.01.L']] + bones['f_middle.02.L'] = bone.name + bone = arm.edit_bones.new('f_ring.02.L') + bone.head = 0.5571, -0.2020, 0.9209 + bone.tail = 0.5529, -0.2141, 0.8920 + bone.roll = -0.9119 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_ring.01.L']] + bones['f_ring.02.L'] = bone.name + bone = arm.edit_bones.new('f_pinky.02.L') + bone.head = 0.5464, -0.1775, 0.9167 + bone.tail = 0.5442, -0.1834, 0.8990 + bone.roll = -1.1989 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_pinky.01.L']] + bones['f_pinky.02.L'] = bone.name + bone = arm.edit_bones.new('f_index.02.R') + bone.head = -0.5422, -0.2480, 0.9420 + bone.tail = -0.5423, -0.2609, 0.9234 + bone.roll = 0.8658 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_index.01.R']] + bones['f_index.02.R'] = bone.name + bone = arm.edit_bones.new('thumb.02.R') + bone.head = -0.4910, -0.2232, 0.9879 + bone.tail = -0.4917, -0.2441, 0.9699 + bone.roll = -0.1471 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thumb.01.R']] + bones['thumb.02.R'] = bone.name + bone = arm.edit_bones.new('f_middle.02.R') + bone.head = -0.5569, -0.2295, 0.9290 + bone.tail = -0.5539, -0.2442, 0.9037 + bone.roll = 0.6708 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_middle.01.R']] + bones['f_middle.02.R'] = bone.name + bone = arm.edit_bones.new('f_ring.02.R') + bone.head = -0.5571, -0.2020, 0.9209 + bone.tail = -0.5529, -0.2141, 0.8920 + bone.roll = 0.9119 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_ring.01.R']] + bones['f_ring.02.R'] = bone.name + bone = arm.edit_bones.new('f_pinky.02.R') + bone.head = -0.5464, -0.1775, 0.9167 + bone.tail = -0.5442, -0.1834, 0.8990 + bone.roll = 1.1989 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_pinky.01.R']] + bones['f_pinky.02.R'] = bone.name + bone = arm.edit_bones.new('f_index.03.L') + bone.head = 0.5423, -0.2609, 0.9234 + bone.tail = 0.5382, -0.2744, 0.8983 + bone.roll = -0.4655 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_index.02.L']] + bones['f_index.03.L'] = bone.name + bone = arm.edit_bones.new('thumb.03.L') + bone.head = 0.4917, -0.2441, 0.9699 + bone.tail = 0.4951, -0.2570, 0.9470 + bone.roll = 0.1713 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thumb.02.L']] + bones['thumb.03.L'] = bone.name + bone = arm.edit_bones.new('f_middle.03.L') + bone.head = 0.5539, -0.2442, 0.9037 + bone.tail = 0.5460, -0.2568, 0.8746 + bone.roll = -0.4901 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_middle.02.L']] + bones['f_middle.03.L'] = bone.name + bone = arm.edit_bones.new('f_ring.03.L') + bone.head = 0.5529, -0.2141, 0.8920 + bone.tail = 0.5423, -0.2271, 0.8627 + bone.roll = -0.6675 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_ring.02.L']] + bones['f_ring.03.L'] = bone.name + bone = arm.edit_bones.new('f_pinky.03.L') + bone.head = 0.5442, -0.1834, 0.8990 + bone.tail = 0.5384, -0.1929, 0.8774 + bone.roll = -1.0735 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_pinky.02.L']] + bones['f_pinky.03.L'] = bone.name + bone = arm.edit_bones.new('f_index.03.R') + bone.head = -0.5423, -0.2609, 0.9234 + bone.tail = -0.5382, -0.2744, 0.8983 + bone.roll = 0.4655 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_index.02.R']] + bones['f_index.03.R'] = bone.name + bone = arm.edit_bones.new('thumb.03.R') + bone.head = -0.4917, -0.2441, 0.9699 + bone.tail = -0.4951, -0.2570, 0.9470 + bone.roll = -0.1713 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thumb.02.R']] + bones['thumb.03.R'] = bone.name + bone = arm.edit_bones.new('f_middle.03.R') + bone.head = -0.5539, -0.2442, 0.9037 + bone.tail = -0.5460, -0.2568, 0.8746 + bone.roll = 0.4901 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_middle.02.R']] + bones['f_middle.03.R'] = bone.name + bone = arm.edit_bones.new('f_ring.03.R') + bone.head = -0.5529, -0.2141, 0.8920 + bone.tail = -0.5423, -0.2271, 0.8627 + bone.roll = 0.6675 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_ring.02.R']] + bones['f_ring.03.R'] = bone.name + bone = arm.edit_bones.new('f_pinky.03.R') + bone.head = -0.5442, -0.1834, 0.8990 + bone.tail = -0.5384, -0.1929, 0.8774 + bone.roll = 1.0735 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_pinky.02.R']] + bones['f_pinky.03.R'] = bone.name + + bpy.ops.object.mode_set(mode='OBJECT') + pbone = obj.pose.bones[bones['spine']] + pbone.rigify_type = 'spines.basic_spine' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Torso (Tweak)') + assign_bone_collection_refs(pbone.rigify_parameters, 'fk', 'Torso (Tweak)') + pbone = obj.pose.bones[bones['spine.001']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + pbone = obj.pose.bones[bones['thigh.L']] + pbone.rigify_type = 'limbs.super_limb' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.L (IK)') + try: + pbone.rigify_parameters.limb_type = 'leg' + except AttributeError: + pass + try: + pbone.rigify_parameters.segments = 3 + except AttributeError: + pass + assign_bone_collection_refs(pbone.rigify_parameters, 'fk', 'Leg.L (FK)') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Leg.L (Tweak)') + pbone = obj.pose.bones[bones['thigh.R']] + pbone.rigify_type = 'limbs.super_limb' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.R (IK)') + try: + pbone.rigify_parameters.limb_type = 'leg' + except AttributeError: + pass + try: + pbone.rigify_parameters.segments = 3 + except AttributeError: + pass + assign_bone_collection_refs(pbone.rigify_parameters, 'fk', 'Leg.R (FK)') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Leg.R (Tweak)') + pbone = obj.pose.bones[bones['spine.002']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + pbone = obj.pose.bones[bones['shin.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.L (IK)') + pbone = obj.pose.bones[bones['shin.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.R (IK)') + pbone = obj.pose.bones[bones['spine.003']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + pbone = obj.pose.bones[bones['foot.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.L (IK)') + pbone = obj.pose.bones[bones['foot.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.R (IK)') + pbone = obj.pose.bones[bones['spine.007']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + pbone = obj.pose.bones[bones['toe.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.L (IK)') + pbone = obj.pose.bones[bones['heel.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.L (IK)') + pbone = obj.pose.bones[bones['toe.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.R (IK)') + pbone = obj.pose.bones[bones['heel.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.R (IK)') + pbone = obj.pose.bones[bones['spine.008']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + pbone = obj.pose.bones[bones['spine.004']] + pbone.rigify_type = 'spines.super_head' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + try: + pbone.rigify_parameters.connect_chain = True + except AttributeError: + pass + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Torso (Tweak)') + pbone = obj.pose.bones[bones['shoulder.L']] + pbone.rigify_type = 'basic.super_copy' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Torso') + try: + pbone.rigify_parameters.make_widget = True + except AttributeError: + pass + try: + pbone.rigify_parameters.super_copy_widget_type = 'shoulder' + except AttributeError: + pass + pbone = obj.pose.bones[bones['shoulder.R']] + pbone.rigify_type = 'basic.super_copy' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Torso') + try: + pbone.rigify_parameters.make_widget = True + except AttributeError: + pass + try: + pbone.rigify_parameters.super_copy_widget_type = 'shoulder' + except AttributeError: + pass + pbone = obj.pose.bones[bones['breast.L']] + pbone.rigify_type = 'basic.super_copy' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Torso') + pbone = obj.pose.bones[bones['breast.R']] + pbone.rigify_type = 'basic.super_copy' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Torso') + pbone = obj.pose.bones[bones['spine.005']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + pbone = obj.pose.bones[bones['upper_arm.L']] + pbone.rigify_type = 'limbs.super_limb' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Arm.L (IK)') + try: + pbone.rigify_parameters.segments = 3 + except AttributeError: + pass + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Arm.L (Tweak)') + assign_bone_collection_refs(pbone.rigify_parameters, 'fk', 'Arm.L (FK)') + pbone = obj.pose.bones[bones['upper_arm.R']] + pbone.rigify_type = 'limbs.super_limb' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Arm.R (IK)') + try: + pbone.rigify_parameters.segments = 3 + except AttributeError: + pass + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Arm.R (Tweak)') + assign_bone_collection_refs(pbone.rigify_parameters, 'fk', 'Arm.R (FK)') + pbone = obj.pose.bones[bones['spine.006']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + pbone = obj.pose.bones[bones['forearm.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Arm.L (IK)') + pbone = obj.pose.bones[bones['forearm.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Arm.R (IK)') + pbone = obj.pose.bones[bones['hand.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Arm.L (IK)') + pbone = obj.pose.bones[bones['hand.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Arm.R (IK)') + pbone = obj.pose.bones[bones['palm.01.L']] + pbone.rigify_type = 'limbs.super_palm' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['palm.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['palm.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['palm.04.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['palm.01.R']] + pbone.rigify_type = 'limbs.super_palm' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['palm.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['palm.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['palm.04.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['palm.01.R.001']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_index.01.L']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['thumb.01.L']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_middle.01.L']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_ring.01.L']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_pinky.01.L']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_index.01.R']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['thumb.01.R']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_middle.01.R']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_ring.01.R']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_pinky.01.R']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_index.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['thumb.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_middle.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_ring.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_pinky.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_index.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['thumb.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_middle.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_ring.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_pinky.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_index.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['thumb.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_middle.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_ring.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_pinky.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_index.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['thumb.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_middle.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_ring.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_pinky.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + + bpy.ops.object.mode_set(mode='EDIT') + for bone in arm.edit_bones: + bone.select = False + bone.select_head = False + bone.select_tail = False + for b in bones: + bone = arm.edit_bones[bones[b]] + bone.select = True + bone.select_head = True + bone.select_tail = True + bone.bbone_x = bone.bbone_z = bone.length * 0.05 + arm.edit_bones.active = bone + + arm.collections.active_index = 0 + + return bones + + +if __name__ == "__main__": + create(bpy.context.active_object) diff --git a/src/addons/ue2rigify/resources/rig_templates/b4_0/metahuman/source_to_deform_links.json b/src/addons/ue2rigify/resources/rig_templates/b4_0/metahuman/source_to_deform_links.json new file mode 100644 index 00000000..c6d80599 --- /dev/null +++ b/src/addons/ue2rigify/resources/rig_templates/b4_0/metahuman/source_to_deform_links.json @@ -0,0 +1,548 @@ +[ + { + "from_node": "Source Rig upperarm_twist_01_l", + "to_node": "Control Rig DEF-upper_arm.L.001", + "from_socket": "upperarm_twist_01_l", + "to_socket": "DEF-upper_arm.L.001" + }, + { + "from_node": "Source Rig upperarm_twist_01_l", + "to_node": "Control Rig DEF-upper_arm.L.001", + "from_socket": "upperarm_twist_01_r", + "to_socket": "DEF-upper_arm.R.001" + }, + { + "from_node": "Source Rig upperarm_twist_02_l", + "to_node": "Control Rig DEF-upper_arm.L.002", + "from_socket": "upperarm_twist_02_l", + "to_socket": "DEF-upper_arm.L.002" + }, + { + "from_node": "Source Rig upperarm_twist_02_l", + "to_node": "Control Rig DEF-upper_arm.L.002", + "from_socket": "upperarm_twist_02_r", + "to_socket": "DEF-upper_arm.R.002" + }, + { + "from_node": "Source Rig lowerarm_l", + "to_node": "Control Rig DEF-forearm.L.001", + "from_socket": "lowerarm_l", + "to_socket": "DEF-forearm.L" + }, + { + "from_node": "Source Rig lowerarm_l", + "to_node": "Control Rig DEF-forearm.L.001", + "from_socket": "lowerarm_r", + "to_socket": "DEF-forearm.R" + }, + { + "from_node": "Source Rig upperarm_l", + "to_node": "Control Rig DEF-upper_arm.L.003", + "from_socket": "upperarm_l", + "to_socket": "DEF-upper_arm.L" + }, + { + "from_node": "Source Rig upperarm_l", + "to_node": "Control Rig DEF-upper_arm.L.003", + "from_socket": "upperarm_r", + "to_socket": "DEF-upper_arm.R" + }, + { + "from_node": "Source Rig upperarm_correctiveRoot_l.001", + "to_node": "Control Rig DEF-upper_arm.L.004", + "from_socket": "upperarm_correctiveRoot_l", + "to_socket": "DEF-upper_arm.L" + }, + { + "from_node": "Source Rig upperarm_correctiveRoot_l.001", + "to_node": "Control Rig DEF-upper_arm.L.004", + "from_socket": "upperarm_correctiveRoot_r", + "to_socket": "DEF-upper_arm.R" + }, + { + "from_node": "Source Rig hand_l", + "to_node": "Control Rig DEF-hand.L", + "from_socket": "hand_l", + "to_socket": "DEF-hand.L" + }, + { + "from_node": "Source Rig hand_l", + "to_node": "Control Rig DEF-hand.L", + "from_socket": "hand_r", + "to_socket": "DEF-hand.R" + }, + { + "from_node": "Source Rig lowerarm_twist_01_l", + "to_node": "Control Rig DEF-forearm.L.003", + "from_socket": "lowerarm_twist_01_l", + "to_socket": "DEF-forearm.L.002" + }, + { + "from_node": "Source Rig lowerarm_twist_01_l", + "to_node": "Control Rig DEF-forearm.L.003", + "from_socket": "lowerarm_twist_01_r", + "to_socket": "DEF-forearm.R.002" + }, + { + "from_node": "Source Rig lowerarm_twist_02_l", + "to_node": "Control Rig DEF-forearm.L.004", + "from_socket": "lowerarm_twist_02_l", + "to_socket": "DEF-forearm.L.001" + }, + { + "from_node": "Source Rig lowerarm_twist_02_l", + "to_node": "Control Rig DEF-forearm.L.004", + "from_socket": "lowerarm_twist_02_r", + "to_socket": "DEF-forearm.R.001" + }, + { + "from_node": "Source Rig thumb_01_l", + "to_node": "Control Rig DEF-thumb.01.L", + "from_socket": "thumb_01_l", + "to_socket": "DEF-thumb.01.L" + }, + { + "from_node": "Source Rig thumb_01_l", + "to_node": "Control Rig DEF-thumb.01.L", + "from_socket": "thumb_01_r", + "to_socket": "DEF-thumb.01.R" + }, + { + "from_node": "Source Rig thumb_02_l", + "to_node": "Control Rig DEF-thumb.02.L", + "from_socket": "thumb_02_l", + "to_socket": "DEF-thumb.02.L" + }, + { + "from_node": "Source Rig thumb_02_l", + "to_node": "Control Rig DEF-thumb.02.L", + "from_socket": "thumb_02_r", + "to_socket": "DEF-thumb.02.R" + }, + { + "from_node": "Source Rig thumb_03_l", + "to_node": "Control Rig DEF-thumb.03.L", + "from_socket": "thumb_03_l", + "to_socket": "DEF-thumb.03.L" + }, + { + "from_node": "Source Rig thumb_03_l", + "to_node": "Control Rig DEF-thumb.03.L", + "from_socket": "thumb_03_r", + "to_socket": "DEF-thumb.03.R" + }, + { + "from_node": "Source Rig index_metacarpal_l", + "to_node": "Control Rig DEF-palm.01.L", + "from_socket": "index_metacarpal_l", + "to_socket": "DEF-palm.01.L" + }, + { + "from_node": "Source Rig index_metacarpal_l", + "to_node": "Control Rig DEF-palm.01.L", + "from_socket": "index_metacarpal_r", + "to_socket": "DEF-palm.01.R" + }, + { + "from_node": "Source Rig index_01_l", + "to_node": "Control Rig DEF-f_index.01.L", + "from_socket": "index_01_l", + "to_socket": "DEF-f_index.01.L" + }, + { + "from_node": "Source Rig index_01_l", + "to_node": "Control Rig DEF-f_index.01.L", + "from_socket": "index_01_r", + "to_socket": "DEF-f_index.01.R" + }, + { + "from_node": "Source Rig index_02_l", + "to_node": "Control Rig DEF-f_index.02.L", + "from_socket": "index_02_l", + "to_socket": "DEF-f_index.02.L" + }, + { + "from_node": "Source Rig index_02_l", + "to_node": "Control Rig DEF-f_index.02.L", + "from_socket": "index_02_r", + "to_socket": "DEF-f_index.02.R" + }, + { + "from_node": "Source Rig index_03_l", + "to_node": "Control Rig DEF-f_index.03.L", + "from_socket": "index_03_l", + "to_socket": "DEF-f_index.03.L" + }, + { + "from_node": "Source Rig index_03_l", + "to_node": "Control Rig DEF-f_index.03.L", + "from_socket": "index_03_r", + "to_socket": "DEF-f_index.03.R" + }, + { + "from_node": "Source Rig middle_metacarpal_l", + "to_node": "Control Rig DEF-palm.02.L", + "from_socket": "middle_metacarpal_l", + "to_socket": "DEF-palm.02.L" + }, + { + "from_node": "Source Rig middle_metacarpal_l", + "to_node": "Control Rig DEF-palm.02.L", + "from_socket": "middle_metacarpal_r", + "to_socket": "DEF-palm.02.R" + }, + { + "from_node": "Source Rig middle_01_l", + "to_node": "Control Rig DEF-f_middle.01.L", + "from_socket": "middle_01_l", + "to_socket": "DEF-f_middle.01.L" + }, + { + "from_node": "Source Rig middle_01_l", + "to_node": "Control Rig DEF-f_middle.01.L", + "from_socket": "middle_01_r", + "to_socket": "DEF-f_middle.01.R" + }, + { + "from_node": "Source Rig middle_02_l", + "to_node": "Control Rig DEF-f_middle.02.L", + "from_socket": "middle_02_l", + "to_socket": "DEF-f_middle.02.L" + }, + { + "from_node": "Source Rig middle_02_l", + "to_node": "Control Rig DEF-f_middle.02.L", + "from_socket": "middle_02_r", + "to_socket": "DEF-f_middle.02.R" + }, + { + "from_node": "Source Rig middle_03_l", + "to_node": "Control Rig DEF-f_middle.03.L", + "from_socket": "middle_03_l", + "to_socket": "DEF-f_middle.03.L" + }, + { + "from_node": "Source Rig middle_03_l", + "to_node": "Control Rig DEF-f_middle.03.L", + "from_socket": "middle_03_r", + "to_socket": "DEF-f_middle.03.R" + }, + { + "from_node": "Source Rig ring_03_l", + "to_node": "Control Rig DEF-f_ring.03.L", + "from_socket": "ring_03_l", + "to_socket": "DEF-f_ring.03.L" + }, + { + "from_node": "Source Rig ring_03_l", + "to_node": "Control Rig DEF-f_ring.03.L", + "from_socket": "ring_03_r", + "to_socket": "DEF-f_ring.03.R" + }, + { + "from_node": "Source Rig thigh_l", + "to_node": "Control Rig DEF-thigh.L.001", + "from_socket": "thigh_l", + "to_socket": "DEF-thigh.L" + }, + { + "from_node": "Source Rig thigh_l", + "to_node": "Control Rig DEF-thigh.L.001", + "from_socket": "thigh_r", + "to_socket": "DEF-thigh.R" + }, + { + "from_node": "Source Rig lowerarm_correctiveRoot_l", + "to_node": "Control Rig DEF-forearm.L", + "from_socket": "lowerarm_correctiveRoot_l", + "to_socket": "DEF-forearm.L" + }, + { + "from_node": "Source Rig lowerarm_correctiveRoot_l", + "to_node": "Control Rig DEF-forearm.L", + "from_socket": "lowerarm_correctiveRoot_r", + "to_socket": "DEF-forearm.R" + }, + { + "from_node": "Source Rig thigh_twist_01_l", + "to_node": "Control Rig DEF-thigh.L.002", + "from_socket": "thigh_twist_01_l", + "to_socket": "DEF-thigh.L.001" + }, + { + "from_node": "Source Rig thigh_twist_01_r", + "to_node": "Control Rig DEF-thigh.R.001", + "from_socket": "thigh_twist_01_r", + "to_socket": "DEF-thigh.R.001" + }, + { + "from_node": "Source Rig thigh_twist_02_r", + "to_node": "Control Rig DEF-thigh.R.002", + "from_socket": "thigh_twist_02_r", + "to_socket": "DEF-thigh.R.002" + }, + { + "from_node": "Source Rig thigh_twist_02_l", + "to_node": "Control Rig DEF-thigh.L.003", + "from_socket": "thigh_twist_02_l", + "to_socket": "DEF-thigh.L.002" + }, + { + "from_node": "Source Rig calf_twist_02_l", + "to_node": "Control Rig DEF-shin.L.002", + "from_socket": "calf_twist_02_l", + "to_socket": "DEF-shin.L.001" + }, + { + "from_node": "Source Rig calf_twist_02_l", + "to_node": "Control Rig DEF-shin.L.002", + "from_socket": "calf_twist_02_r", + "to_socket": "DEF-shin.R.001" + }, + { + "from_node": "Source Rig calf_correctiveRoot_l.001", + "to_node": "Control Rig DEF-shin.L.003", + "from_socket": "calf_correctiveRoot_l", + "to_socket": "DEF-shin.L" + }, + { + "from_node": "Source Rig calf_correctiveRoot_l.001", + "to_node": "Control Rig DEF-shin.L.003", + "from_socket": "calf_correctiveRoot_r", + "to_socket": "DEF-shin.R" + }, + { + "from_node": "Source Rig calf_twist_01_l", + "to_node": "Control Rig DEF-shin.L.004", + "from_socket": "calf_twist_01_l", + "to_socket": "DEF-shin.L.002" + }, + { + "from_node": "Source Rig calf_twist_01_l", + "to_node": "Control Rig DEF-shin.L.004", + "from_socket": "calf_twist_01_r", + "to_socket": "DEF-shin.R.002" + }, + { + "from_node": "Source Rig foot_l", + "to_node": "Control Rig DEF-foot.L", + "from_socket": "foot_l", + "to_socket": "DEF-foot.L" + }, + { + "from_node": "Source Rig foot_l", + "to_node": "Control Rig DEF-foot.L", + "from_socket": "foot_r", + "to_socket": "DEF-foot.R" + }, + { + "from_node": "Source Rig ball_l", + "to_node": "Control Rig DEF-toe.L", + "from_socket": "ball_l", + "to_socket": "DEF-toe.L" + }, + { + "from_node": "Source Rig ball_l", + "to_node": "Control Rig DEF-toe.L", + "from_socket": "ball_r", + "to_socket": "DEF-toe.R" + }, + { + "from_node": "Source Rig calf_l.001", + "to_node": "Control Rig DEF-shin.L.001", + "from_socket": "calf_l", + "to_socket": "DEF-shin.L" + }, + { + "from_node": "Source Rig calf_l.001", + "to_node": "Control Rig DEF-shin.L.001", + "from_socket": "calf_r", + "to_socket": "DEF-shin.R" + }, + { + "from_node": "Source Rig thigh_correctiveRoot_l.001", + "to_node": "Control Rig DEF-thigh.L.004", + "from_socket": "thigh_correctiveRoot_l", + "to_socket": "DEF-thigh.L" + }, + { + "from_node": "Source Rig thigh_correctiveRoot_l.001", + "to_node": "Control Rig DEF-thigh.L.004", + "from_socket": "thigh_correctiveRoot_r", + "to_socket": "DEF-thigh.R" + }, + { + "from_node": "Source Rig pelvis", + "to_node": "Control Rig DEF-spine", + "from_socket": "pelvis", + "to_socket": "DEF-spine" + }, + { + "from_node": "Source Rig spine_01", + "to_node": "Control Rig DEF-spine.001", + "from_socket": "spine_01", + "to_socket": "DEF-spine.001" + }, + { + "from_node": "Source Rig spine_02", + "to_node": "Control Rig DEF-spine.002", + "from_socket": "spine_02", + "to_socket": "DEF-spine.002" + }, + { + "from_node": "Source Rig spine_03", + "to_node": "Control Rig DEF-spine.003", + "from_socket": "spine_03", + "to_socket": "DEF-spine.003" + }, + { + "from_node": "Source Rig spine_04", + "to_node": "Control Rig DEF-spine.007", + "from_socket": "spine_04", + "to_socket": "DEF-spine.007" + }, + { + "from_node": "Source Rig clavicle_pec_l", + "to_node": "Control Rig DEF-breast.L", + "from_socket": "clavicle_pec_l", + "to_socket": "DEF-breast.L" + }, + { + "from_node": "Source Rig clavicle_pec_l", + "to_node": "Control Rig DEF-breast.L", + "from_socket": "clavicle_pec_r", + "to_socket": "DEF-breast.R" + }, + { + "from_node": "Source Rig spine_05", + "to_node": "Control Rig DEF-spine.008", + "from_socket": "spine_05", + "to_socket": "DEF-spine.008" + }, + { + "from_node": "Source Rig clavicle_l", + "to_node": "Control Rig DEF-shoulder.L", + "from_socket": "clavicle_l", + "to_socket": "DEF-shoulder.L" + }, + { + "from_node": "Source Rig clavicle_l", + "to_node": "Control Rig DEF-shoulder.L", + "from_socket": "clavicle_r", + "to_socket": "DEF-shoulder.R" + }, + { + "from_node": "Source Rig neck_02", + "to_node": "Control Rig DEF-spine.005", + "from_socket": "neck_02", + "to_socket": "DEF-spine.005" + }, + { + "from_node": "Source Rig neck_01", + "to_node": "Control Rig DEF-spine.004", + "from_socket": "neck_01", + "to_socket": "DEF-spine.004" + }, + { + "from_node": "Source Rig head", + "to_node": "Control Rig DEF-spine.006", + "from_socket": "head", + "to_socket": "DEF-spine.006" + }, + { + "from_node": "root", + "to_node": "Control Rig root", + "from_socket": "object", + "to_socket": "root" + }, + { + "from_node": "Source Rig pinky_02_l", + "to_node": "Control Rig DEF-f_pinky.02.L", + "from_socket": "pinky_02_l", + "to_socket": "DEF-f_pinky.02.L" + }, + { + "from_node": "Source Rig pinky_02_l", + "to_node": "Control Rig DEF-f_pinky.02.L", + "from_socket": "pinky_02_r", + "to_socket": "DEF-f_pinky.02.R" + }, + { + "from_node": "Source Rig ring_01_l", + "to_node": "Control Rig DEF-f_ring.01.L.001", + "from_socket": "ring_01_l", + "to_socket": "DEF-f_ring.01.L" + }, + { + "from_node": "Source Rig ring_01_l", + "to_node": "Control Rig DEF-f_ring.01.L.001", + "from_socket": "ring_01_r", + "to_socket": "DEF-f_ring.01.R" + }, + { + "from_node": "Source Rig pinky_01_l", + "to_node": "Control Rig DEF-f_pinky.01.L", + "from_socket": "pinky_01_l", + "to_socket": "DEF-f_pinky.01.L" + }, + { + "from_node": "Source Rig pinky_01_l", + "to_node": "Control Rig DEF-f_pinky.01.L", + "from_socket": "pinky_01_r", + "to_socket": "DEF-f_pinky.01.R" + }, + { + "from_node": "Source Rig pinky_03_l", + "to_node": "Control Rig DEF-f_pinky.03.R", + "from_socket": "pinky_03_r", + "to_socket": "DEF-f_pinky.03.R" + }, + { + "from_node": "Source Rig pinky_03_l", + "to_node": "Control Rig DEF-f_pinky.03.R", + "from_socket": "pinky_03_l", + "to_socket": "DEF-f_pinky.03.L" + }, + { + "from_node": "Source Rig ik_hand_l", + "to_node": "Control Rig DEF-hand.L.001", + "from_socket": "ik_hand_l", + "to_socket": "DEF-hand.L" + }, + { + "from_node": "Source Rig ik_hand_r", + "to_node": "Control Rig DEF-hand.R", + "from_socket": "ik_hand_r", + "to_socket": "DEF-hand.R" + }, + { + "from_node": "Source Rig ik_hand_gun", + "to_node": "Control Rig DEF-hand.R.001", + "from_socket": "ik_hand_gun", + "to_socket": "DEF-hand.R" + }, + { + "from_node": "Source Rig ik_foot_l", + "to_node": "Control Rig DEF-foot.L.001", + "from_socket": "ik_foot_l", + "to_socket": "DEF-foot.L" + }, + { + "from_node": "Source Rig ik_foot_r", + "to_node": "Control Rig DEF-foot.R", + "from_socket": "ik_foot_r", + "to_socket": "DEF-foot.R" + }, + { + "from_node": "Source Rig ring_02_l", + "to_node": "Control Rig DEF-f_ring.02.R", + "from_socket": "ring_02_l", + "to_socket": "DEF-f_ring.02.L" + }, + { + "from_node": "Source Rig ring_02_l", + "to_node": "Control Rig DEF-f_ring.02.R", + "from_socket": "ring_02_r", + "to_socket": "DEF-f_ring.02.R" + } +] \ No newline at end of file diff --git a/src/addons/ue2rigify/resources/rig_templates/b4_0/metahuman/source_to_deform_nodes.json b/src/addons/ue2rigify/resources/rig_templates/b4_0/metahuman/source_to_deform_nodes.json new file mode 100644 index 00000000..b52451f7 --- /dev/null +++ b/src/addons/ue2rigify/resources/rig_templates/b4_0/metahuman/source_to_deform_nodes.json @@ -0,0 +1,2494 @@ +[ + { + "name": "Source Rig upperarm_twist_01_l", + "label": "Source Rig upperarm_twist_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 120.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upperarm_twist_01_l", + "upperarm_twist_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-upper_arm.L.001", + "label": "Control Rig DEF-upper_arm.L.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 120.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-upper_arm.L.001", + "DEF-upper_arm.R.001" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig upperarm_twist_02_l", + "label": "Source Rig upperarm_twist_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 240.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upperarm_twist_02_l", + "upperarm_twist_02_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-upper_arm.L.002", + "label": "Control Rig DEF-upper_arm.L.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 240.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-upper_arm.L.002", + "DEF-upper_arm.R.002" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig lowerarm_l", + "label": "Source Rig lowerarm_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 480.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "lowerarm_l", + "lowerarm_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-forearm.L.001", + "label": "Control Rig DEF-forearm.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 480.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-forearm.L", + "DEF-forearm.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig upperarm_l", + "label": "Source Rig upperarm_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 600.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upperarm_l", + "upperarm_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-upper_arm.L.003", + "label": "Control Rig DEF-upper_arm.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 600.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-upper_arm.L", + "DEF-upper_arm.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig upperarm_correctiveRoot_l.001", + "label": "Source Rig upperarm_correctiveRoot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 840.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upperarm_correctiveRoot_l", + "upperarm_correctiveRoot_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-upper_arm.L.004", + "label": "Control Rig DEF-upper_arm.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 840.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-upper_arm.L", + "DEF-upper_arm.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig hand_l", + "label": "Source Rig hand_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 960.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "hand_l", + "hand_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-hand.L", + "label": "Control Rig DEF-hand.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 960.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-hand.L", + "DEF-hand.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig lowerarm_twist_01_l", + "label": "Source Rig lowerarm_twist_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1080.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "lowerarm_twist_01_l", + "lowerarm_twist_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-forearm.L.003", + "label": "Control Rig DEF-forearm.L.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1080.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-forearm.L.002", + "DEF-forearm.R.002" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig lowerarm_twist_02_l", + "label": "Source Rig lowerarm_twist_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1200.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "lowerarm_twist_02_l", + "lowerarm_twist_02_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-forearm.L.004", + "label": "Control Rig DEF-forearm.L.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1200.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-forearm.L.001", + "DEF-forearm.R.001" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig thumb_01_l", + "label": "Source Rig thumb_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1320.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thumb_01_l", + "thumb_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-thumb.01.L", + "label": "Control Rig DEF-thumb.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1320.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thumb.01.L", + "DEF-thumb.01.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig thumb_02_l", + "label": "Source Rig thumb_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1440.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thumb_02_l", + "thumb_02_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-thumb.02.L", + "label": "Control Rig DEF-thumb.02.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1440.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thumb.02.L", + "DEF-thumb.02.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig thumb_03_l", + "label": "Source Rig thumb_03_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1560.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thumb_03_l", + "thumb_03_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-thumb.03.L", + "label": "Control Rig DEF-thumb.03.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1560.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thumb.03.L", + "DEF-thumb.03.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig index_metacarpal_l", + "label": "Source Rig index_metacarpal_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1680.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "index_metacarpal_l", + "index_metacarpal_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-palm.01.L", + "label": "Control Rig DEF-palm.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1680.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-palm.01.L", + "DEF-palm.01.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig index_01_l", + "label": "Source Rig index_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1800.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "index_01_l", + "index_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_index.01.L", + "label": "Control Rig DEF-f_index.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1800.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_index.01.L", + "DEF-f_index.01.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig index_02_l", + "label": "Source Rig index_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 1920.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "index_02_l", + "index_02_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_index.02.L", + "label": "Control Rig DEF-f_index.02.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 1920.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_index.02.L", + "DEF-f_index.02.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig index_03_l", + "label": "Source Rig index_03_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2040.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "index_03_l", + "index_03_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_index.03.L", + "label": "Control Rig DEF-f_index.03.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2040.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_index.03.L", + "DEF-f_index.03.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig middle_metacarpal_l", + "label": "Source Rig middle_metacarpal_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2160.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "middle_metacarpal_l", + "middle_metacarpal_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-palm.02.L", + "label": "Control Rig DEF-palm.02.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2160.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-palm.02.L", + "DEF-palm.02.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig middle_01_l", + "label": "Source Rig middle_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2280.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "middle_01_l", + "middle_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_middle.01.L", + "label": "Control Rig DEF-f_middle.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2280.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_middle.01.L", + "DEF-f_middle.01.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig middle_02_l", + "label": "Source Rig middle_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2400.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "middle_02_l", + "middle_02_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_middle.02.L", + "label": "Control Rig DEF-f_middle.02.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2400.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_middle.02.L", + "DEF-f_middle.02.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig middle_03_l", + "label": "Source Rig middle_03_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2520.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "middle_03_l", + "middle_03_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_middle.03.L", + "label": "Control Rig DEF-f_middle.03.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2520.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_middle.03.L", + "DEF-f_middle.03.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig ring_01_l", + "label": "Source Rig ring_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2640.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "ring_01_l", + "ring_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig ring_03_l", + "label": "Source Rig ring_03_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2880.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "ring_03_l", + "ring_03_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_ring.03.L", + "label": "Control Rig DEF-f_ring.03.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 2880.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_ring.03.L", + "DEF-f_ring.03.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig thigh_l", + "label": "Source Rig thigh_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3480.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_l", + "thigh_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-thigh.L.001", + "label": "Control Rig DEF-thigh.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3480.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thigh.L", + "DEF-thigh.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig lowerarm_correctiveRoot_l", + "label": "Source Rig lowerarm_correctiveRoot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3600.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "lowerarm_correctiveRoot_l", + "lowerarm_correctiveRoot_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-forearm.L", + "label": "Control Rig DEF-forearm.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 3600.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-forearm.L", + "DEF-forearm.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig thigh_twist_01_l", + "label": "Source Rig thigh_twist_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -281.4216003417969, + 4074.18212890625 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_twist_01_l" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-thigh.L.002", + "label": "Control Rig DEF-thigh.L.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 301.9412841796875, + 4069.910400390625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thigh.L.001" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig thigh_twist_01_r", + "label": "Source Rig thigh_twist_01_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -284.6238708496094, + 4002.360107421875 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_twist_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-thigh.R.001", + "label": "Control Rig DEF-thigh.R.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 307.329345703125, + 4002.27392578125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thigh.R.001" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-thigh.R.002", + "label": "Control Rig DEF-thigh.R.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 310.2611083984375, + 3933.42138671875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thigh.R.002" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig thigh_twist_02_r", + "label": "Source Rig thigh_twist_02_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -281.69219970703125, + 3936.43798828125 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_twist_02_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig thigh_twist_02_l", + "label": "Source Rig thigh_twist_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -289.0215759277344, + 4154.71484375 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_twist_02_l" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig calf_twist_02_l", + "label": "Source Rig calf_twist_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 4274.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "calf_twist_02_l", + "calf_twist_02_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-shin.L.002", + "label": "Control Rig DEF-shin.L.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 4274.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-shin.L.001", + "DEF-shin.R.001" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig calf_correctiveRoot_l.001", + "label": "Source Rig calf_correctiveRoot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 4394.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "calf_correctiveRoot_l", + "calf_correctiveRoot_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-shin.L.003", + "label": "Control Rig DEF-shin.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 4394.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-shin.L", + "DEF-shin.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig calf_twist_01_l", + "label": "Source Rig calf_twist_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 4514.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "calf_twist_01_l", + "calf_twist_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-shin.L.004", + "label": "Control Rig DEF-shin.L.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 4514.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-shin.L.002", + "DEF-shin.R.002" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig foot_l", + "label": "Source Rig foot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 4634.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "foot_l", + "foot_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-foot.L", + "label": "Control Rig DEF-foot.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 4634.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-foot.L", + "DEF-foot.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig ball_l", + "label": "Source Rig ball_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 4754.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "ball_l", + "ball_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-toe.L", + "label": "Control Rig DEF-toe.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 4754.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-toe.L", + "DEF-toe.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig calf_l.001", + "label": "Source Rig calf_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 4874.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "calf_l", + "calf_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-shin.L.001", + "label": "Control Rig DEF-shin.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 4874.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-shin.L", + "DEF-shin.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig thigh_correctiveRoot_l.001", + "label": "Source Rig thigh_correctiveRoot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 4994.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_correctiveRoot_l", + "thigh_correctiveRoot_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-thigh.L.004", + "label": "Control Rig DEF-thigh.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 4994.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thigh.L", + "DEF-thigh.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig pelvis", + "label": "Source Rig pelvis", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 5114.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "pelvis" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.001", + "label": "Control Rig DEF-spine.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 5234.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.001" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.002", + "label": "Control Rig DEF-spine.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 5354.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.002" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.003", + "label": "Control Rig DEF-spine.003", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 5474.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.003" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.007", + "label": "Control Rig DEF-spine.007", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 5594.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.007" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig clavicle_pec_l", + "label": "Source Rig clavicle_pec_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 5714.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "clavicle_pec_l", + "clavicle_pec_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-breast.L", + "label": "Control Rig DEF-breast.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 5714.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-breast.L", + "DEF-breast.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig spine_05", + "label": "Source Rig spine_05", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 5834.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_05" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.008", + "label": "Control Rig DEF-spine.008", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 5834.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.008" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig clavicle_l", + "label": "Source Rig clavicle_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 5954.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "clavicle_l", + "clavicle_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-shoulder.L", + "label": "Control Rig DEF-shoulder.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 5954.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-shoulder.L", + "DEF-shoulder.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig neck_02", + "label": "Source Rig neck_02", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 6074.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "neck_02" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.005", + "label": "Control Rig DEF-spine.005", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 6074.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.005" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig neck_01", + "label": "Source Rig neck_01", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 6194.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "neck_01" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.004", + "label": "Control Rig DEF-spine.004", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 6194.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.004" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig head", + "label": "Source Rig head", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 6314.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "head" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.006", + "label": "Control Rig DEF-spine.006", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 300.0, + 6314.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.006" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-thigh.L.003", + "label": "Control Rig DEF-thigh.L.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 298.5340881347656, + 4147.3037109375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thigh.L.002" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "root", + "label": "root", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -256.8031921386719, + 6428.2255859375 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "object" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig root", + "label": "Control Rig root", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 296.83050537109375, + 6425.21240234375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "root" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig spine_02", + "label": "Source Rig spine_02", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 5354.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_02" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig spine_03", + "label": "Source Rig spine_03", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 5474.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_03" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig spine_04", + "label": "Source Rig spine_04", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 5594.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_04" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig spine_01", + "label": "Source Rig spine_01", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 5234.71484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_01" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine", + "label": "Control Rig DEF-spine", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 298.4156799316406, + 5113.13134765625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig pinky_02_l", + "label": "Source Rig pinky_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3120.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "pinky_02_l", + "pinky_02_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig pinky_03_l", + "label": "Source Rig pinky_03_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3240.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "pinky_03_r", + "pinky_03_l" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_ring.01.L.001", + "label": "Control Rig DEF-f_ring.01.L.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 296.7509765625, + 2641.388427734375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_ring.01.L", + "DEF-f_ring.01.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_pinky.02.L", + "label": "Control Rig DEF-f_pinky.02.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 297.8045959472656, + 3123.689453125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_pinky.02.L", + "DEF-f_pinky.02.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig pinky_01_l", + "label": "Source Rig pinky_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 3000.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "pinky_01_l", + "pinky_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_pinky.01.L", + "label": "Control Rig DEF-f_pinky.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 301.0512390136719, + 2999.224609375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_pinky.01.L", + "DEF-f_pinky.01.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_pinky.03.R", + "label": "Control Rig DEF-f_pinky.03.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 301.2749328613281, + 3243.97607421875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_pinky.03.R", + "DEF-f_pinky.03.L" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig ik_hand_l", + "label": "Source Rig ik_hand_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -248.22457885742188, + -49.42024230957031 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "ik_hand_l" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig ik_foot_l", + "label": "Source Rig ik_foot_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -249.59979248046875, + -259.74298095703125 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "ik_foot_l" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig ik_foot_r", + "label": "Source Rig ik_foot_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -246.84939575195312, + -332.5998840332031 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "ik_foot_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig ik_hand_r", + "label": "Source Rig ik_hand_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -249.59979248046875, + -115.40389251708984 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "ik_hand_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig ik_hand_gun", + "label": "Source Rig ik_hand_gun", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -248.22459411621094, + -188.26075744628906 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "ik_hand_gun" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-hand.R.001", + "label": "Control Rig DEF-hand.R.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 270.2280578613281, + -192.38479614257812 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-hand.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-foot.L.001", + "label": "Control Rig DEF-foot.L.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 270.22802734375, + -267.9910583496094 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-foot.L" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-foot.R", + "label": "Control Rig DEF-foot.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 268.852783203125, + -335.3493347167969 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-foot.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-hand.L.001", + "label": "Control Rig DEF-hand.L.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 268.8526916503906, + -50.79493713378906 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-hand.L" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-hand.R", + "label": "Control Rig DEF-hand.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 268.85284423828125, + -119.52787017822266 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-hand.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig ring_02_l", + "label": "Source Rig ring_02_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -300.0, + 2760.0 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "ring_02_l", + "ring_02_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_ring.02.R", + "label": "Control Rig DEF-f_ring.02.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 305.8134765625, + 2754.732666015625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_ring.02.R", + "DEF-f_ring.02.L" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + } +] \ No newline at end of file diff --git a/src/addons/ue2rigify/resources/rig_templates/b4_0/uefn_mannequin/control_metadata.json b/src/addons/ue2rigify/resources/rig_templates/b4_0/uefn_mannequin/control_metadata.json new file mode 100644 index 00000000..5bfd0a11 --- /dev/null +++ b/src/addons/ue2rigify/resources/rig_templates/b4_0/uefn_mannequin/control_metadata.json @@ -0,0 +1,2995 @@ +{ + "object": { + "show_in_front": false + }, + "armature": { + "show_names": false, + "show_bone_custom_shapes": true, + "show_bone_colors": true + }, + "bones": { + "root": { + "custom_shape": { + "name": "WGT-rig_root", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "VIS_upper_arm_ik_pole.L": { + "custom_shape": { + "name": "WGT-rig_VIS_upper_arm_ik_pole.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "VIS_upper_arm_ik_pole.R": { + "custom_shape": { + "name": "WGT-rig_VIS_upper_arm_ik_pole.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "VIS_thigh_ik_pole.L": { + "custom_shape": { + "name": "WGT-rig_VIS_thigh_ik_pole.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "VIS_thigh_ik_pole.R": { + "custom_shape": { + "name": "WGT-rig_VIS_thigh_ik_pole.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "torso": { + "custom_shape": { + "name": "WGT-rig_torso", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "hips": { + "custom_shape": { + "name": "WGT-rig_hips", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "chest": { + "custom_shape": { + "name": "WGT-rig_chest", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "spine_fk.001": { + "custom_shape": { + "name": "WGT-rig_spine_fk.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "spine_fk": { + "custom_shape": { + "name": "WGT-rig_spine_fk", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "tweak_spine": { + "custom_shape": { + "name": "WGT-rig_tweak_spine", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "toe.L": { + "custom_shape": { + "name": "WGT-rig_toe.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "foot_tweak.L": { + "custom_shape": { + "name": "WGT-rig_foot_tweak.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "shin_tweak.L": { + "custom_shape": { + "name": "WGT-rig_shin_tweak.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "shin_tweak.L.001": { + "custom_shape": { + "name": "WGT-rig_shin_tweak.L.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "shin_tweak.L.002": { + "custom_shape": { + "name": "WGT-rig_shin_tweak.L.002", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thigh_tweak.L.001": { + "custom_shape": { + "name": "WGT-rig_thigh_tweak.L.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thigh_tweak.L.002": { + "custom_shape": { + "name": "WGT-rig_thigh_tweak.L.002", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "toe.R": { + "custom_shape": { + "name": "WGT-rig_toe.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "foot_tweak.R": { + "custom_shape": { + "name": "WGT-rig_foot_tweak.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "shin_tweak.R": { + "custom_shape": { + "name": "WGT-rig_shin_tweak.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "shin_tweak.R.001": { + "custom_shape": { + "name": "WGT-rig_shin_tweak.R.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "shin_tweak.R.002": { + "custom_shape": { + "name": "WGT-rig_shin_tweak.R.002", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thigh_tweak.R.001": { + "custom_shape": { + "name": "WGT-rig_thigh_tweak.R.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thigh_tweak.R.002": { + "custom_shape": { + "name": "WGT-rig_thigh_tweak.R.002", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thigh_parent.L": { + "custom_shape": { + "name": "WGT-rig_thigh_parent.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thigh_fk.L": { + "custom_shape": { + "name": "WGT-rig_thigh_fk.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "shin_fk.L": { + "custom_shape": { + "name": "WGT-rig_shin_fk.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "foot_fk.L": { + "custom_shape": { + "name": "WGT-rig_foot_fk.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thigh_ik.L": { + "custom_shape": { + "name": "WGT-rig_thigh_ik.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thigh_tweak.L": { + "custom_shape": { + "name": "WGT-rig_thigh_tweak.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thigh_parent.R": { + "custom_shape": { + "name": "WGT-rig_thigh_parent.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thigh_fk.R": { + "custom_shape": { + "name": "WGT-rig_thigh_fk.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "shin_fk.R": { + "custom_shape": { + "name": "WGT-rig_shin_fk.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "foot_fk.R": { + "custom_shape": { + "name": "WGT-rig_foot_fk.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thigh_ik.R": { + "custom_shape": { + "name": "WGT-rig_thigh_ik.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thigh_tweak.R": { + "custom_shape": { + "name": "WGT-rig_thigh_tweak.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "tweak_spine.001": { + "custom_shape": { + "name": "WGT-rig_tweak_spine.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "spine_fk.002": { + "custom_shape": { + "name": "WGT-rig_spine_fk.002", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "tweak_spine.002": { + "custom_shape": { + "name": "WGT-rig_tweak_spine.002", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "spine_fk.003": { + "custom_shape": { + "name": "WGT-rig_spine_fk.003", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "tweak_spine.003": { + "custom_shape": { + "name": "WGT-rig_tweak_spine.003", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "spine_fk.007": { + "custom_shape": { + "name": "WGT-rig_spine_fk.007", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "tweak_spine.007": { + "custom_shape": { + "name": "WGT-rig_tweak_spine.007", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "spine_fk.008": { + "custom_shape": { + "name": "WGT-rig_spine_fk.008", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "neck": { + "custom_shape": { + "name": "WGT-rig_neck", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "head": { + "custom_shape": { + "name": "WGT-rig_head", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "tweak_spine.004": { + "custom_shape": { + "name": "WGT-rig_tweak_spine.004", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "tweak_spine.005": { + "custom_shape": { + "name": "WGT-rig_tweak_spine.005", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "tweak_spine.008": { + "custom_shape": { + "name": "WGT-rig_tweak_spine.008", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "hand_tweak.L": { + "custom_shape": { + "name": "WGT-rig_hand_tweak.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "forearm_tweak.L": { + "custom_shape": { + "name": "WGT-rig_forearm_tweak.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "forearm_tweak.L.001": { + "custom_shape": { + "name": "WGT-rig_forearm_tweak.L.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "forearm_tweak.L.002": { + "custom_shape": { + "name": "WGT-rig_forearm_tweak.L.002", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "upper_arm_tweak.L.001": { + "custom_shape": { + "name": "WGT-rig_upper_arm_tweak.L.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "upper_arm_tweak.L.002": { + "custom_shape": { + "name": "WGT-rig_upper_arm_tweak.L.002", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "upper_arm_parent.L": { + "custom_shape": { + "name": "WGT-rig_upper_arm_parent.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "upper_arm_fk.L": { + "custom_shape": { + "name": "WGT-rig_upper_arm_fk.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "forearm_fk.L": { + "custom_shape": { + "name": "WGT-rig_forearm_fk.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "hand_fk.L": { + "custom_shape": { + "name": "WGT-rig_hand_fk.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "upper_arm_ik.L": { + "custom_shape": { + "name": "WGT-rig_upper_arm_ik.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "upper_arm_tweak.L": { + "custom_shape": { + "name": "WGT-rig_upper_arm_tweak.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_index.01_master.L": { + "custom_shape": { + "name": "WGT-rig_f_index.01_master.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thumb.01_master.L": { + "custom_shape": { + "name": "WGT-rig_thumb.01_master.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_index.01.L": { + "custom_shape": { + "name": "WGT-rig_f_index.01.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_index.02.L": { + "custom_shape": { + "name": "WGT-rig_f_index.02.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_index.03.L": { + "custom_shape": { + "name": "WGT-rig_f_index.03.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_index.01.L.001": { + "custom_shape": { + "name": "WGT-rig_f_index.01.L.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thumb.01.L": { + "custom_shape": { + "name": "WGT-rig_thumb.01.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thumb.02.L": { + "custom_shape": { + "name": "WGT-rig_thumb.02.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thumb.03.L": { + "custom_shape": { + "name": "WGT-rig_thumb.03.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thumb.01.L.001": { + "custom_shape": { + "name": "WGT-rig_thumb.01.L.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_middle.01_master.L": { + "custom_shape": { + "name": "WGT-rig_f_middle.01_master.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_middle.01.L": { + "custom_shape": { + "name": "WGT-rig_f_middle.01.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_middle.02.L": { + "custom_shape": { + "name": "WGT-rig_f_middle.02.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_middle.03.L": { + "custom_shape": { + "name": "WGT-rig_f_middle.03.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_middle.01.L.001": { + "custom_shape": { + "name": "WGT-rig_f_middle.01.L.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_ring.01_master.L": { + "custom_shape": { + "name": "WGT-rig_f_ring.01_master.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_ring.01.L": { + "custom_shape": { + "name": "WGT-rig_f_ring.01.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_ring.02.L": { + "custom_shape": { + "name": "WGT-rig_f_ring.02.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_ring.03.L": { + "custom_shape": { + "name": "WGT-rig_f_ring.03.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_ring.01.L.001": { + "custom_shape": { + "name": "WGT-rig_f_ring.01.L.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_pinky.01_master.L": { + "custom_shape": { + "name": "WGT-rig_f_pinky.01_master.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_pinky.01.L": { + "custom_shape": { + "name": "WGT-rig_f_pinky.01.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_pinky.02.L": { + "custom_shape": { + "name": "WGT-rig_f_pinky.02.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_pinky.03.L": { + "custom_shape": { + "name": "WGT-rig_f_pinky.03.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_pinky.01.L.001": { + "custom_shape": { + "name": "WGT-rig_f_pinky.01.L.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "palm.L": { + "custom_shape": { + "name": "WGT-rig_palm.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "hand_tweak.R": { + "custom_shape": { + "name": "WGT-rig_hand_tweak.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "forearm_tweak.R": { + "custom_shape": { + "name": "WGT-rig_forearm_tweak.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "forearm_tweak.R.001": { + "custom_shape": { + "name": "WGT-rig_forearm_tweak.R.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "forearm_tweak.R.002": { + "custom_shape": { + "name": "WGT-rig_forearm_tweak.R.002", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "upper_arm_tweak.R.001": { + "custom_shape": { + "name": "WGT-rig_upper_arm_tweak.R.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "upper_arm_tweak.R.002": { + "custom_shape": { + "name": "WGT-rig_upper_arm_tweak.R.002", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "upper_arm_parent.R": { + "custom_shape": { + "name": "WGT-rig_upper_arm_parent.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "upper_arm_fk.R": { + "custom_shape": { + "name": "WGT-rig_upper_arm_fk.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "forearm_fk.R": { + "custom_shape": { + "name": "WGT-rig_forearm_fk.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "hand_fk.R": { + "custom_shape": { + "name": "WGT-rig_hand_fk.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "upper_arm_ik.R": { + "custom_shape": { + "name": "WGT-rig_upper_arm_ik.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "upper_arm_tweak.R": { + "custom_shape": { + "name": "WGT-rig_upper_arm_tweak.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_index.01_master.R": { + "custom_shape": { + "name": "WGT-rig_f_index.01_master.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thumb.01_master.R": { + "custom_shape": { + "name": "WGT-rig_thumb.01_master.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_index.01.R": { + "custom_shape": { + "name": "WGT-rig_f_index.01.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_index.02.R": { + "custom_shape": { + "name": "WGT-rig_f_index.02.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_index.03.R": { + "custom_shape": { + "name": "WGT-rig_f_index.03.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_index.01.R.001": { + "custom_shape": { + "name": "WGT-rig_f_index.01.R.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thumb.01.R": { + "custom_shape": { + "name": "WGT-rig_thumb.01.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thumb.02.R": { + "custom_shape": { + "name": "WGT-rig_thumb.02.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thumb.03.R": { + "custom_shape": { + "name": "WGT-rig_thumb.03.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thumb.01.R.001": { + "custom_shape": { + "name": "WGT-rig_thumb.01.R.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_middle.01_master.R": { + "custom_shape": { + "name": "WGT-rig_f_middle.01_master.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_middle.01.R": { + "custom_shape": { + "name": "WGT-rig_f_middle.01.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_middle.02.R": { + "custom_shape": { + "name": "WGT-rig_f_middle.02.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_middle.03.R": { + "custom_shape": { + "name": "WGT-rig_f_middle.03.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_middle.01.R.001": { + "custom_shape": { + "name": "WGT-rig_f_middle.01.R.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_ring.01_master.R": { + "custom_shape": { + "name": "WGT-rig_f_ring.01_master.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_ring.01.R": { + "custom_shape": { + "name": "WGT-rig_f_ring.01.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_ring.02.R": { + "custom_shape": { + "name": "WGT-rig_f_ring.02.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_ring.03.R": { + "custom_shape": { + "name": "WGT-rig_f_ring.03.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_ring.01.R.001": { + "custom_shape": { + "name": "WGT-rig_f_ring.01.R.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_pinky.01_master.R": { + "custom_shape": { + "name": "WGT-rig_f_pinky.01_master.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_pinky.01.R": { + "custom_shape": { + "name": "WGT-rig_f_pinky.01.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_pinky.02.R": { + "custom_shape": { + "name": "WGT-rig_f_pinky.02.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_pinky.03.R": { + "custom_shape": { + "name": "WGT-rig_f_pinky.03.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "f_pinky.01.R.001": { + "custom_shape": { + "name": "WGT-rig_f_pinky.01.R.001", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "palm.01.R": { + "custom_shape": { + "name": "WGT-rig_palm.01.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "breast.L": { + "custom_shape": { + "name": "WGT-rig_breast.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "breast.R": { + "custom_shape": { + "name": "WGT-rig_breast.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "shoulder.L": { + "custom_shape": { + "name": "WGT-rig_shoulder.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "shoulder.R": { + "custom_shape": { + "name": "WGT-rig_shoulder.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "hand_ik.L": { + "custom_shape": { + "name": "WGT-rig_hand_ik.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "upper_arm_ik_target.L": { + "custom_shape": { + "name": "WGT-rig_upper_arm_ik_target.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "hand_ik.R": { + "custom_shape": { + "name": "WGT-rig_hand_ik.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "upper_arm_ik_target.R": { + "custom_shape": { + "name": "WGT-rig_upper_arm_ik_target.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "foot_ik.L": { + "custom_shape": { + "name": "WGT-rig_foot_ik.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "foot_spin_ik.L": { + "custom_shape": { + "name": "WGT-rig_foot_spin_ik.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "foot_heel_ik.L": { + "custom_shape": { + "name": "WGT-rig_foot_heel_ik.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thigh_ik_target.L": { + "custom_shape": { + "name": "WGT-rig_thigh_ik_target.L", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "foot_ik.R": { + "custom_shape": { + "name": "WGT-rig_foot_ik.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "foot_spin_ik.R": { + "custom_shape": { + "name": "WGT-rig_foot_spin_ik.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "foot_heel_ik.R": { + "custom_shape": { + "name": "WGT-rig_foot_heel_ik.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + }, + "thigh_ik_target.R": { + "custom_shape": { + "name": "WGT-rig_thigh_ik_target.R", + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "scale": [ + -1.0, + 1.0, + 1.0 + ], + "use_bone_size": true + } + } + }, + "bone_colors": {} +} \ No newline at end of file diff --git a/src/addons/ue2rigify/resources/rig_templates/b4_0/uefn_mannequin/fk_to_source_links.json b/src/addons/ue2rigify/resources/rig_templates/b4_0/uefn_mannequin/fk_to_source_links.json new file mode 100644 index 00000000..8f985594 --- /dev/null +++ b/src/addons/ue2rigify/resources/rig_templates/b4_0/uefn_mannequin/fk_to_source_links.json @@ -0,0 +1,512 @@ +[ + { + "from_node": "Control Rig root", + "to_node": "root", + "from_socket": "root", + "to_socket": "object" + }, + { + "from_node": "Control Rig shoulder.R", + "to_node": "Source Rig clavicle_r", + "from_socket": "shoulder.R", + "to_socket": "clavicle_r" + }, + { + "from_node": "Control Rig shoulder.R", + "to_node": "Source Rig clavicle_r", + "from_socket": "shoulder.L", + "to_socket": "clavicle_l" + }, + { + "from_node": "Control Rig neck", + "to_node": "Source Rig neck_02", + "from_socket": "neck", + "to_socket": "neck_02" + }, + { + "from_node": "Control Rig head", + "to_node": "Source Rig head", + "from_socket": "head", + "to_socket": "head" + }, + { + "from_node": "Control Rig spine_fk", + "to_node": "Source Rig spine_01.001", + "from_socket": "spine_fk", + "to_socket": "spine_01" + }, + { + "from_node": "Control Rig spine_fk.001", + "to_node": "Source Rig spine_02.001", + "from_socket": "spine_fk.001", + "to_socket": "spine_02" + }, + { + "from_node": "Control Rig spine_fk.002", + "to_node": "Source Rig spine_02", + "from_socket": "spine_fk.002", + "to_socket": "spine_02" + }, + { + "from_node": "Control Rig spine_fk.003", + "to_node": "Source Rig spine_03", + "from_socket": "spine_fk.003", + "to_socket": "spine_03" + }, + { + "from_node": "Control Rig spine_fk.007", + "to_node": "Source Rig spine_04", + "from_socket": "spine_fk.007", + "to_socket": "spine_04" + }, + { + "from_node": "Control Rig spine_fk.008", + "to_node": "Source Rig spine_05", + "from_socket": "spine_fk.008", + "to_socket": "spine_05" + }, + { + "from_node": "Control Rig tweak_spine", + "to_node": "Source Rig pelvis", + "from_socket": "tweak_spine", + "to_socket": "pelvis" + }, + { + "from_node": "Control Rig tweak_spine.001", + "to_node": "Source Rig spine_01", + "from_socket": "tweak_spine.001", + "to_socket": "spine_01" + }, + { + "from_node": "Control Rig thigh_tweak.R.001", + "to_node": "Source Rig thigh_twist_01_r", + "from_socket": "thigh_tweak.L.001", + "to_socket": "thigh_twist_01_l" + }, + { + "from_node": "Control Rig thigh_tweak.R.001", + "to_node": "Source Rig thigh_twist_01_r", + "from_socket": "thigh_tweak.R.001", + "to_socket": "thigh_twist_01_r" + }, + { + "from_node": "Control Rig shin_tweak.R", + "to_node": "Source Rig calf_r", + "from_socket": "shin_tweak.L", + "to_socket": "calf_l" + }, + { + "from_node": "Control Rig shin_tweak.R", + "to_node": "Source Rig calf_r", + "from_socket": "shin_tweak.R", + "to_socket": "calf_r" + }, + { + "from_node": "Control Rig shin_tweak.R.001", + "to_node": "Source Rig calf_twist_02_r", + "from_socket": "shin_tweak.L.001", + "to_socket": "calf_twist_02_l" + }, + { + "from_node": "Control Rig shin_tweak.R.001", + "to_node": "Source Rig calf_twist_02_r", + "from_socket": "shin_tweak.R.001", + "to_socket": "calf_twist_02_r" + }, + { + "from_node": "Control Rig shin_tweak.R.002", + "to_node": "Source Rig calf_twist_01_r", + "from_socket": "shin_tweak.L.002", + "to_socket": "calf_twist_01_l" + }, + { + "from_node": "Control Rig shin_tweak.R.002", + "to_node": "Source Rig calf_twist_01_r", + "from_socket": "shin_tweak.R.002", + "to_socket": "calf_twist_01_r" + }, + { + "from_node": "Control Rig toe.R", + "to_node": "Source Rig ball_r", + "from_socket": "toe.L", + "to_socket": "ball_l" + }, + { + "from_node": "Control Rig toe.R", + "to_node": "Source Rig ball_r", + "from_socket": "toe.R", + "to_socket": "ball_r" + }, + { + "from_node": "Control Rig foot_tweak.R", + "to_node": "Source Rig foot_r", + "from_socket": "foot_tweak.L", + "to_socket": "foot_l" + }, + { + "from_node": "Control Rig foot_tweak.R", + "to_node": "Source Rig foot_r", + "from_socket": "foot_tweak.R", + "to_socket": "foot_r" + }, + { + "from_node": "Control Rig foot_fk.R", + "to_node": "Source Rig foot_r.001", + "from_socket": "foot_fk.L", + "to_socket": "foot_l" + }, + { + "from_node": "Control Rig foot_fk.R", + "to_node": "Source Rig foot_r.001", + "from_socket": "foot_fk.R", + "to_socket": "foot_r" + }, + { + "from_node": "Control Rig shin_fk.R", + "to_node": "Source Rig calf_r.001", + "from_socket": "shin_fk.L", + "to_socket": "calf_l" + }, + { + "from_node": "Control Rig shin_fk.R", + "to_node": "Source Rig calf_r.001", + "from_socket": "shin_fk.R", + "to_socket": "calf_r" + }, + { + "from_node": "Control Rig thigh_tweak.R", + "to_node": "Control Rig thigh_fk.R.002", + "from_socket": "thigh_tweak.L", + "to_socket": "thigh_l" + }, + { + "from_node": "Control Rig thigh_tweak.R", + "to_node": "Control Rig thigh_fk.R.002", + "from_socket": "thigh_tweak.R", + "to_socket": "thigh_r" + }, + { + "from_node": "Control Rig thigh_fk.R", + "to_node": "Control Rig thigh_fk.R.001", + "from_socket": "thigh_fk.L", + "to_socket": "thigh_l" + }, + { + "from_node": "Control Rig thigh_fk.R", + "to_node": "Control Rig thigh_fk.R.001", + "from_socket": "thigh_fk.R", + "to_socket": "thigh_r" + }, + { + "from_node": "Control Rig f_pinky.01.L", + "to_node": "Source Rig pinky_01_l", + "from_socket": "f_pinky.03.L", + "to_socket": "pinky_03_l" + }, + { + "from_node": "Control Rig f_pinky.01.L", + "to_node": "Source Rig pinky_01_l", + "from_socket": "f_pinky.02.L", + "to_socket": "pinky_02_l" + }, + { + "from_node": "Control Rig f_pinky.01.L", + "to_node": "Source Rig pinky_01_l", + "from_socket": "f_pinky.01.L", + "to_socket": "pinky_01_l" + }, + { + "from_node": "Control Rig f_pinky.01.R", + "to_node": "Source Rig pinky_01_r", + "from_socket": "f_pinky.03.R", + "to_socket": "pinky_03_r" + }, + { + "from_node": "Control Rig f_pinky.01.R", + "to_node": "Source Rig pinky_01_r", + "from_socket": "f_pinky.02.R", + "to_socket": "pinky_02_r" + }, + { + "from_node": "Control Rig f_pinky.01.R", + "to_node": "Source Rig pinky_01_r", + "from_socket": "f_pinky.01.R", + "to_socket": "pinky_01_r" + }, + { + "from_node": "Control Rig f_ring.01.L", + "to_node": "Source Rig ring_01_l", + "from_socket": "f_ring.03.L", + "to_socket": "ring_03_l" + }, + { + "from_node": "Control Rig f_ring.01.L", + "to_node": "Source Rig ring_01_l", + "from_socket": "f_ring.02.L", + "to_socket": "ring_02_l" + }, + { + "from_node": "Control Rig f_ring.01.L", + "to_node": "Source Rig ring_01_l", + "from_socket": "f_ring.01.L", + "to_socket": "ring_01_l" + }, + { + "from_node": "Control Rig f_ring.01.R", + "to_node": "Source Rig ring_01_r", + "from_socket": "f_ring.03.R", + "to_socket": "ring_03_r" + }, + { + "from_node": "Control Rig f_ring.01.R", + "to_node": "Source Rig ring_01_r", + "from_socket": "f_ring.02.R", + "to_socket": "ring_02_r" + }, + { + "from_node": "Control Rig f_ring.01.R", + "to_node": "Source Rig ring_01_r", + "from_socket": "f_ring.01.R", + "to_socket": "ring_01_r" + }, + { + "from_node": "Control Rig f_middle.01.L", + "to_node": "Source Rig middle_01_l", + "from_socket": "f_middle.03.L", + "to_socket": "middle_03_l" + }, + { + "from_node": "Control Rig f_middle.01.L", + "to_node": "Source Rig middle_01_l", + "from_socket": "f_middle.02.L", + "to_socket": "middle_02_l" + }, + { + "from_node": "Control Rig f_middle.01.L", + "to_node": "Source Rig middle_01_l", + "from_socket": "f_middle.01.L", + "to_socket": "middle_01_l" + }, + { + "from_node": "Control Rig f_middle.01.R", + "to_node": "Source Rig middle_01_r", + "from_socket": "f_middle.03.R", + "to_socket": "middle_03_r" + }, + { + "from_node": "Control Rig f_middle.01.R", + "to_node": "Source Rig middle_01_r", + "from_socket": "f_middle.02.R", + "to_socket": "middle_02_r" + }, + { + "from_node": "Control Rig f_middle.01.R", + "to_node": "Source Rig middle_01_r", + "from_socket": "f_middle.01.R", + "to_socket": "middle_01_r" + }, + { + "from_node": "Control Rig f_index.01.L", + "to_node": "Source Rig index_01_l", + "from_socket": "f_index.03.L", + "to_socket": "index_03_l" + }, + { + "from_node": "Control Rig f_index.01.L", + "to_node": "Source Rig index_01_l", + "from_socket": "f_index.02.L", + "to_socket": "index_02_l" + }, + { + "from_node": "Control Rig f_index.01.L", + "to_node": "Source Rig index_01_l", + "from_socket": "f_index.01.L", + "to_socket": "index_01_l" + }, + { + "from_node": "Control Rig f_index.01.R", + "to_node": "Source Rig index_01_r", + "from_socket": "f_index.03.R", + "to_socket": "index_03_r" + }, + { + "from_node": "Control Rig f_index.01.R", + "to_node": "Source Rig index_01_r", + "from_socket": "f_index.02.R", + "to_socket": "index_02_r" + }, + { + "from_node": "Control Rig f_index.01.R", + "to_node": "Source Rig index_01_r", + "from_socket": "f_index.01.R", + "to_socket": "index_01_r" + }, + { + "from_node": "Control Rig thumb.01.L", + "to_node": "Source Rig thumb_01_l", + "from_socket": "thumb.03.L", + "to_socket": "thumb_03_l" + }, + { + "from_node": "Control Rig thumb.01.L", + "to_node": "Source Rig thumb_01_l", + "from_socket": "thumb.02.L", + "to_socket": "thumb_02_l" + }, + { + "from_node": "Control Rig thumb.01.L", + "to_node": "Source Rig thumb_01_l", + "from_socket": "thumb.01.L", + "to_socket": "thumb_01_l" + }, + { + "from_node": "Control Rig thumb.01.R", + "to_node": "Source Rig thumb_01_r", + "from_socket": "thumb.03.R", + "to_socket": "thumb_03_r" + }, + { + "from_node": "Control Rig thumb.01.R", + "to_node": "Source Rig thumb_01_r", + "from_socket": "thumb.02.R", + "to_socket": "thumb_02_r" + }, + { + "from_node": "Control Rig thumb.01.R", + "to_node": "Source Rig thumb_01_r", + "from_socket": "thumb.01.R", + "to_socket": "thumb_01_r" + }, + { + "from_node": "Control Rig upper_arm_tweak.R.001", + "to_node": "Source Rig upperarm_twist_01_r", + "from_socket": "upper_arm_tweak.L.001", + "to_socket": "upperarm_twist_01_l" + }, + { + "from_node": "Control Rig upper_arm_tweak.R.001", + "to_node": "Source Rig upperarm_twist_01_r", + "from_socket": "upper_arm_tweak.R.001", + "to_socket": "upperarm_twist_01_r" + }, + { + "from_node": "Control Rig upper_arm_tweak.R.002", + "to_node": "Source Rig upperarm_twist_02_r", + "from_socket": "upper_arm_tweak.L.002", + "to_socket": "upperarm_twist_02_l" + }, + { + "from_node": "Control Rig upper_arm_tweak.R.002", + "to_node": "Source Rig upperarm_twist_02_r", + "from_socket": "upper_arm_tweak.R.002", + "to_socket": "upperarm_twist_02_r" + }, + { + "from_node": "Control Rig hand_tweak.R", + "to_node": "Source Rig hand_r", + "from_socket": "hand_tweak.L", + "to_socket": "hand_l" + }, + { + "from_node": "Control Rig hand_tweak.R", + "to_node": "Source Rig hand_r", + "from_socket": "hand_tweak.R", + "to_socket": "hand_r" + }, + { + "from_node": "Control Rig forearm_tweak.R.002", + "to_node": "Source Rig lowerarm_twist_01_r", + "from_socket": "forearm_tweak.L.002", + "to_socket": "lowerarm_twist_01_l" + }, + { + "from_node": "Control Rig forearm_tweak.R.002", + "to_node": "Source Rig lowerarm_twist_01_r", + "from_socket": "forearm_tweak.R.002", + "to_socket": "lowerarm_twist_01_r" + }, + { + "from_node": "Control Rig forearm_tweak.R.001", + "to_node": "Source Rig lowerarm_twist_02_r", + "from_socket": "forearm_tweak.L.001", + "to_socket": "lowerarm_twist_02_l" + }, + { + "from_node": "Control Rig forearm_tweak.R.001", + "to_node": "Source Rig lowerarm_twist_02_r", + "from_socket": "forearm_tweak.R.001", + "to_socket": "lowerarm_twist_02_r" + }, + { + "from_node": "Control Rig hand_fk.R", + "to_node": "Source Rig hand_r.001", + "from_socket": "hand_fk.L", + "to_socket": "hand_l" + }, + { + "from_node": "Control Rig hand_fk.R", + "to_node": "Source Rig hand_r.001", + "from_socket": "hand_fk.R", + "to_socket": "hand_r" + }, + { + "from_node": "Control Rig forearm_fk.R", + "to_node": "Source Rig lowerarm_r", + "from_socket": "forearm_fk.L", + "to_socket": "lowerarm_l" + }, + { + "from_node": "Control Rig forearm_fk.R", + "to_node": "Source Rig lowerarm_r", + "from_socket": "forearm_fk.R", + "to_socket": "lowerarm_r" + }, + { + "from_node": "Control Rig upper_arm_tweak.R", + "to_node": "Source Rig upperarm_twist_01_r.002", + "from_socket": "upper_arm_tweak.L", + "to_socket": "upperarm_twist_01_l" + }, + { + "from_node": "Control Rig upper_arm_tweak.R", + "to_node": "Source Rig upperarm_twist_01_r.002", + "from_socket": "upper_arm_tweak.R", + "to_socket": "upperarm_twist_01_r" + }, + { + "from_node": "Control Rig upper_arm_fk.R", + "to_node": "Source Rig upperarm_r", + "from_socket": "upper_arm_fk.L", + "to_socket": "upperarm_l" + }, + { + "from_node": "Control Rig upper_arm_fk.R", + "to_node": "Source Rig upperarm_r", + "from_socket": "upper_arm_fk.R", + "to_socket": "upperarm_r" + }, + { + "from_node": "Control Rig hand_ik.R", + "to_node": "Source Rig ik_hand_r", + "from_socket": "hand_ik.L", + "to_socket": "ik_hand_l" + }, + { + "from_node": "Control Rig hand_ik.R", + "to_node": "Source Rig ik_hand_r", + "from_socket": "hand_ik.R", + "to_socket": "ik_hand_r" + }, + { + "from_node": "Control Rig foot_ik.R", + "to_node": "Source Rig ik_foot_r", + "from_socket": "foot_ik.L", + "to_socket": "ik_foot_l" + }, + { + "from_node": "Control Rig foot_ik.R", + "to_node": "Source Rig ik_foot_r", + "from_socket": "foot_ik.R", + "to_socket": "ik_foot_r" + } +] \ No newline at end of file diff --git a/src/addons/ue2rigify/resources/rig_templates/b4_0/uefn_mannequin/fk_to_source_nodes.json b/src/addons/ue2rigify/resources/rig_templates/b4_0/uefn_mannequin/fk_to_source_nodes.json new file mode 100644 index 00000000..6fbbf601 --- /dev/null +++ b/src/addons/ue2rigify/resources/rig_templates/b4_0/uefn_mannequin/fk_to_source_nodes.json @@ -0,0 +1,1978 @@ +[ + { + "name": "Control Rig tweak_spine", + "label": "Control Rig tweak_spine", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -337.4118347167969, + 1576.3341064453125 + ], + "width": 188.047119140625, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "tweak_spine" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig tweak_spine.001", + "label": "Control Rig tweak_spine.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -352.9218444824219, + 1684.91259765625 + ], + "width": 203.6903076171875, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "tweak_spine.001" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig spine_01", + "label": "Source Rig spine_01", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -80.28257751464844, + 1684.912353515625 + ], + "width": 194.7513427734375, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "spine_01" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig pelvis", + "label": "Source Rig pelvis", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -63.77410888671875, + 1575.55517578125 + ], + "width": 183.57785034179688, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "pelvis" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig spine_fk.008", + "label": "Control Rig spine_fk.008", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -347.3382873535156, + 1375.8642578125 + ], + "width": 193.63421630859375, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_fk.008" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig spine_fk.007", + "label": "Control Rig spine_fk.007", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -343.9861145019531, + 1275.41162109375 + ], + "width": 189.1646728515625, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_fk.007" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig spine_fk.003", + "label": "Control Rig spine_fk.003", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -348.4556579589844, + 1167.14599609375 + ], + "width": 192.516845703125, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_fk.003" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig spine_fk.002", + "label": "Control Rig spine_fk.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -346.2208557128906, + 1070.0419921875 + ], + "width": 189.16470336914062, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_fk.002" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig spine_fk.001", + "label": "Control Rig spine_fk.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -347.3382263183594, + 982.9830322265625 + ], + "width": 188.04733276367188, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_fk.001" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig spine_fk", + "label": "Control Rig spine_fk", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -343.9864807128906, + 883.646484375 + ], + "width": 185.8128662109375, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_fk" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig head", + "label": "Control Rig head", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -303.76055908203125, + 760.8717041015625 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "head" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig neck", + "label": "Control Rig neck", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -299.2909851074219, + 669.346923828125 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "neck" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig spine_05", + "label": "Source Rig spine_05", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -36.94643020629883, + 1376.9364013671875 + ], + "width": 185.81268310546875, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "spine_05" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig spine_04", + "label": "Source Rig spine_04", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -35.73052978515625, + 1274.58740234375 + ], + "width": 186.93008422851562, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "spine_04" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig spine_03", + "label": "Source Rig spine_03", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -30.1436767578125, + 1165.2052001953125 + ], + "width": 195.86917114257812, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "spine_03" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig spine_02", + "label": "Source Rig spine_02", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -34.61314010620117, + 1070.3330078125 + ], + "width": 208.16036987304688, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "spine_02" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig spine_02.001", + "label": "Source Rig spine_02.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -35.50727844238281, + 984.0518188476562 + ], + "width": 208.16036987304688, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "spine_02" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig spine_01.001", + "label": "Source Rig spine_01.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -33.4871826171875, + 886.3089599609375 + ], + "width": 203.69110107421875, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "spine_01" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig head", + "label": "Source Rig head", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -31.25241470336914, + 763.53271484375 + ], + "width": 203.69110107421875, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "head" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig neck_02", + "label": "Source Rig neck_02", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -14.49163818359375, + 669.7763671875 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "neck_02" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig shoulder.R", + "label": "Control Rig shoulder.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -336.0314636230469, + 536.2474365234375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "shoulder.L", + "shoulder.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig clavicle_r", + "label": "Source Rig clavicle_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -29.899250030517578, + 538.479736328125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "clavicle_l", + "clavicle_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig root", + "label": "Control Rig root", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -299.978515625, + 384.45086669921875 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "root" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "root", + "label": "root", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -19.57404327392578, + 385.56695556640625 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "object" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig thigh_tweak.R.001", + "label": "Control Rig thigh_tweak.R.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -354.6676025390625, + 237.67697143554688 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_tweak.L.001", + "thigh_tweak.R.001" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig thigh_twist_01_r", + "label": "Source Rig thigh_twist_01_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -41.81458282470703, + 237.677001953125 + ], + "width": 250.271728515625, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "thigh_twist_01_l", + "thigh_twist_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig shin_tweak.R", + "label": "Control Rig shin_tweak.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -363.5023193359375, + -94.82408142089844 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "shin_tweak.L", + "shin_tweak.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig calf_r", + "label": "Source Rig calf_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -35.618988037109375, + -95.38214874267578 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "calf_l", + "calf_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig shin_tweak.R.001", + "label": "Control Rig shin_tweak.R.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -363.9718933105469, + -187.82012939453125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "shin_tweak.L.001", + "shin_tweak.R.001" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig calf_twist_02_r", + "label": "Source Rig calf_twist_02_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -48.37723922729492, + -187.26205444335938 + ], + "width": 236.86590576171875, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "calf_twist_02_l", + "calf_twist_02_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig shin_tweak.R.002", + "label": "Control Rig shin_tweak.R.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -356.15185546875, + -271.53131103515625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "shin_tweak.L.002", + "shin_tweak.R.002" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig calf_twist_01_r", + "label": "Source Rig calf_twist_01_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -29.94425392150879, + -272.64752197265625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "calf_twist_01_l", + "calf_twist_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig toe.R", + "label": "Control Rig toe.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -371.23333740234375, + -599.679931640625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "toe.L", + "toe.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig ball_r", + "label": "Source Rig ball_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -38.32283401489258, + -598.5638427734375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "ball_l", + "ball_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig foot_tweak.R", + "label": "Control Rig foot_tweak.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -370.1162109375, + -707.388427734375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "foot_tweak.L", + "foot_tweak.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig foot_r", + "label": "Source Rig foot_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -34.971370697021484, + -706.830322265625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "foot_l", + "foot_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig foot_r.001", + "label": "Source Rig foot_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -40.467674255371094, + -822.43017578125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "foot_l", + "foot_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig foot_fk.R", + "label": "Control Rig foot_fk.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -365.07623291015625, + -823.197021484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "foot_fk.L", + "foot_fk.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig shin_fk.R", + "label": "Control Rig shin_fk.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -357.2562561035156, + -930.90576171875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "shin_fk.L", + "shin_fk.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig calf_r.001", + "label": "Source Rig calf_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -44.64667510986328, + -930.4466552734375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "calf_l", + "calf_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig thigh_fk.R", + "label": "Control Rig thigh_fk.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -356.512939453125, + -1307.2210693359375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_fk.L", + "thigh_fk.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig thigh_fk.R.001", + "label": "Control Rig thigh_fk.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -59.350826263427734, + -1305.5467529296875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "thigh_l", + "thigh_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig thigh_tweak.R", + "label": "Control Rig thigh_tweak.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -357.66937255859375, + -1190.216064453125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_tweak.L", + "thigh_tweak.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig thigh_fk.R.002", + "label": "Control Rig thigh_fk.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -61.10052490234375, + -1189.63623046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "thigh_l", + "thigh_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_pinky.01.L", + "label": "Control Rig f_pinky.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -358.53973388671875, + -1488.48486328125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_pinky.03.L", + "f_pinky.02.L", + "f_pinky.01.L" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig pinky_01_l", + "label": "Source Rig pinky_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -64.76679229736328, + -1486.7454833984375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "pinky_03_l", + "pinky_02_l", + "pinky_01_l" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_pinky.01.R", + "label": "Control Rig f_pinky.01.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -353.31707763671875, + -1601.540771484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_pinky.03.R", + "f_pinky.02.R", + "f_pinky.01.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig pinky_01_r", + "label": "Source Rig pinky_01_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -56.93288040161133, + -1600.671142578125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "pinky_03_r", + "pinky_02_r", + "pinky_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_ring.01.L", + "label": "Control Rig f_ring.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -357.66925048828125, + -1718.94482421875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_ring.03.L", + "f_ring.02.L", + "f_ring.01.L" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig ring_01_l", + "label": "Source Rig ring_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -66.94288635253906, + -1716.7706298828125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "ring_03_l", + "ring_02_l", + "ring_01_l" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_ring.01.R", + "label": "Control Rig f_ring.01.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -356.36358642578125, + -1824.608642578125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_ring.03.R", + "f_ring.02.R", + "f_ring.01.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig ring_01_r", + "label": "Source Rig ring_01_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -59.54413604736328, + -1824.608642578125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "ring_03_r", + "ring_02_r", + "ring_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_middle.01.L", + "label": "Control Rig f_middle.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -364.8900451660156, + -1942.6514892578125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_middle.03.L", + "f_middle.02.L", + "f_middle.01.L" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig middle_01_l", + "label": "Source Rig middle_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -61.122711181640625, + -1943.5211181640625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "middle_03_l", + "middle_02_l", + "middle_01_l" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_middle.01.R", + "label": "Control Rig f_middle.01.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -361.9662780761719, + -2068.75244140625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_middle.03.R", + "f_middle.02.R", + "f_middle.01.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig middle_01_r", + "label": "Source Rig middle_01_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -66.50585174560547, + -2068.75244140625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "middle_03_r", + "middle_02_r", + "middle_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_index.01.L", + "label": "Control Rig f_index.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -356.7993469238281, + -2195.38720703125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_index.03.L", + "f_index.02.L", + "f_index.01.L" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig index_01_l", + "label": "Source Rig index_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -56.827842712402344, + -2195.38720703125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "index_03_l", + "index_02_l", + "index_01_l" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig f_index.01.R", + "label": "Control Rig f_index.01.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -349.29522705078125, + -2311.052490234375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "f_index.03.R", + "f_index.02.R", + "f_index.01.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig index_01_r", + "label": "Source Rig index_01_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -62.05046463012695, + -2308.878173828125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "index_03_r", + "index_02_r", + "index_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig thumb.01.L", + "label": "Control Rig thumb.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -350.60089111328125, + -2447.154296875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thumb.03.L", + "thumb.02.L", + "thumb.01.L" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig thumb_01_l", + "label": "Source Rig thumb_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -63.35609436035156, + -2445.849853515625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "thumb_03_l", + "thumb_02_l", + "thumb_01_l" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig thumb.01.R", + "label": "Control Rig thumb.01.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -350.6009216308594, + -2562.8193359375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thumb.03.R", + "thumb.02.R", + "thumb.01.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig thumb_01_r", + "label": "Source Rig thumb_01_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -59.87437057495117, + -2564.558349609375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "thumb_03_r", + "thumb_02_r", + "thumb_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig upper_arm_tweak.R.001", + "label": "Control Rig upper_arm_tweak.R.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -354.4617614746094, + -2791.53515625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upper_arm_tweak.L.001", + "upper_arm_tweak.R.001" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig upperarm_twist_01_r", + "label": "Source Rig upperarm_twist_01_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -58.077232360839844, + -2789.578125 + ], + "width": 310.10198974609375, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "upperarm_twist_01_l", + "upperarm_twist_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig upper_arm_tweak.R.002", + "label": "Control Rig upper_arm_tweak.R.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -350.54473876953125, + -2888.067138671875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upper_arm_tweak.L.002", + "upper_arm_tweak.R.002" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig upperarm_twist_02_r", + "label": "Source Rig upperarm_twist_02_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -67.21691131591797, + -2889.37158203125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "upperarm_twist_02_l", + "upperarm_twist_02_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig hand_tweak.R", + "label": "Control Rig hand_tweak.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -357.0730285644531, + -3038.084228515625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "hand_tweak.L", + "hand_tweak.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig hand_r", + "label": "Source Rig hand_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -63.95277404785156, + -3036.779296875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "hand_l", + "hand_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig forearm_tweak.R.002", + "label": "Control Rig forearm_tweak.R.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -367.5182800292969, + -3212.885498046875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "forearm_tweak.L.002", + "forearm_tweak.R.002" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig lowerarm_twist_01_r", + "label": "Source Rig lowerarm_twist_01_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -74.39806365966797, + -3214.8427734375 + ], + "width": 276.47100830078125, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "lowerarm_twist_01_l", + "lowerarm_twist_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig forearm_tweak.R.001", + "label": "Control Rig forearm_tweak.R.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -330.073486328125, + -3381.75 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "forearm_tweak.L.001", + "forearm_tweak.R.001" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig lowerarm_twist_02_r", + "label": "Source Rig lowerarm_twist_02_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -43.387210845947266, + -3380.298095703125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "lowerarm_twist_02_l", + "lowerarm_twist_02_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig hand_fk.R", + "label": "Control Rig hand_fk.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -326.7447814941406, + -3548.134765625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "hand_fk.L", + "hand_fk.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig hand_r.001", + "label": "Source Rig hand_r.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -43.250946044921875, + -3546.701904296875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "hand_l", + "hand_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig forearm_fk.R", + "label": "Control Rig forearm_fk.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -327.150390625, + -3720.041259765625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "forearm_fk.L", + "forearm_fk.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig lowerarm_r", + "label": "Source Rig lowerarm_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -37.99358367919922, + -3719.0859375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "lowerarm_l", + "lowerarm_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig upper_arm_tweak.R", + "label": "Control Rig upper_arm_tweak.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -341.4887390136719, + -3884.30712890625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upper_arm_tweak.L", + "upper_arm_tweak.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig upperarm_twist_01_r.002", + "label": "Source Rig upperarm_twist_01_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -64.9507064819336, + -3883.019775390625 + ], + "width": 310.10198974609375, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "upperarm_twist_01_l", + "upperarm_twist_01_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig upper_arm_fk.R", + "label": "Control Rig upper_arm_fk.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -338.63885498046875, + -4074.45166015625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upper_arm_fk.L", + "upper_arm_fk.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig upperarm_r", + "label": "Source Rig upperarm_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -4.193665504455566, + -4073.799560546875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "upperarm_l", + "upperarm_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig hand_ik.R", + "label": "Control Rig hand_ik.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -349.4568176269531, + -4358.587890625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "hand_ik.L", + "hand_ik.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig ik_hand_r", + "label": "Source Rig ik_hand_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 7.013830184936523, + -4358.58740234375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "ik_hand_l", + "ik_hand_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Control Rig foot_ik.R", + "label": "Control Rig foot_ik.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -354.0269775390625, + -4543.83935546875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "foot_ik.L", + "foot_ik.R" + ], + "mode": "FK_TO_SOURCE" + }, + { + "name": "Source Rig ik_foot_r", + "label": "Source Rig ik_foot_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + 7.013830184936523, + -4539.27294921875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "ik_foot_l", + "ik_foot_r" + ], + "outputs": [], + "mode": "FK_TO_SOURCE" + } +] \ No newline at end of file diff --git a/src/addons/ue2rigify/resources/rig_templates/b4_0/uefn_mannequin/metarig.py b/src/addons/ue2rigify/resources/rig_templates/b4_0/uefn_mannequin/metarig.py new file mode 100644 index 00000000..153bcc1f --- /dev/null +++ b/src/addons/ue2rigify/resources/rig_templates/b4_0/uefn_mannequin/metarig.py @@ -0,0 +1,1200 @@ +import bpy + +from rna_prop_ui import rna_idprop_ui_create + +from mathutils import Color + + +def create(obj): # noqa + # generated by rigify.utils.write_metarig + bpy.ops.object.mode_set(mode='EDIT') + arm = obj.data + + for i in range(6): + arm.rigify_colors.add() + + arm.rigify_colors[0].name = "Root" + arm.rigify_colors[0].active = Color((0.5490, 1.0000, 1.0000)) + arm.rigify_colors[0].normal = Color((0.4353, 0.1843, 0.4157)) + arm.rigify_colors[0].select = Color((0.3137, 0.7843, 1.0000)) + arm.rigify_colors[0].standard_colors_lock = True + arm.rigify_colors[1].name = "IK" + arm.rigify_colors[1].active = Color((0.5490, 1.0000, 1.0000)) + arm.rigify_colors[1].normal = Color((0.6039, 0.0000, 0.0000)) + arm.rigify_colors[1].select = Color((0.3137, 0.7843, 1.0000)) + arm.rigify_colors[1].standard_colors_lock = True + arm.rigify_colors[2].name = "Special" + arm.rigify_colors[2].active = Color((0.5490, 1.0000, 1.0000)) + arm.rigify_colors[2].normal = Color((0.9569, 0.7882, 0.0471)) + arm.rigify_colors[2].select = Color((0.3137, 0.7843, 1.0000)) + arm.rigify_colors[2].standard_colors_lock = True + arm.rigify_colors[3].name = "Tweak" + arm.rigify_colors[3].active = Color((0.5490, 1.0000, 1.0000)) + arm.rigify_colors[3].normal = Color((0.0392, 0.2118, 0.5804)) + arm.rigify_colors[3].select = Color((0.3137, 0.7843, 1.0000)) + arm.rigify_colors[3].standard_colors_lock = True + arm.rigify_colors[4].name = "FK" + arm.rigify_colors[4].active = Color((0.5490, 1.0000, 1.0000)) + arm.rigify_colors[4].normal = Color((0.1176, 0.5686, 0.0353)) + arm.rigify_colors[4].select = Color((0.3137, 0.7843, 1.0000)) + arm.rigify_colors[4].standard_colors_lock = True + arm.rigify_colors[5].name = "Extra" + arm.rigify_colors[5].active = Color((0.5490, 1.0000, 1.0000)) + arm.rigify_colors[5].normal = Color((0.9686, 0.2510, 0.0941)) + arm.rigify_colors[5].select = Color((0.3137, 0.7843, 1.0000)) + arm.rigify_colors[5].standard_colors_lock = True + + bone_collections = {} + + for bcoll in list(arm.collections_all): + arm.collections.remove(bcoll) + + def add_bone_collection(name, *, parent=None, ui_row=0, ui_title='', sel_set=False, color_set_id=0): + new_bcoll = arm.collections.new(name, parent=bone_collections.get(parent)) + new_bcoll.rigify_ui_row = ui_row + new_bcoll.rigify_ui_title = ui_title + new_bcoll.rigify_sel_set = sel_set + new_bcoll.rigify_color_set_id = color_set_id + bone_collections[name] = new_bcoll + + def assign_bone_collections(pose_bone, *coll_names): + assert not len(pose_bone.bone.collections) + for name in coll_names: + bone_collections[name].assign(pose_bone) + + def assign_bone_collection_refs(params, attr_name, *coll_names): + ref_list = getattr(params, attr_name + '_coll_refs', None) + if ref_list is not None: + for name in coll_names: + ref_list.add().set_collection(bone_collections[name]) + + add_bone_collection('Face', ui_row=1, color_set_id=5) + add_bone_collection('Face (Primary)', ui_row=2, color_set_id=2) + add_bone_collection('Face (Secondary)', ui_row=2, color_set_id=3) + add_bone_collection('Torso', ui_row=3, color_set_id=3) + add_bone_collection('Torso (Tweak)', ui_row=4, color_set_id=4) + add_bone_collection('Fingers', ui_row=5, color_set_id=6) + add_bone_collection('Fingers (Detail)', ui_row=6, color_set_id=5) + add_bone_collection('Arm.L (IK)', ui_row=7, color_set_id=2) + add_bone_collection('Arm.L (FK)', ui_row=8, color_set_id=5) + add_bone_collection('Arm.L (Tweak)', ui_row=9, color_set_id=4) + add_bone_collection('Arm.R (IK)', ui_row=7, color_set_id=2) + add_bone_collection('Arm.R (FK)', ui_row=8, color_set_id=5) + add_bone_collection('Arm.R (Tweak)', ui_row=9, color_set_id=4) + add_bone_collection('Leg.L (IK)', ui_row=10, color_set_id=2) + add_bone_collection('Leg.L (FK)', ui_row=11, color_set_id=5) + add_bone_collection('Leg.L (Tweak)', ui_row=12, color_set_id=4) + add_bone_collection('Leg.R (IK)', ui_row=10, color_set_id=2) + add_bone_collection('Leg.R (FK)', ui_row=11, color_set_id=5) + add_bone_collection('Leg.R (Tweak)', ui_row=12, color_set_id=4) + add_bone_collection('Root', ui_row=15, color_set_id=1) + + bones = {} + + bone = arm.edit_bones.new('spine') + bone.head = 0.0000, 0.0071, 0.9312 + bone.tail = 0.0000, 0.0110, 0.9989 + bone.roll = 0.0000 + bone.use_connect = False + bones['spine'] = bone.name + bone = arm.edit_bones.new('spine.001') + bone.head = 0.0000, 0.0110, 0.9989 + bone.tail = 0.0000, 0.0137, 1.0713 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine']] + bones['spine.001'] = bone.name + bone = arm.edit_bones.new('thigh.L') + bone.head = 0.0775, 0.0081, 0.9055 + bone.tail = 0.1221, 0.0100, 0.5176 + bone.roll = -0.1191 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine']] + bones['thigh.L'] = bone.name + bone = arm.edit_bones.new('thigh.R') + bone.head = -0.0775, 0.0081, 0.9055 + bone.tail = -0.1221, 0.0100, 0.5176 + bone.roll = 0.1191 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine']] + bones['thigh.R'] = bone.name + bone = arm.edit_bones.new('spine.002') + bone.head = 0.0000, 0.0137, 1.0713 + bone.tail = 0.0000, 0.0185, 1.1313 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine.001']] + bones['spine.002'] = bone.name + bone = arm.edit_bones.new('shin.L') + bone.head = 0.1221, 0.0100, 0.5176 + bone.tail = 0.1526, 0.0442, 0.0944 + bone.roll = -0.0674 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thigh.L']] + bones['shin.L'] = bone.name + bone = arm.edit_bones.new('shin.R') + bone.head = -0.1221, 0.0100, 0.5176 + bone.tail = -0.1526, 0.0442, 0.0944 + bone.roll = 0.0674 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thigh.R']] + bones['shin.R'] = bone.name + bone = arm.edit_bones.new('spine.003') + bone.head = 0.0000, 0.0185, 1.1313 + bone.tail = 0.0000, 0.0274, 1.2118 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine.002']] + bones['spine.003'] = bone.name + bone = arm.edit_bones.new('foot.L') + bone.head = 0.1526, 0.0442, 0.0944 + bone.tail = 0.1580, -0.0935, 0.0314 + bone.roll = -0.1511 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['shin.L']] + bones['foot.L'] = bone.name + bone = arm.edit_bones.new('foot.R') + bone.head = -0.1526, 0.0442, 0.0944 + bone.tail = -0.1580, -0.0935, 0.0314 + bone.roll = 0.1511 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['shin.R']] + bones['foot.R'] = bone.name + bone = arm.edit_bones.new('spine.007') + bone.head = 0.0000, 0.0274, 1.2118 + bone.tail = 0.0000, 0.0357, 1.3116 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine.003']] + bones['spine.007'] = bone.name + bone = arm.edit_bones.new('toe.L') + bone.head = 0.1580, -0.0935, 0.0314 + bone.tail = 0.1682, -0.2388, 0.0314 + bone.roll = 0.0073 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['foot.L']] + bones['toe.L'] = bone.name + bone = arm.edit_bones.new('heel.02.L') + bone.head = 0.1439, 0.0442, 0.0314 + bone.tail = 0.2239, 0.0442, 0.0314 + bone.roll = -0.0000 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['foot.L']] + bones['heel.02.L'] = bone.name + bone = arm.edit_bones.new('toe.R') + bone.head = -0.1580, -0.0935, 0.0314 + bone.tail = -0.1682, -0.2388, 0.0314 + bone.roll = -0.0073 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['foot.R']] + bones['toe.R'] = bone.name + bone = arm.edit_bones.new('heel.02.R') + bone.head = -0.1439, 0.0442, 0.0314 + bone.tail = -0.2239, 0.0442, 0.0314 + bone.roll = 0.0000 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['foot.R']] + bones['heel.02.R'] = bone.name + bone = arm.edit_bones.new('spine.008') + bone.head = 0.0000, 0.0357, 1.3116 + bone.tail = 0.0000, 0.0432, 1.4245 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine.007']] + bones['spine.008'] = bone.name + bone = arm.edit_bones.new('spine.004') + bone.head = 0.0000, 0.0432, 1.4245 + bone.tail = 0.0000, 0.0288, 1.4678 + bone.roll = 0.0000 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine.008']] + bones['spine.004'] = bone.name + bone = arm.edit_bones.new('shoulder.L') + bone.head = 0.0232, 0.0406, 1.3549 + bone.tail = 0.1778, 0.0484, 1.3445 + bone.roll = 0.3544 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine.008']] + bones['shoulder.L'] = bone.name + bone = arm.edit_bones.new('shoulder.R') + bone.head = -0.0232, 0.0406, 1.3549 + bone.tail = -0.1778, 0.0484, 1.3445 + bone.roll = -0.3543 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine.008']] + bones['shoulder.R'] = bone.name + bone = arm.edit_bones.new('breast.L') + bone.head = 0.0983, -0.1161, 1.3339 + bone.tail = 0.1165, -0.2435, 1.3375 + bone.roll = -0.3953 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine.008']] + bones['breast.L'] = bone.name + bone = arm.edit_bones.new('breast.R') + bone.head = -0.0983, -0.1161, 1.3339 + bone.tail = -0.1165, -0.2435, 1.3375 + bone.roll = 0.3953 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['spine.008']] + bones['breast.R'] = bone.name + bone = arm.edit_bones.new('spine.005') + bone.head = 0.0000, 0.0288, 1.4678 + bone.tail = 0.0000, 0.0169, 1.5203 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine.004']] + bones['spine.005'] = bone.name + bone = arm.edit_bones.new('upper_arm.L') + bone.head = 0.1778, 0.0484, 1.3445 + bone.tail = 0.3768, 0.0579, 1.1675 + bone.roll = 2.3792 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['shoulder.L']] + bones['upper_arm.L'] = bone.name + bone = arm.edit_bones.new('upper_arm.R') + bone.head = -0.1778, 0.0484, 1.3445 + bone.tail = -0.3768, 0.0579, 1.1675 + bone.roll = -2.3792 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['shoulder.R']] + bones['upper_arm.R'] = bone.name + bone = arm.edit_bones.new('spine.006') + bone.head = 0.0000, 0.0169, 1.5203 + bone.tail = 0.0000, 0.0169, 1.6712 + bone.roll = 0.0000 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['spine.005']] + bones['spine.006'] = bone.name + bone = arm.edit_bones.new('forearm.L') + bone.head = 0.3768, 0.0579, 1.1675 + bone.tail = 0.5197, -0.0409, 1.0269 + bone.roll = 2.3839 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['upper_arm.L']] + bones['forearm.L'] = bone.name + bone = arm.edit_bones.new('forearm.R') + bone.head = -0.3768, 0.0579, 1.1675 + bone.tail = -0.5197, -0.0409, 1.0269 + bone.roll = -2.3839 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['upper_arm.R']] + bones['forearm.R'] = bone.name + bone = arm.edit_bones.new('hand.L') + bone.head = 0.5197, -0.0409, 1.0269 + bone.tail = 0.5676, -0.0778, 0.9535 + bone.roll = 2.7716 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['forearm.L']] + bones['hand.L'] = bone.name + bone = arm.edit_bones.new('hand.R') + bone.head = -0.5197, -0.0409, 1.0269 + bone.tail = -0.5676, -0.0778, 0.9535 + bone.roll = -2.8517 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['forearm.R']] + bones['hand.R'] = bone.name + bone = arm.edit_bones.new('palm.01.L') + bone.head = 0.5183, -0.0740, 1.0199 + bone.tail = 0.5622, -0.1063, 0.9573 + bone.roll = -1.7939 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.L']] + bones['palm.01.L'] = bone.name + bone = arm.edit_bones.new('palm.02.L') + bone.head = 0.5275, -0.0538, 1.0100 + bone.tail = 0.5676, -0.0778, 0.9535 + bone.roll = -1.8176 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.L']] + bones['palm.02.L'] = bone.name + bone = arm.edit_bones.new('palm.03.L') + bone.head = 0.5327, -0.0355, 1.0048 + bone.tail = 0.5714, -0.0525, 0.9483 + bone.roll = -2.0521 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.L']] + bones['palm.03.L'] = bone.name + bone = arm.edit_bones.new('palm.04.L') + bone.head = 0.5325, -0.0144, 1.0008 + bone.tail = 0.5759, -0.0305, 0.9459 + bone.roll = -2.2667 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.L']] + bones['palm.04.L'] = bone.name + bone = arm.edit_bones.new('palm.01.R') + bone.head = -0.5183, -0.0740, 1.0199 + bone.tail = -0.5622, -0.1063, 0.9573 + bone.roll = 1.6433 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.R']] + bones['palm.01.R'] = bone.name + bone = arm.edit_bones.new('palm.02.R') + bone.head = -0.5275, -0.0538, 1.0100 + bone.tail = -0.5676, -0.0778, 0.9535 + bone.roll = 1.8048 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.R']] + bones['palm.02.R'] = bone.name + bone = arm.edit_bones.new('palm.03.R') + bone.head = -0.5327, -0.0355, 1.0048 + bone.tail = -0.5714, -0.0525, 0.9483 + bone.roll = 2.0494 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.R']] + bones['palm.03.R'] = bone.name + bone = arm.edit_bones.new('palm.04.R') + bone.head = -0.5325, -0.0144, 1.0008 + bone.tail = -0.5759, -0.0305, 0.9459 + bone.roll = 2.2714 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.R']] + bones['palm.04.R'] = bone.name + bone = arm.edit_bones.new('palm.01.R.001') + bone.head = -0.5676, -0.0778, 0.9535 + bone.tail = -0.5997, -0.0978, 0.9130 + bone.roll = 1.8400 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['hand.R']] + bones['palm.01.R.001'] = bone.name + bone = arm.edit_bones.new('f_index.01.L') + bone.head = 0.5622, -0.1063, 0.9573 + bone.tail = 0.5736, -0.1137, 0.9264 + bone.roll = -1.4617 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.01.L']] + bones['f_index.01.L'] = bone.name + bone = arm.edit_bones.new('thumb.01.L') + bone.head = 0.5156, -0.0676, 1.0196 + bone.tail = 0.4989, -0.0988, 0.9719 + bone.roll = 2.1368 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.01.L']] + bones['thumb.01.L'] = bone.name + bone = arm.edit_bones.new('f_middle.01.L') + bone.head = 0.5676, -0.0778, 0.9535 + bone.tail = 0.5867, -0.0889, 0.9199 + bone.roll = -1.8746 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.02.L']] + bones['f_middle.01.L'] = bone.name + bone = arm.edit_bones.new('f_ring.01.L') + bone.head = 0.5714, -0.0525, 0.9483 + bone.tail = 0.5859, -0.0628, 0.9164 + bone.roll = -1.7532 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.03.L']] + bones['f_ring.01.L'] = bone.name + bone = arm.edit_bones.new('f_pinky.01.L') + bone.head = 0.5759, -0.0305, 0.9459 + bone.tail = 0.5843, -0.0374, 0.9197 + bone.roll = -1.8104 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.04.L']] + bones['f_pinky.01.L'] = bone.name + bone = arm.edit_bones.new('f_index.01.R') + bone.head = -0.5622, -0.1063, 0.9573 + bone.tail = -0.5736, -0.1137, 0.9264 + bone.roll = 1.3657 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.01.R']] + bones['f_index.01.R'] = bone.name + bone = arm.edit_bones.new('thumb.01.R') + bone.head = -0.5156, -0.0676, 1.0196 + bone.tail = -0.4989, -0.0988, 0.9719 + bone.roll = -2.1368 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.01.R']] + bones['thumb.01.R'] = bone.name + bone = arm.edit_bones.new('f_middle.01.R') + bone.head = -0.5676, -0.0778, 0.9535 + bone.tail = -0.5865, -0.0893, 0.9200 + bone.roll = 1.6554 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.02.R']] + bones['f_middle.01.R'] = bone.name + bone = arm.edit_bones.new('f_ring.01.R') + bone.head = -0.5714, -0.0525, 0.9483 + bone.tail = -0.5859, -0.0628, 0.9164 + bone.roll = 1.7525 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.03.R']] + bones['f_ring.01.R'] = bone.name + bone = arm.edit_bones.new('f_pinky.01.R') + bone.head = -0.5759, -0.0305, 0.9459 + bone.tail = -0.5843, -0.0374, 0.9197 + bone.roll = 1.8102 + bone.use_connect = False + bone.parent = arm.edit_bones[bones['palm.04.R']] + bones['f_pinky.01.R'] = bone.name + bone = arm.edit_bones.new('f_index.02.L') + bone.head = 0.5736, -0.1137, 0.9264 + bone.tail = 0.5675, -0.1150, 0.9016 + bone.roll = -0.9033 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_index.01.L']] + bones['f_index.02.L'] = bone.name + bone = arm.edit_bones.new('thumb.02.L') + bone.head = 0.4989, -0.0988, 0.9719 + bone.tail = 0.4970, -0.1030, 0.9498 + bone.roll = 0.3404 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thumb.01.L']] + bones['thumb.02.L'] = bone.name + bone = arm.edit_bones.new('f_middle.02.L') + bone.head = 0.5867, -0.0889, 0.9199 + bone.tail = 0.5817, -0.0898, 0.8943 + bone.roll = -0.9324 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_middle.01.L']] + bones['f_middle.02.L'] = bone.name + bone = arm.edit_bones.new('f_ring.02.L') + bone.head = 0.5859, -0.0628, 0.9164 + bone.tail = 0.5805, -0.0668, 0.8932 + bone.roll = -0.8414 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_ring.01.L']] + bones['f_ring.02.L'] = bone.name + bone = arm.edit_bones.new('f_pinky.02.L') + bone.head = 0.5843, -0.0374, 0.9197 + bone.tail = 0.5779, -0.0410, 0.8989 + bone.roll = -1.0248 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_pinky.01.L']] + bones['f_pinky.02.L'] = bone.name + bone = arm.edit_bones.new('f_index.02.R') + bone.head = -0.5736, -0.1137, 0.9264 + bone.tail = -0.5675, -0.1150, 0.9016 + bone.roll = 0.6029 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_index.01.R']] + bones['f_index.02.R'] = bone.name + bone = arm.edit_bones.new('thumb.02.R') + bone.head = -0.4989, -0.0988, 0.9719 + bone.tail = -0.4970, -0.1030, 0.9498 + bone.roll = -0.3404 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thumb.01.R']] + bones['thumb.02.R'] = bone.name + bone = arm.edit_bones.new('f_middle.02.R') + bone.head = -0.5865, -0.0893, 0.9200 + bone.tail = -0.5816, -0.0903, 0.8943 + bone.roll = 0.5595 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_middle.01.R']] + bones['f_middle.02.R'] = bone.name + bone = arm.edit_bones.new('f_ring.02.R') + bone.head = -0.5859, -0.0628, 0.9164 + bone.tail = -0.5805, -0.0668, 0.8932 + bone.roll = 0.8449 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_ring.01.R']] + bones['f_ring.02.R'] = bone.name + bone = arm.edit_bones.new('f_pinky.02.R') + bone.head = -0.5843, -0.0374, 0.9197 + bone.tail = -0.5779, -0.0410, 0.8989 + bone.roll = 1.0264 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_pinky.01.R']] + bones['f_pinky.02.R'] = bone.name + bone = arm.edit_bones.new('f_index.03.L') + bone.head = 0.5675, -0.1150, 0.9016 + bone.tail = 0.5571, -0.1168, 0.8724 + bone.roll = -0.2907 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_index.02.L']] + bones['f_index.03.L'] = bone.name + bone = arm.edit_bones.new('thumb.03.L') + bone.head = 0.4970, -0.1030, 0.9498 + bone.tail = 0.5028, -0.1038, 0.9240 + bone.roll = 0.0761 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thumb.02.L']] + bones['thumb.03.L'] = bone.name + bone = arm.edit_bones.new('f_middle.03.L') + bone.head = 0.5817, -0.0898, 0.8943 + bone.tail = 0.5699, -0.0926, 0.8623 + bone.roll = -0.8834 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_middle.02.L']] + bones['f_middle.03.L'] = bone.name + bone = arm.edit_bones.new('f_ring.03.L') + bone.head = 0.5805, -0.0668, 0.8932 + bone.tail = 0.5701, -0.0722, 0.8609 + bone.roll = -0.7380 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_ring.02.L']] + bones['f_ring.03.L'] = bone.name + bone = arm.edit_bones.new('f_pinky.03.L') + bone.head = 0.5779, -0.0410, 0.8989 + bone.tail = 0.5712, -0.0449, 0.8760 + bone.roll = -1.0720 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_pinky.02.L']] + bones['f_pinky.03.L'] = bone.name + bone = arm.edit_bones.new('f_index.03.R') + bone.head = -0.5675, -0.1150, 0.9016 + bone.tail = -0.5594, -0.1131, 0.8727 + bone.roll = 0.4582 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_index.02.R']] + bones['f_index.03.R'] = bone.name + bone = arm.edit_bones.new('thumb.03.R') + bone.head = -0.4970, -0.1030, 0.9498 + bone.tail = -0.5028, -0.1038, 0.9240 + bone.roll = -0.0761 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['thumb.02.R']] + bones['thumb.03.R'] = bone.name + bone = arm.edit_bones.new('f_middle.03.R') + bone.head = -0.5816, -0.0903, 0.8943 + bone.tail = -0.5771, -0.0913, 0.8616 + bone.roll = 0.6635 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_middle.02.R']] + bones['f_middle.03.R'] = bone.name + bone = arm.edit_bones.new('f_ring.03.R') + bone.head = -0.5805, -0.0668, 0.8932 + bone.tail = -0.5735, -0.0678, 0.8602 + bone.roll = 0.8540 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_ring.02.R']] + bones['f_ring.03.R'] = bone.name + bone = arm.edit_bones.new('f_pinky.03.R') + bone.head = -0.5779, -0.0410, 0.8989 + bone.tail = -0.5737, -0.0425, 0.8751 + bone.roll = 1.1989 + bone.use_connect = True + bone.parent = arm.edit_bones[bones['f_pinky.02.R']] + bones['f_pinky.03.R'] = bone.name + + bpy.ops.object.mode_set(mode='OBJECT') + pbone = obj.pose.bones[bones['spine']] + pbone.rigify_type = 'spines.basic_spine' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Torso (Tweak)') + assign_bone_collection_refs(pbone.rigify_parameters, 'fk', 'Torso (Tweak)') + pbone = obj.pose.bones[bones['spine.001']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + pbone = obj.pose.bones[bones['thigh.L']] + pbone.rigify_type = 'limbs.super_limb' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.L (IK)') + try: + pbone.rigify_parameters.limb_type = 'leg' + except AttributeError: + pass + try: + pbone.rigify_parameters.segments = 3 + except AttributeError: + pass + assign_bone_collection_refs(pbone.rigify_parameters, 'fk', 'Leg.L (FK)') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Leg.L (Tweak)') + pbone = obj.pose.bones[bones['thigh.R']] + pbone.rigify_type = 'limbs.super_limb' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.R (IK)') + try: + pbone.rigify_parameters.limb_type = 'leg' + except AttributeError: + pass + try: + pbone.rigify_parameters.segments = 3 + except AttributeError: + pass + assign_bone_collection_refs(pbone.rigify_parameters, 'fk', 'Leg.R (FK)') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Leg.R (Tweak)') + pbone = obj.pose.bones[bones['spine.002']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + pbone = obj.pose.bones[bones['shin.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.L (IK)') + pbone = obj.pose.bones[bones['shin.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.R (IK)') + pbone = obj.pose.bones[bones['spine.003']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + pbone = obj.pose.bones[bones['foot.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.L (IK)') + pbone = obj.pose.bones[bones['foot.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.R (IK)') + pbone = obj.pose.bones[bones['spine.007']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + pbone = obj.pose.bones[bones['toe.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.L (IK)') + pbone = obj.pose.bones[bones['heel.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.L (IK)') + pbone = obj.pose.bones[bones['toe.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.R (IK)') + pbone = obj.pose.bones[bones['heel.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Leg.R (IK)') + pbone = obj.pose.bones[bones['spine.008']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + pbone = obj.pose.bones[bones['spine.004']] + pbone.rigify_type = 'spines.super_head' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + try: + pbone.rigify_parameters.connect_chain = True + except AttributeError: + pass + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Torso (Tweak)') + pbone = obj.pose.bones[bones['shoulder.L']] + pbone.rigify_type = 'basic.super_copy' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Torso') + try: + pbone.rigify_parameters.make_widget = True + except AttributeError: + pass + try: + pbone.rigify_parameters.super_copy_widget_type = 'shoulder' + except AttributeError: + pass + pbone = obj.pose.bones[bones['shoulder.R']] + pbone.rigify_type = 'basic.super_copy' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Torso') + try: + pbone.rigify_parameters.make_widget = True + except AttributeError: + pass + try: + pbone.rigify_parameters.super_copy_widget_type = 'shoulder' + except AttributeError: + pass + pbone = obj.pose.bones[bones['breast.L']] + pbone.rigify_type = 'basic.super_copy' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Torso') + pbone = obj.pose.bones[bones['breast.R']] + pbone.rigify_type = 'basic.super_copy' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Torso') + pbone = obj.pose.bones[bones['spine.005']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + pbone = obj.pose.bones[bones['upper_arm.L']] + pbone.rigify_type = 'limbs.super_limb' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Arm.L (IK)') + try: + pbone.rigify_parameters.segments = 3 + except AttributeError: + pass + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Arm.L (Tweak)') + assign_bone_collection_refs(pbone.rigify_parameters, 'fk', 'Arm.L (FK)') + pbone = obj.pose.bones[bones['upper_arm.R']] + pbone.rigify_type = 'limbs.super_limb' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Arm.R (IK)') + try: + pbone.rigify_parameters.segments = 3 + except AttributeError: + pass + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Arm.R (Tweak)') + assign_bone_collection_refs(pbone.rigify_parameters, 'fk', 'Arm.R (FK)') + pbone = obj.pose.bones[bones['spine.006']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Torso') + pbone = obj.pose.bones[bones['forearm.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Arm.L (IK)') + pbone = obj.pose.bones[bones['forearm.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Arm.R (IK)') + pbone = obj.pose.bones[bones['hand.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Arm.L (IK)') + pbone = obj.pose.bones[bones['hand.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Arm.R (IK)') + pbone = obj.pose.bones[bones['palm.01.L']] + pbone.rigify_type = 'limbs.super_palm' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['palm.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['palm.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['palm.04.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['palm.01.R']] + pbone.rigify_type = 'limbs.super_palm' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['palm.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['palm.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['palm.04.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'YXZ' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['palm.01.R.001']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_index.01.L']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['thumb.01.L']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_middle.01.L']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_ring.01.L']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_pinky.01.L']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_index.01.R']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['thumb.01.R']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_middle.01.R']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_ring.01.R']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_pinky.01.R']] + pbone.rigify_type = 'limbs.super_finger' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + assign_bone_collection_refs(pbone.rigify_parameters, 'tweak', 'Fingers (Detail)') + pbone = obj.pose.bones[bones['f_index.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['thumb.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_middle.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_ring.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_pinky.02.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_index.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['thumb.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_middle.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_ring.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_pinky.02.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_index.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['thumb.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_middle.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_ring.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_pinky.03.L']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_index.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['thumb.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_middle.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_ring.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + pbone = obj.pose.bones[bones['f_pinky.03.R']] + pbone.rigify_type = '' + pbone.lock_location = (False, False, False) + pbone.lock_rotation = (False, False, False) + pbone.lock_rotation_w = False + pbone.lock_scale = (False, False, False) + pbone.rotation_mode = 'QUATERNION' + assign_bone_collections(pbone, 'Fingers') + + bpy.ops.object.mode_set(mode='EDIT') + for bone in arm.edit_bones: + bone.select = False + bone.select_head = False + bone.select_tail = False + for b in bones: + bone = arm.edit_bones[bones[b]] + bone.select = True + bone.select_head = True + bone.select_tail = True + bone.bbone_x = bone.bbone_z = bone.length * 0.05 + arm.edit_bones.active = bone + + arm.collections.active_index = 0 + + return bones + + +if __name__ == "__main__": + create(bpy.context.active_object) diff --git a/src/addons/ue2rigify/resources/rig_templates/b4_0/uefn_mannequin/source_to_deform_links.json b/src/addons/ue2rigify/resources/rig_templates/b4_0/uefn_mannequin/source_to_deform_links.json new file mode 100644 index 00000000..baf9d91e --- /dev/null +++ b/src/addons/ue2rigify/resources/rig_templates/b4_0/uefn_mannequin/source_to_deform_links.json @@ -0,0 +1,500 @@ +[ + { + "from_node": "root", + "to_node": "Control Rig root", + "from_socket": "object", + "to_socket": "root" + }, + { + "from_node": "Source Rig head", + "to_node": "Control Rig DEF-spine.006", + "from_socket": "head", + "to_socket": "DEF-spine.006" + }, + { + "from_node": "Source Rig neck_01", + "to_node": "Control Rig DEF-spine.004", + "from_socket": "neck_01", + "to_socket": "DEF-spine.004" + }, + { + "from_node": "Source Rig neck_02", + "to_node": "Control Rig DEF-spine.005", + "from_socket": "neck_02", + "to_socket": "DEF-spine.005" + }, + { + "from_node": "Source Rig clavicle_r", + "to_node": "Control Rig DEF-shoulder.R", + "from_socket": "clavicle_l", + "to_socket": "DEF-shoulder.L" + }, + { + "from_node": "Source Rig clavicle_r", + "to_node": "Control Rig DEF-shoulder.R", + "from_socket": "clavicle_r", + "to_socket": "DEF-shoulder.R" + }, + { + "from_node": "Source Rig spine_05", + "to_node": "Control Rig DEF-spine.008", + "from_socket": "spine_05", + "to_socket": "DEF-spine.008" + }, + { + "from_node": "Source Rig spine_04", + "to_node": "Control Rig DEF-spine.007", + "from_socket": "spine_04", + "to_socket": "DEF-spine.007" + }, + { + "from_node": "Source Rig spine_03", + "to_node": "Control Rig DEF-spine.003", + "from_socket": "spine_03", + "to_socket": "DEF-spine.003" + }, + { + "from_node": "Source Rig spine_02", + "to_node": "Control Rig DEF-spine.002", + "from_socket": "spine_02", + "to_socket": "DEF-spine.002" + }, + { + "from_node": "Source Rig spine_01", + "to_node": "Control Rig DEF-spine.001", + "from_socket": "spine_01", + "to_socket": "DEF-spine.001" + }, + { + "from_node": "Source Rig pelvis", + "to_node": "Control Rig DEF-spine", + "from_socket": "pelvis", + "to_socket": "DEF-spine" + }, + { + "from_node": "Source Rig calf_r", + "to_node": "Control Rig DEF-shin.R", + "from_socket": "calf_l", + "to_socket": "DEF-shin.L" + }, + { + "from_node": "Source Rig calf_r", + "to_node": "Control Rig DEF-shin.R", + "from_socket": "calf_r", + "to_socket": "DEF-shin.R" + }, + { + "from_node": "Source Rig ball_r", + "to_node": "Control Rig DEF-toe.R", + "from_socket": "ball_l", + "to_socket": "DEF-toe.L" + }, + { + "from_node": "Source Rig ball_r", + "to_node": "Control Rig DEF-toe.R", + "from_socket": "ball_r", + "to_socket": "DEF-toe.R" + }, + { + "from_node": "Source Rig foot_r", + "to_node": "Control Rig DEF-foot.R", + "from_socket": "foot_l", + "to_socket": "DEF-foot.L" + }, + { + "from_node": "Source Rig foot_r", + "to_node": "Control Rig DEF-foot.R", + "from_socket": "foot_r", + "to_socket": "DEF-foot.R" + }, + { + "from_node": "Source Rig calf_twist_01_r", + "to_node": "Control Rig DEF-shin.R.002", + "from_socket": "calf_twist_01_l", + "to_socket": "DEF-shin.L.002" + }, + { + "from_node": "Source Rig calf_twist_01_r", + "to_node": "Control Rig DEF-shin.R.002", + "from_socket": "calf_twist_01_r", + "to_socket": "DEF-shin.R.002" + }, + { + "from_node": "Source Rig calf_twist_02_r", + "to_node": "Control Rig DEF-shin.R.001", + "from_socket": "calf_twist_02_l", + "to_socket": "DEF-shin.L.001" + }, + { + "from_node": "Source Rig calf_twist_02_r", + "to_node": "Control Rig DEF-shin.R.001", + "from_socket": "calf_twist_02_r", + "to_socket": "DEF-shin.R.001" + }, + { + "from_node": "Source Rig thigh_twist_01_r", + "to_node": "Control Rig DEF-thigh.R.001", + "from_socket": "thigh_twist_01_l", + "to_socket": "DEF-thigh.L.001" + }, + { + "from_node": "Source Rig thigh_twist_01_r", + "to_node": "Control Rig DEF-thigh.R.001", + "from_socket": "thigh_twist_01_r", + "to_socket": "DEF-thigh.R.001" + }, + { + "from_node": "Source Rig lowerarm_r", + "to_node": "Control Rig DEF-forearm.R", + "from_socket": "lowerarm_l", + "to_socket": "DEF-forearm.L" + }, + { + "from_node": "Source Rig lowerarm_r", + "to_node": "Control Rig DEF-forearm.R", + "from_socket": "lowerarm_r", + "to_socket": "DEF-forearm.R" + }, + { + "from_node": "Source Rig thigh_r", + "to_node": "Control Rig DEF-thigh.R", + "from_socket": "thigh_l", + "to_socket": "DEF-thigh.L" + }, + { + "from_node": "Source Rig thigh_r", + "to_node": "Control Rig DEF-thigh.R", + "from_socket": "thigh_r", + "to_socket": "DEF-thigh.R" + }, + { + "from_node": "Source Rig pinky_01_l", + "to_node": "Control Rig DEF-f_pinky.01.L", + "from_socket": "pinky_03_l", + "to_socket": "DEF-f_pinky.03.L" + }, + { + "from_node": "Source Rig pinky_01_l", + "to_node": "Control Rig DEF-f_pinky.01.L", + "from_socket": "pinky_02_l", + "to_socket": "DEF-f_pinky.02.L" + }, + { + "from_node": "Source Rig pinky_01_l", + "to_node": "Control Rig DEF-f_pinky.01.L", + "from_socket": "pinky_01_l", + "to_socket": "DEF-f_pinky.01.L" + }, + { + "from_node": "Source Rig pinky_01_r", + "to_node": "Control Rig DEF-f_pinky.01.R", + "from_socket": "pinky_03_r", + "to_socket": "DEF-f_pinky.03.R" + }, + { + "from_node": "Source Rig pinky_01_r", + "to_node": "Control Rig DEF-f_pinky.01.R", + "from_socket": "pinky_02_r", + "to_socket": "DEF-f_pinky.02.R" + }, + { + "from_node": "Source Rig pinky_01_r", + "to_node": "Control Rig DEF-f_pinky.01.R", + "from_socket": "pinky_01_r", + "to_socket": "DEF-f_pinky.01.R" + }, + { + "from_node": "Source Rig ring_01_l", + "to_node": "Control Rig DEF-f_ring.01.L", + "from_socket": "ring_03_l", + "to_socket": "DEF-f_ring.03.L" + }, + { + "from_node": "Source Rig ring_01_l", + "to_node": "Control Rig DEF-f_ring.01.L", + "from_socket": "ring_02_l", + "to_socket": "DEF-f_ring.02.L" + }, + { + "from_node": "Source Rig ring_01_l", + "to_node": "Control Rig DEF-f_ring.01.L", + "from_socket": "ring_01_l", + "to_socket": "DEF-f_ring.01.L" + }, + { + "from_node": "Source Rig ring_01_r", + "to_node": "Control Rig DEF-f_ring.01.R", + "from_socket": "ring_03_r", + "to_socket": "DEF-f_ring.03.R" + }, + { + "from_node": "Source Rig ring_01_r", + "to_node": "Control Rig DEF-f_ring.01.R", + "from_socket": "ring_02_r", + "to_socket": "DEF-f_ring.02.R" + }, + { + "from_node": "Source Rig ring_01_r", + "to_node": "Control Rig DEF-f_ring.01.R", + "from_socket": "ring_01_r", + "to_socket": "DEF-f_ring.01.R" + }, + { + "from_node": "Source Rig middle_01_l", + "to_node": "Control Rig DEF-f_middle.01.L", + "from_socket": "middle_03_l", + "to_socket": "DEF-f_middle.03.L" + }, + { + "from_node": "Source Rig middle_01_l", + "to_node": "Control Rig DEF-f_middle.01.L", + "from_socket": "middle_02_l", + "to_socket": "DEF-f_middle.02.L" + }, + { + "from_node": "Source Rig middle_01_l", + "to_node": "Control Rig DEF-f_middle.01.L", + "from_socket": "middle_01_l", + "to_socket": "DEF-f_middle.01.L" + }, + { + "from_node": "Source Rig middle_01_r", + "to_node": "Control Rig DEF-f_middle.01.R", + "from_socket": "middle_03_r", + "to_socket": "DEF-f_middle.03.R" + }, + { + "from_node": "Source Rig middle_01_r", + "to_node": "Control Rig DEF-f_middle.01.R", + "from_socket": "middle_02_r", + "to_socket": "DEF-f_middle.02.R" + }, + { + "from_node": "Source Rig middle_01_r", + "to_node": "Control Rig DEF-f_middle.01.R", + "from_socket": "middle_01_r", + "to_socket": "DEF-f_middle.01.R" + }, + { + "from_node": "Source Rig index_01_l", + "to_node": "Control Rig DEF-f_index.01.L", + "from_socket": "index_03_l", + "to_socket": "DEF-f_index.03.L" + }, + { + "from_node": "Source Rig index_01_l", + "to_node": "Control Rig DEF-f_index.01.L", + "from_socket": "index_02_l", + "to_socket": "DEF-f_index.02.L" + }, + { + "from_node": "Source Rig index_01_l", + "to_node": "Control Rig DEF-f_index.01.L", + "from_socket": "index_01_l", + "to_socket": "DEF-f_index.01.L" + }, + { + "from_node": "Source Rig index_01_r", + "to_node": "Control Rig DEF-f_index.01.R", + "from_socket": "index_03_r", + "to_socket": "DEF-f_index.03.R" + }, + { + "from_node": "Source Rig index_01_r", + "to_node": "Control Rig DEF-f_index.01.R", + "from_socket": "index_02_r", + "to_socket": "DEF-f_index.02.R" + }, + { + "from_node": "Source Rig index_01_r", + "to_node": "Control Rig DEF-f_index.01.R", + "from_socket": "index_01_r", + "to_socket": "DEF-f_index.01.R" + }, + { + "from_node": "Source Rig thumb_01_l", + "to_node": "Control Rig DEF-thumb.01.L", + "from_socket": "thumb_03_l", + "to_socket": "DEF-thumb.03.L" + }, + { + "from_node": "Source Rig thumb_01_l", + "to_node": "Control Rig DEF-thumb.01.L", + "from_socket": "thumb_02_l", + "to_socket": "DEF-thumb.02.L" + }, + { + "from_node": "Source Rig thumb_01_l", + "to_node": "Control Rig DEF-thumb.01.L", + "from_socket": "thumb_01_l", + "to_socket": "DEF-thumb.01.L" + }, + { + "from_node": "Source Rig thumb_01_r", + "to_node": "Control Rig DEF-thumb.01.R", + "from_socket": "thumb_03_r", + "to_socket": "DEF-thumb.03.R" + }, + { + "from_node": "Source Rig thumb_01_r", + "to_node": "Control Rig DEF-thumb.01.R", + "from_socket": "thumb_02_r", + "to_socket": "DEF-thumb.02.R" + }, + { + "from_node": "Source Rig thumb_01_r", + "to_node": "Control Rig DEF-thumb.01.R", + "from_socket": "thumb_01_r", + "to_socket": "DEF-thumb.01.R" + }, + { + "from_node": "Source Rig pinky_metacarpal_r", + "to_node": "Control Rig DEF-palm.04.R", + "from_socket": "pinky_metacarpal_l", + "to_socket": "DEF-palm.04.L" + }, + { + "from_node": "Source Rig pinky_metacarpal_r", + "to_node": "Control Rig DEF-palm.04.R", + "from_socket": "pinky_metacarpal_r", + "to_socket": "DEF-palm.04.R" + }, + { + "from_node": "Source Rig ring_metacarpal_r", + "to_node": "Control Rig DEF-palm.03.R", + "from_socket": "ring_metacarpal_l", + "to_socket": "DEF-palm.03.L" + }, + { + "from_node": "Source Rig ring_metacarpal_r", + "to_node": "Control Rig DEF-palm.03.R", + "from_socket": "ring_metacarpal_r", + "to_socket": "DEF-palm.03.R" + }, + { + "from_node": "Source Rig middle_metacarpal_r", + "to_node": "Control Rig DEF-palm.02.R", + "from_socket": "middle_metacarpal_l", + "to_socket": "DEF-palm.02.L" + }, + { + "from_node": "Source Rig middle_metacarpal_r", + "to_node": "Control Rig DEF-palm.02.R", + "from_socket": "middle_metacarpal_r", + "to_socket": "DEF-palm.02.R" + }, + { + "from_node": "Source Rig index_metacarpal_r", + "to_node": "Control Rig DEF-palm.01.R", + "from_socket": "index_metacarpal_l", + "to_socket": "DEF-palm.01.L" + }, + { + "from_node": "Source Rig index_metacarpal_r", + "to_node": "Control Rig DEF-palm.01.R", + "from_socket": "index_metacarpal_r", + "to_socket": "DEF-palm.01.R" + }, + { + "from_node": "Source Rig lowerarm_twist_01_r", + "to_node": "Control Rig DEF-forearm.R.002", + "from_socket": "lowerarm_twist_01_l", + "to_socket": "DEF-forearm.L.002" + }, + { + "from_node": "Source Rig lowerarm_twist_01_r", + "to_node": "Control Rig DEF-forearm.R.002", + "from_socket": "lowerarm_twist_01_r", + "to_socket": "DEF-forearm.R.002" + }, + { + "from_node": "Source Rig lowerarm_twist_02_r", + "to_node": "Control Rig DEF-forearm.R.001", + "from_socket": "lowerarm_twist_02_l", + "to_socket": "DEF-forearm.L.001" + }, + { + "from_node": "Source Rig lowerarm_twist_02_r", + "to_node": "Control Rig DEF-forearm.R.001", + "from_socket": "lowerarm_twist_02_r", + "to_socket": "DEF-forearm.R.001" + }, + { + "from_node": "Source Rig hand_r", + "to_node": "Control Rig DEF-hand.R", + "from_socket": "hand_l", + "to_socket": "DEF-hand.L" + }, + { + "from_node": "Source Rig hand_r", + "to_node": "Control Rig DEF-hand.R", + "from_socket": "hand_r", + "to_socket": "DEF-hand.R" + }, + { + "from_node": "Source Rig upperarm_r", + "to_node": "Control Rig DEF-upper_arm.R", + "from_socket": "upperarm_l", + "to_socket": "DEF-upper_arm.L" + }, + { + "from_node": "Source Rig upperarm_r", + "to_node": "Control Rig DEF-upper_arm.R", + "from_socket": "upperarm_r", + "to_socket": "DEF-upper_arm.R" + }, + { + "from_node": "Source Rig upperarm_twist_01_r", + "to_node": "Control Rig DEF-upper_arm.R.001", + "from_socket": "upperarm_twist_01_l", + "to_socket": "DEF-upper_arm.L.001" + }, + { + "from_node": "Source Rig upperarm_twist_01_r", + "to_node": "Control Rig DEF-upper_arm.R.001", + "from_socket": "upperarm_twist_01_r", + "to_socket": "DEF-upper_arm.R.001" + }, + { + "from_node": "Source Rig upperarm_twist_02_r", + "to_node": "Control Rig DEF-upper_arm.R.002", + "from_socket": "upperarm_twist_02_l", + "to_socket": "DEF-upper_arm.L.002" + }, + { + "from_node": "Source Rig upperarm_twist_02_r", + "to_node": "Control Rig DEF-upper_arm.R.002", + "from_socket": "upperarm_twist_02_r", + "to_socket": "DEF-upper_arm.R.002" + }, + { + "from_node": "Control Rig DEF-hand.R.002", + "to_node": "Control Rig DEF-hand.R.001", + "from_socket": "ik_hand_l", + "to_socket": "DEF-hand.L" + }, + { + "from_node": "Control Rig DEF-hand.R.002", + "to_node": "Control Rig DEF-hand.R.001", + "from_socket": "ik_hand_r", + "to_socket": "DEF-hand.R" + }, + { + "from_node": "Source Rig ik_hand_gun", + "to_node": "Control Rig DEF-hand.R.003", + "from_socket": "ik_hand_gun", + "to_socket": "DEF-hand.R" + }, + { + "from_node": "Source Rig ik_foot_r", + "to_node": "Control Rig DEF-foot.R.001", + "from_socket": "ik_foot_l", + "to_socket": "DEF-foot.L" + }, + { + "from_node": "Source Rig ik_foot_r", + "to_node": "Control Rig DEF-foot.R.001", + "from_socket": "ik_foot_r", + "to_socket": "DEF-foot.R" + } +] \ No newline at end of file diff --git a/src/addons/ue2rigify/resources/rig_templates/b4_0/uefn_mannequin/source_to_deform_nodes.json b/src/addons/ue2rigify/resources/rig_templates/b4_0/uefn_mannequin/source_to_deform_nodes.json new file mode 100644 index 00000000..fa5ce314 --- /dev/null +++ b/src/addons/ue2rigify/resources/rig_templates/b4_0/uefn_mannequin/source_to_deform_nodes.json @@ -0,0 +1,1978 @@ +[ + { + "name": "root", + "label": "root", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -613.6795043945312, + 1205.2103271484375 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "object" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig root", + "label": "Control Rig root", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -364.892822265625, + 1206.1993408203125 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "root" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig head", + "label": "Source Rig head", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -626.1997680664062, + 1057.1795654296875 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "head" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.006", + "label": "Control Rig DEF-spine.006", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -376.18035888671875, + 1057.1796875 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.006" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig neck_01", + "label": "Source Rig neck_01", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -622.5762939453125, + 936.5052490234375 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "neck_01" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.004", + "label": "Control Rig DEF-spine.004", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -401.54473876953125, + 936.5052490234375 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.004" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig neck_02", + "label": "Source Rig neck_02", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -623.7841796875, + 820.6578369140625 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "neck_02" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.005", + "label": "Control Rig DEF-spine.005", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -414.83074951171875, + 821.8645629882812 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.005" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig clavicle_r", + "label": "Source Rig clavicle_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -676.3244018554688, + 676.4519653320312 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "clavicle_l", + "clavicle_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-shoulder.R", + "label": "Control Rig DEF-shoulder.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -381.61553955078125, + 675.2451782226562 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-shoulder.L", + "DEF-shoulder.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig spine_05", + "label": "Source Rig spine_05", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -650.3562622070312, + 469.4952697753906 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_05" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.008", + "label": "Control Rig DEF-spine.008", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -407.79571533203125, + 469.495361328125 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.008" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig spine_04", + "label": "Source Rig spine_04", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -648.1004638671875, + 398.6346740722656 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_04" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.007", + "label": "Control Rig DEF-spine.007", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -407.743408203125, + 397.42791748046875 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.007" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig spine_03", + "label": "Source Rig spine_03", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -637.22998046875, + 304.5085144042969 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_03" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.003", + "label": "Control Rig DEF-spine.003", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -393.24957275390625, + 309.3356018066406 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.003" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig spine_02", + "label": "Source Rig spine_02", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -640.8534545898438, + 217.6229248046875 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_02" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.002", + "label": "Control Rig DEF-spine.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -377.5478515625, + 221.24325561523438 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.002" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig spine_01", + "label": "Source Rig spine_01", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -638.4378051757812, + 116.25646209716797 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "spine_01" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine.001", + "label": "Control Rig DEF-spine.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -387.21038818359375, + 117.46312713623047 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine.001" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig pelvis", + "label": "Source Rig pelvis", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -642.0612182617188, + 16.09661102294922 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "pelvis" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-spine", + "label": "Control Rig DEF-spine", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -404.11993408203125, + 19.71685028076172 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-spine" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-shin.L.001", + "label": "Control Rig DEF-shin.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -669.7352905273438, + -206.96047973632812 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_l", + "thigh_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-shin.L.002", + "label": "Control Rig DEF-shin.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -419.7156982421875, + -206.96051025390625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thigh.L", + "DEF-thigh.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig calf_r", + "label": "Source Rig calf_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -678.1900634765625, + -316.77435302734375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "calf_l", + "calf_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-shin.R", + "label": "Control Rig DEF-shin.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -425.15093994140625, + -316.17095947265625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-shin.L", + "DEF-shin.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig ball_r", + "label": "Source Rig ball_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -680.4808959960938, + -473.456787109375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "ball_l", + "ball_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-toe.R", + "label": "Control Rig DEF-toe.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -401.47344970703125, + -472.2500305175781 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-toe.L", + "DEF-toe.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig foot_r", + "label": "Source Rig foot_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -682.896484375, + -589.9076538085938 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "foot_l", + "foot_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-foot.R", + "label": "Control Rig DEF-foot.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -404.4930725097656, + -589.9077758789062 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-foot.L", + "DEF-foot.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig calf_twist_01_r", + "label": "Source Rig calf_twist_01_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -692.549072265625, + -752.03076171875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "calf_twist_01_l", + "calf_twist_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-shin.R.002", + "label": "Control Rig DEF-shin.R.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -397.8399353027344, + -750.2206420898438 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-shin.L.002", + "DEF-shin.R.002" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig calf_twist_02_r", + "label": "Source Rig calf_twist_02_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -691.3412475585938, + -873.9120483398438 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "calf_twist_02_l", + "calf_twist_02_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-shin.R.001", + "label": "Control Rig DEF-shin.R.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -405.6908264160156, + -875.7222290039062 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-shin.L.001", + "DEF-shin.R.001" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig thigh_twist_01_r", + "label": "Source Rig thigh_twist_01_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -686.5018920898438, + -1039.54638671875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_twist_01_l", + "thigh_twist_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-thigh.R.001", + "label": "Control Rig DEF-thigh.R.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -397.2279357910156, + -1038.94287109375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thigh.L.001", + "DEF-thigh.R.001" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig lowerarm_r", + "label": "Source Rig lowerarm_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -694.9546508789062, + -1198.0858154296875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "lowerarm_l", + "lowerarm_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-forearm.R", + "label": "Control Rig DEF-forearm.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -396.6220397949219, + -1195.67236328125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-forearm.L", + "DEF-forearm.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig thigh_r", + "label": "Source Rig thigh_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -693.8092041015625, + -1356.5272216796875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thigh_l", + "thigh_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-thigh.R", + "label": "Control Rig DEF-thigh.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -388.8333740234375, + -1354.71728515625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thigh.L", + "DEF-thigh.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig pinky_01_l", + "label": "Source Rig pinky_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -673.6807861328125, + -1534.8900146484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "pinky_03_l", + "pinky_02_l", + "pinky_01_l" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_pinky.01.L", + "label": "Control Rig DEF-f_pinky.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -378.5688781738281, + -1535.694580078125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_pinky.03.L", + "DEF-f_pinky.02.L", + "DEF-f_pinky.01.L" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig pinky_01_r", + "label": "Source Rig pinky_01_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -671.26513671875, + -1645.1060791015625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "pinky_03_r", + "pinky_02_r", + "pinky_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_pinky.01.R", + "label": "Control Rig DEF-f_pinky.01.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -366.4906005859375, + -1646.715087890625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_pinky.03.R", + "DEF-f_pinky.02.R", + "DEF-f_pinky.01.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig ring_01_l", + "label": "Source Rig ring_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -658.008056640625, + -1867.3199462890625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "ring_03_l", + "ring_02_l", + "ring_01_l" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_ring.01.L", + "label": "Control Rig DEF-f_ring.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -371.75347900390625, + -1865.7108154296875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_ring.03.L", + "DEF-f_ring.02.L", + "DEF-f_ring.01.L" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig ring_01_r", + "label": "Source Rig ring_01_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -649.9558715820312, + -1998.452880859375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "ring_03_r", + "ring_02_r", + "ring_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_ring.01.R", + "label": "Control Rig DEF-f_ring.01.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -364.10394287109375, + -2002.0731201171875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_ring.03.R", + "DEF-f_ring.02.R", + "DEF-f_ring.01.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig middle_01_l", + "label": "Source Rig middle_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -650.7308959960938, + -2182.88037109375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "middle_03_l", + "middle_02_l", + "middle_01_l" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_middle.01.L", + "label": "Control Rig DEF-f_middle.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -357.6319274902344, + -2182.47802734375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_middle.03.L", + "DEF-f_middle.02.L", + "DEF-f_middle.01.L" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig middle_01_r", + "label": "Source Rig middle_01_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -658.3804321289062, + -2303.554931640625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "middle_03_r", + "middle_02_r", + "middle_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_middle.01.R", + "label": "Control Rig DEF-f_middle.01.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -340.3171691894531, + -2300.739013671875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_middle.03.R", + "DEF-f_middle.02.R", + "DEF-f_middle.01.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig index_01_l", + "label": "Source Rig index_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -649.1420288085938, + -2515.289306640625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "index_03_l", + "index_02_l", + "index_01_l" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_index.01.L", + "label": "Control Rig DEF-f_index.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -356.4456787109375, + -2511.6689453125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_index.03.L", + "DEF-f_index.02.L", + "DEF-f_index.01.L" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig index_01_r", + "label": "Source Rig index_01_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -647.5316162109375, + -2645.215576171875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "index_03_r", + "index_02_r", + "index_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-f_index.01.R", + "label": "Control Rig DEF-f_index.01.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -344.77001953125, + -2644.0087890625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-f_index.03.R", + "DEF-f_index.02.R", + "DEF-f_index.01.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig thumb_01_l", + "label": "Source Rig thumb_01_l", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -650.349853515625, + -2860.41845703125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thumb_03_l", + "thumb_02_l", + "thumb_01_l" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-thumb.01.L", + "label": "Control Rig DEF-thumb.01.L", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -335.1073913574219, + -2861.22314453125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thumb.03.L", + "DEF-thumb.02.L", + "DEF-thumb.01.L" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig thumb_01_r", + "label": "Source Rig thumb_01_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -643.5054931640625, + -3006.032958984375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "thumb_03_r", + "thumb_02_r", + "thumb_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-thumb.01.R", + "label": "Control Rig DEF-thumb.01.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -323.8343811035156, + -3006.03271484375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-thumb.03.R", + "DEF-thumb.02.R", + "DEF-thumb.01.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig pinky_metacarpal_r", + "label": "Source Rig pinky_metacarpal_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -642.7376708984375, + -3187.518798828125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "pinky_metacarpal_l", + "pinky_metacarpal_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-palm.04.R", + "label": "Control Rig DEF-palm.04.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -341.9481201171875, + -3187.948486328125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-palm.04.L", + "DEF-palm.04.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig ring_metacarpal_r", + "label": "Source Rig ring_metacarpal_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -644.236328125, + -3271.605712890625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "ring_metacarpal_l", + "ring_metacarpal_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-palm.03.R", + "label": "Control Rig DEF-palm.03.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -348.6704406738281, + -3270.5732421875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-palm.03.L", + "DEF-palm.03.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig middle_metacarpal_r", + "label": "Source Rig middle_metacarpal_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -637.8878173828125, + -3368.987548828125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "middle_metacarpal_l", + "middle_metacarpal_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-palm.02.R", + "label": "Control Rig DEF-palm.02.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -346.0519104003906, + -3368.26171875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-palm.02.L", + "DEF-palm.02.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig index_metacarpal_r", + "label": "Source Rig index_metacarpal_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -635.890625, + -3455.935791015625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "index_metacarpal_l", + "index_metacarpal_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-palm.01.R", + "label": "Control Rig DEF-palm.01.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -345.49041748046875, + -3457.48486328125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-palm.01.L", + "DEF-palm.01.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig lowerarm_twist_01_r", + "label": "Source Rig lowerarm_twist_01_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -650.8260498046875, + -3621.564208984375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "lowerarm_twist_01_l", + "lowerarm_twist_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-forearm.R.002", + "label": "Control Rig DEF-forearm.R.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -348.0242614746094, + -3623.11328125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-forearm.L.002", + "DEF-forearm.R.002" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig lowerarm_twist_02_r", + "label": "Source Rig lowerarm_twist_02_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -653.4096069335938, + -3764.053466796875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "lowerarm_twist_02_l", + "lowerarm_twist_02_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-forearm.R.001", + "label": "Control Rig DEF-forearm.R.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -355.775146484375, + -3760.95556640625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-forearm.L.001", + "DEF-forearm.R.001" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig hand_r", + "label": "Source Rig hand_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -640.00732421875, + -3951.6962890625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "hand_l", + "hand_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-hand.R", + "label": "Control Rig DEF-hand.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -333.07171630859375, + -3952.212890625 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-hand.L", + "DEF-hand.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig upperarm_r", + "label": "Source Rig upperarm_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -653.8892822265625, + -4120.96142578125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upperarm_l", + "upperarm_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-upper_arm.R", + "label": "Control Rig DEF-upper_arm.R", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -345.241455078125, + -4122.708984375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-upper_arm.L", + "DEF-upper_arm.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig upperarm_twist_01_r", + "label": "Source Rig upperarm_twist_01_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -655.7699584960938, + -4290.6552734375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upperarm_twist_01_l", + "upperarm_twist_01_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-upper_arm.R.001", + "label": "Control Rig DEF-upper_arm.R.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -335.6758728027344, + -4292.32958984375 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-upper_arm.L.001", + "DEF-upper_arm.R.001" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig upperarm_twist_02_r", + "label": "Source Rig upperarm_twist_02_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -662.9928588867188, + -4453.42578125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "upperarm_twist_02_l", + "upperarm_twist_02_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-upper_arm.R.002", + "label": "Control Rig DEF-upper_arm.R.002", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -344.0141296386719, + -4452.30908203125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-upper_arm.L.002", + "DEF-upper_arm.R.002" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-hand.R.001", + "label": "Control Rig DEF-hand.R.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -321.6926574707031, + -4616.6357421875 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-hand.L", + "DEF-hand.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-hand.R.002", + "label": "Control Rig DEF-hand.R.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -680.3355102539062, + -4614.40283203125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "ik_hand_l", + "ik_hand_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig ik_hand_gun", + "label": "Source Rig ik_hand_gun", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -663.5765380859375, + -4763.98291015625 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "ik_hand_gun" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-hand.R.003", + "label": "", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -322.0072937011719, + -4763.927734375 + ], + "width": 140.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-hand.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Source Rig ik_foot_r", + "label": "Source Rig ik_foot_r", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -715.6161499023438, + -4959.12060546875 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [], + "outputs": [ + "ik_foot_l", + "ik_foot_r" + ], + "mode": "SOURCE_TO_DEFORM" + }, + { + "name": "Control Rig DEF-foot.R.001", + "label": "Control Rig DEF-foot.R.001", + "color": [ + 0.6079999804496765, + 0.6079999804496765, + 0.6079999804496765 + ], + "use_custom_color": false, + "location": [ + -364.23126220703125, + -4957.44580078125 + ], + "width": 200.0, + "height": 100.0, + "type": "CUSTOM", + "inputs": [ + "DEF-foot.L", + "DEF-foot.R" + ], + "outputs": [], + "mode": "SOURCE_TO_DEFORM" + } +] \ No newline at end of file diff --git a/ue2rigify/settings/__init__.py b/src/addons/ue2rigify/settings/__init__.py similarity index 100% rename from ue2rigify/settings/__init__.py rename to src/addons/ue2rigify/settings/__init__.py diff --git a/ue2rigify/settings/tool_tips.py b/src/addons/ue2rigify/settings/tool_tips.py similarity index 100% rename from ue2rigify/settings/tool_tips.py rename to src/addons/ue2rigify/settings/tool_tips.py diff --git a/ue2rigify/settings/viewport_settings.py b/src/addons/ue2rigify/settings/viewport_settings.py similarity index 90% rename from ue2rigify/settings/viewport_settings.py rename to src/addons/ue2rigify/settings/viewport_settings.py index 7cc8c1bd..e9f820fd 100644 --- a/ue2rigify/settings/viewport_settings.py +++ b/src/addons/ue2rigify/settings/viewport_settings.py @@ -69,7 +69,11 @@ 'hide_rig_mesh': False, 'red_sphere_bones': False, 'relationship_lines': False, - 'visible_bone_layers': [28, 8, 9, 12, 11, 15, 18, 6, 5, 3, 4, 14, 17] + 'visible_bone_layers': [28, 8, 9, 12, 11, 15, 18, 6, 5, 3, 4, 14, 17], + 'visible_bone_collections': ["Root", "Arm.L (FK)", "Arm.L (Tweak)", + "Arm.R (Tweak)", "Arm.R (FK)", "Leg.L (Tweak)", + "Leg.R (Tweak)", "Fingers (Detail)", "Fingers", + "Torso", "Torso (Tweak)", "Leg.L (FK)", "Leg.R (FK)"] }} # ---------- edit source to deform mode viewport settings ---------- @@ -104,6 +108,7 @@ 'hide_rig_mesh': False, 'relationship_lines': False, 'visible_bone_layers': [29], + 'visible_bone_collections': ["Root" ,"DEF"], 'red_sphere_bones': False } } diff --git a/ue2rigify/ui/__init__.py b/src/addons/ue2rigify/ui/__init__.py similarity index 100% rename from ue2rigify/ui/__init__.py rename to src/addons/ue2rigify/ui/__init__.py diff --git a/src/addons/ue2rigify/ui/addon_preferences.py b/src/addons/ue2rigify/ui/addon_preferences.py new file mode 100644 index 00000000..15e61947 --- /dev/null +++ b/src/addons/ue2rigify/ui/addon_preferences.py @@ -0,0 +1,62 @@ +# Copyright Epic Games, Inc. All Rights Reserved. + +import bpy +from ..core import templates +from .. import __package__ + +class Ue2RigifyAddonPreferences(bpy.types.AddonPreferences): + """ + This class subclasses the AddonPreferences class to create the addon preferences interface. + """ + bl_idname = __package__ + + def get_custom_location(self): + # create key if doesn't exist then return + try: + self['custom_template_path'] + except: + self['custom_template_path'] = '' + return self['custom_template_path'] + + def set_custom_location(self, value): + self['custom_template_path'] = value + # Create default templates at custom_rig_template_path + templates.copy_default_templates() + + custom_rig_template_path: bpy.props.StringProperty( + name='Custom Templates folder', + description='The location where your rig templates will be stored, including default templates. Defaults to Temp folder if empty', + subtype='DIR_PATH', + default='', + get=get_custom_location, + set=set_custom_location + ) + + def draw(self, context): + """ + This function overrides the draw method in the AddonPreferences class. The draw method is the function + that defines the user interface layout and gets updated routinely. + + :param object context: The addon preferences context. + """ + layout = self.layout + + layout.prop(self, 'custom_rig_template_path') + row = layout.row() + row.operator('ue2rigify.import_rig_template', icon='IMPORT') + row.operator('ue2rigify.export_rig_template', icon='EXPORT') + + +def register(): + """ + Registers the addon preferences when the addon is enabled. + """ + bpy.utils.register_class(Ue2RigifyAddonPreferences) + + +def unregister(): + """ + Unregisters the addon preferences when the addon is disabled. + """ + + bpy.utils.unregister_class(Ue2RigifyAddonPreferences) diff --git a/ue2rigify/ui/exporter.py b/src/addons/ue2rigify/ui/exporter.py similarity index 100% rename from ue2rigify/ui/exporter.py rename to src/addons/ue2rigify/ui/exporter.py diff --git a/ue2rigify/ui/node_editor.py b/src/addons/ue2rigify/ui/node_editor.py similarity index 100% rename from ue2rigify/ui/node_editor.py rename to src/addons/ue2rigify/ui/node_editor.py diff --git a/ue2rigify/ui/view_3d.py b/src/addons/ue2rigify/ui/view_3d.py similarity index 97% rename from ue2rigify/ui/view_3d.py rename to src/addons/ue2rigify/ui/view_3d.py index c98a89a8..c6f70584 100644 --- a/ue2rigify/ui/view_3d.py +++ b/src/addons/ue2rigify/ui/view_3d.py @@ -62,6 +62,9 @@ def draw(self, context): row = layout.row() row.prop(properties, 'selected_mode', text='') + if properties.selected_rig_template == '': + row.operator('ue2rigify.set_default') + box = layout.box() row = box.row() row.label(text='Rig Template Editor', icon='TOOL_SETTINGS') diff --git a/tests/.gitignore b/tests/.gitignore index e62c26a7..9d49df04 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -1,7 +1,11 @@ *.blend1 results/* data/* +node_modules/* test_files/unreal_projects/test01/Content/* test_files/unreal_projects/test01/DerivedDataCache/* test_files/unreal_projects/test01/Intermediate/* test_files/unreal_projects/test01/Saved/* +test_files/data/* +package.json +package-lock.json \ No newline at end of file diff --git a/tests/run_tests.py b/tests/run_tests.py index bf39c5d4..41844c6b 100644 --- a/tests/run_tests.py +++ b/tests/run_tests.py @@ -3,18 +3,26 @@ import os import sys import logging +DEBUGGING_ON = os.environ.get('DEBUGGING_ON', 'no').lower() == 'yes' +DOCKER_ENVIRONMENT = os.environ.get('DOCKER_ENVIRONMENT', 'no').lower() == 'yes' +if DOCKER_ENVIRONMENT: + os.environ['TEST_ENVIRONMENT'] = '1' # adds the rpc module to the path -sys.path.append(os.path.join(os.path.dirname(__file__), os.path.pardir, 'send2ue', 'dependencies')) +sys.path.append(os.path.join(os.path.dirname(__file__), os.path.pardir, 'src', 'addons', 'send2ue', 'dependencies')) -from utils.addon_packager import AddonPackager from utils.container_test_manager import ContainerTestManager BLENDER_ADDONS = os.environ.get('BLENDER_ADDONS', 'send2ue,ue2rigify') +BLENDER_VERSION = os.environ.get('BLENDER_VERSION', '4.1') +UNREAL_VERSION = os.environ.get('UNREAL_VERSION', '5.4') + # switch ports depending on whether in test environment or not BLENDER_PORT = os.environ.get('BLENDER_PORT', '9997') UNREAL_PORT = os.environ.get('UNREAL_PORT', '9998') +BLENDER_CONTAINER_DEBUG_PORT = os.environ.get('BLENDER_DEBUG_PORT', '5668') +UNREAL_CONTAINER_DEBUG_PORT = os.environ.get('UNREAL_DEBUG_PORT', '5669') if os.environ.get('TEST_ENVIRONMENT'): BLENDER_PORT = os.environ.get('BLENDER_PORT', '8997') UNREAL_PORT = os.environ.get('UNREAL_PORT', '8998') @@ -24,8 +32,13 @@ CONTAINER_REPO_FOLDER = os.environ.get('CONTAINER_REPO_FOLDER', '/tmp/blender_tools/') HOST_TEST_FOLDER = os.environ.get('HOST_TEST_FOLDER', os.getcwd()) CONTAINER_TEST_FOLDER = os.environ.get('CONTAINER_TEST_FOLDER', f'{CONTAINER_REPO_FOLDER}tests') +ALWAYS_PULL = bool(int(os.environ.get('ALWAYS_PULL', '0'))) EXCLUSIVE_TEST_FILES = list(filter(None, os.environ.get('EXCLUSIVE_TEST_FILES', '').split(','))) or None +if EXCLUSIVE_TEST_FILES == ['all']: + EXCLUSIVE_TEST_FILES = [] EXCLUSIVE_TESTS = list(filter(None, os.environ.get('EXCLUSIVE_TESTS', '').split(','))) or None +if EXCLUSIVE_TESTS == ['all']: + EXCLUSIVE_TESTS = [] if __name__ == '__main__': @@ -33,49 +46,56 @@ environment = { 'SEND2UE_DEV': '1', 'UE2RIGIFY_DEV': '1', + 'BLENDER_DEBUG_PORT': BLENDER_CONTAINER_DEBUG_PORT, + 'UNREAL_DEBUG_PORT': UNREAL_CONTAINER_DEBUG_PORT, 'BLENDER_ADDONS': BLENDER_ADDONS, 'BLENDER_PORT': BLENDER_PORT, + 'BLENDER_VERSION': BLENDER_VERSION, + 'UNREAL_VERSION': UNREAL_VERSION, 'UNREAL_PORT': UNREAL_PORT, 'HOST_REPO_FOLDER': HOST_REPO_FOLDER, 'CONTAINER_REPO_FOLDER': CONTAINER_REPO_FOLDER, 'HOST_TEST_FOLDER': HOST_TEST_FOLDER, 'CONTAINER_TEST_FOLDER': CONTAINER_TEST_FOLDER, - 'RPC_TIME_OUT': '60' + 'RPC_TRACEBACK_FILE': '/tmp/blender/send2ue/data/traceback.log', + 'RPC_TIME_OUT': '120' } - # add the test environment variable if specified - if TEST_ENVIRONMENT: - os.environ['TEST_ENVIRONMENT'] = TEST_ENVIRONMENT - # make sure this is set in the current environment os.environ.update(environment) - # zip and copy addons into release folder - if TEST_ENVIRONMENT: - # copy each addons code into the test directory - for addon_name in list(filter(None, os.environ.get('BLENDER_ADDONS', '').split(','))): - addon_folder_path = os.path.join(HOST_REPO_FOLDER, addon_name) - addon_packager = AddonPackager(addon_name, addon_folder_path, os.path.join(HOST_REPO_FOLDER, 'release')) - addon_packager.zip_addon() + # add the test environment variable if specified + if DOCKER_ENVIRONMENT: + os.environ['RPC_TRACEBACK_FILE'] = os.path.join(HOST_TEST_FOLDER, 'data', 'traceback.log') + environment['TEST_ENVIRONMENT'] = '1' + if DEBUGGING_ON: + environment['BLENDER_DEBUGGING_ON'] = 'yes' + environment['UNREAL_DEBUGGING_ON'] = 'yes' + environment['BLENDER_DEBUG_PORT'] = BLENDER_CONTAINER_DEBUG_PORT + environment['UNREAL_DEBUG_PORT'] = UNREAL_CONTAINER_DEBUG_PORT # define the additional volume paths # this is the temp data location where send2ue export/imports data host_temp_folder = os.path.join(HOST_TEST_FOLDER, 'data') volumes = [ - f'{HOST_REPO_FOLDER}:{CONTAINER_REPO_FOLDER}', - f'{host_temp_folder}:/tmp/blender/send2ue/data' + f'{HOST_REPO_FOLDER}:{CONTAINER_REPO_FOLDER}' ] + shared_volumes = { + 'send2ue-export-data': '/tmp/blender/send2ue/data', + } - logging.debug(f'Launching ContainerTestManager...') + logging.debug('Launching ContainerTestManager...') # instance the container test manager with the blender and unreal containers container_test_manager = ContainerTestManager( images={ 'blender': { 'connects_to': 'unreal', 'refresh': True, - 'always_pull': False, - 'tag': 'blender:3.3.1-cpu-ubuntu18.04', - 'repository': 'nytimes', + 'always_pull': ALWAYS_PULL, + 'tag': f'blender-linux:{BLENDER_VERSION}', + 'repository': 'ghcr.io/poly-hammer', + 'user': 'root', 'rpc_port': BLENDER_PORT, + 'debug_port': BLENDER_CONTAINER_DEBUG_PORT, 'environment': environment, 'volumes': volumes, 'command': [ @@ -85,21 +105,26 @@ '--python-exit-code', '1', '--python', - '/tmp/blender_tools/send2ue/dependencies/rpc/server.py', - ] + '/tmp/blender_tools/scripts/resources/blender/startup.py', + ], + 'auth_config': { + 'username': os.environ.get('GITHUB_USERNAME'), + 'password': os.environ.get('GITHUB_TOKEN') + } }, 'unreal': { 'refresh': False, - 'always_pull': False, + 'always_pull': ALWAYS_PULL, 'rpc_port': UNREAL_PORT, + 'debug_port': UNREAL_CONTAINER_DEBUG_PORT, 'environment': environment, 'volumes': volumes, - 'tag': 'unreal-engine:dev-slim-5.3', - 'repository': 'ghcr.io/epicgames', + 'tag': f'unreal-linux:{UNREAL_VERSION}', + 'repository': 'ghcr.io/poly-hammer', 'user': 'ue4', 'command': [ '/home/ue4/UnrealEngine/Engine/Binaries/Linux/UnrealEditor-Cmd', - f'{CONTAINER_TEST_FOLDER}/test_files/unreal_projects/test01/test01.uproject', + '/tmp/blender_tools/tests/test_files/unreal_projects/test01/test01.uproject', '-stdout', '-unattended', '-nopause', @@ -107,7 +132,7 @@ '-nosplash', '-noloadstartuppackages' '-log', - '-ExecutePythonScript=/tmp/blender_tools/send2ue/dependencies/rpc/server.py', + '-ExecutePythonScript=/tmp/blender_tools/scripts/resources/unreal/init_unreal.py', ], 'auth_config': { 'username': os.environ.get('GITHUB_USERNAME'), @@ -115,6 +140,7 @@ } } }, + shared_volumes=shared_volumes, test_case_folder=HOST_TEST_FOLDER, additional_python_paths=[HOST_REPO_FOLDER, CONTAINER_REPO_FOLDER], prefix_service_logs=True, @@ -122,6 +148,10 @@ exclusive_tests=EXCLUSIVE_TESTS, ) if TEST_ENVIRONMENT: + # remove existing containers first + if os.environ.get('REMOVE_CONTAINERS', '').lower() != 'false': + container_test_manager.stop() + container_test_manager.start() container_test_manager.run_test_cases() diff --git a/tests/test_files/send2ue_extensions/example_extension.py b/tests/test_files/send2ue_extensions/example_extension.py index ee4ef60c..6acb17fd 100644 --- a/tests/test_files/send2ue_extensions/example_extension.py +++ b/tests/test_files/send2ue_extensions/example_extension.py @@ -4,10 +4,9 @@ import bpy from pprint import pprint from send2ue.core.extension import ExtensionBase -from send2ue.dependencies.unreal import remote_unreal_decorator +from send2ue.dependencies.rpc.factory import make_remote -@remote_unreal_decorator def rename_unreal_asset(source_asset_path, destination_asset_path): if unreal.EditorAssetLibrary.does_asset_exist(destination_asset_path): unreal.EditorAssetLibrary.delete_asset(destination_asset_path) @@ -99,7 +98,8 @@ def post_import(self, asset_data, properties): print('After the import task') asset_path = asset_data.get('asset_path') if asset_path: - rename_unreal_asset(asset_path, f'{asset_path}_renamed_again') + remote_rename_unreal_asset = make_remote(rename_unreal_asset) + remote_rename_unreal_asset(asset_path, f'{asset_path}_renamed_again') def post_operation(self, properties): """ diff --git a/tests/test_files/unreal_projects/test01/Config/DefaultEngine.ini b/tests/test_files/unreal_projects/test01/Config/DefaultEngine.ini index 82caa850..8680d260 100644 --- a/tests/test_files/unreal_projects/test01/Config/DefaultEngine.ini +++ b/tests/test_files/unreal_projects/test01/Config/DefaultEngine.ini @@ -47,7 +47,7 @@ bRemoteExecution=True RemoteExecutionMulticastBindAddress=127.0.0.1 [/Script/WindowsTargetPlatform.WindowsTargetSettings] -DefaultGraphicsRHI=DefaultGraphicsRHI_Default +DefaultGraphicsRHI=DefaultGraphicsRHI_DX11 -D3D12TargetedShaderFormats=PCD3D_SM5 +D3D12TargetedShaderFormats=PCD3D_SM5 +D3D12TargetedShaderFormats=PCD3D_SM6 diff --git a/tests/test_send2ue_cubes.py b/tests/test_send2ue_cubes.py index f6a10bdc..1b71eb96 100644 --- a/tests/test_send2ue_cubes.py +++ b/tests/test_send2ue_cubes.py @@ -23,6 +23,10 @@ def test_auto_stash_active_action_option(self): def test_export_object_name_as_root_option(self): pass + @unittest.skip + def test_custom_root_bone_name(self): + pass + @unittest.skip def test_export_custom_property_fcurves_option(self): pass diff --git a/tests/test_send2ue_extension_create_post_import_assets_for_groom.py b/tests/test_send2ue_extension_create_post_import_assets_for_groom.py index d92ad6bd..145ae7c0 100644 --- a/tests/test_send2ue_extension_create_post_import_assets_for_groom.py +++ b/tests/test_send2ue_extension_create_post_import_assets_for_groom.py @@ -1,3 +1,4 @@ +import sys from utils.base_test_case import BaseSend2ueTestCaseCore, BaseSend2ueTestCase, SkipSend2UeTests from test_send2ue_mannequins import TestSend2UeMannequins @@ -87,6 +88,9 @@ def test_create_post_import_assets_for_groom_option(self): """ Runs several test cases with the create post import assets extension for groom on the mannequin meshes. """ + if sys.platform == 'linux': + self.skipTest(reason='#TODO Skipping on linux') + self.move_to_collection([ 'male_root', 'SK_Mannequin_LOD1' diff --git a/tests/test_send2ue_extension_use_collections_as_folders.py b/tests/test_send2ue_extension_use_collections_as_folders.py index 38933f53..d83d6d5c 100644 --- a/tests/test_send2ue_extension_use_collections_as_folders.py +++ b/tests/test_send2ue_extension_use_collections_as_folders.py @@ -40,12 +40,14 @@ def run_use_collections_as_folders_option_tests(self, objects_and_collections): # check that the mesh name is the parent collection mesh_folder_path = self.blender.get_addon_property('scene', 'send2ue', 'unreal_mesh_folder_path') collection_hierarchy_path = '/'.join(collection_hierarchy[1:]) - folder_path = f'{mesh_folder_path}{collection_hierarchy_path}/' - self.assert_asset_exists(object_name, folder_path, True) + final_mesh_folder_path = f'{mesh_folder_path}{collection_hierarchy_path}/' + self.assert_asset_exists(object_name, final_mesh_folder_path, True) # check that the groom assets have the correct binding target mesh for groom in groom_systems: - self.assert_binding_asset(groom, object_name, folder_path) + groom_folder_path = self.blender.get_addon_property('scene', 'send2ue', 'unreal_groom_folder_path') + final_groom_folder_path = f'{groom_folder_path}{collection_hierarchy_path}/' + self.assert_binding_asset(groom, object_name, final_mesh_folder_path, final_groom_folder_path) class TestSend2UeExtensionCollectionsAsFoldersCubes( diff --git a/tests/test_send2ue_mannequins.py b/tests/test_send2ue_mannequins.py index 80731c78..8a8ad504 100644 --- a/tests/test_send2ue_mannequins.py +++ b/tests/test_send2ue_mannequins.py @@ -199,6 +199,19 @@ def test_export_object_name_as_root_option(self): 'frames': [2, 6, 11] }}) + def test_custom_root_bone_name(self): + """ + Tests custom root bone name option. + """ + self.run_custom_root_bone_name_option_tests({ + 'SK_Mannequin_Female': { + 'rig': 'female_root', + 'animations': ['third_person_walk_01', 'third_person_run_01'], + 'bones': ['spine_02', 'calf_l', 'lowerarm_r'], + 'frames': [2, 6, 11], + 'custom_name': 'my_test_root_bone', + }}) + def test_export_custom_property_fcurves_option(self): """ Tests export custom property fcurves option. diff --git a/tests/test_ue2rigify_mannequins.py b/tests/test_ue2rigify_mannequins.py index b3612664..3b7bcc7d 100644 --- a/tests/test_ue2rigify_mannequins.py +++ b/tests/test_ue2rigify_mannequins.py @@ -16,7 +16,7 @@ def test_modes(self): """ self.run_modes_tests({ 'male_root': { - 'template': 'male_mannequin', + 'template': 'male_mannequin_UE4', 'modes': [ 'SOURCE', 'FK_TO_SOURCE', @@ -26,7 +26,7 @@ def test_modes(self): ] }, 'female_root': { - 'template': 'female_mannequin', + 'template': 'female_mannequin_UE4', 'modes': [ 'FK_TO_SOURCE', 'SOURCE_TO_DEFORM', @@ -51,7 +51,7 @@ def test_new_template(self): }, 'female_root': { 'new_template_name': 'test_mannequin', - 'starter_template_name': 'female_mannequin', + 'starter_template_name': 'female_mannequin_UE4', 'fk_to_source': {'upper_arm_fk.L': 'upperarm_l'}, 'source_to_deform': {'upperarm_l': 'DEF-upper_arm.L'} } @@ -66,7 +66,7 @@ def test_baking(self): self.run_baking_tests({ # TODO flip animation order and fix failure 'male_root': { - 'template': 'male_mannequin', + 'template': 'male_mannequin_UE4', 'control_rig': 'rig', 'animations': ['third_person_run_01', 'third_person_walk_01'], # 'bones': ['pelvis', 'calf_r', 'foot_l', 'hand_l'], # TODO make this pass with the hands and feet @@ -80,7 +80,7 @@ def test_baking(self): }, # TODO investigate female template fix failure # 'female_root': { - # 'template': 'female_mannequin', + # 'template': 'female_mannequin_UE4', # 'control_rig': 'rig', # 'animations': ['third_person_run_01', 'third_person_walk_01'], # 'bones': ['spine_02', 'calf_l', 'lowerarm_r'], @@ -94,7 +94,7 @@ def test_template_sharing(self): """ self.run_template_sharing_tests({ 'male_root': { - 'template': 'male_mannequin', + 'template': 'male_mannequin_UE4', } }) diff --git a/tests/utils/base_test_case.py b/tests/utils/base_test_case.py index 6c3e9691..e3c247dd 100644 --- a/tests/utils/base_test_case.py +++ b/tests/utils/base_test_case.py @@ -14,12 +14,14 @@ def __init__(self, *args, **kwargs): self.test_environment = os.environ.get('TEST_ENVIRONMENT') self.test_folder = os.environ.get('HOST_TEST_FOLDER') self.repo_folder = os.environ.get('HOST_REPO_FOLDER') + sys.path.append(os.path.join(self.repo_folder, 'src', 'addons')) if self.test_environment: self.test_folder = os.environ.get('CONTAINER_TEST_FOLDER') self.repo_folder = os.environ.get('CONTAINER_REPO_FOLDER') + sys.path.append(f'{self.repo_folder}/src/addons') + self.addons_folder = os.path.join(self.repo_folder, 'release') - sys.path.append(self.repo_folder) import send2ue import ue2rigify self.send2ue = send2ue @@ -27,8 +29,9 @@ def __init__(self, *args, **kwargs): from utils.blender import BlenderRemoteCalls from send2ue.dependencies.unreal import UnrealRemoteCalls + from send2ue.dependencies.rpc.factory import make_remote self.blender = BlenderRemoteCalls - self.unreal = UnrealRemoteCalls + self.unreal = make_remote(UnrealRemoteCalls) def setUp(self): # load in the object from the file you will run tests with @@ -39,7 +42,6 @@ def setUp(self): self.blender.open_default() if os.environ.get('TEST_ENVIRONMENT'): - self.blender.install_addons(self.repo_folder, self.blender_addons) self.blender.send2ue_setup_project() else: for addon_name in self.blender_addons: @@ -133,7 +135,8 @@ def __init__(self, *args, **kwargs): def setUp(self): super().setUp() - self.set_extension_repo('') + self.blender.clear_extension_repos() + self.blender.run_addon_operator(self.addon_name, 'reload_extensions') def set_extension_repo(self, path): self.log(f'Setting the addon extension repo to "{path}"') @@ -142,12 +145,7 @@ def set_extension_repo(self, path): if self.test_environment: path = os.path.normpath(path).replace(os.path.sep, '/') - self.blender.set_addon_property( - 'preferences', - self.addon_name, - 'extensions_repo_path', - path - ) + self.blender.add_extension_repo(path) self.blender.run_addon_operator(self.addon_name, 'reload_extensions') def assert_extension_operators(self, extension_name, extension_operators, exists=True): @@ -238,7 +236,8 @@ def run_extension_tests(self, extensions): self.assert_extension(extension_name, extensions_data) # check that external extensions are removed are being removed correctly - self.set_extension_repo('') + self.blender.clear_extension_repos() + self.blender.run_addon_operator(self.addon_name, 'reload_extensions') for extension_name, extensions_data in external_extensions.items(): self.assert_extension(extension_name, extensions_data, False) @@ -399,7 +398,7 @@ def assert_asset_exists(self, asset_name, folder_path, exists=True): self.log(f'Ensuring that "{asset_name}" exists...') self.assertTrue( self.unreal.asset_exists(f'{folder_path}{asset_name}'), - f'The "{asset_name}" does not exist in unreal!' + f'The "{asset_name}" does not exist in unreal! Loc: {folder_path}' ) else: self.log(f'Ensuring that "{asset_name}" does not exist...') @@ -432,14 +431,15 @@ def assert_groom_import(self, asset_name, exists=True): folder_path = self.blender.get_addon_property('scene', 'send2ue', 'unreal_groom_folder_path') self.assert_asset_exists(asset_name, folder_path, exists) - def assert_binding_asset(self, groom_asset_name, target_mesh_name, mesh_folder_path=None): + def assert_binding_asset(self, groom_asset_name, target_mesh_name, mesh_folder_path=None, groom_folder_path=None): self.log(f'Checking that binding asset is created correctly for "{groom_asset_name}"...') binding_asset_name = f'{groom_asset_name}_{target_mesh_name}_Binding' if not mesh_folder_path: mesh_folder_path = self.blender.get_addon_property('scene', 'send2ue', 'unreal_mesh_folder_path') - groom_folder_path = self.blender.get_addon_property('scene', 'send2ue', 'unreal_groom_folder_path') + if not groom_folder_path: + groom_folder_path = self.blender.get_addon_property('scene', 'send2ue', 'unreal_groom_folder_path') self.assert_asset_exists(binding_asset_name, groom_folder_path, True) @@ -688,7 +688,7 @@ def assert_curve(self, animation_name, curve_name, exists=True): else: self.assertFalse(result, f'Curve "{curve_name}" exists on animation "{animation_name}" when it should not!') - def assert_animation_hierarchy(self, rig_name, animation_name, bone_name, include_object=True): + def assert_animation_hierarchy(self, rig_name, animation_name, bone_name, include_object=True, custom_root_name=None): self.log( f'Checking the bone hierarchy of "{animation_name}" to see if "{bone_name}" has the same path ' f'to the root bone...' @@ -699,6 +699,9 @@ def assert_animation_hierarchy(self, rig_name, animation_name, bone_name, includ unreal_bone_path = self.unreal.get_bone_path_to_root(asset_path, bone_name) blender_bone_path = self.blender.get_bone_path_to_root(rig_name, bone_name, include_object) + if custom_root_name: + blender_bone_path.append(custom_root_name) + self.assertEqual( collections.Counter(blender_bone_path), collections.Counter(unreal_bone_path), @@ -1081,6 +1084,29 @@ def run_export_object_name_as_root_option_tests(self, objects_and_animations): for frame in frames: self.assert_animation_translation(rig_name, animation_name, bone_name, frame) + def run_custom_root_bone_name_option_tests(self, objects_and_animations): + self.blender.set_addon_property('scene', 'send2ue', 'export_all_actions', True) + self.blender.set_addon_property('scene', 'send2ue', 'import_animations', True) + # This option should be ignored as we're setting a custom name below. + self.blender.set_addon_property('scene', 'send2ue', 'export_object_name_as_root', True) + + for object_name, data in objects_and_animations.items(): + rig_name = data.get('rig') + animation_names = data.get('animations') + bone_names = data.get('bones') + frames = data.get('frames') + custom_root_bone_name = data.get('custom_name') + self.blender.set_addon_property('scene', 'send2ue', 'export_custom_root_name', custom_root_bone_name) + self.move_to_collection([object_name, rig_name], 'Export') + self.send2ue_operation() + self.assert_mesh_import(object_name) + # check that the animations are as expected + for animation_name in animation_names: + for bone_name in bone_names: + self.assert_animation_hierarchy(rig_name, animation_name, bone_name, include_object=False, custom_root_name=custom_root_bone_name) + for frame in frames: + self.assert_animation_translation(rig_name, animation_name, bone_name, frame) + def run_export_custom_property_fcurves_option_tests(self, objects_and_animations): self.blender.set_addon_property('scene', 'send2ue', 'export_all_actions', True) self.blender.set_addon_property('scene', 'send2ue', 'import_animations', True) @@ -1165,6 +1191,9 @@ def test_export_object_name_as_root_option(self): """ raise NotImplementedError('This test case must be implemented or skipped') + def test_custom_root_bone_name(self): + raise NotImplementedError('This test case must be implemented or skipped') + def test_export_custom_property_fcurves_option(self): """ Tests export custom property fcurves option. @@ -1232,6 +1261,10 @@ def test_auto_stash_active_action_option(self): def test_export_object_name_as_root_option(self): pass + @unittest.skip + def test_custom_root_bone_name(self): + pass + @unittest.skip def test_use_object_origin_option(self): pass @@ -1444,7 +1477,8 @@ def run_template_sharing_tests(self, rigs_and_templates): self.ue2rigify.constants.ToolInfo.NAME.value, 'resources', 'rig_templates', - f'{template_name}_test' + 'b4_0' if int(os.environ.get('BLENDER_VERSION', '4.1').split('.')[0]) >= 4 else 'b3_6', + f'{template_name}_test'.lower() ] template_file_paths = [ @@ -1467,7 +1501,7 @@ def run_template_sharing_tests(self, rigs_and_templates): self.addon_name, 'remove_rig_template', None, - {'template': f'{template_name}_test'} + {'template': f'{template_name.lower()}_test'} ) for template_file_path in template_file_paths: self.assertFalse( diff --git a/tests/utils/blender.py b/tests/utils/blender.py index 567e4f4f..108863c1 100644 --- a/tests/utils/blender.py +++ b/tests/utils/blender.py @@ -4,6 +4,7 @@ import logging import importlib import tempfile +from pathlib import Path try: import bpy @@ -47,7 +48,7 @@ def install_addons(repo_folder, addons): Installs the given addons from the release folder. """ for addon in addons: - addon_folder_path = os.path.join(repo_folder, addon) + addon_folder_path = os.path.join(repo_folder, 'src', 'addons', addon) release_folder = os.path.join(repo_folder, 'release') addon_packager = AddonPackager(addon, addon_folder_path, release_folder) addon_packager.install_addon() @@ -111,6 +112,21 @@ def set_addon_property(context_name, addon_name, property_name, value, data_type break properties = getattr(properties, sub_property_name) + @staticmethod + def add_extension_repo(file_path): + preferences = bpy.context.preferences.addons['send2ue'].preferences + for extension_folder in preferences.extension_folder_list: + if Path(extension_folder.folder_path) == Path(file_path): + break + else: + extension_folder = preferences.extension_folder_list.add() + extension_folder.folder_path = file_path + + @staticmethod + def clear_extension_repos(): + preferences = bpy.context.preferences.addons['send2ue'].preferences + preferences.extension_folder_list.clear() + @staticmethod def check_particles(mesh_name, particle_names): """ diff --git a/tests/utils/container_test_manager.py b/tests/utils/container_test_manager.py index dc870b34..ec398a5b 100644 --- a/tests/utils/container_test_manager.py +++ b/tests/utils/container_test_manager.py @@ -7,6 +7,8 @@ import threading import unittest import docker +import docker.errors +from docker.types import Mount import xmlrunner import shutil import inspect @@ -75,7 +77,8 @@ def __init__( poll_interval=1, additional_python_paths=None, exclusive_test_files=None, - exclusive_tests=None + exclusive_tests=None, + shared_volumes=None, ): self.test_case_container_folder = os.environ.get('CONTAINER_TEST_FOLDER', '/tmp/test_cases/') @@ -92,6 +95,7 @@ def __init__( self.exclusive_test_files = exclusive_test_files or [] self.additional_python_paths = additional_python_paths or [] self.exclusive_tests = exclusive_tests or [] + self.shared_volumes = shared_volumes or {} self._test_case_ids = [] self.logger = logging.getLogger(f'{self.__class__.__name__}') @@ -99,8 +103,13 @@ def __init__( if os.environ.get('TEST_ENVIRONMENT'): try: - self.docker_client = docker.from_env() - self.docker_api_client = docker.APIClient() + if sys.platform == 'linux': + self.docker_client = docker.DockerClient(base_url='unix://var/run/docker.sock') + self.docker_api_client = docker.APIClient(base_url='unix://var/run/docker.sock') + else: + self.docker_client = docker.from_env() + self.docker_api_client = docker.APIClient() + except docker.errors.DockerException: raise docker.errors.DockerException('Can not talk to the docker API. Is docker installed and running?') @@ -111,6 +120,24 @@ def __init__( self.should_continue = True self.test_suite = unittest.TestSuite() + def _get_shared_volumes(self): + volumes = [] + for volume_name in self.shared_volumes.keys(): + if volume_name not in [volume.name for volume in self.docker_client.volumes.list()]: # type: ignore + self.logger.info(f'Created volume "{volume_name}" ...') + volume = self.docker_client.volumes.create( + name=volume_name, + driver='local' + ) + self.logger.info(f'Created "{volume_name}"!') + volumes.append(volume) + else: + for volume in self.docker_client.volumes.list(): + if volume.name == volume_name: # type: ignore + volumes.append(volume) + break + return volumes + def _call_on_all_services(self, callable_instance, **kwargs): """ Helper method for calling a given method on all services. @@ -375,13 +402,17 @@ def run_containers(self): for name, data in self.images.items(): refresh = data.get('refresh', True) rpc_port = data.get('rpc_port') + debug_port = data.get('debug_port') additional_packages = data.get('additional_packages', []) repository = data.get('repository') tag = data.get('tag') command = data.get('command', []) user = data.get('user') ports = data.get('ports', {}) - ports.update({f'{rpc_port}/tcp': rpc_port}) + ports.update({ + f'{rpc_port}/tcp': ('127.0.0.1', rpc_port), + f'{debug_port}/tcp': ('127.0.0.1', debug_port) + }) entrypoint = data.get('entrypoint') environment = data.get('environment', {}) environment.update({ @@ -390,10 +421,30 @@ def run_containers(self): 'RPC_HOST': '0.0.0.0' }) + mounts = [] + volume_configs = {} volumes = data.get('volumes', []) volumes = volumes + self.get_package_volume_mounts(additional_packages) volumes.append(f'{self.test_case_folder}:{self.test_case_container_folder}') + + # make all volumes read write + for volume in volumes: + source, destination = volume.split(':/') + volume_configs[source] = {'bind': f'/{destination}', 'mode': 'rw'} + + # add the shared volumes + for volume in self._get_shared_volumes(): + container_path = self.shared_volumes.get(volume.name) + mounts.append( + Mount( + target=container_path, + source=volume.name, + type='volume', + read_only=False + ) + ) + image = f'{repository}/{tag}' if not repository: image = tag @@ -415,7 +466,8 @@ def run_containers(self): image=image, command=command, user=user, - volumes=volumes, + volumes=volume_configs, + mounts=mounts, ports=ports, entrypoint=entrypoint, environment=environment, @@ -440,6 +492,18 @@ def stop_containers(self): self.logger.debug(f'Removed container {container_name}') self.services_summary.update({container_name: {'stats': stats, 'inspect_data': inspect_data}}) + def remove_volumes(self): + """ + Removes all volumes. + """ + for volume_name in self.shared_volumes.keys(): + try: + volume = client.volumes.get(volume_name)# type: ignore + volume.remove() + self.logger.debug(f"Volume '{volume_name}' successfully deleted.") + except: + pass + def await_service(self, service_name, rpc_client): """ Awaits a response from the given service. @@ -453,7 +517,7 @@ def await_service(self, service_name, rpc_client): if rpc_client.proxy.is_running(): self.logger.info(f'{service_name} is running!') break - except (RemoteDisconnected, ConnectionRefusedError): + except (RemoteDisconnected, ConnectionRefusedError, ConnectionResetError): self.logger.debug( f'{service_name} has not responded in {self.get_start_time_offset()} seconds...' ) @@ -550,19 +614,18 @@ def log_summary(self): system_cpu_usage = cpu_stats['system_cpu_usage'] pre_cpu_total_usage = pre_cpu_stats['cpu_usage']['total_usage'] pre_system_cpu_usage = pre_cpu_stats['system_cpu_usage'] - cpu_usage_count = len(cpu_stats['cpu_usage']['percpu_usage']) # get memory stats memory_stats = stats["memory_stats"]["stats"] memory_usage = stats["memory_stats"]["usage"] - memory_used = memory_usage - memory_stats["cache"] + memory_stats["active_file"] + memory_used = memory_usage - memory_stats.get("cache", 0) + memory_stats.get("active_file", 0) limit = stats["memory_stats"]['limit'] # calculate cpu percentages total_cpu_usage_delta = cpu_total_usage - pre_cpu_total_usage system_cpu_usage_delta = system_cpu_usage - pre_system_cpu_usage - cpu_percentage = round((total_cpu_usage_delta / system_cpu_usage_delta) * cpu_usage_count * 100, 3) + cpu_percentage = round((total_cpu_usage_delta / system_cpu_usage_delta) * 100, 3) # calculate memory percentages memory_percentage = round(memory_used / limit * 100, 2) @@ -575,7 +638,7 @@ def log_summary(self): self.logger.info( f' {service_name.capitalize()}: Total runtime {runtime_delta.seconds} seconds | {cpu_percentage}% ' - f'CPU used across {cpu_usage_count} cores | {memory_percentage}% of available memory used ' + f'of available CPU was used | {memory_percentage}% of available memory used ' f'{gb_memory}GB / {gb_memory_limit}GB' ) @@ -602,4 +665,5 @@ def stop(self): for thread in self.log_streaming_threads: thread.join() + self.remove_volumes() self.log_summary() diff --git a/ue2rigify/release_notes.md b/ue2rigify/release_notes.md deleted file mode 100644 index 80c9b0b3..00000000 --- a/ue2rigify/release_notes.md +++ /dev/null @@ -1,7 +0,0 @@ -### Minor Changes -* Added validation to ensure source rig has a scale of 1. - * [601](https://github.com/EpicGamesExt/BlenderTools/issues/601) - - -## Tests Passing On -* Blender `3.5` (installed from blender.org) diff --git a/ue2rigify/ui/addon_preferences.py b/ue2rigify/ui/addon_preferences.py deleted file mode 100644 index 9e3d5d25..00000000 --- a/ue2rigify/ui/addon_preferences.py +++ /dev/null @@ -1,40 +0,0 @@ -# Copyright Epic Games, Inc. All Rights Reserved. - -import bpy -from ..constants import ToolInfo - - -class Ue2RigifyAddonPreferences(bpy.types.AddonPreferences): - """ - This class subclasses the AddonPreferences class to create the addon preferences interface. - """ - bl_idname = ToolInfo.NAME.value - - def draw(self, context): - """ - This function overrides the draw method in the AddonPreferences class. The draw method is the function - that defines the user interface layout and gets updated routinely. - - :param object context: The addon preferences context. - """ - layout = self.layout - - row = layout.row() - row.operator('ue2rigify.import_rig_template', icon='IMPORT') - row.operator('ue2rigify.export_rig_template', icon='EXPORT') - - -def register(): - """ - Registers the addon preferences when the addon is enabled. - """ - if not hasattr(bpy.types, Ue2RigifyAddonPreferences.bl_idname): - bpy.utils.register_class(Ue2RigifyAddonPreferences) - - -def unregister(): - """ - Unregisters the addon preferences when the addon is disabled. - """ - if hasattr(bpy.types, Ue2RigifyAddonPreferences.bl_idname): - bpy.utils.unregister_class(Ue2RigifyAddonPreferences)