Houdini Algorithmic Live #122 - 3D Bubble

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
okay hello can you hear me well uh hopefully this is online okay so let's get started this is 1am Japan time oh looks I would like to start the a live stream for this week so this is a live stream called Houdini algorithmic life a tutorial live stream for Houdini which I've been doing um weekly at some point and the topic for this week is to create a kind of a 3D bubble simulation like you are saying it right now starting off with some random position of the bubbles and make some clean um separations between the bubbles together with these uh curved inner wall for each bubble using more of a fake pressure value for a for it from each bubble using the volume value for each cells bubble cells so if you look carefully to each bubble can notice that there is a some curve curvedness on each cell like that you see there is some the wall is not flat but have some kind of a curved wall inside and that is coming from the pressure from each cells based on the size of the cell or volume of the cell so that's what I'm going to try to simulate or fake I mean this in the one that I'm going to show you today is not physically not based on the physics but more of a visual oriented um process so I'm just going what I'm going to create today is more of a based on what I saw from the bubble images so I don't think this is physically correct but at least it looked nice in the end like these and for the bubble simulation itself how the cell moves it's based on the algorithm called Lloyd's algorithm which is to implement the boronoi centroid of oronoid tessellation which I did that previously for 2D surf or 2D plane or to the surface I mean 3D surface but you could also use it for a volume so that's so I'm going to show you how you can do that use those Lloyd algorithm for volume for today's tutorial as well so the main topic is to do the bubble cell simulations using centroidal lorenoid tessellation and how you can use the pressure to create a curved wall for each bubble cell like this for a nice rendering as I said this might not be physically correct but at least visualize to make might look nice okay so that's what it is and let's do this from scratch okay in the end I'm also going to share the file with you you can download from my patreon page so if you just want the file then you can wait till the end when the stream ends I'm just gonna upload it to the page so that you can download it if you're interested in um process then please join Okay so start with making a geometry node and I'm gonna stop by creating the initial base geometry in order to create a bubble like structure it could be any closed geometry uh like sphere or box or any kind of shape but the sphere could be a uh good for initial testing so maybe later I'm going to change the initial geometry to test with other types of hydrometrees uh close geometries it might not be a good idea to use something like pig head or rubber toy because these have a really thin surface where it's a bit hard to create a bubble but we could also try that if we have enough cells then might be okay with the even with these shape but the better base shape is to have more thick lull like these one or a cube or something like that so I'm gonna start with the sphere now I'm gonna make this polygon five for frequency to make a little bit high-res okay now first thing first let's create a initial cell bubble cell from this volume now to do that I'm just going to use a voronoi structure so as you can as you might know the basic the structure of the bubble is basically just a foreign fracture but in order to stop making the floranoi cell uh inflated it looks like a bubble shape so the main purpose here is to create the main process here is to create the uh fortnite cells first then make it inflated then based on the pressure based on the volume for each cells make a pressure value and then pull or push the walls inside to make it look like a bubble okay so that's what I'm gonna do so let's create a volume out of these base shape to scatter the point inside the number of Point depends how much of a cell you want to create but since we're gonna use the voronoi 3D voronoi if you have too much points then that's that might gonna be really slow so especially if you want to do the animation so let's try to keep the number of cells small for initial test okay so I'm going to create the new node to have all the parameters that I can control later in this case a number of cell first number or number of bubble cell number of bubble cells okay let's say it's from 100 100 let's go with 40 for now paste this here so that we have 40 cells inside this sphere volume now what I want to do next is to make each cell and each make the each surface of the cell to be flat as possible right now the sphere part you have these um meshes discrete meshes that's been trimmed by the voronoi cell of oronoi wall what I want to make what I want to do now is to make these face flat and so that it'll be easier for me to do the inflation later okay so to do that what I'm going to do is to just use a divide node then check the remove shared edges oops now that deleted everything okay might be missing something okay I just I don't really need to do the remove Shear edges for inner walls just want to do the I just want to remove the edges on the outside of the floor noise so if you look at the voronoi no there is an option to determine whether if it's inside or outside I don't want to do the this operation for inside I just want to do this for outside which is the surface so click the Divine node set it to outside then only the outside surface will be will lose the inner edges and keep the outer edge or naked Edge like these it's a bit hard to see so let's normalize this to see how it looks like okay as a primitive okay so it looks like these now next thing I want to do is to if you turn on the point you have these points inline points on each cell like these now I don't really want to have these inner points in line points I want to make each Edge to be straight so that will be easier to again it's easier to create the inflation later by having these it's a bit hard to control the inflation with the same like quality so in order to remove those inner inline points I'm going to write some uh Point wrangle to to just remove those points which is in in line so the rule here is that the point that I want to remove has two neighbors if this is the point what I want to remove then it has one and two Neighbors if it's on the corner then it has more than two neighbors so those points are shouldn't be deleted but if it has two neighbors like these points like this and this as a neighbor then those points could be deleted so let's count the number of neighbors by using neighbor account for each point and if the end count is equal to two you can now remove that point okay now if you could if you see it carefully you you can see that the line has been straight straightened like that okay now the only reason why why I did this is to make the inflation cleaner so um there might be a way you don't need to do these steps but I found out this is the best way to deal with the later process so bear with me so remove inline points oh right next um what I'm gonna do next is to um have each walls the ID based on the Primitive numbers so if you also look at the inner walls you have those primitive oil faces so I want to have each faces to have its own unique ID which is going to be used later as well so what I'm gonna do is to just copy the Primitive number which if you see it on Geometry spreadsheet each primitive as its primitive numbers I want to pass this number to an attribute as an information which I can then use it later and that is also necessary to um create a average pressed wall I mean in average curved wall for each boronoi now you'll see it later but for now let's just copy the Primitive number as an ID so I'm going to call this P num as an attribute name coming from primitive number that's all I'm gonna do here okay next um next what I would like to do is to okay I think before going into the actual bubble making let's try to First create a simple simulation for centroidal voronoi tessellation which I have also showed you on uh previous online tutorial live which was called like weighted centroid of oronoid desolation if you watch it maybe you know how to do it but I'll show you so currently let's say the point of the boronoi is a bit more randomized like if you uncheck this relax iterations for scatternode you have a bit more randomized Point position then you have more randomized cell size like these and if you want to try to make each cell size as same as possible or same size as possible as much as possible what you could do is to move this center of the cell points to a specific position so that the cell the size of the cell becomes close to each other or saying to each other to do that you can use the algorithm or the process called centroid of voronoid tessellation and the algorithm for the implementation is called Lloyd algorithm and the process is pretty easy you just what you just need to do is to First have the center of the vorinoid like this has a coming from the scatternode in this case create a 3D volanoid like this then calculate the centroid of each cell in this case like this let's say this is one of the cell and by calculating the centroid of this cell you get each point for each cell one point for each cell and use that new centroid position as a new center of the voronoi so instead of using scatter points use the centroid of this voronoi to recreate the voronoi again do that step again and again and again and and in the last you get a similar size of foreign cells in the end so let's do that on the solver I'm going to connect the point the initial points to the solver and going to connect the sphere which is going to be scattered I mean which is going to be fractured using vulneri to the second input then first you create the voronoi cell boronoid fractures using the mesh input and the points like this then next thing you want to do is to calculate the centroid or for each cell so you need to know the attribute for each cell in this case you could either use piece or cell PT probably I'll use cellpt that's the num that's the point number coming from the Point input and use the measure node to calculate the area per piece based on the cell PT attribute which will create a and I need to create I need to calculate the centroid in this case which will create the centroid information and point the center point information for each cell in this case this is for cellpt equal to zero which shares the same Center Point here and for cellpt equal to 1 which has another uh Center Point like these so what I need to do is to use those cell center point as a new Point information for a new scatter overnight fracture so to do that what I would like to do is to update the previous Point position which is these with a new centroid Point position coming calculated here so referring to the the result of the formally centroid here we need to find out the corresponding centroid information which is stored in primitive attribute so if by searching for the cell Point attribute on primitive you can get the centroid so whichever cell Point PT you choose if you are searching for the value equal to zero then you get you always get the same result anywhere so all you just need to do here is to use the function like find a trivial coming from the second input we are searching for the Primitive attribute the attribute name is cell PT and this lpt is actually the PT number of the previous point okay this should give you the search result one of the search results with these queries and the search result is the actually the Primitive number coming from the second input and there from here you could get the centroid value using print function then if you replace the current Point position with the centroid the distance between each point should become a bit more evenly this distributed and if you repeat this processor again and again you have more cleanly distributed points as a result you get a similar cell size for each bornoy now let's check so if you go back to the solver and play it you can see and if you can see it with this live stream but let me make the point size a bit bigger okay so if you if you if I play it you can see it at the point is being distributed cleanly the distance between each point becomes even to each other and as a result by using it as a voronoi cell center you get more of a hexagonal surface shape and if you look at a 3D shape you get similar size voronoy cell and that is really close to what you see as a bubble shape or bubble structure okay so that's the algorithm for centroid of oronoid tessellation and that's pretty simple and the latter process is all about making how making the bubble like visuals using more of a Precision process okay so let's do this okay I have some comments hello everybody have you thought of creating a procedural pipe system sometime on your translation the random pipe system which would sure can bend obstacles and stick to collisions properly also going on fancy looking I think you're talking about like something like like sci-fi pipe structures or something like that you see on I don't know factories or something things like that yeah I love the kind of structures with love to try that as well yeah yeah yeah I think I'll I would like I would like that kind of idea so yes that's on my list for sure Okay so [Music] what was I so let's try to create a visually nice bubble shape from here so why what I want to do here is to just to try to create the inflation now you could always use Vellum but the Vellum is a bit too slow and if you want to use these like animation together then my Bella might not be a option because it cost a lot of like processing time so let's try to do this procedurally see how this work okay so now that I have these uh boronoi cells which currently is like these kind of shape moving like a bubble next thing I'm alive what I would like to do here is to um try to um create the each cell inflated obviously and I think I need to do this piece by piece and combine them together to have the average uh wall positions so what I'm going to do is to I'm gonna pick each cells from now for example pick the cells okay can click it right now let me save this reset the viewport okay now I want to pick each cells like this and try to inflate each cell like a balloon do this for each cells on for vornoy and in the end I'm going to get the average Point position for each walls to get the average wall uh positions and for example so let's say if you have this cells and you you have another cells on the neighbor like this one and what I would like to do is to create the inflated geometry for this one and this one and the result you get intersected like walls on the intersections for sure and in order to create a curved wall you need to have kind of a different inflated result for a different inflated strength for each geometry I think so probably based on the volume of the geometry how big it is you could probably change the how much it could inflate or not and later combine these two intersected walls to have a lurped mole position to give a final result so for example if this wall has this much shape and if this cell has a smaller walls then in the end if you lurp these two walls together you might have this kind of uh wall shape might be hard to explain so let me sketch so if you're looking from the side view say you have two cells if you inflate one like this one and if you inflate the other one like this one you have intersected more like here and you want to somehow get the average of these two walls like this or maybe like that to have a low in between two four noise cells and continue doing that with the other cells you'll have a nice bubble-like wall surface my inner wall surface and do the same for the outside I mean for the outside there is no intersection so you can just use whatever the cell try to be inflated as so that's the plan and let's try to do that so first thing first in order to create inflation you need to have a bunch of points on each surface and currently there are no points inside the surface so let's try to create that and the point position and number should be shared if you are sharing the wall so you need to have the same point numbers and same point positions for each inner walls if you are sharing the same wall so the wall for this cells on here and wall for this cells at this position should share the same point number as well as Point positions okay so the best way to achieve that is using the subdivide I think I'm going to use the subdivide for each cell to create the inner old vision okay forgot to switch the Okay so what was I so um what I was saying is that the the in order to have the the wall the intersected wall here for this cell and the cell on the wall the same wall for this cell here you need to have the same number of points and same num the same point positions in order to get the average for each point position to create the curved wall to get the average wool value so the best way to achieve for each shared wall to have the same point position and the same point point send same point numbers is to use subdivide function so let's do that and before getting into it I might want to fuse the point position before removing the inline points just in case because there it might not be fused in this uh point on the corner might not be fused before so just to make sure that it's been fused okay it's it has been fused so this might this process might be necessary before removing the inline points okay so let's try using the subplot node okay and the option that I'm going to use is to is maybe just using the sub div cut mold clock is fine but I'm going to override the weight attribute so that if I increase the depths what I want to achieve this to make sure the edge stays at its Point position so I want to make sure that the I am overriding the weight attribute and make sure the crease weight is like High Enough okay and I I think I cannot just place this subdivide just right after this um whole voronoi structure shape because it's just gonna merge everything if I just do this like if I just do like this so I need to do this for each cell I think so let's do this for each cell geometry so to do that I'm going to again promote an attribute like piece or cellpt probably I'm going to use this lpt based on the point number coming from this output so for each cell PT geometry case change this to cellpt which will get each cell geometry like these I'm going to subdivide it by doing it you can keep the number of Point number number of points on each surface the same and position of the point to be the same position and the override crease weight attribute is also necessary so that you don't get rounded shape you don't want you don't really need want to change the Point position on the corner but you just want to increase the number of uh points or resin just increase the resolutions of each surface constantly now you could in by increasing the depths more you could have high res bubble inflation Sim simulations but that's gonna make it slower so I'm gonna keep it at 2 2. but later I can use the final subdivide as a Polish to make smoothing again so simulating with two is I think is fine okay so it looks like this and if you change if you check it with other cells you can see that the number of points on each surface is pretty much the same and the position also stays the same so the good thing is that even if you pick the cells or the cells or the cells the neighbored surface always shares the same point position and same point number which will be uh easy to pair each point to have the average Point positions later okay so that's the reason why I'm using subdivide if you use remesh then the point position is not the same the point number is not the same so it's a bit harder to create a lerp or average Point position to create a curved wall so I don't recommend using this and this is even slower so I think using subdivide is better in this case no okay now I did subdivide for each cells it's time I create the [Music] um the the inflated result okay so to do that I'm gonna use another for each Loop and if it's if it's possible you might want to use a compile block as well to make it multi-threaded but not sure if it's possible so I'm gonna try that later okay for now I'm gonna create another for each Loop for each Loop okay based on the okay not this one for each named primitive do this for each cell PT okay and and I think I should bring this P num which was um transferring the primitive number as an ID to here before creating the subdivide subdivisions now I could connect this one here to again which is similar to this setup but now I'm going to do this for each cell in this case I'm going to try to create the inflation in this for each node so where should I start um first thing I want to make sure is that there is a chance if you look at each cell there is a chance that I'm going to have another inline points which is which have two neighbor points so I'm gonna copy this removing line points just to make sure that I don't have two neighbors or inline points for each uh points probably I should do the same for this one as well I'm gonna copy it right here this might not be necessary but I found it sometimes you have these additional points inside somewhere around here so probably this is necessary okay now 's the time uh to think how I'm going to create the the inflated surface okay so first I'm gonna try to do is to let me go back to the sketch again and think how I'm going to create the inflated surface so you have some Crystal like shape like that and you want to create more of a infrared shape this one so and my process here I mean there might be a lot of ways to deal with this kind of um inflated shape but my process that I'm going to do is to first get the outline of the cells so get the path or pass information [Music] of this cells and before inflating the surface I'm going to inflate the Curve which is a bit more simpler to do so just trying to inflate the structure of the bubble like that and you can do that by um getting the centroid of each surface or yeah each surface like this one or this one on this one uh or maybe not maybe you can just get the centroid of this cell itself so taking this cell as a volume you can get the centroid of the volume somewhere on the center and use this point to move these curve using the vector value from the center to each vertex Point position foreign to create the curved outline like this then later if when you get these curved informations what you want to do now is to fill these curve with some surface all right so that's where you need to do the inflation say though fake inflation simulations um first thing you could do is to create the minimal surface on top of the Curve maybe it could be pretty close to the flat surface or maybe it's being come back so concave shape and since I want to have an inflated result you could then push each point to the normal Direction create the kind of exaggerated inflated geometry do the laplacian smoothing to make smoother or try to make the Surface a bit um smoothing out and continue doing this for several times in the end you get kind of a similar result to what you get out of the physical simulated inflated result that this process is pretty similar to what you actually do in physical assimilation so and but with small steps small number of steps so it should be faster and the result might not be really precise but you could kind of get the result you might all looking for so that's my plan let's try doing this okay let me look at the comments hmm sorry I don't speak Spanish uh could you switch to view you know what kind of case would remesh be better I'm not sure in this case I don't think I can't think of any way the rematch work better so yeah maybe if you are trying to make a bubble like in my way Bane I don't think there is a way to use rematch but there should be a way to use also use a remesh as well especially I mean this the downside of the subdivide is that even if the surface size is small you get uh really high number of points doesn't relate to a size of the surface so that's the downside of the subdivide so in those cases remesh might be better but you need to think of how you could relate the inner wall next to each other so that you can have the average Point position to have the curved wall so that's the challenge and I couldn't I myself couldn't find out the best way to I'm going with the subdivide hmm by the way if you've seen the work of panel please studio called tied it is a combination of several layers of ink and water is assembling small mushrooms floating in different directions looks awesome I don't haven't seen it but I'm interested I'll I'll watch it I hope you allow sending links and comments I don't know how to enable the links in the chat I think there's no option to do that it the YouTube just automatically deletes it somehow hmm maybe to prevent the spam I guess sorry for that well can you use the same data at the end to affect how a cell pushes out can you use the same data then to affect how a cell pushes out yeah you could some if you know Vex you could do that using Vex for sure I think okay so what was I um so I have removed the input then yeah let's try to First inflate the Curve so to do that I need to have the centroid of the cell first so measure node measure node calculate the centroid per let's say per piece is fine cellpt so in this case I'm just gonna have one uh Point information out of this cell out of this measure node if you go to the Primitive you see that you see the centroid on each faces but shares the same value which is the the final value of the centroid of this final piece so and next I'm going to convert the Primitive to a bunch of lines so that I can inflate these curve using the centroid that I've just got here now if you choose if you use the convert line all the primitive attribute is removed like reset it to zero so I'm going to use the attribute transfer to bring back the centroid information to each cell I mean each curve okay and so what I would like to bring is this centroid information and just in case I'm going to uncheck the distance threshold so that whether it is far or not you always get the copy of the centroid okay now I might also want to bring copy the cell PT information which is this one this is also an important value I think so going back to the attribute transfer also check this lpt okay now this lpt is also copied as well as centroid okay now currently in order to create the inflation of this curve you need you are you don't have much points to do that so let's increase the number of points for each line so that you can make a curve so you I'm going to use a resample to do that now this resample is pretty important and the number of points you add on each line has to be the same as the position of this subdivide mesh so for each subdivide mesh on each Edge you add in this case you have always one two three four divisions even with these small lines you have for your visions four divisions here on the side you also have four divisions so the number of sampling or number of points on each line is always constant based on a number of subdivide depth okay so if the subdivide depth is equal to two then the resample number should be not based on the length but should be based on the number of segments and is equal to four or maybe not five is it no four I'm seeing other points and that is because I think I also need to check this resample by polygon Edge seeing points which I don't want to see maybe that's a cache oh yeah that was the cash the cable was I so the points coming from this resample and the subdivide mesh should be at the same positions and if I increase the number of subdivision depths like three now you have you also have to increase the number of free sample numbers in this case that is equal to eight so by using this value here if it's that if the depth is equal to 2 that is a power of two with a number of depths so if the depth is equal to 2 that is 2 by 2 equal to four if the depth is equal to 3 then that is two by two by two and that is equal to 8. and now the number of resampled the number of points on the edge and the number of Edge coming from the subdivide is are equal and by doing this it's easy to relate each other this one and this one later okay that's pretty important in my process okay now I'm gonna make this back to two let's also have this steps as a parameter on new Contour new controller in case you might want to change the resolutions of this bubble later Okay so bring this and solve divide interval okay I think maxman's three is fine right now that I have this uh curve with a bunch of points it's time to move these curve uh or assimilate the inflation for each curve by using the centroid that's been calculated here let's do that going to use the point wrangle or maybe I should use a primitive Wrangle because each primitive has its own centroid information but um yeah I think it's better to use primitive because I also want to use a since I want to make an arc like inflation maybe using a sign trigonometry like sine function makes sense in this case so primitive wrangle um Arc or let's name this outline Arc or outline inflation okay have you ever thought about using digital paper rather than going back the to the Whiteboard every time this would allow you to display directly on your screen what you're doing on tablet while keeping this mobile side not urging you to do anything just like an idea like that thanks for the suggestion uh suggestion sometimes I do that based on the equipment that I have currently now I don't I currently don't have an equipment like that so like [Music] um tablet or pens digital pens so if I have these then yeah I would try to do that as much as possible today I just have the analog pen and whiteboard so please bear with me hmm yeah benefit of using digital pen is that you can save the image as well so I told for sure that's better um is it is it possible to find that effect just by searching panoply tied on YouTube I'm talking I'm talking about thank you mushroom effect mentioned in my producer okay thanks I'll do that later what was I yeah trying to push the Curve so I'm using primitive Wrangle so I'm going to get each point on each primitive and Loop through all the points get the point in numbers get the point position okay now I also would like to get the centroid information which is stored in each line As A Primitive attribute so that's good so let's create a directional Vector value which is position minus centroid right now that I have a vector value going from the centroid to each Point position so let's say Central is somewhere around here these are the points so you're now creating the vector like going from the center to each point and I want to use those vectors to move each point as an Aug shape to make an arc the best function is to use a function like sine function or trigonometries so let's create in order to create the in order to use the sine function you need to First create an angle at each point position and the sine wave is like when the angle is equal to Pi which is equal to 880 180 degrees you get the mountain in the shape like this from 0 to Pi and pi to 360 you are getting the negative value and uh the maximum of this wave is one the minimum is equal to minus one so what I would like to have this is this area here from 0 to Pi and you have a nice Mountain like shape here so I could use this for each curve so if this is the line that I want to inflate and you have a bunch of points to move what I want to do is to from the each point I want to move each point like this like a sine wave and the height here can be calculated using this sine wave and in order to determine how much the height is you could calculate you could use each point position converted into an angle so the first point should be zero the last point should be Pi meaning 180 degrees the middle one may be 90 degrees this might be 45 and this might be one the 35 and so on so that's what I'm going to try to get here so what I could do is to convert this I value I guess fit I which is from 0 to the length of pts -1 to 0 to 100 80 degrees or pi okay now I want to convert this angle to a height by using sine wave which will give you a volume between 0 to 1. in if the angle is 90 degrees then you get one now I'm gonna convert this to a height value by multiplying the sine function by the actual maximum height which could be determined by yourself Now using this I would like to move d AB Point position so current Point position is pause and update this by the direction multiply by the height and probably also might make sense to use the lens of each line as a multiplier if the length is small then the inflation should be smaller if the length is larger then the inflation must be bigger than the the smaller one so [Music] I think it makes sense to multiply with the length of each line and the length of each line can be get by accessing to rest thanks which has been created when you have converted the line on primitive wrangle these one so this is the length for each line so we could actually use it this as it is as a multiplier for moving distance or inflating distance or inflating value okay and finally update the point position using setpoint address I guess let's see how it goes okay not bad and if I change this like this so yeah not that bad I think maybe I can increase the threshold a little bit more let's make this maximum five maybe that's too much okay well maybe one two one one to one point five might be better okay this is still low res but it's fine we're gonna make it high res later okay so if we look at the end I'm gonna Harvest things like this so the on the intersection we have a bunch of lines which are going the other directions so in the end we need to combine these lines together or get the average of the one that's next to each other to get the final result to get the final curved uh inflated result but for now it's fine for each cell it looks like this okay so this one could be another parameter which we could control so let's ring it here I'm gonna drag and drop how do I name this height or hmm or outline inflation it's a long name maybe I don't like it but I'll just keep it like this for now okay now that I have a curve inflation it's time using this to inflate the surface as a this as using this as a guide okay just inflating the curve is might be fine for some of you it also look like a bubble in the end but um uh it might I think it is interesting to make the Surface looks inflated so for especially for rendering some stuff like that so that's what I'm gonna do okay to do the inflation for a surface using this as a guide I'm going to bring the surface information which is coming from this one and I'm going to do the same subdivide by just copying this up Divine node here here okay and just need to check if the Point position on the edge is also sharing the same as this one the point position over each line same as this so divide Edge position or Edge Point position you can see that it shares the same position like these that's the important part okay now what I'm going to do is to using this as a guide I'm going to move the edge of this surface or edge of this subdivide surface to this goal Edge this is the goal edge of the outline okay so let's do this um I am going to use the in this case Point Wrangle I guess so what I want to do is to move the edge of this um cell using this oops this as a guide because this shares the same position with this one and this one on the set on the edge you can kind of get the uh the corresponding Point number for this point for each Edge points and use the Point number of this curve you could actually use that to get the gold position out of this uh inflated curve so connect this to a third point a third input and finally by combining all those informations you can actually move those Edge of the surface to this outline Point position okay hopefully it makes sense so first you try to get the nearest Point information from the second input which is these edges new point and get the Point position and why you want to get is the distance between the current surface Point position and this resampled point position and if it's equal to zero or if it's really close to zero then that means the point we are looking at is on the edge so that should be moved so calculate the distance between the current Point position on the surface and the Edge Point position and if that the if the distance is closing off to zero I'm gonna I'm not gonna say equal to zero because because we are dealing with the computational geometry there is some number errors so getting an exact number is pretty hard in computational Geometry so gotta make sure it's some some you're gonna have some kind of threshold Okay so if it's small enough to equal to zero then you are going to move the current Point position to this point in position which is point from the second Point position a second input at the npt there you go so you have just moved the edge point to this inflated outer Point position okay now after doing this I'm going to use something like a smoothing or laplacian smoothing to create the inflation and when we're using when when we try to use that I don't want to I want to fix the point position of this outline I just I only want to move the points inside the surface not the alts not on the outline so I'm going to give another additional attribute like weight if I don't want to move the point then I want to make the weight to zero since this is the outline point the one that should be moving I'm gonna set the weight to one okay and now mine Point position transfer or something like that okay now is the time I move each point inside to a normal Direction then do the inflation and do this love placing smoothing again and again uh for several times to get the inflation effect so to do that I'm going to create another for Loop inside like using for each numbers it doesn't have to be too many times maybe like five is fine and I'm gonna make it as a feedback age iterations because I want to make a recursive Loop and for input I'm going to use the fetch feedback okay now things that I'm gonna do here is pretty simple first calculate the normal Point normal for each point okay and use some simple function to move each point to a normal Direction so I'm gonna use the point wrangle and and I also need to make sure if the weight is equal to zero the points not gonna move so and also want to make make the center point to go further the points which is close to the outline moves slower so that I can have kind of a mountain like shape somehow so in order to achieve that um I need to think about how we could do that um in order to do that we need to know how much is this Center Point or each point is being is far away from the outline okay so [Music] um how should we do that hmm see and also the legs of the neighbors the length between at each point and then Naval points might be also important because if you look at this surface and this surface you know you see that the lens is a bit different this is smaller this is larger the larger lengths must have more inflation than the smaller lengths especially like these part you have a small number a small number of links small lengths on a neighbor Edge which you could assume that the inflation is a bit smaller compared to the one you have right here where the neighbor Edge is really large so maybe we could use that information as an amount of inflation here and yeah let's try to do that let's try to just use that as a information to move the surface so to get that I am going to get all the neighbor points from each point and try to calculate the lengths between the current point and the neighbor points calculate the lengths for each Edge then just get the average so look through all the neighbors and get the neighbor Point position calculate the distance since I want to calculate the average you can have the empty variable here starting with zero at the distance to the average distance finally divide the average distance by the number of Neighbors then you get the average distance or average layer Edge lengths on each point okay now I could use this as a weight to how much you offset let's see so I'm gonna offset the point to the normal Direction by first of all wait if it's equal to zero meaning if it's on the outline you don't want to move and also multiply by the average distance that you have just calculated let's see what happens okay so not that bad there are some interesting artifacts coming here because it's being self-intersected that's fine for now now you might want to also control how much it inflates as an initial step so let's multiply the inflation value like that okay and then the first step might not be might not give you a clean result so I'm going to create an attributler to smoothen out the surface a little bit and using the weight so that if the weight is equal to zero the attribute blur is not being affected okay and let's keep so the balance between the blurring iterations and this inflation value and the number of Loops is pretty important I think here now this is inflating too much I guess by using five Loops so if I increase the number of below iterations it's it drastically um reduces the surface inflations let's say I want to keep it to 10. now the inflation is not enough so to make this more inflated I could increase this initial inflation steps a little bit more so I'm gonna go back to inflation make this maximum 220 or something see what happens if I increasing this value okay now starting to see a better result here now if I set this attribute blur steps to five the amount of inflation could be smaller but this is going to Wild here so maybe keeping it to 10 gives you more option how much you want to inflate so that I could make this maximum like 50 or 40. sure maybe this is too much but just in case you want to have exaggerated result let's make the maximum 40. okay okay so that looks good for single inflated result you are keeping the edge the outline to be fixed you're just inflating the inner surface like that and the Single Cell itself it doesn't really look natural but once you combine all the cells together which you will see something like this one currently each cell has been intersected to each other so I don't have a clean wool connection but by trying to relate the same point position on the surface I want to enter a wall and try to get the average Point position your your you'll get the clean curved animal shape in the end so let's hope for that now let's try to promote the parameter that we have set here that is for the surface inflation Okay so height of hide for surface inflation it might be a good idea to also control the number of steps for these Loops or a number of attribute blur but that's gonna make parameters too much or too many to control so I'm just gonna keep this as an only parameter to control but if you willing to control these value as well I think you could also do that okay so now I have several parameters to control the single inflated shape time we think about how we relate each wall inner wall together so that we could have an average average result okay so to do that um and again um another things that I need to set is the how much is how how much is the bubble is strong how how strong the bubble is in terms of the pressure Com when you have multiple number of bubbles like these you want to compare each bubble next to each other this to say which bubble is stronger so that which one pushes harder to create the curved wall you have for example you have in this case you have this cells and this cells if you get this together so you have two cells together and somehow in order to have the shared wall you need to push and pull the surface based on the inflation that each one has and this pushing strength or pulling strings has to be based on some values and that could be based on the volume of each cell if the cells is smaller maybe the pushing strings is smaller weaker so that you have smaller wall if this is bigger then it's obviously it's gonna have to push it uh more to have more uh curved wool affected by this shape and this is being pulled or pushed by this one so to have a to find a balance between two connected or two neighbor bubbles one of the things that I could use is the volume to push each other that's what I thought in terms of proceduralism so let's try to calculate the volume for each cells here inside uh yeah for each node I could just do that by using measure node oculate the volume and again I'm gonna use the per piece per cellpt so that each primitive shares the same volume and actually in the in the last you want what you want to move is the point so you could promote this volume information to each point so I'm going to use an attribute promote to promote the Primitive attribute the point and the attribute name is volume and let's try to keep the Primitive as well yeah this has to be the bowling okay so if you look at the point attribute yeah you get this new Point attribute call volume promoted from primitive okay now 's the time you want to get the average Point position to share which shares the same wall positions and to do that we need to have that kind of an ID information which point stays on which wall so to do that you need to have that information somewhere and to do that you need to for example for this shape you need to know what this point ID is and the point ID of this Point here which also appears on the other side of the cell so there's supposed to be a cells here as well and this cell also has this point and that point must shares the same ID in order to create the average Point position between two points which shares the same ID so in order to have the single ID for single points or connected points you need to have the guided information guided geometry and actually this is the guided geometry that I was already May making it now this is the bunch of cell a bunch of four noise cells that's been subdivided but currently the number of points on the inner wall is duplicated because you are subdividing for each point but by fusing this final geometry you can actually fuse the duplicated points on inner wall like this one as a single point okay meaning you only have one single point informations for each wall which means you can use that point number information as an ID a unique ID to be used with these each cell to share the same ID okay and [Music] additional as an additional information what I wonder what I would like to have is to determine uh which cell primitive is on the on which wall meaning I also want to have an ID for each wall information like make this plural noise wall as one ID make these were annoyable as one single ID which also could be useful later so I want to have that information as well so let's do that to do that what I could do is to um try to have a single sided geometry out of this output meaning if you are having a duplicated surface for example on the inner surface you are currently have duplicated surface in and out like these so by removing one of the surface if it's been duplicated then you could have a single surface and by having the single surface you could have a single ID for each surface probably okay so that's my plan so let's do that and to do that um what I could do is to give another guide information for each surface and looking back to the going back to this information here let's remove reset the viewport okay sorry to hear that um so first of all I could calculate the centroid form each surface here which will give you a center point of in each surface so which means I could use a simple function like primitive wrangle and give a Center Point remove the current primitive like that and use these points as a guide to determine which surface is on which point or use this point as an ID now this point is also being duplicated so you could use a fuse to remove the duplicated points so this is the total number of wall the voronoi walls Okay so Center off Surface infused and use this point as an uh guide to determine which surface belongs to which um single surface okay it's my plan now that's when you are using this P num actually and maybe I need to bring connected here so for each point I probably need to create the bring the p number informations currently I have these p number which is derived from the Primitive number then by using this let me think if I need to transfer the P num um Maybe not maybe not think think hmm what I just want to do is to relate the single surface and these points are the represents the single surface information which currently I have 210 points and I need to release set each surface right here get the information from this to know which surface belongs to which points so um let's see let's see what I could do here so I think I need to have some additional information here when I create the point I'm going to pass the Primitive number that is being attached to the Primitive like this which will give you Point attribute like this which is related to this one here be num which is the ID of each surface here okay now the problem here is if I use the fuse some of the P num is gone so maybe that could be a problem um or maybe uh yeah okay I think I get got it so let's say this is the guide and going back to here and for each primitive I could check if the P num which exists in this node I want to check if the P num for each primitive here which is this one exist here on each point if it exists you can make the this primitive live if this if the number doesn't exist here if the number on each primitive on this primitive node on this fuse node doesn't exist on the point Wrangle from this node then you can delete it to keep the P num on primitive here on P Nom on that point attribute here the same so I could check for each primitive referring to the point attribute of the second input here and I could say find the P num or primit Point number by using a find attribute vowel going to take an input point the number and the attribute is p num and using the current genome from the primitive so if you couldn't find the result you get negative 1 as a result meaning that's when you want to delete the current primitive if you have the value more than zero then that's when you could keep that primitive so if p t is less than zero then you could remove the current primitive so that you could have you only have the single sided space okay let's see let's check so previously you have 7282 surfaces and now the service has been reduced and you should only see single surface face here previously you had duplicated surface here and here both this part is easy to see you are seeing some Z fighting faces but if you should if you are only getting the single surface then you don't you no longer have Z fighting okay so I think this is working and now you get this single surface here you can you you can actually use this as a an ID and ID is in this case is this P num pinam could be the id id okay hopefully that makes sense maybe not but uh yeah then that's what I'm gonna use it use as a guide finally I'm gonna try to fuse this again maybe this is not necessary but just check okay might not be necessary but just in case and now in order to use this as a guide to create the ID information for each point on each cells that I have here I could um use a point wrangle and referring to the the overall geometry width and ID information I'm going to transfer the p number or actually I could just transfer I mean I could just transfer the the point number itself from the surface using as an ID because what I just need is the the related Point position for each interval so the point index it could actually be a point number from the surface because there are no duplicated points here so and index is equal to near point p yeah this could just be an index now in terms of the p number I could use it later actually okay now going outside the loop this time we use the pressure to create the average surface position or average wall to get the final result this is the final step and here I'm going to use the point wrangle with pressure and here I think I could also um use some information like index probably not sure um let's see yeah I think I could I could use the ID let's see let's see what kind of algorithm that I need to implement here so this is the final step and things that I need to do here is trying to get the average example you have to inflated cells and somehow you want to create the inner wall to have the final bubble shape like this and in order to do that for each cells which shares the same point index you need to move correspondently so that in the end the final Point position shares the same point position for a connected piece so to do that you need to know how much you move for each point based on what kind of value now first value could be a volume based on the volume you could change how much it moves to which direction okay so let's think um so if you have something like that something like these and these information intersections somehow the final Point position must be somewhere in between these threshold so you need to kind of use a function like lerp to find the best result so the value has to be from zero to one and if you choose the 0.5 then you get the straight divided curve which is going to make a flat wall surface and that's pretty boring and that's not related to volume or pressure it doesn't really look realistic so you need to find the best value for this one how much you want to go what's the thresh vest threshold based on the volume so so let's see um first thing first you need to for each point you need to find the Target I mean if you are looking at one of the point cell like this one for example if you are looking at this point here you need to know which point corresponds to this point in this case one of the point from this cell has to be responded related with this point here so you need to find those pair you need to find a pair point for for each points which is on the inner wall so to do that you need to know the you need to know the index you need to know the other side of the point number okay so that can be retrieved somewhere and that is that is think is this one here this is where you have uh created the this is where you are getting the index information here so could actually hmm wait a minute let me think first um maybe that's not the case here hmm let me see maybe a baby that's not the case in order to find out the pairs you could actually just do it right here by itself if you look at the point wrangle I mean Point information if you look at the index sum of the point index should share the same numbers like if you have three points then that means the the points should be on the corner if you have two points that means you have that those points are on the inner wall if you have no duplicates then that means that's on the alt side of the bubble so you can indicate which point belongs to which positions by looking at how many duplicates you have for these index so having that information you could get all the corresponding Point informations out of Point by finding out the point index information which it shares with the same current index value okay now if you have if you're sharing three indexes if there's a three duplicate indexes you get three result here if you have two duplicates meaning if you are on the inner wall you get two values here now you can Loop through all those information and try to get the average based on not the average but weighted average positions based on the volume so in order to get the volume I think each point also have its volume information derived from the Primitive let's check yeah this one so you could use kind of use this one as a weighted value so going back to the geometry or scene View coming back to here let's get the volume information from each point t let's also have a variable called total volume and starting with zero sum up the total volume the this volume here then try to found out find out the the weighted position by multiplying the position by a volume and then May sum up to a I don't know average position attribute or a variable so average position being added up with these volume uh positions multiply by the volume then finally divide the final average position by the total volume you get a weighted position based on the pressures oh I mean the volume so I'm assuming the volume is equal to the num value of pressures but maybe you might want to change this volume value a little bit based on how much it affects the small difference between the volume might affect a lot so let's give a chance to control that by using the power function with some your choice of power starting with one I think has a linear value okay now you have now you have this average Point position you can now update your current position with the average now you see that inflation the intersection is no no longer available and if you also look at the Interiors somehow you get these um non-intersected result like this previously it looked like these now look like these okay now it's time to play out with this inflation power or volume power here currently it is equal to one but let's say how much it changes by changing this value so if I increase this the small difference of volume will affect a lot based on the pressure based on uh how much it pushes out the inner interval so by increasing this power you can see that the curve curved nest of the inner wall is increasing because I'll because the small difference between the volume in small volume difference between each cells will drastically affect the pressure so that might be interesting so let's keep it like 10 for now I'll give you a really rounded shape in inside okay now now it's time I could make it a bit more detailed or smoothing out currently it's a bit too low res so here finally I could use something like subdivide but the problem here now I am having these kind of a spaces here because the subdivide actually smoothen out the shape which I which is okay for the outer shape but not okay for these intersections here I don't want to have a gap like these but if I check this doesn't really affect it's no longer affecting the outside surface anymore so you need to give this self divide for each single surface or not per cells but per surface per walls out of walls or per intervals so to do that you need to kind of uh split each cells into each surface I mean each walls for example if you have a thing if you have a cells like this if you just use subdivide node you're just smoothing out everything but I want to keep the outer edge fixed just want to smooth in just want to smooth the inner surface it doesn't do that and it doesn't even do that if I increase this weight just also crease the outer surface as well so that's not the effect that I want so in order to achieve what I want I need to split each surface each walls into separate group or unconnected group unconnected surface so that I can apply subdivide subdivisions for each walls and to do that I already have an information to do that that is this P num this Phenom indicates the number for each surface actually which I have been doing right here so I can use that to divide each surface separately by using for each named primitive use phenom then I can access to each surface here oh which is not shown here let's reset the viewport like that now I don't really need to do anything inside the loop I just want to split the surface so just having a loop like this is fine then use the subdivide again see the result now you no longer having the gap on the corner or inside but you're fixing the edge but at the same time you're smoothing the surface that's the reflect that I'm looking for okay and if you try to see it inside reset the viewport if you look at the inside you're seeing a crisp Edge with a smoothed surface it's what I was what I was looking for okay so that's the final result that I wanted and now I could set up a simple default rendering and viewport shading so that I can see through the bubble clearly to see how it look really looks like inside so I'm going to create a material node create some simple principal material principle Shader base color to anything you want just want to make the transparency really high just to check how it looks inside and apply that material that now maybe I could change the color to white so that I can see it a little better inside okay so that's how it looks like inside really bubbly here now going back and if I change these power the pressure power here if I make it 0 you could see that the surface becomes really the inner surface becomes really flat just like you get from the voronoi output which might be okay but having more curved surface I think looked more natural for Bubble Aura looks cool and visualize visually nice at least for me so that's why I thought it's it's necessary to set a threshold like these or pressure like these to make it a bit more natural okay I think it looks nice and combining with the animation it's gonna looks really nice now it's a bit too slow so let's cache this a little before playing it I'm going to use the file cache to Cache the animation doesn't have to be really long so until something like 80 frame is fine so let's cache this okay well meanwhile um this is pretty much the end so if you have any question or if you have any feedback I see one of you didn't find it uh helpful so that's okay but if you have any questions let me know or if you have any more idea how this could be improved or if you have any other way which you could use to have the similar result that will be really helpful so let me know if you guys have any feedback on that thank you John Doe kind word okay the cash is done so let's see play out so this is how it looks nice isn't it now if you want to get just the outline you could also do that um could divide you could use a Divine node remove the shared edges um use the poly path and there you get the outline and this is also interesting to see initially I was just trying to create the lines but I found it a bit boring just to see the edges so that's why I'm looking for a way to create the surface as well and it turns out doesn't look that bad right hopefully you find it interesting as well okay yeah so that's what how I did it and if you use like render like redshift it's gonna give you a nice rendered even in inside with a refraction or reflection so hopefully you will try that as well now let's try let me try with other kind of bass geometry other than spheres and see how it looks like maybe a bit more larger large number of points okay let's see what kind of test geometry I could use maybe I could use something like human template body not sure if this is suitable for but let's see problem could happen on these thing surface areas because it's a bit hard to create the clean version structures so maybe I I'm gonna try with the well anyway why not just try it I'm gonna create the switch node connect this to Human see what happens in the result oops oops okay I'm getting error somewhere that is because okay so this is why the boronoi fracture is creating some result that's not pleasant so that's why and the reason why I'm getting here is because some of the process are making the unsub-dividable surface so that's why so maybe I could either create a error passing function if if one of the Primitive is not able to subdivide and skip that geometry or just try to increase the number of points so that you don't get errored surface let's try the first if I increase the number of points in this case maybe like 200 does it give me result no not yet am I gonna make take some time 500 still not so maybe I need to create some kind of a error passing functions so that even if the geometry is not being created for some mesh I guess yeah these part where the finger is is having problem and that is coming from which part this part I guess yeah so either you want to increase the number of points or just ignore those um broken pieces so to determine where it is broken where can I check it where can I check what's this it's um okay I could probably delete the geometry which is not uh suitable for calculations here right after here I think so I could kind of assume if the volumes is equal to zero or nothing then that's where you want to delete so for each cell point yeah probably somewhere around here I'm gonna calculate the volume here volume per piece cellpt let's check how it looks like and so if it's close to zero or negative that means it's not being closed I guess so those volumes could be deleted I think and if it's really close to zero that could also be deleted I think so let's try doing that delete if volume is less than .001 zero zero zero one deleted [Music] deleting unnecessary stuff hmm maybe determine determining the volume determine by the volume might not be a good idea I guess I shouldn't calculate the volume here about before fusing it yeah this should be it okay now yeah this makes sense now I could oops that was too much still too much hmm still seeing those lines here maybe deleting by the volume might not make sense yeah that because those line only happens after this what if I remove the fuse calculate the volume here delete it hmm does this pasta error nope oh didn't connect it here so if I connect this here okay now it passes the error so maybe this might work where should I connect this fuse I think I should do it somewhere maybe here I don't know just trying out and let's see did I get some result okay yeah I did interesting bubbly man and it might take some time but if you do the calculation like for several frames you could also animate it on human as well just using the Sim with the rainbow SIM from last week okay I hope you also liked us rainbow simulations last week um the algorithm is simple but interesting to see how rainbow works okay so you could see that it also works on any input geometry so probably this could also work on pig head okay nice so probably man is done now I have some unwanted points here probably due to some I don't know what what is happening here do I have uh points on the center nope where does it come from at this point we don't have it here okay seems like I have some unnecessary geometry somewhere up here probably where the where the hand used to be okay well um for some reason this point is sharing with some points on the center which doesn't really exist funny anyway um I don't know if I should fix this because this is a rare case I guess but it doesn't really look nice crayfish default mesh might be more prep appropriate crayfish not sure which one is the crayfish but I guess I want to solve this I mean I at least want to know why I'm having this error here so that it's Error proof uh let's see so at least from until here that that was fine but the problem happens when I'm calculating the pressure result and that is because I guess this one I'm trying to find out the nearest Point information from each cell here but there is a chance that there are no nearest Point and why okay why am I losing some of the geometry here these geometries are missing right after the this one um okay maybe because of this one but uh so in those cases I think I need to make sure that I'm not referring to those disappeared geometries so it might make sense to First get the nearest Point number get the Point position calculate the distance and if D distance is small enough to zero then you could use the indexes npt if not then set the index to -1 now let's see what happens oops didn't work hmm that wasn't the case actually it made it worse maybe I'm doing something wrong here just want to check now what if I remove those unnecessary point does it solve yeah did maybe this is the one okay anyway I should try with more rigid I mean more thicker surface for sure for this kind of assimilation uh squab I see squab also has a thin like tentacles so might not work but let's see switch this to Suave people what's happening here oh mouth oh well now okay this is unexpected Something Happening Here so what is happening here what is wrong with the setup huh so yeah it is also deleting those 10 places somehow well how this is not working not sure why let me try to remove this and see what happens if this is the problem yeah this was the problem so maybe this is not the correct way to implement oh well maybe if I have time I'm gonna fix it later but for now I'll just gonna ship with these setup so once I fixed it I think I'm gonna upload the minor fixed version as additional file but for now I'm gonna just upload the files that I have here at least it works for hmm some uh I don't know well at least thicken off geometry or if you have enough number of points to create a a voronoi interesting well guess there is a place to a room to fix but that's fine that's good to know I'll I'll try to do this sometime later it's because it seems it's gonna take some time to fix it so for now I hope you could find it use more to play out with uh some limited number of geometry hmm like even for a pick head if you convert it into vdv convert that convert it back to Geometry might make sense because it's gonna make it a bit thicker maybe I could also insert some bdb um bdb resample was it nope PDP re shape yeah this is this will inflate the whole geometry a little bit so this might gives you a little bit better result how's this this might be better okay so instead of having a squab let's try with this inflated pig head with a small number of points like 100 yeah this seems to work the ear is being broken but uh probably I need like 200 hmm yeah starting to get some result since I have several parameters to control the inflation like if I change this to smaller value you have less inflation doesn't look doesn't look like a bubble so maybe I need to have at least 10 or 15. if I make it 20 now it's really inflating a lot if I make this 2 for outline getting more bubbly and these looks really doesn't really look like a bubble anymore it's more like a balloon now it looks more like it so so what's good to have is these in inner curved wool that's kind of what I really wanted to show so hope you liked it so that's pretty much it thank you for watching let me just wrap up this session by um organizing a parameter a lot of it if I need to change the parameters somewhere now just seeing the outline also feels like it looks like a bubble but um it's always nice to have a surface okay so where was I so I was trying to control the ah this one this could be another parameter to control pressure power so what was it there you go pressure power and if I change this to 10 you have more like push pushing the strings you see the difference it's pretty interesting I mean the best I mean the most interesting part for me is right here this more like a grape-like shape huh forget it um what else um put well so I have these I have these okay yeah that's pretty much it I think so that's it so thank you very much for watching and thank you for all the comments thank you for all the kind words like growth if less transparent pig head mesh helps with that thought yeah sure how would you go about adding geometry in a simulation using this how would you go about adding geometry in your simulation using this hmm what do you mean what do you mean by adding geometry now we can control add in Geometry um I think I'm not following the question right let me know if you could specify what it really means say an expanding set of bubble hmm I see it's been increasing the number of bubbles you mean that might be interesting um meaning starting from the small number of points adding points gradually if that's what you mean those cases we could try it with the sphere I guess and I guess I need a minimum number of points not 50 but 10. so if I have less number of points seems like I need more pressures I guess I need to find out balance if I play it right now it just moves so if I want to add more points gradually then I guess I need to do it right here inside of solver so let's see if I need if I want to do that then let's say per I don't know per five or per 10 frames at one point then what I could do is after updating the point position or before I don't know anywhere is fine I guess I'll I'll do it before Point wrangle so this is so where should I add the point that's the question I could connect this ISO surface to the third input of this solver to use it as a reference and I could make a detail attribute at new point and if the current frame person or frame value is equal to zero let's say per five I want to add one new Point inside this volume I could create a scatter node here just to create one random points and don't relax and use the global Caesar with frame so for each frame you get random Point position here within this sphere and refer to that point and when this condition meet you're going to look for all the points from the second input get the point position and then add new point okay let's see what happens so just want to check how it looks like with the point so each for each five frame the new points will be added somewhere like that okay now let's see how it looks like with the simulation more like uh frog egg maybe I need to add more points and I want to start with a better a bit large number a bit larger number of points so let's start with 20 points right then he per number three frame at new point and let me also file cache it version two finger crossed okay hopefully we'll get something interesting foreign percentage means modulus meaning you can calculate the remains when you divide the number so if you calculate the modulus between six and five that means you are dividing the six by five and you get the remains one and that one is the result of the modulus so if you Mom if you try to calculate the frame by the the modules of frame by five then you are looking for the uh and if it's equal to zero that means if you divide the frame by five and if the result remain is equal to zero that means the frame should be either 5 10 15 20 25 and so on let's see the result then hey not bad interesting all right that's good this is good thanks for the idea nice idea I think I like it I think I like it yeah okay good to know yeah suddenly it becomes more cell divided some kind of a egg shape not like a bubble like more like a egg shape egg but nice if I just see that line cool foreign [Music] this was nice okay so I think it's time for me to wrap this up and we also have the final parameters that I have just added this extra adding parameters so at Point per frame how do I explain this point oh frame um no I'm just gonna explain it not a good explanation but you'll get it okay so I guess that's it yep I think I've enjoyed uh session thanks for uh joining with me I'll next week I'm going to do the what was it the shortest branch growth which runs on inside the typology or text which could be also interesting so if you could join that'll be great so that's it for today thank you very much for coming and thank you thanks for all the comments I'll um as always I'm going to upload the file that I've just created here to a patreon page so you can I am gonna paste the link to the video description so you can go there to download it for free uh right after I'm gonna upload it right after I finish the live stream yeah and if you are feeling like it if you could support me on patreon that would also be great but it's your choice the files is all free so if you could enjoy that'll be great so that's it thank you very much and good night it's 4 am in Japan time I must sleep okay night
Info
Channel: Junichiro Horikawa
Views: 9,867
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, volume, rendering, computer graphics, visualization, algorithm, motion graphics, graphics, remesh, quad, flower, plant
Id: C3pA266G8dY
Channel Id: undefined
Length: 178min 6sec (10686 seconds)
Published: Fri Jul 14 2023
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.