Houdini Algorithmic Live #107 - Sci-Fi Dissolve

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
hello hello good afternoon can you hear me can you hear my voice let me know if you can hear me okay all right so this is stranger horikawa and this is the weekly tutorial tutorial live for Houdini which is called as Houdini algorithmic life this is the 107th episode for this series of tutorial live stream and the topic that I would like to share with you today is to create some dissolve effect geometrically procedurally using Houdini because it is procedural you can just go back and forth by changing the time frame it's not based on the solver it's more of a geometric calculations you could also change several parameters like changing the size of the grid grid based particle dividing the geometry into grid like this to dissolve you could also change how many frames to use for the dissolve more frames you have you have more gradient in terms of to solve less frame you have you see less particles being blown away at the same time you could also change the offset for the end and start you could also change the angle when it dissolves by increasing this angle you can you are I'm rotating these particles or a grid like this but if I set it to zero we'll just stay it as it is like that no rotation and I also have this up parameter in order to lift up those particles when it disappears or dissolves but if I make it to zero it stays at its position and just scales down which makes it more of a Sci-Fi like dissolve be also interesting so that's what I would like to share today how I did this which is not that hard to do it's pretty simple so I'll help you enjoy it okay now first thing first as you can see I'm using some cool 3D scan model which is free to download which is a Creative Commons by 4.0 license so you can share and freely but even for commercial usage I'll first of all show you where you can download this kind of models which is shared by Kyushu University which is a university in Japan on the south area of Japan and while this is written in Japanese but if you see it in English it says more than 1400 realistic three digital biological specimens model has been released freely by a research lab I think and you can download it from a I guess this one from a list the page of this sketch fav page and each I mean there is like more than thousand models for specimens like you can see here and each one of them you can download for free and it's free to use it's the license it's this one attribution 4.0 International CC by 4.0 you can copy and distribute the material in any medium and format and you can also remix transform and build upon the material for any purpose even commercially that's big so this is pretty cool I think you it's you'll you'll enjoy this a lot I believe so what I did is to download one of the model from here which was a Japanese crayfish somewhere that could I cannot find it anywhere but if you go here on to one of the page this is a dragonfly and there is a download link here you can download bunch of models which is limited to jltf USD Z or glb in my case I have downloaded a glb.glb which has the 4K texture okay which which will be the biggest size of all and I have and you can actually import this glv file inside Houdini so let's try from that shall we okay I'm going to create the new file for Houdini to do it from scratch starting from import the glb file and tell you how to use it all right Okay so first thing first I am going to save this to today's folder one here what was it called Psi Phi it's all right now I'm just going to import the crayfish file that I have downloaded in my folder but you can just choose your own glv file for your choice and first level I'm going to make the background dock create the geometry oh by the way for people who are curious where you can download the file I'm gonna just paste the link to the chat all right now let's do this um in order to import the glb what I'm going to use is the file menu to import the gltf scene glb is the binary version of gltf which includes the text Ure accessible okay so let's try to import that which is in my folder here all right then import this will import the crayfish yes now and they're supposed to be a crayfish model a glb model right here and put it in your LBJ Network now hide this and let's import this model inside the obj I mean the g01 network by using object merge and what I'm going to do is to select this one here now this doesn't really import the mole you have to look into the children by using star like this this will import everything but uh it is also importing some unnecessary geometry so I'm just going to delete that double click delete all right and there's actually another null geometry inside a glove which I don't really need this one so I'm just also going to select this and also delete this one select okay all right nope it's not deleting well anyway okay I'm just gonna keep it as it is now the uh there are some issue with the rotation here so let's also fix that semi-automatically somehow I'm going to use the bowel node to cover up the crayfish model which its orientation is a bit off and use the oriented bounding box which covers the crayfish by its fitting but minimally fitting the bounded box Now by using this one you'll be able to export the attribute called xform for a detailed attribute if you look at the detail attribute of this geometry you get this 4x4 Matrix which is the transformation matrix which includes the translation rotation and scaling what is bounding box I guess there is no scaling but there's only one just translating and rotating so which is the result of rotating and translating the bounding box which was on XYZ plane meaning if you invert this Matrix transformation matrix you could make this bounding box go back to the XYZ plane orientation so let's try to do that I'm going to use the pointer angle the one that I want to rotate is this club or a crayfish so give that as a first input and connect the bounding box with the X form The Matrix attribute to the second input then let's get that Matrix information first we're calling the detail X form right and as I said I want to invert this and then you can apply this transformation matrix to the position each point position for a disc crayfish like this and now you have somehow oriented Club fish which is still 90 degrees flipped butt better than before better than this one all right so at this point you can just translate you can use to transform node to rotate 90 degrees in in this case z axis like that and voila looks nice let's calculate the normal and looks pretty nice looks pretty nice and oriented nicely all right now that is the start okay so first thing that I would like to do here is to uh make this geometry as particles and in my case I want to make it more like a Sci-Fi effect so I'm gonna make it like grid Square grid could also be a hexagonal grid but creating hexagonal graded with the textures a bit hard so I would like to do with the square grid now in order to create a square grid on top of complex geometry there is an easy way to do in Houdini you can it's not exactly a square grid but you can use the byte node and there's an option called first turn off the convex polygon there is an option called breaker polygon and if you show up the edges which in this case the glove has too many edges so let's try with simple geometry first they're like sphere right and if you try so the sphere looks like this and if you try the Divine node with polygon breaker polygon option by making this value smaller you start to see those Rich lines here on top of their sphere which is the result of Cuts made by a cube of this size in X Y and Z Direction and this is the outline of this intersected Cube and then what I would like to do is to take the part or intersected piece of this Cube and use it as a piece to dissolve as one packed surface but that's what I would like to do so in order to do that you need to have each of those like separated faces with uh similar attributes right so how do we do this now in order to do that first of all you need to know what's the size of the cube and how this breaker polygon works so first of all let's give a parameter so that you can change the parameter later I'll give you I'll create a null node which stores all the Global parameters that I would like to control and waiting is taking time hmm weirdly it's taking too much time just trying to open the parameter interface how come it's taking so much time that's weird should I just reopen Maybe I don't know okay not responding for unknown reason I'll just go goodbye okay now I need to go to save that file all right where is it okay here we go and I also have to go to my project folder okay sorry for that this happens sometime Okay so let's paste this to here okay let me try this again I'm gonna reopen the Houdini okay okay finger crossed and okay now it works okay so the parameter I wanted to set is the size of the breaker pulling on so I'll just say cool size right from I guess from zero to one point it's okay for now all right so let's copy this to make it uniform in X Y and Z Direction I Would Like to make the size for X Y and Z the same so let's just paste that parameter that I have just copied to x y and z and see how this value affects the division okay the interesting things with this Bricker polygon option is that even if I move the the base sphere or base geometry to any direction the breaker polygon division doesn't really change so it's not really related to the absolute coordinate where it's being cut but it seems like it's being based on the bounding box out input geometry so now that I know that it's based on the bounding jump okay it's geometry what I would like to do now is to calculate or estimate how many cubes are there going to be in the X Direction y direction and Z Direction and then for each Direction I'm going to plot an integer value or applying an integer value for each Cube in the X Direction the integer values should start from 0 1 2 3 4 5. for y direction zero starting from the minimum value 0 1 2 3 4 based on this size which is currently 0.153 and also at the Z Direction maybe if this is the minimum zero one two three four and so on so combining all those three integers you'll be able to uniquely identify D Cube or the faces that's been cut by those cubes okay and you can identify by checking the position of each primitive if it's it within this range then that means I mean you could estimate this ID somehow so let's try to do that after you have created the polygon what I would like to do now is to use something like primitive Wrangle right in this case I think because you want to look at each primitive to see in which Cube it is inside okay based on this size and the bounding box size of this input geometry so alternative wrangle I'm gonna I'm just gonna call this ID and then first thing first uh since you need the bounding box informations of the geometry I'm going to get the minimum and maximum bounding our using get B box like that like you do always and next all you need to have is the size information of this Cube so let's import that as a parameter create a CHF Channel like that and copy this value to here all right now starting from the minimum bounding box positions which in this case should be somewhere around here at the bottom somewhere around here okay I'm going to count by size the multiplication by multiplication of size and see if each primitive is in which um numbers of which Cube is inside which um which which surface includes in which Cube in terms of x y and z right so oh got a message why how are your icons are so bright and saturated is it is my color a bit weird for interface you mean let me know if that's the case I don't know if I can fix this um what was I so in order to do this I am going to first of all get the Middle Point position of each of the Primitive which is considered p you see now I'm also going to offset this position by minimum so that you could consider that the position can be calculated from the zero zero zero coordinate okay now what you want to do next is to divide this by size and by doing this you are creating a float value for x every X Y and Z coordinate of the point position and by using floor after this you're going to um make the float number to integers and if it's zero if it's if this number is zero then which means it is included inside the ID equal to zero I mean the X number equals zero y equal y number equals to zero Z equals zero and so on and let's check what kind of numbers we have for this pulse ID for each primitive to see get the idea what I mean so this is the primitive parameter I mean attribute and as you can see the value is incremented by one for all x y and z like this let's try to visualize this to see how it looks like okay probably using Color node and or maybe I can just change this plus ID to color itself now in order to make it as a color value I think it makes sense to give this back to from zero to one for each of the coordinate so let's see if there's a good way to do that maybe you could just multiply this by size again okay now it's a bit hard to see maybe so going back to the Primitive wrangle maybe I'll adjust set the color to none and wait maybe I'm just gonna use the color node or primitive and use the random form attribute and choose the pulse ID [Music] um which didn't really give it's pretty much the same so um let's just say random here based on the pulse ID here which should create some random color okay so this is more obvious here as you can see by using this calculation I have mapped each surfaces which being trimmed by the cube with different IDs and each surface has three unique uh three coordinate values and the combination of these values are going to be the unique ID of each surfaces so in order to make every coordinate being placed as one value I'm going first going to create a string value called name by adding all these X Y and Z coordinates as one string connect it with the connected with the comma okay so also ID dot X which I'm going to use it later why and z okay let's check so I have the name attribute which has all the X Y and Z in digital value placed in one place okay let's also try to create a Center Point position of each surfaces as well which is um which is the center of the cube in this case I think so um let's do that I'm going to name it as pause and the center point of the cube is actually retrieve can be retrieved by decoding this pulse ID so first of all by multiplying plus ID by size you'll be able to get the real size zero coordinate size then you also want to start since if you want to get the center and this will this value will always start from zero zero zero okay so you want to offset by 0.5 of this size on each x y and z so give an offset for size on X Y and Z Direction then finally you also want to start from the bounding box minimum position to get the real position because you have subtracted here so you want to make it make it back to the original position so this will this should be the final position and let's check if this is correct to do that you can just try to create single point to this position see if this is correct or not and so this point is the center of the cube and looks like it is correct I guess I guess yeah hopefully it is correct it's not that way off so I think it's correct the base it's also based on the grid like that right looks good okay um I have a question from guy primitive Wrangle is run over a points of polygons primitive Wrangle runs over A Primitive each polygons in this case sometimes it could also run on each edges but in my case I have only polygons so it runs on primitive or polygons I also have a question from Big View can I move from in Prim Wrangle by ATP uh no you cannot print directly move the primitive by changing at p in primitive Wrangle but you have to access the point position in order to move the primitive for example if you just want to move the Primitive upward and you and if you light it if you write it like this it doesn't really move primitive doesn't work like that way so you have to either use Point wrangle or you have to access the point number from the Primitive and use move each of the point um and stored in the well related to that primitive to move upward so in order to move the point position you always have to access point okay so I think I've got enough information motor particle or photo dissolve and let's start to uh create some base dissolve effect out of here and I'm going to switch this back to a this is switch this back to robuster or crayfish and it gives me an error somehow how is that let me try to rebuild okay now it works okay now the problem is this um 3D scan geometry is that it's a bit too big I mean in terms of the meshes it's too high-res so let's reduce this a bit by try not to change its UVS to mess up with the textures so I'm going to use the poly reduce for this high-res mesh as much as possible if I make it 10 percent okay that's not really good let me first fuse the vertices before see if it fixes a little a little but not too good make it 20 percent a better so looks okay looking from far doesn't really look weird so it looks okay so let's go with this and the number of vertices has been Limited so far okay so looks good so let's go with this one let's also give a switch node so that you can switch between different geometries or dissolve effect for testing I'm gonna go with the crayfish all right now the next thing I would like to do is to create some hierarchy between the particles to Define from which particle should dissolve to the end okay no the easiest way I could think of is to Place several points in the space and calculate the distance and based on the distance based on the shortest distance I'm going to decide when to start dissolving each particle or each grid face so let's give custom or several points which you want to use it for a agent or a tractor to use it for to use it to calculate the shortest distance so just Place random points anywhere you want I currently have two points so I guess one from starts from Club one starts from the tail like that okay and let's try to calculate the distance shall we so in order to calculate distance the distance that I want to calculate is between the center point of the grid to each point so what you want to do is to calculate the distance between the one that's storing the Primitive attribute called pass this is the center point of the grid and the actual point position of each point okay now to do that I think it makes sense and for later usage you want to dissolve each particle separately so and currently the problem with this model is that if you double click the faces all the faces are connected like this but actually you want to separate based on this connection or based on this grid connection a great part so let's first of all separate each faces based on uh pulse ID or position such as that kind of information or it could be a name so to do that I'm going to use a unique points node and based on the attribute which in my case want to use the Primitive attribute doesn't show up here but I think I can use the Primitive attribute anyway so let's try to use pass ID right and see if it separated the face by trying to double click the face and as you can see now the face has been splitted into a bunch of grid face made by a breaker polygon option from divide node which is good all right and each primitive which is in the same Cube shares the same position so what I could do now is to um calculate the normal position for each point and then promoted to attribute promoted to a primitive which will going to be useful for later usage like that so that each primitive will have the same normal uh attribute okay I'll tell you how this could be useful later now let's try to calculate the distance based on the primitive position and the Point positioned customly set by yourself so to do this since the position that I would like to use to calculate the distances inside A Primitive Wrangle on primitive attribute I can use the Primitive attribute primitive Wrangle for that connecting the CR crayfish to this first input and connect the custom points to the second input and let's try to calculate the distance and what I would like to get is the shortest um distance out of two points or multiple points store coming from the second input to each of the parameters so first of all get the position out of primitive then Loop through all the points from second input then um get the point position from the second input like that now it's time to calculate the distance between oops oops I shouldn't name it the same it's name is print boss so in between the Primitive position and the point position we get some kind of distance and since you have multiple points you want to search for the minimum value so one of the technique to get the minimum out of all the point list is to first of all now create the variable which has a really big number like this and then create the conditions between this minimum distance and current distance that you have just calculated and if the minimum distance is larger than the colon current distance then then update the minimum distance so that minimum distance always will have the shortest or the shortest distance yeah then as a result you'll get the smallest or shortest distance and that's the one you want to store on each primitive all right looking at the Primitive Wrangle and primitive this attribute you get this distance and if you share the same position ID you get the same distance because you are using the same position attribute here right and based on this distance I would like to create a dissolve um particle dissolve uh effect so if the distance is close to zero that's the one starts to dissolve first then gradually dissolve to the further distance like this one this will be the last grid to be dissolved okay so in order to control it together with the frame range here I think it's uh I think it's wise to get the minimum value of this distance minimum maximum value of this distance so that you can control the timing precisely even even if you have different distance for different geometries you can generalize the output so let's calculate the minimum and maximum of the distance using attribute promote for each primitive and store it in detail change the name to minimum distance don't delete the original and then set the minimum you want to calculate the distance do the same for the maximum change this to maximum change the name to max distance as a result going into the detail attribute you get the minimum distance and maximum distance like this okay uh why don't you use the node distance along mesh distance along mesh I haven't used this I haven't used that is this this one distance I guess this is the geodesic distance calculations well I guess this one will calculate the distance for each point to point right but the thing is that I don't want to calculate the distance from point to point but I want to calculate distance from point to one of the attribute inside A Primitive okay for example this primitive this primitive have this whole primitive each one of them has the same attribute called pause and have shares the same position which is the center of the cube right and I want to calculate the distance that position with the custom points okay so I am not sure if you can do that with this one with this limited amount of parameters probably you could with some tweaking but I am not sure how to use this and this is also a geodesic distance so maybe I mean using geodesic distance is totally fine but currently since I'm not calculated the calculating the distance with the one that's on the point that's on the surface this is just the attribute so you can actually use the geodesic distance so I think this might not work I mean if you tweak a little bit might be able to use it I don't know or the other one distance from geometry this might be able to but I guess this is also based on point to point distance so probably this could be also difficult to use yeah if you know what I mean so this only calculates the distance from each point to point but I'm not I actually don't really want to calculate distance from point to point but the attribute from the Primitive two point so it's a bit tricky so it's not just a simple distance thing you know so I guess in order to use that I need to tweak this original geometry to be able to use that kind of node all right I hope you that now I have minimum distance the maximum distance now what I would like to do is I think I have all the necessary information for dissolve effect to create the animation so let's try using this at this moment at this point I'm going to use and again A Primitive wrangle or [Music] um comparing with primitive Wrangler and point Wrangle I think Point Wrangle runs faster because it can deal with simultaneous points in one time okay but for primitive Wrangle in order to create the animation you somehow need to access the points from each primitive which in this in that case you need to make a loop inside a Wrangle which makes a bit slower than Point wrangle so to make it performative to make it efficient I'm going to use Point Rango instead which is which should be going to be faster a little bit compared to primitive wrangle but either way is fine using primitive Wrangle might be easier to do but let's go with this all right now first of all let's get those detail attribute the minimum distance and maximum distance distance and then get the actual distance from primitive now it is not stored inside the point as you can see it's stored inside a primitive so shall we also promote that has a average value to point mute mode from primitive to point as an average value don't delete the original as a result you get uh distance on point as well all right so distance is f at this now first thing I like to do is to try to make this distance in between zero to one normalize it for easy usage so I'm going to call this D and using fit function to remap the distance which is in between minimum distance to maximum distance and make it from zero to one this is called normalizing and it's always useful to make value something like this in this range zero to one okay now next since I want to deal with the animation in this case using these frame values so let's try to create some frame based value shall we so um in our case let me think how we could do that I mean what I would like to do is to from using the distance and I want to change the scale of each particle from smallest distance to starting to dissolve from the smallest distance to the farther distance okay so if I just so I just want to I'm going to try to use this D as it is for now to scale each particle to see how it looks like now in order to do that you need the center point position off the square grid so let's also promote that which is called position okay so I'm gonna call it Center so first of all you offset each point wire Center so that each point will be come you know I think it's not working okay I do have these values here seems like points are not really moving so how okay it is so by moving each point with this Center Point position interestingly enough all the points are within this single Cube pretty nice condensed pig head okay well what I would like to what I wanted to do is to after I have moved this into the center what I wanted to do is to scale each point by this D value based on the D okay change something and after you have scaled it you want to make this back to the original position by adding Center Point position off the cube again and as a result you get this map which kind of a shows the how much distance you have for each primitive for each point right here when the scale is really small which indicates that the D value is really close to zero and when the square square is really big like somewhere around here somewhere around here which means the scale value is close to one now what I want to do is to animate these gradient from small to big okay then how do we do that and in order to do that I somehow need to use this Frame value somewhere okay now let's consider scale as t I'm going to replace with t and for now I'm just gonna copy d just the same now what I could think of is to by remap them or remapping this D with some kind of value for example fit and if I make it 0.3.7 and remap it back to zero one one we're going to have some kind of range like this interestingly if I make this to one at the end something like that if I make this 2.7 4.8 and this one to be zero you get another kind of range so so I what I could think of is by changing those value I could somehow create some kind of animations and changing those value based on the frame might do something so let's try to create some frame based value for this value and this value here and what I'm so I'm going to name this as Mindy for this value and Max D for this value all right now what will be suitable for each of the value I'm just gonna test by create just using the frame as it is let's see how it works maybe trying to change minimum first and fix the max to one and since it might make sense to um normalize this Frame as well because D is in between 0 to 1. so and the frame is in between one to the end of the frame which is in this case 240 so you can say F start from f start to F and normalize it to zero to one see how it does okay if I play it so it seems like it gradually dissolves like this interesting how do we how does it look like when it is for Max D now this is more like it you're starting to see the dissolve from the shortest distance to the maximum distance so this approach looks like a way to go so let's start by trying to modify this Max D value all right but the problem here is that it's just dissolving using the whole frame which is not really ideal you just want to use part of the frame to dissolve gradually to make it a bit more neat effect so let's try to create some value gradient range it could be in an integer I guess since this is a frame and let's say you want to use certain number of frames for gradient for example like use 40 frames So within 40 frames you have gradients and above that or less than that you get scale 0 or scale 1. okay so that's what I would like to have here and in order to do that let's see how we could do that um so let's think let's think somehow we do need to remap this frame for sure okay and let's see since this is an offset value um I think what I could do is to subtract this offset end with grad range see what happens okay and I believe I also need to change this minimum d as well using the same frame but with different offset okay go along with the maximum d [Music] now this one and this one currently is the same value so let's try to subtract the this one so that you have some range between this one and then this one you have exactly grad range difference between the minimum D and maximum d okay as a result you start to see something you want nice and if you change this to zero you no longer see any gradient it just disappears like that if you see it carefully this means zero so this value and this value become the same in that case so you just um creating value either 0 or 1. so that's the reason you're getting either 0 1 as a scale but if you have this in between range here if you have a value in between this one and this one you have some volume between 0 to 1 within this Frame will be able to create some gradient scale this based on the frame now it's already looks pretty nice all right so after this I think it's much easier to set several like options for example currently the degree on the dissolve starts from the very first frame as you can see soon as it reached to the second frame it starts to dissolve and if it reached to the final frame it just ends as is if you want to have some offset frame like you want to keep this geometry still for 10 frames in the start and also keep keep it disappeared for 10 frames at the end you might need to have you might want to set some offset frame additional offset frame parameters to this one for example if you want to have if you want to keep the state of this crayfish for 10 frames let's name this start offset give it 10. now I need I guess I need to bring this somewhere inside this minimum D and maximum d now where could that be I could just try um it's a bit hard to imagine so I'm just going to try to subtract it here first of all see what happens so it does start so it doesn't really look like the one that I wanted nope so what about placing it here nope not really I might I might need to subtract it this to both um minimum d and a maximum d for all like I did for the grand range so let's see where I should do that let me also try this here okay now I I see that I am getting some start off from the very first frame so in order to [Music] um avoid this I think I think this should not go here but this should go here right and also you want to subtract it about the end and probably you want to do this to here and here now it's getting a bit too complex so I do see that from within 10 frames it's not really moving but I do see some holes here what's this huh interesting that doesn't supposed to happen even with the frames equal to zero still happens I guess that is because when the distance is equal to zero okay consider this is equal to zero and the minimum D and maximum D is someone somewhat from I don't know zero to one guess it's a bit hard to remap the value which is equal to zero so I guess I might make it might need to make a bit more than zero I'll just a little bit just to avoid this remap remapping zero value illegally because in if it's if distance is if D is equal to zero and if if this one and this one is the same value then you get some the remap just goes wild crazy so in order to avoid that might need to go just above zero for this one maybe probably the same for it the value equal to one so just in case I'm gonna make this like that I don't know maybe I don't need to do this okay so by increasing the start offset I can stop this state for a while then start dissolving till the end Okay so the same idea could be applied for the end offset probably by subtracting some value to one of the uh equations although this looks a bit too I mean too complex already so maybe I don't really need this but as a log I mean you could skip this part for sure okay I'm going to create another parameter and and the end part should go so first of all hmm so it is the it is the end information so I think I only need to subtract the F end part here okay so hit offset also this one and let's see what happens so I won't let's say I want to keep the disappearing frame for 20 frames so this is where it disappeared and you have yeah somewhere to any frames left at the end make it as a blank space okay which might not really be useful but uh just as a tip this could be some useful template for some animation setup Maybe all right so so far so good let's try to make the animation a bit more interesting not just scaling but including implementing rotation coloring uh lift or dissolve effect which goes like upward to make it look like disappearing in the air so on based on this T value okay so first of all scale now scale could be just uh based on the T as it is but you could also use ramp attribute to make a scale animation a bit more interesting right now this is just a linear curve but making it like a spline curve something like that you can see a bunch of interesting scaling animation that starting slowly but goes really fast afterwards well this might be just much easier interesting something like that house right or you could also try some crazy animations like this just somehow interesting okay you can see some kind of a wavy animated article although I'm just gonna keep it simple I think I like this curve I'm Gonna Keep it like this now let's try to implement some rotation to each of the grid shall we so for the rotation I need to create an angle okay based on this T value makes sense I think so let's create a remap this t to an angle value when the t is equal to zero that means the particle has been dissolved completely so that's when you have that's when you rotate maximum so let's say let's create an angle value as a parameter multiplied by High so if it's equal to 1 you rotates 180 degrees if it if it's two you rotate to 360 degrees and if T is equal to one angle make it zero when particles are not really moving or dissolving okay let's try with this angle with two for now 6 360 degrees see what happens now I've just created an angle in order to rotate the points you need to create the rotational Matrix or quaternion to rotate the vectors so I'm going to create the Matrix call rotational met matte starting from my tent rotate the matrix by this angle and now I need I also need to define the rotational axis now the axis of each point or each primitive can be retrieved from the Primitive I guess and last time I have created this um normal attribute promoted to primitive and this could be the axis for the rotation I think so let's try to use this one for rotation so again I'm going to promote the normal back to point as an average value and try to use that as an axis okay and then and after I have rotated the Matrix I need to apply the rotation somewhere I could either do after scaled scaling or before scaling maybe I'll do it before scaling like that now you can see that the particle is how grid is rotating till the end for a 360 60 degrees like that and if I make the rotation to 1 it's just going to rotate 180 degrees if I make it 0.2 rotate just rotate a little bit like that okay if you make it 10 maybe that's too much for rotations too fast so keep it as two for now you could also try to use RAM for a angle as well I'm just gonna keep it as it is if you want to try please do and let's see the next thing I like to do is to try to lift the grid upward so that it looks like it's floating in the air and disappears so let's try to create that I'm going to create the parameter call up which is going to be the value how much it's going to lift it up okay so let's start with one the value one and I want to gradually lift these particles upward or you could also move to the normal Direction but it's your choice let's try to make this go upward and in order to do that you just need to make use this to lift up somewhere maybe after all the position has been decided going to add additional vectors upward with up multiply by T so I guess I'll just multiply it here t okay which looks weird because all original geometry has lifted up so in this case I think I need to subtract 1 by T right now you can see that the Articles start to lift up that starting to dissolve in the air interesting now this might be too geometric I mean to I don't know balanced to organized so I might want to randomly lift up or change the value of this lift value lift the mount randomly so I'm going to introduce some Randomness here and the seed should be based on the primitive based value so that could be primitive physician I guess do I have that do I have that that is the center here so let's bring this up to here and use the center to create the random value now the amount of the lift up for each grid has changed randomly becomes a bit more natural looks nice this all right it looks nice I think now let's also change the color based on this T value which is pretty easy to do um I'm just going to change the color based on the t I guess so I'm going to use the fit function for t or zero one t so when the t is equal to zero meaning when it going to dissolve I'm gonna make the color to blue otherwise make it white and I don't see any difference because I guess I'm missing something or if the color is just too dim let's increase the value here okay it does work I've just increased the blue value a lot more than one to make it brighter and brighter I don't know how it looks on this live stream but uh looks like it's been emissioned now I guess it's tube right oh that's okay I made if I hide the edges nice so that's how you do it I mean I think I have just told everything I wanted to tell you this is how I have implemented this simple grid based sci-fi like dissolve effect procedurally and the good thing for this part is that you can change all those parameters you have set by not going back and forth so for example these ones like change the gradient value can make it more gradient if you don't want any rotation you can do that if you don't want any up value you can also do that looks more like a Sci-Fi I guess with the colors yeah you can also change the offset and so on and so on and you can also change those timings for colors lift parameters or angles with these ramp parameters as well to make more animation to animation a bit more interesting okay so that's that was it pretty much it and trying not with other geometries it should still work everything works with any kind of geometry like that beginning being in eaten by something it's cool if you want to try out with our favorite pick head it's a little bit bigger something like that and you could also if you want you could also add multiple points additional points to this one just add one point and move that anywhere you want or in order to calculate the distance this is done in real time so and the speed is pretty decent I think so you could try various options first design options with this I guess and play there you go you no longer have big head hmm noise so yes using noise might also looks really nice as well for sure um I guess there are many ways to use the noise with instead of using point you could just create the noise field based on the position on the pig head guess just create just use the same attribute with the noise oh what happened okay well I I shouldn't use that P but I should use the position this one here so okay interesting okay could also change the scale smoothen out the effect it's like that this is also nice we okay let's try to bring all the parameters I can control to this no controller for all organization for organized and let me know if you guys have any questions or feedback or anything that'll be great first of all you have a switch to change the shape from 0 to 5. you have grid size you have what else maybe an option to change this distance calculation I'll just call this this type and you have several parameters gradient frame it's not offset frame frame in the offset frame the effect reminds me of the GameCube load screen ah I haven't touched a GameCube I think I was at uh foreign country at that time couldn't pray anything but I'm curious how it looks like hmm there's all that oh and this there you go maybe I can increase the range all right this could also look good on simple geometries like Cube as well I think cube is basically a bunch of squares so it works great with the grid Cube Cube grid make the size a big something like that switch it to the cube I guess I need to also normalize it at the end right play it oh I think I need to remove the cache here nice now if I make this Cube size really small it would also look nice more like a matrix-like effect looks pretty nice I think I like it going back to the crayfish now that I see like this I am getting an idea that I wanna I might want to change this to some kind of a number to make it more like a Sci-Fi look I'd love to see a Tetris fear setup dividing layers of Peace onto a sphere let me search for that term I don't it's the first time I hear tetrisphere a tree sphere Nintendo 64. interesting ah okay I see what you mean love to see a tutorials for your setup definitely layers in to be self no to a sphere running noise if he's interesting interesting I see this is interesting I guess you could do that out of uh not promised fear but from a box a simple box let's show The Edge and by subdividing it so many times he it becomes like a sphere like that and it is a quad mesh so using those quads you could somehow create similar tetris-like um real blocks out of those Cube I guess I'd be interesting to see your approach to on how to use the radial basis function in Houdini to do something like this radial basis function let me also search for that radio there's a real world depends on all distance between the input and some it's either the region cold Center so that could revers or property for the function the distance is usually increase the distance although other metrics are sometimes used we often use this collection to do some of radial basis functions that widgets it's approached it huh interesting interesting I think I need to look into this carefully to see how I could use this but surely I am pretty interested in this um it's not really related to your questions but um in order the way to calculate the distance might be able to change here for example if you wanna let's say if you want to use the other kind of metrics for distance instead of euclidean distance um for example if you want to use something like Manhattan distance you could go to here instead of using distance I think what I could do is I don't know what's the easiest way to calculate the Manhattan distance but first of all you can calculate the differential difference vector print pause minus pause then just add absolute component of X y and Z see what would give you as a result okay hmm so this is one this is wait a minute it's not that interesting maybe I'm just miscalculating let me check uh okay so I think I'm doing correctly so that was correct so why you get is more like a rather like distance but in terms of this small grid doesn't really make any difference overall not so interesting what else [Music] let me try the sphere one this one although although this is already been divided into square and if you want to create a bunch of blocks out of here I'm not sure what's the best way to do this I don't know clusters no I don't think so maybe using some kind of Arc tree like that might just gonna try to if you don't want to use the Dubai node to create the block but instead you just want to bring up some custom like grid by yourself to use it something like this instead what you could do is you could try to mimic these plus ID paths and name for your custom grid in this case one primitive is one grid so it's pretty simple and you just need to set the position as at P which is the center of the primitive and also ID could be just the same and the name is based on maybe primitive number pretty much it I guess and try to connect that to a unique point see if it's going to work and there you go it just works all right so if you want to use your custom grid then this is the way to go just apply corresponding attribute okay well I am curious about the radius basis function but I think I have to look into it to see how exactly I could it works and how I exactly I could use it hmm right anything else you guys are interested in or any feedback or if not I'm just gonna end the live the link I sent this for well I would like to see the link but I think it is not listed in the chat or is it deleted I'm not sure is it because of the I don't know security issues on YouTube I mean at least I didn't delete it um I am seeing the wiki and Japanese but hmm interesting hmm interesting enough let me uh I also try other ways to calculate the distance instead of taking the minimum distance modify just add all these distance together like that just to test out how it looks like and I don't really see any notable changes it just looks like it the center becomes here and that's pretty much it hmm looks like it's just modifying the total Center of the distance calculations interesting is there another ways to dissolve effect oh I guess there are so many ways to dissolve for sure I mean you could use just the points like as a particle or you could use volumes like many of the Houdini users do I think there are tons of tutorials for that out there you could also use shaders as well which is not really geometrically related so I don't do that here maybe for if you want to use shaders using game engines or touch designers might be better in that case but I guess um if you want to do geometrically you somehow need to re-mesh like what I did if you want to use points you just scatter points on top of the geometry to and move it with I don't know a pop field or something like that or if you want to use volumes you could use volume or angle or some Dot Network to deal with that or pyros or this what I just showed you is using the mesh to dissolve the geometry which is pretty low cost way to use I guess if the other object was affected by gravity what would it be your approach in the activating piece that are already detached from the main body the object was affected by gravity what would be your approached in activating pieces uh infinite More film from Marvel was some dissolve effect okay the infinity War films One is using particle I assume the one that smokes out right the one goes to the sand effect by doing this yeah that was I think that's using particles uh for the gravity part what I would try what I would do is if I don't do if I don't use um any kind of solvers I mean if I don't I mean I do need to use some kind of solvers I I think I guess I need to use either adopt solver or soap solver I think for my case I I would choose to use soap solver for that purpose I mean to do that you do need to calculate the acceleration for the gravity for sure but and velocity by yourself but I guess that's what I would do or you could also use top solver or maybe a Vellum solver to move those detached geometry uh based on the condition I guess using valence always much easier in those cases right um what I could think of is the one that's not being detached you could set the mass attribute to zero so that it won't move then right after it has been detached you can set the mass to More Than Zero maybe equal to one then try to apply the Gravity Force to those pieces in those cases you need to get rid of those procedural animation stuff because that's not going to work well with Vellum solver I think if you know still use these calculation or if you want to still use these animations you I guess you need to you create your custom solver using subsover so in those cases I mean in that term Vellum solver is a bit Limited but can do complex stuff pretty easily for sure um I could try it I could try but I know I cannot guarantee if it's going to work so cross fingers finger crossed for example if I want to use Vellum solver I should I should just create a I mean scaling is fine to have what rotation I mean I'll have to set these inside the solver I actually so it's gonna be a bit tricky and also these conditions are all procedurally set so you have to do this inside the solver with some different solutions it's gonna be a bit hard to do okay well instead of using this try to use this whole solver um what's the best way to do that me at least you also need to use this inside a soft server for sure first of all I need to remake what I have written here with the salt solver which I don't know if it's going to be hard or not okay so what will going to happen here no we don't want to incrementally scale things up or down so we what we need is the original position which is not the best thing to do for the solver but I'm just going to give a rest and instead of using the point position going to use the rest and the rest multiply by roadmap the rest multiply by C TR now in order to add the gravity you actually cannot really use rest positions but this is just a test if I get the same result okay I see something weird interesting why do I get that that is because that is because okay it's missing the parameters all right and I don't see any scaling happens somehow hmm okay I should do this and I should do this and I should do like that okay there you go so now I get the same result oh no not really what happened this is really funny it's rotating really crazy um why is that I'm supposed to reset the position here what if I do like this so well oh it's huge okay well obviously something is wrong maybe the rotation maybe the summer should be out why am I getting zero here oh okay this is fine okay well this is also fine hmm what if I make this that okay and this is also fine scaling looks also fine so the rotation is something wrong probably the axis wrong maybe the axis is changing because of this one now I know why yeah I shouldn't have this updated so there you go now now you cool time to um no when it has been started to does the rotation looks okay so now the timing which starts to dissolve is related to these this one and this one okay and the condition with the D here D where is d you're here so so if D is if T in this case if T if T is less than one that means it start to scale down meaning it start to dissolve detached so that's the condition where you want to say the Primitive has started to a point has started to detach let's check you could check it by creating a color node looking at the detached group and just set red there you go the condition works now you want to apply some forces to those detached group on each frame and for each frame you somehow need to update the rest position wow like an interesting things to try out so actually the detached points are sharing the same pass ID or primitive related value okay my spelling correctly I don't think so the indeed no if it's detached then you want to have some gravity and like that then you also want to update your velocity with your exhalation you also wanna limit your velocities to some value because you are going to have some kind of friction in the air so set up some Maximum block velocity value I don't know how much that would be but uh and in order to do that [Music] um first calculate the below current velocity then get the minimum out of velocity and the max velocity then multiply it with a normalized velocity like that okay [Music] this is correct is also correct what's okay CHF so the max velocity I'm not sure how much would that be 100 okay maybe that's too big no I am not sure now after that you want to move the point based on this velocity okay and you don't want to move your current Point position but instead you want to move the center point of this primitive instead so that is the position and you could or how do I yeah I'll just try to move the position and you might also want to move the rest positions as well by the same value you cannot just add velocity as it is because this is too big as a number so multiplied by some small numbers as a constant value I don't know how much I would need to make it small but just to try out and also date the Rest by velocity see how it this works see it moving I mean first of all let me make the up to zero so that I can see that if it's moving downward or not and also let's try to make the constant value a little bit bigger like this oops okay it's not really moving downwards so I guess I'm not doing correctly [Music] um first of all I want to know if this is working or not so try to change the color so it is changing the color so that's good now what I want to know is if it's changing the rest parameter or attribute and for the point here which is being detached somewhere around here we want to know if these values are changing not only changing why is that um what if I just say 0 minus one zero for the rest and what it finds not limited to the detached group would that change the rest in the solver okay it is not so I guess I'm doing something wrong here hmm or do I need to go outside the loop take it okay that's changing now so it has to go outside the loop hmm okay so just gonna make this back to the way it is and see what happens oh then I can clearly see that is too fast maybe that's too slow okay there you go a gravity effect somehow and the new node is also going down I mean I don't know if this is the one you were looking for but uh at least this seems to work in this particular case but uh yeah I mean you could update based on this setup and try to implement your own Force for sure yeah it seems to work I mean I I believe you could do the same with the Vellum easily but um trying to control it with the conditions might be a bit harder so using subserver is easy for me okay okay so looks good I'll just keep it right here so that you could download and see how it works later all righty so this is for the procedural process this is using the solver process or maybe frame based I mean this is also frame based now this is also kind of a procedure so can't really the naming is a bit Miss Sun misleading but uh hmm I don't know let me just say it as procedure you'll you'll get it so that's it um let me know if you guys have any questions if not think I'll end this live here let me just give a little bit of overnight and and there you go thank you thank you for all the comments all the feedbacks and being here to be here with me appreciate it uh can use some can use some mask for different dissolving uh yeah I think so you could also use like mask to for the masks for the dissolving for sure different dissolving yeah probably yeah think so um if you if you want to maybe changing the Cube size based on the mask is not really ideal because it's going to create some gaps in between the different cubes so but you could change parameters like probably like uh speed or how to calculate the distance start frame offset and so on angle uplift so on I guess you could try to change that for sure shall we try that where did it go hmm it's appeared Okay so um where was I oh what okay so using mask so after you have geometries here um shall I do this here or before I'm not sure I don't know something like using a paint tool paint color paint a mask a mask and okay well using this mask sometimes crashes my Houdini I don't know why but it does so gotta be careful and make it as over I mean add and let's use this for actually I want to paint the mask on each primitive I mean each Cube related points so I've never done it but let's see if I can use the pack okay so you have the Pack geometry each one is should be wait a minute why am I not able to select okay I'm missing something I do have the name here I just pick the first one where is it okay so yeah it's supposed to give you those pieces one by one although I'm seem to be able to select the whole piece somehow I don't know get it uh instead I'm going to let's see uh or I could still use the pack but let's see if I can use the paint on top of the pack which might crashes but uh let's see okay L as I assumed don't worry I saved it okay pack seems to always crash on my computer for unknown reason maybe it's not suitable for Macintosh so instead of using pack with the paint I'm going to convert this into a point um by creating the original point which is a pack geometry and instead the new point at the at the same position like that which corresponding to the number of faces now I also want to transfer the Primitive attributes so let's try to give all the information that I would like to bring up foreign [Music] I think I never used that assemble load my I don't know how to use this how do I use this freaking piece of geometry uses the groups and connected pieces grade while I break on paraded output servers I see I see Julie distribute and Compass all geometry nice um yes I need to input something here but I am not sure what to give well I'm gonna look into this later for now I'm just gonna do what I'm comfortable with so the geometry name what else that's probably it and get all those Primitives create pack primitive or have to check box on create effect geometry okay let me see create uh-huh okay so the number changed how did it fact based on what can I hmm guess there is a way to select the attribute to okay this one nope hmm so I guess this has to be an integer digital primitive with piece number will be created story what's the difference with the pack with this theme attribute I don't know I mean I don't really need the fact geometry I think because I already have it there is a checkbox of creating the image already okay what's the greatest uh-huh create name attribute Create A Primitive attribute called name identified parameter belongs us to each pieces okay although I already have the attribute called name here then I want to use this to pack the geometry actually so which is already done here so I think I can skip using this one probably because everything is already being splitted and can be used as packed so I guess I still need to transfer the attributes like this okay I guess I need to make sure that this is the vector check okay I don't get anything Prim zero hmm why is that um okay I shouldn't use this one but instead this one all right so do the same for a pause ID but one was the what was I trying to do here oh God um well did I try to do here I totally forgot um so I have the crayfish here oh yeah The Mask yes The Mask forgot so yes the mask I have these points so I can just create a mask on top of for each of these points think see so and let's try to create an attribute in order to see what value I have for each point as a masking value just gonna call it mask right everything is zero right now but uh by creating by using the mask with the paint okay let me save this I would like to draw some about over here and paint add let's set this to an integer okay now I want to make the F Gene digit to one BG integer two I don't know minus one so if I drill this till I get the mask okay now I what I want to see is this mask being visualized as a text but it doesn't really show up where did it go hmm why does text is not showing anymore why am I having randomness why am i setting this to color wait a minute it doesn't really look correct I need to make it as a text okay he doesn't have it just think I deleted it [Music] okay point make it large all right now I can see a bunch of values here two three and if I use the control okay supposed to subtract which doesn't seem to [Music] should I set the fill nope or screen yeah screen should be better there you go although it's a bit hard to control with that so I'm just gonna go over to roll first of all I'm gonna reset the zero then draw some mask with one and two so I have in total three values zero one and two so let's try to change based on those mask value all right let me move this downward a little bit and I also wanted to apply a name attribute to bring the name attribute which can be used to identify which points belongs to which primitive so all right hmm see okay so each point has its name the unique name which could be considered as an ID now going back to the um primitive here let's try to transfer that mask information to this primitive using primitive wrangle transferring I guess there are better many ways to do that but my way is to push the ball find the point which shares the same attributes so using find archival function from the second input what you are looking for is the point class name and the actual value is name on primitive there and you should be able to find the corresponding point from the second input which has the mask information so that then transfer it to A Primitive as an attribute now hopefully I'll be able to get the mask information to primitive and looks correct I guess hopefully yeah I get those numbers from zero to two so all it's good connected here then you could go to where you want to use this mask for if you want to use it for a destination distance calculations you could use the mask here if you want to change use it for dissolve effect you could use here let's try to go here and for example if you want to change let's say color heat to 4 easy preview if you want to use the mask for the color information and the color is controlled right here so let's say um let's first create the lid color 0.000 and let's also bring the mask information to points bye again using this attribute promote from primitive two point you want to bring the mask check the points and check that you have a mask information to each point hopefully this is correct and then going back to this dissolve and get the mass you can get the mask by accessing to the integer mask attribute so you could go here and since you have two I mean zero one two value which can also be used to access the coordinate or the vector so we do something like that then replace this with call let's see how it goes red blue green based on the mask okay seem to work and this color should change based on what I have drawn here so it's ah okay okay damn did I save this I don't know um maybe I did careful with the mask it crashes I mean I guess it's only my condition but uh happens a lot but at least it seems to work so good to know do I have all the code yes the background becomes brighter okay so you could use those masks for any kind of change for I don't know like change the amount of lift or you could change within which direction it moves that oh that could also be interesting just ring this as a move this one goes to the right this one goes to the front this one goes to the up well um not that visually impressive but I guess it could be a base for interesting setup okidokey I'm just gonna make this back to the original try not to mess up so much yeah this is enough to check see how Mass can be used um can it be a texture from outside can it be a texture from outside i instead of dissolving goes from this to like this like playing reversely you mean if that's what you mean that's easy to do um you could just change this tea going from 1 to 0. [Applause] there from nowhere starts to appear okay I guess that's not what you meant um for example texture like ramp colors but use a texture is like ah okay texture like rump colors you mean much quite sure what you really mean men like some texture like rum colors but uses extra um to use the ramp color for what exactly texture hmm I mean PNG with black and white color on okay I see I see a for in order to mask you mean okay uh yeah I think you could do that I mean I mean based on the texture or UV you could just import the mask uh drawings or mask image to apply it to the uh in this case a crayfish and then use it to use it for the masking for sure but I guess it's based on uh the texture layout of of this crayfish and I think the texture layout of this crayfish is a bit too complex let me check because this is the scanned image that's not being modeled by hand so that kind of this kind of stuff I think it's a bit too hard to um use the PNG as it is using the current UV let's see uh not this one so this is the texture and uh obviously it's a bit hot too hard to determine the relation between the UV and the texture it's been it's a bit too complex if it's a bit too randomly packed like I said because of the 3D scanning but we just want to try mapping like randomly or just a flat mapping or plane mapping that could work try with simple textures just gonna draw a simple okay I guess I need to okay let me just yeah oh well okay this is so ugly but uh just bring this okay for in order to use that kind of image I think you could use a cop to network with the file option then based on the number of colors maybe you wanna quantize it maybe you could first make it a I don't know black and white how do I do that oh God hmm ask sequence proxy I actually don't know much about the cops so obviously it doesn't really have to be that big make it half size and and after you have cop you get an image which is still a bit too big one by four okay good now we need to think about how we can transfer this image to here now if I just use the UV that's going to be a problem as you can see from the texture map so somehow you need to project it I guess there are many ways to um project this one is one is to use a what was it called um try planner tripoliner yeah tripoliner is the one that I was looking for but I'm not sure if this could be used oh it actually makes you able to pick the image so let's try to pick it says it's this is for the displacement I actually want to use it for a color we'll use this mask okay somehow the map has been transferred to the uh crayfish but I'm not sure if this is the mapping you are looking for so it depend I mean if you want to use the UV then I mean that's the way to go but in this case UV doesn't really work because this is so messy because it's the scan object so I'm gonna just use this one instead attribute fill and node attribute are just by color everybody has some ideas let me try all that tree you'd kill the first time I use this okay how do I use this interesting attribute huh what's this for butter and nice low level now that can solve componential version of some partial difference equations around each connected Point cloud hmm so it will gather the Matched attribute I guess in those case it does it have to be like an integer or a string not sure let's see the attribute that I'm looking for is color I guess your attribute to match wait a minute it's this four I don't know how to use this I am not sure how to use this Point cloud with Edge connectivity to run okay so I do need to have a point cloud the geometry is updated attribute values modify written values depend on the selected mode okay attribute to match solve [Music] hmm okay ah sorry but I need to look into this later I don't really know how to use that one um attribute attribute are just by color attribute just by color okay well what's this what does this do you have to be adjust color providing interactive very Vector with high values that represent all G we call it data reducing the need to create Vault networks for right Vex code it allows modification for a new uniform colors removed hmm Marine cars can be generated fully randomly so interesting and what does it do is that always add okay well um so how am I supposed to use this I I can see that I can use this to adjust the colors but [Music] um interesting interesting but what I want is just to quantize this color with about a bunch of integers of the song that's pretty much it so I guess I could use I don't know cluster instead based on the color cluster attribute DD number of clusters could be a number of colors so I have one two three four and do I get those clusters I don't think so nope doesn't work okay well you guys have a lot of ideas and I am sorry I don't really know all of them pattern type pattern type what does it do please let me know what these supposed to do pattern type I don't I don't have it attribute fill after group expression what I need is just transferring this color into a integer map to your color and that's it attribute just by color has pattern type should be adjust by color let me see mute just color it didn't this one nope lost process oh pattern type hmm where is that I don't see it looks search for it okay uh it's under a adjustment value [Music] adjustment value okay here it is but [Music] um color map here okay so you uh so instead of using this you're saying to use this C okay well I guess it is using UV after all so it's creating a really dirty image that's what I wanted to avoid but uh um it's I guess it's the same with the attribute map as well so these type of mapping is what I want to avoid what I want it is just use any kind of mask into a quantized numbers like integers from zero one two three and so on that's all I want but I don't think this will do the job here instead of using uvp this might do but okay well this is another mapping well although the mapping is not really important here I mean if you want to use UV you got to use different geometry for sure so in those case you could use those I don't know attribute address color or attribute map node for sure based on UV but if you don't have a clean UV then you gotta use something else but things that I want to do here is not those mapping stuff but how I can quantize the color value into an integer a unique value that's what I would like to try out so that's what I want to do and in order to do that need to find a way uh uh what will be the best way to do okay from based on the color value I could let's say calculate the color distance from some random value so which uh which doesn't really okay it's not a good idea okay let me give something like this so I'm going to create a scholar value based on the color vector instead of just adding one by one I'm going to add multiply 10 to Y and multiply 100 to Z that way you'll get some unique numbers uh and then now what I want to do is to see how it looks like all right now now that I have these numbers how do I use this hmm nah okay instead of though doing this I am going to convert the color into hsl HSP and which gives you a hue saturations and value value will be brightness and based on those values I think I could quantize the value now Q is changing the color but in in my case I guess I could use V which could be considered as brightness so let's look at the brightness value so it goes from zero to one and you have somewhere in between now now you want to do what you want to do next is to get those colors out of these points information [Music] so you're gonna kind of have to get the average this is all different so oh well this is still hard mm-hmm well let me try [Music] enumerate node I haven't used this interesting This Could Be the One let me see this node sets an attribute on each point our primitive select group sequentially for example it would set out for Universe point to the root zero the second point this difference from the built-in Point primitive number because this node only sets the attribute for points Primitives in the selected group seems like you need to have a group but the language program there's gonna be but he has to have an integer value so yeah it's a bit hard to use because that's the one where you need hmm I see but uh yeah this could this kind of give me some idea somehow let's see um first of all I could convert this into integer first of all I multiplying this by I don't know 10. calculate the floor see what happens so you get a volume between 0 to 1 right now connect this here use for Point attribute B type integer does it give you so it gives you a order somehow wait no give some unique numbers to each of the values which I don't really need okay maybe this is not useful I um uh okay well If I multiply it by four gives you a in total for numbers I mean no five numbers so multiplied by three caves in total three numbers which is related to be but okay so this is okay yeah I guess I could use this method dividing by the number of colors that I have but there is some um how do I say bias here because division is done linearly but the color brightness is not really linear especially the the value between this purple and blue so it just doesn't really work that much so so what I need but I kind of a need is maybe I can multiply it by a hundred hmm and count the numbers which shares the same numbers maybe 100 is a bit too big so make it 10. and then round these number up to four that doesn't sound smart as well okay okay getting older um adjust color attributes must be used in two nodes one for the texture one is the color map and the honor there another is the mask which you already have and apply screen mode let's just color must be used in two nodes one for the texture which is the color map and one other for the mask which already hmm uh okay wait I thought you wanted to use the texture for the masking but it's not what you want it um you just wanted to use this texture together with the mask which has been already created uh okay I get it I get it now I thought you wanted to use the texture for a mask okay that those case I mean those case yeah you could because you could use it with the mask I guess so this is for the texture bottom so meaning you want to use this somewhere around here instead of just changing the color like this change the color based on this um in those cases the mask is just a single value so and this is the 2D map so I actually has to be a linear color month something like this color palette like this I guess Okay so I'm already the six Okay so okay so I guess I noticed correctly he wanted to use this as a mask okay okay sure yeah that's what I was assuming so maybe going back to the cop Network there might be a way to quantize it um maybe I could use this and hi I think there was the way to make this black and white hmm pixel color hue mono okay mono all right make it grayscale then quantize now I do see some quantizing Happening Here effect amount mask input frame sequence okay that looks fine I mean it's not yet equal to 4 but better than before it's good and going back here it's not being updated although by using this one am I able to use this for this really look like so okay in order to use the cop Network or a color I guess there were a way to do that forgot how uh if anybody know how to read the cop Network through a Channel let me know I think there is a way I forgot op nope what's the way can't really remember um let's see um something like this I guess this could work [Music] it doesn't have an out all right it's not really working hmm or is it working I'm not sure let me try with this name here nope I don't think it's working um I don't know well it's just trying with these after all just importing the original mask image here like that then try and try to I mean quantize it I mean it's pretty much the same you just get the brightness like this and if you replace the color with the brightness you just get the black and white grayscale now I guess it's easier to see without the texture at this moment so let's delete the texture temporarily like that all right and you could entice the brightness by first of all dividing it by 0.1 for example then make it integer after that you could again multiply by 0.1 and then make it as a color okay so you have range of 10 in this case where did it go yeah these colors right so you just put um well maybe yeah you're supposed to have 10 range or 11 in this case including zero to one right so might be easier to see with these all right now you could do next is to count up all those numbers together I mean count up the values which shares the same value from 0 to the one now in those cases I think it makes sense to make it as an integer so make it it is an integer like that so in order to count these numbers which has the same attributes or you could do is hmm you could create another attribute wrangle let's make it as a detail then you know how many um integers out there which is in between 0 to 10. I think it was like that right then you want to look for the number of points which shares the same attributes so and TTS find attribute I'll count zero point B I and you get the count number and then let's set the detail attribute to see how many numbers you get for each value just to check all right so you do have a bunch of numbers actually you got tons of values at 10 a little bit more on zero put all the rest pretty much the same hmm not as I expected does it so the 10 means these white area I think and a zero means those block areas and all the rest is those blurred images blurred areas so this doesn't give me a good informations let's try to make the range of it lower or larger if I make this larger you get more quantize as you this might just work and this might just be okay as a pattern as a masking pattern probably in those case how many numbers do I have total you have three okay so I could promote the maximum number of mask by getting the B detail get the maximum change this to count ask count or Max B which is equal to two so two plus one you have three colors this one this one and this one which is and less number you have more quantization I mean the way you do this here is kind of a linear so um I don't know if this is the good way to do but uh at least this will gives you some masking information for sure and I guess I don't really like to use float number as a parameter I rather want to use the integer as a parameter so let's do that instead I rather wanna directly choose how many quantized numbers I have here which is more understandable so instead of using f I would how do I use that instead of using f f will be calculated as one divided by I okay and of course CD I'll just divided by I and there you could specify number of um numbers on them called Maps or mask if I say one you have two so that's not really a good number so I can all say minus one let me say if I say two you have to mask three you have three masks and so on okay this will make more sense I guess so this is out of color I have just transferred so first of all I have imported the textures has a map using tripliner displays instead of using something like a attribute adjust color or attribute map if you have UV on if you have a clean UV on top of the geometry you should be able to use these instead instead of this one but since this UV is pretty messy Pretty Dirty I mean instead of using this one and then just get the brightness value to quantize the value 2 0 2 the number of masks you specify okay then after that you could just use that as a mask information now now um actually I shouldn't make it here but uh where should I do this can I do this to these points I don't know I don't know if this will work with the trip planner I don't think so nope it has to be used with the mesh so we gotta be now anyway I need to transfer this mask information to A Primitive in some other ways so um so what will be the better way to do that hmm currently there are no similar attribute that shares the same values so instead of doing that I'm going to use the XYZ distance to search for the closest matching value using the pause which is the center of the primitive okay to get the Primitive and UV then what did I wanted to get I wanted to get the mask information which is this B I'm gonna rename this to mask mask so you go to premiere review mask all right then place the mask like that right should be able to get a mask transferred then let's see if it's gonna work changed it to switch one see how it goes so is it corresponding to the mask that's been created here so you have something like this mask black here gray here right here is it corresponding to the color I guess so so the black part was gonna be red the white part become blue great buy become green so it looks great so that's another way to not the perfect weight for sure but uh one of the way I could transfer the texture into a mask information somehow hmm okay now I think it's a good time to stop the live stream sorry for getting so long to finish this but um I guess it's a good time to finish it um and I think it's time for me to go to sleep now it's around 4am in Japan time so yeah but I enjoyed it a lot thank you very much for all the comments all the feedbacks and all the new node that you guys showed me that's also great I'm gonna watch back the archive and try to learn these notes that you guys showed me it's really great to know the oldies okay so I guess that's pretty much it I'm gonna make this back to one and I'm gonna make it as one of the new parameters for switch okay and this one as well this is well okay I'll just keep this as zero okay all good um okay so as always I am going to upload the file that I've created on the live stream which is this file to a GitHub which you can download the file from the video description page I'm gonna paste the page URL to the video description page I'm also going to upload the files to the patreon of myself so you could also download from there as well and but it's all free and the live stream is going to be recorded as an archive so you can re-watch it later as well everything is public I think I am also going to include the glv file because this is license free so it says it's also free to redistribute so just gonna include this font mesh as well which I showed you that you can download all sorts of model 3D model scan 3D scan models from this sketch Fab link which is really cool it's all shown in both in Japanese and English so you would know what these are you have like doubt more than thousand models can be downloaded from here pretty cool key so that's pretty much it thank you very much and I'm gonna upload the file as soon as I finish this live stream and hope you enjoy the life and thank you very much for joining as always I really appreciate it and see you sometime next week good night have a good day Alzheimer's I haven't decided what will be the next topic but uh I'm currently implementing the wave function collapse in Houdini using Vex instead of using python that could be a topic but uh I'm still undergoing with the implementation so I might take some time so the next week's topic might be something different but hopefully something interesting okay good night
Info
Channel: Junichiro Horikawa
Views: 109,154
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: ejsK87CCXZE
Channel Id: undefined
Length: 226min 8sec (13568 seconds)
Published: Tue Oct 04 2022
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.