Showing posts with label Substance Painter. Show all posts
Showing posts with label Substance Painter. Show all posts

IDMapper add-on for Blender is now free

 In a previous article I mentioned that I stopped publishing add-ons on blender market because basically I was done with it it: I didn't earn enough to warrant the amount of effort that goes into maintaining and supporting add-ons.

However, there is still quite some interest in some of the add-ons, and so I decided to open source some of the add-ons and make them available for free. The first one was Snap! then it was Weightlifters turn, my very first add-on published on BlenderMarket (now Superhive), back in 2014 (!), and now IDMapper.

Technically IDMapper already was open source, at least the source code was, but now I'm also open sourcing the manual, and that means that you can download the source from this GitHub repository (the releases section), and the manual is available too.


This repository is still a work in progress, but the code will run on 4.4. For now, simply download weightlifter.py and use the install from filesystem in the add-ons section. Then read the manual!


To give you some idea of its capabilities, there is a video on YouTube.



IDMapper add-on verified for Blender 4.1

  


I am pleased to announce that IDMapper is now verified for Blender 4.1. 

It has been tested against version 4.1.1 of April 16, 2024, and no changes were needed.

Blender 4.0 introduced quite a few breaking changes, so this version is not backwards compatible with 3.x

Although no new functionality was introduced in this release, please be aware of the following:

  • IDMapper can currently not work with facemaps, because they are no longer supported in 4.0. This may change in the future (hopefully, see this discussion) and if possible I will try to get this back into IDMapper. Meanwhile, I did create a small, free add-on to make selecting faces from facemaps possible in 4.0 which may be useful in some workflows.
  • Color picking in Face Paint Mode (with the S-key) is no longer restricted to the 3d-View area, so colors can be picked from anywhere in the Blender application (although still not outside of it).

IDMapper simplifies creation and editing of vertex color layers that can be used as ID-maps in texturing software like Substance Painter or Quixel. It aims to reduce the time it takes to create an ID-map significantly, especially for complex hard surface models. It uses powerful heuristics to create an ID-map from scratch and lets you interactively adjust the results. It offers options to use existing information, like uv-seams, but can also intelligently assign the same color to similar mesh parts. 

The new version is available on BlenderMarket.

This previous article showcases some of IDMapper's functionality.

IDMapper add-on ported to Blender 4.0

 


I am pleased to announce that IDMapper is now available for Blender 4.0. 

It has been tested against the daily of November 3rd, but I expect no changes will be needed for the 4.0 release candidate or the final release.

Blender 4.0 introduced quite a few breaking changes, so this version is not backwards compatible with 3.x

Although no new functionality was introduced in this release, please be aware of the following:

  • IDMapper can currently not work with facemaps, because they are no longer supported in 4.0. This may change in the future (hopefully, see this discussion) and if possible I will try to get this back into IDMapper. Meanwhile, I did create a small, free add-on to make selecting faces from facemaps possible in 4.0 which may be useful in some workflows.
  • Color picking in Face Paint Mode (with the S-key) is no longer restricted to the 3d-View area, so colors can be picked from anywhere in the Blender application (although still not outside of it).

IDMapper simplifies creation and editing of vertex color layers that can be used as ID-maps in texturing software like Substance Painter or Quixel. It aims to reduce the time it takes to create an ID-map significantly, especially for complex hard surface models. It uses powerful heuristics to create an ID-map from scratch and lets you interactively adjust the results. It offers options to use existing information, like uv-seams, but can also intelligently assign the same color to similar mesh parts. 

The new version is available on BlenderMarket.

This previous article showcases some of IDMapper's functionality.

IDMapper ported to Blender 3.6 LTS

IDMapper has been ported to Blender 3.6 LTS

I am happy to announce that I have updated IDMapper to work with Blender 3.6.

It sports a few bug-fixes and internal changes to work with the newer Blender versions, and also has two bits of new functionality:

  • you can change the color of the help text shown in face paint mode, to better adapt it to your theme (in the add-on preferences), and
  • the IDMapper operator is now applied to all selected objects, instead of just to the active object. This ensures that assigned colors are unique across those objects. If you prefer the old behavior you can select that in the add-on preferences

I have also created a new demo video that shows the basic workflow when using the add-on in Blender 3.6



IDMapper simplifies creation and editing of vertex color layers that can be used as ID-maps in texturing software like Substance Painter or Quixel. It aims to reduce the time it takes to create an ID-map significantly, especially for complex hard surface models. It uses powerful heuristics to create an ID-map from scratch and lets you interactively adjust the results. It offers options to use existing information, like uv-seams, but can also intelligently assign the same color to similar mesh parts. 

The new version is available on BlenderMarket.

IDMapper ported to Blender 3.3 beta

IDMapper has been ported to Blender 3.3 beta

That may sound a bit premature, but I am confident no changes will be needed for the official release of Blender 3.3. However, if necessary we update the add-on again of course.

Note that this version will not run on older versions of Blender.

 

IDMapper simplifies creation and editing of vertex color layers that can be used as ID-maps in texturing software like Substance Painter or Quixel. It aims to reduce the time it takes to create an ID-map significantly, especially for complex hard surface models. It uses powerful heuristics to create an ID-map from scratch and lets you interactively adjust the results. It offers options to use existing information, like uv-seams, but can also intelligently assign the same color to similar mesh parts. 

The new version is available on BlenderMarket.

IDMapper just got support for face-maps

IDMapper just got support for face-maps

It is now possible to assign vertex colors based on the face-map membership of faces.


If your workflow involves face-maps already, it is now super easy to create a vertex color layer (ID-map) based on those face-maps.

IDMapper simplifies creation and editing of vertex color layers that can be used as ID-maps in texturing software like Substance Painter or Quixel. It aims to reduce the time it takes to create an ID-map significantly, especially for complex hard surface models. It uses powerful heuristics to create an ID-map from scratch and lets you interactively adjust the results. It offers options to use existing information, like uv-seams, but can also intelligently assign the same color to similar mesh parts. 

The new version is available on BlenderMarket.

IDMapper ported to Blender 2.80


IDMapper has now been ported to Blender 2.80 and is available from BlenderMarket.

There were a fair number of bumps along the road with regard to some parts of the Python API so be aware that Blender 2.80 is still in beta and you might still encounter some difficulties!

NodeSet Pro ported to Blender 2.80


NodeSet Pro has now been ported to Blender 2.80 and is available from BlenderMarket.
Porting this add-on has been fairly easy but be aware that Blender 2.80 is still in beta so you might encounter difficulties!

Blender add-on: TextureWatch

I am happy to announce that yesterday I published my new TextureWatch add-on on Blendermarket.

As illustrated in the video, TextureWatch is a small add-on to automatically synchronize textures used in your .blend file if they change on disk. This simplifies working with external programs like Gimp or Substance Painter because TextureWatch can automatically update those textures when you save your files without the need to go through all images inside Blender one by one and selecting reload. This saves time as well as guarantees consistency.


If you find this useful you might want to take a look at my BlenderMarket store.

NodeSet Pro: 2018 Spring Edition

A month ago I introduced the NodeSet Pro add-on on BlenderMarket, an add-on that allows you to quickly create complete node setups from texture sets. In the new Spring 2018 edition I have added significant enhancements, like the options to manipulate collections of textures sets, saving and loading of preference presets and some smaller features like a color ramp node to control the roughness and options to specify your preferred projection mode (when for example you want to work with blended box mapping instead of UV-mapped meshes).

The new features are highlighted in this short video:

The most visible addition is a panel in the tool region that lets you manage collections of textures sets:

If you have additional suggestions to enhance the usability even more, don't hesitate to contact me.

NodeSet Pro available on BlenderMarket

I am pleased to announce that NodeSet Pro is available from my BlenderMarket store.

NodeSet Pro is based on my original free NodeSet add-on published in 2017 but was completely rewritten to ease maintenance. The configuration options and functionality where also greatly enhanced, notably with possibilities to work with custom, packed maps, connect to arbitrary nodegroups instead of just the principled shader, add UVMap nodes and Flip Normal nodes and more. Basically you should be able to configure it to your specific workflow needs, regardless what texturing software you are using.

NodeSet Pro will reduce material creation to a few simple clicks while still allowing you to fully tweak the resulting material. Out of the box it will work with texture sets created with Substance Painter's Metallic/Roughness work flow and its Specular/Gloss workflow but almost every node generation feature can be tweaked to fit your specific workflow and texturing software.

Instead of importing textures like basecolor, normalmap, roughness, etc. one by one, with NodeSet Pro you will only need to select a single texture and textures with the same base name will be loaded as well. NodeSet Pro will also apply non-color data options to texture maps that need this, create normal map and bump nodes and wire everything up to a shader.

This shader can be Blender's principled shader

or any other shader node group.

You can even connect any height map automatically to the micro displacement socket.

You can use custom maps that for example pack different maps like height, roughness and metallic into the channels of a single color map

I you want to know more, watch the video or check out my BlenderMarket store.

Nodeset: better heightmap adjustment

NodeSet is now also available in a Pro version. Read all about it in this article or check out my BlenderMarket shop if you are interested.

A new version of Nodeset is available that adds a subtract node if you use the option to link a heightmap to the displacement output.
The reason is that most often the values in a heightmap are between 0 and 1, which will result in a bloated mesh unless you subtract 0.5 first.

Availability

The current version (201801031529) is available for download (right click and save as ...) from my GitHub repository.

Previous nodeset articles

I wrote several articles on this tiny add-on that you might want to read. They are (newest first):

IDMapper: December 2017 release available on Blender Market

I have released an updated version of the IDMapper add-on to Blender Market.

New features

It features some cosmetic changes but more importantly it hosts a ton of new features developed based on user feedback, including:
Baking
you can now directly bake a vertex color layer to an image without the cumbersome route of setting up materials, emission shaders and dummy images necessary in the regular way. Just 1-click and a couple of seconds later you'ĺl have you color id-map as an image in the UV-image editor
Vertex groups to vertex colors
there is now an option to assign unique vertex colors based on vertex group membership of vertices. This 1-click option lets you quickly convert vertex groups to vertex colors
Create materials based on vertex colors
this option creates a material for each unique vertex color and assigns the vertices with this color to the material.
Better color list management
If you use a predefined list of colors to use in id-maps across different models the color list lets you manage these colors. It is now possible to add items to this list for any vertex color nor yet present, simplifying the maintenance of those lists
And of course there are lots of smaller improvements too.

The new features are highlighted in this video:

This video is part of a small playlist with additional tutorials:

Availability

IDMapper is available in my Blender Market shop:
https://blendermarket.com/creators/varkenvarken

Nodeset: tiny enhancement

NodeSet is now also available in a Pro version. Read all about it in this article or check out my BlenderMarket shop if you are interested.

A new version of nodeset is available that includes .jpg in the default list of extensions.

Availability

The current version (201712020811) is available for download (right click and save as ...) from my GitHub repository.

Previous nodeset articles

I wrote several articles on this tiny add-on that you might want to read. They are (newest first):

Version 20170918 of IDMapper available on Blender Market

I have released an update version of the IDMapper add-on to Blender Market.

In the video I demo the new functionality and I have listed the release notes at the end of this article.

If you would like more information on all the functionality, have a look at this article. A complete workflow demonstration is available in this demo video.


Release notes

Version 20170918

  • Add ID Color List management
  • it is now possible to load, manage and save named lists of colors and to pick colors from this list when working in Face Paint mode. This is convenient if your studio uses smart materials for example and you have a list of predefined ID map colors you want to use for many different assets. Unlike Blender's built-in palettes, these colors have names, can be searched and sorted and loaded/saved as .csv files.
  • Add color picking outside select object in Face Paint mode
  • Number of undo levels in Face Paint mode is now configurable

New version of IDMapper available on Blender Market

I have released an update version of the IDMapper add-on to Blender Market.

In the video I demo the new functionality and I have listed the release notes at the end of this article.

If you would like more information on all the functionality, have a look at this article. A complete workflow demonstration is available in this demo video.


Release notes

Version 20170827


  • Add detection of sharp edges
  • When creating the initial ID map you now have the option to respect any edges marked as sharp as region boundaries
  • Help display in face paint mode 
  • All available keyboard shortcuts in Face Paint Mode are now shown in the lower left corner for easy reference. This can be toggled with the H-key
  • Respect sharp faces when smoothing, expanding or shrinking a region
  • When smoothing, expanding are shrinking an area in Face Paint Mode it is now possible to respect any sharp edges or uv-seams
  • Improved navigation
  • Most keys on the numpad now work as expected so panning and orbiting is now possible in Face Paint Mode
  • Bug fix: paint selected faces now sets undo stack
  • Nodeset: additional features and clean-up

    NodeSet is now also available in a Pro version. Read all about it in this article or check out my BlenderMarket shop if you are interested.

    In a reply on a previous post monari suggested some additional functionality and in the true spirit of open source even supplied a new implementation.

    So in this version I incorporated most of his new code: if you now import a texture set with an associated shader you get a height map correctly wired to a normal node with the help of a bump node.

    In addition I added the option to create a nodeset that is suitable for use with microdisplacement, i.e. that wires the height map with a multiply to the displacement socket of the material output (the option is available on the left side of the fileselector).



    The two variants of the node setup are shown below:


    As usual the add-on is available from my GitHub repository.

    Nodeset: bugfix and small new feature

    NodeSet is now also available in a Pro version. Read all about it in this article or check out my BlenderMarket shop if you are interested.


    The nodeset add-on I talked about in a previous article had a small bug: if your texture set was something different than a collection of .png files the extra files that should be loaded automatically were in fact not loaded. This is fixed in the latest version (201707011445)

    Code availability

    The change is already committed in the GitHub repository. (right click the link to download).

    New feature

    Because of a bug in Blender a material with a normal map node will show up as all black if you use the experimental adaptive subdivision / micro polygon displacement. If you change the normal maps space from tangent to object this does not happen so I added a user preferences setting to do this automatically.

    Converting Blender Filmic LUTs for use in Substance Painter

    with the new Filmic Blender color management options getting a lot of attention I wanted to get the exact same looks when creating textures in Substance Painter.
    Substance Painter supports LUTs in so called 3d format which are stored in .exr files. So our challenge is twofold: convert the bundled Blender Filmic LUTs to this format and of course to get results in Substance that match Blender as closely as possible.
    The results of 3 of the filmic LUTs are compared side by side in the image below:

    I made this comparison collage by keeping parameters like exposure (1) and gamma (also 1) the same in both Blender and Substance Painter and then took screenshots. I glued the screenshots together in GIMP. This way I could see all images on the same monitor. This is important because if the applied profiles are the same and both displays are sRGB, two monitors will still differ in their color response and it is fiendishly difficult to calibrate them (unless you have a very expensive monitor with the associated color calibration kit). My own monitors are not even the same brand so it is an easy trap to fall into if you compare images on two different monitors side by side.
    Anyway, even this way when you have a close look the images are close in tone but not 100% identical and I am not sure what is causing this. There might be slight differences in camera aperture, focal blur and multiple importance sampling of the environment and of course Cycles' ray model is not the same as Iray's Substance painting mode renderer. Still, I think this is pretty close and useful to compare textures in Substance under different looks before transferring them to Blender.

    How the LUTs were generated

    I used the Python bindings of the OpenColorIO and OpenImageIO libraries to create a small script (code below). These are in fact the libraries Blender uses to work with color conversions.

    The script takes a linear to linear transform that is encoded as an .exr image and creates a new .exr for each 'Look' in Blender's OCIO config file that is defined in the 'Filmic Log' process space.
    The docs for the Python bindings for both libraries are not an easy read and the APIs have some small inconsistencies so it took some time to get it working. The code is far from beautiful but i commented the relevant parts. I am open to any critique that can help to improve the transforms.
    Note that the code is not plug and play and i have no intention of improving that :-)

    The Substance LUTs

    They can be downloaded from my GitHub repository. They are bundled in one .zip file and should be unpacked before importing them in Substance Painter.

    The code

    #export LD_LIBRARY_PATH=/home/michel/ocio/lib
    #export OCIO=/home/michel/Downloads/blender-2.78-b94a433ca34-linux-glibc219-x86_64/2.78/datafiles/colormanagement/config.ocio
    #python 2.7
    #
    # run as
    # python transformlook.py
    #
    # expects linear_to_linear.exr in the current directory and will write the transform there too
    
    import OpenImageIO as OIIO  #  already installed using Ubuntu pkg manager
    from sys import path
    from array import array
    path.append('/home/michel/ocio/lib/python2.7/site-packages/')
    import PyOpenColorIO as OCIO
    
    config = OCIO.GetCurrentConfig()
    
    for look in config.getLooks():
     if look.getProcessSpace() == 'Filmic Log':
      lookname = look.getName()
      print(lookname)
    
      transform = OCIO.DisplayTransform()
      transform.setInputColorSpaceName(OCIO.Constants.ROLE_SCENE_LINEAR)
      transform.setView('Filmic')
      transform.setLooksOverrideEnabled(True)
      transform.setLooksOverride(lookname)
      transform.setDisplay('sRGB')
      processor = config.getProcessor(transform)
    
      # indentiy transform from https://support.allegorithmic.com/documentation/display/SPDOC/Color+Profile
      img = OIIO.ImageInput.open('linear_to_linear.exr')
      spec = img.spec()
      spec.set_format(OIIO.FLOAT) # for some reason this is not extracted from the image
      pixels = img.read_image()
      img.close()
    
      outfile = lookname + '.exr'
      transformedpixels = processor.applyRGB(pixels)
      imgout = OIIO.ImageOutput.create(outfile)
      ok=imgout.open(outfile, spec, OIIO.Create)
      if not ok:
       print(OIIO.geterror())
       break
      # ImageInput.read_image() returns a list of floats, and applyRGB(0 returns one too, but ImgOutput.write_image
      # expects an array of float and will die when passed a list. Bit inconsistent I think.
      a = array('d')
      a.fromlist(transformedpixels)
      imgout.write_image(a)
      imgout.close()
    
    
    

    Nodeset: add a principled shader

    NodeSet is now also available in a Pro version. Read all about it in this article or check out my BlenderMarket shop if you are interested.

    Even though there are better paid and free PBR nodegroups/shaders available for Blender (for example from Jeffrey Hepburn or Remington Graphics) the new Principled BSDF (a.k.a. Disney shader or PBR shader) will no doubt prove popular with Blenderheads because it is so simple to use and gives decent results.

    So I added an option to add this shader along with all the imported texture sets as well as a normal map node, basically giving you a one-click (almost) option to add a PBR material based on a set of textures from your favorite texturing tool. The new functionality is a available from Add -> Texture menu in the Node editor and sits alongside the original Set of images entry:

    The resulting node setup (after selecting a set of textures) will look like this:
    Note that this will of course only work with the new Blender 2.79 or with a recent daily build. If the Principled BSDF is not available in your version of Blender it will simply be omitted.

    Code availability

    The latest version of the code (201706251223) is available on GitHub (right click and select save as ... , then in Blender File -> user preferences ... -> Add-ons -> Install from file .... Don't forget to remove the previously installed version first!)

    A short video demo:

    Previous articles

    Previous articles about the Nodeset add-on:
    NODESET: IMPORT SUBSTANCE PAINTER TEXTURES INTO BLENDER
    NODESET: TINY UPDATE MIGHT SAVE EVEN SOME MORE TIME
    NODESET: SUPPORT FOR AMBIENT OCCLUSION MAPS
    NODESET: MORE FLEXIBILITY