[HN Gopher] Fluid Paint
       ___________________________________________________________________
        
       Fluid Paint
        
       Author : pjerem
       Score  : 493 points
       Date   : 2021-06-21 08:59 UTC (14 hours ago)
        
 (HTM) web link (david.li)
 (TXT) w3m dump (david.li)
        
       | nielsbot wrote:
       | FWIW, I don't see any paint with my browser: Safari 14.1 (Release
       | 116, WebKit 16611.1.5.3) The rest of the UI seems to work.
        
         | FractalHQ wrote:
         | By design. Apple can't let Safari function properly as a modern
         | browser, otherwise PWAs would be able to compete with their App
         | Store money printer on iOS!
        
       | sebringj wrote:
       | the paint realism is amazingly realistic and fantastic...it
       | really blends together with texture, love this, favorite of all
       | time for browser.
        
       | ginsmar wrote:
       | Nice!!
        
       | cakirh wrote:
       | I got problems with "SAVE" its opening "about:blank" <Microsoft
       | Edge Version 91.0.864.54 (Official build) (64-bit> by the way I
       | like it.
        
       | mdre wrote:
       | Those who have Wacom tablets or Apple pencils, does it react to
       | pressure sensitivity?
        
         | throwawaynifoqw wrote:
         | I'm using a Wacom cth-470. The pen works on chrome but not on
         | Firefox. Unfortunately there's no pressure sensitivity as far
         | as I can tell.
        
         | Anunayj wrote:
         | there is a Open issue from 2017 about pressure sensitivity [1]
         | but seems like the author does not plan to actively maintain
         | the project.
         | 
         | Honestly I'll play around a little to see if can quickly add
         | that functionality.
         | 
         | [1] https://github.com/dli/paint/issues/9
         | 
         | EDIT: Just made a quick and dirty pull request, a live version
         | here: https://brushpaint.pages.dev/ Now If someone puts more
         | time into this they could: Add support for tilted pens (Change
         | bristle direction based on tilt, my pen doesn't support tilt.)
         | Also the scaling is linear, which is probably not perfect.
        
       | HugoDaniel wrote:
       | This is great!
       | 
       | Is there any place where it is possible to read more about this
       | painting techniques for code?
        
         | onion2k wrote:
         | It's all done with shaders. A good starting point is
         | https://thebookofshaders.com/. You can learn a lot from
         | people's examples on https://www.shadertoy.com/. Another
         | amazing resource is iq's website at https://iquilezles.org/.
         | 
         | Something to note - it's _all_ math. Changing other people 's
         | code and implementing things other people have devised is quite
         | straightforward, but making new styles requires a good
         | understanding of some relatively complex math topics. I'm not
         | saying that to put anyone off - the opposite in fact. If your
         | math isn't great or you're a bit scared of it then learning
         | shader coding is a brilliant way to improve.
        
           | bryanrasmussen wrote:
           | so the above links are good for learning about shaders, are
           | there any resources that are good for the math involved (as
           | in better than the shader links above)
        
             | fsloth wrote:
             | "Real-time Rendering" by Akenine-Tomas Moller et all is one
             | of the standard references here.
             | 
             | https://www.amazon.com/Real-Time-Rendering-Fourth-Tomas-
             | Aken...
             | 
             | Peter Shirley's free Ray Tracing series is incredibly good
             | as well: https://raytracing.github.io/books/RayTracingInOne
             | Weekend.ht...
             | 
             | And the outstanding piece in rendering is the Physically
             | Based Rendering book by Pharr et all (which won an Oscar):
             | https://www.pbrt.org/
             | 
             | None of those are math references as such, but the thing is
             | with graphics it's not based on first principles (well, ray
             | tracing is kinda getting there but still has lots of
             | artistic stuff rather than science stuff), but rather on a
             | bag of tricks. And the math without the "bag of tricks"
             | context may not be that clear.
        
             | SonOfLilit wrote:
             | I recommend starting with the shader stuff, and when you
             | really feel the need picking up a linear algebra textbook,
             | preferably one that has "linear transformations" earlier in
             | the ToC than "matrix multiplication" (or 3Blue1Brown's
             | videos come very recommended by some)
        
           | SonOfLilit wrote:
           | It's all math, but it's pretty easy math and it's a great way
           | to learn it. (Just building on what you said and encouraging
           | people not to be scared and to dip their toes in)
        
             | hutzlibu wrote:
             | "It's all math, but it's pretty easy math "
             | 
             | My experience is, that all math is easy - if you understand
             | it.
             | 
             | But most have big gaps in their basic math knowledge (like
             | me) - and then "pretty easy math" is suddenly very hard, as
             | you stumble every second step, over a concept you never
             | really understood back in class and what you learned you
             | have mostly forgotten - so you have to relearn this. And
             | then that. And then the other thing. And suddenly "easy
             | math" is hard work.
             | 
             | So ... telling people, it is just "easy math" - can make
             | people feel very stupid for not getting it and totally put
             | them off. And I know that I am not stupid - I simply lack
             | knowledge in the area. But for other people with lower self
             | esteem, it can have the opposite effect of encouraging.
        
               | aspaviento wrote:
               | Alternatively, you can add mentally "for the author" to
               | "easy math" and you won't need to feel stupid or go
               | through the enormous effort of trying to convince
               | everybody to change the way they express themselves.
        
       | egypturnash wrote:
       | Damn. "Drag edge of canvas to resize" really does not blend well
       | with "trying to paint near the edges of the canvas".
       | 
       | Nice paint simulation. Really needs a "dry" button like Painter's
       | had since forever.
        
         | numlock86 wrote:
         | To me it feels like it's dry after ever stroke. Paint with
         | yellow on red (fluidity maxed) shouldn't result in yellow.
        
           | egypturnash wrote:
           | I just figure it's really thick virtual oil/gouache/whatever
           | paint.
        
       | aearm wrote:
       | Nice
        
       | mikewarot wrote:
       | It's beautiful. I never realized how individual bristles work
       | together to make a brush stroke. It is fascinating to play with,
       | thanks so much.
        
       | steerablesafe wrote:
       | Pretty cool! It looks like in "digital" color mode blending is
       | done in sRGB colorspace (at least judging from the artifacts I
       | see from blending saturated colors), while "natural" indeed looks
       | a lot more natural.
       | 
       | It would help "digital" mode if colors were blended in linear
       | space. GIMP relatively recently changed the default mode and it
       | makes quite a difference.
        
         | real-dino wrote:
         | I dunno, I found it really hard to mix colours, as everything
         | overpowered the bottom layer. Mixing ultramarine and burnt
         | sienna, did not get me black. Just ultramarine alongside burnt
         | sienna.
        
           | steerablesafe wrote:
           | If you use a large brush with "low" quality then you have
           | larger half-transparent areas at the beginning and end of
           | each stroke.
        
           | SamBam wrote:
           | I mean, that's about what you'd expect, smearing oil paints
           | on top of each other. They won't blend unless you actually
           | blend them.
        
           | andersonfreitas wrote:
           | Is there any implementation out there that attempts to model
           | the mixture of different color pigments?
           | 
           | It would be cool if we could select a color like "cadmium
           | red" and mix it "titanium white" to mimic a real painting and
           | its interactions, instead of simply select colors in a sRGB
           | space.
        
       | aaronetz wrote:
       | This is awesome, and I'm a bit surprised at the lack of more
       | "dynamic" painting software in general (i.e where the paint keeps
       | changing over time, affected by gravity, etc). I've made my own
       | attempt at this[1] although my actual simulation code is quite
       | primitive.
       | 
       | [1]
       | https://play.google.com/store/apps/details?id=com.woodenclos...
        
       | gennarro wrote:
       | No supported on mobile Safari. Too bad! Will try it later.
        
         | p0nce wrote:
         | Neither on Safari desktop.
        
           | coldcode wrote:
           | Me either, save seems not to work on Chrome for me either.
        
             | artur_makly wrote:
             | same.
        
         | [deleted]
        
       | pupdogg wrote:
       | This has to be the most NEXT-LEVEL web based painting tool I've
       | ever seen or used...super cool and kudos to the creator!!!
        
       | onlywicked wrote:
       | Amazing. It was really satisfying to see the strokes.
       | 
       | Any resources for learning this stroke style?
        
       | tomxor wrote:
       | Nice! I like how you can see the brush state before planting it
       | on the page.
       | 
       | Shameless plug: I made a similar but far more rudimentary
       | particle based calligraphic brush in 140 chars of javascript:
       | https://www.dwitter.net/d/17780 Or, drop this in an empty browser
       | console:                 document.body.innerHTML='<canvas id=c>';
       | x=c.getContext('2d');c.width=1920;c.height=1080;C=S=t=0;setInterv
       | al('n=t++?n.map(([X,Y,A,B])=>(x.beginPath(x.moveTo(X,Y),x.lineTo(
       | X+=A,Y+=B),x.lineWidth=(A*B)**.5,x.stroke()),[X,Y,A*.7+(C-X)/9,B*
       | .7+(S-Y)/9])):[];onmousemove=({x,y})=>n[t&63]=[C=x,S=y,0,0]',16)
        
       | GolDDranks wrote:
       | This is awesome, but my immediate reaction is: it would be better
       | without the browser.
       | 
       | On my MacBook Pro (Retina 15 inch 2015, "the best laptop ever
       | made"), it's just laggy enough to be a bit irritating. A native
       | app would be wonderful.
       | 
       | Edit: Just to be sure, I use Firefox, but it doesn't seem to be a
       | Firefox only -effect, as it's similarly laggy on Chrome too.
        
         | elwell wrote:
         | > the best laptop ever made
         | 
         | I agree!
        
         | andyjohnson0 wrote:
         | Krita [1] might be what you're looking for. Lots of fun with a
         | graphics tablet but perfectly usable with a mouse. Free and
         | supports Win/Linux/Mac.
         | 
         | [1] https://krita.org/en/
        
         | dharma1 wrote:
         | Would love to see this in ProCreate or another native iPad app
        
         | hobofan wrote:
         | If you want that as a native app, Corel Painter has that
         | feature of simulating paint bristles and real brushes and their
         | color mixing, and wouldn't be surprised if GIMP and Photoshop
         | also support that by now.
        
           | mark-r wrote:
           | Paint Shop Pro had a natural brush mode even before Corel
           | bought them. I wonder if it's still there?
        
       | L0g4n wrote:
       | Seems to be not supported on iOS. Really, not surprising
       | considering all the Safari quirks.
        
         | kgeist wrote:
         | It doesn't run on my Chrome for Android either
        
         | handrous wrote:
         | Not on desktop Safari, either. Can see and move the brush but
         | can't actually paint. I assume it's something with the drawing
         | process itself, as I can't imagine someone managed to write a
         | click handler that's not cross-browser, so _surely_ that 's
         | firing correctly.
        
           | Pulcinella wrote:
           | I know Apple's support of various WebGL features has
           | generally lagged behind Chrome. Though even when there is
           | feature parity shaders seem to run slower in Safari than in
           | Chrome (e.g. a shadertoy shader that north works in Safari
           | and chrome will run at half the speed or less of the chrome
           | one). It makes me think that Apple is doing some GPU
           | throttling for web use cases, maybe for battery or fan
           | speed/heat reasons.
        
         | [deleted]
        
       | savanpatel wrote:
       | This is not working on Safari browser.
        
       | ascorbic wrote:
       | This is great. I made something with similar bristles, but
       | without the fluidity, alongside soem other brushes.
       | https://react-artboard.netlify.app/
        
       | soheil wrote:
       | I feel guilty that I just wasted a bunch of paint drawing stupid
       | lines.
        
         | mark-r wrote:
         | Yes, those electrons are gone forever now.
        
       | sgt wrote:
       | Cursor moves around but doesn't seem to paint. Using Safari.
        
       | choicenotchance wrote:
       | Not saving
        
       | afkqs wrote:
       | David Li also made that one that I find pretty cool.
       | 
       | https://www.adultswim.com/etcetera/elastic-man/
       | 
       | I'm rather new to shaders, would anyone know how to recreate
       | something like this? Any useful tutorials around?
        
         | krylon wrote:
         | Thank you for that link, this is so much fun! I feel like a
         | ten-year old playing with this.
        
         | cabernal wrote:
         | I'm a fan of David Li's work[0]. Most recently he created the
         | Blob Opera[1] which builds up of a lot of his previous
         | experiments
         | 
         | As for recreating some of this work, you could probably start
         | by looking at his github repos[2].
         | 
         | [0] http://david.li/
         | 
         | [1] https://artsandculture.google.com/experiment/blob-
         | opera/AAHW...
         | 
         | [2] https://github.com/dli
        
         | jonplackett wrote:
         | I wondered this too! It can't just be shaders to do the
         | elasticity though right?
         | 
         | from his tweets about it: "Low res position based dynamics thin
         | shell + some loop subdivision"
         | 
         | Which doesn't help me drastically.
        
           | Jasper_ wrote:
           | Let's break it down:
           | 
           | Low res thin shell means that this is a model without many
           | vertices. The "position based dynamics" is a more modern term
           | for what was sometimes called "verlet integration", using the
           | positions to compute immediately velocity relative to the
           | ideal undeformed cage. So this is our simulation model. This
           | is still how cloth sim is done today in games.
           | 
           | To compute the final render, Loop subdivision is used to turn
           | the "thin shell" into a tighter model. You can Google for it,
           | it's a way of subdividing triangles.
        
       | pram wrote:
       | Flame Painter does this kind of 'particle' brush thing, if anyone
       | is looking for a more comprehensive version. It's a very neat
       | effect!
        
       | mattfrommars wrote:
       | How does one build anything like this if all they know is
       | enterprise CRUD application and web API work?
        
         | roberttod wrote:
         | Like learning guitar - the trick is motivating yourself and
         | making small investments by figuring out how to enjoy tiny
         | projects that slowly get you to this level of skill/knowledge.
         | 
         | This example uses HTML Canvas, so you could look up some
         | tutorials and start there. At first, programming visually when
         | you've only done API stuff is a whole new world, but it makes a
         | lot of sense with some practice.
         | 
         | I found a tutorial which is probably along the lines you'd want
         | to go down, see https://www.youtube.com/watch?v=gm1QtePAYTM
        
         | make3 wrote:
         | Take a graphics class online. The great thing is that learning
         | this has a very fast reward loop. With every small thing you
         | learn, you can try it and it looks great right away.
         | 
         | So:
         | 
         | Probably take a graphics class, with an intro to shaders and
         | the different lightning methods.
         | 
         | Then lookup some cosmetic liquid simulation algorithms by
         | graphics people.
         | 
         | Then learn how to do shaders with canvas and javascript.
        
       | jansan wrote:
       | Aside from the obviously gorgeous app, the colorpicker is quite
       | interesting. This is not our standard HSV color picker. Can you
       | tell what color model it is based on?
        
         | empiricus wrote:
         | Very nice color wheel, I was able to quickly choose and use
         | some very beautiful colors.
        
         | jansan wrote:
         | Answering my own question: This seems to use the RYB color
         | model:
         | 
         | https://en.wikipedia.org/wiki/RYB_color_model
        
           | mark-r wrote:
           | That's probably a good start, but there's more to it than
           | that. The hue ring doesn't appear to have a fully saturated
           | blue.
        
       ___________________________________________________________________
       (page generated 2021-06-21 23:00 UTC)