This week I was at the Revision.
My First non Frecnh demo party since the Take Over 2000.
The excellent Live coding compo has inspired me to make my first ShaderToy effect.
It was a lot of fun to develop even if it was a pein in the ass with my Laptop( I’ve got 0.5fps on it ).
I hope I will find the time to make more in the future.
Link to the Realtime version
I’m working on Trace Modifier for Black Ink.
This features will be available for all brushes.
This system will modify the course of the line in real time accordingly parameters (and controllers).
For example this stroke modifier is adding a SinWave to the current position.
Or this one is computing a rotation orbit around the current position.
Thanks to the current controller engine Trace Modifier is greatly customizable and user-friendly to create behaviors in function of Pressure, speed, etc…
This modifier is helpful because he keeps the continuity of the tracing without any crack or hole in it.
Furthermore In the next version of Black Ink a new brush type will be introduced: the SimpleCurve which will render a smooth continuous curve and not a following of shapes like all brushes (except the Crepe) in Black Ink now for a better performance and homogeneity in the rendering.
The caveat is its not 100% perfect if there is some transparency and if the brush is really big (due to self-overlapping) but for thin lines it is excellent (in result and performance).
In the future the Trace Modifier will be used in jointly with a MultiBrush system to create stunning effects ;)
Some R&D tests usefull for BlackInk.
Here a simple Brush with another shadow stroke. I find the result funny.
This video exhibit some custom tools, infos panels, floating winodws & UI to Debug & Profile BlackInk whitout any development environement.
This is very usefull to track performance leack in a live sessions on user platform.
You can also save a profiling session for later analysis…
Bonus : you can also see the new layer panel who will be added in the next release of BlackInk
Layers are on the way
I currently worked on layers for BlackInk
This is the number one Uber priority feature who everyone request.
The engine is already shipped on the public version but the feature is not exposed because there’s still some work on the interface.
Today I just finished the implementation of the proprietary file .BKD ( for BlackInk Document ). Who will contains all layers datas ( who can’t be preserved in simple .png file ).
I don’t have the time for the moment to handle a real .PSD file but it’s an option for the futur.
To test the current layer functionality I did this little painting using a reference image, different brushes on different layers. Nothing special except the colors who are more vivid than ever ( compared to BlackInk prior version 0.111, ).
Black Ink New Rendering engine
it’s been almost 2 months I work on a new brush rendering engine for BlackInk.
I spend most of the time to rewrote the way I do the AntiAliasing for brush primtives, the way I store the tiles of the canvas ( I compress it in real time in memory to keep the possibility to brush on 10K canvas in 32bits ) And I have added the support for Layers & 64bits color ( 16bits by component ).
Its was a big refactor work who nearly come to an end.
The controller editor is enriched by new operators ( the list on the bottom left of the picture )
The user can define precisely the behavior of each parameter of his brush.
Here Benoit Onillon has made a Ghost dog in few second after he create a custom behavior for the default brush.
Q:Hello! I just found your article about stroking quadratic curves. I'm currently trying to implement it for my bachelor thesis, but with all my aproaches I fall for some bloody hacks to handle the antialiasing correctly. Could you please tell me which method you used (if that is not company secret :))? I don't need any fancy implementation details, just the main idea. Thanks in advance! Petr K.
For antialiasing I compute a 1 pixel wide geometry around the Quadratic triangle ( you can see the triangulation here ).
It’s not trivial like you say because you must handle some case ( like 2 quadratic triangles who are touching each other at vertex position ) + taking care of the direction of the implicit surface ( is it convex or concave quadratic triangle ) to make sure the geometry cover each needed pixel for anti aliasing.
It took me quiet some time to adress all the case and even with it I got some case where the AntiAliasing isn’t correct ( when a triangle is less than 1 pixel size for example ).
A better approch will be to use MSAA. It’s the only solution for perfect AntiAlising rendering in all scenario and it’s more simple to implement and manage. The caveats is the memory needed to handle really good quality AntiAliasing.
Hope this help.