Jump to content
DBaciu

Re-create Sci-Fi Art WIP - Metropolis

Recommended Posts

Hello everyone!

This is my first Houdini challenge.

I decided to enter the challenge because it's a great motivation to learn.

First of all, I'm new to Houdini (in the last, I don't know, maybe two months I tried to learn it and I think I made a lot of progress). I tried to get a grasp of Houdini several times in the past, also, but to be honest, it was brutal. Maybe my general 3d skills was not enough for it. But now I'm beginning to think that Houdini is the most beautiful 3d application.

About the challenge, I want to make some city, some megalopolis, in the style of some of the images from the reference section. Another source of inspiration for me is the great movie "Metropolis".

Because I tried so hard to understand the procedural work-flow of Houdini (this was the point anyway) I forgot about the contest, so maybe I'm a little late with my work for it.

So, this is what I have for now. I tried to do everything in a procedural manner, and believe me, it really is.

I hope you like it!

Thank you!

post-6076-128817953972_thumb.jpg

post-6076-128817965573_thumb.jpg

post-6076-12881980349_thumb.jpg

post-6076-128819811269_thumb.jpg

post-6076-128819965739_thumb.jpg

post-6076-128819968737_thumb.jpg

Share this post


Link to post
Share on other sites

First of all, I'm new to Houdini (in the last, I don't know, maybe two months I tried to learn it and I think I made a lot of progress).

Looks awesome! Good start. Looking forward to see your project.

Share this post


Link to post
Share on other sites

Hello everybody, and thank you for your comments!

I'm back again with some progress.

I tried to figure out the materials and mapping work-flow in Houdini.

Also I tried to make a good composition with what I have so far.

post-6076-128896407787_thumb.jpg

post-6076-128896411587_thumb.jpg

post-6076-128896428448_thumb.jpg

Share this post


Link to post
Share on other sites

Hello again everybody!

I have nothing really new to show you, just some atmosphere tests I've done.

The fist one uses v_uniform fog, and renders pretty fast.

The second one uses v_litfog.

Looks good, but renders very very very slow.

Maybe I'm doing something wrong, please, somebody can help me?

Also, I have another issue in which I need some help:

How can I join some shapes that I obtained by using curvesect? Specifically I intersected some circles with a polygonal face. I obtained lines and circle segments but I cannot join them back into a polygonal surface. I cannot extrude them or anything else. I thought that by applying a fuse they end points (which are, in pairs, in the same place) will fuse and all will become a polygon but this is not the case. Also, how can I sort the points on some curve obtained by joining other curves (other than sorting them Before join). I mean I want to choose some point on the curve which is point 0 and sort all of them in order, increasing they number until I get back on first point, so I can sweep something correctly on them, for example.

Thank you!

post-6076-128948066507_thumb.jpg

post-6076-128948071253_thumb.jpg

Share this post


Link to post
Share on other sites

Hello guys!

Time for a little update.

Nothing spectacular (visually)... I worked hard to implement the Straight Skeleton in Houdini. This is an algorithm which can be used (among other things) to define the roof of a building. It can draw the sides of a roof of a building with perimeter defined by an irregular polygon. As you can see in the images below, every side has the same slope and also the intersections of the sides are taking care of. I have some problems with it and I'm still working. I have a big question for Houdini masters out there: is there a way to take the output of a network (some polygons) and put it through the network again, in a conditional loop? I think this algorithm is a piece of cake to implement in Python, but this is beyond me and my knowledge (yet).

post-6076-129289361578_thumb.jpg

post-6076-129289362412_thumb.jpg

post-6076-129289363173_thumb.jpg

post-6076-129289363851_thumb.jpg

post-6076-129289364633_thumb.jpg

post-6076-129289365357_thumb.jpg

post-6076-1292893660_thumb.jpg

Share this post


Link to post
Share on other sites

And this is a more complex shape, which, unfortunately, failed to solve completely. There are some particular cases that will make my algorithm to fail. I have to work some more on the algorithm.

post-6076-1292898883_thumb.jpg

post-6076-129289889986_thumb.jpg

post-6076-12928989082_thumb.jpg

Share this post


Link to post
Share on other sites

I have some problems with it and I'm still working. I have a big question for Houdini masters out there: is there a way to take the output of a network (some polygons) and put it through the network again, in a conditional loop? I think this algorithm is a piece of cake to implement in Python, but this is beyond me and my knowledge (yet).

A foreach with "merge results" turned off can do this for you. After looping through the network the first time, it will feed the resulting geometry back into the start of the network... and so on untill the final for value is reached.

--> this works well with "for(i<10)" scenarios, I have never set up a while loop with it.

If you do need a while loop (eg. while (polygon count < 500) do subdivide )

I would consider setting up a write frame out, read previous frame in type of loop (using file sops). And simply press "play" and have a python command to stop playback when the end condition is reached.

feedback sop/sopsolver could be options too. I think sopsolver is faster than the write out/read in loop as it does not necessarily need to write the intermediary steps to disk, perhaps only the final result. (You can do this by setting a geometry rop to write frame 100 out of 100 to disk - it will simulate frame 1-99 first and then write out 100.)

If the loop is small and the operation is not too heavy I would just use the foreach with enough iterations (depending on the operation perhaps 20 to 50 loops) so you get the result you need. If you need more than 100 loops a sopsolver would be better as you then can interrupt the calculation and continue it another day.

Share this post


Link to post
Share on other sites

A foreach with "merge results" turned off can do this for you. After looping through the network the first time, it will feed the resulting geometry back into the start of the network... and so on untill the final for value is reached.

--> this works well with "for(i<10)" scenarios, I have never set up a while loop with it.

Peter, thank you very very much for your kindness. Foreach seems to be the answer, but I have one more question for you (maybe for the others also):

I want just a part of the geometry generated in one iteration in Foreach SOP to be redirected to be processed again in the loop. The other part not (in fact the other part is the part that interest me and I want it untouched and added together with the ones from previous iterations).

As for the Feedback sop, oups, I don't know what to do with it...

Share this post


Link to post
Share on other sites

I want just a part of the geometry generated in one iteration in Foreach SOP to be redirected to be processed again in the loop. The other part not (in fact the other part is the part that interest me and I want it untouched and added together with the ones from previous iterations).

As for the Feedback sop, oups, I don't know what to do with it...

A simple example could be making a procedural snowman with the foreach.

There are three balls that diminish in radius as the amount of iterations goes up. The bottom ball doesn't need anything added, the middle ball needs arms sticking out and the top ball (smallest) needs a face and a hat on top.

( $FORVALUE is replaced with stamp("..","FORVALUE",0) )

If you assume the biggest ball will be the first one ($FORVALUE==0) you could implement something like:

radius: fit($FORVALUE,0,2,10,3) -> using a fit function is convenient as you quickly remap that integer of the FORVALUE to a float with much more precision. (You can also use the $FORVALUE as a seed for a random function for a custom vop).

You also know the middle ball: ((0 + 2) /2)=>1

so you can put in a switch: if($FORVALUE==1)

So it switches to add the arms that you object merged into the subnetwork inside the foreach.

In the same way you can switch: if ($FORVALUE==2)

to object merge in some geometry for the face and merge it together with the current ball and the previous balls coming from the "each".

--if you want to make it more procedural so you have a snowman with 4,5,6,... balls, you can use the start and end values: ch("../numrange1") represents the startvalue, ch("../numrange2") represents the endvalue. So now your fit function becomes:

fit($FORVALUE,ch("../numrange1"),ch("../numrange2"),10,3)

So to really answer your question: with object merge you bring in external geometry and you merge it with the geometry that has already been going through your network. You can use groups to maintain different streams of geometry, but I find working with groups becomes very slow very quickly. -- Same with expressions... that's why I mentioned the vopsop and the $FORVALUE as a seed. If you have to evaluate a fit expression 100 times versus execute a vopsop fit function 100 times the vopsop will be faster. So where you can put your math in vops, do it.

Share this post


Link to post
Share on other sites

Peter, thank you for your time.

I already solved this problem (at least relative to my particular need).

I did it with some grouping before the foreach.

My roof is constructed by extruding with the same value for the height and inset.

This results in some slopes and one or two flat surfaces,

which must be processed further in the same manner.

So is an iterative process. You can see it in the image below.

I still have some problems with some particular cases which results in errors,

but the initial shape of the house must be really twisted for them to occur.

For simpler shapes it works just fine.

post-6076-129371968903_thumb.jpg

post-6076-129371969891_thumb.jpg

post-6076-129371970727_thumb.jpg

post-6076-129371971737_thumb.jpg

Edited by Bandaciu

Share this post


Link to post
Share on other sites

Hello guys!

I'm not sure about the finish time for this contest.

I am a little late with it, I spent some precious time on things that, while entirely superb,

are not that useful for my entry, such as the straight skeleton algorythm I was talking about earlier

So, I'm trying to figure out a composition for my image...

post-6076-129506803188_thumb.jpg

post-6076-129506809558_thumb.jpg

post-6076-12950681598_thumb.jpg

Share this post


Link to post
Share on other sites

And this is a more complex shape, which, unfortunately, failed to solve completely. There are some particular cases that will make my algorithm to fail. I have to work some more on the algorithm.

You did these without a forloop? Quite impressive!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×