Page MenuHome

Line Art feature update: Noise tolerant chaining.
ClosedPublic

Authored by YimingWu (NicksBest) on Jan 17 2022, 4:32 AM.

Details

Summary

This feature takes advantage of original line art chain which is a continuous long chain, instead of splitting it at each occlusion change, this function tolerates short segments of "zig-zag" occlusion incoherence and don't split the chain at these points, thus creates a much smoother result.

No additional sliders for this threshold, the value follows chaining threshold and it seems to do a pretty well job (because they basically determines the same near-field search radius). This way we won't have more confusing values to adjust.

This function only has a checkbox for preserving details, when it's on then the "zig-zag" will be preserved as-is, only the occlusion level will be tuned to the same as on the rest of the chain, when off then those incoherent vertices are removed and creates a zig-zag-free stroke, depends on how the user would like to express those twisted regions, both ways can find their use in certain scenarios.

Diff Detail

Repository
rB Blender

Event Timeline

YimingWu (NicksBest) requested review of this revision.Jan 17 2022, 4:32 AM
YimingWu (NicksBest) created this revision.
This revision is now accepted and ready to land.Jan 17 2022, 10:30 AM

I don't think "Preserve Detail" is a good name for this.

If I understand this correctly, this is here so that zig-zag patterns in the mesh are not broken up and because of this we can then make smoothing of the strokes a bit better.

Perhaps we could come up with a name that reflects that this is for allowing ambiguous segments/edges in chains?

I think the lineart_chain_try_skip_noise should be renamed as well. You are not actually "skipping noise", you are allowing noise to be kept in for a potential better smoothing solution.
IE the zig-zag is noise, as you stated in property description.

Basically, if I understand correctly, the function is going along chains and marking ambiguous segments of the chains as visible is they pass a few checks.
Just as a suggestion perhaps a verbose function name like chain_mark_ambiguous_segments_visible ?

@Sebastian Parborg (zeddb) Good point. I think maybe try_tolerate_noise or try_connect_noise might be better in this sense? like it's trying to "letting short segments of noise in".

It doesn't only do visible/invisible ones, it also e.g. letting segments which has a occlusion level of 3 be included into a chain which has a overall level of 2. (So if that feature is behind a glass, the structure will connect the same way as if it's visible).

However I do need to think if there could be occasions where a sudden level 3 noise could exist in a level 0 chain, can't think of this from the top of my head right now but if this is what happens, there might be some chances that this kind of "inclusion" could lead to unwanted result. However, the threshold is small enough, so maybe not much of a big problem... I'll think a bit and decide later.

Yuro (Yuro) added a subscriber: Yuro (Yuro).

We finally decided to use chain_fix_ambiguous_segments() as the name which is more aligned with what the function does.

This revision was automatically updated to reflect the committed changes.