Exceptionally I'm posting a blog post that doesn't deal with python scripting, but it's important.
Recently the fraud 'Seth Avery' has been very active in re-branding Blender. He's selling the free and open-source programme Blender with different names like 3Dmagix and IllusionMage. Even though it is legal to redistribute Blender, it is illegal to copy artwork and and credits. His offers are an absolute scam.
He has gone to great lengths to ensure a good google ranking, so it's more difficult for people to find out he's a fraud. Hence this post to expose his scam.
To read more about this, read the official Blender press release.
And for reference purposes: 3DMagix, 3DMagixPro, IllusionMage, scam
Wednesday, February 2, 2011
Wednesday, January 12, 2011
LoopTools 3.0 - Deadline
Many people have been asking about a LoopTools script for Blender 2.5. So I'm going to repost something here I just wrote at BlenderArtists:
Development on LoopTools for Blender 2.5x has been way too slow, so I'm going to set myself a deadline: February 20th 2011.
What to expect: an add-on that works correctly in Blender 2.56a (or a more recent version) and contains the basic functionality of the LoopTools script for Blender 2.4.
If you wish to help development you could support me by sending me blender models on which you would use one of the LoopTools. I use these models to test the script for speed and bugs (and sometimes for screenshots in documentation). As I'm not much of a modeller this helps me to test the script on real-world uses, instead of the subdivided planes and monkeys I usually use. Donations are of course also welcome.
You can simply add a comment below with a link to the model, or if you want to keep the models more private send them to me in an e-mail.
Development on LoopTools for Blender 2.5x has been way too slow, so I'm going to set myself a deadline: February 20th 2011.
What to expect: an add-on that works correctly in Blender 2.56a (or a more recent version) and contains the basic functionality of the LoopTools script for Blender 2.4.
If you wish to help development you could support me by sending me blender models on which you would use one of the LoopTools. I use these models to test the script for speed and bugs (and sometimes for screenshots in documentation). As I'm not much of a modeller this helps me to test the script on real-world uses, instead of the subdivided planes and monkeys I usually use. Donations are of course also welcome.
You can simply add a comment below with a link to the model, or if you want to keep the models more private send them to me in an e-mail.
Thursday, November 11, 2010
Bridge
Today I released a new version of the Bridge script, which brings some new features to the old script. You can read the information for artists on the bridge-page of my website, or visit the BlenderArtists thread. This blogpost however is going to take a deeper look into the code behind the changes. More specifically I'm going to discuss the Cubic Interpolation.
Cubic Interpolation
One of the new features in the script is an interpolation type called 'cubic'. This makes use of natural cubic splines, the same method I used in the LoopTools script.As you can see in the image on the left this results in fluid curves which can be very useful for organic modelling. The problem with natural cubic curves though is that you need more than two input coordinates.
The first two coordinates that are used are pretty straightforward. They are the location coordinates of the vertices that need to be connected to each other. To calculate the spline between them we also need to have two additional input coordinates, one on each side of the vertices. In order to make this a bit more understandable let's take a look at the following example.
The example input is shown in the top image on the right. V1 and V2 are the input vertices. Between them I've drawn the result we wish to get; the spline. In order to get it we need the two additional input points: A1 and A2.
The first step in obtaining A1 and A2 are calculating the tangent vectors of all the edges in the loops. To do this you take the Face Normal vector (blue) and calculate the cross product with the edge vector (red). This gives the Cross vector (green). There are actually two Cross vectors, one facing from the edge to the face, and one facing from the edge to the opposite loop (displayed in the image). We can simple check which one we got by adding the vector to the edge-center and see if we're getting closer to the face center or further away from it. We negate the vector as necessary and then normalize it.
The last step is to calculate the Average vector for each vertex. Simply take the Cross vectors from the edges connected to it and take the average. Adding this Average vector to the location of V1 gives us A1. Note: the size of the Average vector is scaled to be the same as the distance between V1 and V2 and multiplied by the strength factor as given by the artist.
This method works well for loops that are connected to faces, but that isn't always the case. For loops that aren't connected to faces there are two changes. First of all, there is no face normal. An alternative is calculated by taking the cross product of the edge vector and the vector connecting V1 and V2. The second difference is that we calculate the spline per vector, instead of first calculating all Cross vectors. This is because an edge is connected to 2 vertices, and both might be connected to different vertices in the other loop (which is used for calculating the alternative to the face normal). The rest of the procedure is more or less the same.
Cubic Interpolation
One of the new features in the script is an interpolation type called 'cubic'. This makes use of natural cubic splines, the same method I used in the LoopTools script.As you can see in the image on the left this results in fluid curves which can be very useful for organic modelling. The problem with natural cubic curves though is that you need more than two input coordinates.
The first two coordinates that are used are pretty straightforward. They are the location coordinates of the vertices that need to be connected to each other. To calculate the spline between them we also need to have two additional input coordinates, one on each side of the vertices. In order to make this a bit more understandable let's take a look at the following example.
The example input is shown in the top image on the right. V1 and V2 are the input vertices. Between them I've drawn the result we wish to get; the spline. In order to get it we need the two additional input points: A1 and A2.
The first step in obtaining A1 and A2 are calculating the tangent vectors of all the edges in the loops. To do this you take the Face Normal vector (blue) and calculate the cross product with the edge vector (red). This gives the Cross vector (green). There are actually two Cross vectors, one facing from the edge to the face, and one facing from the edge to the opposite loop (displayed in the image). We can simple check which one we got by adding the vector to the edge-center and see if we're getting closer to the face center or further away from it. We negate the vector as necessary and then normalize it.
The last step is to calculate the Average vector for each vertex. Simply take the Cross vectors from the edges connected to it and take the average. Adding this Average vector to the location of V1 gives us A1. Note: the size of the Average vector is scaled to be the same as the distance between V1 and V2 and multiplied by the strength factor as given by the artist.
This method works well for loops that are connected to faces, but that isn't always the case. For loops that aren't connected to faces there are two changes. First of all, there is no face normal. An alternative is calculated by taking the cross product of the edge vector and the vector connecting V1 and V2. The second difference is that we calculate the spline per vector, instead of first calculating all Cross vectors. This is because an edge is connected to 2 vertices, and both might be connected to different vertices in the other loop (which is used for calculating the alternative to the face normal). The rest of the procedure is more or less the same.
Labels:
blender 2.5,
bridge,
cubic interpolation,
loft,
script,
update
Tuesday, November 9, 2010
Site update
Perhaps a bit late, but I finally found the time to update my website. No change in the lay-out, but there are some changes in the structure. It now has a clear division between scripts for Blender 2.4 and scripts for Blender 2.5. I've also written an instruction page on how to use Add-Ons in 2.5.
Besides this structural change I've also created pages for two of the scripts I've written in the past months. The first is Index Visualizer, which I discussed in the previous post.
The second script is Icon Display, which shows all the icons that are available in Blender. The code behind this functionality is interesting in that it calls the source-file in which all icons are defined. It then parses this file and displays the icons using the names in the file. Further point of interest is the dynamic creation of operators. This might look pretty easy, but actually has some restrictions. You can't use setattr() and can't create them from within the register() function. I've written a full explanation of this, including sample code, on the blender wiki.
For normal Blender users the Icon Display script is of course not very interesting, but for script-developers looking for a usable icon (or the name of a specific one) it can be pretty useful.
Besides this structural change I've also created pages for two of the scripts I've written in the past months. The first is Index Visualizer, which I discussed in the previous post.
The second script is Icon Display, which shows all the icons that are available in Blender. The code behind this functionality is interesting in that it calls the source-file in which all icons are defined. It then parses this file and displays the icons using the names in the file. Further point of interest is the dynamic creation of operators. This might look pretty easy, but actually has some restrictions. You can't use setattr() and can't create them from within the register() function. I've written a full explanation of this, including sample code, on the blender wiki.
For normal Blender users the Icon Display script is of course not very interesting, but for script-developers looking for a usable icon (or the name of a specific one) it can be pretty useful.
Monday, May 3, 2010
Index Visualiser for Blender 2.5
A little over a year ago I write a convenient little code snippet to display the indices of vertices, edges and faces in the 3d-view of Blender. This is a big help in developing script that create or alter mesh topology, as you can now get visual feedback on what you're doing.
It was pretty clear to me that I had to port it to Blender 2.5 before I could do any serious work on scripts like LoopTools. So after a commit made it possible to draw in the 3d viewport using python, I ported it right away.
That was two months ago, so what's new? The script has been added to Blender Contrib. This means that it is kept up to date with all changes in Blender and can even be automatically included when you build Blender yourself. There have also been various changes to the blender api, for instance Mathutils to mathutils, and Vector() to Vector((),xyz) The script has been updated to reflect those changes. Big thanks to all the people at the Blender extensions project who helped with this.
Let me end with some links:
- Snippet at my website
- Direct download link of script (automatically gives you the most recent version)
- Wiki documentation
- Discussion thread at BlenderArtists
Subscribe to:
Posts (Atom)