騎砍mod程序理論獨家--游戲特效原理分類和不同控制手段

前言:大家對于騎砍游戲里的特效用的最多的是粒子系統(tǒng),而粒子系統(tǒng)特效用的最多的形式是顆粒狀的布料運動,但是特效其實實現(xiàn)的方法還有很多,比如場景物模擬,add missle的箭矢類物品發(fā)射模擬以及shader,甚至界面presentation系統(tǒng)。
首先先談?wù)勎覀儗τ谔匦У膶嶋H需求和表現(xiàn)形式。其實很多情況我們是需要一個或若干組合的特效模型根據(jù)我們的需要,對于特定的主體對象的部位或特定的位置,選擇一個相對位置釋放顯示其特效模型或模型組的外在特征,并對于特效模型可能需要進行一些簡單運動(平移、旋轉(zhuǎn),帶有拋物線的噴射,需要或不需要重力阻力影響,及某個范圍的隨機往復震蕩運動),需要或不需要改變貼圖顏色和透明度,甚至需要或不需要直接改變貼圖,需要或不需要放大縮小,需不需要具體的形態(tài)動畫如骨骼(X)和幀動畫。而前面大部分的需求可以被粒子系統(tǒng)滿足,少部分需求可以被shader和missle箭矢類物品滿足,但是場景物系統(tǒng)卻可以滿足我前面幾乎所有需求的控制,但是對相關(guān)理論體系的掌握要求更全面,至于界面系統(tǒng)主要是用于需要屏幕面前的一些特寫類的狀態(tài)類效果(比如用爛的血屏),使用場合比較特殊但是也有很大的應(yīng)用潛力。
所以我們把特效也要看作一個廣義的概念,什么是特效,服務(wù)我們特定含有或不含有模型的對象為增強其表現(xiàn)力而進行一切狀態(tài)變化的其他模型或模型組,所形成的視覺表象。
對于粒子系統(tǒng)教程比較多,我只說一點想法:粒子采用顆粒狀小模型(一般不需要肉眼可見單體模型外表構(gòu)成)大量組成布料運動形式表現(xiàn)特效時,類似物理學的布朗運動,每個粒子模型像是一個水分子形成流體的感覺,可以做一些流動綿密比如水霧雪,但是大家往往忽略用少量大型模型(需要肉眼可見單體模型外表構(gòu)成)直接作為特效,也就是以大型模型整體外觀的顏色RGB和透明度alpha變化來做,比如我七龍珠利用一個環(huán)形齒輪狀的模型添加了放大和透明度改變的參數(shù)來做氣功波打擊地面的沙浪波以及龍珠對拳打出的氣浪就是一個紙片模型微微放大一段時間顯示再消失,還有大家在某些奇幻mod玩到的閃電等等瞬發(fā)型技能效果,就是一個大的片面mesh模型某些保持有貼圖顯示的平面正對鏡頭來顯示一段時間。所以說對于粒子系統(tǒng)特效的表現(xiàn)形式,就是利用自己運動放縮顏色透明度在特定時間的改變,小模型靠數(shù)量堆霧氣態(tài)流體效果,大模型可以是復雜的有棱有角的3d模型(比如哈勞斯本人的模型當粒子射,這個是玩笑打比方)也可以是只有一個單面的就像界面系統(tǒng)大部分mesh來表現(xiàn),但是一般情況,顆粒模型和部分瞬發(fā)型大模型的特效適合寫實,而很多大型模型做的特效其實是適合魔幻和或僅適合二次元,因為大型模型和單張大圖片mesh如果僅以固有材質(zhì)隨模型變化,受貼圖的精細度影響會比較大,比如舉個粒子,二次元的能量球,放在寫實mod里是不是比較片面感顏色什么的比較違和。
所以大家做這類東西要學會總結(jié)有的時候就是做多了看感覺的東西,選擇正確的研究對象,做什么特效,首先考慮你要用于特效的模型及貼圖采用什么特征。而且不是我說場景物做特效好或者哪個系統(tǒng)好,就死命用這一個系統(tǒng),不同系統(tǒng)對待不同的游戲環(huán)境和場合有不同的便利和優(yōu)勢,所以很多時候不要只滿足一種系統(tǒng)對同一個功能的表達。

比如看看我這個早期龍珠mod動圖演示上采用特效分別是什么分類,加速飛行時四周向中心表現(xiàn)速度感的線條是界面presentation系統(tǒng)做的,賽亞人這個是貝吉特有人可能不認識,身上的黃色爆氣特效是帶有頂點動畫的場景物,至于打擊出現(xiàn)的氣體線條和被擊飛產(chǎn)生的氣流,是粒子效果particle system的burst操作。所以這就是三種不同的系統(tǒng)處理三種不同的特效,當然還有其他場合其他系統(tǒng)的用法。這是一個例子。
-----------------------------------------------------------------------上面前言有些長,一展開說容易停不住---------------------------------------------------------------------------------------------------------------
上面簡單說說,接下來重點:
本貼我主要和你們講一下如何利用場景物系統(tǒng)制作各種浮夸特效并模擬出粒子系統(tǒng)可模擬的特效和超越粒子系統(tǒng)能力范圍的特效。以及順帶提一下界面系統(tǒng)做一些特效。
一、場景物制作粒子系統(tǒng)
1.關(guān)鍵op
首先我前言提到場景物模型具有粒子系統(tǒng)那些參數(shù)改變形成的效果均有相應(yīng)代碼可以模擬的特性,并且還可以模擬出粒子系統(tǒng)做不到的效果。所以對于場景物對標粒子系統(tǒng)能做和不能做的事件該采用哪些OP操作我一個個例舉和解釋相關(guān)用法給你們看看。
(1)讓場景物像粒子系統(tǒng)一樣可以運動的op:
1850??# (prop_instance_get_position, <position>, <scene_prop_id>),? ?? ?? ?? ?? ? #得到場景物物體坐標
1855??# (prop_instance_set_position, <scene_prop_id>, <position>, [dont_send_to_clients]),? ?? ???#場景物瞬間設(shè)置到某坐標
1860??# (prop_instance_animate_to_position, <scene_prop_id>, position, <duration-in-1/100-seconds>),??#場景物<scene_prop_id>從當前自身位置按一定時間<duration-in-1/100-seconds>勻速運動到某坐標position
1861??# (prop_instance_stop_animating, <scene_prop_id>),? ???#對被op 1860進行運動的場景物強制停止運動。
以及各種含position的op,因為場景物體運動是通過改變參考位置pos進行平移旋轉(zhuǎn)的改變得到一個新pos然后set或animate到新pos的設(shè)置,通過每次觸發(fā)器的基礎(chǔ)時間間隔或人為擴大的時間間隔不斷執(zhí)行觸發(fā)器來實現(xiàn)運動。
基本格式就是--1850號op或各種get position 的op,然后通過各種position的move和rotate等變換坐標的op,然后set和animate到改變后的pos。
以上這些很常用,不多說了,場景物基礎(chǔ)運動控制看我這個帖子?https://bbs.mountblade.com.cn/thread-2094109-1-1.html簡單先看看,特別是我里面提到一個場景物運動輔助粒子系統(tǒng)運動的特例,讓其他運動顯示可控的物體幫助運動顯示受限的粒子系統(tǒng)在位移顯示時間上得到更自由的控制。
然后場景物對所謂粒子運動的重力模擬就是給position move z即向z軸向下的觸發(fā)間隔時間內(nèi)的位移量,震蕩就是一定時間內(nèi)隨機坐標比如position move/rotate x/y/z的平移/旋轉(zhuǎn)量是一個隨時間變換的隨機數(shù)或者震蕩有規(guī)律如簡諧運動,就是特定兩個坐標之間按一定時間往復均勻抽取一個中間坐標點給場景物設(shè)置位置。阻力就是你根據(jù)你自己對阻力理解的算法,將基礎(chǔ)拋物線或直線運動的觸發(fā)間隔時間內(nèi)的恒定x/y/z位移分量減去一個理論值,使得形成非勻速運動。
應(yīng)用場合:對于場景物采用運動來模擬特效,一般不用于粒子系統(tǒng)的布料運動特效,會卡而且效果并不如粒子系統(tǒng),主要用于大型特效模型需要按照自己想法隨心所欲控制顯示和消失、材質(zhì)變換、放縮時的起始和持續(xù)時間采用以及超出簡單的平移旋轉(zhuǎn)的復合運動及隨控制時間多種規(guī)律變化運動軌跡這些情況。
其實上面說了add missle這箭矢發(fā)射模擬部分特效的問題,其實特效用的比較多的場合就是技能特效,而技能特效有的是表示狀態(tài)比如身上籠罩什么怒氣防護罩,有的則就是missle彈道的性質(zhì),我寫實射箭開槍你們可以理解是個missle彈道發(fā)射行為,那是因為我相信科學要靠科技,但是如果你成為法師,從空中丟的彈道或隕石等物體,何嘗不可以理解是一種特效呢,所以missle彈道發(fā)射和以運動打擊為表現(xiàn)的特效物體,要聯(lián)系在一起研究考慮,不能我前面丟個氣團就是特效,丟個石頭就是武器彈道,然后以這種先入為主的概念,特效就用粒子系統(tǒng),彈道都用missle系統(tǒng),和其他系統(tǒng)劃分界限,要學會同時發(fā)現(xiàn)不同事物的共性和差異,這樣我們才能結(jié)合各個系統(tǒng)的長處優(yōu)勢處理難題。比如以下我這個實例,雖然控制的是隕石,但是改寫下控制個奇怪的光效氣團模型也是可以的。
場景物運動控制模擬技能案例--混沌隕石(代碼):https://bbs.mountblade.com.cn/thread-2096150-1-1.html??所以,有的特效運動事件模擬還要掌握該貼說的對碰撞體的檢測類op。
(2)讓場景物像粒子系統(tǒng)一樣可以放縮的op:
(prop_instance_set_scale, 場景物的instance id, x, y, z),? ???#對場景物品prop進行放大縮小。xyz填數(shù)字或變量,是浮點數(shù),假如開頭(set_fixed_point_multiplier, 1000), 那么x/1000就是模型x坐標方向拉長的倍數(shù),同理yz,也就是你也可以不均勻放大場景物體,然后注意無論你后面如何反復使用這個op操作,參數(shù)的倍數(shù)都是按照你的初始倍數(shù)來的,比如你連續(xù)寫了兩次(prop_instance_set_scale, reg0, 2000, 2000, 2000), reg0代表的物體還是長寬高原來的兩倍。??關(guān)于這個操作,我建議你們類比粒子系統(tǒng)和界面系統(tǒng),粒子與界面系統(tǒng)和這個是騎砍少有的可放縮模型的操作。類比之后你們會更加知道這個op有沒有更好的利用場合。
之前在我的這個帖子介紹過用法https://bbs.mountblade.com.cn/thread-2094107-1-1.html
不多說,反正看我上面自己的注釋解釋一些注意點。
應(yīng)用場合:和運動op上面理由差不多,一般大量顆粒物的模型做的特效對控制粒子放縮的需求不大,或者說只是為了整體的流動感,而不是將物體明顯放縮的形態(tài)特征作為此類特效的具體表現(xiàn)效果。
(3)材質(zhì)貼圖控制:
其實對于粒子系統(tǒng)的RPG和alpha隨時間控制變化是不好操作的,但是場景物多了一個OP叫:
(prop_instance_set_material, <prop_instance_no>, <sub_mesh_no>, <string_register>),? ?#使得<prop_instance_no>場景物某個分部模型mesh或整體的材質(zhì)變化到<string_register>這個字符串記錄的東西作為名稱的材質(zhì),然后用上這個材質(zhì)對應(yīng)的貼圖。這個也是我后面要講的2d動圖系統(tǒng)的理論核心。這個應(yīng)用場合呢,打比方有的人做熱兵器mod,槍口火花采用的是四或六花瓣型的大片面mesh整體顯示這個特效而不用霧氣,但是你粒子系統(tǒng)只能用一個模型形態(tài)導致你只能用這個粒子效果圖片簡單放縮淡顯表示,如果用了我這個場景物材質(zhì)動圖變換系統(tǒng),就可以把整個槍火花的序列圖播放出來。而且很多槍戰(zhàn)游戲這種開火特效都是采用序列圖特效,所以序列圖特效也是騎砍缺乏但是很多游戲都有的一種特效效果的表現(xiàn)形式,因為可以以整塊模型代替布料顆粒的組合以動圖的方式把一些火花霧氣效果的流動感表現(xiàn)出來,然后還能比布料變換的更炫酷豐富改頭換面。如果我給你們填補了這個空白,在特效制作上騎砍還有很大的發(fā)展?jié)摿Α?/p>

比如看這個動圖演示,這個八神庵頭上的是傳奇的頭銜特效,你看看你們對特效適用的場合有多廣闊有沒有理解,當你掌握的手段種類充分全面的時候,一類東西可以玩出很多花樣。
(4)頂點動畫控制op:
頂點動畫控制的基礎(chǔ)理論見我剛寫的帖子https://bbs.mountblade.com.cn/thread-2096174-1-1.html?有更詳細的理論和實例,先看看了解下基礎(chǔ)。
主要op這里也再寫一遍:
prop_instance_deform_to_time? ?? ?? ?? ?? ? = 2610??# (prop_instance_deform_to_time, <prop_instance_no>, <value>),
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? # value參數(shù)代表幀時刻,也就是prop_instance_no場景物id的場景物一次性設(shè)置到value這個幀時刻
prop_instance_deform_in_range? ?? ?? ?? ?? ?= 2611??# (prop_instance_deform_in_range, <prop_instance_no>, <start_frame>, <end_frame>, <duration-in-1/1000-seconds>),
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? # 強制場景物id<prop_instance_no>的場景物自起點幀時刻<start_frame>向終點幀時刻<end_frame>勻速變化,在<duration-in-1/1000-seconds>(單位千分之一秒)時間內(nèi)完成一次動畫,然后模型便停留在終點幀時刻<end_frame>的形態(tài)上。此外注意這里面控制動畫變化區(qū)間的時候是可以取值到<end_frame>,不要去類比is between、try for range這些取不到終值的op,因為這個是行為操作而不是判斷類操作。
prop_instance_deform_in_cycle_loop? ?? ?? ? = 2612??# (prop_instance_deform_in_cycle_loop, <prop_instance_no>, <start_frame>, <end_frame>, <duration-in-1/1000-seconds>),
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? # 強制場景物id<prop_instance_no>的場景物自起點幀時刻<start_frame>向終點幀時刻<end_frame>勻速變化,在<duration-in-1/1000-seconds>(單位千分之一秒)時間內(nèi)完成一次動畫,然后重新到<start_frame>時刻反復循環(huán)動畫。也就是與上面的op區(qū)別是一個不循環(huán)動畫一個循環(huán)動畫,這個你們要結(jié)合骨骼動畫的機理聯(lián)系想想。
prop_instance_get_current_deform_progress? ?= 2615??# (prop_instance_get_current_deform_progress, <destination>, <prop_instance_no>),
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? # 獲取<prop_instance_no>場景物正在用2611或2612操作播放頂點動畫時,已經(jīng)播放的百分比0-100取值<destination>,實際上,這個用的不多,下面的op具有等效替代作用。
prop_instance_get_current_deform_frame? ?? ?= 2616??# (prop_instance_get_current_deform_frame, <destination>, <prop_instance_no>),
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? #獲取<prop_instance_no>場景物操作播放頂點動畫時,當前時點播放到的幀時刻<destination>。
所以場景物的頂點動畫控制是粒子系統(tǒng)所不具備的能力,比如我七龍珠的人物爆氣效果等等,你們可能覺得這種特效形式?jīng)]有概念不可理解,我給你們講個其他游戲的例子,魔獸爭霸和半條命,魔獸爭霸的特效有的時候就是和那些人物單位建筑一樣采用的mdx動畫模型,而半條命雖然大部分特效在其spr文件(這個spr和我們騎砍的場景物不是一個意思,類似我上面說的序列圖文件),但是少數(shù)mod會采用和人物槍模一樣的mdl動畫文件模型來做特效,mdl其實是骨骼動畫,所以說因為騎砍的骨骼動畫變形能力有限,所以模擬動畫特效的重任就落到場景物的頂點動畫系統(tǒng)上了。
應(yīng)用場合:這個主要二次元或?qū)Ξ嬅婢毘潭纫蟛桓叩睦嫌螒蛴玫谋容^多,就拿龍珠的爆氣來說吧,簡陋的老游戲用模型動畫的方式模擬,雖然也像那么回事,但是總有一種特效模型有棱有角的多邊形感覺,所以其實后來的游戲,比較符合現(xiàn)代游戲?qū)徝赖?,特效以這種粒子系統(tǒng)的布料粒子和序列圖形成的動圖效果這兩種方式為主。所以說后面的龍珠游戲身上那些爆氣效果,其實就是序列圖把圖像對準鏡頭位置籠罩在身體上播放動圖。但是用場景物頂點動畫做一些技能還是有用處的,特別是一些效果需要生活中某些實體的東西,比如我要打出一個有動畫的降龍十八掌,飛出一條半透明的金光閃閃會神龍擺尾的龍,比如我這個暴力籃球足球網(wǎng)球臺球的modhttps://bbs.mountblade.com.cn/thread-2069525-1-1.html就有涉及到這個效果,模仿功夫足球,打出的球帶會動畫的虛化老虎和金龍。

此外頂點動畫也可以通過特殊的動畫制作手段形成動態(tài)材質(zhì)的流動感,比如我這個視頻里https://www.bilibili.com/video/BV1ee4y1p7MR的疾風劍豪亞索技能的演示,二技能疾風之墻,一個平板模型上面材質(zhì)氣體流動的效果不是序列圖動圖效果而是頂點動畫的效果,因為表面看這個是平板模型,其實平板上頂點面比較多可以移動點線面的位置然后造成貼圖材質(zhì)的流動感。