文/绯夜氏
一刀9999裡的“非線性疊加”是啥玩意?線性又是哪條線?
都說遊戲玩的開心最重要。有些玩家,玩遊戲的目的是為了滿足社交需求,大家玩、他也跟着一起玩,最後搞得大家都很快樂;而有些玩家則不同,他們是為了滿足自己、在遊戲中有更高的追求。這些玩家追求更加合理的過關方式,更加正确的操作方法,更加準确的成功幾率,以及更加精準的數據分析。
在日益複雜的遊戲系統當中,開發商已經不滿足于簡單的加減法公式,用攻擊力減去防禦力的方法已經過時,愈來愈多的增益效果(BUFF)和減益效果(DEBUFF)被添加到遊戲當中,越來越多的數字參與到傷害計算過程裡,遊戲的機制也變得越來越複雜……
當一個個增益效果在頭上亮起的時候,你使出渾身解數,一刀劈在怪物頭上,打出了99999點傷害!可你知道,這些增益效果到底為你增加了多少傷害,而哪些增益效果比較厲害,哪些增益效果其實隻占據了很小一部分?
雲玩家Hotspot的上一篇科普文章《玄不救非,氪不改命 如何分清遊戲中的“真随機”和“僞随機”?》為大家科普了僞随機和真随機的區别,今天就來科普一下什麼是“線性疊加”和“非線性疊加”。
簡單易懂的“線性疊加”
當多個增益效果疊加在一起時,我們通常會使用“線性疊加”、“非線性疊加”來描述這些增益效果的疊加方式。在談及“非線性疊加”之前,讓我們好好了解一下相對更簡單、更容易理解的“線性疊加”。
所謂“線性疊加”(Linear Superposition),即是指兩個變量之間的關系遵從一次函數關系——而一次函數,也就是直線,在數學上可以理解為“一階導數為常數的函數”。“線性疊加”,也就是指“遵從直線的疊加方式”。在計算過程中,每次數值的疊加都會增加相同比例的量,譬如買一個橘子用三塊錢,買十個橘子就要用三十塊錢。
一般來講,遊戲中的“線性疊加”,指的就是“加法疊算”。比如一個角色的攻擊力為100點,路過的聖騎士為他施加了一個王者祝福,假設這個王者祝福的增益是線性疊加,令他獲得了20%的攻擊力提升,那麼這個角色的攻擊力就變為100 (100*0.2)=120點攻擊力。
此時又路過了一個假面騎士,為他施加了一個王者祝福2,令他獲得了30%的攻擊力提升,那麼這個角色的攻擊力就變為100 (100*0.2) (100*0.3)=150點攻擊力。
舉個例子來說,《Fate/Grand Order》(《命運-冠位指定》)的同種增益效果和減益效果都是“線性疊加”的(同種增益加法疊算,不同種增益乘法疊算,比如[攻擊力BUFF 攻擊力BUFF]*紅魔放BUFF)。如果你為一名英靈疊加了兩層50%的攻擊力加成,那麼這名英靈造成的傷害就翻倍;而如果一名英靈獲得了兩層50%的受傷減免,那麼這名英靈的受傷減免将疊加至驚人的100%,也就是我們常說的:無敵!(這個無敵甚至不能被無敵貫通,真是太無敵了)。
而《Fate/Grand Order》中常見的低星英靈過高難本也正是依賴于“線性疊加”的機制,使用阿斯忒裡俄斯(小牛)的寶具降低BOSS的攻擊力、使用布狄卡的寶具提升防禦力等等操作,盡可能地使己方英靈達成“僞無敵”(減傷疊加至100%)的效果,免除BOSS對其造成的傷害。
“非線性疊加”是怎麼疊加的?
在理解了“線性疊加”以後,“非線性疊加”的意義就躍然紙上了。
從概念上來說,“非線性疊加”(Non-Linear Superposition)當然是指并非一次的函數關系——圖像不是直線,變量不成正比。譬如,買一個橘子用三塊錢,買十個橘子時,老闆說:算你批發價,十個橘子隻用二十五塊。那麼平均下來,你買一個橘子隻用了兩塊五,低于一個橘子的單價三塊錢。對“十個橘子”的疊加态而言,每個橘子的疊加價格變少了,這就是一種“非線性”。
大部分遊戲中的“非線性疊加”相對來說更加容易理解一些。如果有部分數值聲明是“非線性疊加”的,那麼通常來說,這些數值是相互獨立的。與“線性疊加”相對的,“非限定疊加”的部分通常是“乘法疊算”。
還是拿數值最好理解、最好研究的兩款相似的遊戲《Dota2》和《英雄聯盟》來說。在《英雄聯盟》中,所有英雄都有“暴擊幾率”這個屬性,而購買“綠叉”、“電刀”、“無盡”等裝備将會為英雄疊加暴擊幾率。
在《英雄聯盟》中,“暴擊幾率”是“線性疊加”的。綠叉提供30%暴擊,無盡提供25%暴擊。很容易理解,如果一個英雄同時裝備綠叉和無盡,那麼他的暴擊幾率将會疊加至30% 25%=55%。
而在《Dota2》中,“暴擊率”是“非線性疊加”的。譬如幻影刺客的大招“恩賜解脫”擁有15%幾率造成200%/325%/450%傷害,而道具“代達羅斯之殇”提供30%幾率造成235%傷害。在“非線性疊加”的情況下,幻影刺客裝備代達羅斯之殇進行一次普通攻擊時,将會分别對“恩賜解脫”和“代達羅斯之殇”的暴擊幾率進行一次獨立計算。
也就是說,幻影刺客的一次普通攻擊将會發生四種情況:
1.觸發“恩賜解脫”的暴擊、沒有觸發“代達羅斯之殇”;
2.觸發“代達羅斯之殇”的暴擊、沒有觸發“恩賜解脫”;
3.同時觸發“恩賜解脫”和“代達羅斯之殇”的暴擊;
4.沒有觸發“恩賜解脫”和“代達羅斯之殇”任何一方的暴擊。
顯而易見,前3種情況都能算作觸發暴擊,而沒有觸發暴擊的隻有第4種。也就是說,幻影刺客的暴擊率被提升至了P(A)=1-(1-0.15)*(1-0.3)=40.5%。
(題外話,4種情況中,其中1和2的情況比較好理解,各自發生了一次200%/325%/450%倍率和235%倍率的暴擊。而3的情況,同時觸發兩種暴擊時,會采用倍率較高的那一方來計算這次暴擊。也就是說,PA出大炮的收益并非簡單使用暴擊概率模型就能推算得出。具體的收益算法我們今後有空再來分析。)
到了這一步,就能很清楚地看出,幻影刺客的暴擊率并非簡單的15% 30%=45%,而是更低的40.5%。代達羅斯之殇所提供的暴擊率實際上被“稀釋”了,并沒有發揮出它應有的30%效果。
在船長“昆卡”的水刀還沒被削弱之前,中單船長通常堆疊2~3件代達羅斯之殇作為暴擊輸出裝備。2件代達羅斯之殇“非線性疊加”的暴擊率為51%(虧損9%),3件代達羅斯之殇“非線性疊加”的暴擊率為65.7%(虧損24.3%)。所以到了版本末期,船長很少補出第三把大炮,而是轉出狂戰斧、輝耀、聖劍等其他屬性的裝備作為傷害補償。
順帶一提,類似船長的水刀、狂戰斧的濺射、猛犸的授予力量等一系列“分裂”效果,是線性疊加的,也就是可以簡單地做加法計算。
不僅暴擊率如此,閃避率也是如此。
幻影刺客(為什麼每次談及數值的話題總能用上這個神奇的女人?)的被動“魅影無形”滿級時能夠提供50%閃避幾率,道具“蝴蝶”提供35%閃避幾率,在被普通攻擊命中時,需要獨立計算雙方各自的閃避——同樣的,幻影刺客的閃避幾率被提升至P(B)=1-(1-0.5)*(1-0.35)=67.5%,蝴蝶提供的35%閃避被“稀釋”到了17.5%,幾乎虧損了一半的收益。這也是為什麼幻影刺客通常不出大炮和蝴蝶的原因。
提到“閃避”,就不得不提“閃避”的宿敵“金箍棒”。在某次版本更新時,金箍棒的效果從100%必中削弱至75%,使得金箍棒與閃避的克制公式更加撲朔迷離。
在裝備金箍棒的英雄分别攻擊裝備蝴蝶的普通英雄、沒有裝備蝴蝶的幻影刺客和裝備蝴蝶的幻影刺客時,各自的閃避幾率分别為8.75%、12.5%和16.875%。蝴蝶在面對金箍棒時效果從35%降低至8.75%和4.375%,甚至還不如輝耀附加的閃避效果,可以說是性價比極低了。
除了《Dota2》之外,像《最終幻想14》中易傷減益與其他增益之間的效果提升也是非線性疊加的。譬如忍者的背刺提供10%易傷效果,換算得10%傷害增加;龍騎士的龍眼效果會使目标獲得5%傷害增加,那麼同時獲得龍眼增益、背刺增益的角色将會獲得1.05*1.10=1.155倍傷害增加,比1 0.1 0.05=1.15還高了0.05倍率。
非常好懂的一點在于,由于是乘法疊算,因此在倍率低于100%時(常見于命中率、閃避率、暴擊率等上限100%的數值),“非線性疊加”的效果是越疊越差的,也就是常說的“邊際效益遞減”;反之在倍率高于100%時(常見于傷害增加等),“非線性疊加”的效果是越疊越好的,即“邊際效益遞增”。
“邊際效益”與“等比血量”的換算
有一點要提及的是,“邊際效益遞減”也并不是總是等同于“效益遞減”。
還是拿《Dota2》和《英雄聯盟》來舉例。早先,在《Dota2》的護甲減傷公式還沒有徹底脫離war3公式之前,《Dota2》和《英雄聯盟》的護甲減傷公式分别是:0.05*護甲/(1 0.05*護甲),以及護甲/(100 護甲)。
換算可得,當護甲分别為20和100時,護甲所提供的物理減傷達到50%。可以推算得《英雄聯盟》的護甲的效果和5倍《Dota2》護甲是等值的,從《Dota2》公式中得出的結論與《英雄聯盟》相同,因此之後将省略《英雄聯盟》部分的推算。
從公式上就可以看出護甲減傷是服從“非線性疊加”,而減傷百分比的倍率低于100%,很明顯護甲收益是“邊際效益遞減”的。當護甲為0時提供0%減傷,當護甲為3時提供13%減傷,約等于每點護甲提供4%減傷;當護甲為87時提供81.31%減傷,當護甲為90時提供81.82%減傷,約等于每點護甲提供了0.16%減傷。
随着護甲不斷提升,每點護甲提供減傷百分比的提升越來越少,疊護甲似乎效果越來越小……但是!雖然護甲減傷的收益在遞減,但是換算成等比血量的提升卻是相同的。根據護甲減傷公式可得每1點HP變為1/(1-0.05*護甲/(1 0.05*護甲)),等價于1*(1 0.05*護甲),即無論當前護甲有多少,每1點護甲都能提供5%的等比血量提升(《英雄聯盟》中看做1點護甲提供1%等比血量提升)。
舉個例子,想要達到98%減傷,需要980護甲;而想要達到99%減傷,則需要驚人的1980護甲。盡管看似這多出來的1000護甲隻提供了1%的減傷,但仔細計算一下就能發現,這1000護甲能讓英雄的“血量”翻一倍。假設一個單位有2點血,原本需要100傷害(經過98%減免後為2點)才能殺死他,現在卻需要200傷害(經過99%減免後為2點)。
也就是說,盡管護甲減傷是非線性疊加,但是護甲所提供的等比血量卻是服從線性疊加的。除非對方使用魔法傷害攻擊(或者真實傷害),否則在面對相同的物理傷害時,無腦堆疊護甲幾乎不會是一個錯誤的選擇。
以上結論,目前對《英雄聯盟》、以及其他使用相似公式的遊戲(比如《魔獸争霸》)仍舊适用。而對新版本的《Dota2》已不再适用,因為《Dota2》在去年曾經修改過一次護甲公式,目前的護甲減傷公式為:0.052*護甲/(0.9 0.048*護甲)。
每1點HP則根據公式修改而變為1/(1-0.052*護甲/(0.9 0.048*護甲)),等價于(0.9 0.048*護甲)/(0.9-0.004*護甲),不再服從于線性疊加,想要計算也變得相對困難起來。下圖以及等比血量公式均來自于貼吧。
不難看出,新版的護甲減傷公式更加“奔放”,在護甲達到30時、再向上堆疊護甲将會獲得巨大的減傷和等比血量提升。當護甲達到210時,等比血量提升甚至達到了驚人的18200%;當護甲達到225時,函數計算結果趨向正無窮,也就是物理免疫——這是舊版本公式達不到的一個巅峰(盡管這個巅峰幾乎沒有英雄能夠達到)。
護甲公式的更改使得高護甲單位和高護甲裝備收益頗大,也促使了炎陽紋章這類裝備的崛起。在TI9的比賽上,OG體系使這件默默無聞的裝備聲名鵲起,通過堆疊護甲促成“超級核心”的打法也成為TI賽場上的主流;而“身懷六甲”的選手則早早淘汰出局。
相信在TI比賽結束後的第一個Major中,更多有關護甲的研究會引領比賽的節奏吧。
(圖片來源于網絡)
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!