騎砍mod程序理論獨家-骨骼拼接原理對多人復合運動關系的處理應用

首先看下我這個貼里面的涉及骨骼拼接運動原理基礎知識的介紹https://bbs.mountblade.com.cn/thread-2096142-1-1.html(骨骼拼接理論及應用---火影須佐能乎(代碼))在這個帖子里我簡單講了下如果將多個agent人利用 骨骼坐標獲取操作(agent_get_bone_position, <position_no>, <agent_no>, <bone_no>, [<local_or_global>]),和開啟關閉重力慣性能力可制造人體懸空? ?(agent_set_no_dynamics, <agent_id>, <value>),??的操作來制作不同agent從動于另一個agent的特定位置的行為。你們應該這種組合應用用的比較少,因為dynamics飛行應用是我很多年前第一個提出作用但沒有多少人重視的,加上大家一時間對新事物新方法的想象力問題。所以我把我對這個操作控制組合依照我想象力下做出或能做的東西,舉一些用例和擴展的基本原理解釋給大家。
像火影須佐能乎只能魔幻或特定題材用,所以實際上還可以舉出一些寫實、魔幻不同題材的例子,讓不同題材的作者都能得到一些啟發(fā),做一些神奇的帶有多agent配合的運動行為類操作。
大家先把我上面的帖子里面的op和相關原理基本解釋和代碼實例用法看下。
然后我的一些用例舉例,由于時間的關系,下面的用例只簡單說下基本處理方法和原理,有空再補充實際的整段代碼參考:
按照拼接對象分類:
(1)多個完整人位置或骨骼位置之間的拼接從動運動(其中,人是否當人的定義來用也是進一步的一種劃分,比如人模擬其他生物或機械)
(2)完整人骨骼位置與非完整人(比如只用一只手或綁定非人類的工具)骨骼位置的拼接從動運動
(3)引申:人骨骼位置與場景物/粒子等系統(tǒng)的拼接從動運動 --這個不在本貼的介紹范圍,但是可以看看我這個帖子關于刺客伍六七魔刀千刃效果做法的代碼理論貼https://bbs.mountblade.com.cn/thread-2096147-1-1.html
按照題材分類:
用例類型一、非主流惡搞系列應用,一般不適合正常mod
1.男上加男及其多種變形視頻https://www.bilibili.com/video/BV1WG4y1g7EQ
(1)下圖是經(jīng)典的是“騎馬打仗”這種小孩子玩的我們生活中的游戲(其實設定合理,也能作為正常mod的寫實娛樂活動,所以東西合不合適,主要看整體設定的新游戲環(huán)境,而不是以當前環(huán)境批判),也就是一個人騎著動作始終在另一個人的腦袋上。
原理上就是將agentA以襠部骨骼為自身的相對位置基準始終設置在agentB的頭部骨骼坐標位置上使得agentA通過no_dynamics設定可浮空的使其襠部伴隨agentB頭部運動

(2)下圖這個是“騎馬打仗”的變式,也就是下面被騎的人使用特制的爬行動作,其實呢,要讓正常mod使用合理,也有辦法處理,就說這個是親子活動,你們就沒有人或沒看過電視中家長爬著孩子騎著或者甚至一些昏庸的帝王把大臣當馬騎,所以聯(lián)系生活發(fā)揮想象力,不是動不動就評價一句“這不合理”“這有些違和”“這種功能有什么用”。然后引申一下,如果你把其中一個人綁定做出特殊生物或坦克摩托車的骨骼動畫呢,要知道馬并不像人一樣方面應用很多的新骨骼,所以男上加男,其中一個男如果變成載具,你能想象可以解決多少功能嗎。

(3)下圖這個是我視頻里命名為“左右為男”這個比較“哲學”的詞語的行為,其實就是一個人手拎著另外兩個人的腰部。原理上就是將agentA和agentB的腰部骨骼為自身的相對位置基準分別始終設置在agentC的左右手武器點部骨骼坐標位置上,使得agentA和B通過no_dynamics設定可浮空的使其腰部伴隨agentB兩個手的骨骼動畫運動軌跡運動。至于怎么用在一些正常的場合,你想想你小時候有沒有家長或比你壯的大孩子把你單手拎起來,有時候可以拎你的腰,甚至拎你一只手,所以這不就是生活場景的應用。然后對于一些有英雄豪杰的,李元霸把你拎起來舉上半空一丟或往墻上砸或撕成兩半,這種是不是就是戰(zhàn)斗場景可以考慮應用的場合,所以還是那句話,講“這不合理”“這有些違和”“這種功能有什么用”先看看自己想象力和實際能力有沒有構(gòu)造一個整體的游戲環(huán)境。

(4)下圖可以叫男上加男plus或者人塔,比較印度式的感覺,就是多個人互相騎頭上然后堆的高高的。是(1)男上加男做法原理擴展。這個可能正常適用的mod場合就比較少了,當個野怪或者攻城(傻子才這樣攻城上墻)也有些僵,這就算圖個樂。
視頻https://www.bilibili.com/video/BV1iK411z7SU

用例類型二、寫實類mod可用例
1,騎馬帶妹浪漫視頻https://www.bilibili.com/video/BV1XW411r7w1

其實這個哪個mod都可以用,你想想騎砍的結(jié)婚系統(tǒng)是不是對于談戀愛大部分就是對話完成任務走結(jié)婚過場然后成了你的管家npc,夫妻之間就沒其他互動了(先不談其他mod耍流氓的有關功能)。所以利用我這個機制,可以做一個紅塵作伴瀟瀟灑灑,騎著馬前面摟著妹一起騎馬看風景的功能。
這個基本原理:骨骼拼接的出發(fā)點有兩種考慮方式,一個是利用馬的骨骼坐標把騎士agent的女票設置到馬背上位置偏騎士前面一點并通過no_dynamics設定人可浮空。另外一個方式就是直接獲取騎手的襠部骨骼坐標,然后把坐標向前的水平角度往前取一個坐標位置,把騎士agent的女票設置到這個位置并通過no_dynamics設定人可浮空。所對于骨骼拼接這兩種考慮其實想告訴你們,骨骼位置伴隨運動的設定,這個相對位置這么取,要看行為特征,按理來說要在全體骨骼動畫使得骨骼位置變動的情況下,要兩個agent特定位置一直貼在一起,就是要利用骨骼運算。否則這種非線性的骨骼點運動僅僅通過agent pos的有限move/rotate基本位移旋轉(zhuǎn)操作是無法保證所有動作下都能完美貼對不同人的不同特定部位,所以,根據(jù)雙人騎馬這種特定關系,我們最直接的坐標參考點應該是馬背位置的骨骼坐標,但是對于騎馬帶女票來說,馬沒死時,騎士在馬背上坐的位置基本是變化幅度不大的平面位置,所以可以參考目前騎士的坐的位置往前平移一點點找個坐標再坐一個人,在全過程動作動畫運動中,女票與馬的貼合度會基本滿足我們設想的情況。
2.類似戰(zhàn)地騎兵的騎槍扎人帶著一起動的功能
視頻https://www.bilibili.com/video/BV1bh41187zw原戰(zhàn)地游戲的相關表現(xiàn)從1:10這個時刻開始看到這類功能

這個來自前幾年很火的一個戰(zhàn)地游戲視頻,騎兵騎槍扎進對手的身體后還能掛著一起移動一段距離再甩開,當時玩家們說這個可比騎砍真實多了,偉大的騎砍能做到這種程度嗎?當時肯定很多人要搖搖頭,但是現(xiàn)在你們結(jié)合我的骨骼拼接運動理論,這種功能也是小意思。
原理在騎砍里可以這么考慮:
步驟1)ti_on_agent_hit條件里判斷騎兵用騎槍的agent為攻擊施加方時,受到攻擊的agent以slot1號記錄傷害的坐標位置(最好骨骼坐標),以及一個狀態(tài)量slot2號表示是否受到這種需要仿照戰(zhàn)地功能的運動事件啟動(我下面簡稱為羊肉串功能啟動),以及提前標記每個agent的序號記錄到一個狀態(tài)量slot3號,然后以受到攻擊的agent再用一個slot4號記錄是哪個序號的攻擊者agent要用這種戰(zhàn)地騎槍功能對付他(為了保持一一對應關系,所以要構(gòu)造序號對應,不然我總不能像羊肉串一樣,短時間五六個人都串在騎槍上吧?)
步驟2)當進行try for agents 的循環(huán)檢測到slot2號的值為戰(zhàn)地騎槍羊肉串功能啟動,那么把slot3號和slot4號結(jié)合判斷的羊肉串功能的兩個關聯(lián)agent進行篩選出來,扎人的agent利用agent_get_bone_position獲取骨骼編號為19的武器點骨骼坐標,然后獲取騎槍長度op以武器骨骼坐標為基點向手虎口向上角度position move XYZ一定長度(長度范圍在距離手部最深扎深的桿子局部長度到騎槍最大長度,這個要另外用slot根據(jù)你的力道等等每次觸發(fā)這個事件時在這個范圍內(nèi)取個總體隨機但單次固定的扎深值),這樣就得到騎手要扎的人應該把身體的特定部位放置到什么坐標位置上。
步驟3)將被扎的人先獲取agent pos坐標值 :pos1(x1,y1,z1),再獲取期望扎到的特定部位如特定骨骼坐標值獲取為:pos2(x2,y2,z2),而期望扎到的騎槍桿子上的位置坐標值獲取為:pos3(x3,y3,z3),
那此時,我們知道,如果僅僅將被扎的人位置設置到騎槍桿子上,那我們只要(agent set position,被扎的人,pos3)然后set no dynamic浮空跟隨騎槍,但是這樣設置,看上去是被扎的人不特定的動畫最底部的部位踩在騎槍上(比如站立時是腳底踩騎槍,死亡動作是腰躺著的部位貼著騎槍),這樣就不固定并且允許被扎時動作變化時扎的位置就在動且不像人被扎的樣子。所以我們這個時候要這樣處理:
(x2-x1,y2-y1,z2-z1)得到一個坐標方向向量,這個就不是坐標值了,而是位移矢量,目的是對騎槍特定位置(x3,y3,z3)進行矢量變換到(x3-(x2-x1),y3-(y2-y1),x3-(y2-y1)),這個寫法是什么意思呢,意思就是先獲取一下被扎的人在任意動畫動作下,agent pos和骨骼pos之間的變化公式,以向量的形式表現(xiàn),這時候如果被扎的agent整個身體模型的agent pos設置到騎槍某位置上時,你需要逆向?qū)⑦@個位置偏移到自身的特定骨骼坐標上,那就要將騎槍的特定位置坐標逆向進行被扎的人agent pos和骨骼pos之間的坐標向量變換。所以得到到(x3-(x2-x1),y3-(y2-y1),x3-(y2-y1))這個新pos,設為pos4,那么(agent set position,被扎的人,pos4)就是將被扎的人的特定骨骼坐標與騎槍特定位置貼著進行從動伴隨運動,這樣你騎槍扎人時,你想扎頭拖著人走還是扎一只手拖著人走還是扎腰,都可以實現(xiàn)。
用例類型三、魔幻類武俠類mod可用
1.巨人捏著人

巨人的做法騎砍由來已久,但是巨人實際上除了身體大一些以及要彎腰砍人以及可以跨越部分障礙物外,基本上就沒其他優(yōu)勢行為了,如果配合我的骨骼拼接運動原理代碼,就可以做很多東西,比如巨人打一下正常人,給一個slot標記狀態(tài),然后循環(huán),將正常人的腰部骨骼位置設置到巨人的,手部骨骼位置貼合進行從動伴隨運動,折磨揉擰一段時間再把正常人丟出去丟飛個拋物線運動到地上摔傷。你看看,發(fā)揮想想,不同的部位不同的骨骼,是不是可以發(fā)揮的地方有很多。
2.四臂人,做類似三頭六臂的功能
視頻https://www.bilibili.com/video/BV1JE411h7kJ

這個功能用例是告訴你們?nèi)瞬灰欢ㄒ敵赏暾娜艘黄鹩?,可以比如三個人,一個用完整的人,一個人只留一個左手,一個人只留一個右手,然后把多出來的左右手給第一個人。當然做這個功能時注意不要只換皮,要結(jié)合新種族skin和新骨骼要用的skeleton.xml文件來構(gòu)造新骨骼的種族,比如我這個人只要一只手,那么把原始骨骼的其他身體部分的hitbox全部移除,因為這種骨骼拼接時就像人卡人人擠人一樣,多個人疊在一起,hitbox會擠壓導致互相之間運動受阻,比如移速減緩和砍人被擋住。所以要閹割骨骼或其hitbox的有效部位。
3.類似奧特曼的360度甩人
視頻https://www.bilibili.com/video/BV1Ut411z7Bb

也就是agentA兩個手抓住agentB做趴地動作時的一只腳,然后agentA做旋轉(zhuǎn)位移控制,agentB跟隨從動。效果就像奧特曼抓住怪獸的一個部位通常是尾巴來360度旋轉(zhuǎn)再甩飛。你看看,做了這個,是不是很多武俠動作也可以做了,武俠想要招式顯的巧妙,就是要緊密判斷肢體的接觸并做出反饋,我們很多作者在判斷肢體接觸方面代碼能力還是可以的,畢竟做精密的騎射ai要做到指哪打哪,但是接觸后的反饋卻做的很少,因為這個要骨骼動畫產(chǎn)生的動作與位移控制的結(jié)合事件,而因為大家以前對agent_set_no_dynamics在agent運動控制上不熟悉,導致動畫位移事件如擊飛等等行為基本直接靠骨骼動畫動作本身一起完成,而動畫動作如果在任何情況都負擔動畫和位移兩個行為,勢必會對控制的自由度(如多個agent之間具有復合行為過程的復雜行為控制自由)產(chǎn)生影響,進而不能做出打的天花亂墜的武俠打斗。
所以想要做武俠等格斗類的對單體行為具有自由表現(xiàn)力的mod,要重視這個骨骼拼接運動理論的應用。
-----------------------------------------------------------------------------------------------------
題外話:騎砍未來還可以進步地方,除了界面與動畫及多系統(tǒng)組合策劃的想象力創(chuàng)造,還有對運動事件的靈活控制,特別是這種需要多人、多物、人與物的配合型運動的掌握。這樣我們無論是做貪吃蛇、憤怒的小鳥、還是掘地求升 等各種游戲的運動行為的模擬都會得心應手,讓騎砍變成什么游戲都不在話下。
當然就我的作品來說,我一直以來并不是要大家學我,把騎砍改成不像騎砍的各種模式的游戲。而是,創(chuàng)新和挑戰(zhàn)未知,然后總結(jié),聯(lián)系和區(qū)別,然后反過來去強化現(xiàn)有理論、滿足已知部分的進步,再進行未知部分的探索瞎搞。就像萬有引力相對論剛創(chuàng)造出來不知道有什么用,結(jié)果百年后用來發(fā)現(xiàn)小行星。然后就像2009年各種山寨機手機千奇百怪的造型圓形的都有,折疊屏,還有當鍋子接受國外衛(wèi)星電視信號的手機,諾基亞還出過帶電腦鍵盤的手機然后就被收購了,但后來手機都學蘋果的造型千篇一律一片板磚+觸摸屏,但是近兩年手機帶電腦鍵盤還有華為折疊屏又興起。所以從時代變遷的角度,你永遠無法評判,當前一個新技術以后會不會有廣泛的應用。并且從資本的角度,和諧的核心不是滿足用戶習慣,還是培養(yǎng)用戶習慣,當你像一些大廠一樣把十幾億人都養(yǎng)成了習慣,那有些創(chuàng)新就變得更加無力,所以什么“畫風不和諧”“功能無意義”,一方面是你真的基本的東西沒做對或滿足現(xiàn)在大眾的習慣,另一方面是沒有一個完整的整體的新概念,然后長時間給用戶灌輸這個新概念,養(yǎng)成一個新的用戶習慣,就像領軍者的出現(xiàn),導致玩家對沒有自動處理戰(zhàn)力品和換裝導致再回過去玩戰(zhàn)團或同樣沒有這個功能的mod而感到不習慣。當然對于騎砍來說,時間不多了,要養(yǎng)成新的習慣,要讓一個新概念讓所以玩家都接受是比較困難的,就像現(xiàn)在大廠壟斷了十幾億中國人的生活習慣,讓吊絲逆襲變得越來越困難,大家就自成一派,看看有沒有能力形成更多的前所未有的獨家特色。