Houdini Algorithmic Live #091 - Procedural Sea Urchin

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
okay so this is 11 p.m i would like to start this week's tutorial live for houdini hello this is georgio horikawa and this is the 91st episode for houdini algorithmic live tutorial which i'm being doing weekly i couldn't do it last week though sorry for that so uh this week's a topic is to create kind of a skeleton of a sea urchin which i found it really astonishing looking at the images something like this one or all all of these stuff seems like these are a skeleton or bones of a sea urchin which i didn't really know too recently and i really like this shape so i wanted to make something like these procedurally to see if i can do it and turns out if you made a little observation to this image you can see some patterns or rules in order to create in order to recreate these shapes it's pretty based on some simple rule i think here so that's what i'm going to um tell you and that's coming that's what i'm going to show you today how i found out or how i take the features out of this urgent model or gym image as a procedural element okay and the result or the one that i'm going to create today as a result is looking like these where's bunch of parameters like right now this is a bit more regularized shape but could also be more random-ish like these you could also change like how many cells you want to have by changing parameters and so on and you can also change the openings on the end you could also make an ellipsoid shape as well from this one which i haven't implemented as a parameter for this one but maybe i can do it on live as well as these uh seam or split lines in between those cells which is also visibles right here these lines so these are the things that i'm going to implement today from scratch hello everybody right this is just to have fun okay so first thing first i'm going to observe uh this image what's to see what's the rule behind this thing okay so first thing i noticed is that the way the cell has been aligned next to each other you see those small ridge line edges here which seems to create this regularized cell shape which you could um see it similar to the centroid voronoidal coronoid tessellation something like these one meaning you could use you could imagine that you could use a voronoi fracture to create this kind of cell shape if it's if the point is at the right position at the regular positions there's also some pattern which have random which has those cells and the random positions something like these is a bit random-ish in terms of the positions or it is maybe this is a bit too regularized or maybe something like these this is a bit more randomised in terms of the position of the cells or these so i think the there might be it might be interesting to be able to have an option to make the cell position randomish and since we are using since i'm considering to use voronoi tessellations it's pretty easy to make it randomish just by moving point position randomly randomly and that's all you need to do or you could also if you want to have like a more center kind of centroid paranoid tessellations feelings even though if it's randomized then you could use the remeshed geometry with the smooth situations turned on as a base mesh which will give you pretty much what you would like to see as a clean centroid voronoidal boron centroidal voronoi tessellation like feelings okay so that's what i'm going to do as a base and in order to create the center line or the split lines like these looks a bit tricky because this my this seems this these lines are not seems to be based on those cell shape but it's looks a bit independent with these seams with these lines and i assume that these lines are a result of the growth of the skeleton so what i imagined is first of all you had these like uh orange like orange peel like shape which has these cells like this initially and when it grows when it grows there seems to be some additional strip in between some of the cells and making it widened out to a to create some kind of ellipsoid shape okay so that's what i assume so maybe initially it was like a sphere shape with all surface being covered by the cells but then at some point it grows out and to have this in between or some spaces between the cells to make it bigger so i'm gonna try to implement these strips just like it's going to uh just by making the space between the original cells so first i'm going to create a sphere together with those cells on top of it then split those cells with these in spacers to make it grow uh to widen on x y plane or x z plane exceed uh direction or the plane direction so that's my plan and in order to create these uh how do i call this like a small mountain like shape to each of the cells it should be pretty easy to do i'm going to get each of the cells shape then smoothen out the outline to create the 2d profile first then raise up the profile using some kind of uh maybe a ramp parameter to so that you can control the shape by yourself and and move it to the normal direction then you'll be able to create this kind of a mountain custom shaped mountain then for those small particles or small spheres i could just set some densities around the cells and just copy the spheres on top of these point positions so it's just a matter of setting the density value for the strip doesn't seems like there's any uh spheres on top of it but instead it looks like these are holes here but it's gonna be a bit messy to make a hole for my setup because i want to make it simple so i'm just going to copy the same spheres on top of the strip with some gradient value similar to what i'm going to do with the age of the cells so that's my plan and that's what i'm gonna do today okay so let's do this and from scratch okay so the first thing i like to do is to create a sphere shape with the top and bottom open up a little bit just like these just like these so on top and the bottom you have some holes or maybe some other gel trees but i'm just gonna make it as a whole it says its mouth interesting i'm just going to make it opened so i'm just going to assume that we're going to see the shape from the side view okay so first thing first you can create the sphere in any way but since i'm i would like to make a hole on top and the bottom i'm going to start by creating a line and then make it as an arc shape trim dog shape arc shape to end revolve it to create a sphere first of all okay so let's let's set the number of points to 50 so that i have enough points to make it as in our smooth arc okay then i'm going to use the point wrangle to change the shape of this line to a arc okay so um [Music] since the arc shape is just a half of the circle it's a pi as an angle in total so first of all i'm going to get the point number and convert it into a volume between 0 to 1 for is from stop point to the end point name it f and get the point number divided by the total number of points which is endpoints and divide it like this so that you will get the volume between zero to one right now i am now going to calculate the angle which is in total pi and multiplied by f you'll get the volume between 0 to pi for each point then you can use the trigonometry to calculate the position for x and y in order to create an arc shape so for x value you can use a sine function but an angle and for the y value you can use cosine and then by setting the x and y to a point position you can create an arc shape like this say what the radius is equal to one right that's good now and what i want to do now is to create some offset to this arc so that i can trim out the starting point and the end point right here okay so let's create a additional parameter for this one which could be in between zero to one again float offset so if it's zero there's no trim if it's more than zero then i want to trim out this curve for the top and the bottom okay so in order to do that what i could do is i could remap this f value so that it's bit in between the offset to one minus opposite so which means f is equal to fit zero one f offset one one minus offset okay and also let's bring the angle right after i recalculated the f value and now you get a trimmed arc all right seems to work so if it's 0.5 then it just disappears so maybe you can set the maximum of this offset as 0.5 okay so i'm gonna keep it as 0.1 for now and let's have a new node and to have all the parameters that i can control to change the geometry change the shape of the geometry so i'm gonna bring this up the first parameter okay so that i can control it right here okay great okay now next thing i like to do is to create the the revolt shape to make it as a sphere sphere-like shape which has a hole on top on top and the bottom okay and in order to when i'm going to do that when i'm doing that i would like to use these point as a actual point position for the cell for for voronoi fractures so right now there are a bit too much point right now so i'm gonna reduce the number of points by using resample first and instead of using maximum segment lengths i'm going to use maximum segments so that i can choose the number of points to use okay and this could be another parameter i think so let's have this all right going in back to a controller drag and drop the segments and let's call this what i call this horizontal div or is it horizontal divs looks more like uh vertical divisions is it vertical wait a minute um yeah vertical divisions very cool divs from 1 to 50 is fine i think for now okay now i can control how many points that i would like to use for vertical vertically now let's try to revolve this in order to do that you what i'm going to use is revolve to create a revolutional shape 360 degrees is fine and there's another divisions you can control which is for horizontal divisions and i don't need to show the uv so i'm just gonna hide it okay so this could be another parameter let's go back to the controller again bring up the pigeons and i'm going to call this hori divs around 50 is fine all right okay now let's check okay so uh the next thing i like to do is to in order to create a voronoi tessellation something like this what you would want is to offset the point with half the distance of this distance so by moving this point in between these points you'll be able to get this kind of zigzag shape just like i would like to do like this one okay so in order to do that i think moving the odd number or even number of these lines or vertical lines to downward or upward by the half distance of this edge would make sense to create a zigzag shape as a to use these point as a base uh the center of the voronoi okay so to do that i need to know i need to pick those points which is on the odd number or even number in this case if i choose this one then next point that i would need to choose is this one and this one and this one and so on and move it downward upward by the half lengths and not moving maybe rotating by the half length of these edge or half angle between this point and this point okay so that's what i would like to do and in order to do that in order to do that i need to look at the point number and see how i can get those informations by using the information like vertical divisions and horizontal divisions okay so let's see um so the point counted from zero and right here so zero goes like this zero one two three four create one layer and then go back to somewhere around here or here where is it yeah right here and goes right like this so so there seems to be a rule and for each layer you have in right now 15 points which corresponds to this horizontal divisions and for vertical points you have in total uh in this case one two three four five and it is equal to this value plus one okay so we could use those information to assume which one is at the odd number or even number in terms of these circle so what we want to do is to pick if i pick this one then we want to pick this one this one this one this one this one this one this one now the problem is if i in this case the total number of the points here is a odd number which means if i just pick this one and goes around the circle by picking up just uh um even number stepping by two skipping by two points then that's at the end you have point next to each other pick picked up so that's a problematic that's a problem so in order to avoid that you need you always need to have this horizontal divisions equal to even number this cannot be a odd number as a parameter so let's see if i can do that with the controller i'm not sure if i could do that if i could if i could restrict it to only to a odd number even number uh maybe not so instead of setting right here i'm gonna create some expressions to make it as a even number somewhere so let's see let's say i have something like five right now i have obviously odd number as a total number of the circle or this polygon for each layers but i want to make it as a even number so maybe six or 4 by the way so in order to change that first let's go back to where we are using this horizontal divisions which is this one resolve right here and what you just need to do is to this is five right now so in order to make it even number uh at for in order to make it always a even number you can just add a same value with the remains calculated so if this is a odd number you always get one if it's even number you always get zero if you if you calculate the remains by two modulus of two so as a result you should always get a even number as a result because you are adding one when it's even number end by adding one to a even number you get and now i mean by adding one to a odd number you always get the even number okay so that's a little trick here so this should always give you a even number for the layers now right after doing that now i can i am ready to shift the point positions upward or downward for the even number of these vertical lines so first we need to pick those lines and then i am going to do that by using a pointer angle as always and let's show up the point number so that we could see we could imagine what kind of information we need to use so obviously we have two information two important information one is the vertical divisions what is the horizontal divisions how do i name this vdiv i'm going to create it as a parameter all right now i can directly copy this directional divisions to this one for horizontal divisions we have uh change the value a little bit inside this expressions this so i'm going to copy this one instead and paste it right here to use it okay so we have now 11 for the vertical divisions horizontal 18 for a vertical i mean horizontal divisions okay now first thing i'd like to get is the id the id number for a horizontal like layers a horizontal curve in this case a circle so for each layers for each circle layers i would like to create calculate or i would like to create an id starting from zero to some value so if it's zero then this becomes one two three four five and goes back to the end same for all the other layers sharing the same id for a same vertical line so let's do that by showing up the points first and see let's see what's the rule here so this one starts from zero one two and end at 17 which corresponds to this one so i can imagine that the id let's call this hid horizontal id can be calculated by the point number yeah calculate the modulus calculate the remains with by dividing by h division okay and let's see if i got the right value i'm going to attach this to an hid attribute integer attribute visualize this as a text see if i can if i get the right value okay so zero one two three zero one two three zero one two three you see that uh a certain vertical line shares the same horizontal id for each lines for each curves so looks good let's do the same things for the vertical i mean let's create a vertical id now so maybe starting from this here this could this whole layer maybe can share the value zero the second layer could share the value one third layer could be two and so on in order to do that um let's see how i can do that in order to do that you could use the same point number but instead of calculating the remains you can just divide it by the age divisions make sure this is a float and calculate the floor and as a result let's see i'm going to show up another id here idv id and yeah looks good starting from 0 at the top one and the second layer two and the third layer three and the fourth layer and so on seems to work now we can use these informations for what we want to do the things that i want to do here is to shift uh the even number of these lines to upward or downward by the half angle in between this point and this point now each edges should share the same angle because i have calculated from here with the same spaces angle space step angle i mean so that's so we already know what's the step angle here by looking back to this one so we could just use the half size of this angle something something related to this one okay so let's go back to this arc and half that step angle and set it as a detail attribute so that we can reuse it inside this node to rotate or to create an offset with these points okay so let's see what's the step angle for this arc and if i look at it we need to know the difference between the points and the next point and in order to do that we it's not really clear what that is we have a total angle so let's see the total angle is total angle is we can use the offset so pi minus offset i multiply by one minus offset multiply by two so that should be the total angle and let's have that as a detail set detail address i'm going to call this tang and we can also calculate the step angle as well from this total angle by dividing the total angle by the number of points so in this case the number of points can be estimated from this one here because at this point this is just a line and we have uh wait a minute no this this doesn't work because we are resampling it right here so maybe we just need to have total angle and we can just recalculate the step angle later okay yeah that should do it so we have this total angle applied to the detail let's check like this close to pi and let's make sure that it is alive here and we are going to use that to recalculate the step angle so let's first get this total angle from the detail okay and then the step angle is a total angle divided by a number of points on the vertical direction which is corresponds to this one okay and i want to make sure that um i want to make the number of vertical lines smaller so that way i can check it by just looking at it so right now i have one two three four five points but the division is equal to four so if the actual number of points is equal to four plus one and in order to get the step angle you just need to divide by the number of edges instead of points so one two three four so that is equal to the three divisions itself so the actual step angle is total angle divided by the v divisions all right so that should be it and that's the angle that i want to use to rotate the even number vertical point positions now and i want to make it half size just in case and let's make this move in back just like this all right so next thing i need to do is to pick the even number even number of these vertical edges and you can do that by using this hid horizontal id if you divide the hid by 2 and calculate the remains if it's equal to zero then that's the even number if it's equal to one that's the odd number so if it's equal to zero that's when you want to rotate the point okay so and and in order to rotate um i'm going to use the matrix here and in order to do in order to roll create a rotational matrix you do need a axis for the rotation for each point and so you want to do in order to do that you need to if you want to roll what i would like to do here now is to let's say if i'm looking at the side view what i want to do is to rotate this curve to this direction by some angle okay and this angle we have uh calculate this angle already so well what i just need is the axis if we look at the in 3d you just need to have the axis in order to rotate this curve to this direction now we don't have that axis vector yet so we need to calculate that we could easily do that by first get the normal direction of the curve or the horizontal direction of the curve which we could calculate that by using cross product and between the point position and the up vector it no i mean this vector itself can be calculated just from the point position and by calculating the cross product between the up vector with these vector you can get the axis yeah that should do it so first i'm going to calculate the horizontal directional vector for each point from my point position which is i'm gonna call this h direction which is a set x and for y make it zero and use z and normalize it and let's check this direction by having applied as a edge direction attribute just to make sure that i am on the right path all right so it's the flat directional vector toward horizontal direction yeah for even numbered the vector um vertical curves so that's good now the next things that i want is to calculate the cross product between this vector and the up vector so that i can get the perpendicular vector value which can be a axis for the rotation so axis is equal to cross between the h direction and the up vector and let's normalize this as well okay and let's also show this axis just to make sure that i'm in doing right okay make it red vector okay so these red value red and red arrow is the red direction is the axis which seems fine which is which seems correct as a for the rotation all right so now that i got this axis it's time to rotate the matrix with an angle that i have calculated right here with an axis and now we can just rotate each of the point which is at the even number positions so you can just do that by multiplying the point position the current point position by the matrix all right there you go i think it worked so it's been shifted the half angle size to [Music] upward in this case yeah looks good and the this point position the shifted point was in position is actually going to be the point for the voronoi center okay so let's do this and do we need anything else no i don't think so i don't think so okay so let's have a voronoi fracture now for the the vase shape for the voronoi fracture might be better with the smooth surface instead of this a bit low res shape so we can go back to an arc before the resample which we had 50 points for this profile so i'm going to directly create a revolve out of this arc to make a bit more smoother surface with the pigeons set to something higher like 50 right so let's say this is smooth enough for the base and i'm going to use this as a base for the voronoi fracture so bring this back to right here and for the center for the voronoi i'm gonna connect this one okay as a result you don't need a interior surface i'm going to uncheck this and as a result you should see these rich edges create something really similar to what i see on this image okay let's remove those interior edges by using divide node i remove shared edges and make it recalculate the primitive normal to see how it looks like yeah looks like a corn sphere corn but it is also pretty similar to what we see here as a part so it looks good i like it and by changing those parameters the number of vertical points and horizontal points should be able to see it still works with the same rule okay so that looks good so this is going to be the base for the sea urchin skeleton okay now this is a bit a regular regularized shape which is because i'm just re creating this from the really regular sphere shape so it's the the alignment of the cells is really pretty clean but there is a chance that you want to like move those point positions randomly to make it more randomized cell shape so i'm going to create an option to do that now by just using a remeshed version of the sphere just as an option so create the switch node and what we want to switch is the point position for the voronoi so i'm going to connect it right here and instead of using these regularized point positions i'm just going to create the point position from the remeshed geometry by using the remesh to this smooth surface right here with some kind of target size parameters now the there is a bit of problem with this remesh because it thing is that doesn't rematch the border the unshared edges i mean the shared edges the unsure digits is it so as so the size of these edge becomes smaller compared to the one that it's in the interior which i don't really like so i'm going you know i'm gonna try to make those edge lengths similar to what you see on the exteriors or i mean the interiors so to do that first i'm going to see i'm going to create a group for these unshared edges by using group node name this border uncheck the base group instead use include by edges and check unshared edges for points now you can select you can only select the border points now to those border points i'm going to use the fuse node to merge it together with some distance similar to why you set right here target size so i'm going to copy this target size and paste it to a snap distance and multiply by some [Music] small number like 0.7 and there you go looks a bit better there are some like glitches like here but that shouldn't be a big problem okay so looks good and i want to use this as another option for the point positions let's see how it goes so this is the regular point positions if i switch this to the remesh point positions it becomes something like this which is also similar to what you see in centroid centroidal voronoi tessellations except like these because rematch itself have this smooth iterations right here which tries to move the point point to have this similar distance in between so as a result it will give you the same similar results to centroidal voronoi tessellations by increasing the iterations you get more kind of a hexagonal-like shape okay that looks good now i guess it's time to promote those parameters that i have also set one is for the shape switch whether you want to use the shape one at the regular slit regular size or a random size random shape so for that maybe i can just use the toggle just use a random shape okay so if the tool is checked on for this random shape use the the remeshed one if it's checked off then use the regular offset shape okay looks good now there are some other parameters like the target mesh size for the remesh so let's also copy that which is this one i'm gonna name this random size random size for the regular ones i'm gonna name this shift the parameter could be maybe there are no parameters for the regular ones okay yeah i don't think there are any parameters so only for the random ones okay so we can continue so now that i have got this base i'm gonna do with the regular ones the next thing i like to do is to use the uh create this uh circle circular mountain like shape for each cells i got a comment isn't there an option on the rematch now to ignore the border i believe there is something i really i've been looking my whole life to do that but i couldn't really figure out how if you know where that is i'll be that will be great let me know if you if you know where i could do that on remesh couldn't really there's not much parameters in remesh so i'm not sure if you not sure which ones for that adaptive maybe not yeah let me know uh if you know exactly where you can do that hans randall thanks for that okay so where was i let's create the cells so until here i have created the base so i'm gonna make this as a group all right then first thing first first thing first uh what i would like to do is to set a id to each of the primitive or each of the cells so that i can use it later and some point so after normalizing i'm going to use the primitive wrangle to set an id set an id from the primitive number [Music] right okay and okay so the things that i want to do here is this is let me try to find out what i was trying to do let me see what i was trying to do okay i am first going to connect this to some new node named as base which is just organized and then i'm going to fuse this whole geometry so that if the edge is connecting all points will be merged merged okay then let's also show up the points and what i would like to do in order to create a circular shape an interior of each cells what i'm going to do is to offset this out line curve inward um yeah inward to and smoothen out this inward lines or a curve okay i'm going to rephrase it what i'm going to do is to offset create an offset curve for each cells to do to the inward direction then if you just offset it then what you get is kind of a hexagonal hot hard edge shape but the next thing you want to do is to use some kind of a smooth functions like attribute blur node to smoothen out the interior edges to make it looks uh to make it close to circle circular shape or ellipse shape okay so that's my plan so in order to do that i'm going to pick each of the primitive and create some a inward offset just by um scaling or setting the total number of off settings then linearly scaling smaller smaller and smaller for each shape since everything is a convex shape because it is out from the voronoi just using the scale is totally fine i think if it's concave shape then that's a big problem but right now it's not a problem okay so before doing the offset i don't like the number of points on the edges so i'm going to use the resample node to recreate the points check the resample by polygon edges and make the point number maybe smaller smaller smaller you get a higher resolution or a smoother result you get maybe 0.05 is fine for this shape okay and it's time to create an offset and you could always use like something like for each primitive i don't really want to use that it's the last thing i want to use because it's slow so i'm going to try to calculate all of those offset just by using primitive wrangle which should be faster yeah i hope okay so and do too so first thing i want to do is to get the center of the each of the cells on primitive wrangle which is simple you just you can just get at p that it's the centroid of the primitive and you also want to get the total number of points for each primitive using prime points okay and for each point i would like to move it inward by the total number of layers so we also need to set define how many layers we want in inward like that let's say we want to have 10 layers okay so for each layers i'm going to create a full loop just like that and for each layers we want to move each point so we have another for loop so this is already not so optimized maybe if you want to make it more optimized you should use maybe a pointer angle instead of primitive wrangle but using primitive wrangle is a bit easier so okay thanks for the comment um i remember the poly reduced node is removing points from the borders rematches i see uh so probably poly reduce does that okay that's good to know i'm gonna try that later thank you okay where was i so get the point number vector positions get the point positions from the point number just like that and what i would like to get is the actual target point positions where to move the point for each layers which is in between the current point position and the center and based on the i value which is the number or iterations of the layers so i itself is a bit hard to use so i'm going to re fit or remap this value in between 0 to 1 first of all okay so float f is equal to i divided by number minus one which will give you a value in between zero to one for this i value which is the number of layers okay so by having the volume between zero to one it's more easier to use in this case we can calculate the target point positions which is in between the current point position and the center and by using f you can learn between the point position from this to this so if it's 0.5 then you get the point position between this one this one the middle point position in between this one this one if it's zero you get point the original point position if it's equal to one then you get the center all right so and while what i want to do is to create the new points and use it use this new point for a new uh offset lines so for each layers i would i want to create a polyline polyline and for each for each primitive i would like to create this new target point added to the polyline all right okay now i am seeing something here but the original primitive is a bit noisy so let's remove the original primitive which i don't really need anymore so remove rim zero premium okay now there's it's a bit hard to see but i can see that i am having okay i'm having the each of the cells with these offsetted curve and i can see that there is some openings in between the first edge at first point of the edge and end point of the edge so i want to close this one in order to do that we need to add the first target point position which was added to this primitive at the end so let's have a variable first tpt [Music] and if the loop if the n is equal to zero then first t p t is equal to target point and that's the point that i would like to add to a primitive at the end so that you can close the polyline shape oops yeah just like this okay looks good it's a bit hard to see okay it's really hard to see okay so next thing i like to do is to smoothen out these inner shape pointer polygon which is a bit too hard edges let's reduce the number of cells so that we can easily see what's happening here okay something like that yeah still hard to see okay so right now you have too hard edge in in interior but what i would like to have is a bit more circular shape inward it's okay to have a hot edge on the out side of the close to the edge of the cells but not on the center so we need to have some kind of a weight value applied to each of the layers and use that way to control the amount of smoothness or blurring in this case i'm going to use a attribute blur in order to smooth it out if you don't have any weight value which is this one everything will be smoothing out like this which is a bit problematic as you can see the edge is no longer connecting to each other the cell edge is not connecting to each other which is still interesting but not that i want so in order to fix the boundary this boundary of the cells fixed to the hot edge is gradually smoothing out toward to the circular shape we need to apply some weight value based on the layer number which is this f value i think we need to set some attribute somewhere around here right after i created the new point i'm going to say setpoint attrib weight to this target point with f just using f is fine i think okay going back to the attribute blur i can now use this weight attribute and now starting from zero so that zero zero means you don't have any smoothness so it is fixed to the boundary and gradually it's changing that change into the circular shape just like this looks good and you can control the whole amount of blur by controlling this blurring iterations i'm gonna set this to 50 but it's your choice here and let's also try increasing the total number of layers like 20 this is just to control the resolutions yeah so any number should be fine i'm gonna set fix this to 15 to have enough number of edges to control i mean more layers you have more detail like mountain shape you can create so it's up to you maybe this could also be parameterized but maybe not because it's not really directly visible to the visual so i'm just gonna keep it as it is okay so looks good so far uh one thing i don't like is that you see that there's some curve here because i use the smooth it's no longer on top of the surface on top of the sphere surface anymore so let's make this back to on top of the sphere by going back to a sphere geometry which is which we could go back to the this no this one yeah this is the smooth smoothest one maybe i can make this smooth and use this as a guide and use this as a geometry to snap on top off i'm going to use the object merge to get the smooth shape and use the ray node to snap the point to this smooth surface using the point to minimal distance yeah that should bring those point on top of the sphere back again okay like that and [Music] let's connect to the null now so far so good the next thing i like to do is to create a surface out of these curves and you can do that by using a skin node now skin node itself is trying to connect all the curves together so you have some buggy shape like this so you need to use some kind of options shown here either group and group of n primitives or skip and every n and primitive so in order to use this you need to know how many layers you have which you want to connect together okay in this case we are setting this layer numbers right here which is currently 15 so i can copy this value go back to the skin and this could be group of n primitives i think and paste the value here now you should be able to have a clean shape for each cells the skin has been created for each cells using 15 curves okay it looks good now the base shape for the mountain is created next thing you want to do is to create a mountain like shape by moving those points to the normal direction by some kind of a shape controller yeah so let's do that i'm going to do that again by using point wrangle let's name this set height set height okay and [Music] so we do need to have some informations for each point in order to determine which point position have with what kind of height now we already have some informations on each point which is this weight value which goes from zero to one based on the layer number so we could directly use this to control the height value as well yeah that's convenient so let's calculate let's create the height value and we could use the weight value together with the ramp parameter so that we can control the shape manually and we also want to control the the maximum height value as well so we could have that as a parameter so we have two parameters one is the shape one is the total height so let's say the total height is point two oops point two and right now the shape is linearly growing up we could try that and in order to move the point we need to have a normal direction for each point which i'm not sure if i have it right now maybe yeah maybe it's being automatically calculated but there's a bit of problem right here maybe this wouldn't give a better result so let's see if i can recalculate the normal direction maybe not maybe this point has would have some problems but since this is close to the edge anyway too much will give you a value zero as a height so shouldn't be a problem okay now i'm going back and what i would like to do is to move the point with the normal direction multiply by height okay well there's some problem here okay let's see if i can fix that that is happening where we are having a small shape yeah something like these something really small which we want to ignore it okay seems like we are having really small cells right here which is creating some problem obviously so let's see what we can do with this one thing i could think off and what if i don't recalculate the normal direction which yeah no not really okay the bottom part is okay the top part have some problems so maybe we i can go back to this shift and let's say if i rotate this in negative direction let's see what happens now the bottom part has a problem okay understandable understandable so we can go back here here maybe at this point we could calculate the area and if the area is too small then we can just remove it maybe that's one thing you could do measure the area check so some part has really small value like less than 0.001 so so for those that are really small in terms of the area we could just remove it maybe using delete node area less than 0.01 now you are you should be able to trim out those two small shape on the edge which night might not be an ideal solutions but let's try with this one for now okay now it looks good now looks good now the right now the mountain is a bit too linear as you can see which is because i'm using the linear shape here let's try to fix that or let's try to control this first of all i'm going to make it b spline so that you can have more curvy shape and let's go back to the image what kind of mountain like shape i would like to get okay so this is some so you have some ridge here you have one kind of a hill on the outside and another kind of a hills on the inside and you have small holes on the center so let's see if if i follow that should look like something okay so i'm starting to look like that make a hole control the height a little bit now looks pretty close to what i see now oh yeah i it's not like exactly the same but close enough not really good at those manual tweaking obviously but yeah i think i like the result okay so let's say i'm good with this now i start to become pretty evil already make it lower all right okay so as a base shape for the these cells i think it's good enough so let's have this named as cell and let's see what it looks like with the voronoi shape i mean the random shape with the random size a bit bigger still looks fine more like a bomb c-bomb all right like it okay so the next thing i like to create is these um bubbles surrounding these cells and you can see some kind of a gradient size changes from the edge to the center at some point it just disappears so i'm going to reuse the weight value and try to create those scale information okay so at this point what i can say is this is the base shape okay so i'm going to name this cell okay in order to in order to create the um sphere shape first thing you need to have is the point position for those bubbles all right obviously which can be created from this shape i guess because we want to put the spheres on top of this surface okay and if we look at the surface the point triangle u a point attribute we still have this weight value so we could use this weight value to control where those points should be placed and in order to place the point what i'm going to use is this scatter node if you just use the scatter now as it is you it will just uniformly placed on top of anywhere on the surface so in order to place those points specifically around deep order we need to use some kind of a density value using density attribute okay together with maybe force total count so to do that we need to specify this density value to this surface so let's do that density evil bubble okay so you could just use the weight value and try to re remap it to some thing reusable for the density now you don't want to place the points somewhere close to the mountain so maybe you can trim out some of the values out of the weight and make it zero if it's above maybe 0.2 or 0.3 as a weight so f density is equal to f weight and we can use the fit function and let's say if it we are cocky remapping the value between 0 to some maximum value that we want to use as a point position or the surface position to place the point then if it's close to the border you want to have more points i guess or yeah more points on the border and less points on the middle of the surface so 1.0 first and 0.0 second okay so i have just given the density value as an attribute to the surface point like that and let's see what hap and i realized i didn't set the maximum so let's set this to 0.2 for now connected to scatter and i can see that the scatter point is using the density value somehow to place those points maybe i can increase the number of points to 5000 okay it's more clear and let's try to place some sphere without thinking about the scale for now change this to polygon maybe lower as polygon is fine copy two points maybe obviously the sphere is too big so make this really small maybe that was too small something like that okay and merge it with the original cells and see how it looks like it's close to what we want to see here okay now we could try to tweak those maximum parameter that i've set more value you have closer you get you have these points to the mountain so i think it's okay to reduce it to something 0.2.3 now one thing it's missing is the size the scale value based on the position of the edge obviously so let's fix that as well so if it's close to the border you have smaller size and if it's closer to the edge of the middle you get bigger size so and we can determine that by looking at the density value i think if you look at the density if it's equal to one then it's closer to the border if it's equal to zero it's closer to the edge and if it's closer to the edge maybe we can make the size of the ball bigger if it's closer to the motor if we can make the size of the ball smaller that's what i well that's what i could do and that's why you want to do right after you created the scatter point so i'm going to set the p scale to each point based on the density so scale is equal to first of all get the density value and we can use the fit function like fit zero one because the density is in between zero to one and if it's closer to the border we can use smaller value like .005 if it's closer to the center a bit bigger and make it as a p scale wait a minute it might be other way around let me try okay where did it go okay so i should make this one now i think it was a other way around this should be bigger this should be smaller okay obviously the size is not that big enough so let's make it bigger so point two that's too big 0.01 nope 0.05 maybe and maybe we can increase this max value 2.3 0.25 and increase the spheres resolutions a little bit to make it look like a sphere and for the smaller value maybe point zero one is fine yeah okay getting closer getting close to what i see here yep [Music] maybe i can increase the number of points a little bit more to ten thousand okay getting better getting more evil okay i think i like it so so far i have created the base shape for dc urchin and following these shape now the final thing i'm left out with is these strips which is dividing these cells okay which looks like it's growing to a horizontal direction okay so that's what i would like to create and last let me reduce the height a little bit okay now i might also be a good idea to colorize these shape a little bit so that it will be more three-dimensionally obvious what's going on i'm going to create another point wrangle use the color node and probably i could just use this density as a color value so i'm just gonna copy the density for this one and let's name this bubble like that for the cell let's see what i could use as a color value maybe this height yeah maybe the height height could be a value or the weight either thing maybe weight is better so point wrangle color color is getting from the weight okay now i can use the color node to use those this color attribute to create the color based on this attribute you can just try to use some random nice okay looks good looks nice looks evil enough okay maybe i don't really like the shape after all okay now before going to the strip i'm going to promote some of the parameters that i created okay so let's check what kind of parameters i created i haven't used this id yet offset so 15 what was this for offset cell oh yeah number of cells a number of layers yeah this could be parameters which i set i don't need it as a parameter but maybe it's better we have it okay so excel layers so layer num 0 to 20. 1 to 20 okay and attribute blur this could also be a parameter a cell smoothness right what else scan set height yeah this is obviously a parameter you need to use which is the cell height as well as this cell shape okay what else color yeah the color as well is a parameter you could control by yourself color and for the bubble for the bubble we have another set of parameters such as this one first of all this is um i could say bubble region from zero to one scatter node how many points you want to have as a bubble bubble number and the p scale the maximum scale and the minimum scale which could be parameterized as well i guess minimum scale this is the bubble main scale bubble main scale double min scale bubble max kill bubble max scale all right and both of them could be that the maximum could be 0.1 all right that's pretty much it i guess for the bubble on the cells okay so it's now time to create a strip all right let me just test out those parameters if it's creating what i'm assuming pretty evil random shave cell layers maybe it's not really visible cell smoothness this could be visible if you make it less smooth you have heart shaped cell which is more like a sci-fi object yep okay wait a minute it's opening now that's a problem i need to fix this one uh where did it happened is it happening everything no just some of the cells is having this opening why is that let's go back let's go back and see why so at this point okay so maybe there are some this might be doing something wrong here before projecting with the minimum distance maybe i could it probably no no not a good idea that is because it's removing the center point here if i set the uncheck this one what happens have some problem here hmm funny wonder if it's already being having some problem right here let me show up the point number oh that's too noisy okay what if i don't use the ray node without the fuse see what happens okay this is doing good but i do see some openings i still see some openings here why is that why is that let's go back to this one maybe there are some problem with this part right here which is not closing obviously but if it's not closed then by using this this should give you some problems so it should be okay maybe a problem with the skin node might be possible so after the skin maybe i can fuse it then set the height okay that should fix it okay okay so i could still use the ray node all right where was that so [Music] yeah to create the strip in order to create this tip i'm going back to where i have created the base and things that i want to do is to create a in between like some kind of a space with a bunch in between a bunch of cells like some somewhere around here or maybe somewhere around here somewhere around here and you don't know how much strip or a split you want to have maybe it could be three could be four or five or something like that so let's also make a parameters as well so looking from the top view what i'm gonna do is to the current shape is like this and i'm gonna split the shape into some numbers like four and trim each of the cell set and move it outward like this and by doing that you have a space in between the cells and that's where you're going to create a strip shape that's my plan which is this one okay so first thing first i need to create a cluster number of clusters to move uh outward okay without changing the size i'm just moving to a single direction for each cluster going to a to the outward direction maybe on xc plane so it the first thing i would like to i need to do is to create a cluster and to do that maybe i can categorize or create the cluster based on the angle for each center of the voronoi cells okay so i can calculate the angle based on the xc plane for each cells and based on this angle i can divide it into like five sections or three sections and so on to make it as a clusters that's my plan okay so shall we do that shall we do that so first thing first what i need to do i need to do let me think what's uh what was that that i need to do okay so first i am going to create some a cluster id to each of the primitive okay from this base so primitive wrangle clustering okay so first let's calculate the angle for each center of the voronoi cells which you can get the center by getting the at p and you can calculate the angle on xz plane by using a tan 2 using the center at z and center x which will give you a volume between minus pi to pi in total 2 pi it's um in order to create out of clusters it might not be a good idea to have a negative values so i'm going to make it positive by adding pi so that it'll be in between 0 to 2 pi right now now that i have this angle value it's time to define how many clusters you want okay let's say five maybe that's too much well i don't know okay so if you have if you want to have five clusters and first thing you want to do is to divide this angle by five or by five so if if you divide 360 degrees by five you get 72 for 72 degrees okay so from 0 to 72 if the angle is in between 0 to 72 then the cells is in the first category or first cluster if the cell's angle is in between 72 to 144 then the cells is in the second cluster and so on so that's how i'm going to determine that in which clusters the cells is in okay so [Music] first i am going to calculated division angle which is pi multiplied by 2 which is 360 degrees divided by this cluster number so you get 72 degrees in this case because the cluster number is 5. okay now next thing i'm going to do is to use this step angle or class triangle with the angle of the each cluster by to get the division id or cluster id by dividing angle by the division angle and get the floor value you get a value in between 0 to 4 which will be directly the cluster number okay let's check this out so i have created the cluster attribute to primitive and let's try to visualize it see if we got that right i think we gotta say this is for the primitive [Music] so these primitives are equal to zero these are equal to one these are equal to two three four so seems correct in total we have five clusters based on the angle and if we change the number of clusters like three we have in total three clusters zero one and two so in between the different clusters that's why you want to have the rich line or split lines or strip lines space i mean so in this case somewhere around here i guess like that okay so far so that's good and [Music] let's just try to move using those information in the same uh wrangle node so we can do that by having this cluster id as well as the the as well as by determining the the actual direction where we want to move to based on this cluster id so that is that should be a multiplication of 72 degrees in this case if it's five but if you just use 0 or 72 then it will just use the edge angle so maybe using the half value of 72 so that's 36 might be good as a directional angle starting from 36 and then multiply adding the multiple number of 72 might be a good idea i don't know if i if that makes sense i'm just going to try it so so moving angle is starting from the [Music] division angle multiplied by 0.5 which is 36 degree plus division angle multiplied by division or cluster id so we can make we can write this more simpler something like that and this is the actual moving angle where the why the set of clusters we want to move to so maybe for two cluster two this is the direction we want to move as a whole set and this should be the angle for that hopefully let's see so in order to determine that we need to convert this angle to the vector value which we could do that by using again a trigonometry vector moving direction is set cosine move angle zero for the y and sine moving angle for z multiply by how much you want to move actually as a mount okay so we want to let's say i want to move like 0.2 to this direction and in order to move the point since we are at the primitive wrangle we need to access each of the point of this primitive so get the prime different points use the for loop and move this point to this moving direction and then update the point attribute p with updated police position okay i think it's going all the way to the negative direction seems like yeah seems like the angle is correct but it's going to the negative direction so i am going to make this moving direction negative so going outward all right looks good now that i have splitted the bunch of cells as a cluster and if i change this value you can define how many clusters you want to have like that maybe some if if it's if the number is too big you have some kind of a weird cluster so maybe you want to make it smaller four or five looks good let's see if this could also work with a random [Music] pattern make this random size smaller and seems like it still works yeah even for the random now the rich edge the strip line is a bit more random-ish of course but still works still works okay that's good because i'm using the really simple rule here okay so that's good to know going back to the regular shape let's go with the five clusters now next thing i would like to do is to create a connection between those um edges splitted edges looks simple but it's not that simple i think you need to have some information how you can connect these together and right now i don't have any like informations in order to connect these two so i need to create that as an attribute okay so in order to do that in order to do that first i need to know if i need to know the i need i probably need to set some id value before splitting like at this point i need to know that before splitting this point shares the same id and even if it's been splitted so that we can know that this point and this point used to be the same position okay so before moving before moving the clusters i want to uh record or create some attributes to to determine that to specify that uh these points used to be at the same positions okay so i'm gonna do that by using point triangle and in order to use the same value for a same positions maybe it might be a good idea to first of all fuse it and use this fused geometry as the information because fuse by using fuse you can merge all those uh points which is at the same position so we can use this fused point number as an id for each point okay so i'm going to connect this fused geometry to the second input and the base to this first input or this point wrangle transfer id and i'm going to create the id value for each point from retrieving from the merged fused geometry d is equal to near 0.1 p that's all i want to do so by doing this you are using the current point positions in order to look for the nearest point from the fused geometry and there's only one point on the corner on the intersected corner so you only get one unique result as a id value and that value will be transferred to each of the point at the corner right here we have three corners so we have three points right here right now and each three points will share the same id which comes from the fuse node that is the same even if it's been splitted so this point and this point should share the same id let's check that let's check that out four point okay so one this is one o 02 is it it's a bit hard to see so this is 19 this is 19 on the corner so and this is 19 on the corner so yeah sharing the same id okay maybe there are a bit too much in between points so let's see if i can remove those first of all using maybe facet as much as possible so using facet node i can use a removing line points try to remove if it's too straight but this will give you an opening so forget it so this is good okay now that i have this information sharing the same id it's time to use this to connect to each other uh the strategy or the method that i'm going to use is to first of all create the line connecting each edges then create some lofted shape or skin shape to connect these lines together to create a strip sound simple now in order to create a lines we need to look for one of the edges either this edge or this edge if you look for if you try to connect the lines from both edge then you get the duplicated lines which is not ideal so we let's just pick one of the primitive one of the edge on one of the clusters and from what from one of the clusters create the line in that case we could also like keep the order of the lines keep the direction of the lines together same so by lofting creating the love geometry we don't have like flipping in the last so in order to do that um in order to determine from which uh edge we want to start creating the line we could check the cluster id again for each cells and if maybe the edge can the line can start from where it touches the cluster bigger than the next one or smaller than the next one either way it's fine okay so that's my plan okay so let's do this and in order to create the lines i am going to i'm going to use the point wrangle okay now and so these are the points that i want to look at and at this point we don't really know which point is going to be picked from this point wrangle but let's say if we can create the conditions inside a point wrangle later so first of all i'm going to find out all the um corresponding points say sharing the same id to the self by using find attribute call for a point class using id sharing the same id which will also give you the self point number so we need to remove that one for sure so in for each point get the point number and the first condition we need to give is if the point is not equal to the current point number obviously that's the first conditions you need okay all right now let's get the the second condition is that if the point let me check the primitive wrangle primitive attribute and you see that for each primitive you have this cluster attributes so let's this one probably have two this one probably have one so if the point shares the same a primitive i mean same primitive cluster attributes some somewhere around here even though you have a similar ids same ids find at the positions but if you if if if the other point shares the same cluster id then that's not what you want to connect with as a line you want to ignore that so that's another conditions you can create so in order to do that we need to retrieve the cluster value from the point which you can do that by first of all get the primitive number from the current point so prim and in order to check with the other point we need to have addition uh the second primitive number so i'm gonna say the prim one is the self primitive number and primitive two is the the target primitive number okay so point prims zero pt num first one because it should not be connected to the other primitive okay point prims zero pt okay and cluster one is point no prim zero grim one cluster stream one cluster two prim zero cluster prim two okay so we could use these clusters two different crosses to check if we can connect the lines or create the lines or not okay so the thing is thing is there's always a rules that the clusters next to each other is equal to um value plus one so one plus one is equal to two two plus one three three plus one four and this is a regular place where it flips the four is the last number so if you mult add it by one it goes back to zero okay that's we need to consider about so by thinking about it we could create the condition something like this cholesterol one plus one and create the modulus calculate the remains by the number of clusters in this case five and we have that information previously right here we could copy this parameter bring this as a value num cluster num cluster calculate the remains with the number of clusters and so this will give you a volume between 0 to 4 always and if it's equal to cluster two then that's when you want to create the line yeah i think so oops what did i do okay so this should be the conditions to use and let's see if it works add prim zero polyline polyline between the current point number and the pt and nope didn't didn't create a line did it the number of primitive didn't increase so maybe it failed okay let's see why so i have number of clusters maybe the condition is not working maybe this part is not getting anything probably first of all i want to make sure if this condition works so i'm going to apply this cluster or just random value see if the condition is working for some of the point yes it is okay next i will check if the cluster is being retrieved correctly yes for cluster one yes for cluster two yes okay so seems correct seems like i have get got the correct information until here so maybe this right here is something that has some problem okay this is the problem spell mistake polyline okay so i don't really like this one here the reason why i have a split like this is because maybe it's calculate the angle from this x-axis or this axis right here so maybe couldn't determine whether this cluster or cell is it at the right cluster or the left cluster okay so maybe we need to have some kind of a angle offset in order to make a more accurate uh precision accurate um cluster clustering so the simplest way i could do that in order to create a kind of angle offset just to use the transform node transform node before creating the cluster ids now i can just rotate it to y and axis and that should give you a better result maybe this could also be parameterized for final tweak okay looks good so now that i got these lines it's time to connect these together to create the strip but wait what do we want to do with this strip i what i want to do here is to instead of creating the hole like this i'm going to i would like to create the bubble like i did for these cells so somehow i want to create a base point for the bubble from these line information and what i could think of is to create a zigzag contour just like the vertical lines and maybe smoothed out on the center then go back to the hot edge just like we did for these cells we want to do some similar things for these lines okay so to do that first of all i would like i know that the number of lines for each strip is different so we cannot directly use skin together with this um group n of primitives because it's fixed to one value so instead we need probably for this one we need to use some kind of a for loop unfortunately or maybe there are many maybe some optimized ways to do this but couldn't figure it out well anyway let's call this lines and i think it's a good idea to split the cells base and the lines so that we can work different separately so for the lines i'm going to set the group set frame group line print line and split it okay so for the cells this one we can connect back to right here which should do the job to create the cell shape now what we need to do is to fill this gap with a new geometry the strip geometry okay so just this one okay so first of all i think it's a good idea to again clusterize these uh set of lines using the same attribute for same strip so that we can use something like for loop for each loop so going back to the lines i'm going to create an attribute for each primitive set pre-maturity supreme address let's name it line id with using the cluster id okay cluster one so by using this line id i can now pick each of the line set using for each named primitive using line id instead of the name there you go you can get a bunch of lines as a one strip now it's time to create a strip if you just want to create the surface i can i think you can just use like something like skin now this has some problem because the order of the line is not based on the height so let's reorder it first of all using sort sort the primitive based on why now that will fix the sort problem but what i want to have is a these the exact lines and use that line as a base point point position for the bubbles inside so instead of having the horizontal lines i'm going to create this vertical zigzag lines somehow from these horizontal lines going back to the sort what i could do what i could do is first of all doing resample so to determine how many points or how many layers i want by setting the maximum segments if it's equal to 10 you have you will have ten layers maybe that's too much let's set the seven okay now for each uh point i just want to connect it like this for the first point i want to connect it like that second point connected like that to create the zigzag lines and so on pretty simple yeah and to do that to do that i still need to set some [Music] informations to each of the point to create a line yeah and what kind of information do i need to set let's think let's think um um first of all a integer id to each of the point based on the point id point number for each primitive okay so i could do that using primitive wrangle i'll call it cid get the point list from the primitive for each point um set an attribute point call cid to each point and i i can just use this i so if the i should be the value starting from 0 to in total six because we have seven points for each primitive so starting from zero zero one two three four five six and so on for each primitive wait which in result you should get you should uh each of the line shares the same id for a same position okay let's check you can check that by using an add node to connect those points which shares the same id attribute cid right like that okay that looks good and now i don't need the horizontal geometry anymore maybe before going before creating the vertical line i can just remove the primitive and just keep the points okay looks good all right so if you make this and if you combine this with the [Music] cell shape looks close to what i want to have as a result but somehow it is being offseted not really sure why okay that is because i am using ray node here maybe i shouldn't use ray node after all yeah i should just remove this ray node it's not doing good okay this looks good now next thing i would like to do is to make the inner layers smoother because every edge every zigzag line is a bit too hard edge right now but when it comes when it comes closer to the center i want to make it smoother just like i did for this cells okay so to do that we need another this attribute blur with the weight so to do that we need to set the weight to make it smoothing smoothed out okay so [Music] let's see where we could do that um and thing is that we don't want to smoothen out on these edges as well same as the boundary on these edges so we need to think about that as well okay anyway we could do that where where we can do that let me think maybe right after i calculated the cid i can create the point wrangle name this weight and for each point first of all let's normalize the cid in between zero to one so that'll be easier to use so f is equal to c i d divided by the total number of points in this case this so i'm going to copy this parameter paste it right here number minus 1.0 this will give you a volume between zero to one from left to right so if it's 0.5 then that's in the middle okay and that's where you want to have a maximum smoothness and if it's equal to 0 if it's equal to 1 then you don't want to have any smoothness so for those cases you can use sine function with the multiplication of pi as an angle to this f so angle is pi multiplied by f which will give you a value between 0 to pi and then you can calculate the sign function which will give you a volume between zero to one like a mountain shape like a mountain wavy shape okay and that should be the value you want to use as a weight so weight is equal to w and let's see if we can use that so before um using the attribute blur right now the point scattering is a bit too random so i'm going to use the resample node to make it a bit cleaner okay probably using the resample by polygon edge with smaller value like that okay looks good and attribute blur uncheck border points and set the weight okay now the there seems to be some problem here let's see what happens if i increase oh okay a lot of problem here let's see why first thing i could imagine is because because first of all i want to make sure that these lines are not on the same i mean not no duplicated lines are exist i can check that by using convert line so the number of parameters didn't change so no duplicates so and this should be okay yeah i'm not checking this one cid should all be okay the weight shouldn't be a problem i'm not sure if this is okay okay let's check the weight value wait wait wait so yeah it's obviously wrong where the point is at the start point it should be zero but it's saying minus point five zero okay so obviously that is wrong why is that number of point seven and let's check cid cid is in between should be in between zero to wait a minute seven huh okay so this is where i did wrong i didn't really need to make it negative by one i can just use the number as it is okay this should give you a quick result it's close to zero so that's fine okay going back to the attribute player okay oh more or less what i would like to see what i like to see here so you can see that only the in inner edges are being smoothed out this doesn't really need to be really high i guess maybe equal to 10 is good enough okay but as you can see there are a little bit of problem on the top side because these point also has been smoothed out and offset it a little bit because of the smoothness without smooth it didn't move okay so i guess i want to fix those end point meaning make the weight equal to zero for those endpoint so we need to determine where that is on this wrangle and to do that let's see what's the best way to do this i think it's easier to do it right here because it's already being connected as a primitive so it's easy to get the start point and the end point from this primitive so let's do that what i'm gonna do is to use the primitive wrangle get the list of points and just get the first point and this end point and for those points set the weight to zero that's all you need to do hopefully okay let's check now the end point doesn't move anymore oh yeah that's good okay now that i have these lines or maybe before making it smooth i can just create the smoothest surface by creating the skin although there are too many lines right here which i don't really like so maybe i want to fix that as well where can i do that where can i do that maybe at this point i can use the facet node remove inline point yeah this will clean up the point if it's too straight can just remove those points but the skin shape becomes noisy which i don't like it okay the facet note can be done before moving the points before and where did i do that ah forget it forget it i'm just gonna go with this and for these i think there is some maybe i can just use fuse node better yeah oh well if i make this shaded smooth if it's not obvious that's good maybe not that obvious yeah smooth enough so i think i'll say it's okay which is really not but yeah okay so what i wanted to do is to create the point position for these bubbles from these edges so that's what i want to do in the last to do that i have already resampled it so maybe this point could be the candidate for the a the bubbles now since i have used the attribute blur it should be offseted from the original surface so first thing i want to do is to make it make this back to [Music] on top of this skin surface so that it doesn't go like buried inside the skin using the point minimum distance okay now that i have this guide lines it's time to create a bubbles using another copy two points i want to also export the skin shape as well so i can either bring this or recreate it outside well i'll just bring this i'm going to create the group node to this skin let's name this strip merge it with the curve and split it outside the loop get the strip and for the curves i want to use it as a base point to place the bubble just this one now for this one as well we need to set the p scale because right now it's too big obviously so i think we could reuse some of the part some of the things that i set here all right so i'm gonna copy this one bring it back to this one and we don't have this density but instead we have a weight value so replace this with weight there you go you have some kind of a value which looks like the uh the edge shape is a bit too big maybe there's too much points for by resampling well i can't really define if it's good or bad let's just merge it together to see but before doing that i'm going to organize this so this is a strip okay and this is a strip bubble and let's also set some colors based on the weight for this bubble okay as well as this trip i don't know what will be the best way to describe this color for this trip maybe i can just say i can just create a a single color for this one zero okay now that i have four informations or four geometries it's time to connect those together see what happens if i color it yeah now the size after it's not that bad on the edge maybe but maybe a bit too big so it's your choice i mean i can go back here and maybe for the maximum i can say maximum multiply by 0.5 well maybe keeping it as it is might be good as a contrast it's not really close to what you see on the real image but i guess i like this so it's up to you how you change these values okay looks good um [Music] maybe i don't like those points on the edge i want to fix that where is that coming from oh yeah that's because i have set the weight equal to zero for these one so in order to fix that i'm going to create additional attribute let's call this h hval just copying the same weight value but just gonna ignore this one for hval so and instead of wait i'm going to use h ball as a result still not still not doing thing what is that hmm i thought this would be i thought this will fix it let me check the value hval hval h2o the so so zero one zero so it looks correct looks correct p scale okay it is so this should be where i should use the h bell okay good all right okay so that's good maybe this is too vivid let me change the color to something more why i cannot change here okay i should use this one magma send twilight oh yeah all right okay like it so i think all over everything has done everything has been done to create the geometry it's time to organize this a little bit and finish this okay so first of all let's bring some parameters which i have set for a strip so what will be the parameters transfer id nope clustering yeah so first of all the number of clusters number of clusters i i guess i should say cluster okay move um cluster separation i guess or strip clusters strip size okay zero to one zero to 0.5 should be good enough lines no parameters split nope resample this could be a parameter yeah this is a strip horizontal number or division maybe one to twenty this one is okay this one is okay that note this resampling is also important i think um this is base this is to determine the vertical split based on the length so strip vertical split length from zero to maybe point five okay what else else p scale yeah if you want to change the p scale but i'll just stick with the original one that's pretty much it i think yep everything is set and i am ready to control the shape with anything i want first of all color oh yep all right so if i make this random shape it should still work one thing i forgot to have as a parameter is the offset angle for a clustering which is done with this transform node float cluster offset angle zero two shouldn't be that big forty five okay where did it go copy it okay so everything is pretty much done first of all offset is size of the hole on the top and the bottom fits if you make it zero it will become close to sphere which still give you some weird shape and the vertical divisions is for the [Music] regular shape how much you wanna divide on vertically horizontal divisions is how much you want to divide horizontally right okay and if you want to make a random shape i'm using remesh node to make it close to close to centroidal voronoi shape tessellations like this and you can change the size of the cells still have this strip you can change how many layers you want to have for the cell more cell more layers you have detail cross sections you can create this is smoothness more smoothness you have more smoothness for this shape less get harder shape cell height obviously okay this is also good control the height control the shape of the cells bubble region now this is to control the bubbles if you make it higher the bubble get close to those mountains which looks like a l-shape 0.2 is good 0.25 and the bubble number straightforward that's too big and the bubble minimum scale bubble maximum scale straightforward all right cluster offset angle this is to define the cut the angle calculation basis yeah it's just to tweet just to coordinate cluster number how many clusters you want to have which means the number of strips to oops okay i think it's gonna give you a error for value more than three i mean less than one so i'm gonna limit the cluster value so that will be should be more than two should always be more than two which makes sense i guess okay what else strip size you can create the size of the strip really big which becomes something else as a shape huh something maybe not a sea urchin anymore but something else right strip horizontal divisions that's the resolutions of these strip in terms of the bubble you have multiple numbers you get maybe this is a bit too artificial and this is for the verticals split yeah okay and that's pretty much in and finally the color every color looks good oh yeah i like it really looks like a sea creature deep sea creature and maybe since the whole shape is pretty much close to sphere maybe i could use another like transformations now to make it more ellipsoidal shape somewhere where is the best place to do that probably light after i have created the voronoi fracture somewhere around here maybe some something this one let's see if i add additional transform node and scale it only on x and z direction see if it still works just like that to create the um ellipsoid shape because we do see something like that as a sea urchin shape like these or sometimes it looks more like a x shape or more of a what kind of shape is this flat on the bottom round on the top maybe we we might also want to control that as well and still works okay so maybe i would like to have this kind of a control as a final shape yeah i like this shape we could do that by instead of using point scale transform node i could use the point wrangle to control the overall shape using another [Music] ramp parameter i guess and let's see um scale value is based on the point height it makes sense so let's first get the boundary box minimum and maximum positions using get b box and normalize the height value of the current point positions by using fit minimum height and maximum height and convert it into in between zero to one now that i can use this value with the ch ramp okay and i want to use this curve to control the scale at each point so this should be the original point position the scaling and finally i am going to create the scaling value by multiplying h by maximum scale let's go with two okay so if it's straight line like this then everything will become two so it be multiplied by two i want to scale it on only on x and z plane so set sc one sc like that okay now's the time to you control this curve so that i can control the shape it's not really straightforward how the curve would look like to create like a ball like shape like that oh yeah yeah yeah all right slimy it's already looking interesting something like this how's it how is this yeah i think i like it onigiri like shape and let's see if this could still work yeah did nice for regular shape does this yep it still works so good we now can control the overall shape as well let's have that as a additional parameter okay that's pretty much it and let me know if you have any questions i don't know if there's anybody watching still but thanks for all the comments and i hope you liked it okay i'm gonna bring this shape parameter okay where this should go some shape scale overall shape skill max overall scale all right and for this scale maybe i can make it four as maximum oh what happened what has happened okay all right looks good thank you very much for watching [Music] so far it took like more than two hours three hours to create this one that was a long stuff uh thank you all for who has been watching this one hopefully you enjoyed it um i am going to upload the file as soon as i finish the live stream uh to the github the link will be pasted on the description page of this youtube live stream and the video is going to be archived so you can watch it anytime and you can also download the files from the link which is also being pasted on the patreon so if you're interested in this kind of uh algorithmic shape i'll be appreciate if you could support me and somehow but not really necessary if you find it interesting okay thank you very much for watching and i guess i'll go on asleep right after i posted the file okay that's it yeah i i personally satisfied with the shape that i finalized with yeah hopefully you do as well good night and hopefully see you next week with the new topic okay you
Info
Channel: Junichiro Horikawa
Views: 53,874
Rating: undefined out of 5
Keywords: houdini, sidefx, live, tutorial, procedural, procedural modeling, parametric modeling, parametric design, parametric, fabrication, digital design, computational design, 3d, design, isosurface, lattice, structure, 3d modeling, modeling, computational, generative, line drawing, drawing, illustration, fractal, reaction diffusion, celullar automata, simulation, trail, particle, vfx, mitosis, magnetic field, field, volume, rendering, computer graphics, visualization, algorithm, motion graphics, graphics, remesh, quad
Id: qzroKFLDIvk
Channel Id: undefined
Length: 181min 37sec (10897 seconds)
Published: Wed Apr 20 2022
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.