# Socket Shapes Design | Shape in Prototype | Input Meaning | Output Meaning | | -------------------------------------------------- | ------------------------ | ----------------------- | | ![image](https://hackmd.io/_uploads/HJtNQONhR.png) | Multiple Supported Types | Multiple Possible Types | | ![image](https://hackmd.io/_uploads/BJLHQ_E2C.png) | Requires Single Value | Is Single Value | | ![image](https://hackmd.io/_uploads/BJLc7dEnA.png) | Requires Field | Is Field | | ![image](https://hackmd.io/_uploads/SJuf4O4n0.png) | Requires Grid | Is Grid | * Still need a name for these differences. Currently I call it the **Structure Type**. * Structure type of **group inputs**. * ![image](https://hackmd.io/_uploads/BJOKVdE3C.png) * By default it is automatically determined if possible. * Can be choosen manually. * Structure type of **group outputs**. * Currently, I think it's possible to automatically determine it in all cases. * If not, we need the same dropdown for outputs too. * There is *no* visible **inferencing** between nodes. * E.g. currently the math node changes its socket shapes depending on what you connect. That would not happen anymore. * The socket shapes describe the behavior of a node on its own. * There *is* automatic inferencing for the group inputs/outputs though. * The **link visualization** of fields can still work as before. * It's somewhat nice to not communicate the field state twice (before the diamond shape and dashed lines communicated pretty much the same). * For field inputs, there is no difference anymore between sockets that have a **default field value** and those that don't like we had in the Set Position node. * ![image](https://hackmd.io/_uploads/rkU4POEhA.png) * This may require a new visualization, or we say that socket inspection is good enough. * Actual **socket shapes** (besides what is used in the prototype). * For single values we could start using **line** sockets based on a [design](https://projects.blender.org/blender/blender/issues/74967) by William Reynish. * ![image](https://hackmd.io/_uploads/HklB8uEhR.png) * If the line socket is used for single values, then we could use the **circle** for "dynamic" types. * Need to think about whether it's fine to change geometry/data-block/shader(?) sockets to use the thin socket too. * The **diamond** shape for fields is probably good to keep. * Still need proper socket shapes for `Volume Grid`, `List` and `Image` (+ `Single`?).