Procedural Modules | Houdini 16.5
Вставка
- Опубліковано 15 лип 2024
- ** Procedural Modules | Low-level logic for copying random unique primitives to points **
Welcome! This one is more or less split into two sections; it went a bit longer than I planned but I hope it gives you some insight on how to approach something like this.
Firstly I walk you through a general concept phase, where I explain in depth how our logic for efficiently copying n different primitives from a selected pool to n number of points works. Next, I use an unfinished setup as an example where this technique is extremely important and basically allows modules to be instantiated to points with unique properties.
This was the core logic behind one of the many procedural buildings setups that I developed some while ago, and I specially think it's a powerful yet friendly approach to this, without getting tangled into so many vex wrangles, conditionals and statements.
Here is the link to this tutorial's post page, with further details:
particula.org/tree/master/tut...
Also make sure to check out our Resources page; links to things mentioned in this video can be found in there :
particula.org/
Thanks, and I'll see you next time!
Super rad! Nice shapegen! :-)
Indie-Pixel Thanks, man! Really appreciate it, specially coming from you. I’m also really liking your latest ones! Wish I had more free time to keep up! Cheers
so many things in such a short time, you opened my eyes! Thank you
this is the best, and shortest, houdini tutorial i've ever seen. Thank you so much. Your mind/pipeline works like mine. This is a brilliant way of showing this off.
I really appreciate your kind words. I’m glad you find it useful. Thanks!
Thank You very much, Ricardo.
This is a great video, thanks for sharing!
ANYONE HAVING ISSUES AT 7:40...
Solution: click set_index node, then change 'Max' to 3.
It seems he edited that part out by mistake.
thx!
Real og
Very nice stuff here!
great stuff!! thank you so much;)
Great job there!
Thank you very much!
Each stage here is a separate lesson topic. I will research each one individually. Thanks.
Thank you. Liked and subscribed.)
Great video, especially for someone like me who only got into Houdini a couple of months a go. The only stumbling block I had was figuring out that the -1 in the point function was referencing the spare input, but it's a neat trick and makes the network editor easier to read.
It took me a while to figure this out, but I found that until I had a valid, non-zero value for the max attribute, I wasn't able to get randomization. I am not sure why it was ever working in your video. I stopped watching for a while to try and find and fix my mistake, but I eventually I found the fitted value going into index was fitting the value between zero and zero. I then realized that right after I stopped watching, you provided a solution in the video with the opninputs switch lookup.
Anyways, thanks for the guide! I'm still learning a lot from it.
Thanks for the comment. Yes, I actually found out about the opninputs method shortly before recording, it's super handy. I'm glad to hear you can learn something from it, and that it worked out in the end!
@19:20, can someone explain to me how to do the attribute transfer correctly? I can't seem to figure out how to do it
how were you able to create the interior walls? will you be doing another tutorial?
@18:21 how do you get rid of the points that do not pass through the polywire shape. on your example it's points 36 and 30
Hello, that we can achieve by promoting the group that we created with the polywire from points to primitives. By blasting the promoted primitive group we also get rid of those points. Hope it helps!
Quick tip. If you are going to do a tutorial make sure you click on EVERY node you are using so that we can see what your settings are. It can be quick. We can pause. But if you skip nodes it makes the tutorial far less useful. Great apart from that! I really do think if you did that your tutorial would be perrrrrrfect.
Hello can I ask for the expression on the delete sop, when you are deleting the non middle points, in the keep centers by curveu section, thanks a lot, this is all very helpful :)
Hey, glad you like it! We keep only the middle points with the expression @curveu==0.5, and make sure to delete non-selected.
@@ribponce fantastic!! thank you so much!!
In the connect_dots wrangle, isn't "pt >= @ptnum && pt != @ptnum" the same as just saying "pt > @ptnum"?
What is the VEX expression used to set the normals of the floor (in the "set_n" attribute wrangle)? Great tutorial overall!
would you consider making this part of your scene file available for download? I'm running into a few issues that I can't seem to resolve. Thank you!
@N=set(0,1,0);
Hey, yes I’ll make this shape generator available soon. Thank you for your interest. Cheers!
@@ribponce Thanks again, Ricardo - Looking forward to digging in
Like someone mentioned below, I too and running into trouble with the VEX expression used to set the normals of the floor (in the "set_n" attribute wrangle)?
Hey! Yes, so it's just a simple line to set the normal to a up vector. It goes @N=set(0,1,0);
Cheers!
@@ribponce Thank you for the reply. I have learned so much about Houdini by just powering through this tut.
Really appreciate the kind words, I’m glad you could learn something from it. Cheers!
Hey can you please help me from where to start this procedural modeling, I'm not new in houdini, I do grooming and rendering in houdini, but I love to model and I do in maya, in houdini I always wanted to but due to its complexity and my tight schedule I wouldn't able to do that, but now I Wana get my hands into houdini vex and procedural modeling.
I Wana learn from scratch, please help suggest me tutorials for that paid un paid doesn't matter...
Hi~ First of all thanks a lot for sharing this video, that's awesome~! I'm fresh new to Houdini. At the 07:35 of the video you typed "point(-1,0,"index",0)", but I checked the doc and found something like this :"point(surface_node, point_number, attribute, index)". So I was confused what does your "-1" stand for. Could you pls enlight me a bit? I know it must be a very stupid question though...
Hi, yes so the -1 refers to a spare input. If you click the small gearbox on the top of a parameter window, there is an option to add a spare input. Essentially, it creates a string parameter on a node which can be "accessed" from within a function on that node by typing -1, instead of referencing the path to that node manually (which would be something like "/obj/geo1/foreach_begin1/", or similar).
So when the function runs and encounters -1, it understands you mean the spare input, and uses that string instead. It's just good practice to organize things this way, but also a matter of preference. Hope that helps, cheers!
@@ribponce Ahhhh... Understood. That's pretty cool! THANK YOU so much for this tip and everything you shared, all my best best wishes~
Hi Ricardo, excellent video. I'm using H17.0.459 and when I insert opinputs("../switch1/") in the "Max" parameter, I get errors on all the nodes below, including the set_index attribwrangle node (foreach_begin & end, copytopoints plus the switch nodes. The message is the same for all & reads:
"
Error
Invalid source /obj/geo1/set_index/attribvop1
Error: Unable to evaluate expression (Unknown function in expression (/obj/geo1/set_index/max))..
".
I'm relatively new to VEX & for some reason really good at getting errors, even though I follow along as closely as I can. Indie-Pixel can vouch for me on that one....lol.
You wouldn't know why this is happening, would you?
Ah ha, I should have gone to specsavers! It helps if you use "opninputs" instead of "opinputs". I had to go to 1080 HD to see that sneaking little "n". Working now! Now I can watch the rest feeling a lot more content;-) Cheers.
Pretty dam cool. That's all I got to say. Thanks Ricardo.
Hey, I’m glad you worked it out. I just double checked and it works in H17 the same. Exactly, opninputs!
Alternatively, you can also download the example scene file, link on the description. Cheers!
Hi, im new to Houdini, I would like to know about your procedures with mapping the seed to your timeframe slider. Thanks
Hello, you can achieve that by simply adding the global variable $F to any rand() channel expressions. If it's inside a vex snippet, however, you have to use @Frame. Both will refer to the current frame number, and is very useful for quickly changing random seeds during development. Cheers!
@@ribponce $F worked! thank you so much :D
Hey sorry to bother you, I wanted to ask the settings of both attribtransfer2 and delete from 19:08, because all my points are getting deleted when I use delete, even when selecting curveu
AttribTransfer you select the curveu attribute on points, distance threshold set to 0.1, and Delete node you set Group to @curveu==0.5, delete non-selected points.
@@ribponce thanks for the fast reply, you may just have saved my college degree
Honestly the most important things was the shape generation which, unless I am missing something, it has been skipped.
Maybe do have I missed something?
How to make this kind of inteface so that the panel with parameters occupies only right top corner?
If you press P in that context a Parameter interface will pop up.
@@ribponce thanks!)
Up to this point ua-cam.com/video/MwFARaaTLW4/v-deo.html I can't get the multiple platonic to display, rather only one platonic; everything is done exactly ?
Hey, have you tried taking a look at the scene file, see if you maybe missed something? Remember to set the 'id' attributes beforehand, and to properly use the point function on the Switch node. Hope you can sort it out, if not let me know. Cheers!
@@ribponce Have you considered a tutorial on creating buildings; or how did you learn how to create ?
@@ribponce Where is the scene file, it appears hidden ?
first rule of tutorials, what are we trying to achieve?
Hey, maybe I wasn't very clear in the beginning of the video. It's about a very handy technique for copying random unique primitives to points, but thanks for the feedback. Cheers!
@@ribponce I mean, at least you can show the result before diving in the hows and whys.
Are you designer of agne font ?
Yes, I am. Used to do a lot of graphic design, typography and branding in the past.
Nice tutorial, and I have another option for "copy to points" for variant objects by using "copy to stamp" and feedback the stamp() to control "switch" node
example video: ua-cam.com/video/ceiPBeoDAsQ/v-deo.html
sorry for non-English video
Thanks for your comment! I'm glad you find it useful. Of course, as always, there are many ways of approaching and solving problems. My personal preference is to stay away as much as I can from copy stamping. This technique was widespread for a long time, and you still see many old tutorials using it, but a lot of things changed in the past versions. Apart from being much less optimised, the way it works feels simply wrong to me. Check out this page how Matt explains it, I couldn't have put it better myself:
goo.gl/1BCWLv
But then again, it always depends on what you're trying to achieve. Cheers!
Thank You very much, Ricardo.