Idea Tracker #11

Open
opened 2024-05-04 16:25:15 +02:00 by so-rose · 0 comments

Ideas

General Ideas

Concrete Ideas

  • An "invalidate with" declaration on a @property/node/socket, which essentially says "whenever this is invalidated, you should also invalidate my name".
    • This would be especially useful for using computed properties of invalidated data (ex. when _compute_input needs manual running in a computed property), which in turn may also be useful (for deduplication, also just in general) inputs to @computes_output_socket methods.
    • When one just does this now, one has to "cheat" by specifying the ex. props of both the computed property, and manually, also the props of the data that the computed property depends on.
    • We shouldn't break the chain, and such an invalidate_with might help us a little bit. We should take immense care, however.
    • It might be worth letting it be a part of bl_cached_property, since on some level, even if we want a non-cached computed @property, there is always a cache in play that needs to be respected.
    • Could even be like, a generic @events decorator, but one that specifically isn't bound to any particular change/output - rather just supplying the same loading logic to a normal method.
  • An Expand math node, which is used to "combine" arrays.
    • As opposed to reduce node, this would expand (not reduce) dimensionality.
    • As opposed to operate node, this would be allowed to do things to two arrays beyond "by-element".
    • As opposed to transform node, this would be allowed to alter dimensions.
    • Essentially a tensor product.
  • Only plot immediately connected nodes from viewer, aka. don't propagate.
  • When a Blender object is selected, select the node that owns its ManagedObj.
  • Node button / shortcut / something to select the ManagedObj owned by a node.
  • Dependency-gated addon preferences.
    • Preferences-based specification/alteration of default unit systems for Tidy3D and Blender.
    • Preferences-based specification/alteration of Tidy3D API key, so we can factor away all the prelock bullshit.
  • Report reason for no-link using self.report.
  • log.error could invoke self.report in a Blender operator - used for errors that are due to usage error (which can't simply be prevented with UX design, like text file formatting of import), not due to error in the program.
  • Mouse-dropping a link on empty space could query a menu of possible nodes, or if only one node is reasonable, make that node.
  • Shader visualizations approximated from medium nk into a shader node graph, aka. a generic BSDF.
  • Easy conversion of lazyarrayrange to mu/sigma frequency for easy computation of pulse fits from data.
  • Hand-craft a faster spu.convert_to. https://github.com/sympy/sympy/blob/a44299273eeb4838beaee9af3b688f2f44d7702f/sympy/physics/units/util.py#L51-L129
  • Communicate with the sympy upstream about our deep usage of unit systems. They might be interested in the various workarounds.
  • A "CitationsFlow" FlowKind which simply propagates citations.
  • License header UI for MaxwellSimTrees, to clarify the AGPL-compatible potentially user-selected license that trees must be distributed under.
  • Standardization of nodes/sockets w/individualized SemVer
    • Perhaps keep node / socket versions in a property, so that trying to load an incompatible major version hop can error w/indicator of where to find a compatible blender_maxwell version.
    • Integrate w/BLField, to help the user manage addon updates that would break their tree.
  • Migrate to StrEnum sockets (py3.11).
  • Implement drag-and-drop node-from-file via bl4.1 file handler API.
  • Start thinking about ways around __annotations__ hacking, it might be on the block for py3.13
  • Prepare for for multi-input sockets (bl4.2)
  • Prepare for volume geonodes (bl4.2; July 16, 2024)
    • Will allow for actual volume processing in GeoNodes.
    • We might still want/need the jax based stuff after; volume geonodes aren't finalized.
  • Would be nice with some kind of indicator somewhere to help set good socket descriptions when making geonodes.
  • Node icons to denote preview/plot state.
    • Header color style can't be done, unfortunately. Body color feels unclean, so nothing there for now.
# Ideas ## General Ideas - Let's have operator `poll_message_set`: https://projects.blender.org/blender/blender/commit/ebe04bd3cafaa1f88bd51eee5b3e7bef38ae69bc - Careful, Python uses user site packages: <https://projects.blender.org/blender/blender/commit/72c012ab4a3d2a7f7f59334f4912402338c82e3c> - Our modifier obj can see execution time: <https://projects.blender.org/blender/blender/commit/8adebaeb7c3c663ec775fda239fdfe5ddb654b06> - Sync transformation of Blender object by user to its node properties. - See <https://archive.blender.org/developer/P563> - Also see <https://blender.stackexchange.com/questions/150809/how-to-get-an-event-when-an-object-is-selected> - A special logger for hot-loops, which logs to a file (with level-based performance guarding) instead of to the console, to avoid all that on-screen trash. - Remember that we turned off buffering, which means that logs can affect performance in an incredibly adverse way. We may even want to use `BytesIO` with manual flushing if the intention is to also do profiling in this kind of hot loop. - **Masquerading `AnySocket`**: For the purpose of allowing/disallowing connections, let `Any` pretend to be other sockets (with correct shape and color) without actually implementing any of their functionality. Imposter style. Essentially for nodes like `Combine` which literally just need to gather inputs and produce outputs and make sure that it's all looking OK, without needing to be more pedantic than that. - Alternatively, node creation could pre-fill `SocketDef` options by selecting one or the other from the menu. ## Concrete Ideas - [ ] An "invalidate with" declaration on a `@property`/node/socket, which essentially says "whenever this is invalidated, you should also invalidate my name". - This would be especially useful for using computed properties of invalidated data (ex. when `_compute_input` needs manual running in a computed property), which in turn may also be useful (for deduplication, also just in general) inputs to `@computes_output_socket` methods. - When one just does this now, one has to "cheat" by specifying the ex. `props` of both the computed property, and manually, also the `props` of the data that the computed property depends on. - We shouldn't break the chain, and such an `invalidate_with` might help us a little bit. We should take immense care, however. - It might be worth letting it be a part of `bl_cached_property`, since on some level, even if we want a non-cached computed `@property`, there is always a cache in play that needs to be respected. - Could even be like, a generic `@events` decorator, but one that specifically isn't bound to any particular change/output - rather just supplying the same loading logic to a normal method. - [ ] An `Expand` math node, which is used to "combine" arrays. - As opposed to reduce node, this would expand (not reduce) dimensionality. - As opposed to operate node, this would be allowed to do things to two arrays beyond "by-element". - As opposed to transform node, this would be allowed to alter dimensions. - Essentially a tensor product. - [ ] Only plot immediately connected nodes from viewer, aka. don't propagate. - [ ] When a Blender object is selected, select the node that owns its ManagedObj. - [ ] Node button / shortcut / something to select the ManagedObj owned by a node. - [ ] Dependency-gated addon preferences. - [ ] Preferences-based specification/alteration of default unit systems for Tidy3D and Blender. - [ ] Preferences-based specification/alteration of Tidy3D API key, so we can factor away all the `prelock` bullshit. - [ ] Report reason for no-link using `self.report`. - [ ] `log.error` could invoke `self.report` in a Blender operator - used for errors that are due to usage error (which can't simply be prevented with UX design, like text file formatting of import), not due to error in the program. - [ ] Mouse-dropping a link on empty space could query a menu of possible nodes, or if only one node is reasonable, make that node. - [ ] Shader visualizations approximated from medium `nk` into a shader node graph, aka. a generic BSDF. - [ ] Easy conversion of lazyarrayrange to mu/sigma frequency for easy computation of pulse fits from data. - [ ] Hand-craft a faster `spu.convert_to`. <https://github.com/sympy/sympy/blob/a44299273eeb4838beaee9af3b688f2f44d7702f/sympy/physics/units/util.py#L51-L129> - [ ] Communicate with the `sympy` upstream about our deep usage of unit systems. They might be interested in the various workarounds. - [ ] A "CitationsFlow" FlowKind which simply propagates citations. - [ ] License header UI for MaxwellSimTrees, to clarify the AGPL-compatible potentially user-selected license that trees must be distributed under. - [ ] Standardization of nodes/sockets w/individualized SemVer - Perhaps keep node / socket versions in a property, so that trying to load an incompatible major version hop can error w/indicator of where to find a compatible `blender_maxwell` version. - Integrate w/BLField, to help the user manage addon updates that would break their tree. ## Version-Related - [ ] Migrate to StrEnum sockets (py3.11). - [ ] Implement drag-and-drop node-from-file via bl4.1 file handler API. - [ ] Start thinking about ways around `__annotations__` hacking, it might be on the block for py3.13 - [ ] Prepare for for multi-input sockets (bl4.2) - PR has been merged: <https://projects.blender.org/blender/blender/commit/14106150797a6ce35e006ffde18e78ea7ae67598> (for now, just use the "Combine" node and have seperate socket types for both). - The `Combine` node has its own benefits, including previewability of "only structures". Multi-input would mainly be a kind of shorthand in specific cases (like input to the `Combine` node?) - [ ] Prepare for volume geonodes (bl4.2; July 16, 2024) - Will allow for actual volume processing in GeoNodes. - We might still want/need the jax based stuff after; volume geonodes aren't finalized. - [ ] Would be nice with some kind of indicator somewhere to help set good socket descriptions when making geonodes. - [ ] Node icons to denote preview/plot state. - Header color style can't be done, unfortunately. Body color feels unclean, so nothing there for now.
so-rose added the
tracker
label 2024-05-04 16:25:15 +02:00
so-rose changed title from Idea Tracker to Idea Tracker 2024-05-04 16:40:17 +02:00
so-rose pinned this 2024-05-04 17:12:35 +02:00
Sign in to join this conversation.
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: so-rose/oscillode#11
There is no content yet.