(addon) Better Displacement Idea

I am not very literate in python as of yet. However, I have an idea for a better displacement method. If anyone would like to work on this, with or without me, I would be happy to see what can come of this.

The idea came to me after watching a video tutorial on how normal map data is applied to 2D surfaces. So, I started thinking of how the same principal could be applied to displacements.

We already have access to baking displacement maps from modeled geometry. This data is all in grey scale values that give us the baked shapes and relative height values. This should give us enough data to apply to a surface directly, correct?
Well, unfortunately, the answer is no.

We have to UV unwrap it and subdivide it. I am not complaining about the UV unwrapping because that is standard to apply any data map to a surface, but what I do have issues with is the subdivisions that are required to even approximate the same quality of the original geometry. That and there are a lot of limitations on what shapes and angles can be applied in the current displacement method.

I have taken some time to think about what data would be needed in applying this new method and what tools we have available that would help in making this possible.

If we start with our 2D surface, UV unwrap it, and apply our chosen displacement map in the UV editor, that is all a good start, but to apply the displaced geometry to our surface ‘WITHOUT’ subdivisions, yes you read that right!

Now, If we apply a bounding box around our surface to use as a displacement volume control and add mesh vertices data to the displacement map from our original mesh geometry, we can duplicate our original mesh data exactly.

I would suggest using color values for vertices data in the displacement map with blue->white, green->grey, and
red->black correspondences. Adding Ceiling, Floor, and Basement values within the bounding box, and the reason for this is because 50% grey in the displacement map is the normal displacement base value, while white = positive displacement and black = negative displacement. In this we can then place our surface half way between the top and bottom of the bounding box as a starting point equal to the 50% grey displacement base value.

The Ceiling control would allow to cap the top level of the displacement while the Basement control would fill the negative displacement to a desired level, and the floor control would allow for two things:

  1. The level of the floor would allow for changing the negative to positive displacement ratio.

  2. The thickness of the floor would allow for changing how much of the short or shallow displacement will be applied.

Finally, limiting the scaling of the bounding box to the ‘Normal’ axis of the surface would allow for making the displacement more pronounced or subdued.

Woohh! That is a lot to type… Yet, I am hoping that someone out there in the blender community is just as concerned about this is and will be just as excited as I am to get this implemented, and hopefully they know a lot more about scripting than I do to get this add-on started.

I would love to be involved in this project, and while I am trying to learn, it will take me quite a bit to get up to speed to be of much help in the heavy lifting on this. So, for now the best I can do is to get this out there and let someone else run with it. That is if they are interested.

Thank you all for listening to me rant and I look forward to comments.

It seems I forgot a crucial point. Using the vertices data from the ‘NEW’ displacement map the displacement geometry should be applied as floating geometry since the 2D surface will still show as being flat in EDIT MODE, but will show the new applied geometry in OBJECT MODE, or SCULPT MODE, etc.

P.S. Maybe if this does get picked up it will eventually evolve to include sculpting of the displacement meshes and floor tilting.
Just a couple more things that popped into my head. :slight_smile:

Please comment if anyone sees flaws in my logic or has any ideas to add. There has already been quite a few who have looked at this thread already and I’m already getting nervous about how it is being received without any input from others.

Ok, so, since I have not received any feedback from anyone that has looked at this thread, I have begun the arduous prospect of learning what will be needed to implement my idea.

I have learned so far that modifiers are not scriptable with python and that to make changes in this area requires CMake, thank goodness it is open source as well.

I currently feel like I am so far under water that I can’t see the sun light through the surf. SIGH

Anyone willing to offer me a glass of water?

I finally got the source code, I believe it is for the 2.7 build, but anyway, now I am looking through the code and trying to figure out what elements I need to implement in the displace code and also wondering if there is a separate code for the displacement bake. I guess I will figure it out since no one is saying anything helpful or otherwise.

Krazy, Post some diagrams/mock ups to try to give people a better idea of what your project/idea is. People are probably just not exactly sure what it is you are after and people naturally don’t do work to try and find out how to do more work. Admittedly, I don’t know anything about UV or Displacement maps so maybe it’s obvious to others. You may get more bites on your fishing line with tastier bait.


After figuring out that the modifiers are programmed in C++, I am now going through the slow process of learning how to program in C++ from the very beginning. Currently I have not taken the time to make any visual aides to show everyone what I mean to accomplish with this change, but maybe I will get something posted in the next few days that will give a better perspective.

Hahahaha, I would like to thank anyone who has been watching this thread who is in the know for letting me figure out on my own that I am an idiot. The modifiers are not programmed in C++, but rather C. (I was wondering why they were listed as C Source Files rather than .cpp files.)

So my last few days hopefully have not been a waste while I have been learning C++. (I do figure that it will come in handy later.)

As for the project itself… Well, let’s just say that I have less hair and what hair I have left is turning grey!