Houdini Algorithmic Live #111 - Field-based Anisotropic Remeshing

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
right okay hello um it seems like the resolutions of the beauty is a bit too low hmm let's see let me try to fix this if I can fix this so it's the first time I use a software called oh yes and I'm not sure how I can fix this resolution issue hmm yeah that sounds weird let me see if I can fix it otherwise it's a bit hard to see what's going on here okay I guess I can see it on at least in full HD in my browser in my other browser so I'll just go with this okay if anybody has some problem let me know and key so let's do this um uh it's it's a long time since I last did the tutorial live for Houdini so this is this used to be a weekly tutorial live which is not on anymore but um I'll try to keep up with the pace um so this is a tutorial life for Houdini to show some algorithmic design process that I've been doing as a hobby or as a practice and show some small or interesting tips along the way and each week I have some topic to show and today what I'd like to show is to implement a anisotropic so-called anisotropic remeshing which is to use the some kind of vector field on the mesh to create the direction how the mesh is going to be remeshed for example what I'm doing what I'm using here is the principal curvature wait so the volume is too low let me see okay how's this maybe it's a bit too loud not sure sure I mean it sounds really loud in my environment okay um I'm hearing an echo okay maybe I I should tweak some of the okay all right okay then uh what was I so I was trying to use uh trying to implement this anisotropic rematching which is to use the vector field on mesh to uh take in a taken account of the field the vector fields on a mesh together as a size of the vector field now as a result I could create a remeshing result something like this so this is based on the curvature Direction and the amount so if the amount is big the curvature is Big when the bending amount is Big you have really skewed mesh triangle like these now if you have and based on the also based on the principal directional principle over to Direction so as a result you have some kind of interesting remeshing result like this um I heard this remeshing NS anisotropic remeshing um could be useful for something like clothes cloth simulations if it can be done in dynamically in real time but the way I'm using the way I have implemented might not be suitable for dynamic usage because uh what I'm using here is vellum has one of the step but rather than using like some difficult mathematical equations trying to implement like um linear algebra I did it more graphical way to implement this one so I think it's a bit more easier to understand what's going on here and maybe if you have some knowledge on mathematics or lineality apply you could probably transfer into an equation or own solver so that's what I'd like to show and as a result you could use any sort of vector field not just the curvature but um for example a vector field from the tangent field and as a result you could get something like this which is currently based on the flow of the tangent field or something like this which is based on the gradient of the position in Z Direction which could also be interesting um not really sure how this could be useful for any of you especially if you are in an entertainment field but um I thought this is the process itself could be really interesting so it might be useful for some cases I mean the process itself could be useful for some cases so I just wanted to show a lot to share it with you right so let's do this let's try to do this now from scratch as always and here's the new window and let me know if you have any questions during the life I don't have much um information about uh I mean I I found there is one paper writing about the anisotropic rematching it's I think it's called adaptive anisotropic remeshing or something but I the method that I'm doing here is not really based on that just a bit more Brute Force way using melon I mean physical simulation so it might not be elegant at all but uh could be fun to try out so let's have some custom geometry or random geometry anything is fine I'm just gonna go with this one uh has it something to do with the intrinsic triangulation that Keenan crane introduced into his paper I am not sure um intrinsic paper I mean it is related to modifying the Triangular triangles based on the direction so it might be related but I think I haven't seen that paper myself so some part might be uh covered some pipe part might be the same the idea itself Maybe okay I'll check that out later this method is always awesome so I wanted to um dive in but uh my mathematical knowledge is a bit too limited I need to study more okay so first thing first the texture is not necessary so I'm just going to get it all hide the UV all right and I'm gonna also triangulate this because the method I'm going to use is has to be uh he has to use the triangulated geometry so I'm gonna make this triangulated like this and next I am going to calculate the normal Direction for the point which I want to use this for a Vector field okay so I'm just gonna try the vector field I create a vector field out of curvature first as a our initial test which will create a what I would say beautiful remeshing adaptive meshing and you saw tropical meshing so so let's use a measure node to calculate the curvature shall we right and so what I'm going to call Q8 is the curvature and I'm gonna do this per primitive not per points but rather primitive and I'll explain later why and I'm gonna calculate curvature and uh what I need is the direction and the amount so I'm gonna choose the principal curvature and I also don't need to have a curvature in negative values so I'm gonna make it absolute so that uh amount of the curvature will always be positive uh which might not be which might not matter but I'll do it like this and make this vector okay which will give you a direction and amount of the curvature so where you have a steep curve you have high curvature if you have a flat surface you have low curvature okay and this will change the direction of the curvature I'm not sure which one's better I'm gonna try with the smaller one so the rematching that I would like to have is to have a triangled skewed in this direction in terms of the principal curvature well currently it is already has some kind of effect like that so maybe I'll make this pre-remeshed so that I could see the difference a bit something like that we'll remain well we're just gonna go with the original end see what happens so what I would like to have is the triangulated mesh comes skewed on these high curvature with the direction and not so much on the flat surface area but still taken account of the principal Direction such as these or these all these okay so after this um I am going to connect this to a no node maybe I should keep the note 4 calculating the curvature because I would like to try many other field later so so after getting the principal curvature what I would like to do now is let's see and try to connect this to switch so that I can choose from either a vector field call me later and Let's uh try to change the name of the vector field currently it's called as curvature but later I would like to use another field so let's make it unified like average field or every field anything is fine okay it's just a name now next I would what I would like to do is to calculate the lengths the amount of curvature for each Vector values just to see the histogram of the curvature so I'm going to use primitive wrangle let's name this field things I'm going to create attribute called field link just calculating just getting the value the length of the curvature Richter field right let's check okay so it's in between 0 to 0.3 all right so the maximum is 0.3 and what I would also like to note so there is also zero as well which might be the position where the direction is uh I mean the curvature is flat the curvature me zero means flat so yes and let's also get the the minimum and the maximum of these attributes promote attribute promote primitive to detail and I get the minimum first get the minimum direct minimum field length to detail okay uh actually what I would like to get is the field lengths so the zero is the minimum let's get the maximum small maximum rename it to maximum rate and then so the maximum is 0.35 something all right let's also get the mid in median value to see if the histogram is on the center or a bit to the left or right so get the median the rename is to Mid okay so I can I can see that the the curve the curvature histogram is a bit too shifted to the left because the median is pretty small 0.02 and there's really high curvature small number of high curvature so it might be a good idea to trim these maximum value based on this median so that this will come to the center to remap the whole amount of the curvature I mean it's not really necessary but uh it might give you a better result let's just check so I'm going to try to color the each of the faces based on the curvature value curvature amount to see if it looks promising or has some gradient look when I use the Primitive wrangle I'm going to name this field Lane process and first of all try to linearly remap the curvature between minimum to maximum and then change it to zero to one and see how it affects how it is affecting each faces so get the minimum and the maximum and remap the links with minimum field lengths maximum fuel links choose your N1 all right now [Music] um so and I am going to test this attributes by trying to use the color node primitive run from viewed l okay I don't see anything okay I might be missing something so this field length you have it MAX Field lengths minimum field links and let's see the L value is okay I do have L value it seems like there's not much value above like 0.1 or 0.2 most of the value is in between 0 to 0.102 so I guess that's the reason why I don't see much colors okay so that this is what it looks like right now so if the color is white or maybe change to the color is red you have high curvature if the color is blue you have low curvature and as I can see not much I mean you could see some green values but not so cleanly gradient so what I'm gonna do is to clamp this curvature value to something a bit more clean to look at to make these colors a bit more gradient based on the curvature so in order to do that I'm going to modify the maximum or minimum based on the median so get the median field lengths and first of all calculate let's assume that this is the middle value okay and so I want to go from I want to see the difference between this one and this one the medium and maximum and medium and minimum if the difference is smaller then I will pick that as a half of the range so what I mean is the difference between Max field lengths minus median field lengths and I am going to compare this with the minimum and the mid minimum and the median field length differences compare it using Min function so that I could get them smaller differences now this might give you a negative result in terms of this calculation so I'm going to make it absolute just in case okay now this will be the the half the rate the half amount of the range the whole range so the actual range that I want to use for this remap will be median filled lengths minus diff and medium field length plus fifth and now it would give you a bit more gradient result in charge of the curvature hmm okay I might would like to give uh one more action to this one more process to this value see if I can give if I can have some different value so try to use the power at your power functions to see if I can modify these gradient okay so this also gives you some interesting result from zero to one or one to one two it might be okay with one for now right Maybe uh maybe I could have another function like CH ramp to to con to be able to control the remapping curve based on the curvature all right might be but we'll try linearly first and see if we need to fix this later but for now looks I guess it looks okay if we need a bit more smoothness we could also apply some attribute blur which I don't think I need it but uh let's see so this has a I think I should do this before calculating the field lengths probably somewhere around here okay I don't know if it's changing the thing okay I guess this only works for the points not to the Primitive all right yeah so I guess this doesn't really work anyway so in that case let's just forget about it and let's go and what was I so let's go with this setup might be okay you have high curvature on the red part small curvature on the green part I mean the blue part and you could control the range a bit more with these curve all right okay probably that's okay and let's see let's go to the next step um so before going into the actual implementation I would like to see I would like to show the the whole process the brief process that I would like to do so in order to um do the anisotropic mesh let's try with the other rubber toy let me also delete the attributes I'll just test out with the small examples a really simple example so let's and I'm going to use so the normal rematching if you do the normal rematching like uniform remeshing what you get is something like this you have a rather um regular shape triangles all over the places trying to remake these original mesh that you have these there's also an option to change it as an Adaptive which will take in account the curvature I guess the curvature is being taken account and create a small triangles on the edges on the creases and the bigger occur bigger triangles on the flat surface but as you can see the triangle shape is still uniform or regular size regular shape so what I'd like to do is to make these triangle shape skewed based on the direction some input Direction and currently I don't think the original remesh um node will be able to do that so um originally I wanted to make these curve these triangles skewed on just in X direction or Z Direction and to do that that was a bit that was much easier to do I don't know why um Master G and necessary thank you for the poster for chat I appreciate it so originally in order to make these triangles skewed on just on X or Z Direction the step was easy just you you just needed to use a transform node scale it on my direction something like 10. and do the remeshing when the scaling has been done and scale back to the original shape by doing the inverse transformation and as a result you get these anisotropic uh triangle or Direction remeshing so if it's just one way or if it's just a planner um we meshing it's pretty easy you just need to do the scaling the uniform scaling but what if I want to do this like Parts by parts place by places based on like attributes on the surface I cannot really use transform because this is just a uniform transforming so scaling uh you could do a uniform anisotropic information like this but not Parts by parts so the idea here is that idea I had initially in order to achieve the anisotropic rematching per faces based on any informations could be a field Vector field or something anything is to let me write it down so if I have a regular meshes triangle meshes like these so originally what I did using the transform node is to scale these to this direction right and then do the meshing with this shape creating some creating the uniforms uniform triangles in this setup then scale this back to the original shape in terms of the boundary which will give you a kind of a skewed triangle in this direction okay so that thing is really interesting so if I could do these scaling part this part not just for the whole shape but if I could do this for each of the shape using different direction different amount of the scaling then you might be able to create a skewed shape a more controlled anisotropic reshaping so that's my idea so what I what the final process will be like is to um try to wait let me duplicate this I need these so first of all try to set the direction in which direction you want to scale like for example I want to scale this to this direction this direction this direction just Direction any direction is fine and for each triangle I am going to why the color is changing constantly okay so for each triangle I would I what I want to do is to kill these two to that corresponding Direction so for for this triangle might be something like this for this triangle might be like that for this triangle Dot Dot uh like that and like that okay and then uh somehow connect each of the um purchases together as the original structure so there should be some connection between the vertices like that and remesh this kind of an unknown mesh stuff or unknown scaled geometry using this uniform remeshing and would give something really weird shape not sure what it's going to be like and finally somehow doing the inverse transformation and make this back to the original boundary shape you might be getting the any search quick remeshing at each part okay so that's the goal that's the concept of this process that's the algorithm of this call to uh process now the big question is how do we do each step let's say this is step one this is step two and this is step three so we have big three steps and each time we need to do some kind of a process which is not available just using transform node so in this case we need we do need to use some kind of Vex or some other process now the main idea here is to especially this one for step one the scaling for each triangle is easy you just need to I don't know the re Place each triangles on a 2d plane maybe X Y plane and scale it in specific Direction that's easy but the problem is how do we how do we connect those each triangle which has changed the shaping together with that one big structure as the original structure to do that I am introducing the uh spring-based physic simulations so I'm creating a spring between the vertices or in this case I'm just going to share the edges these edges together and Define The Edge lengths of the shared Edge in this case this Edge and each time you calculate the size of triangles with the scale you'll get the edge lengths for each triangles so you get the edge thanks for these triangles you have another Edge length for these triangles and since the scaling and the direction is the is different you get different results between the shared edges but I'm just going to make it make the average of these two edges and apply it as a gold Edge length for the physics simulations in in this case I'm going to use the cloth simulation constraints from Bellum and try to set the edge length of these shared triangle edges okay so that might give you some interesting um result something like these when you do the simulations try to use the physics simulations to fit each Edge length with the rest lengths that I have set customly based on these sizes now after having these kind of in regular shape I need to make this back to the original shape somehow and that part is pretty easy to do actually um thanks to Houdini's um attribute structure we could use an attribute called rest attribute which will be preserved we could use the rest attribute when the mesh has been created so the rest means the original Point position so even if the geometry has been meshed to some weird shape you could still you could still preserve this rest positions relatively so after having The Irregular mesh I'm going to use the regular remeshing or uniform remeshing to this shape which also preserve this rest and rest of all replacing the each point position two at its current rest position which comes from this one somehow you'll be able to get the final result in um original shape looks like an original shape and I will show you briefly how it looks like in terms of the how to make the shape back to the original using the rest so let's say this is the original shape and I'm going to use the node called rest which will give you Original Point position as rest attributes which is currently same point position now I could then randomly um reshape this geometry maybe I can use something like Mountain node to create some random randomly wiggled shape uh make it really after having a regular mesh like these changing each Edge length different to do the remeshing using a uniform set up with some Edge lengths Target Edge lengths now after this I can use something like Point Wrangle to and if you look at the rematched points you still have these rest attributes which comes from the original mesh this one which used to be over on the toy and now if I replace the current Point position which looks like this with the rest position you will get original rubber toy silhouette butt changing the edge lengths to some custom or some random stuff which comes from the mountain node all right so changing the mapping of these Edge lengths like doing this and changing the mountain node offset you still keep the boundary of the Forever toy but changing the edge structures I mean the lengths so that's the step for the final I hope it makes sense so that's what I'm going to do and it so using not random functions like Mountain might be okay noise functions like Mountain might be okay to create a field but I wanted to make it a bit more controllable so that's why I'm you calling this field based so that I can control each triangle Direction and the size altogether by using the vector field okay I have a comment hmm all right thank you for the comments Okay so so let's do this um where was I so I have calculated the curvature I have the direction and I have the field length which is the size of the curvature uh to each primitive so it's time to try to scale each triangle and to these Direction okay let's do that but actually um let's go back to the if you want to let's say if you have a triangle like this and if you want to skew it to this direction you have to scale it this way right but then the if the curvature if you have a mesh like these where you have a high curvature right here the curvature flow might look might be in this direction okay so oh wait what I mean so if I wanted to if I wanted to sorry my mistake let's say I have this I don't know hexagonal shape and want to make this skewed and in X direction or y direction like this hmm what I need to do is to the direction itself does direction of this skew or the anisotropy anisotropy is this way but the actual scaling that I have to do in order to achieve this is the other way or the 90 degrees uh different so this way hmm so I need the skill wise I need to scale in this way and as a result I could get the final result like this one so the the final result the final result triangle Direction and the scaling direction is perpendicular okay so keep that in mind and let's try to Implement that okay so we need to do the scaling and how do we do that we could do this per primitive but since we're going to use a Vellum to preserve the structure to calculate the scaled mesh partly scale mesh I'm just going to use the spell um cloth simulation or configure constraints and just try to change these constraints for the stretch and change the rest length of these Vellum constraints so that will be more straightforward okay so for the cloth I have both distance along edges so I have stretch forces as well as Bend forces what I need to change these is the stretch and let's also turn off the compression stiffness because we're not going to simulate the clothes itself just want to keep the edge length the same at any cost so in terms of now we don't we should not have this one we don't need a realistic close outlet but we need to always preserve the lengths with the rest length that we're going to put okay so that's probably it and I'm going to use a primitive triangle so this is the key part of this uh tutorial I guess we need to change the edge lengths of these constraints based on the direction of the triangle scaling so for each stretch it should have one or two um uh attached triangles so these are the stretch edges and if you look at the original shape each Edge always have some neighbor triangles either one or two if it's open shape then it's one if it's closed shape two so what we're going to do is for each edges when we get two neighboring triangles and get these direction for both triangles if you have two if you only have one just get One Direction and the scale and then use that to scale each triangle separately and then calculate the middle Edge distance or length for each triangle and get the average and use that average to set it as a rest length of this Edge okay so that's the goal and let's try to do this now it might be hard to do without in imagining uh what's going on here so it I think it's a good idea to test it with small set of datas so what I am going to do is to just try to pick one item or specific item to try out the process so I will be the better way to do that hmm anyway maybe it's a bit hard to do that way I could do it per primitive or per I mean per faces or per edges but in the end we need to do it per edges so I'll just do it this way thing is so first thing first we need to get a attached triangle for each edges so for each edges we should have a neighboring triangles either one or two so maybe I can just pick I can just pick one Edge and use it as a testing okay so just get the stretch and then get the first Edge and using as a test geometry so this is the edge all right and the corresponding mesh faces where a bit hard to see here it's been I think it's on the intersection so let's choose another one something a bit more easier to see okay here we go so we have these two triangles and we have these Edge on The Middle right here so first thing what I would like to do is to get these primitive numbers to get the vector field from each faces which is currently attached as a primitive attributes so uh let's first get the point position from this uh line stretch constraint lines so print points and we know that the stretch constraints always have two points so we could just say pt1 and pt2 okay now if you don't use these delete then the point number itself will match with the geometry's point number so I can just use these Point number as it is but if you are using delete somehow which is not preferable but some cases you might do then you have to find out the point number by yourself the real Point number of these uh mesh by yourself so in those cases I'm going to attach the shape to the second input and get the current Point position of the edge vertices the constraint vertices then using that I'm going to get the Point number for Point number from the second input because the point number on the first and the second is different because I'm using delete right now so that's what I need to do now which can be skipped if you don't use these delete and which is a bit more preferable because near Point by using near point you might get something different in if it's too close okay now it's time to get the Primitive based on these two info Point informations you can do that by creating half Edge so point hedge so I'm going to create two half Edge um assuming that I have two at least at least one or one or two primitive triangles attached to this Edge like that now I'm gonna check the Primitive number belongs to each half Edge okay I need to make this second input and from half Edge you can get the print number now there is a chance that you get Negative value minus one if you don't have a neighboring primitive in that direction that happens if you are look if you're if the edge is at the border in those cases you need to skip that so if frame one is more than zero and if H Prime 2 a is more than zero you can calculate the the lengths or okay I mean calculate the steps now um but for from four here and for here I want to calculate I want to scale the triangles of this primitive to specific to a direction which is attached to this attribute Primitives attributes and I have to do this two times at a maximum two times so maybe it's better to use for Loop now I could create an array using these conditions so let's create an array called prims if primitive exists then I could add it to these attribute I mean the array do the same for H Prime 2. and for each primitive let's do the loop okay so far so good now the final value that I would like to calculate is the average lengths between two triangle edges okay so that's the goal and maybe we could also get the average direction as well as an optional value the average of the vector field all right so let's do this inside the Loop we could get primitive number and then foreign so for each primitive I could get several attributes first I could get the vector field let's call this have a field one field let me check if I really have these attributes from here looking at the Primitive so I have okay average field it's the field the directional field as well as field links and L is the one that I have used to remap the value so in the end I could change I could use these l value which was made here here this one Okay so going back coming back to the code let's get that L value as well um Prim l frame okay no I think oh it's also a good idea to get the the normal Direction because we want to scale this non-uniformly meaning I just want to scale it to a specific Direction and to do that I think it's good to have a normal direction of the faces so let's calculate the normal of each face shall we place it place it here calculate the normal for the primitive and get that information as well all right pretty good now now I think I have enough information it's time try to first of all hmm assume that I have these triangle faces on 3D space and I wanna scale this in specific Direction now how do we do that in order to do that um we could use some rotation stuff now it's a bit hard to imagine by using the code for the edges so I'm going to test it out using different primitive wrangle primitive wrangle and test it out with just one triangle and see if it's gonna work and bring that function back to this one later so just pick one triangle to get from the this one okay so what I want to do is to get the field of this Vector I mean the mesh which is currently called as other field so let's try to visualize it for the marker okay it's a bit hard to see maybe the value is zero close to zero let me see Okay so the one that I have chosen is zero so let's use this one okay so this one has some direction and the scale here so this has a direction on this Direction I guess the reason why I have zero is because the Precision is a bit too low maybe I could change the Precision for this curvature um not sure maybe not or creating the curvature I could create a a same name field for each primitive as a vector and make it as 64-bit which will give you higher precisions that might give you a value well I still have zero so never mind about that because testing okay so what I want to do here is scale these triangle to this Direction oh or maybe not uh the this direction I want to use this as a guide for the anisotropy and isotropy so actual scaling should go to perpendicular should be done in perpendicular Direction okay so in this case the scale should done in this direction so in order to do that it's not straightforward you need to first place this on 2D plane X Y or XD plane then scale it from that plane and rotate back to the original positions with the scaled result so to do that first you get all the point position from the triangle so I have questions uh hi change Robinson good to see you all uh hello small question Vex stays the same through the different versions of they add some changes to it uh compared to the nodes I think the change is pretty minimum there are some additional variable introduced some variables has been introduced like dictionary or something or new functions but most of the most most of the functions or however type of the variable stays the same throughout the versions I think at least I'm using Houdini from version 15 and I don't see much difference in Vex so other than adding a big dictionary type on 18 or something so pretty much I think you could reuse the vex for whole version I think hmm in terms of the node node changes a lot so not so versatile over the version okay so I have the back Point position for each triangle okay now what I want to do first is to move or rotate and transfer it to X Y position or XD position let's do this to X Y position shall we now to do that we need to use two Direction one is this field Direction one is the normal direction of this face having these two direction I could projected on 2D plane so let's do that and I'm going to use the function called dihedral which will create a rotational Matrix or quaternion which rotates from one direction to another Direction okay you could use either Matrix 3 or vector 4. Vector 4 is the quotient our goal is quintonian then I guess either one is fine to use quaternion is more rotate oriented Matrix 3 can be used for other purposes as well sometimes and picture four as well but most of the time cartonian used for rotation I think from my understanding so the field name is of a field and I want to rotate the average field which is this one to let's say x Direction okay now using this quaternion I want to rotate the the each of these points so that they will align to X Direction but I won't need to do this one more time because if it's just one axis you still have some rotation on on this axis so you need to use this normal direction as well to map to do the another rotation so I'm going to create another one more craternion which rotates the normal direction to zero zero one okay now but thing is that this normal should also be rotated using this quaternion before using another rotation because the rotation has to be chained so I'm going to update the rotation of the normal Direction by rotating it using quotation one using Q rotate function like this and then up the normal will be updated you can use this for use it for the second rotation okay now that you have two quaternion it's time for you to change the Rotator Point position as well all right so to do that um first I'm going to move this to the center of the primitive I mean subdivide by center of the Primitive which is the centroid of the triangle just to make sure that the which root it's going to be rotated On the Origin which might be easier to see and then do the first rotation using Q rotate using quaternium one do another rotation two and let's see what happens I am going to set point attribute update the bullying position of each triangle with this position see what happens now as you can see um okay I have some problem here it's not really uh okay the problem is the field that I have right now is not really aligned with the triangle shape itself so what I needed to do is to First align this field so that it's on top of the triangle mesh now we could do that previously where we have this curvatures field which looks like it is being lined but maybe at some point it's not anymore not sure it does look like being aligned let me see where it was oh oh well yeah it is actually a line so okay so that's why that's because I have rotated so that's because that's why I am not getting the right align Direction now let's see what was wrong here so I have rotated with this first quaternion which is using average field all right this one let's check that by try not to use the second quartonian see what happens okay so this one seems to be okay um let's also rotate this average field with this quaternion so rotate uh what one and update the average field with this one well anyway the direction seems correct so that's fine now now we have the second rotation which is using the normal Direction and this part seems to do some problem here so whoops so I have the second rotation I have first rotated the normal Direction which which looks okay this is the updated normal Direction then I have quaternion 2 which is using the current normal direction to a z Direction okay then using that quaternion to rotate the Point position uh with it with these so and I was hoping this to be flat it's not really flat is it hmm not sure why hmm let me try with Matrix three see if I get the same result okay yeah same results so I'm not sure why let me try to rotate in different water so effective four quart two which comes first right then I am rotating the average field instead of a normal okay and then use that to create another rotation and then skip this part okay so this seems to do better result this is now on X Y plane I'm not sure why I didn't work uh with the previous setup not sure but now I could see okay would also like to rotate the average field again with Q rotate using Quant one oops now the direction is all next Direction looks good and for the normal um it's on the perpendicular Direction and that also seems fine which I didn't really rotate maybe the normal itself is being updated automatically that's the reason why it didn't really work last time maybe that's the case so I guess it's better to get the normal outside as a variable and because using the normal Direction directly from the attribute might give you some weird result that's what I assumed um maybe not do this um outside the loop and use that well still get these we originally the normal direction is this one right now I still have this normal Direction but it's um it still shows up shows the direction to this direction why is that shouldn't point to this direction um when they reset the viewport and not sure why wait um sorry I shouldn't update the normal to the point but I should okay now I know why uh the reason why I didn't work last time because I was using full loop then each full loop I was changing this normal again and again that was the reason why it didn't work last time okay makes sense um so so everything looks okay now it's time to do the scaling now since um this average field direction is the anisotropic direction of the scaling direction is actually perpendicular to this one so it's y direction so we could do the scaling here we can change this y value to something like 10 to do the scaling and then we could make this back to the original position by do the inverse rotation by creating the inversed quaternion like what one is Q invert all right then goes from use that to rotate back to the position in the reverse order and finally we could add the centroid now let's move to this wall this direction and it's change let's see what uh what happened from the original shape to the scaled shape okay as you can see this is the field Direction and this is the perpendicular of the direction and it has been load scaled 2D perpendicular Direction fine doing like this and you could change the scale value here to change the Scale based on the direction now we want to change this scale value based on the L value which is attached to the attribute attached as an attribute this one which is from zero to one so we could now change this to 501 f l to I know from 1 to something like that so based on the value you could change the scale maybe this could be parameterized now this is for the one triangle let's see if this is going to work for all the triangles and we could test that by making all the triangles unique just use the unique points to detach all the vertices and this is the result so for each triangle it has its own Direction and value changing the scale based on those information okay as so as you can see this is a really looks like it's really messed up but the goal is to uh apply this transformation to all the triangles and at the same time each vertex is still attached to the neighbor triangles okay which is a bit hard to do mathematically geometrically using like linealgebra so that's why I'm using Vellum to solve this non-linear problem right all right so that's the test and we could reuse these to do the scaling so I'm gonna just call PDS bring it back to this one line code now where can we use that let's just paste it right here and since we have two Primitives we could um bring all these code inside the for Loop mm-hmm like that okay let's open up the code editor I guess I should use the external code Editor to like sublime or something which I haven't set it up okay now let's see what I need to change so first I need to get the normal which I already have it so it's really this and I was getting all the points from the Primitive but currently all the points I need is just these two points because I just need those Edge information I just I don't need to calculate the rotation and scaling for all the three points from the triangles I just need to do that for these two points so but let's just so instead of having this one you could have an array by yourself something like that so you have two points all right now all rest of the stuff could be reusable pretty much I just need to change some of the stuff first of all I am creating the quaternion going from the normal mode to Z Direction that's fine and I'm rotating the average field now this part need to change it to this one right here okay now second quaternion rotating the average field okay I might need to rename this so that I could only use this inside this Loop just like the problem I had last time better to create the unique name inside this Loop okay in terms of the normal and I'm not changing anything here so I think I could just keep it as it is and so got these now this also needs to be changed I don't I'm not working on the point position or primitive um wait primitive Wrangle I need to get the center centroid of the triangles from this primitive so Refuge anyway I I don't think I don't really need to offset it to the center because I just need to do the rotation and scaling make this back to the original position so I guess I don't need don't need to do this process but just in case okay now finally this one FL has to be changed with this value here okay and this part the scaling part could be changed so the minimum could be one or could also go smaller but let's say I will keep the minimum well let's just made it possible to change both scaling like that okay and x and z is scale to one that's fine and I don't need to update the point position I just need to calculate the edge length the updated Edge lengths okay so this function for two points will update the triangle Edge position okay and using the final Point position I can get the distance between this one and this one updated the edge position and wanna and for each parameter if I have two primitive then I could get two different Edge lengths and finally I want to get the average of those two edges so um the way to do that going to create the array of vectors if there's many way but for each Loop I'm going to append this position that I have calculated here then outside a loop I know that I already always have two positions because of these Loop I'm going to calculate the edge lengths calculating the distance between position put positions calculating the positions 1 minus positions zero all right now I'm gonna add it to the average length attribute of variable outside the loop and if you have two Primitives then you get the average by dividing by the length of prints okay oops arrows distance okay I should not subtract it okay so let's see so now I should be able to get the average lengths using these code for each edges it's time to use this to update the rest lengths which is going to be used as a constrained value okay goal lengths for the spring Force I guess that's pretty much it and let's check that out now I also have additional Vector value that I could use so let's try to um have that as well which could be this which could be just adding these average field here and could also be normalized I guess um not sure if I should normalize or not but uh to the picture chip like I did for the average links okay let's check if I have this wrestling's applied oops nope zero something must be wrong average direction is also zero okay I did something wrong then for sure so okay I do have a village Direction so I am getting these value what's this the creation of pts oh I think I'll be reusing the name right here I should use the different name here let's call this npts and PTs and okay I'm reusing this eye value as well okay that's not okay is that okay do I get the update okay now I get this restlings and originally it was 0.04 so it got shorter okay so plea that is correct I'm not sure can't really see it these just edges so let's try to get rid of this delete try to see it here and if I can see all the updates for each edges so oh so this is the updated wrestling this used to be the original rear slangs the value sometimes changes sometimes not makes sense if the curvature is zero shouldn't change all right so also remove this one and connect this here and let's bring up the Vellum solver okay connect this one here nope not here here and this one to here okay I don't have to do anything inside a solver I think and let's see I don't need the Collision so I'm just gonna disable it which will make the simulation faster that's good I don't need the wind I don't need a gravity just need to make the edge lengths to what I have said that's all I need and I do need some bendings to make a smooth result so let's make the bending a bit more stronger not sure how much maybe one okay let's see let's see what happens with this setup hopefully it's not gonna explode okay so as a result you get something like these which doesn't really look nice at all but as I said it's supposed to look like this supposed to look really irregular shape what we need to do here after this is to do the uniform we're meshing using these mesh so do the remeshing after changing the edge lengths the using .01 okay and then we're going to make this back to the original position using the rest position but I have realized I didn't put any rest node anywhere so I should do that somewhere let's do this here meaning I have to re-do the simulation okay let's redo the simulation and all the color is a bit too much so I'm gonna get rid of the color make it white or maybe random is fine okay and then make the uniform remesh I'll just go with just one color for now okay now time to make this back to the original shape that and as a result okay I do see some stuff here So based on the curvature and the direction I think something is happening here here especially these part looks really obvious let's see what the field looks like so if I look at the field hmm currently field these fields are in this direction these buildings Direction although I don't see much uh directionality in this direction but I rather I see directions in this way so not so much not so correct okay I guess no let me try to change the value of the principal curvature to something different maybe I need to use a absolute larger which will give you a bit more informations about the size of the curvature now as I can see now the mapping of the curvature looks a bit more sophisticated okay just a little bit more sophisticated and the direction voice Direction wise um it's a bit too loud just to scale to here so flow is like always coming like these that so if we do have a clean flow rather than the smaller one we do have some big curvatures on these areas but I can see that the direction has to be rotated 90 degrees especially for these areas it's going this way but in order to have an esotropic meshing in this way I'm going to rotate it 90 degrees so let's do that only for this curvatures to do that you need to calculate the normal direction of the face then [Music] then do the rotation 90 degrees along these normal as an axis degrees with the normal Direction and rotate it with the Matrix all right that looks better looks much like it okay now let's try to redo the simulations again see what happens insulation part looks really funny but uh this actually works very meshing and make it back okay obviously the direction is uh wrong especially these areas I am not sure which part I did wrong let me check that by going back to these constraints check each edges Maybe by coloring it so based on the average length or rest ranks I'm going to try to color it so primitive run from attribute rest things and let's also check the range this links is from 0 to 0.09 okay so we have these okay obviously it's scaling to the other direction because this one doesn't really scale is it stayed as one in this direction is scaling a lot and so need to check if the l is in between zero to one that yeah that seems like so okay also need to check also check the curvature Direction Okay so considering this is the direction and currently it's scaling with this direction somehow why is that why is that I'm guessing something could be wrong first of all first of all um let me check again with these if it's if it's scaling to the Quran well yeah for this one it's scaling to the right direction so if you have a field like this it's supposed to scale in this direction it does seem like it does seems like it's scaling to that direction to this the original implementation looks correct all the problem here is I'm just wondering if this is doing something wrong I need to check so I have this Point position which doesn't really matter um the normal average feel from the second input do I have that oh oh yeah I do should be the same as this one yeah the line and so rotating I am rotating this position wait a minute what's this okay this is obviously wrong or is it no yeah it is wrong has to get from the second input but if I get rid of this delete it's not a big problem anymore so maybe not this is not the part which has the problem and and I have a quaternion Irish Feel creatinian Again rotating rotating the average field oh wait I didn't set the scale that's why now my pad let's say if you have smaller curvature make the scale to one if you have a bigger curvature make a 10. okay obviously that was the place I needed to fix I think let's see again do the mesh okay and do the remeshing maybe this is too big I also wanted to make possible so that this could be a bit more controllable because we don't really know what's the best value for this target size okay now obviously this is too big okay make this back and recalculate the normal see what happens there you go better result um so the mesh is aligned with the curvature of it mesh has been an exotically an installed drippy pulley and isotropically rematched using the vector field now it's not really clean from what I see so let's see how we could fix that um first of all we could try to change the iteration since I don't want to like play the play this timeline each time I need to check so I'm going to change the setup of this vellum so that I don't need to use the timeline to calculate the steps so instead of using the dynamic approach I'm going to go to the simulation tab change this to quasi-static so that I can set the calculation steps pre previously so that they will be calculated in single step this is useful so let's say I just need to calculate 20 steps right now let's see what else I could do here so first of all let's try to change the bending strings something High see if it could give some differences nope not much if I change the scale value to 1 and 1. which will obviously won't scale to any direction so it doesn't really gonna change anything if I make this to one five starts to take count of the curvature Direction yep 110 gave some more obvious changes now it could also depend on the original shape of the geometry I think so if we do additional remeshing beforehand somehow somewhere this might also change the result like that okay so after this you could I this is now this is the whole set of the base setup I think after this you could try to chain tweak this a little bit more fine tune the setup a bit more right now I don't really like this this stuff like here maybe I could do more of these now in order to uh dude in order to achieve that I need I think it's due to the smoothness of the simulation so let's see if I could do something for the setup of the selection gotta remember what I did pretty much the same I mean I don't need gravity I don't need collisions so what about the clothes so in terms of the stretch yeah I don't think I need the compression well the bending maybe I could increase the bending really high so I can see the change not much see it changes not much what it is doing what it does but um a little bit more more let's see if I subdivided and see if I get any differences okay well I needed to calculate the curvature so I need to place this above here okay not so good is it does it have quad quadrilateral I can't get in here calculating curvature and see so I'm calculating the larger absolute curvature hmm it's an average field rotating it okay and remapping the links like that okay and maybe like could make it a bit more smoother like this way see what happens this part so what's happening with this part so it's not really scaling much here okay so let's see what else I could do here let me also go back to the original stuff that I made and see if I did something different I don't think I did okay I guess the problem is when the scale is equal to zero right here maybe I'm getting the value other than one between 10 here here so let's check what kind of value I'm getting here okay so where shall we get that very shall we gonna make this as Mario full and try to get that value for each edges check that value if I get less than one then that should be the problem okay so okay I don't think I see less than one everything looks fine that's not a problem I guess that shouldn't be a problem I think that's fine um so what else did I do here okay instead of using new points I'm just gonna try to use this point number as it is because it's more stable right what else yeah let's see and oh but I could see that it is on taking an account of these original curvature so I guess you could call these correct if I can make it a bit more smoother especially these part looks a bit too much what if I use this one no not much not much difference let me check this out using a pig head see if I can see different result because I was testing with the big head and that was giving me a bit more smoother result if if this one doesn't give okay this one does give a better result so I guess I need to do some tweaking all the meshes like rubber toy yes this one looks a bit better maybe the scaling is a bit too high and I need to also control these yep change this to a rubber toy wow I guess that's uh due to the differences between the curvatures the curvature values [Music] in order to fix that um which was the best way do you I guess it's due to the remapping process especially especially where I did these right so instead of using that what if what happens if I just remap the field then just use the minimum and the maximum as it is as a range which will have okay now what I have I have a problem that a lot of the values are in this range just pause partial of the part values right here so can't really see the difference between the values if I just use the linear mapping now that's obviously not good so I guess keeping this is still find foreign gradual changes all right now why am I having some big value here so the where you have blue Parts you have less scales well you have red part you have larger skills so I guess if I increase this minimum value as well get better result if you make it the same you have similar to using the uniformed or normalized vector field okay okay and yeah so I guess it's getting there um still there are some stuff I don't really like about it but um let's try to give another kind of Vector field like using gradient gradient based on a lot of nosy Direction change it to the gradient and name it to the same name average field see what happens okay and would like to give the size 10 as a maximum mesh size is a bit too big okay so it's creating a direction in this way the grading itself so I showed it off so you have these Z Direction to on a mesh like that and it will use that information to do the anisotropic remeshing like that so I think it's correct if the value is small you don't have much scaling the ball is large you have more scaling looks funny maybe the scaling is a bit too much now due to using the Vellum solver um the size depends the size really changes a lot when doing the simulations and when using the uniform remission to the result of the simulations you need to take an account of how much it re-scaled from the original shape so let's compare the area between the original mesh and the simulated mesh then use the scale to make the final mesh area size similar to what we have as original so calculate the total area of the original mesh and also calculate the mesh of the simulated one and based on those information I'm going to do the transformation or let's just use Point Wrangle to do that so the source area and Target area we need to create a scale um how much you we should scale the target so that it will come close to the source area and the area is being calculated by the uh Power of Two measurement unit so I'm going to calculate the square root of Target area and also calculate the square root of Source area divided by Target area and that will be the actual scaling and going to multiply Point position with the SC so that final total area of this thing should be equal to Source One So currently the total area of the target is 8. and this one is also eight so it's the same area now by using this you could use a bit more constant value for the remeshing this one maybe I could also use some iterations for this one right okay something what happened maybe I shouldn't do the smoothing you know smoothing doesn't give you a bit of result I guess just a little bit is fine um seems like it is also changing the rest stop rest precision right so make scaling 2.4 hmm since these are all all separated separated maybe I need to give can give considerations to each part each Island's for now this will give our really big face here I guess these area is not getting any scales yeah not much scaling Happening Here I guess that's why um about the pig head so pig head is getting a bit better result somehow this one not so much maybe it's due to the number of islands I'm not sure let me just pick one of the Parts see if I only have that see if I'm gonna get any changes not so much now it looks like a duck I want to know how I could make this a bit more better result if I initially remesh this I get any better okay now it's gone where did it go oh what happened oh wow okay so it's obviously it's a exploding somehow something must have been wrong maybe it's the due to the structure of the mesh maybe the one Edge is having more than two primitive that's the case that might happen no oh wait it's already losing the mesh here where did we lose that where what oh okay well I guess this is correct I mean so it doesn't look good but not so wrong if I make this curve tweak this curve maybe I'll get some better result based on these curvature values so having zero am I not always a good idea so I need to think about the balance between the minimum scale and the maximum scale interesting let's go with the curvature and I am wondering having this result I'm wondering if the stuff that I wrote here is really correct or not so it's kind of a cheat but I'm going to bring the one that I wrote before and check commercial session mode um I think it's okay because I'm using the Indie right right and see this one gives different result okay just implementation-wise that I think this is a bit different in terms of especially in terms of the scaling part it looks different yeah so instead of using okay I wanna scale in y direction nothing happened hmm where does this L come from things average fuel oh okay so it's getting the length of the average to yield which I guess I have modified it previously this one looks cleaner let me just look at the previous one see what it looks like with the we have a toy see if I'm getting this result nope I think this one looks much better yeah so I think I am doing something wrong here yeah this one looks much better in terms of thought um meshing so I need to check what I did wrong well I know that uh the scaling part I think I did different stuff in the scaling part especially like here so let's see how I made the scales previously I can't remember so obviously previously these are these parts are pretty much the same but now the difference is difference is that after I did the remap okay did I do that do that okay so I do have median field lengths let's check if I'm really getting that this is more like a debug um okay I'm getting that maximum yep minimum okay oh yeah Okay so if that's fine Max min max and median comedian and a minimum it's fine getting the minimum from median minus different to medium plus different also Curry looks correct and probably I don't wait oh yeah this doesn't really do anything right now this is pretty much the straight line which also doesn't really do anything here now on the previous setup I was using I was calculating the scale at this point somehow which is which is pretty much the same Okay so and what I need what I'm doing here is updating the average field size as well so let's try to do that and instead of scaling having this minimum and maximum scale like here let's just do that previously instead of having the scale here just use the did it length of average field just this one and don't use this one okay now go back and give fit function to update it scale right here let's get from one to ten okay what's with this so I need to close this here oh I have a comment from opinion and actually there's a paper on fuel face any software conversion by Caltech ah really they actually give pretty great example how to do this stuff that's good to know I need to check that out yes I'll do that later now this um what I try to do so I have to updated links what I want to do now is to update the average field with normalized average field mode multiply by L and well I could also give L as an attribute as well all right and maybe I could also give another attribute call call just to colorize the value here and use this to color compute okay and also let's check the vector value um okay so it looks like this now after doing the simulations okay it's um looks pretty much the same I guess comparing to this one let me just use the same value one two ten okay seems like I do also have the color here ramp here so let's also remove the ramp well I do I still get better results what's so different say so the lens is in between one to ten be the same for this one yeah one to ten pretty much the same field lengths is between 0 to 11. now that one is a bit different hmm so I was using curvature principle hmm same so it turns off the curvature value curvature maximum and minimum looks a bit different somehow you have 0 to 11. but the color map was looks pretty much the same I think maybe a bit different hmm why hmm am I really using the median median planks or original curvature map looks a bit different somehow and I am not sure why maximum is 11. okay so it looks like these yeah pretty much the same think oh wait I'm using the remeshed version so this way should be the same result should give you the same result but the final result looks totally different why is that okay so the color I'm up wise looks same looks the same so other than that I gotta assume that the edge calculation part must be wrong I guess which is here with this part maybe I did something wrong here so let me check okay so just moving this to the left okay getting the points getting the edge at Edge half Edge Primitives yeah this is also the same King there's a second off and I'm also initializing average links um getting a center which doesn't exist here but that's fine wait a minute oh yeah it's fine and I have this array here which is similar to these and this is the direction of the average field and it's rotating 90 degrees based on the normal Direction which is in order to use the scale for x-axis so that's not really important okay do the rotation two times which is pretty much the same and getting the vector found positions pretty much the same and do the loop doing the loop two times for each point should I change the name here nope getting the position oh well this could be zero but doesn't really need to doesn't give much changes and after getting all the informations hmm it says I'm using at P so let's see if I if it does anything I think it does oh it did change something wait really hmm do I really need that really deep ly indeed this yeah I guess it does give a lot of changes hmm so at p means the center of edges but uh why why does it change stuff not sure so um okay rotating position rotating and scaling with the average length of the average field which is similar to here which is the length of average field right if I change to the same set up here okay so um having L and Direction outside and use oh here gives an error why is that okay so I don't have the normal here okay now it gives a more weird result this is this giving me the right no more Direction here I think so okay and the average field am I really getting that um hopefully and obviously you're scaling direction is not correct so that would be that's because I'm using different rotational orders so I think I need to use this L somewhere different either r y or Z I guess y was correct but in those cases even set up as I did without rotating the okay I'm not using Direction anywhere hmm so to use this direction well let's just replace this with the original so I have these it's called Q let's get this ah wait maybe I know what I did wrong okay calculating those quad turnians seems like I'm calculating protein and inside here that might have been a problem right now um now I have Rock one row two rotating with rot one root two and I wrote two and one send change the scale with l one one and a normal uh also need to get that normal Direction just rename this to n inetic wait to use then here okay and other than that pretty much the same okay they're eating the distance adding average lengths here oh do I need to make it float um I don't know since this is already float I don't think I need to but uh okay I think I'm just getting the same result hmm not sure why sure why I'm getting this different result hmm this one obviously looks much cleaner doesn't have much too much skilled stuff here even if I change the scale to 1 to 100 still give you a better result but this for this case if I give 100 I think it's gonna just make that's just really dirty huh huh hmm why I'm changing wrestling's rest ranks wait wait a minute I'm have oh why am I I shouldn't have delete this is removing the vending I guess that's a big mistake okay that was it I think much better so the reason was I was using this delete which I only used it for the debugging but forgot to remove it so I guess the previous implementation was correct just that these delete was doing was removing the bending forces which prevent this being smooth okay oh sorry for that I guess but in the end it went well let me just clean this up okay so well that's what happens if I try to do this on life anyway I think it went all well I color this randomly yeah I could see the flow I do see a little small stuff here but that might change changing the step of the simulations like 25 or something yep much better um okay so changing this to a gradient yup much better much much better clean flow rather gleamish I do have some bands here about the overall looks fine I think it is taking account of these gradient Direction and amount okay so the field could be anything doesn't really need to be curvature or gradient or anything it could be any Vector field you create for example it could be a picture field coming from like a noise function it might need to be aligned with the e H faces so I might need to calculate cross section across product between the normal and the average field then do the cross section again between this one and the normal and let's try to visualize that see how it looks like okay that looks a bit too big okay so I'll try to create some interesting flow give some shift okay it's not really changing its direction that is because [Music] this is all the positive direction so to do something like that okay gives you much interesting result So based on those flow let's see if you if it can give you a flow based on those flows and the color indicates the strength of this flow but in this case I might be okay using just the normalized scale just to see the flow itself okay the size doesn't really matter anymore meaning you could use the same minimum and maximum scale here see the effect there you go comparing these mesh together with the flow itself you could see that the mesh is you could see the only saw Tropic mesheska is really working you could see these alignments the vector field is aligned with these triangle meshes yeah so I think it's working yep so that's it um that's how I did I'm not sure how practically this could be usable but I just wanted to show some approach it could be useful for something other than and isotropic remeshing using Vellum as a solver non-linear solver might be an interesting thing to approach in terms of the problem like these especially for geometric problems pretty useful so that's it you could you feed in any kind of Vector field get the result okay so let me know if you have any questions if not I think it's time for me to go to bed so before being think most of the time I've been debugging so sorry for that but uh that happens um I have a question do you need to what Mac machine are you using I'm using MacBook Pro M1 Max with the 64 gigabyte of memory RAM oh it's pretty high spec I guess I don't plan to buy M2 though it's too expensive all right in terms of modeling I'm okay using either Mac or Windows but in terms of rendering I guess I need I still need to fix use Windows instead of Mac because GPU is not that great on Mac all right well thank you very much everybody for joining even after a month of absence um I will try to continue doing the live stream as well as other videos oh our algorithmic designs given that you use all this Vex code do you do any glsl or other Shader languages um I sometimes do webgl uh don't write that much code there but but I do a little bit of juice and webgl as well as some um Unity shading Shader languages but uh casually okay let me bring all the parameters in one place and finish this life I'll just keep this as a reference here I'm gonna name all these Edge links today do you guys have any questions in terms of the process if so let me know or if you have any idea how this could be used that would also be great because I'm not really sure how I can use this it just try this out try this idea that I thought it could work and seems it did so I just weren't sure if the in terms of how I can use this in practice I am not sure so the contact paper first in the link above gives example how this actually can be implemented nice um actually I don't see any Link in the chat Maybe YouTube is deleting the link from the chat do you know the name of the paper if you could paste the name of the paper I could search for it okay maybe it's this one looks like it's using Vector field nice gotta look into it this is really nice oh clean just to have these kind of lines is also nice say hmm cool yep thank you thank you for the reference I will definitely look into this okay let me clean this up a little bit so was I so this is the input and this is where I calculate the Vector field creating a vector field and this is where I'm creating all the uh which is for actually this should go here and this should go here this is the simulation part foreign geometry so what do we call that defrost I don't know and you get the final result now let's also create a null node have all the parameters you could control with the setup and I also want to delete the parameter from this which I'm not using anymore key hmm you always try to do everything index um if it's possible yes because it's multi-threaded it's fast but um sometimes it's pretty hard especially if you want to do like large number of Matrix calculations I do need to use Python those cases but for the geometry processing especially in Houdini if it if it's possible I would love to use Vex because it's easy to use it's pretty low level fast fast in processing all the good stuff here and most of the geometry operation could be done in linear algebra so X is good enough but not always I mean if you need to interact with external files or need to use some libraries which has some Rich functions I do also use python as well if I can do index I'll choose that if not it's not really Limited have you ever tried simulation stuff uh tops I don't I'm not really good at dops like fluid simulations or anything I did do the basics I think I know the basics but I don't know the advanced stuff about the tops hmm one reason is because my PC is too low spec doesn't run simulations fast and another reason is there's too many parameters that I don't know what it's doing so a bit feel more comfortable if I just make the solve for myself even though the function is limited and I am not on the VFX or gaming field I'm more in the architectural field it's making geometries static geometry so don't have much chance to use simulations myself have you ever considered a series like your effects for Alchemy design but with python and what you can do with it in Houdini or like the videos like in that in general analyze data with it that sounds really interesting yes I would like I would love that kind of idea yes um if anybody is interested of course I myself is really found it really interesting well the next video helped me a lot to understand and learn mixing thank you for saying that motivates me a lot P stands for what was it okay Power I don't know if I need this since I have this curve so I'll just get it for ramp minimum scale maximum scale set the range or maybe 200 all right okay what else I have I don't have any parameters here I think I could set the parameters for how many iterations I'll it will take to calculate so this one here all right and this doesn't do okay the final remeshing value anything else nope I guess that's it okay so everything is in one place to control the shape set the simulation iteration to 10. gives you a result faster try to change the splines and see if I get any differences this is maybe not sure change this to curvature and see if I see some differences changing the Curve I'm not sure if I'm seeing the differences here kind of not seeing the differences here has this been used that is because minimum scale maximum scale is the same okay there you go okay I do see differences now nice nice okay good no okay um [Music] uh you mentioned you're not in games but have you actually considered it as an option or are you more passionate about staying an architectural field well I love playing games I do love to or Morgan gaming field if I have any chance for sure yeah I mean I do use Unity myself to create some introduction stuff or work and I did some small games myself as well so yeah pretty sure interested just need an opportunity I guess um all the elephant how often do you use vops or vops and that's similar I saw people say you can do noise and stuff and watch better I don't do bots myself I know I used to use that previously but I stopped using it um because I am more I became more fluent and vexed and I can write faster index but pretty much you can do same things both in Vex and bumps and as you said Bob involve the noise option is more um graphically easy to control rather than Vex because all the noise types are packed in one node in Bob but uh each noise type is being used as a different functions in vex so you have to know each functions how it hmm operates for each functions if you are using Vex so it's a bit hard to prototype compared to Vault I guess if you don't know the functions then you won't be able to use it that's I guess that's the problem with the vex once you know it's much faster to implement so I would choose X I guess and there are some functions missing in bulbs just a few but which only available only available in Vex I think I used to be um I'm not sure right now if that's the case still but uh for example the function like SVD decomposition like this one I think I couldn't find this in Vault so yeah this kind of stuff I mean this is not a daily thing to use for but uh sometimes these function cuddles could be really useful for some cases so for those reasons I guess I would prefer Max myself about everything I did here today I think you could also do that involved [Music] um saying that you are interested in potentially games would you remind me in Flight message about it any technologists using Houdini learning games that might be able hmm definitely yes I love that yes if any information any information is glad to have I'm using Twitter so you if you could send me a message there as a direct message that will be great okay I think everything is um set and all the things can be changed via these parameters so it's pretty much it for today and thanks for joining hopefully hopefully you found something interesting here um the one the things that I did was a bit um not the casual thing to do not maybe not so much useful but um week to week I'm gonna come up with something interesting in any many directions sometimes entertaining sometimes funny sometimes useful Maybe so please okay that's it thank you for joining the live I'm going to change the color to something a bit more nice so I'm going to change this to HSV to rgb2 make it like a pastel color all the way around lgb2 there you go a bit nicer okay without the edges more like a stained glass like but okay now that's it for today hopefully I'll be able to do some live next week as well might going to be really casual ones for next week okay well thank you for saying that hacks um I really appreciate it um I know that the way I explain is not really destructible but um I'll try to train myself explain it in a short time try to implement it in short time well you okay you should do something growth related yeah I really I love growth related stuff as well let's try to do that kind of stuff videos have really helped me and other colleagues I work with oh thanks for saying that really appreciate that not knowing that things I do have some help somebody is really great to know yep a big thanks for from Japan oh then I guess it's time to go to bed good night everybody and hope you have a good day currently it's 3am in Japan so a bit time cute thank you thank you [Music]
Info
Channel: Junichiro Horikawa
Views: 52,208
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: BbuG7x-Zr0M
Channel Id: undefined
Length: 201min 57sec (12117 seconds)
Published: Wed Feb 01 2023
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.