-
-
Notifications
You must be signed in to change notification settings - Fork 2.4k
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
Add the Fade-In effect to DrawableSwell
#31722
base: master
Are you sure you want to change the base?
Conversation
I'm just gonna bring this up: Previously. Not willing to get involved in discussing this further until someone else is. Applying the fade to swells only is an option, but on stable all taiko objects fade in. |
@t0nik can you make the same comparison video for hitobjects as a starting point? then we can figure whether this needs to be applied to more than just spinners/swells. |
Lazer: lazer-stable-hitcircle-comp.mp4Low SV Fade-In isn't an issue, since HitObjects in stable have enough time to Fade-In when rendered offscreen. When increasing the SV to extremely high values, the Fade-In effect starts to appear in the playfield. In lazer, HitObjects are visible at all times. Extreme high SV Fade-In effect is used in gimmick maps mostly, here's an example: lazer-stable-gimmick-comp.mp4In osu!lazer, the circles show up on the playfield for a brief moment, which may be distracting to the player. Referring to this discussion, I stand with the 16:9 aspect ratio lock (It eliminates the widescreen aspect ratio abuse, where a player can see more objects at once) and the full HitObject opacity on high SV, unless it's extremely high for gimmick mechanic use cases. |
I don't understand what you're trying to say here and I'd rather keep out of the aspect ratio discussions because this aspect ratio stuff has been prosecuted several times over the years and I'm still none the wiser as to how people want aspect ratio to behave on lazer, maybe other than "make like stable" which is (a) stupid (read: stupidly convoluted), (b) halfway where we are already, and (c) in full literally impossible because lazer allows configurations that stable literally cannot / does not support (see having an actual windowed mode where you can resize the window to freakishly thin / tall sizes). I'd ask to stick with the fade-in portion of this because otherwise we're going to get even more stuck in the details than we already probably will.
|
My thought here was also to keep all aspect ratio discussion out of this thread. If that starts to go in the same direction as that other PR it's not going to be easy to merge.
This would be fixed by applying the fade to them as well, rather than just swells, correct? |
I'd say this PR should be applying fade in to the normal objects too and not only the swells, to get this issue out of the way for good. |
Added DrawableHit fade-in. How it looks compared with stable: lazer-stable-fadein-hit.mp4The effect doesn't match stable that well and the last sequence of circles is invisible in lazer. That is caused by the With the current PR, there are some visual bugs in the editor related to the object opacity on any extremely high scroll speed parts:
Other beatmaps in which DrawableHit fade-in was tested:
|
Feel free to take over the DrawableHit fade-in feature as I'm not competent enough to develop this. I would still like DrawableSwell fade-in feature to be checked and merged, it will improve the gameplay on maps with ultra low SV spinners drastically. |
So... a few things... Even if I focus on the "swell fade-in" part of this PR, it immediately fails cross-check with stable. I made a beatmap to test this on: swell fadein test - swell fadein test.osz.zip and this happens on it: Untitled10.mp4Hopefully it's self-evident what the problem is. On the flipside, stable logic for swell fade-in is completely terrible. The relevant transform here is WarningIcon.Transformations.Add(
new Transformation(TransformationType.Fade, 0, 1, startTime - hitObjectManager.PreEmpt,
startTime - (int)(hitObjectManager.PreEmpt * 0.6))); (ref) where PreEmpt = (int)Math.Min(5000, (600 / SliderVelocityAt((int)(Beatmap.ControlPoints.FirstOrDefault()?.Offset ?? 0)) / 0.6f * 1000)); // bug bug bug bug (ref) (also enjoy the where public override double SliderVelocityAt(int time)
{
double beatLength = Beatmap.BeatLengthAt(time);
if (beatLength > 0)
return
(SliderScoringPointDistance * Beatmap.DifficultySliderTickRate *
(1000F / beatLength));
return SliderScoringPointDistance * Beatmap.DifficultySliderTickRate;
} (ref) where SliderScoringPointDistance =
((100 * Beatmap.DifficultySliderMultiplier) /
Beatmap.DifficultySliderTickRate); (ref) As far as I can tell the hit fade-in logic is extremely similar to this. Do we wanna be porting any of this? Dunno. I'd say it's a @ppy/team-client sort of question, but nobody has given me as much as an attempt of an answer in many tries across many years now. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
as above
Further tests were performed on swell fadein test - swell fadein test.osz.zip: swell-fade-in-further-tests.mp4The video is divided into 3 parts:
Thanks to the aforementioned code fragments and tests I've concluded that, on stable:
While this behavior is rather chaotic due to the First Control Point SV dependence, I would propose sticking to a constant value for both visible time and fade-in duration in lazer e.g. taking the mean of the limits: Another proposition would be to modify the swell fade-in times depending on the SV which is currently affecting the object, instead of the First Control Point's SV. Apart from improving the gameplay quality, it will enable mappers to create 'surprise' swells that show up not until they cross the starting point. Not making any changes until it's clear what should be implemented here. |
partially fixes #21769
Theory: Fade-in effect in stable
The fade-in effect affects both swells and drumroll tails. Fade-in effect happens a set amount of ms before the object collides with the judgement cirlce. It will be called visible time in this PR.
Time analysis: Swell and drumroll tail fade-in effect
Footage
Footage analysis notes
Visible time was roughly estimated to be 1800ms for swells and 1700ms for drumroll tails.
The time between 0% and 100% opacity of an affected object was estimated to be 666ms for swells and 1700ms for drumroll tails.
Footage analysis also confirmed that DT decreases the fade-in effect time by 33%, and that the time is independent of the control points BPM.
Lazer: Implementation
Swells: Start increasing the opacity for the duration of 666ms, when the object is 1833ms (+33ms after comparison review) away from it's starting point.
Drumroll tails: Not implemented. Not sure how to separate the drumroll head from the tail in the
DrawableDrumRoll
. Also, it would likely break the argon and triangles drumroll object, since both skins don't contain a drumroll head.Lazer: Comparison to stable
This is how lazer compares to stable in the current PR.
lazer-stable-comp.mp4