Capturing Attributes - Geometry Nodes 101

Sdílet
Vložit
  • čas přidán 27. 08. 2024

Komentáře • 106

  • @Erindale
    @Erindale  Před 2 lety +49

    You're going to be so powerful by Nodevember.

    • @JJSnel-uh3by
      @JJSnel-uh3by Před 2 lety +2

      I'm gonne have to be if I want to make progress :D Thx so much btw! These have been incredibly helpfull!!

  • @krysidian
    @krysidian Před 2 lety +10

    Your thumbnails keep getting better. And I can feel my knowledge rising with every upload. Nodevember here I come.

  • @vstreet7583
    @vstreet7583 Před 2 lety +3

    Early days but 'fields' seem to make a lot more sense. Thank you for everything you do. THANK YOU! Dg

    • @Erindale
      @Erindale  Před 2 lety

      Yeah much more human-readable and much faster to put setups together! Really excited to see how the community will use these

  • @activemotionpictures
    @activemotionpictures Před 2 lety +2

    7:40 - Perfect! Reviewing the constructed node tree, explained as you did here is fantastic. Ths way more artist will start picking up the mindset behind nodes in Blender. Thank you, Erindale!

    • @Erindale
      @Erindale  Před 2 lety

      Thanks! Yeah one of my biggest learning accelerators is finding something that works and the reviewing it to make sure I understand for next time.

  • @davidmcsween
    @davidmcsween Před 2 lety +2

    OMG that was so clear AND I learned a useful technique. I will probably add wires to everything. So glad that there was an example of the 2 different subdivides

  • @jirimasak7483
    @jirimasak7483 Před 2 lety

    Oh man thats awesome!!!! Whole new ideas appeared after I have got the logic of the capture attribute node. Pure love.

  • @trinumedia
    @trinumedia Před 2 lety +2

    It's like a "Set Data" node to be used later when you "Get Data" from the node flow. Executing the geometry flow with the green lines.

    • @Erindale
      @Erindale  Před 2 lety +1

      Yes! I didn't really think before about how important it is that those attributes also follow through the mesh operations and it is going to be even more important when we start doing things like extrusions and bevels.

    • @cgndev
      @cgndev Před 2 lety +1

      Do you mean like a Softimage ICE? I agree.

  • @AArmstrongC
    @AArmstrongC Před 9 měsíci

    You can capture the index, then subdive the geo, then capture the index of the new geo again, and then compare both captured indexes. Then use that result as a selection for the set position.
    This way you can select and move only the "new" vertices.
    Thanks Erindale for the tutorial!! :)

  • @vrx_ui
    @vrx_ui Před 2 lety +1

    Hell yeah! 101

  • @NoelSufrin
    @NoelSufrin Před 2 lety +3

    Great vid, great explanations. I learn so much every time I watch one of your vids. Thank you 👍🏽💯

    • @Erindale
      @Erindale  Před 2 lety +1

      Thanks Noel! Glad they're useful!

    • @NoelSufrin
      @NoelSufrin Před 2 lety

      @@Erindale Always! … and I was really psyched when I saw your artwork featured on the 2.93 splash screen too. You’re a true artist - digital or otherwise.

  • @bzikarius
    @bzikarius Před 2 lety +1

    Useful video. Figured out how it works few days ago and it is really not so obvious.
    The another thing is not so obvious is attribute statistic.
    It can produce wrong result with wrong context, when you input complex geometry. For example curves, instanced on points, instanced on curve.

    • @Erindale
      @Erindale  Před 2 lety

      Yeah you need to be careful to pick the correct domain to analyse

  • @fabbrobbaf
    @fabbrobbaf Před 2 lety +1

    You are unstoppable!

  • @kaz7582
    @kaz7582 Před 2 lety

    Your tutorials with annotation are really helpful for me(non English speaker), thank you

  • @jimjamflimflam
    @jimjamflimflam Před rokem

    This video was really helpful to me.

  • @TheLK641
    @TheLK641 Před 2 lety +1

    Really looking forward to the next tutorial. I get how to de-contextualize fields, that meant sense to me, but I can't for the life of me find how to re-contextualize fields...

  • @stefanguiton
    @stefanguiton Před 2 lety +1

    Excellent video! Super useful as always

    • @Erindale
      @Erindale  Před 2 lety

      Thank you! Glad they're useful!

  • @juncando
    @juncando Před rokem

    Very nice.

  • @roguecherry
    @roguecherry Před 2 lety

    This is really helping me understand Geometry Nodes much better. Thank You!!! I'm still struggling on how to do filtering of XYZ coordinates of points in a field (position field) to make selections dynamically on a simple base mesh run through a remesh modifier (set to block) that creates many more points than the base mesh. For instance, I only want the highest z value for all points that have the same value for x and y (e.g., x =1 and y=2, and there are four points with differing z value and it would select the highest z value, then rinse and repeat for each set where the x and y are evaluated for the highest z value filtering out any points that contain the same x and the same y value below the highest z value for each). If I move my base mesh points it would create new points in the remesh and recalculate the highest z values in the same way. My understanding of how to filter using math nodes or booleans is limited but I'm assuming that is the way to do it - I've just been frustratingly lost in how to do this and think if anyone would know it would be Erindale!

    • @Erindale
      @Erindale  Před 2 lety +1

      I'd recommend asking this on my Discord and maybe with a screenshot of what you're wanting! If I'm understanding right then it should just be something like position > separate XYZ > z into compare node to get your z mask and then similarly for X and Y as needed

    • @roguecherry
      @roguecherry Před 2 lety

      @@Erindale Thanks for the quick reply! I will post on discord and try that solution as well.

  • @IvanFlack
    @IvanFlack Před 2 lety

    Wonderful stuff...I am a believer in "Lifelong Learning"...Blender Nodes are going to take the rest of what I have left! 🤣

    • @Erindale
      @Erindale  Před 2 lety +1

      For you and me both! Endless possibilities!

  • @mzay3d
    @mzay3d Před 2 lety

    Very nice! Thanks!

  • @JerryPerkins1001
    @JerryPerkins1001 Před 2 lety

    nice video

  • @openroomxyz
    @openroomxyz Před 2 lety

    When we have a mesh line node, could it be possible to have Mesh Line node that has as count as field? So that I could Instance a bunch a lines with Instance of point with different counts or / and other propertys? What are best work around.

    • @Erindale
      @Erindale  Před 2 lety +1

      If you're using it as a line then you could use the curve line instead and resample each line after instancing. Otherwise there's a duplicate elements node in I think 3.1 or definitely 3.2 if you are just using it to make more points in the same spot

  • @cool_3d65
    @cool_3d65 Před 2 lety +2

    👍

  • @glennet9613
    @glennet9613 Před 2 lety

    Excellent tutorial, I like the way you explain the concepts rather than just a follow along demonstration.
    I notice that Blender is changing geometry nodes frequently and dramatically - not only adding but depreciating so a lot of other tutorials I have tried don't work. Is your paid course up to date with the latest Blender version and will you update it as and when Blender changes?

    • @Erindale
      @Erindale  Před 2 lety

      It isn't up to date with current builds, it's only for 2.93 LTS. I will be making a separate course this summer for the new versions.

    • @glennet9613
      @glennet9613 Před 2 lety

      @@Erindale Thanks, I will look out for it.

  • @manojsingh-tz3rk
    @manojsingh-tz3rk Před 2 lety

    Can I put the capture attributes node after subdividing it, why?

  • @JOLMS3D
    @JOLMS3D Před 2 lety +1

    Could someone please distinguish between the math node's 'compare' function and the compare floats node? I got the same (set position selection) result when tinkering.

    • @Erindale
      @Erindale  Před 2 lety +2

      Math node will save a 0.0 or 1.0 float and the Compare Floats node will save an on or off Boolean. Booleans take a quarter the memory and process faster on the CPU 👍

  • @eternalguy6023
    @eternalguy6023 Před 2 lety

    ❤can you do a video on Attribute static, please

  • @TerrainNodes
    @TerrainNodes Před 2 lety

    Couple of questions :)
    1. The position data is an array of vectors, consisting of three floats, how does Capture Attribute know which float to capture in the vector for each index, or does it just capture all of them? So all 9 floats in this case?
    2. Capture Attribute node is before Subdivide Mesh, but it is computed as if the line has already been subdivided. Fields computes backwards, but then why does the node tree not work when Subdivide Mesh is before Capture Attribute? Shouldn't it give the same result?

    • @Erindale
      @Erindale  Před 2 lety +1

      Vectors won't be broken up into floats unless you choose to manually with a separateXYZ node so they just get written to the mesh as a new attribute.
      In this case what I'm capturing is the index at the point I capture it it'll just contain 0 and 1. After the subdiv adds a new vertex, it'll interpolate 0.5 for that new one so now it'll be 0, 0.5, 1.
      If I captured the index after the subdiv instead, it'll just be the indices for all the verts, which, if there are 3, would be 0, 1, 2. To keep the maths simpler, I just captured the index prior to the subdiv.

    • @TerrainNodes
      @TerrainNodes Před 2 lety +1

      @@Erindale ok I see now, what you plug into the value of the Attribute Capture node, is what it will try to capture. I incorrectly thought it was using the index, but would return the position if you select float type and point.
      The fact that subdivision node will interpolate an index from an integer to a float is a surprise to me, I would think that the index values would just remain as integers, so I would expect 0, 0, 1.

    • @Erindale
      @Erindale  Před 2 lety +1

      So this is actually why we want to capture the index as a float value instead of changing the node to integer. If you store as an integer it'll do as you say there.

  • @justinwking
    @justinwking Před 2 lety

    What order should these geometry nodes 101 videos be watched in?

    • @Erindale
      @Erindale  Před 2 lety

      I would watch them in upload order :) you'll be able to sort by date on my channel page

  • @calebj7205
    @calebj7205 Před rokem

    Great tutorial! Thanks! I have recently purchased your course on Canopy as well. I devoured it in a day. I highly recommend it to anyone curious about geometry nodes. Great content!
    I have a question for you about your Capture Attribute setup if you don't mind (I know you're very busy). More specifically why it is Float and not Integer. I have a strong Python background and have worked in Apache Hadoop and Spark (and PySpark) for 8 years so I do understand indices, data types and column attributes/properties (in both an SQL and Python-panda context) and how important it is to keep integers as integers, floats as floats, strings as strings etc...
    Why is it that from the Index node (with the Index output being an Integer i.e., green socket) and Compare node (set to Integer), we don't get the wanted masking (i.e., pinning down index 0 and 1)? In your setup, you set everything as float and the compare node rightfully limits the selection to Index 0 and 1 (Index, not vector positions as per spreadsheet). Why doesn't it work with Integers, knowing that Indices are integers? When using integers in both the Capture Attribute node and the Compare node (say, plug in A for B equals 0), we don't get the desired result i.e., Index 0 alone should be pinned down. It's very odd to me.
    Many thanks for you help! It is most appreciated! 🙂

    • @Erindale
      @Erindale  Před rokem

      Hey! The reason is in how we can take advantage of how Blender will interpolate captured values.
      You're right that the index is an integer so when we have a line we have index 0 and 1. And then when we subdivide that line we're adding new vertices. Instead of just marking them with a value of 0 as they weren't in the captured data, Blender will try and approximate what the value should be. So if we go up to 5 verts, we'll just interpolate, 0, 0.25, 0.5, 0.75, and 1. Now if we had captured integers, it would just floor instead so we'd get 0 0 0 0 1 which wouldn't help us make a selection. Because we stored as a float attribute, we get the better interpolation that we can use with the compare.
      If in doubt, I recommend using the viewer node to inspect the data on the spreadsheet and see how Blender will treat different datatypes!

  • @MysteryPancake
    @MysteryPancake Před 2 lety +1

    Very helpful video! It's a shame it doesn't allow direct selection of vertex indices like in Houdini :(

    • @Erindale
      @Erindale  Před 2 lety +2

      You mean like making a selection in the viewport? Stuff like that will come. Geometry Nodes is still a totally new system. Got to give it a couple of years to build up a full toolset.

    • @MysteryPancake
      @MysteryPancake Před 2 lety

      @@Erindale Yes, it will be good to see it develop over time

  • @jeanlouisjanin7263
    @jeanlouisjanin7263 Před 2 lety

    Thank you for this very clear video. But in Blender 3.1 I don't find Equal node. How can I do it with Greater than and Less than ? Thank you.

    • @Erindale
      @Erindale  Před 2 lety

      It's on the compare node

    • @jeanlouisjanin7263
      @jeanlouisjanin7263 Před 2 lety +1

      @@Erindale Thank you for your quick answer. I hadn t understood that it was in Utilities.

  • @khalatelomara
    @khalatelomara Před 2 lety +2

    The video cover is (captivating)🤣

  • @Sixstring65adgmail
    @Sixstring65adgmail Před rokem

    Could you elaborate on the example where you can pick just the normal (in the z direction) to distribute objects on. That's what I'm trying to achieve but can't find a working referral/solution.

    • @Erindale
      @Erindale  Před rokem +1

      If you plug a normal node into a vector math node set to dot product with the second vector as (0,0,1) then you can put that through a compare node set to greater than 0 and you will have a mask for all faces

    • @Sixstring65adgmail
      @Sixstring65adgmail Před rokem +1

      @@Erindale Wow thx for the quick respons. I assume that the output of the compare node goes into the selection input of the distribute node (for the mesh I want to distribute onbjects on)? Will try your tip and come back to you on your discord if I need more help. Thx again!

    • @Erindale
      @Erindale  Před rokem

      Yessir wherever you need a mask based on normal direction. There is also vector mode in the compare node but old habits die hard 😅

  • @Nyubug
    @Nyubug Před 2 lety

    Can someone explain why the normal shows up in the spreadsheet editor as an attribute if its supposed to be derived data? or am i misunderstanding something.

    • @Erindale
      @Erindale  Před 2 lety +1

      Normals in 3D are a pretty arbitrary bit of information. You can easily overwrite and customise them for different effects. In geometry nodes right now, they're read only but everything that can be referenced in an object should be able to be interrogated in the spreadsheet

  • @lohnthom9353
    @lohnthom9353 Před 2 lety

    Is it possible to combine the results of a compare float? For example, instead of using the equal with the epsilon comparison, could I use two nodes for greater than 0, less than 1, and put their results together to feed into a selection input? That vibes better with my brain and I feel like I could remember it better.

    • @Erindale
      @Erindale  Před 2 lety +1

      Yeah just use a Boolean math node set to And and it will give you a mask for where one AND the other is true 👍

    • @lohnthom9353
      @lohnthom9353 Před 2 lety

      It works if I plug them both into a math node set to minimum. Not entirely sure what's happening there though.

    • @lohnthom9353
      @lohnthom9353 Před 2 lety

      Also works if you plug them into a comparison node with an epsilon set to any value that's less than 1.0. Also, don't really get why.

    • @Erindale
      @Erindale  Před 2 lety +1

      It will pick the lowest number from each node and 0 is less that 1 so that checks out! Multiply would work as well.
      Probably doesnt matter but the boolean math node will be slightly more performant.

    • @lohnthom9353
      @lohnthom9353 Před 2 lety

      @@Erindale Thank you for this and the other explanation as well.

  • @netkob
    @netkob Před 2 lety

    Tank u very much for those clear explanations. How do u find all of that? cause the blender doc is very cnfusing, specialy about attribute nodes supression in 3.0

    • @Erindale
      @Erindale  Před 2 lety +1

      Just working it out from using it 🙂

    • @netkob
      @netkob Před 2 lety

      @@Erindale whaoo. so a lot Time liké me, I suppose. Bravo

  • @goodguy7883
    @goodguy7883 Před 2 lety +1

    Ohh i completely misunderstood initially, i thought after subdivision the indices are reordered, and then i checked and i understood new indices are given to the newly added points, so i thought instead of using equal, using greater than 1.1 will give the same result but it didn't and now I feel like i don't understand anything please help me erin

    • @Erindale
      @Erindale  Před 2 lety

      The points that were originally 0 and 1 when we captured them will still be 0 and 1 if we use that captured value. If we just use the index directly we have no idea what the indices will be after doing mesh operations like subdivide or more complex things. This is why we can save ourselves a headache by capturing things when they're simple!

    • @goodguy7883
      @goodguy7883 Před 2 lety

      @@Erindale can we use greater than 1.1 instead of equal 0.5 with epsilon 0.499, in both cases 0.000,1.000 are not in the range right

    • @Erindale
      @Erindale  Před 2 lety

      You're actually making a selection of the points in between. So it's not just about not selecting 1 and 0, were trying to selec everything between those two points. If you have a sheet of paper and you draw really light on one end and really dark on the other, when we subdivide, that's like adding a smooth gradient in between form dark to light. We just want to pick everything that's on at each end of that gradient so we use equals 0.5 with a bracket out in each direction so were growing our selection from the point which is equidistant from the two points we want to avoid.

    • @goodguy7883
      @goodguy7883 Před 2 lety

      @@Erindale thanks erin now i understood.

  • @r1yuj1n
    @r1yuj1n Před 2 lety

    Hey there, I'm learning the geo nodes, this is fantastic tutorials so thank you!! 1 question : when using the capture attribute after a join geometry node, it seems it only captures the attribute from the first geometry inserted in the join geometry node, is that to be expected?

    • @Erindale
      @Erindale  Před 2 lety

      It depends what you're joining and capturing. For example, 2 meshes and you're capturing the position should work on both. If one of the things you're joining is an instance instead then you won't be able to capture on the same domain for both. If one of the things you're joining is a curve and one is a mesh and you're capturing something curve-specific like spline parameters then that'll only capture on the curve and read 0s on the mesh.
      If you're capturing something you think definitely should work, maybe report a bug or join my discord and ask on the help channel!

    • @r1yuj1n
      @r1yuj1n Před 2 lety

      @@Erindale Thank you for the thorough answer. It was the index value, but after a good night of sleep, I realize thay probably it was because the index is unique for each vertex and doesn't go back to zero for each new geometry. I'll def join your discord!

  • @eriknelson2461
    @eriknelson2461 Před 2 lety

    How come you have a tab for a "Geo Nodes" workspace and I don't?

    • @Erindale
      @Erindale  Před 2 lety

      You can set that up. Those tabs are part of your startup file so you can make them however you want and save a new startup file and it'll open like that every time.

  • @artemylebedev9707
    @artemylebedev9707 Před 2 lety

    I don't think it is really traversed backward to compile the context. If I would develop this functionality, I would implement this as a kind of symbolic expression, where symbols are referenced attributes. Then just evaluate the expression against the geometry it is plugged in.

    • @Erindale
      @Erindale  Před 2 lety

      You might be right but it was one of the developers who told me it was back tracking to find the expression that needed evaluating. It might have been lost in translation though as I'm not code savvy

  • @alexeisaular3470
    @alexeisaular3470 Před 2 lety

    Would it also work if I connect the index directly to the compare node?

    • @Erindale
      @Erindale  Před 2 lety

      It will do something but you'll have to do more to make sure you are selecting the indices at the ends. Like if you subdivide 1 level, the ends will be 0 and 2, and 2 levels would be 0 and 4, 3 levels would be 0 and 8 and so on. Capturing the 0 and 1 before the subdiv means we can use that new captured attribute instead and the ends will always be 0 and 1 regardless of how many times we subdivide.

  • @luccasbracci6228
    @luccasbracci6228 Před 6 měsíci

    Thank you, Blender Gordon Freeman

  • @umarcga7823
    @umarcga7823 Před rokem

    I wanna use curve index in shader??

    • @Erindale
      @Erindale  Před rokem

      Store index through evaluate on domain on your spline before curve to mesh

  • @johnsmith56920
    @johnsmith56920 Před rokem

    Hmmmm.... I have trouble understanding what happens when the count is 5 and the subdivision level is 3 or something.

    • @johnsmith56920
      @johnsmith56920 Před rokem

      I think I get it. Correct me if I am wrong.
      The selection will return 1 for all the new vertices placed between index 0 and index 1.

  • @jahormaksimau1597
    @jahormaksimau1597 Před 2 lety

    So complicated. I use houdini ,and good understand concept of attributes, but surprisely very hard to understand whats going on with fields. Looks really inconvinient.

    • @Erindale
      @Erindale  Před 2 lety

      It's just not finished yet! When it's done we'll have all named attributes etc back and be able to get set etc but all of the core stuff can just be handled within the node tree. It's way easier. It's more like building shaders 😁

  • @brunodemasi381
    @brunodemasi381 Před 2 lety

    Hi Erin, is there a way to see the values inside "equal"?

    • @Erindale
      @Erindale  Před 2 lety

      How do you mean? Like to have a min/max input instead of value and epsilon?

    • @brunodemasi381
      @brunodemasi381 Před 2 lety

      @@Erindale I would like to see the values coming out of the component. Something similar to Sverchok's "viewer text" component

  • @clemeleon151
    @clemeleon151 Před 2 lety

    Your videos are amazing thank you so much ! I'm a beginner at geometric node and my brain is not a math enjoyer :'( I'm so sorry but i don't get the equal part. Like why equal 0,49 and 0,5 excludes 0 and 1 values, i think i'm missing something about epsilon ? 😢

    • @Erindale
      @Erindale  Před 2 lety +2

      0.5 is the middle and epsilon will be subtracted and added to it to give the range of values. So if you had equal to 5 with epsilon on 1 that's like 5 +/-1 which would give you values between 4 and 6.

    • @clemeleon151
      @clemeleon151 Před 2 lety

      @@Erindale That's so much clearer for me, that you so much for everything, you are amazing ! :D

  • @higurro
    @higurro Před 2 lety

    I want "Anonymous Attribute" on a hoodie

    • @Erindale
      @Erindale  Před 2 lety +1

      I'm thinking of launching merch at 25k. I want an excuse to have these too

  • @bjornstrandberg8146
    @bjornstrandberg8146 Před 8 měsíci

    I dont understand anything about what you are talking about. I guess i need to find one of your more basic videos XD😄

    • @Erindale
      @Erindale  Před 8 měsíci

      There should be a couple others in this 101 series that start you off with more foundations