Jump to content


Procedural Plagiarism


  • Please log in to reply
19 replies to this topic

#1 rdg

rdg

    Houdini Master

  • Members
  • PipPipPipPip
  • 729 posts
  • Joined: 21-August 05
  • Location:weta
  • Name:Georg Duemlein

Posted 24 October 2010 - 06:55 PM

My current project is called "Procedural Plagiarism".

0003_0001: Rounded Corners

Posted Image

Houdini OTL that creates fillets – aka rounded corners – on all points of a curve.
Works nice on Spheres, too.

This Procedural Plagiarism was inspired by 3D Studio Max’s Curve Fillet and spoongraphics.

Download: rdg_roundedCorner.tar.gz

Edited by rdg, 15 November 2011 - 12:09 PM.

The Industrial Parametrization of the World
http://rdg.preset.de/

#2 ben

ben

    Initiate

  • Members
  • PipPip
  • 114 posts
  • Joined: 18-January 10
  • Location:Ubisoft Paris
  • Name:Benoit Martinez

Posted 25 October 2010 - 01:31 AM

Very usefull.
Thanks for sharing!

#3 Matt_K

Matt_K

    Initiate

  • Members
  • PipPip
  • 201 posts
  • Joined: 03-June 04
  • Location:Cape Town
  • Name:Matthew Kearney

Posted 25 October 2010 - 02:00 AM

This will come in handy!
Thanks for sharing.

Matt.
---------------------------------------------------------------------------------------------------------------------------
"Reality is merely an illusion, albeit a very persistent one." - Albert Einstein.

#4 smaugthewyrm

smaugthewyrm

    Initiate

  • Members
  • PipPip
  • 104 posts
  • Joined: 29-September 10
  • Location:yep.
  • Name:Hnoob Alicious

Posted 25 October 2010 - 10:45 AM

omg. wonderful! thank you!

#5 rdg

rdg

    Houdini Master

  • Members
  • PipPipPipPip
  • 729 posts
  • Joined: 21-August 05
  • Location:weta
  • Name:Georg Duemlein

Posted 25 October 2010 - 09:51 PM

Thanks guys.

However - the presented solution got some shortcomings in respect to support for groups.

This following snippet is a pythonSOP that outputs a mix of polySplines and NURBS to maintain the point ordering.
In H11 hou.Face.positionAt could probably be used to sample nurbsCurves at the fillets to output a homogeneous polySpline. In H10 the SOP outputs a mix of polySplines and Nurbs. H10 requires a resampleSOP and fuse.

Inputs:
group (string)
optFillet (float)
optFit (float)


# This code is called when instances of this SOP cook.
geo = hou.pwd().geometry()

# Add code to modify the contents of geo.

grpParmValue = hou.evalParm('group').strip()

inputPoints = geo.points()
inputPnums = [ p.number() for p in inputPoints ]
nPoints = len( inputPoints )

grpParmValue = hou.evalParm('group').strip()

if len( grpParmValue ) == 0:
	grpPoints = inputPoints
	grpPoints = inputPnums
else:
	grpPoints = geo.globPoints( grpParmValue )
	grpPnums = [ p.number() for p in grpPoints ]

poly = geo.createPolygon()
poly.setIsClosed( False )

for n in range( 0, nPoints ):
	if n == 0 or n == nPoints -1 or not n in grpPnums:
		np = geo.createPoint()
		np.setPosition( inputPoints[n].position() )
		poly.addVertex( np )
	else:
		
		fillet = geo.createNURBSCurve( 4, False )
		
		tmp = (( inputPoints[n].position() - inputPoints[ n-1].position() ) * 0.5 )
		fillet.vertices()[0].point().setPosition( inputPoints[n].position() - tmp.normalized() *  min(tmp.length(), hou.evalParm( 'optFillet' ) ) )
		
		np = geo.createPoint( )
		np.setPosition( fillet.vertices()[0].point().position() )
		poly.addVertex( np )
		fillet.vertices()[1].point().setPosition( inputPoints[n].position() - tmp.normalized() *  min(tmp.length(), hou.evalParm( 'optFillet' ) ) * hou.evalParm( 'optFit' ) )

	   
		tmp = (( inputPoints[ n + 1 ].position() - inputPoints[n].position()) * 0.5 )
		fillet.vertices()[2].point().setPosition( inputPoints[n].position() + tmp.normalized() * min(tmp.length(), hou.evalParm( 'optFillet' ) ) * hou.evalParm( 'optFit' ) )

		fillet.vertices()[3].point().setPosition( inputPoints[n].position() + tmp.normalized() * min(tmp.length(), hou.evalParm( 'optFillet' ) ) )
		
		poly = geo.createPolygon()
		poly.setIsClosed( False )
		np = geo.createPoint()
		np.setPosition( fillet.vertices()[3].point().position() )
		poly.addVertex( np )

geo.deletePoints( inputPoints )

Edited by rdg, 25 October 2010 - 09:53 PM.

The Industrial Parametrization of the World
http://rdg.preset.de/

#6 rdg

rdg

    Houdini Master

  • Members
  • PipPipPipPip
  • 729 posts
  • Joined: 21-August 05
  • Location:weta
  • Name:Georg Duemlein

Posted 31 October 2010 - 12:22 PM

02: 0003_0002 - Paint with Triangles

Posted Image

This Houdini OTL assists in creating Delaunay triangulated imagery.

This Procedural Plagiarism was inspired by Jonathan Puckey’s “Delauney Raster

Download: rdg_paintWithTriangles.tar.gz

Edited by rdg, 31 October 2010 - 12:25 PM.

The Industrial Parametrization of the World
http://rdg.preset.de/

#7 pagefan

pagefan

    Peon

  • Members
  • Pip
  • 33 posts
  • Joined: 17-June 07
  • Location:Netherlands
  • Name:pagefan pagefan

Posted 01 November 2010 - 02:09 PM

View Postrdg, on 31 October 2010 - 12:22 PM, said:

02: 0003_0002 - Paint with Triangles

Posted Image

This Houdini OTL assists in creating Delaunay triangulated imagery.

This Procedural Plagiarism was inspired by Jonathan Puckey’s “Delauney Raster

Download: rdg_paintWithTriangles.tar.gz

Hi Georg,

nice effect! Great stuff to make dazzle paintings. Also reminds me of Lyonel Feininger's paintings, can make my own now.

To nitpick a bit, i made two improvements to your setup. One was to scale the image. The resolution tends to be rather big. Scaling an image by a factor of 0.1 resizes it a bit to the Nachtwacht/Guernica proportions. Secondly, the facet_unique_points seems unnecessary. The colour from the points is promoted the same if you have unique points as with fused points.

Cheers,
Hans
Rock and Roll is the easiest place to hide.

#8 rdg

rdg

    Houdini Master

  • Members
  • PipPipPipPip
  • 729 posts
  • Joined: 21-August 05
  • Location:weta
  • Name:Georg Duemlein

Posted 07 November 2010 - 12:10 PM

03: 0003_0003: Processing

Posted Image
Video on Vimeo

A meditation in Houdini’s foreachSOP.

Points are grouped by their distance to each other.
Each group’s points then are sorted by their distance to the group’s ‘main point’.
A addSOP connects the main point to it’s children.

Why oh why didn’t I use a pythonSOP ? And what about search-able data structures – like trees?

This Procedural Plagiarism was inspired by the image on the cover of: “Processing: A Programming Handbook for Visual Designers and Artists” by Casey Reas and Ben Fry[1].

Attached File  rdg_processing_0001.tar.gz   43.69K   245 downloads

[1] http://processing.org/learning/books/

Edited by rdg, 07 November 2010 - 01:37 PM.

The Industrial Parametrization of the World
http://rdg.preset.de/

#9 ndeewolfwood

ndeewolfwood

    Peon

  • Members
  • Pip
  • 39 posts
  • Joined: 25-July 08
  • Location:Paris
  • Name:lo lo

Posted 07 November 2010 - 03:34 PM

yeah !!!!
this post is epic...
thanks for sharing.

#10 Matt_K

Matt_K

    Initiate

  • Members
  • PipPip
  • 201 posts
  • Joined: 03-June 04
  • Location:Cape Town
  • Name:Matthew Kearney

Posted 08 November 2010 - 02:13 AM

As usual, nice work, and thanks for sharing!

Matt.
---------------------------------------------------------------------------------------------------------------------------
"Reality is merely an illusion, albeit a very persistent one." - Albert Einstein.

#11 Allegro

Allegro

    Illusionist

  • Members
  • PipPipPip
  • 274 posts
  • Joined: 25-May 06
  • Location:Vancouver, Canada
  • Name:Stephen Tucker

Posted 12 January 2011 - 01:42 AM

Hey Georg! Cool stuff, I'm just coming across this stuff now. Love it.
Stephen Tucker
VFX Artist
Personal Site

#12 rdg

rdg

    Houdini Master

  • Members
  • PipPipPipPip
  • 729 posts
  • Joined: 21-August 05
  • Location:weta
  • Name:Georg Duemlein

Posted 11 April 2011 - 02:21 AM

04: 0003_0004: Recursive Subdivide

Posted Image

Take a rectangular Polygon.
Choose a random point on one of the sides.
Choose a random point on the opposite side.
Split the polygon using a plane through these two points.
Repeat.

This Procedural Plagiarism was inspired by Justin Windle’s “Recursive Subdivision“.

Thanks to Graham for fixing my initial PythonSOP implementation!

Attached Files


The Industrial Parametrization of the World
http://rdg.preset.de/




0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users