2021-11-29 - 2021-12-3 Geometry Nodes Sub-Module Meetings


Developers or artists interested in contributing are welcome to join at the links below.

Week of 2021-11-29

  • Discussion about LLVM compiling of sets of nodes.
    • The idea is to have the latency optimization of the current implementation but also the speed of compiled nodes by compiling sets of nodes in a background thread.
    • LLVM could also be used to generate SIMD optimized code.
  • T93268: Bezier Splines: Support different interpolation options
    • Having a global option on the curve is fine.
    • If we need the option per attribute at some point, we can just add it.
    • Try to find someone who has used these options to double check that.
  • T93208: Auto Smooth and Geometry Nodes
    • It would be best to find the ideal solution for handling automatic and custom normals.
    • Some simplification of the way information related to normals is stored on meshes feels necessary.
    • The face smooth option (ME_SMOOTH) seems redundant with sharp edges (ME_SHARP).
    • Still need to figure out how custom normals are encoded exactly (they are stored as short[2]).
    • Auto smooth can become a node to set the edge sharpness flag, since auto smooth acted like a virtual modifier/node anyway.
      • Exposing this sort of virtual task like other operations simplifies UX and code.
    • The Auto Smooth option seems redundant with having or not having a custom normals layer.
      • When there is a custom normals layer, just use that.
      • Otherwise, compute the normals based on the edge sharpness flag (which is set with nodes/operators).
    • Versioning from ME_SMOOTH (on faces) to ME_SHARP (on edges):
      • An edge becomes sharp if it has at least one non-smooth face.
      • For the “Set Shade Smooth” node, capture the selection on the face domain and set the edge sharp flag with that selection.
    • Versioning to remove the Auto Smooth option and angle on mesh data blocks:
      • Expose the sharp edge flag as a builtin attribute.
      • Add a geometry nodes modifier that sets the ME_SHARP flag on edges according to the auto-smooth angle.
      • Might have a performance impact when a mesh data block was shared between objects that didn’t have a modifier before.
        • This is because now the final mesh is computed for every object separately.
        • This can be worked around by instancing the object that has the correct smoothing applied already instead of sharing the mesh.
    • Design task created: T93551: Mesh Auto Smooth and Normals Design Changes
  • TBB implementation details discussion.
  • Node versioning.
    • Problem:
    • Two possible solutions:
      • Copy/move all functions called by versioning code into versioning code so that it does not change over time.
        • This would require adding sockets manually when creating new nodes in versioning.
        • We already have a lot of code that is calling functions outside of versioning (like adding a data-block).
      • Be much more careful when changing existing functions/node declarations that are called by versioning.
    • Add a list of things to check in versioning code when changing an existing node
      • Check that the versioning code doesn’t assume something that is now incorrect in the updated state of the node or outside code.
    • Avoid making assumptions that might not hold up in the future in versioning code
      • Document any assumptions that you make, like “I expect this node has four input sockets”
      • Ideally don’t make assumptions like that in the first place.