Experiment: flatter strands API by davepagurek · Pull Request #8314 · processing/p5.js
Thanks for this @davepagurek !
A few thoughts:
If the hook returns a new value as output, you can assign to the .result property of the hook
After fiddling with the sketch a little, I'm wondering if there's a more p5-feeling alternative for assigning .result? Though there's the begin/end pattern in framebuffer, I'm not remembering anything like .result = anywhere.
getFinalColor.begin() let myNewColor = mix( [1, 1, 1, 1], getFinalColor.color, abs(dot(myNormal, [0, 0, 1])) ); getFinalColor.set(myNewColor); getFinalColor.end()
Is one idea, what do you think?
Should we auto-alias get*-prefixed hooks, like getPixelInputs, to pixelInputs so it reads more clearly in this form?
Not sure I understand this, is the code below interpreting the alias idea correctly?
baseMaterialShader().modify(() => { let myNormal = sharedVec3() pixelInputs.begin() myNormal = pixelInputs.normal pixelInputs.end() finalColor.begin() finalColor.result = mix( [1, 1, 1, 1], finalColor.color, abs(dot(myNormal, [0, 0, 1])) ); finalColor.end() });
If yes, then I support it, because it more closely matches the begin/end pattern on framebuffer.
Rather than accessing properties on the hook itself, e.g. getPixelnputs.normal, should we make a global inputs that aliases the hook within its begin/end so you could write inputs.normal? ...
Same here, is the code below interpreting the alias idea correctly?
let myNormal = sharedVec3() getPixelInputs.begin() myNormal = inputs.normal // is this what you meant? getPixelInputs.end() // if so, is begin/end here this needed? getFinalColor.begin() getFinalColor.result = mix( [1, 1, 1, 1], inputs.color, // does this make sense too or no? abs(dot(myNormal, [0, 0, 1])) ); getFinalColor.end() });
Putting it together, it seems much more p5-like:
let myNormal = sharedVec3() pixelInputs.begin() myNormal = inputs.normal pixelInputs.end() finalColor.begin() let myNewColor = mix( [1, 1, 1, 1], inputs.color, abs(dot(myNormal, [0, 0, 1])) ); finalColor.set(myNewColor); finalColor.end()