forum

利用offset與star rating的關係,實現star rating的最大化/最小化

posted
Total Posts
29
Topic Starter
Kencho
特別感謝Ryuusei Aika的英文翻譯 :)

英文版


利用offset與star rating的關係,實現star rating的最大化/最小化

前提:下文所說的"difficulty"是指圖本身由物件所組成的難度,而"star rating"是指圖所顯示的難度。本文正要說的便是在相同的difficulty下會出現不同的star rating(本文特意沒用中文來說明這兩個名詞是為了避免混淆的情況)。
文比較長,懶看的人集中看粗體應該也能懂(誤)

首先,我並不知道Tom94是如何建立這個difficulty系統,也不清楚詳細的算法。但這幾年來一直有人研究pp算法,而pp的多少當然離不開圖本身的difficulty,所以現在得知它基本上由Aim權重(指物件之間的間距大小)和Speed權重(指物件密度,bpm也影響在內)來決定一張圖的difficulty。當然難度和pp也不是完全相對的,影響一張圖pp的多少的因素還有物件數量(以目前的ScoreV1系統來說特指圓圈,因為圓圈才會因按快按慢而出50和100,但普遍的1/1和1/2滑條即使按快按慢也並不會出50和100)、圖的長度(未知是否確實影響pp,因為理論上一張圖越長,物件數便越多,所以長度可能不影響)、附加mod(HD/FL/NF/SO有特定的算法加成,而HR/EZ/dt mod/HT則是把圖的difficulty整個重新計算)等等。比如說在acc 100%和圖difficulty接近的情況下,一張full size的5星圖所給的pp通常都會比一張tv size的5星圖多,這是物件數量不同而導致的。

說到這裡,上面的"difficulty"其實不是重點,重點是我們發現用不同的offset會導致圖的star rating不同,但圖的difficulty卻是一樣的,為什麼會這樣呢?
相信不少mapper也會遇到相同的疑問:"我只是換了個mp3,改了下offset,但圖的star rating卻變高/低了???明明是一模一樣的物件???"

詳細的原因我也不是很清楚,只能說是difficulty算法裡面的小bug,但我不知道詳細算法,所以也不能下定論,而我個人猜測是因為物件之間造成的毫秒級誤差而導致的。同樣地,既然offset的改變可以影響star rating,那麼利用這個bug,便可以得出不同offset的star rating,從而實現star rating最大化/最小化,而star rating會影響pp的多少,所以也就等同於實現pp最大化/最小化

經過本人數星期的研究得出結論:
  1. 對於一張圖no mod的情況下來說,其offset每400ms為一個循環(舉個例子,某張圖的offset是12ms,而它在412ms的時候其star rating和12ms時是完全一樣的,當然,812ms/1212ms/1612ms等等都會是一樣的)。

  2. 對於一張圖dt mod的情況下來說,其offset每600ms為一個循環(dt mod將歌曲時間x1.5倍,所以offset同樣x1.5倍,400x1.5=600ms。 同樣地,和no mod一樣,假如某張圖的offset是12ms,那麼它在612ms的時候其star rating會和12ms時相同,1212ms/1812ms/2412ms時都會是相同的star rating)。

  3. 這裡有可能會出現一個特別情況(個人叫它為"單一重心點"),指no mod和dt mod時其star rating最大/最小的offset的最後兩位數相同時,而百分位為0ms或200ms,那麼便代表no mod和dt mod的star rating最大/最小的offset不互相衝突,能夠同時滿足no mod和dt mod的情況。若百分位差為0ms,那麼其offset本身則是star rating最大/最小的offset;若百分位差為200ms,那麼只要用no mod和dt mod循環的公倍數再除以2(400ms和600ms的公倍數是1200ms,除以2則等於600ms),然後加上dt mod的offset,便是star rating最大/最小的offset。
然後,很感謝yf_bmp特意幫我弄了個可以批量修改offset的軟件,軟件目前還在debug中尚未正式公開發佈,詳情會由他進行說明。然後利用這種做法,很輕易就能找出圖的star rating最大/最小的offset,從而實現一張圖difficulty不變的情況下,將其star rating最大化/最小 化,等同於將其pp最大化/最小化。

這裡我舉一個實現star rating最大化的例子:SawanoHiroyuki[nZk]Tielle - Into the Sky (不要更新圖譜,最新版已經改了offset)

例子1
這個mapset原本的offset為412ms,然後利用軟件批量修改offset並以Kencho's Mobile Suit難度為準,導出0-600ms的版本。
之後,靠遊戲自帶的難度排列來找其star rating最大/最小的offset版本,然後得到分別是261ms64ms
此難度原本412ms時為5星,而261ms時為5.05星,64ms則是4.97,差別還算挺大的。
然後,再以dt mod來將難度排列,發現star rating最大/最小的offset版本變成了461ms246ms,前者6.99星,後者6.87星。
這時比較巧合的便是no mod和dt mod的offset最大值的最後兩位數同樣是61ms,而百分位則差200ms,也就是滿足了單一重心點的條件,代表no mod和dt mod的star rating最大值的offset不互相衝突。而想找到這個offset很簡單,首先利用no mod和dt mod循環的公倍數除2(上面已經說明過了,數值為600ms),再加上dt mod的offset,也就是是461ms,所以600+461ms=1061ms,這個1061ms便是star rating最大值的offset了,你會見到它no mod時是5.05星[圖1],而dt時是6.99星[圖2][/b],同時滿足了no mod和dt mod的star rating最大值。
因此,此圖譜可以用1061ms作為star rating最大值的offset。

這個例子充分說明了滿足單一重心點的條件時如何找到star rating最大值的offset,但多數圖譜不一定能滿足這情況。
因此我再舉一個常規例子來實現star rating最大化:Duca - Clover (不要更新圖譜,最新版已經改了offset)

例子2
這個mapset原本的offset為1230ms,然後利用軟件批量修改offset並以Clover難度為準,導出0-600ms的版本。
然後在no mod情況下,其star rating最大/最小的offset版本分別為381ms63ms;在dt mod情況下,其star rating最大/最小的offset版本則分別為372ms1ms。這時你會看到no mod和dt mod它們的offset最後兩位數不相同,已經沒法滿足單一重心點的條件,那麼如何去尋找最大化的星數呢?其實也不是沒有辦法,但這需要取捨,也有點要靠運氣。
381ms版本,其no mod star rating是4.01星,dt mod是5.57星;在372ms版本,其no mod star rating是4星,dt mod是5.58星。這樣看上去,它們各自都只是差了0.01星,有點微不足道,不過作為一個強迫症mapper還是會去盡能力去找最大值。而我個人的做法是會把no mod star rating最大值的offset加上800ms400ms(此舉是因為no mod循環為400ms,而1200ms不需要是因為這是no mod dt mod的公倍數),去看這兩個offset的版本在dt mod中是否有更高star rating。
不過根據結果可見,781ms1181ms在dt mod時的star rating比起381ms時還要低,因此不能取用。
不過還有一個可能性,便是將dt mod star rating最大值的offset加上600ms(原因和no mod相同),去看這個版本在no mod的情況是否有更高的star rating。而972ms這個版本,可見其no mod star rating變成了4.01星[圖3][/b],雖然仍然不及381ms為高(star rating後面還有很多位小數點,但遊戲系統限制只能顯示兩位小數,但確實結果為381ms>972ms
若圖譜較多的玩家可以用不分類圖譜以難度排列得知),但比起372ms是更高的,而同時在dt mod中也能保持5.58星[圖4][/b]的最大值。
因此,此圖譜可以用972ms作為star rating最大值的offset。
順便一提,由於此歌曲前面的1230ms是有聲音的,所以不能直接刪減到972ms,此時便可另外加上循環公倍數來作為star rating最大值的offset,也就是加上1200ms,因此變成2172ms

此外,如果圖譜嘗試過以上做法卻得不到更高的star rating,那麼只能在原本所找的no mod最大值和dt mod最大值中二選其一,視乎你重視no mod還是dt mod,或者也可以用別的offset,取一個在no mod和dt mod中的star rating平均值也可。

因此,利用以上的方法便能實現star rating最大化/最小化,而最後需要做的只是edit mp3文件,可以用各種音頻編輯軟件(如Audition/GoldWave/Audacity等等),再根據新的offset和原本的offset來為mp3開頭位置加插或刪減空白部分,需要用到少量音頻編輯的技巧。然後要記住大多數音頻編輯軟件內置的mp3編碼器質量都不太好,edit過後保存會重新編碼mp3,可能會使音頻質量下降,所以最佳做法是找320kbps的源文件(無損文件也可,但其他音頻格式轉換成mp3時很多時都會在開頭產生不固定的空白段,範圍從10-100ms不等,會導致難以掌握正確offset,所以建議先轉換成320kbps再edit,反正遊戲最高只能使用到192kbps),edit完成後再用質量較好的編碼器(目前公認質量最好的編碼器是lamb),再導出192kbps的mp3。

最後,下面是一些注意事項和已知的問題:

  1. 同一個首歌中,如果其difficulty的重心在圖譜不同的地方(比如說,難度A最難的地方在圖譜前10秒,而難度B在圖譜最後10秒,這樣它們的重心已經不一樣),star rating最大/最小的offset也會不同,所以一定要等圖譜完成後再找star rating最大/最小的offset。理所當然地,一般的圖譜中都會有不止一個難度,特別指多個Insane+的難度,它們的重心很難會一模一樣(除非整個圖的物件分佈、間距比例什麼的統統都一樣,否則重心相同的幾率極小極小),那麼它們star rating最大/最小的offset也就不一樣,所以這時要取捨,但通常都以最高的難度為準。以上面的SawanoHiroyuki[nZk]Tielle - Into the Sky為例,其中Kencho's Mobile Suit和Insane難度便是個例子(詳情自己研究)。

  2. 若圖譜本身的difficulty重心集中於一處,那麼便較容易出現單一重心點;若difficulty分佈較平均(比如各種DS的Easy/Normal,或者difficulty很平均的Hard/Insane)那麼重心便容易分散,單一重心點也就不容易出現

  3. 理論上大跳比較多的圖(重視Aim的圖),其offset差別所影響的star rating取值範圍便越大,相反連打比較多的圖(重視Speed的圖),其offset差別所影響的star rating取值範圍則較少。當然star rating的範圍比例是由圖本身的star rating所定,但也許bpm的影響會更大

  4. 50/100/200bpm的圖的star rating最大值的offset固定為0/1200ms或其倍數,原因個人猜測是因為60000除以這類bpm剛好是整數,詳細原因不清楚(可嘗試將 https://osu.ppy.sh/s/295946 的主難度offset改為1200ms,star rating直接增加0.1星(圖已經ranked了,後悔當初沒研究這個啊TAT))。

  5. 可變bpm同樣有star rating最大/最小的offset,算法同樣是依照no mod和dt mod的循環和公倍數,也就是和一般的圖譜一樣,按照一般圖的做法即可。不過其內部算法會複雜很多,所以star rating的可變範圍會變得難以猜測,這裡有一個例子(詳情自己研究):Wan Ho-Kit, Lee Hon-Kam - Unknown Title
最後的最後,再次感謝yf的offset軟件,不然手動輸出600個版本會死人的,然後對於star rating最大化/最小化有興趣的人也可以找我問問題,各種疑問也可以在這裡問,補充說明也歡迎。

另外英文版在路上了(英語不太好,急需翻譯員),說不定到時候會改變整個difficulty算法 :roll:
KaedekaShizuru
锋哥抽烟.jpg
Pata-Mon
无敌疯鸽
Otosaka-Yu
牛逼鋒哥,什麼都會
-Eriri-
二楼二楼
[Mahua]
熟练控星的锋哥 无敌
Hicool
sb
Otosaka-Yu
sb
意思射爆
射爆
意思射爆鋒哥
ExNeko
鋒哥无敌
感觉有种黑科技的味道啊。。
Yugu
我先马一下
Shima Rin
那其他模式也有这种操作吗;w;

但是锋哥牛逼是真的!
spboxer3
現在osu的麻婆們都這麼會玩嗎(手動滑稽
Mafumafu
扑通!
Karen
并不能看懂 我只想知道如何获得sr最小值
Hollow Wings
你游数学家
Fia
抓个虫 那编码器叫lame 不是lamb
Topic Starter
Kencho

Karen wrote:

并不能看懂 我只想知道如何获得sr最小值
這個方法可以同樣可以獲得最小值啊

PinkHeart wrote:

抓个虫 那编码器叫lame 不是lamb
真沒發現,謝謝提醒
Narcissu
和排版有關的話多diff 不就可以洗洗睡了,對長圖app 和連打圖影響也不大
Murmur twins
-
Skylish
offset 本身是不能刻意更改,所以pp是大是小都是天生注定,只能靠後天發展囉。
Nakano Itsuki
無敵鋒哥
話時話不如yf debug完先translate? 然後可以post埋過去beatmap projects個d subforum多d人睇
IamKwaN
offset可以靠edit mp3更改吧,前面留白啥的
Topic Starter
Kencho

Skylish wrote:

offset 本身是不能刻意更改,所以pp是大是小都是天生注定,只能靠後天發展囉。

Kencho wrote:

因此,利用以上的方法便能實現star rating最大化/最小化,而最後需要做的只是edit mp3文件,可以用各種音頻編輯軟件(如Audition/GoldWave/Audacity等等),再根據新的offset和原本的offset來為mp3開頭位置加插或刪減空白部分,需要用到少量音頻編輯的技巧。然後要記住大多數音頻編輯軟件內置的mp3編碼器質量都不太好,edit過後保存會重新編碼mp3,可能會使音頻質量下降,所以最佳做法是找320kbps的源文件(無損文件也可,但其他音頻格式轉換成mp3時很多時都會在開頭產生不固定的空白段,範圍從10-100ms不等,會導致難以掌握正確offset,所以建議先轉換成320kbps再edit,反正遊戲最高只能使用到192kbps),edit完成後再用質量較好的編碼器(目前公認質量最好的編碼器是lamb),再導出192kbps的mp3。

IamKwaN wrote:

offset可以靠edit mp3更改吧,前面留白啥的
KwaN說得對,而且我本來已經說了要在mp3開頭位置加插或刪減空白部分來修改mp3的offset


StarrStyx wrote:

無敵鋒哥
話時話不如yf debug完先translate? 然後可以post埋過去beatmap projects個d subforum多d人睇
好吧,等我問一下他
[Crz]Makii
好的 下次把星数弄到最低
-Atri-

[Crz]Sword wrote:

好的 下次把星数弄到最低
Otosaka-Yu
@Kencho
Shiratori
学习
SparkNights
其实,有一个方法,可以不用Edit MP3(对于单BPM的歌曲来说)
那就是,把第一个红线放到offset负几千几万那里去,直到对齐重心
Shiratori

Mcen314 wrote:

其实,有一个方法,可以不用Edit MP3(对于单BPM的歌曲来说)
那就是,把第一个红线放到offset负几千几万那里去,直到对齐重心
然而会被搞事吧
Please sign in to reply.

New reply