Blender addons - A collection of Blender tools I've written for myself over the years.

Overview

gret

A collection of Blender tools I've written for myself over the years. I use these daily so they should be bug-free, mostly. Feel free to take and use any parts of this project. gret can be typed with one hand in the search bar.

Installation

TODO

Configuration

TODO

Tools

Mesh: Graft

Connects boundaries of selected objects to the active object. I wrote it to deal with stylised fur in a non-destructive way that allows normals to be lifted from the body.

Demo

Mesh: Retarget Mesh

Refit clothing meshes to a modified version of the character mesh.

Demo

If retargeting to a different mesh, make sure they share topology and vertex order. If the retargeted mesh becomes polygon soup then it's probably the vertex order. Try using an addon like Transfer Vert Order to fix it.

Mesh: Make Collision

Intended for use with UE4, generates collision shapes for selected geometry. For example, to make compound collision for a chair:

  1. Select a part of the chair in edit mode (can use Select Linked Pick if the pieces are separate).
  2. Click Make Collision and select an appropriate shape, e.g. capsules for the posts, a box for the backrest and cylinder for the seat.
  3. Repeat for every piece.

Demo

Mesh: Vertex Color Mapping

Procedurally generates vertex colors from various sources. Sources can be vertex groups, object or vertex position, or a random value. Useful for exporting masks to game engines.

Panel

Mesh: Apply Modifiers with Shape Keys

The much needed ability to apply modifiers on a mesh with shape keys. Mirrors are specially handled to fix shape keys that move vertices off the center axis. Found in Shape Keys → Specials Menu → Apply Modifiers with Shape Keys.

Mesh: Sync UV Maps

Adds a few buttons that allow reordering UV maps. Sync UV Maps works on all selected objects to ensure UV layer names and order are consistent with the active object. It can also be used to simply switch the active UV layer for multiple objects.

Buttons

Mesh: Add Strap

Similar in function to an extruded curve. Since it's mesh and not curve based, typical mesh operators can be used to edit it. Use case is adding belts to characters.

Mesh: Add Rope

Generates helicoid meshes, mostly useful as ropes. Can edit the base shape once created.

Animation: Pose Blender

Allows blending poses together, similar to the UE4 AnimGraph node. Works on bones, not shape keys.

Demo

Has a performance cost, I'll try to optimize it further at some point.

Animation: Actions Panel

A panel for quick access to actions and working with pose libraries. Pose libraries are simply actions where each frame has a named marker, and normally they're very annoying to work with. A pose library is necessary to use the Pose Blender tool.

Panel

Animation: Rig Panel

Add any frequently used rig or bone properties here. To find the data path of a property, right click it then select Copy Data Path.

The addon Bone Selection Sets must be enabled for the second panel to show. I don't find bone pickers to be comfortable to use, and this is a workable alternative. Add and delete buttons make it easy to create temporary sets while animating.

Panel

Material: Texture Bake

One-click bake and export. Intended for quickly baking out curvature and AO masks.

Panel

Material: Tile Paint

Rudimentary tool to create tile-based UV maps. For anything more complicated use Sprytile instead.

Demo

UV: Relax Loops

Relaxes selected UV edge loops to their respective length on the mesh. Can be used to rectify non-grid meshes that TexTools Rectify won't work on. Found in UV Editor → UV → Relax Loops.

Demo

Other

Sculpt Selection: Sets the sculpt mask from the current edit-mode vertex selection. Found in the Select menu in edit mode.

Normalize Shape Key: Resets min/max of shape keys while keeping the range of motion. A shape key with range [-1..3] becomes [0..1], neutral at 0.25. Some game engines don't allow extrapolation of shape keys. Found in Shape Keys → Specials Menu → Normalize Shape Key.

Merge Shape Keys to Basis: Mixes active shape keys into the basis shape. It's possible to filter shape keys by name.

Remove Unused Vertex Groups: Originally an addon by CoDEmanX, this operator respects L/R pairs of vertex groups. Found in Vertex Groups → Specials Menu → Remove Unused Vertex Groups.

Deduplicate Materials: Squashes duplicate materials, like "Skin.002", "Skin.003", etc. Found in File → Clean Up.

Replace References: Replaces object references in modifiers. I use it to swap meshes that are shrinkwrap targets and such. Found in File → Clean Up.

Export Jobs

TODO

Comments
  • Apply Modfiers with Shapekey, but not Armature

    Apply Modfiers with Shapekey, but not Armature

    Hello, is there a way to apply modifiers with Shapekey, but ignore Armature.

    I need to apply mirror and subdiv for Fbx exports, and your plugin seems to be the most stable form all that I have tested.

    Thanks

    opened by fls-eugene 4
  • Can't enable the addon.

    Can't enable the addon.

    When I try to enable GRET 0.3.0 by clicking a checkbox in addons tab, blender won't let me do it and prints this error log -

    Traceback (most recent call last): File "blender-3.1.2-windows-x64\3.1\scripts\modules\addon_utils.py", line 351, in enable mod = import(module_name) File "AppData\Roaming\Blender Foundation\Blender\3.1\scripts\addons\gret-0_3_0_init_.py", line 52, in modules = import_or_reload_modules(module_names, name) File "AppData\Roaming\Blender Foundation\Blender\3.1\scripts\addons\gret-0_3_0_init_.py", line 31, in import_or_reload_modules module = globals()[module_name] = importlib.import_module(module_name) File "blender-3.1.2-windows-x64\3.1\python\lib\importlib_init_.py", line 126, in import_module return bootstrap.gcd_import(name[level:], package, level) File "AppData\Roaming\Blender Foundation\Blender\3.1\scripts\addons\gret-0_3_0\mesh_init.py", line 23, in modules = import_or_reload_modules(module_names, name) File "AppData\Roaming\Blender Foundation\Blender\3.1\scripts\addons\gret-0_3_0_init.py", line 31, in import_or_reload_modules module = globals()[module_name] = importlib.import_module(module_name) File "blender-3.1.2-windows-x64\3.1\python\lib\importlib_init_.py", line 126, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "AppData\Roaming\Blender Foundation\Blender\3.1\scripts\addons\gret-0_3_0\mesh\shape_key_store.py", line 152, in class ShapeKeyPanelPatcher(PanelPatcher): File "AppData\Roaming\Blender Foundation\Blender\3.1\scripts\addons\gret-0_3_0\mesh\shape_key_store.py", line 154, in ShapeKeyPanelPatcher panel_type = bpy.types.DATA_PT_shape_keys AttributeError: 'module' object has no attribute 'DATA_PT_shape_keys'

    I am installing it on Blender 3.1.2, tried 3.1.0 but it prints the same exact error. 0.2.0 GRET works just fine.

    opened by Electrognome 3
  • Doesn't work at all for me

    Doesn't work at all for me

    I've downloaded the add on and have blender 2.93.7. I can install it, but when searching it does not appear. Tried to remove and install again and also older versions on gret.

    opened by vanessahjerpe 3
  • Request: add handling for converting Blender poses to unreal pose assets.

    Request: add handling for converting Blender poses to unreal pose assets.

    Blender poses only want the posed bones to have keyframes data. Unreal pose assets require zero transforms keyframes. For exporting a blender pose (for example for faceARKit face shapes) to unreal I need to manually keyframe the rest pose along with the changed bones. But this break's blenders about to blend poses.

    Is there a way to add an option to automatically add or strip zero keyframes from an animation to allow non destructive conversion between blender and unreal poses?

    opened by BusterCharlie 2
  • Changes in Blender 3.4 break rope and collision mesh creation

    Changes in Blender 3.4 break rope and collision mesh creation

    After installing the addon in Blender 3.4 and trying to create a rope there is an error: AttributeError: 'Mesh' object has no attribute 'use_customdata_edge_crease'

    also, when trying to create collision mesh there is another error: AttributeError: 'Mesh' object has no attribute 'use_customdata_vertex_bevel'

    Probably related to https://developer.blender.org/rB291c313f80b4cc and https://developer.blender.org/rBa8a454287a27

    opened by Ran9 1
  • Speed up shape_key_apply_modifiers using buffers

    Speed up shape_key_apply_modifiers using buffers

    By using buffer objects with type matching the 'co' data (single precision float), in foreach_set and foreach_get, Blender will directly memcpy the data into/out of the buffer instead of iterating and casting each element to the correct type. This results in slightly faster foreach_set and foreach_get calls.

    It's probably not much of a timesave unless the mesh being operated on is huge (or ends up huge from its modifiers) and/or has a ton of shape keys.

    Here's the foreach_getset code in Blender's source: https://github.com/blender/blender/blob/594f47ecd2d5367ca936cf6fc6ec8168c2b360d0/source/blender/python/intern/bpy_rna.c#L5228 The lines containing !buffer_is_compat are where it'll swap to iteration if the buffer isn't compatible with the data, the code for compatible buffers is right before.

    Here's the code I used for benchmarking along with results in the comments:

    import bpy
    import numpy as np
    import timeit
    
    # Requirements:
    # In object mode with an active mesh object in current scene that has shape keys
    
    
    def orig_get(my_list, vertices):
        my_list[:] = [0.0] * (len(vertices) * 3)
        vertices.foreach_get('co', my_list)
    
    def np_get(my_array, vertices):
        my_array.resize(len(vertices) * 3, refcheck=False)
        vertices.foreach_get('co', my_array)
        
    def put(my_list_or_array, vertices):
        vertices.foreach_set('co', my_list_or_array)
        
    
    trials = 1000
    
    
    get_setup = "basis=bpy.context.object.data.shape_keys.key_blocks[0]"
    put_setup_orig = get_setup + ";my_list = [];orig_get(my_list, basis.data)"
    put_setup_np = get_setup + ";my_array = np.empty(0, dtype=np.single);np_get(my_array, basis.data)"
    
    # ~56.49ms per call with 393218 verts (ran with 100 trials instead of 1000)
    # ~2.96ms per call with 24578 verts
    # ~0.041ms per call with 386 verts
    print(timeit.timeit("my_list = [];orig_get(my_list, basis.data)", setup=get_setup, globals=globals(), number=trials)/trials*1000)
    # ~18.82ms per call with 393218 verts (ran with 100 trials instead of 1000) (3x)
    # ~1.16ms per call with 24578 verts (2.55x)
    # ~0.022ms per call with 386 verts (1.86x)
    print(timeit.timeit("my_array = np.empty(0, dtype=np.single);np_get(my_array, basis.data)", setup=get_setup, globals=globals(), number=trials)/trials*1000)
    
    # ~28.45ms per call with 393218 verts (ran with 100 trials instead of 1000)
    # ~1.75ms per call with 24578 verts
    # ~0.03ms per call with 386 verts
    print(timeit.timeit("put(my_list, basis.data)", setup=put_setup_orig, globals=globals(), number=trials)/trials*1000)
    # ~20.85ms per call with 393218 verts (ran with 100 trials instead of 1000) (1.36x)
    # ~1.29ms per call with 24578 verts (1.36x)
    # ~0.022ms per call with 386 verts (1.36x)
    print(timeit.timeit("put(my_array, basis.data)", setup=put_setup_np, globals=globals(), number=trials)/trials*1000)```
    opened by Mysteryem 1
  • Support Live link Such As Unity MeshSync For Blender

    Support Live link Such As Unity MeshSync For Blender

    • Workflow: i.e. A real-time link from Blender to UE is like unity's meshSync plugin
    • Description: i.e.

    Hi!I recently noticed that Unity's MehSync plugin has been able to sync most of Blender's data in real time. Just bone data may not be perfect for games, but it's almost done with USD data transfer.

    The USD Hydra plug-in developed by AMD is currently the only way to dynamically link USD to Blender. However, the supported data is too few. Blender's meeting last week was still discussing the follow-up development route of USD, so it is difficult to make progress in the short term.

    So I'm really looking forward to a plugin like Unity's MeshSync that links to Blender in real time, which is a breakthrough for both game development and film production, allowing almost any Blender user project to seamlessly connect to UE, even if they've only learned the basics of UE for five minutes. 

    Hopefully you will be able to develop a similar real-time synchronization feature before Blender fully supports USD (which I think is at least a few years away), thanks for your efforts!

    Here are some links and demos

    opened by 1405100494 1
  • Remove ARP thingy from Action panel and substitue for new Blender 3.1…

    Remove ARP thingy from Action panel and substitue for new Blender 3.1…

    … Frame Range feature :)

    I've updated here on our internal tools, it's working fine from what I've tested :) Never did a Pull Request before, so excuse me if I'm doing something wrong!

    opened by elamhut 1
  • Error trying to enable add-on in Blender 2.93

    Error trying to enable add-on in Blender 2.93

    Traceback (most recent call last): File "C:\Program Files\Blender Foundation\Blender 2.93\2.93\scripts\modules\addon_utils.py", line 386, in enable mod.register() File "C:\Users\Main\AppData\Roaming\Blender Foundation\Blender\2.93\scripts\addons\gret-0_0_1_init_.py", line 159, in register module.register(GRET_PG_settings) File "C:\Users\Main\AppData\Roaming\Blender Foundation\Blender\2.93\scripts\addons\gret-0_0_1\material_init_.py", line 14, in register module.register(settings) File "C:\Users\Main\AppData\Roaming\Blender Foundation\Blender\2.93\scripts\addons\gret-0_0_1\material\tile_paint.py", line 578, in register GRET_OT_tileset_draw.annotations['uv_layer_name'][1]['default'] = prefs.tileset_uv_layer_name TypeError: '_PropertyDeferred' object is not subscriptable

    opened by welovekah 1
Releases(1_1_0)
CNKD - Minimalistic Windows ransomware written in Python

CNKD Minimalistic Windows ransomware written in Python (Still a work in progress

Alex 2 May 27, 2022
ThnoolBox - A thneed is a multi-use versatile object

ThnoolBox Have you ever wanted a collection of bodged desktop apps that are Lorax themed ? No ? Sucks to suck I guess Apps & their downsides CalculaTh

pocoyo 1 Jan 21, 2022
A dashboard for your code. A build system.

NOTICE: THIS REPO IS NO LONGER UPDATED Changes Changes is a build coordinator and reporting solution written in Python. The project is primarily built

Dropbox 763 Sep 09, 2022
Python script for the radio in the Junior float.

hoco radio 2021 Python script for the radio in the Junior float. Populate the ./music directory with 2 or more .wav files and run radio2.py. On the Ra

Kevin Yu 2 Jan 18, 2022
nbsafety adds a layer of protection to computational notebooks by solving the stale dependency problem when executing cells out-of-order

nbsafety adds a layer of protection to computational notebooks by solving the stale dependency problem when executing cells out-of-order

150 Jan 07, 2023
Just some mtk tool for exploitation, reading/writing flash and doing crazy stuff

Just some mtk tool for exploitation, reading/writing flash and doing crazy stuff. For linux, a patched kernel is needed (see Setup folder) (except for read/write flash). For windows, you need to inst

Bjoern Kerler 1.1k Dec 31, 2022
A comparison of mesh generators.

This repository creates meshes of the same domains with multiple mesh generators and compares the results.

Nico Schlömer 29 Dec 12, 2022
This repository contains a lot of short scripting programs implemented both in Python (Flask) and TypeScript (NodeJS).

fast-scripts This repository contains a lot of short scripting programs implemented both in Python (Flask) and TypeScript (NodeJS). In python These wi

Nahum Maurice 3 Dec 10, 2022
A notebook explaining the principle of adversarial attacks and their defences

TL;DR: A notebook explaining the principle of adversarial attacks and their defences Abstract: Deep neural networks models have been wildly successful

1 Jan 22, 2022
Implements a polyglot REPL which supports multiple languages and shared meta-object protocol scope between REPLs.

MetaCall Polyglot REPL Description This repository implements a Polyglot REPL which shares the state of the meta-object protocol between the REPLs. Us

MetaCall 10 Dec 28, 2022
Home Assistant integration for spanish electrical data providers (e.g., datadis)

homeassistant-edata Esta integración para Home Assistant te permite seguir de un vistazo tus consumos y máximas potencias alcanzadas. Para ello, se ap

VMG 163 Jan 05, 2023
GCP Scripts and API Client Toolss

GCP Scripts and API Client Toolss Script Authentication The scripts and CLI assume GCP Application Default Credentials are set. Credentials can be set

3 Feb 21, 2022
Example platform plugin that fixes fentry calls in Binja

Example Binja Platform Plugin This is an example Binja platform plugin which fixes up linux kernel module calls to __fentry__. __fentry__ is the linux

_yrp 2 Oct 07, 2021
Monochrome's API, implemented with Deta Base and Deta Drive.

Monochrome Monochrome's API, implemented with Deta Base and Deta Drive. Create a free account on Deta to test this out! Most users will prefer the Mon

Monochrome 5 Sep 22, 2022
Simple Kahoot Botter.

Kahoot A simple Botter made in Python 3 for Kahoot.com. Also sorry for the shitty code lol. How to Run You need Python 3 installed on your device. Aft

7 Jun 29, 2022
A Notifier Program that Notifies you to relax your eyes Every 15 Minutes👀

Every 15 Minutes is an application that is used to Notify you to Relax your eyes Every 15 Minutes, This is fully made with Python and also with the us

FSP Gang s' Admin 1 Nov 03, 2021
Ballcone is a fast and lightweight server-side Web analytics solution.

Ballcone Ballcone is a fast and lightweight server-side Web analytics solution. It requires no JavaScript on your website. Screenshots Design Goals Si

Dmitry Ustalov 49 Dec 11, 2022
Small Arrow Vortex clipboard processing library

Description Small Arrow Vortex clipboard processing library. Install You can install this library from PyPI with pip install av-clipboard-lib or compi

Delta Epsilon 1 Dec 18, 2021
tool to automate exploitation of android degubg bridge vulnerability

DISCLAIMER DISCLAIMER: ANY MALICIOUS USE OF THE CONTENTS FROM THIS ARTICLE WILL NOT HOLD THE AUTHOR RESPONSIBLE HE CONTENTS ARE SOLELY FOR EDUCATIONAL

6 Feb 12, 2022
The program calculates the BMI of people

Programmieren Einleitung: Das Programm berechnet den BMI von Menschen. Es ist sehr einfach zu handhaben, so können alle Menschen ihren BMI berechnen.

2 Dec 16, 2021