吳 晉 ,田云霞 ,李麗君 ,田 川
(1.北方自動控制技術研究所,太原 030006;2.山西工程職業技術學院,太原 030009)
提高和保持軍隊戰斗力的一條重要途徑是具備現代化的訓練方法和訓練裝備。如今戰爭科技含量越來越高,多軍兵種協同作戰常態化且在當下國際環境詭譎無常的情形下,提高我國軍隊訓練水平成為急需解決的問題,但組織復雜、規模宏大的實戰訓練演習周期長、耗費大、易造成人員傷亡,并會受到空域、訓練場地的限制,這些特點迫切要求軍事訓練采用新的技術方法。現代視景仿真與虛擬戰場環境技術就為軍事訓練提供了全新的手段和支撐,該技術具有成本低廉、環境逼真、場景多變、訓練針對性強、可控制性強等特點,可最大程度地補充實兵演練,提高部隊的技戰水平。
在某炮兵參加的合成戰術對抗仿真訓練中,為了使訓練條件貼近實戰、使仿真對抗結果可信,需要在虛擬戰場環境中,建立高保真度的火炮裝備仿真模型。其中火炮的外彈道建模與仿真是火炮裝備仿真模型的重要組成部分,它既能增強訓練過程的炮火交戰臨境感,又決定了彈丸是否與目標發生碰撞,關系到火炮的命中仿真,直接影響仿真對抗結果。在該對抗仿真訓練系統中,火炮進入預設陣地后,會上報自己的位置坐標(也可通過連指揮車所攜帶的方向盤測距機進行測量獲得),從而使模擬指揮軟件獲得本連隊的火炮位置信息。營級或連級觀察所對目標位置信息進行測量,進而得到要打擊的目標位置信息[1-2]。
本文在已知火炮陣地位置信息、目標位置信息和彈丸初速的情況下,對火炮彈丸飛行軌跡進行可視化渲染研究,通過空氣動力學簡化方程,對飛行軌跡進行建模并求解彈丸在虛擬戰場中的位置,用粒子系統模擬發射、爆炸效果,進而可視化彈丸飛行全過程。
在某仿真訓練系統中需要利用視景仿真技術生成一種險象環生、幾近真實的立體戰場環境:在有典型地貌的自然環境中,當炮兵對地面目標進行壓制時,伴隨巨響彈丸被射出,隨后生成一團火光并伴有煙霧,高速的彈丸直奔目標,最后與目標碰撞、爆炸。這種對戰場要素(如爆炸)的高逼真度仿真,可使受訓士兵感覺好像進入“真正”的戰場,進而提高訓練的效果。
本文主要研究從彈丸飛離炮口、彈丸在虛擬戰場環境中飛行、彈丸與目標碰撞發生爆炸整個過程的視景仿真。為了提高仿真逼真度、可信度[3-4],需對全過程視效、彈丸飛行特性進行仿真。通過分析原型系統可把彈丸離開炮口到爆炸的過程分為3個階段:1)在炮口產生團狀火焰并伴有巨響的出膛階段;2)按照彈丸軌跡飛行的飛行階段;3)與目標碰撞并產生巨響的爆炸階段,因此,需模擬彈丸出膛時的視效、聲效,在保證幀率和逼真度的前提下模擬彈丸飛行軌跡、模擬彈丸與物體碰撞時產生的爆炸視效、聲效。
為使訓練達到實戰化要求,彈丸飛行過程視景仿真需滿足真實性、逼真性、實時性要求。
1)真實性要求
要求彈丸的飛行軌跡具有高度的真實性,能夠完全反映出彈丸的運動和動力學規律。
2)逼真性要求
要求彈丸能在數值計算的基礎上,以立體圖形的形式在三維戰場環境下實時展示出來,同時要求彈丸的發射、飛行和打擊過程能夠產生聲光煙的效果。
3)實時性要求
要求彈丸位置解算和三維渲染能夠達到30幀/s以上,畫面流暢,不會產生卡頓,能夠滿足訓練的要求。

圖1 彈丸外彈道軌跡
實際外彈道是一條空間曲線OSD,如圖1所示,把過射出點o的水平面記為發射水平面或炮口水平面,彈丸經過身管加速后獲得初速V0,過初始向量V0垂直于炮口水平面的oxy面記為射擊平面,彈丸經過上升弧段后到達彈道軌跡的最高點,經過下降弧后,彈丸與炮口水平面交為一點,此點稱為彈丸彈道落點,射出點到彈丸彈道落點處的水平距離稱為水平射程,彈丸彈道落點處彈丸的速度矢量與炮口水平面的夾角稱為彈道落角,把落點偏離射擊平面的距離稱為側偏。
在真空中,彈道是一條拋物線,分為升弧、降弧,這兩弧段彈丸速度和空間位置有嚴格的對稱性。但彈丸在空氣中運動時,由于空氣阻力等因素,升弧、降弧不對稱,此時彈丸速度、空間位置將在空氣阻力、重力等因素的作用下不斷變化。
為了簡化問題分析,可把彈道軌跡投影到炮口水平面和射擊平面,炮口水平面的投影為OD弧,在射擊平面的投影為OS'D',如果求出了OD和OS'D'的數學表示,那么就可通過投影面軌跡的數學模型獲得外彈道的數學模型,這樣就把問題簡化為求解各投影平面曲線的數學模型。彈丸不同的初速會有不同的飛行軌跡,隨著現代火控系統技術的發展,彈丸不僅可在載具靜止狀態下射擊,也可在運行時射擊,車體運行速度矢量會影響彈丸的初速矢量,進而影響飛行軌跡,對此可將射擊時車體運動速度矢量分解為兩個方向:一個射擊平面上;另一個在垂直于射擊平面的平面上,這些分解速度用來修正彈丸初速。
在彈丸的初始速度和方向給定的情況下,如果作用力只有地球引力、空氣動力載荷的作用,彈道是個曲線,把彈道向射擊平面和炮口平面投影,此時問題從三維簡化為二維,如果進一步將起點設為原點,則可消除大多數方程中初始x值和y值,這樣將極大地簡化問題。
在動力學的工程學界中,存在著6個標準的空氣動力載荷量:3個力(升力、空氣阻力、側向力)和3個力矩(俯仰力矩、偏航力矩、滾動力矩)。有些物體有很高的長度-直徑比被稱為長細比,彈丸屬于典型的細長類物體。在現實世界中,它們在空氣中飛行時這些物體主要受升力、阻力以及俯仰力矩的作用。視景實時仿真中,根據幀率和視效的需求,可認為此類物體僅受升力、空氣阻力、俯仰力矩的影響,并據此假設對其進行建模。
空氣阻力的計算公式[5]:

Cd為阻力系數;Sref為一個參考面積常數,通常是幾何體的投影面積;ρ為流體的密度,這個變量常被取為常量,對空氣而言,在任何給定的時間片段中,它的值隨著海拔、氣候條件的變化而變化,在氣溫15℃時,地面空氣密度為1.206 kg/m3,根據外彈道理論,空氣密度函數為 H(y)=(1-2.190 4*10-5*y)4.399,y<9 300 m[6-7];V為空氣相對于物體的速度,Vrelative=Vliquid-Vlocation。彈丸是類圓柱體的物體,它的中心軸垂直于相對風,其作用點位于物體的質心。對于此類物體,Cd主要是一個無量綱參數的數學函數,被稱為雷諾數,用來表示流體中的慣性作用力與黏性作用力的比值。通過雷諾數查表可得Cd。也可通過射表數據調整空氣阻力使脫靶量減小,選取脫靶量最小的空氣阻力值,倒推出Cd。
物體表面的流加速度和流減速度造成的流體壓力差,就產生了升力。可用簡化的線性勢能流模型估算彈丸的升力。利用此模型,一個完整的流場可以表示成若干個基本流場的疊加。流體中一個普通物體周圍的流可近似為一個背景流。在背景流中增加一個環流,環流用來表示的是流體在物體一個側面的加速度和在另一側的減速度。環流可被想成一個渦流,疊加在背景流之上,渦流通過不斷增加物體某一側的流體速度,產生更低的壓力,同時不斷地降低物體另外一側的流體速度,產生更高的壓力,物體兩側的壓力差就導致了升力的產生。因此,當繞自身對稱軸旋轉的彈丸以迎角飛行時,與右(左)旋彈丸相應的升力產生使彈丸向右(左)側運動的偏流,彈丸偏向彈道右(左)方。環流產生的力可用庫塔-儒可夫斯基定理計算:

其中,Vrelative_wind是彈丸相對風的速度矢量,γ是一個向量,表示每個單位長度的環流,有一個確定的方向,而合力Lper_unit_length是每個單位長度上的力。這里的長度是沿著環流方向上物體的長度。物體曲率的幾何不對稱性,就會造成環流的產生,自轉同樣可產生環流,彈丸可被認為自轉的圓柱體。
在現實世界中,一個普通物體周圍的流體流動是非常復雜的,其環流的情況也是復雜的。為了簡化在視景中的應用,可把物體簡單看作一個圓柱體。空氣動力幾何體就可認為是一個邊界圓柱體,位于自轉軸上。上式乘以圓柱體的長度,就可近似地得到總的力。對于一個半徑為r,自轉的速度為每秒ω個弧度的圓柱體每個單位長度上環流可用下式表示:γ=2*π*ω*r2,對于這個邊界圓柱體包圍著的彈丸,其總的力就可表示為:L=0.785*l*ρ*Vrelative_wind×(2*π*ω*r2*espin),espin是一個單位向量,表示圓柱體的自旋軸,ω*espin表示這個弧度上每秒的旋轉速度。附加因子0.785近似地模擬在有限長度的圓柱體上發生的三維損耗。
俯仰力矩用下面公式計算[5]:

式中,ρ、V、Sref的含義同空氣阻力計算公式,lref為一個參考長度,取物體的物理尺寸,Cm為俯仰力矩系數。一般情況可使用karamcheti公式的變種:Mm=|2*α|近似計算俯仰力矩,α是細長體的軸與相對風之間的夾角,Sref*lref取值為細長體的體積。俯仰力矩作用于物體的重心,而這個力矩的方向則由Vrelative_wind×Aslender_body的向量積給出。其中,Aslender_body是細長體的最前端到最后端的一個軸,該軸通過物體的重心。
當彈丸與目標碰撞發生爆炸時,一聲巨響,黃色的火焰妖艷綻放,濃煙騰空而起,碎片向四周飛散出去,同時伴有炙熱的波浪。為了表現這種爆炸效果需創建4個粒子系統對象:黃色火焰粒子系統對象、黑色碎片粒子系統對象、火花粒子系統對象、白色沖擊波粒子系統對象,其中煙霧由黑色碎片粒子系統對象的子發射器生成,黃色火焰粒子系統對象為其他粒子系統對象的父對象。當彈丸出膛時會騰起一團黃色火焰,此視效的設計只需更改黃色火焰粒子系統對象中材質屬性即可。彈丸飛行軌跡視效只需把運算好的彈丸速度傳給三維渲染引擎,由三維渲染引擎實時渲染彈丸軌跡[8]。下面基于Unity3D引擎分別給出粒子系統對象和聲效的設計。
2.2.1 黃色火焰粒子系統對象的設計
首先創建一個粒子系統對象,設置形狀為球形、半徑0.01、粒子的生命周期為2、粒子的噴射速度為50~210、粒子的大小為10、粒子的旋轉角為-180~180、設置一個周期內發射的粒子數為100。爆炸后粒子由中心向四周由快到慢散射,因此,設置粒子生命周期內的速度上限值為200,超過上限速度后對粒子的減速阻尼為1。為了表現火焰團狀物外表,給粒子賦予爆炸材質并設置粒子生命周期內顏色屬性從黃色漸變到無色。爆炸后火焰團狀物形態由小到大再到小的變化,可用曲線方式設置粒子隨著生命周期進行的大小變化。一團團的聚集火焰效果用發射屬性的噴射頻率值設定。
2.2.2 黑色碎片粒子系統對象的設計
爆炸產生的碎片由爆炸點向四周飛濺。碎片由膠囊類型的網格和為網格賦煙材質屬性表示。飛濺的形態決定了粒子的噴射形式及相關參數,因此,可設粒子系統形態屬性為球形、半徑為1、粒子噴射延遲屬性為0.1、粒子噴射速度160、粒子的大小3、一個周期內發射的粒子數為20。噴濺的碎片任意翻滾,因此,需設粒子旋轉角范圍為-180~180、粒子在生命周期內粒子旋轉的角速度范圍為-720~720。爆炸產生的碎片會在重力的作用下消失,所以設置粒子的生命周期為1.5、重力密度為20、粒子的大小范圍為0.5~3。碎片飛射時還帶有煙霧感,可用碎片的子發射系統完成此種效果,可設子粒子系統的噴射頻率為50、渲染器屬性中材質的值為煙材質、矯正排序系數為5 000、粒子的噴射周期為2.0、粒子的噴射速度為10、粒子的旋轉角度為-180~180、粒子的噴射速度范圍為10~20、粒子生命周期內大小變化范圍為0.5~1.5、噴射頻率60。
2.2.3 火花粒子系統對象設計
火花伴隨著爆炸向四周飛射最后消失,因此,設粒子系統形態屬性為球形、半徑為1、爆發屬性粒子值為80、粒子的生命周期0.2~0.7、粒子的噴射速度為200~250、粒子的大小為0.5~2、粒子的渲染模式為拉伸面板渲染、長度縮放比為4、材質屬性賦為火花材質。
2.2.4 白色沖擊波粒子系統對象設計
爆炸后會從中心向四周擴散一圈沖擊波最后消散,因此,設粒子系統形態屬性為球形、半徑為0.01、一個周期內發射的粒子數為1、粒子的渲染模式為水平面板渲染模式、最大粒子尺寸為200、材質賦為預制好的圓環材質、粒子的噴射周期為1、粒子的生命周期為0.8、粒子的噴射速度為10、粒子的大小為30、生命周期內粒子大小變化范圍為0~15。
2.2.5 出膛聲音組件和爆炸聲音組件的設計
把彈丸出膛時和與物體碰撞爆炸時的音頻文件賦給音頻源組件的音頻剪輯文件屬性,設置空間混合為3D音效、多普勒級別為1、衰減模式為對數衰減模式。
根據簡化的彈丸飛行模型,彈丸只受空氣阻力Dairfriction=(dx,dy,dz)、環流產生的力Lair=(Lx,Ly,Lz)和地球的重力G作用。通過作用力可改變彈丸的加速度,進而調整彈丸的速度達到調整彈丸運動狀態的目的。把彈丸的加速度記為a=(ax,ay,az),ax,ay,az分別為在3個坐標軸向的加速度分量,相應計算式為:

3.1.1 在炮口水平面相關量的計算
對于炮來講,引起彈丸橫向偏移的因素主要是環流產生的力在z方向的分量。車體相對身管的橫向速度Cz。彈丸的速度為:

其中,P0z為初始位置z方向的分量,那么彈丸的隨時間的位置Pz'為:

3.1.2 在射平面相關量的計算
將問題簡化為二維后,可確定每一維的速度和加速度。假設初始速度為v0、仰角為θ,車體在水平方向上的速度分量為Cx,則沿x軸和y軸的初始速度如下:

垂直速度和水平速度可被表示為:

記P'為經過一段時間后彈丸的位置,P0為彈丸的初始位置,則


通常情況視景仿真場景中發射陣地和目標可近似處于一個平坦的地面。地面上的大炮向地面目標開火時,發射點和目標點之間的垂直距離為0,因此,彈丸位置在y方向上沒有變化,此條件可簡化垂直位置方程,從而求出時間t、初始速度V0或仰角θ,如下所示:

最大高度的定義是:垂直速度Vy=0,只需解下述關于垂直速度的方程:

t的解如下:

用上述解替換垂直方程中的t,可求出彈的最大高度:

要求θ≥0,如果發射角θ小于0(向下發射),則最大高度將為0。
假設彈丸圍繞垂直于運動方向的軸旋轉,彈丸角速度變化取決于轉矩M及轉動慣量I,彈丸的角加速度為:

根據彈丸的角加速度可更新角速度、旋轉角度,如下式:

da為角阻尼系數為角加速度,θ觶為初始角速度,θ觶'為積分步長后的角速度。
彈丸旋轉角度按下式計算:

該模型充分考慮了影響彈丸飛行的主要因素,加快了彈丸飛行軌跡的計算速度,滿足了視景仿真對實時性的要求。
動態鏈接庫文件是一種可執行文件,允許程序共享執行特殊任務所必需的代碼和其他資源,可以被所有的windows應用程序共享。本文把上述計算虛擬戰場環境中彈丸離開炮口后的運動狀態模型以動態鏈接庫的形式封裝給用戶使用。本模型對外提供7個接口,如下:
Vector_DLLExport GetResistence(float density,float relV-el,float relArea,float coefficient);
Vector_DLLExport GetPitTorque(float density,float relV-el,float relArea,float relLength,float coefficient);
Vector_DLLExport GetLiftForce(float density,float relVel,float angVel,float radius);
Vector_DLLExport ForceAccumulate(Vector objAccept-Force);
Vector_DLLExport GetFrameIntervalSpeed(Vector composForce,float Mass,float frameInterval);
Vector_DLLExport GetShellPos(Vector composForce,float Mass,float frameInterval);
float_DLLExport GetMaxHeight()。
Unity3D是一款比較流行的、支持屬性可視化編輯、跨平臺開發、一鍵部署等特性的三維游戲開發工具,在該工具中使用動態庫模型時,需把動態鏈接庫放在projectDirectoryAssetsPlugins目錄下。下面介紹在unity3D創建的場景中實現彈丸飛行軌跡可視化步驟:首先,用3dmax對火炮(炮塔、身管、火炮底盤)、炮彈建模并導入到unity3D中,分別給炮塔、身管、火炮底盤編寫腳本組件,用來接收用戶輸入以控制火炮運動狀態及炮塔偏航角和身管俯仰角。接著創建兩個空物體,其中一個添加出膛粒子系統組件、發射音頻源組件、擊發彈丸組件,分別用來展現彈丸出膛時的爆炸火焰、出膛時的爆炸聲及響應用戶按下空格鍵時所產生的發射事件——實例化并發射一個彈丸、播放爆炸音頻;為另一個空物體添加爆炸粒子系統組件、爆炸音頻源組件,用來展現彈丸與其他物體碰撞時的爆炸效果及聲效。編寫彈丸腳本組件在其FixedUpdate函數中調用本文提供的外彈道模型,用以實時更新彈丸的位置,其執行步驟為:
1)調用 GetResistence、GetLiftForce、GetPitTorque分別計算空氣阻力、俯仰力矩、環流產生的力,并把它們的返回值轉換成Vector3類型。
2)調用力累加器函數計算加在物體上的合力并把返回的值轉換成Vector3類型。
3)調用GetFrameIntervalSpeed獲得的物體的速度并把返回的值轉換Vector3類型。
4)調用Rigidbody.MovePosition函數根據速度更新彈丸的位置。
當彈丸與地面或其他物體碰撞時調用OnColli sionEnter函數,實例化含有爆炸粒子系統組件對象,并銷毀彈丸。經部隊試用后能滿足訓練需求,效果如圖2所示。

圖2 彈丸出膛、飛行、爆炸效果
本文對某合成戰術對抗仿真訓練系統中,火炮所發射的彈丸飛行軌跡進行建模,分析求解了火炮發射的彈丸在虛擬戰場環境中的飛行軌跡及彈丸出膛、彈丸與物體碰撞時伴有的視效、音效。彈丸飛行軌跡模型被編譯成動態庫,可在可視化彈丸飛行軌跡時使用。此模型較為真實地模擬了彈丸飛行軌跡,增強了戰場環境的真實感和用戶在虛擬戰場環境的沉浸感。雖然在建模推導過程中涉及了大量的數學知識,但最后的公式卻相對簡單也容易理解,且能夠滿足用戶的訓練需求。經部隊試用取得了較好的訓練效果。今后,將進一步優化彈丸位置實時計算公式,減少浮點運算,增加運算效率。