From 988e64636d64fd8dab900b250e7fe2e9f978f4fb Mon Sep 17 00:00:00 2001 From: notes Date: Wed, 20 Mar 2024 16:22:37 +0000 Subject: [PATCH] Snapshot --- Projects/bachelor/NODE_REGISTRY.md | 60 +++++++ Projects/bachelor/NOISE_PROBLEM.png | Bin 0 -> 82992 bytes Projects/bachelor/Notes.md | 68 +------- Projects/bachelor/OVERVIEW_SEQUENCE.png | Bin 0 -> 17510 bytes Projects/bachelor/PURE_GRAPH.png | Bin 0 -> 9667 bytes Projects/bachelor/RANDOM_PROBLEM.png | Bin 0 -> 11047 bytes Projects/bachelor/RUNTIME_EXECUTOR.md | 210 +++++++++++++++++++++++- STYLES.md | 76 +++++---- 8 files changed, 314 insertions(+), 100 deletions(-) create mode 100644 Projects/bachelor/NODE_REGISTRY.md create mode 100644 Projects/bachelor/NOISE_PROBLEM.png create mode 100644 Projects/bachelor/OVERVIEW_SEQUENCE.png create mode 100644 Projects/bachelor/PURE_GRAPH.png create mode 100644 Projects/bachelor/RANDOM_PROBLEM.png diff --git a/Projects/bachelor/NODE_REGISTRY.md b/Projects/bachelor/NODE_REGISTRY.md new file mode 100644 index 0000000..0906664 --- /dev/null +++ b/Projects/bachelor/NODE_REGISTRY.md @@ -0,0 +1,60 @@ +# NODE_REGISTRY + +# How to store nodes in the registry? + +The nodes need: + +## ID: string/string/string +I could imagine something like jimfx/nature/branch + +## INPUTS: +We need a way to define how the UI should render the input ui. Could be something like: + +```json +{ + "inputs": [ + “a”: { + “type”: “select”, + “options”: [ + “curly”, + “straight” + ] + }, + "b": { + "type":"float", + "value": 0.5, + "max": 10.0, + "min": 0 + }, + "res":{ + "type": "integer", + "value": 5, + "setting":"leaves/resolution" + } + ] +} +``` + +## OUTPUTS +The nodes output, could look something like this: + +```json +{ + "outputs": ["stem","float"] +} +``` + +# How to store serialized nodes + +```json +{ + "id":"jimfx/nature/branch", + "inputs": [0,8.4], + "position": [0.6, 10] + "meta": { + "title":"Branch Node" + } +} +``` + + diff --git a/Projects/bachelor/NOISE_PROBLEM.png b/Projects/bachelor/NOISE_PROBLEM.png new file mode 100644 index 0000000000000000000000000000000000000000..c3909340538e6df71a8cea40623d7a061ef6ddda GIT binary patch literal 82992 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 JLdh!p{{WnWruP5< literal 0 HcmV?d00001 diff --git a/Projects/bachelor/Notes.md b/Projects/bachelor/Notes.md index 92ae065..1f2b3bf 100644 --- a/Projects/bachelor/Notes.md +++ b/Projects/bachelor/Notes.md @@ -1,76 +1,20 @@ -```toc -``` - # Notes We need three major components to work together. I would love it if the node-store and the runtime are super loosely coupled so that they could be replaced by at will. So for example i could use the “server-runtime” that executes the node-graph on the server, or the “local” runtime that executes the node-graph locally. -**NODE_INTERFACE** +## [[Projects/bachelor/NODE_INTERFACE]] + This is where the user interacts with the node graph. The frontend loads a node-system. Then fetches all the relevant nodes from the node-store. -**NODE_REGISTRY** +## [[Projects/bachelor/NODE_REGISTRY]] The node-store stores all the nodes. For each node it stores a definition and the wasm blob that executes that node. -**[[Projects/bachelor/RUNTIME_EXECUTOR|RUNTIME_EXECUTOR]]** +## [[Projects/bachelor/RUNTIME_EXECUTOR]] The runtime gets a node-graph and returns the result after executing the node-graph. It fetches the relevant nodes from the node-store. -# How to store nodes in the registry? - -The nodes need: - -## ID: string/string/string -I could imagine something like jimfx/nature/branch - -## INPUTS: -We need a way to define how the UI should render the input ui. Could be something like: - -```json -{ - "inputs": [ - “a”: { - “type”: “select”, - “options”: [ - “curly”, - “straight” - ] - }, - "b": { - "type":"float", - "value": 0.5, - "max": 10.0, - "min": 0 - }, - "res":{ - "type": "integer", - "value": 5, - "setting":"leaves/resolution" - } - ] -} -``` - -## OUTPUTS -The nodes output, could look something like this: - -```json -{ - "outputs": ["stem","float"] -} -``` - -# How to store serialized nodes - -```json -{ - "id":"jimfx/nature/branch", - "inputs": [0,8.4], - "position": [0.6, 10] - "meta": { - "title":"Branch Node" - } -} -``` +This is how these three components would communicate +![](OVERVIEW_SEQUENCE.png) diff --git a/Projects/bachelor/OVERVIEW_SEQUENCE.png b/Projects/bachelor/OVERVIEW_SEQUENCE.png new file mode 100644 index 0000000000000000000000000000000000000000..5989b7670c2b624d62cc46f7b9d07fc588da6aa9 GIT binary patch literal 17510 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 literal 0 HcmV?d00001 diff --git a/Projects/bachelor/PURE_GRAPH.png b/Projects/bachelor/PURE_GRAPH.png new file mode 100644 index 0000000000000000000000000000000000000000..59a036b801ee1cbeb897863cd09a62eb5e28802b GIT binary patch literal 9667 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 i32 { + return a + b +} +``` +![](PURE_GRAPH.png) + +The problem occurs if we try do adher to this principle for more complex use cases. + +## Problem Example 1 +![](RANDOM_PROBLEM.png) + +Users would probably expect the random node to output for different results. If we would model the `random` node as a pure function, it does not know how many results it should generate. + +## Problem Example 2 +![](NOISE_PROBLEM.png) +On the left you see a node setup for the procedural generation of geometry. On the right one of the probably outcomes a user would expect. + +If we model the noise function as a pure function we would first have to figure out how to pass the result of the noise function as a pure value to the `cylinder` node. The `noise` node also has no idea how many outputs are connected to it. + + +## Solution 1 (Power to the Nodes) + +We could solve this by letting each node execute its parent node graph however it wants. This would allow the `cylinder` node to execute the `noise` however often it needs to create the cylinders. + + +```typescript +// how this could look like in the node + +{ + id: "cylinder", + inputs: { + "amount": { type: "integer", value: 1 }, + "height": { type: "float" }, + "radius": { type: "float" }, + }, + execute: ({ amount, height, width }, executeNodeGraph) => { + + const stemAmount = executeNodeGraph(amount); + const ringAmount = 10; + + for(let i = 0; i < stemAmount; i++){ + for(let x = 0; x < ringAmount; x++){ + const radius = executeNodeGraph(width); + // create a single ring + } + } + + } +} +``` + +**Pros** +- nodes become very flexible on how the work in their inputs + +**Cons** +- Every Nodes needs access to the [[Projects/bachelor/RUNTIME_EXECUTOR]] +- It could become very unpredictable how each node behaves, because the each have a own way to handle inputs + +## Solution 2 (Parametrized nodes, embed execution) + +We could change the output of the noise function to output a definition of noise like the following: + +```json +{ + "type": "noise", + "size": 0.7, + "strength": 1.5 +} +``` + +Or the random node could output something like this: + +```json +{ + "type": "random", + "min": 0, + "max": 42 +} +``` + +Then we could embed a function that nows how to turn these parametrized nodes into numbers inside the `cylinder` node. One problem with this is that this function needs to be recursive, because the inputs of the parametrized nodes could also be other parametrized nodes: + +```json +{ + "type": "noise", + "size": 0.7, + "strength": { + "type": "random", + "min": 0, + "max": 42 + } + } +} +``` + +**Pros** +- The overhead inside the `cylinder` node is smaller than the other solutions +- BIIIG Pro; the runtime knows nothing about that + +**Cons** +- We basically have to embed the execution function of number nodes inside other nodes +- recursive execution of the nodes definitely needs memoization + +## Solution 3 (Partially invert the flow) + +Normally the flow of information in this graph is only from the parents to the children nodes. One idea could be for the children nodes to send to their parents what they need, and then have the parents return that result to their children. + + +## Solution 4 (Add execution information to parameters) + +We could also add metadata to the node definition to tell the [[Projects/bachelor/RUNTIME_EXECUTOR]]. This could either be how it should execute the parent nodes of a node, or directly in the node how it should be executed. + +For example in the first [[#Problem Example 1|Example 1]] it could look like this + +```typescript +const randomNode = { + id: "random", + inputs: { + "value": { type: "float", value: 0.1, internal: true }, + "seed": { type:"runtime_seed" } + }, + outputs: ["float"], + execution: { + // this is the important part + distinctOutput: true + }, + execute: ({ value, seed }) => { + return value + } +} +``` + +This could tell the [[Projects/bachelor/RUNTIME_EXECUTOR]] to execute the `randomNode` for every of its child nodes individually. + + +--- + +# Parameters Dimensionality + +We could define how many dimensions a parameter can handle and which range it could handle. For example the `radius` parameter could be a 2D parameter, and we could map the x coordinate to the angle relative to the center of the stem and y to the height along the stem. + +The `noise` node would output a 2D parameter. We sample it with 2 coordinates. But we could also only sample it with one coordinate. + +If we would have a theoretical `curve` function, it would produce a `1D` parameter which is sampled with a x coordinate from 0 to 1. + +The `random` node outputs a `1D` parameter, we sample it with the `seed`. + +Then we would need a way to sample this parameter where we need the value. + +```typescript + +const cylinderNode = { + id: "cylinder", + outputs: ["geometry"], + inputs: { + height: { type: "float" }, + radius: { type: "float" }, + amount: { type: "integer" }, + seed: { type: "runtime_seed" }, + xResolution: { type:"integer", setting:"resolution.x" }, + yResolution: { type:"integer", setting:"resolution.y" }, + }, + execute({ height, radius, amount, xResolution, yResolution, seed }){ + const coordinates: number[][] = []; + + const angleIncrement = (2 * Math.PI) / xResolution; + + const amount = sampleParameter1D(amount); + + for (let j = 0; j < amount; j++){ + const cylinder: number[] = [] + + // here we sample a 1D Parameter + const heightIncrement = sampleParameter1D(height, j) / yResolution; + + for (let i = 0; i < yResolution; i++) { + const y = i * heightIncrement; + + for (let j = 0; j < xResolution; j++) { + const angle = j * angleIncrement; + const radius = sampleParameter2D(radius, y, angle); + const x = radius * Math.cos(angle); + const z = radius * Math.sin(angle); + coordinates.push( , y, z); + } + } + coordinates.push(cylinder); + } + + return coordinates; + } +} +``` + diff --git a/STYLES.md b/STYLES.md index 736d998..b97d249 100644 --- a/STYLES.md +++ b/STYLES.md @@ -1,45 +1,49 @@ -```css + + +```space-style + #sb-root { - /* Uncomment the next line to set the editor font to Courier */ - --editor-font: "Courier" !important; - /* Uncomment the next line to set the editor width to 1400px */ - /* --editor-width: 1400px !important; */ + --top-background-color: #1a1a1a; + --top-border-color: #222; } -/* Choose another header color */ #sb-top { - /* background-color: #ffe54a !important; */ + box-shadow: 0px 0px 50px rgba(0, 0, 0, 0.1); } -/* You can even change the appearance of buttons */ -button { - /* align-items: center; - background-color: #fff; - border-radius: 6px; - box-shadow: transparent 0 0 0 3px,rgba(18, 18, 18, .1) 0 6px 20px; - box-sizing: border-box; - color: #121212; - cursor: pointer; - display: inline-flex; - flex: 1 1 auto; - font-family: Inter,sans-serif; - font-size: 0.6rem; - justify-content: center; - line-height: 1; - margin: 0.2rem; - outline: none; - padding: 0.3rem 0.4rem; - text-align: center; - text-decoration: none; - transition: box-shadow .2s,-webkit-box-shadow .2s; - white-space: nowrap; - border: 0; - user-select: none; - -webkit-user-select: none; - touch-action: manipulation; */ +#sb-current-page .cm-line { + font-size: 0.8em; + padding-top: 0.1em !important; } -button:hover { - /* box-shadow: #121212 0 0 0 3px, transparent 0 0 0 0; */ +.sb-markdown-widget { + padding: 0px !important; + border: none !important; } -``` \ No newline at end of file + +/* first line - editing */ +div:not(.sb-line-fenced-code) + .sb-line-fenced-code { + border-radius: 10px 10px 0px 0px; + padding-top: 10px !important; + padding-right: 10px !important; +} + +.sb-line-fenced-code:not(.sb-fenced-code-iframe) { + padding-left: 20px !important; + padding-right: 20px !important; +} + + +/* last line - editing */ +.sb-line-fenced-code:has( > .sb-meta) { + border-radius: 0px 0px 10px 10px; +} + + +.sb-code-info { + padding-right: 2px !important; +} + +``` + +