為什麼在虛擬現實技術等用物理和數學規律模擬世界需要耗費大量的計算?

需要複雜計算的情況有什麼共性?為什麼真實世界裡無論簡單還是複雜的物理過程發生得都毫不費力?

是不是因為虛擬現實都是對大量量子尺度事件的簡化表現?


有一個理論是在《失控》中提出來的:

想要知道真實世界的結果只有一個方法,那就是運行這個世界。

要想完全精確的模擬這個世界運行,那就只有再造一個一模一樣的世界了。

題主在補充里說道:「為什麼真實世界裡無論簡單還是複雜的物理過程發生得都毫不費力?」但事實上,真實世界裡哪怕看起來再簡單不過的物理過程都複雜的不知凡幾

簡單如玻璃杯掉在地上摔碎,都有超過億億個分子在互相作用。玻璃的裂痕為什麼是這樣的而不是那樣的?為什麼這次的聲音比上一次摔碎的那個要清脆?

或許我們會回答:因為那裡有一些雜質,比別的地方脆弱,還因為玻璃的著地點在落地的瞬間傳遞的應力波是那種樣子而不是這種樣子。你甚至還可以接著解釋:影響玻璃杯的著地姿勢的包括當時的幾萬億個空氣裡面的分子和微塵……

總之,參與的分子太多了,而描述每一個分子都需要比較大的運算量。將這些海量分子一起模擬,這大大超出了所有計算機的計算能力,在可預見的未來根本就不可能。看,上帝用一個玻璃杯打敗了現在的人類。不過,我們根本就不需要這樣模擬:

需要複雜計算的情況有什麼共性?

真實世界是離散的、細緻的,不精確到每個原子(甚至更深)是無法準確的復原它們。但人類在模擬現實的時候,其實不需要那麼高的精準度。我們只想在視覺上復原(不需要人類肉眼解析度以下的細節)。那麼我們可以怎麼做呢?近似復原

最簡單的情況,我們如何渲染一個3D的小球呢?一個自然的想法是將之模擬成多面體,然後再通過漫反射的物理規律計算光的照度,然後根據光的照度渲染。如何計算光照度呢?將光線模擬為一個比較小的小球,計算小球的運行路線以及通過的數量……對不起,打住,這種級別的運算量任何電腦都很難 hold 住,尤其是在你要渲染阿凡達的時候。你問我,這不是近似模擬嗎?是近似模擬,但幾乎沒有使用這種演算法的渲染器,它們使用的演算法是這樣的:將小球的邊緣的顏色計算好,然後在小球被人看見的這一個面選擇幾個點,計算這些點的顏色值,再然後對顏色進行插值。你大呼,這不是欺騙嗎?或許是吧,但這樣可以保證計算的速度。這裡的渲染顯然利用了一個(心理學、物理)原理,物體不會有銳利的顏色變化,所有的顏色變化都是連續的。

現有的商業引擎在渲染一些難以處理的情況(比如水、煙霧)時,更是各顯神通,使用各種各樣巧妙的演算法來計算。所謂巧妙的含義就是:又快又好的欺騙人眼。至於這是不是現實世界的運行規律,那並不重要。只要看起來像的,就是好演算法。

隨著硬體的提速,大家可以使用更「慢」的演算法(大部分時候,更「慢」意味著更好)。我絲毫不懷疑,20年之後,計算機可以使用演算法欺騙人眼。但即使是這時候的演算法,依然是近似復原,只不過精度已經超過了人眼解析度的極限。

為什麼在虛擬現實技術等用物理和數學規律模擬世界需要耗費大量的計算?

回到最初的問題,這個問題有兩個答案:

  1. 因為模擬世界很難。
  2. 因為我們的技術還不夠強大。


【量子計算機不能解決此問題】

計算機圖形學,只有在學了之後才會發現,這其實就是一門玄學。。。

現實中不同的物體由不同的形狀,材質,會產生不同的鏡面反射和漫反射效果,而在計算機處理時,物體是被分割的——模型,貼圖,材質光反射屬性。

這顯然已經產生了失真,可即便如此,對每一部分,計算機還是不能足夠的還原,為了簡化計算和實現逼真效果,很大的一部分工作變成了調參數

模型是一種近似(由很多個小三角形構成),貼圖是一種近似(顏色的失真,貼圖貼到模型上時失真)。

最根本的分歧在於現實世界是連續的,無限分割的,而計算機世界是離散的,有限分割的。計算機的計算速度永遠只是自然界計算速度的一部分,永遠不能超越自然界。

在計算機中有經典的P問題和NP問題,而模擬自然界是比NP更難的演算法,NP大致可以認為是O(2^n*P(n)),而模擬自然界是O(n!)。

我先不說別的,說光線追蹤(Raytracing),以下是最naive的演算法。

大致解釋說,對於每一個像素,都會從鏡頭射出一條光線,光線遇到物體,讀取這個物體的顏色,然後顯示在該像素點上。(光線是比較方便的自創的說法)

但是物體會反射,遇到鏡面反射時,就要按對應的反射角再次射出一條光線,再作出計算得到最後的顏色,比如紅色燈光下黃色物體會顯示橙色(與光和物體的各種參數有關)

而且物體會漫反射,也就意味著這一條光線遇到物體後需要發散很多條光線出去。

而且第二次發出的光線遇到物體時也需要同樣的計算過程,在大自然中,這種迭代是無限的。(Iteration)

每一次迭代都會做一次如下計算。

大致就是點x"在光線w"影響下,鏡面反射與漫反射(積分部分)後的成像。

下圖是一個例子,隨著迭代次數的增加而顯示出不同的效果。隨著光的反射次數增加,最明顯的變化是越來越亮。

我們永遠都達不到大自然的計算量,也就是O(n!),但我們似乎做的還不錯,因為trick。

虛擬現實並不如字面所說的是模擬現實,而是欺騙使用者,讓人以為其展現出了現實。

比如渲染(Photorealistic Rendering),大家都會有印象,渲染過後會更真實一點,也會更模糊一點,渲染做的就是在一個像素中隨機射出多條光線,然後取平均值,然而即使用再多的光線去試探,都只是一種近似。

比如對影子的模糊處理(soft shadows),並不是根據光線計算出來的,而是直接模糊處理,簡而言之就是看著像就行了,而看著像則是通過調整參數來實現的。

程序員甚至篡改物理規律,一般光線在空氣中的能量散失與距離平方成反比(1/d^2),而計算機世界一般取與距離一次方反比(1/d)。

【馬上就要考試了居然還在寫答案也是醉了。(1月第一次寫這個答案)】

發幾張圖大家體會一下,即使運用了很多trick,計算量還是無情的以數量級的形式增長。

單次光線追蹤技術

+soft shadows

+透明物體高光(透明物體和半透明物體是搞死人的東西)

+多次光線追蹤迭代

【0121修改失敗,0121第二次修改,0304第三次修改】


我們老師舉過一個例子,求圖論中兩點最短路的(偽)O(1)演算法:用繩結和繩子做成點和邊的模型,然後抓住兩點一拉,啪,最短路求出來了。。比Dijkstra不知高到哪裡去。。物理解演算法問題還有一些其他例子,比如視頻:Steiner問題的肥皂膜解法

物理世界裡輕易能辦到的一些計算,用計算機做就很費勁,我認為這只是abstraction penalty的一個例子而已。。你可以把計算機硬體看作是物理世界裡的一個解釋器,而解釋是有效率下降的。


The universe itself is a giant quantum computer.

—— Seth Lloyd, Professor of Mechanical Engineering at MIT and the designer of the first feasible quantum computer


在閑聊的時候, @dazhi xu 跟我提到過從物理的角度講,計算機是用電磁相互作用來計算自然的。而自然本身包含了4種基本相互作用。這個應該也是計算困難的原因之一或者需要運行一個世界的必要性吧。

或者,各種物理實驗就可以看成是一台對於特定問題設計的計算機吧。


其實真實世界算的也挺慢的,只不過你感覺不到。。。


我認為「需要複雜計算的問題的共性是什麼」其實等價於「如何判斷複雜計算的必要性」。關於這個問題我想補充一下自己的理解。

從系統的視角來看,在我們所要研究的問題的邊界內,只要同時滿足以下三個條件,複雜計算就是必要的:

1. 系統內存在的個體數量達到一定量級;

2. 系統內個體之間存在相互作用,且相互作用的複雜度(包含作用種類的多少和作用機制的複雜程度)達到一定程度;

3. 研究該問題時所需建立的模型系統必須完全達到真實問題系統中個體的量級和相互作用的複雜度,才能還原出問題系統真實的宏觀特徵;

如果只是要做出某種模擬,那麼只要如 @王霄池 所說,使模擬能夠具有足以欺騙人眼(或者說是人眼無法區分模擬與真實場景的明顯差異)的宏觀特徵即可。這樣我們可以通過各種演算法對模擬進行近似簡化(視覺、聽覺等等),而無須在模擬系統中實現與真實系統等價的個體量級及作用機制的複雜度,從而使計算變得沒有那麼複雜。


虛擬現實技術的複雜性,不僅在於現實世界的物理過程的複雜性。

現實世界的物理過程本身都是沒有解析解的(解析解就是只用數學就能計算出表達式,比如單擺的振動過程,但是這些事理想狀態),所以必須用數值模擬的演算法來解出答案(最近在做一個關於數值模擬的PPT),而這一過程中有一個採樣和誤差累計的過程。所以計算量是很大的,比如流體力學裡的直接數值模擬,就算用世界上最先進的計算機也只能模擬10000個網格尺度的三維湍流,如果要得到更詳盡的過程還需要跟高的運算能力。

還有一點也是不能忽略的,就是混沌理論。混沌理論的一個很好的例子(其實不能稱其為例子,比如比較恰當)就是蝴蝶效應。樓主可以自己百度下。

真實世界裡的過程就如樓上所說的,物理過程本身不需要計算,它是自然發生的。可能一個轉瞬即逝的過程其實是很複雜的,但不能影響它的發生。


「為什麼真實世界裡無論簡單還是複雜的物理過程發生得都毫不費力?」—— 也很費力,不過這個 simulator 運行你的腦子更費力。兩個費力加在一起,你就覺得不費力了。


首先,你要知道機器虛擬現實的原理,要知道機器繪製一個自然界的物體,一般情況下是沒有現成的幾何函數可以使用的。一般都是使用網格來模擬一個物體,可以是四變形網格,三角網格,或者是多邊形網格。如果想使被描述的物體與現實的物體更接近,就要用更小,更多的網格去逼近顯示物體,使人眼無法區分是曲面,還是一個個網格形成的物體, 這個數據量是巨大的。而且,自然界物體的普通運動,機器使用一系列的數學和物理模型去反正,每個運動變換都要對,那些龐大的網格進行計算。這個計算量是驚人的,是普通計算機無法承受的。都會採用集群。進行並行計算。


因為真實世界是無數個原子同時計算自己的狀態,,,,


「現實中的『發生』」和「程序中的『模擬』」沒有理由放在一起做比較。

能和「程序中的『模擬』」做比較的,應該是「現實中對細節的『觀測』」。

而這兩者都很費力。

比如說,現實中桌子上放個球,很容易。你用 3D 建模拖個平面拖個球也很容易。

這時球動起來了,你要模擬每個分子的運動,這就很難,但是同時,你在現實中觀測每個分子的運動也很難。


題主你需要區分清楚兩個個概念,運動學和動力學。

虛擬現實里的運動引擎主要涉及運動學,一般只涉及位移的描述。比如CAE分析里常用的運動學分析軟體ADAMS,一般是不計算mises應力和應變的,僅描述多體運動關係,離計算機所能模擬到的真實世界,差的還很遠。

動力學引入了力的概念,採用計算機模擬、模擬力學問題的理論基礎是有限元,在工程計算里有很多有限元分析軟體(如ANSYS,ABAQUS,Nastran等),除動力學問題外,它們還能模擬現實世界更多種情況,如非線性的高速侵徹、碰撞、斷裂,線性的拉壓、力熱耦合,及流體力學,流固耦合等。

虛擬現實強於表面渲染和人機交互,相比於計算機所能模擬物理世界的範圍,僅僅是九牛一毛。

而計算機所能模擬物理世界的範圍,又僅僅是真實世界的九牛一毛。

在我們所,做最簡單的靜力熱試驗的時候,可能做數次結果都會有波動,模擬分析結果僅作參考而已,更別說氣彈性,振顫,雜訊,氣動(亞,超聲速),水動,兩相流,電磁,流固耦合這些複雜的情況了。計算機里的數學模型是高度簡化的模型,幾何模型也必須進行細節清理(否則網格量會上億),更別說湍流、紊流問題中的NS方程是科學界無解的難題。CAE分析結果目前只能做參考,虛擬試驗在向取代真實試驗努力和無限逼近,但永遠無法替代真實試驗。

為什麼真實世界裡無論簡單還是複雜的物理過程發生的毫不費力?

因為真實世界的一顆石子都由上萬億個分子原子夸克玻色子組成,包含著本次宇宙爆炸以來的大部分主要元素,並經過了百億年的演化。因為成千上萬的石子,河流,山川遵循著宇宙四大基本作用力,互相作用和運動著,有條不紊,決不報錯,永不停息。

因為真實世界是最偉大的計算機。

= == == == == == == == =

複雜計算有什麼共性?巨大的計算量一定是在解方程,比如光源轉換方程,有限元單元方程,解方程通過線性代數的方法就是在消矩陣,當網格(多邊形)量大的時候,矩陣可能達到幾千萬階或者上億階,由此帶來巨大的計算量,內存消耗量,帶寬佔用。其實對於大部分問題,我們只需要經過適當的簡化建立適當的數學模型,需要的計算量並不是很大。超大計算量一般發生在多種問題同時需要處理的情況,數個光源在不同材質甚至水面的渲染,頭髮皮膚這種複雜材質的渲染,多物理場耦合,多學科優化等。越接近真實世界,計算量越大。


你自身處在「現實世界」這個系統里顯然是觀測不到他運算到底費不費力的。。。


虛擬機永遠快不過宿主機,這就是原因


從計算機圖形學的角度我再補充一下。

愚蠢的人類在做真實感繪製的時候都是用的繪製方程,可惜的是這個方程是沒有解析形式,就算它是人類用自己的各種模型yy出來的... 所以我們需要蒙特卡洛採樣的方法來做這件事情。

然而迭代收斂實在是難以趕得上光傳播的速度,這是真的。你無法用弱小的電腦去和光的傳播速度匹配,所以難以做到實時繪製真實感也是正常的。

再說一點,場景也是愚蠢的人類做出來的,這部分其實也是很耗費時間的... 可以說一個好的場景真的是無法想像它被投入了多少心血才做出來。

說白了,圖形學就是個給人看的玩具,想來真的,放下電腦去外面看看吧。

世界這麼大,總有你想要的。


……一個不太嚴謹的假想

用Env表示進行模擬計算的環境(邏輯意義上的計算機)

f表示被模擬的計算過程

Env(f)返回一個被「加速」的過程

如果有cost(f) &<= cost(Env(f))

那麼可以構造出cost(Env(f)) &<= cost(Env( Env(f) )),即不停地在那個計算環境中構造出計算環境然後加速計算過程……

……那麼理論上這麼做最終消耗的計算量接近於零……這……已經無敵了……


試問一個本身處於計算過程中的變數如何來計算這個計算本身?就如同我們沒法理解和感知多維空間一樣,我們本身就是世界運行的一部分,包括你會提到這個問題也是在計算之中,那麼我們自然不可能達到真實世界的計算水平,因為真實世界的計算永遠快我們一步。

上面有人提到《失控》那本書,其實另一本《複雜》也講述了世界從一分為二時所產生的混沌,世界的運行基礎簡單來講就是一個邏輯斯蒂方程,但隨著時間的推移和變數的增大,規律的東西變得模糊且無法令人理解。

我想始終有那麼一個上帝故意給我們的雙眼罩上一片葉子,讓我們無法完整的理解這個世界吧。。。


在虛擬機里跑虛擬機會更慢


計算機世界屬於物理世界,物理世界中的事件只能被模擬,而不能重現。

模擬必然是精度與速度的tradeoff。

因此想要精度趨向正無窮,那麼速度同時也會趨向於零。

以上都是我猜的。。。

不曉得量子計算能否能讓模擬的精度與速度和物理世界相等或相近。。。


推薦閱讀:

準備開一家vr吧,類似於現在的網咖或網吧,有沒有前景?
從 CES 2016 發布的產品來看,今年虛擬現實發展的趨勢會是怎樣的?
VR對設計領域會有什麼影響,設計師在VR方面能學習什麼?
虛擬世界中殺人是否會引起愧疚感?
VR 頭盔除了可以用來看電影外,還能幹什麼?

TAG:物理學 | 虛擬現實VR | 計算機圖形學 | OculusRift | HTCVive |