Open scribblemaniac opened 7 years ago
@scribblemaniac This is a great proposal. My only qualm about it is what I ask myself daily regarding Pencil2D. "¿Who's going to do it?". I'm going to approach this from kind of a film production role.
Imagine that you code this on your own. Can you tell me approximately how long would this feature take you to develop? If we get more people, can they understand what is the task at hand? What about some kind of financial motivation? Is it feasible?
On the other hand I have to ask. Why do we need this feature? is it a novelty or a logical consequence? MyPaint integration isn't near ready, and now we're thinking of changing the core of how Pencil2D works. I understand the advantages and disadvantages, but at first, just thinking about how hard it's been to get here, this change could feel unnecesary, however my gut tells me that this could help evolve the way we approach Pencil2D since to me it's always been counter-intuitive to sort of have 1) individual drawn images representing drawings per frame and 2) having to use so much memory just by opening a long animation (last week I tested a 1500+ frame animation and just opening would cache it all and pencil2D would eat about 2 gb ram just by being open), anyway, these are sort of rhetorical questions.
I think it would also help to develop an improved system for fast preview, like After Effects ram preview where you cache the files only when you're about to playback the animation, but before that you only preview and cache your current frame (and possibly the ones that are onion skinned for Pencil2D)
Having a working drawing mode would help to ease the lack of a "bitmap" layer. Many people actually use the vector tools to draw. And others want the "MyPaint" promise to use brushes and improved drawing capabilities.
I'm a bit tired right now, so I'll re-read your proposal tomorrow to see If there's something we can do as a collaborative effort to propel this forward since it's going to be quite intense, and I want to help you guys with at least some kind of motivation to stick with it if we choose to do properly.
My only qualm about it is what I ask myself daily regarding Pencil2D. "¿Who's going to do it?"
Believe me, I've asked this question too. While I am capable of doing it all, and I'd love to say, "oh yeah, don't worry, I'll take care of it", I know I don't have that much time to commit. And our other developers are probably the same way.
Imagine that you code this on your own. Can you tell me approximately how long would this feature take you to develop? If we get more people, can they understand what is the task at hand? What about some kind of financial motivation? Is it feasible?
It would take a while for one person to get it done right. Mypaint integration is targeting 0.7 last time I heard, so this would be a 0.8 feature, and I think it's feasible to complete it within that timeline. We talked about possible fundraising setups before, so I'm not going to repeat that here. It could probably help with this and any other issues/idea in the project. I mean just look at Krita, they are crushing most other OS drawing software in large part because of their success fundraising.
is it a novelty or a logical consequence?
Logical consequence in my opinion, but a novelty if people aren't going to use the features of course.
MyPaint integration isn't near ready, and now we're thinking of changing the core of how Pencil2D works.
It doesn't seem like there is that much more to do actually, but only feeef can say.
I think it would also help to develop an improved system for fast preview
I definitely agree.
I'm a bit tired right now, so I'll re-read your proposal tomorrow to see If there's something we can do as a collaborative effort to propel this forward since it's going to be quite intense, and I want to help you guys with at least some kind of motivation to stick with it if we choose to do properly.
Good night! Looking forward to hearing more from you.
To get a better idea of what is involved, I developed a proof of concept over the past hour or so. You can find it on this branch which is based off of the mypaint branch. I broke bitmap layers, and there is plenty of new bugs, but it is just an example of how the vector layer can render mypaint brushes.
Example (done only with a vector layer, and no pressure):
@scribblemaniac I've read your proposal again and now I understand. I think probably the first "safe" step would be to improve the vector tools and prepare them to receive such system integration. Then we'd have to develop the system itself based on your proof of concept and finally integrate it with pencil2d. Also we'd have to be able to deploy with MyPaintLib as well which makes your 0.8 target as realistic as it can be.
Regarding people, yes, with feef there were conversations about his newly funded organization in favour of the animated art and open source technologies. However right now that is as much as a variable as anything. Regarding Krita, they've been nailing it, because they have a core team working on the software, so it was easy to create the foundation and give the users an image of stability. Sadly we can't do that right now.
For example, I could donate money and all that but without some kind of real (legal) bond that held Pencil2D together, it would be futile to think of a crowfunding campaign. We need to improve Pencil2D's public image, and also stregthen our programmers reserve, but the only way I see it is with money; hiring people at least part time to work on this. I've coordinated creative projects in the past, but nothing related with code. If we had a "pencil foundation", a parent company supporting us (like opentoonz) or a really excentric patron, this would be a blessing.
Somewhere along the line, if we plan to maintain this software, we need to think about joining efforts. My main problem is that we are an international team right now. And the internet can only help so much, however I'd rather try working like that than failing to realize the software because of just difficulties in team-based communication.
Anyway, I kind of want to ask again, even if you give me a rough estimate, how long and how much do you think it would cost to implement this. This is because if I could make a really rough budget we might be able to approach this in a realistic way without trampling over everyone's free time.
We could think of setting up a goal-oriented reward system where if someone clears up a task they can get rewarded with money. It's similar to the idea behind www.bountysource.com where people start bounties on specific bugs that need to be fixed, or behaviours to be implemented, and such bounties can be increased via donations to make the "pool" larger, and hence the reward "juicier".
I'd like to know what @feeef and @chchwy think about this whole thread as well. :+1:
I like the idea, it's similar to how strokes are being rendered in Disney's amazing in-house vector drawing application Meander. https://www.disneyanimation.com/technology/innovations/meander
If it were to work just as good or better than bitmaps, then there would be no reason to keep old layer types at all though, we would instead merely refer to "layers" which would simplify the UI a lot.
Although this could potentially break compatibility with old projects, it could be interesting to take this proof of concept further.
I however don't see how any of this would require a new format, I'm sure it's possible to add the necessary data to the current pclx format with some work.
Generally it's good. As I see it, the idea is basically a more powerful vector engine.
We can start this by improving the current vector engine. Adding brush strokes to vector layer? yes, we can do it now. Moving, scaling, rotation strokes? yes, we can do it now.
We will gain the benefits by doing things in current vector engine, don't have to throw bitmap away first.
Let's get the vector engine better and better. Until one day the vector engine is good enough, and then we will probably drop the bitmap layers.
@scribblemaniac I am a bit sad when I read this, I mean replacing Bitmap layers and doing it on vector mode really made me wish to be a developer to just help on the development of the Bitmap side.
But anyway. When you said "...a user, this would appear nearly identically to painting on a bitmap layer." I am not able to understand them why there are software dedicated to bitmap (like TVPaint) if they can do it on vector mode and save some "problems" like the infinite zoom without loosing quality.
I have tested "mischief" on the past just curious to see if its natural strokes real mimic the raster ones, since it is a vector program . To be honest I didn't feel it that way and promptly uninstalled it. Maybe they also thought that a "nearly identically" bitmap engine would be pleasant for bitmap users. But that seamed not to be enough. Bitmaps has its own agenda
Maybe I am alone with this idea of mine
[edited]
Thank you by the way for all your efforts here!
I don't think we should disable bitmaps. Improve vectors and stuff sure but bitmaps are still valuable for some purposes such as pixel animations
Also, I don't really see any need to disable them in the first place. I mean if the vector engine is better, people will use that, but what would we accomplish by disabling bitmap layers?
@Kaikogf @Spark01 I think your apprehension is misguided. Don't think of the proposed vector layer as anything like the current vector layer, or even vector-based animation software. Think of it instead as a list of operations. A bitmap brush stroke is nothing other than a line drawn from mouse points, and hey guess what? A vector path is nothing other than a line drawn from saved points. If the points of a vector path and the mouse points are the same, then they're the exact same thing! The different "feel" you describe is probably smoothing between points (with bezier curves), or a simplifying of the drawn path (i.e. using less points to describe the path), both of which would be optional when implemented. I'm confident that the vector layer could be made to look and feel exactly like the bitmap layer. Even pixel animations are possible with vectors (although there are some additional considerations for this, for example the lines would have to be drawn differently and a new tool may be useful). The reason why other programs don't do this by default is because vector graphics are newer than bitmaps, and because the disadvantages listed in my initial post often apply to other programs.
To be clear, bitmaps will never be eliminated entirely as we will still need to maintain backwards compatibility and support for image importing. However it is still to our advantage to disable direct editing of them so that we do not have to maintain the bitmap tools (this will reduce our workload so we can focus on many of the other issues/features we want to implement). It also should be disabled so that the average users, who may not understand the difference between bitmap and vector layers, or may still have a "traditional" view of vector layers, would use the superior vector layer (see the Advantages). If you start with a bitmap layer, it's effectively impossible for the computer to losslessly convert it to a vector layer if the user later finds out they need a feature that only vector layers can provide (for example, adding HD support to an SD animation, or changing the outline color for a character). On the other hand if they've used a vector layer from the beginning, this won't be an issue, and it is trivial to convert it to a bitmap layer if that is later needed (ex. for export).
@scribblemaniac Fantastic explanation here! Thank you very much for this.... I learned more than I asked for 👍
It is funny but I think I am starting to understand how do you developers think during the process of developing a software!
I believe most of you were born in Set/Oct May/Jun or even Jan/Feb (or even Ago)
I had this idea a long time ago, and I was reminded of it recently upon experimenting with the mypaint branch (excellent work btw @feeef). One of the current issues with it is that the bitmap layers are loosing quality when drawing on a transformed canvas. Imagine this simple scenario:
The result of this will be a line that has half the resolution that it should. This can cause issues with antialiasing, as well as with the quality of the new brushes. This situation is made much worse by the fact that everything is drawn onto the transformed bitmap, which means that to save the frame, you have to transform it back to a zoom and rotation of zero, and subsequently retransform it back to the canvas transformation. What this all means from an animators perspective is, if they want to scale, the quality of their drawings is reduced, and if they want rotation, the quality of past strokes degrades with each new stroke you add. Now I can probably think of three or four different solutions to this issue, but I believe this solution provides the most benefit (but admittedly a non-trivial amount of work).
Okay, so my proposal is simple in principle. We disable painting on bitmap layers (but keep the layer type for backwards-compatibility and image import purposes). Next we add a 'stroked' feature to the vector layer (or as it's own layer type). When it is enabled, instead of painting vector paths to the screen it draws brush strokes along the vectors to a bitmap image, which is then cached and drawn to the screen. When a new brush stroke is started, it can be handled as bitmap manipulations with the vector data being stored in the background. When the stroke is completed then the vector data can be added. To a user, this would appear nearly identically to painting on a bitmap layer.
Advantages:
Disadvantages:
I think theses changes would be really beneficial to Pencil, but I want to hear everyone else things. Let me know if you need clarification on anything. If there is a consensus that this is a wanted feature, I will try to help implement it.