pencil2d / pencil

Pencil2D is an easy, intuitive tool to make 2D hand-drawn animations. Pencil2D is open source and cross-platform.
http://pencil2d.org
GNU General Public License v2.0
1.45k stars 272 forks source link

Layer opacity #883

Closed ManuAros closed 3 years ago

ManuAros commented 6 years ago

With version 0.6.0 I cannot get layer opacity to work properly. If you draw an outline in black on one layer and you try to finalise the outline on a second bitmap layer the difference between black and grey is too little. You can not simply draw a new outline over the sketch because the underlying layer is almost black too making it difficult to differ the layers. Either set a property for the percentage of black in the "see trough" layer in preferences or make it more grey by default. This was ok in earlier versions of Pencil2D.

Jose-Moreno commented 6 years ago

@chchwy @CandyFace @scribblemaniac @J5lx To kind of solve this issue, I'm thinking could we have a global setting to change how much opacity each layer has when we tick the grey button on the timeline? Right now it's possible there could be a magic number for that transparency, and it could be better to map it to a slider in the preferences or on the timeline.

Bear in mind this would not be the "transparency-per-layer" setting we've hinted about before, but rather a global transparency setting which would mimic how "heavy" the paper is. Normally paper weight tells you how transparent a piece of paper really is, and traditionally animators use really light paper to animate in order to avoid overusing the light table (and damaging their eyes)

So a heavier paper would make it almost opaque, while a lighter paper would make the layer almost transparent. It never would be 100% transparent or opaque though. I think this system is interesting by itself. and perhaps we could have this as the relative transparency system, and later while using the other "absolute" opacity mode (the dot turns black and layer content is fully opaque) we could have the individual layer opacity sliders that have been spoken of so fine tune layer transparency.

Now it's also worth mentioning that the paper wight should affect frames, but we already have onion skin as a separate function to take care of that, so I'd say this layer-based opacity would mainly be used for animating with multiple layers, referencing layouts or field charts in other layers in such a way that it wouldn't interrupt the drawing layer visibility, and would work in junction with the multi-layer onion-skin feature (which has not been implemented yet)

scribblemaniac commented 6 years ago

For this particular case, it should suffice to simply use a lighter color or a grey for the sketch layer. That should give you a higher contrast for tracing over.

Having said that, we should still think about a preference for global transparency. I'm sure layer properties for individual control of layer opacity will come eventually.

chchwy commented 6 years ago

For this issue specifically, the opacity of underlying layers is hard-coded to 0.8. Can't remember what the value is in the previous version. Probably we can put a smaller value like 0.7 or 0.6 to get a better difference.

chchwy commented 6 years ago

@scribblemaniac what do you mean global transparency?

Jose-Moreno commented 6 years ago

@chchwy @scribblemaniac It's how I refered earlier to what you mentioned. So the idea I had was to allow the user to be able to change the "inactive" / underlying layer(s) transparency from something like 0.1 to 0.9 as a global setting in the preferences instead of being hardcoded (for now) That way it could work as what I describe.

However I also mentioned that this would not be a replacement for individual layer transparency, but it's more related to how animation paper behaves and to allow people more freedom on choosing how transparent other layers are relative to the active layer :smile:

Jose-Moreno commented 3 years ago

@ManuAros I'm closing this issue with the following reasoning:

  1. Relative Transparency has been re-implemented in 0.6.5 and using the transparency mode will fade out any layer other than the active layer which would help fulfil the original requirements. Additionally there's a global transparency slider in the preferences that controls the overall opacity of the passive layers.
  2. In version 0.6.6 a new feature will ship where the user can manipulate each layer and each frame opacity individually at rendering time. This goes beyond the previous point and actually let's you control the transparency of the layers individually to create simple special effects for animation such as fading.

Both features are available with the recent development builds. Please test them at your leisure and let us know if you have any feedback or issue.