1_量子的疊加性
量子物理因?yàn)閰^(qū)別于經(jīng)典物理而被稱為新物理,它最著名的三個(gè)特性就是疊加態(tài)、糾纏態(tài)和坍縮性。雖然目前尚不能完美地解釋這些特性,但因?yàn)閿?shù)學(xué)公式的嚴(yán)格推導(dǎo)、實(shí)驗(yàn)的間接證明和生活中的廣泛應(yīng)用,所以量子理論已經(jīng)成為了真理的一部分。
所謂的疊加態(tài),就是一個(gè)粒子可以同時(shí)多個(gè)具備排他的狀態(tài)。比如一個(gè)電子在雙縫干涉實(shí)驗(yàn)中同時(shí)出現(xiàn)在兩個(gè)地方,造成明暗相間的條紋。但是,這怎么可能呢?確實(shí),不僅僅是普通人,就連愛因斯坦到死的時(shí)候,也無法接受量子理論。
但是,無論能不能理解,如剛才所說,它就是真理。最重要的是,疊加性因?yàn)橥瑫r(shí)具備一些矛盾的特性,也擁有了逆天的實(shí)用價(jià)值。量子計(jì)算機(jī)的并行計(jì)算能力,就是利用疊加特性。如果有一天,人類能精準(zhǔn)地預(yù)測(cè)天氣,快速發(fā)明治療各種疾病的藥物,就是量子計(jì)算機(jī)在背后貢獻(xiàn)力量。
知道了什么是疊加態(tài),我們不難發(fā)現(xiàn),在現(xiàn)實(shí)世界中,程序員們已經(jīng)通過編寫程序,在計(jì)算機(jī)的虛擬世界中創(chuàng)造了很多具備疊加性的應(yīng)用系統(tǒng),數(shù)字孿生就是典型的代表。
那么,數(shù)字孿生系統(tǒng)到底存在哪些疊加態(tài)?這些疊加態(tài)又是如何實(shí)現(xiàn)的呢?下面,就以北京優(yōu)锘科技有限公司的數(shù)字孿生系統(tǒng),即ThingJS 3D可視化平臺(tái)(以下簡(jiǎn)稱ThingJS)為例來進(jìn)行具體的說明。
2_ 亦近亦遠(yuǎn)
當(dāng)宇航員置身太空中時(shí),盡管地球如此巨大,但依然能盡收眼底。再大的物體,只要距離它足夠遠(yuǎn),我們也能看清它的全貌,知道它的形狀,顏色,其表面都覆蓋著什么。
另一方面,就算距離地球如此之遠(yuǎn),宇航員依然能夠利用高精密度的觀測(cè)設(shè)備,拉近了與地球的距離,甚至能夠看清楚地面上的一只螞蟻。可以說,利用了宇宙飛船和觀測(cè)設(shè)備,宇航員同時(shí)具備了亦近亦遠(yuǎn)這種看似矛盾的能力。
現(xiàn)實(shí)工作中人們通常不需要觀察或者管理地球這么大尺度的物體,但就算一棟樓或者城市的某個(gè)區(qū)域,也不是想遠(yuǎn)就遠(yuǎn),想近就近的。要么借助某些工具,要么就是人自己跑的遠(yuǎn)一點(diǎn)或者近一點(diǎn)。
這一切在數(shù)字孿生系統(tǒng)出現(xiàn)后,便發(fā)生了變化。借助ThingJS,使用者只需要操作鼠標(biāo),便能改變與物體的距離,讓人具備了遠(yuǎn)看全局近看細(xì)節(jié)的能力。
為了實(shí)現(xiàn)這種亦近亦遠(yuǎn)的能力,ThingJS都做了哪些工作呢?
2.1?虛擬攝像機(jī)
在解釋亦近亦遠(yuǎn)能力如何實(shí)現(xiàn)之前,要說一個(gè)ThingJS的專業(yè)術(shù)語:攝像機(jī),它是可視化應(yīng)用開發(fā)過程中必不可少的一個(gè)概念,它是用戶觀察3D場(chǎng)景的切入點(diǎn)。你可以把電腦的屏幕理解成攝像機(jī),屏幕后面就是三維虛擬世界。亦近亦遠(yuǎn)的三維場(chǎng)景,就是通過控制攝像機(jī)的可視范圍來實(shí)現(xiàn)的,即可視范圍越大,物體顯得更遠(yuǎn);可視范圍越小,物體顯得更近。
ThingJS還有一種能力,就是攝像機(jī)不動(dòng)的情況下,某個(gè)被觀察物體可以單獨(dú)進(jìn)行縮放,這種伸縮可以是長(zhǎng)寬高同時(shí)縮放,也可以是某個(gè)方向上單獨(dú)縮放。
?
2.2?精簡(jiǎn)切換
可視化應(yīng)用很重要的一個(gè)使用場(chǎng)景就是宣傳展示,展示的設(shè)備會(huì)由普通的電腦顯示器變成了大屏,分辨率可能達(dá)到2K、4K甚至8K。在這種分辨率下,模型必須制作的非常精細(xì),才能夠保證在近距離和高分辨率下,模型依然保持正常的觀感,不模糊,不出現(xiàn)鋸齒。但這又帶來了另外一個(gè)問題,精細(xì)的模型比普通的模型占用更多的內(nèi)存和顯卡計(jì)算能力,精細(xì)的模型多的時(shí)候,就會(huì)出現(xiàn)大家所說的“卡”。
經(jīng)常玩游戲的人深有體會(huì),配置低的電腦如果各種游戲特效都打開,流暢度就會(huì)大大下降,原因之一就是特效打開的情況下,加載過多的高精細(xì)度的模型(人物模型、道具模型、特效模型等)造成的。
ThingJS巧妙的使用了精模簡(jiǎn)模切換的辦法,兼顧了性能和視覺效果。也就是說在場(chǎng)景初始化后,用戶是遠(yuǎn)距離觀察整個(gè)場(chǎng)景,此時(shí)系統(tǒng)雖然加載了所有模型,但加載的是精細(xì)度較低的模型,保證了系統(tǒng)響應(yīng)速度;當(dāng)用戶近距離觀察某個(gè)設(shè)備(比如數(shù)據(jù)中心的機(jī)柜)的時(shí)候,系統(tǒng)會(huì)自動(dòng)把那些在用戶視野范圍內(nèi)且距離較近的設(shè)備切換為精細(xì)的模型,因?yàn)橥瑫r(shí)在用戶視野內(nèi)且距離較近的設(shè)備數(shù)量不可能過多,所以雖然是精細(xì)模型也不影響系統(tǒng)性能。
2.3?小地圖
ThingJS支持小地圖方式,幫助用戶在全局視角下,通過點(diǎn)擊右上角小地圖的某個(gè)點(diǎn),在3D場(chǎng)景中觀察該位置的詳細(xì)情況。這個(gè)功能讓用戶同時(shí)擁有了遠(yuǎn)近觀察的能力。
3_?亦內(nèi)亦外
小時(shí)候很喜歡看動(dòng)畫片,印象最深的動(dòng)畫片之一便是嶗山道士。片中的王生習(xí)得了法術(shù),可以念動(dòng)咒語,穿過墻壁進(jìn)入室內(nèi),不過因?yàn)樗男g(shù)不正,最終導(dǎo)致法術(shù)失靈。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
時(shí)至今日,嶗山道士換成了ThingJS,穿墻術(shù)換成了層級(jí)切換,而且這個(gè)法術(shù)百試百靈,永遠(yuǎn)不存在失效的情況。
3.1?層級(jí)切換
首先,ThingJS將3D場(chǎng)景中的空間單位按從大到小的順序進(jìn)行了層級(jí)劃分,比如分別為園區(qū),建筑、樓層、房間、物體等等。
以此結(jié)構(gòu)為基礎(chǔ),ThingJS提供了層級(jí)切換的能力,讓用戶的觀察視角在各個(gè)層級(jí)之間實(shí)時(shí)變化,穿墻瞬移都不是問題。比如在園區(qū)層級(jí),雙擊某個(gè)建筑物,可以切換到建筑層級(jí),近距離的觀察建筑物外立面;再雙擊建筑物的某個(gè)樓層,可以切換到樓層層級(jí),查看該樓層的布局結(jié)構(gòu)。
層級(jí)切換能力可以從外到內(nèi),也可以從內(nèi)到外,但都是逐級(jí)切換。
?
?
更神奇的是,無論在任何層級(jí),用戶可以立刻飛到某個(gè)物體的旁邊,就像X戰(zhàn)警中的瞬移人。這個(gè)功能通常用來實(shí)現(xiàn)物體的搜索和空間定位。
3.2?第一人稱行走
如果覺得層級(jí)切換和瞬移這種超能力太過逆天,而你只想做個(gè)普通人,規(guī)規(guī)矩矩的從外到內(nèi),也沒問題。ThingJS還提供了第一人稱行走的能力,就像玩游戲一樣。
A:左移;
D:右移;
W:前進(jìn);
S:后退;
空格:跳躍;
鼠標(biāo):旋轉(zhuǎn)場(chǎng)景;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
在此功能基礎(chǔ)上,還可以自定義行走路線。設(shè)定完成后,視角就會(huì)根據(jù)設(shè)定的路線自動(dòng)行走并切換。
4?_亦分亦合
請(qǐng)看下面兩張圖,看出有什么差別了嗎?
第一張圖中,是變電站的一臺(tái)主變壓器,但為了管理和觀察上的方便,在第二張圖上將這個(gè)變壓器的各個(gè)組件進(jìn)行了拆解,可以查看每個(gè)組件的外形和監(jiān)控?cái)?shù)據(jù)。
在應(yīng)用系統(tǒng)所管理的對(duì)象中,有很多類似的物體,它包含了眾多復(fù)雜的組件。如果拆開表示,雖然能夠仔細(xì)觀察到各個(gè)組件的外觀和運(yùn)行情況,但卻破壞了系統(tǒng)總體外觀上的完整性;如果不拆開,就難以了解復(fù)雜對(duì)象的物理結(jié)構(gòu),在理解這個(gè)對(duì)象的運(yùn)行原理,以及發(fā)生故障時(shí)候的根源分析和問題解決的情況下,都會(huì)造成困難。由此可見,具備了聚合分解能力的模型和可以承載這種模型的可視化平臺(tái)是多么重要。
4.1?模型制作
閱讀過了上面的部分,我們自然可以想到,ThingJS平臺(tái)亦分亦合的能力是要有相應(yīng)的模型支持的,程序還沒有達(dá)到能把一個(gè)模型拆解成多個(gè)模型組件的智能化程度。
優(yōu)锘的建模工程師從客戶處獲取物體各個(gè)組件的外觀照片,然后分別建模再整合到一起。這個(gè)過程中,每個(gè)組件模型的美觀和組合在一起的完整性和契合性都要保證,其制作的復(fù)雜性和時(shí)間上的高成本,導(dǎo)致了在實(shí)際項(xiàng)目中,只有一些大型的、重要的物體,比如變壓器、盾構(gòu)機(jī)等,才進(jìn)行分合模型的制作。
4.2?模型分合
分合模型制作完成后,接下來就是程序處理了。程序可以按照視覺上的合理性,設(shè)置各個(gè)組件的運(yùn)動(dòng)軌跡和向量,然后對(duì)物體的各個(gè)組件進(jìn)行位移,最后形成一個(gè)整體模型分開,變成多個(gè)組件模型的動(dòng)畫效果。
實(shí)際開發(fā)過程中,一個(gè)分合模型的組件數(shù)量比較少還好,但是如果組件數(shù)量多,一個(gè)個(gè)進(jìn)行軌跡和向量的設(shè)置然后測(cè)試,最后形成一個(gè)合理的視覺效果,會(huì)耗費(fèi)很大的工作量。因此,ThingJS提供了一個(gè)可視化工具,實(shí)現(xiàn)了模型移動(dòng)和代碼自動(dòng)生成的雙向交互。也就是說,將一個(gè)分合模型導(dǎo)入到這個(gè)可視化工具后,可以用鼠標(biāo)拖動(dòng)模型中的一個(gè)組件,系統(tǒng)就會(huì)自動(dòng)生成相應(yīng)的腳本。如此往復(fù),把每一個(gè)組件都用鼠標(biāo)拖動(dòng)到分開狀態(tài)下的合適位置,也就完成了所有的代碼開發(fā)工作。如果對(duì)位置的細(xì)節(jié)不滿意,還可以修改代碼中代表位移長(zhǎng)度的數(shù)字,則可視化區(qū)域中的組件會(huì)進(jìn)行對(duì)應(yīng)的移動(dòng)。
4.3?動(dòng)態(tài)組合
分合模型的動(dòng)畫效果無論從視覺感受,還是實(shí)際管理上都有很重要的意義。不過,ThingJS亦分亦合的能力不僅于此,比如動(dòng)態(tài)組合。
在與某廠的合作過程中了解到,他們?yōu)榭蛻羯a(chǎn)的數(shù)據(jù)中心微模塊中,包含的機(jī)位數(shù)量是不固定的,每一種類型的微模塊有十幾種可能性,而且微模塊的類型有很多種。在這種情況下,一般的做法就是要做幾十種模型,更要命的是,如果某種類型的微模塊的模型要進(jìn)行改動(dòng),這個(gè)系列的所有模型都要改變,費(fèi)時(shí)費(fèi)力易出錯(cuò)。
為此,ThingJS新增了一種動(dòng)態(tài)組合的能力,像上文中提到的微模塊,會(huì)制作一個(gè)含有三個(gè)組件,即兩側(cè)的門和一對(duì)機(jī)柜(如果是單列微模塊就是一個(gè)機(jī)柜)的模型。在3D場(chǎng)景中,系統(tǒng)可以根據(jù)外部系統(tǒng)傳入的參數(shù)(包括方向和機(jī)柜數(shù)量),動(dòng)態(tài)的加載模型組件,即微模塊前門,動(dòng)態(tài)數(shù)量的機(jī)柜和微模塊后門,最終在3D場(chǎng)景中形成大小不一的微模塊。
5?_亦靜亦動(dòng)
一般人理解數(shù)字孿生系統(tǒng),只是簡(jiǎn)單地理解為二維變?nèi)S,殊不知,比起維度的改變,更重要的是,數(shù)字孿生系統(tǒng)讓原來靜止的世界動(dòng)了起來。ThingJS也是如此,如果用戶想仔細(xì)地清楚,它就靜止;如果用戶想全面的了解,它就轉(zhuǎn)動(dòng)。當(dāng)然,為了更好地展示被管理的對(duì)象,ThingJS平臺(tái)研發(fā)出的更多能力是向著動(dòng)的方向傾斜的。
5.1?物體控制
ThingJS提供了很多控制物體的方法,包括:
顯示/隱藏:可以讓某個(gè)或者某些物體模型顯示或者隱藏;
旋轉(zhuǎn):讓某個(gè)物體模型沿任意方向,旋轉(zhuǎn)任意的角度;
移動(dòng):讓某個(gè)物體模型沿著一定的線路移動(dòng);
?
上面提到的物體顯示隱藏、旋轉(zhuǎn)和移動(dòng)都是比較簡(jiǎn)單的運(yùn)動(dòng)能力,ThingJS還提供了一些復(fù)雜的運(yùn)動(dòng)能力,比如一個(gè)物體圍繞著另一個(gè)物體旋轉(zhuǎn),一個(gè)物體追隨著另一個(gè)物體運(yùn)動(dòng)等等。各種簡(jiǎn)單和復(fù)雜的運(yùn)動(dòng)方式組合起來,為各種業(yè)務(wù)場(chǎng)景的可視化展示和管理提供了無數(shù)的可能性。
還有一種活動(dòng)效果是模型本身就具有的,比如數(shù)據(jù)中心場(chǎng)景中的機(jī)柜門的開關(guān)。ThingJS可以獲取并展現(xiàn)該模型具備的所有活動(dòng)效果。
5.2?視點(diǎn)動(dòng)畫
如果把物體控制能力形成的效果比喻成小視頻的話,那么ThingJS的動(dòng)畫制作能力就可以看成是動(dòng)畫片的制作。設(shè)想一下,如果有機(jī)會(huì)變成宮崎駿,誰還會(huì)在乎抖音上火不火呢。那么,ThingJS的動(dòng)畫的制作過程是怎樣的呢?
首先了解一下視點(diǎn)的概念。其實(shí)很容易理解,在3D場(chǎng)景中,某一個(gè)固定的畫面就是一個(gè)視點(diǎn)。當(dāng)然了,從用戶的角度看是一個(gè)靜止的畫面,而從系統(tǒng)后臺(tái)看這個(gè)畫面卻包含了眾多的數(shù)據(jù),比如場(chǎng)景的編號(hào)和角度,攝影機(jī)到場(chǎng)景的距離和角度等等。
在了解了視點(diǎn)的概念后,下一步就是獲取視點(diǎn),相當(dāng)于把你認(rèn)為合適的3D場(chǎng)景畫面按個(gè)暫停鍵然后截圖。
如果想動(dòng)畫過程中表現(xiàn)的內(nèi)容多一些,就要多獲取一些視點(diǎn),形成一個(gè)視點(diǎn)列表。
完成了一個(gè)視點(diǎn)列表,其實(shí)就是完成了一個(gè)動(dòng)畫的制作。你可能會(huì)想怎么會(huì)這么容易,如果一個(gè)視點(diǎn)是園區(qū)的鳥瞰圖,下一個(gè)視點(diǎn)是某個(gè)設(shè)備的細(xì)節(jié)放大圖,兩個(gè)視點(diǎn)連續(xù)播放豈不就是圖片的切換,跟動(dòng)畫有什么關(guān)系呢?
ThingJS的強(qiáng)大之處,就在于它沒有把視點(diǎn)切換做成生硬的圖片切換,而是在后臺(tái)做了大量的工作,計(jì)算兩個(gè)視點(diǎn)中場(chǎng)景的層級(jí)和角度,攝像機(jī)的距離和角度等信息,然后按照一定速度均勻地進(jìn)行變換,從用戶的角度看起來,就是一個(gè)平滑的動(dòng)畫過程。
如果還不明白,就想象一下那些能夠進(jìn)行變臉的APP吧,這些APP通過算法把一張臉漸漸地,毫無違和感地變成另外一張臉。雖然這算法復(fù)雜,但是用戶只需要關(guān)心前后兩張臉的圖片就行了,剩下的交給計(jì)算機(jī)。
限于篇幅原因,ThingJS量子宇宙的疊加態(tài)先介紹到這里。接下來的一篇中,我們還將介紹亦簡(jiǎn)亦繁,亦舊亦新,亦真亦幻和亦獨(dú)亦群四種疊加態(tài)。
