Thursday, November 24, 2011

Spiky objects

Inspired with the Chrysalis of 'Indian fritillary', set the spikes on the object.




Monday, November 14, 2011

Colorize test.

Of course, I like 'only white' objects, but colorizing is a one of the options. Studying it is worthy for me.

[ Test 1. Simple coloring test ]

[ Test 2. Gradated coloring test ]

Wednesday, November 9, 2011

More control.

I add another parameter for side bending the body.
It's like an ancient life as 'Hallucigenia'.  




Reference from wiki: http://goo.gl/QG7gI

Sunday, November 6, 2011

GMP2

I met Dolf at Amsterdam, he is a really nice guy. I also saw his works at Affordable Art Fair, that was very cool. His works are Colored with 3D print.
So, I think next plans for GMP are these.


  1. Asymmetric Shape
  2. Colored by vertex color
I tried (1.) with rotating the extruded face along z-axis. The result is this.


It's seems [weird] but dynamic shape. 

Tuesday, October 18, 2011

55 objects!

Now, there are 55 3D printed objects on my table. So interesting. These objects were created from June, July, August, and September parameters. If I could make more interesting object from October parameters, I'll add some more.


Tuesday, October 11, 2011

Presentation!

I got an e-mail from Ton Roosendaal about coming Blender Conference 2011. I'll attend it. Ton said to me, show some my art works at the Conference. Well, this is a very good chance to show the GMP works in the world. Now my presentation is booked on Saturday 17:00, at the theater!


>Schedule of the theater.

Sunday, September 25, 2011

Composite Nodes

To make the non photorealistic images of catalog, I used the composite node of Blender.
Here is the node.



Wednesday, September 21, 2011

Variations and Generations

I'm thinking how to control the object 'Generation'. In my system, I got 35 objects at once. (This number is not a limit, it's possible to make more at once, if I need.)


These models are the variations of shapes those are generated in almost same parameters at once. I think 'Generation' is 'Same body but change the position of parts). And I add a 'Generation' slider.


This parameter changes the place of parts, Legs, Arms, Horns, Spine by numeric formula.
This result is here.







New 3D printed Objects

Today, we are in a typhoon wind and rain now.

And I got new 3D printed object today, these are selected from the models of August.
Here is the photo.


I recognized the power of 'Generative Modeling' again, it's interesting.

Sunday, September 11, 2011

Alien's era.

Maybe, the GMP is going on 'Alien's era'. So cute and strange objects are generated from yesterday. How do you think about these?


No limit?

Occasionally, there can be generated similar to the previous object as Dejabu. However, the forms emerge as never before to try to change the parameters a bit.


Friday, September 2, 2011

Tuesday, August 23, 2011

A simulation of the work.

This is the simulated image of work. Actually, I'll make about 40 bottles of works.


Friday, August 19, 2011

A study for exhibition.

I saw a space for exhibition a few days ago. It's a room of  a small company. I tried on a simulation for arrangement of works on Blender.





Tuesday, August 9, 2011

New script.

This is the another GMP script now.
It's not perfect yet, so hard to control to making shape. :-(


The code is here.

3D print, more.

The other models were reached here, from the models of June. I'll make from July's models next time.



Friday, July 29, 2011

GMP_model_July

The models of July, movie from selected 113 generated objects.

Tuesday, July 19, 2011

I got some 3D printed objects, from the models of June.

The objects reached today, it's fantastic.
All babies are cute. I'm so satisfied.


I'll select next objects to print, from June models. Of course, I'm making July's object now. I'll select from them next month.

Friday, July 15, 2011

Fixed the code, run on Blender 2.58.

I found the hint for solving the 'pivot_point' problem on the forum of BlenderArtists.org.



<CODE>


bpy.context.space_data.pivot_point = 'INDIVIDUAL_ORIGINS'


</CODE>


Now I could run the code on Blender 2.58 (^_^).
The code is here.

Almost good progress.

With Dolf's help, the code were written. I think it's a good result for now. But another problem came out.

From Blender 2.58, there are no option of 'active_space' attribute. This code uses the 'active_area' for changing the pivot_point to 'INDIVIDUALS' and 'BOUNDINGBOX_CENTER'. So, this code get 'ERROR' on Blender 2.58.


The code is here.

Thursday, July 14, 2011

Start from here.

Well, let's start to try.



The image of use is,
1. Run this code - add 'Cube' at center automatically
2. Push 'Generate' button
3. Generate eight objects around the center cube
4. Select one from them
5. Do step (2.)

inside the code

1. Add one cube at center (0, 0, 0)
2. Set eight operations as function
3. Duplicate 'Cube', and do each operation
4. Select one object from new eight objects
5. If push 'Generate' button, delete unselected objects
6. Set the pos of selected object to center(0, 0, 0)
7. Set the name of this object to 'Cube'
8. Do step (3.) again

There are two problems now.
1. How to set the pos of selected object to center
The line 64,

<CODE>
bpy.ops.transform.translate(value=(0, 0, 0), constraint_axis=(False, False, False), constraint_orientation='GLOBAL', mirror=False, proportional='DISABLED', proportional_edit_falloff='SMOOTH', proportional_size=1, snap=False, snap_target='CLOSEST', snap_point=(0, 0, 0), snap_align=False, snap_normal=(0, 0, 0), texture_space=False, release_confirm=False)
</CODE>

is, translate the object relatively. So this value=(0, 0, 0) means [no move].
I need to set the pos absolutely (0, 0, 0).

2. How to set the name of the selected object arbitrary.
I have to select the object named 'Cube', but duplicated next generation object has 'Cube.00x'.

How about it?
The all code is here.

<CODE>



# First import bpy to get access to well... everything in blender
from bpy import *
import bpy
#import math, mathutils, random


class GMP_Panel(bpy.types.Panel):
bl_label = "Generative Modeling"
bl_space_type = "VIEW_3D"
bl_region_type = "TOOLS"

def draw(self, context):
layout = self.layout

scn = bpy.context.scene

row = layout.row()

row.operator( "bpt.generate_op" )

class GMP_Operator(bpy.types.Operator):
bl_idname = "bpt.generate_op"
bl_label = "Generate"

def execute(self, context):
# Do 8 operations
clearAndSetNewObj()

operation1()
operation2()
operation3()
operation4()
operation5()
operation6()
operation7()
operation8()

return {'FINISHED'}


def register():
bpy.utils.register_class( GMP_Operator )
bpy.utils.register_class( GMP_Panel )

def unregister():
bpy.utils.register_class( GMP_Operator )
bpy.utils.register_class( GMP_Panel )




# Add first cube
bpy.ops.mesh.primitive_cube_add(view_align=False, enter_editmode=False, location=(0, 0, 0), rotation=(0, 0, 0), layers=(True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False))


bpy.ops.object.add_named(linked=False, name="NewOrigin")


# SubSurf and Apply
bpy.ops.object.modifier_add(type='SUBSURF')
bpy.ops.object.modifier_apply(apply_as='DATA', modifier="Subsurf")


# clearAndSetNewObj
def clearAndSetNewObj():
bpy.ops.object.select_inverse()
bpy.ops.object.delete()
bpy.ops.object.select_all(action='TOGGLE')

# Move Selected Object to Center(0, 0, 0) ------------------
bpy.ops.transform.translate(value=(0, 0, 0), constraint_axis=(False, False, False), constraint_orientation='GLOBAL', mirror=False, proportional='DISABLED', proportional_edit_falloff='SMOOTH', proportional_size=1, snap=False, snap_target='CLOSEST', snap_point=(0, 0, 0), snap_align=False, snap_normal=(0, 0, 0), texture_space=False, release_confirm=False)


# op.1
def operation1():
bpy.ops.object.select_name(name="Cube", extend=False)


bpy.ops.object.duplicate_move(OBJECT_OT_duplicate={"linked":False, "mode":'TRANSLATION'}, TRANSFORM_OT_translate={"value":(-5, 5, 0), "constraint_axis":(False, False, False), "constraint_orientation":'GLOBAL', "mirror":False, "proportional":'DISABLED', "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "snap":False, "snap_target":'CLOSEST', "snap_point":(0, 0, 0), "snap_align":False, "snap_normal":(0, 0, 0), "texture_space":False, "release_confirm":False})


ob = bpy.context.active_object
newGroup = ob.vertex_groups.new('vGroup')
bpy.ops.object.mode_set(mode='OBJECT')

# Lets loop through all the faces in the mesh
for f in ob.data.faces:

# See if the current face's centre is above 0.0 on the Z axis
if f.center[2] < -0.5:
# Set select to true
f.select = True
else:
f.select = False

bpy.ops.object.mode_set(mode='EDIT')
bpy.ops.object.vertex_group_set_active(group='vGroup')
bpy.ops.object.vertex_group_assign(new=False)
bpy.ops.object.mode_set(mode='OBJECT')

# op.2
def operation2():
bpy.ops.object.select_name(name="Cube", extend=False)


bpy.ops.object.duplicate_move(OBJECT_OT_duplicate={"linked":False, "mode":'TRANSLATION'}, TRANSFORM_OT_translate={"value":(0, 5, 0), "constraint_axis":(False, False, False), "constraint_orientation":'GLOBAL', "mirror":False, "proportional":'DISABLED', "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "snap":False, "snap_target":'CLOSEST', "snap_point":(0, 0, 0), "snap_align":False, "snap_normal":(0, 0, 0), "texture_space":False, "release_confirm":False})


ob = bpy.context.active_object
newGroup = ob.vertex_groups.new('vGroup')
bpy.ops.object.mode_set(mode='OBJECT')

# Lets loop through all the faces in the mesh
for f in ob.data.faces:

# See if the current face's centre is above 0.0 on the Z axis
if (f.center[0] > 0.5 or f.center[0] < -0.5):
# Set select to true
f.select = True
else:
f.select = False

bpy.ops.object.mode_set(mode='EDIT')
bpy.ops.object.vertex_group_set_active(group='vGroup')
bpy.ops.object.vertex_group_assign(new=False)
bpy.ops.object.mode_set(mode='OBJECT')


# op.3
def operation3():
bpy.ops.object.select_name(name="Cube", extend=False)


bpy.ops.object.duplicate_move(OBJECT_OT_duplicate={"linked":False, "mode":'TRANSLATION'}, TRANSFORM_OT_translate={"value":(5, 5, 0), "constraint_axis":(False, False, False), "constraint_orientation":'GLOBAL', "mirror":False, "proportional":'DISABLED', "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "snap":False, "snap_target":'CLOSEST', "snap_point":(0, 0, 0), "snap_align":False, "snap_normal":(0, 0, 0), "texture_space":False, "release_confirm":False})


# op.4
def operation4():
bpy.ops.object.select_name(name="Cube", extend=False)


bpy.ops.object.duplicate_move(OBJECT_OT_duplicate={"linked":False, "mode":'TRANSLATION'}, TRANSFORM_OT_translate={"value":(-5, 0, 0), "constraint_axis":(False, False, False), "constraint_orientation":'GLOBAL', "mirror":False, "proportional":'DISABLED', "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "snap":False, "snap_target":'CLOSEST', "snap_point":(0, 0, 0), "snap_align":False, "snap_normal":(0, 0, 0), "texture_space":False, "release_confirm":False})


# op.5
def operation5():
bpy.ops.object.select_name(name="Cube", extend=False)


bpy.ops.object.duplicate_move(OBJECT_OT_duplicate={"linked":False, "mode":'TRANSLATION'}, TRANSFORM_OT_translate={"value":(5, 0, 0), "constraint_axis":(False, False, False), "constraint_orientation":'GLOBAL', "mirror":False, "proportional":'DISABLED', "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "snap":False, "snap_target":'CLOSEST', "snap_point":(0, 0, 0), "snap_align":False, "snap_normal":(0, 0, 0), "texture_space":False, "release_confirm":False})


# op.6
def operation6():
bpy.ops.object.select_name(name="Cube", extend=False)


bpy.ops.object.duplicate_move(OBJECT_OT_duplicate={"linked":False, "mode":'TRANSLATION'}, TRANSFORM_OT_translate={"value":(-5, -5, 0), "constraint_axis":(False, False, False), "constraint_orientation":'GLOBAL', "mirror":False, "proportional":'DISABLED', "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "snap":False, "snap_target":'CLOSEST', "snap_point":(0, 0, 0), "snap_align":False, "snap_normal":(0, 0, 0), "texture_space":False, "release_confirm":False})


# op.7
def operation7():
bpy.ops.object.select_name(name="Cube", extend=False)


bpy.ops.object.duplicate_move(OBJECT_OT_duplicate={"linked":False, "mode":'TRANSLATION'}, TRANSFORM_OT_translate={"value":(0, -5, 0), "constraint_axis":(False, False, False), "constraint_orientation":'GLOBAL', "mirror":False, "proportional":'DISABLED', "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "snap":False, "snap_target":'CLOSEST', "snap_point":(0, 0, 0), "snap_align":False, "snap_normal":(0, 0, 0), "texture_space":False, "release_confirm":False})


# op.8
def operation8():
bpy.ops.object.select_name(name="Cube", extend=False)


bpy.ops.object.duplicate_move(OBJECT_OT_duplicate={"linked":False, "mode":'TRANSLATION'}, TRANSFORM_OT_translate={"value":(5, -5, 0), "constraint_axis":(False, False, False), "constraint_orientation":'GLOBAL', "mirror":False, "proportional":'DISABLED', "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "snap":False, "snap_target":'CLOSEST', "snap_point":(0, 0, 0), "snap_align":False, "snap_normal":(0, 0, 0), "texture_space":False, "release_confirm":False})


bpy.ops.object.modifier_add(type='SUBSURF')
bpy.ops.object.modifier_apply(apply_as='DATA', modifier="Subsurf")


if __name__ == '__main__':


register()




</CODE>

Tuesday, July 12, 2011

New concept of GMP.

Until now, I feel the great ability of generative modeling, but also I know this code has one problem. That is, this code doesn't have 'Gene succession' system. This code could generate tons of shape variation by using many parameters, but each object has no relation each other. And now, I got an idea for new system.

As you know, 'image variation' on ADOBE Photoshop is easy color manipulation system.


The center is origin(now), and six color variations are around it. If any color variation are selected, this will be center=next origin(now). If GMP accept the system like this, the new concept is below.


The eight simple operations are around the origin (Of cource, this is conceptual figure).
The center is simple object at first. Next, apply each operation for copied object. I'll get eight new shapes. Select no.'2' shape, this will be next original shape.
Next, apply each operation again. I'll get another new shape. The operation number that I selected is 'Gene' data. [2, 6, 5, 5, 8, 7, 1...]
So, I could trace the line of operations perfectly by this numbers. 

This is next concept of GMP.

Thursday, July 7, 2011

Insect Form

This object is short body type, for making an insect type form. For making the short body, re-written the numeric formula of a part of body.



Selected 96 objects in June.

This movie is the selected 96 objects that was made in June. I'll make some real objects in these, maybe 10 or some. Already, I ordered 4 pieces of objects to 3D print factory.


Thursday, June 30, 2011

Legs, insect like.

I tried to make insect like objects. The part of body, this code couldn't make joints like an insect, so the body is curvy.



Saturday, June 25, 2011

Solved!

The problem on 2.58 was solved by commented out some lines. Now I could run the script on it!


Friday, June 24, 2011

2.58 python error.

The blender 2.58 released. New features, bug fixed, it's good. But for GMP, one problem I got.

The GMP code contains 'area.active_space.pivot_point= 'INDIVIDUAL_ORIGINS', but the information from change log,

bpy.types.Area
Removed
active_space

|o|, this is used for setting the pivot point to INDIVIDUAL_ORIGINS, it's very important part.
Please help someone. /(*_*)\

Friday, June 17, 2011

How to show the objects...

I have a plan to hold an exhibition for GMP in a year. (or next spring)
How to show the objects, and I decide this style. It's a sample bottle for using biology or something. The concept is, 'discovered new life'.



Thursday, June 16, 2011

Latest code

The latest code is here.


For example, the each parameters are like this.
Please show the layer [1] and [11].
This code generate 35 objects at once, it'll take a little bit long time.
Push [Generate] Button and wait about 20 min.

Body_Amp: 2.5
Body_ModAmp: 1.97

Arm_Len: 5
Phase: 0
Step: 54
Amp: 0.22
StepAngle: -2.46
Mod_Amp: 1.16
ModStep: 2.5
Joint: 0

Leg_Len: 6
Phase: 0
Step: 19
Amp: 0.3
StepAngle: -3.21
Mod_Amp: 0.34
ModStep: 1.18
Joint: 4

Horn_Len: 4
Phase: 0
Step: 60
Amp: 0.32
StepAngle: 1.41
Mod_Amp: 0.04
ModStep: 0.16
Joint: 0


Sunday, June 12, 2011

6_12, The works.

The code was a little bit changed, and body line was more glamour. (*o*)


6_11, Today's works.

Today's works, I need next algorithm? (^_^;)


Thursday, June 9, 2011

3D printed! \(^_^)/

About two weeks ago, I ordered three generated objects to 3D print factory. Today, I got these. It's cute babies, so I'm very glad. The 2 of 3 are printed with nylon powder, and 1 is resin. This factory is in Japan, and little bit expensive. So I ordered another object to 'Shapeways' for compare the cost/performance. Maybe this one will reach more a few weeks later.