From BlenderWiki

Jump to: navigation, search
Note: This is an archived version of the Blender Developer Wiki. The current and active wiki is available on wiki.blender.org.

Weekly Report #10 - Silhouette Operator

In the 10th week I continued to develop the transition method to connect a drawn Silhouette to existing geometry. Turns out, this is a real challenge. I stumbled over a couple of problems. But first, let’s talk about

What has been done in this week:

  • Implement an algorithm to calculate the edge-ring which is separating the vertices which need to be cut from the ones which need to stay.
  • Ordering of those rings
  • Generate bounding-boxes for the rings
  • Find intersecting rings which are the result of cross-node holes
  • Calculate the shared parts of those rings

Problems, Questions, Challenges

First things first: After this week i can say that the task to connect the parts is harder than expected. I am now pretty sure I will not be able to deliver a bug-free, tested, documented operator with the transition option within the GSoC timeframe. It is more complex than expected because of a couple of reasons:

The Mesh Problem

Currently I have used almost entirely the basic mesh structure of blender. Within sculpting mode everything is handled by manipulating the mesh of the sculpt. Everything, with exception of the dyntopo mode, is limited to non-destructive/non-constructive mesh edits. Vertices are only deformed. With the silhouette operator I need to create new vertices/edges/loops/polys (v/e/l/p). Till now this has been no problem since just appending new data to the v/e/l/p arrays is easy. Maybe it is just because I misunderstand the customdata structure, but deleting and rearranging the v/e/l/p is more problematic. Additional data like vertex color, shape keys etc. is dependent on consistent v/e/l/p memory. There is almost no functions in the codebase to manipulate the base mesh structure. I started creating a remove vertices function which is supposed to delete vertices and connected edges etc. adjacent to it. I started to create redirection tables to redirect all the pointers. Polys -> Loops -> Edges -> Vertices. Even though this is possible, it breaks references to it from other sources. I postponed this task and wanted to get some feedback on these questions first.

The Orthographic Matrix

Earlier this week i sent a question in this mailing list. How do i get the orthographic projection matrix in perspective mode? I still don’t know how to do it, so feel free to have a look at it! What is the time-plan? Besides the bigger problems like the mesh problem the whole task has several challenges. Most of which i know how to tackle but need a lot of time. A random number of arbitrary shaped intersections between random shapes with various pixel-densities need to be transitioned. It is hard to say, but my optimistic guess is: If there is a good method for the mesh problem, I can get a running version with transitions in 3 weeks from now. Therefore there will be almost no time for testing, bug fixing or documentation.

I think it is important to discuss now, so let me know any thoughts on this!


Besides this, ErickBlender made a great video demonstrating the use of the silhouette operator! I think it shows very well how the operator is intended to be used. Generating a quick foundation for later refinement with the other sculpting tools. So have a look: https://www.youtube.com/watch?v=VdIV5Mb2XX4&feature=youtu.be