存不存在四維或者更高維的圖形渲染器?

在數學上,高維的投影變換與三維相比只是增加了維度,實現高維圖形的渲染理論上完全是可行的。那麼存不存在現有的高維圖形渲染器呢?或者實現高維渲染器的難點在哪裡?


應該可以,先做一個四維攝像機,生成一個5x5的mvp矩陣,把四維投影成三維,然後再從三維投影成二維,顯示在屏幕上,然後你就可以透過屏幕觀察四維世界了。然後用xbox手柄,左搖桿控制下xy兩軸,右搖桿控制zw兩軸,操縱你的四維攝像機位置,其它幾建控制視點方向,雖然經過投影后觀察不完全,和三維投影二維一樣,但你控制四維相機從不同角度觀測。屏幕雖小,卻能讓你完整的觀察四維空間的每一處。

二維矩形(四個頂點)到三維的立方體(八個頂點),只是把原來四個頂點的xy坐標不變,改變了一下z,變成8個頂點,然後和原來頂點鏈接起來;三維到四維超立方體應該也一樣,複製出8個頂點來,xyz不變,只是改變下w,然後和原來八個頂點連接起來,一共16個頂點。

寫個程序,然後在四維空間里創建一個球和一個四維立方體,用你的手柄轉著倒出看看,到底是啥樣子,屆時你應該能體會三體里章北海艦隊看到的景象了。


可以做,三維渲染實際上是求了一個三維物體的二維投影。四維渲染可以看做求一個四維物體的三維投影。推導過程和二維投影差不多。之前 iOS 上有個應用就是渲染一個四維的線框超立方體(為什麼是線框呢?因為四維超立方投影到三維物體上是有內部結構的,擋住了就看不到了)。第四維怎麼控制呢?通過手指的拖動,面前的超立方體會在四維上移動,可以類比於在一個三維立方體上滑動一個二維平面,同時觀察其界面的形狀。

下圖是一個超立方體的三維投影在第四維上移動:

對了應用的名字叫做「4D」


一張圖給出結論:可以。

這是超複數的julia集合在3維的投影的渲染。

但是同時,這個能簡單渲染出來是因為超複數julia集合有很好的旋轉對稱特性。如果更加一般的四維圖形就要更加複雜一些。


第四維是時間啊,所以只要渲一段3D動畫,那就是四維的了。


計算機圖形學課上講到了圖像變換。雖然我沒有聽的太明白,但是

三維圖形的變換是升到四維變換之後再降到三維的。

======= 10月11日 ===================

想了兩天,究竟我們能不能去觀察四維空間,四維空間是什麼樣的。或許可以從二維世界看三維,來獲取一些推論。

1、降維,進入二維空間

如果有二維空間,並且二維空間中存在生物,存在「太陽系」,那麼他們的太陽系是什麼樣的呢?

[「太陽系」]

那麼,他們的太陽系應該是上圖的樣子。上圖本身就是二維圖形,請不要腦補成三維的。

那麼,如果二維空間里有智慧生物,生活在圖像上,那麼,它拍一張太陽的照片出來,那副照片是什麼樣的呢?

[美麗的太陽]

為了看到二維空間里的視角,這裡的二維空間留有了一定的高度。這個高度只是為了方便理解,不然真的就什麼的看不見了。我也不知道她們在一個完全沒有高度的世界裡怎麼看東西,總之,拍出來的照片就是上面那個樣子了。

因為是二維空間,也同樣會有遠近遮擋的問題,最終,拍出來的太陽就是上面那個樣子——一維的圖像,一條彩色線段。

2、二維世界眼中的三維

現在,我們把自己帶入了二維世界,並且希望從二維世界中看到三維的世界。

想要從二維空間中看到三維,我們需要一個輔助工具——時間。由時間引領我們,從二維的世界中,看到三維空間。

[二維空間上的物體移動]

假設我們在二維空間上有一個圓環,受了不明外力,導致了向一個方向的移動(圖中向上),在經過一段時間後,移動到了右邊空間上的位置。

如果我們消除時間的變化,認為這整個過程是一體的,同時將中間狀態做連接,我們將得到一個三維物體——鋼管。

[二維空間中看到的三維物體]

現在,我們雖然在二維空間中,但是通過我們的努力,我們構造出了三維空間和其中的物體。

那麼,在二維空間中的我們,要如何看到三維空間中的物體呢?這裡,我們選擇三個坐標系面作為基準面,對三維物體進行投影操作,得到三個二維圖像。

[三幅奇葩圖像]

上面三幅圖像,由於我也不好選坐標系,所以壓根就沒有去標坐標系。重點看最右側豎條狀的圖。最右側豎條狀的圖,可以對應到二維物體移動過後的軌跡圖。

即在二維平面上的物體移動的軌跡,可以看作是一個三維物體在二維的投影。而左側的兩幅圖形,則是二維物體進行形態變換(長寬不變或減少)後的結果,進行移動後產生的。

現在,我們在二維平面世界中看到了三維物體的投影。並且,如果想在二維世界中看到三維世界中的物體,看三幅正交投影應該是最清晰明了的做法。

3. 在二維世界中,給三維物體拍個照

題主問題的是渲染器,好歹我們在二維空間中用照相機給構造出來的三維物體拍個照呀!

[二維空間中,三維物體的照片]

通過使用偉大的一維照相機,我們在二維空間中給三維物體從不同的角度照了三張照片。根據拍攝的角度不同,得到了三條長短不一的線段。

真棒。

4.小結

在二維空間中,給物體拍出來的三張照片。雖然看起來在二維空間中也可以找到物體拍出來相同的照片,但是如果我們給三維空間中的物體塗上漸變色,而不是這樣的單色,二維空間將不再能夠拍出來相同的照片了。

在二維空間中,需要通過三個二維面來描述一個三維物體。二維相機拍攝出了一維的照片,即使二維世界中的生物掌握了透視的技巧,也無法從中領悟到三維空間,因為照片雖然具有透視的功能,但是它遮蔽了後面的物體,無法完成的還原整個二維景象。

想要在二維空間中描述三維物體,需要三個能夠描述整個二維平面的工具(類似於我們現在的全景視頻)。

5.回到三維

通過上面的描述,我們重新站回到三維的空間中,使用上面同樣的方法,準備去看一看四維空間的樣子。

說一個下面會用到的基本推論:

描述一個N維空間,至少需要N個(N - 1)維空間。

例如:

描述三維空間,至少需要三個二維空間。描述四維空間,至少需要四個三維空間。

這個推論很重要,下面我們將重複二維看三維的過程,從三維看四維。

6.透過三維,接觸四維

待續。

有時間再更,不過說出來你可能不信,我們可以看到四維空間,我們看到的四維空間是有意義的,不是混亂的。我們看到的四維空間,放到屏幕上呈現的形式是——四張三維透視圖。


可以參考下這個叫 Miegakure 的遊戲

Miegakure (Hide and Reveal): A 4D puzzle-platforming game.

技術細節: youtube.com 的頁面


這是一個好問題,數學理論上說是可行的。

難點在於高維度多數據在低維度的離散化,說到底還是數學上數據的離散化問題。

計算機適合光柵化二維圖像,所以高維數據必須先離散化成一系列可描述節點(方法很多,其中一種直觀的方法類似樓上說的相機,其實就是數據投影來實現高維數據的離散化),然後在在這些節點繼續離散化下一維數據。

那麼問題來了,如果我們可以找到數據離散化的數學方法,那麼到底要離散多少次呢?這裡其實有是另一個複雜的數學問題——數據相關性。簡單點的打個比方,一個複雜的n*m列的數據,就是根據矩陣的秩(參見 線性代數中,"秩"的命名由何而來? - 年輕人要努力的回答)先將矩陣分級(為什麼要分級?維度數據是否存在優先順序,這個數學領域也有研究,好像叫競爭函數,具體記不得了,數學大牛可以補充),然後在節點上重新離散化下一維度數據,直到數據二維了,就可以計算機光柵化了。


可以的,反正都是投影到二維平面上。對於實際的工程實現來說,主要的困難可能包括(全是個人印象不一定對):

  1. HLSL的寄存器應該是只有xyzw四個分量,不能加進去第五個,所以做超過三維的齊次坐標的處理大概會比較沒有效率
  2. z-buffer這個東西。三維的圖像投影到二維上形成遮擋關係,靠的就是這個z-buffer。當一個三維坐標變換到視空間的時候,除了屏幕上的x和y以外,有一個隱藏的坐標z,它不影響在屏幕上顯示的位置,但是影響顯示時表示的「深度」,所以可以用來計算遮擋關係。然而超過三維的時候,就不是z-buffer了,而是zw-buffer,zwuv...-buffer,它不止有一維,所以不知道要怎麼表現遮擋關係……
  3. 光照計算。四維空間里的光照是個什麼鬼咯……


渲染媒介的空間特性。

當前屏幕都是平面的。2d的渲染效果與我們現實體驗完全一致。

在屏幕渲染3d效果的,只是個投影。與現實體驗有一定差距。

可以充分發揮3d渲染的渲染媒介應該是一種可以投影與操控的立體空間媒介。而不是當前的平面媒介。


不行,就算能做到的都是我們自以為的。低維無法看到感受到高維.身體是我們進入高維的障礙。等有一天我們思維跟身體分離。思維也許能進入四維。光速是我們三維世界的最快速度。思維可以比光速更快。愛因斯坦都只能對超過光速以後的事做個猜測。 真的別以為我開玩笑。不認同的人以後在那碰到我了記得補個贊


推薦閱讀:

pbrt中為什麼認為光線傳遞是平穩馬爾可夫過程?
為什麼很少有渲染器能處理色散?
某些知名裝修(如酷家樂)網站的 10 秒出渲染圖技術,是怎麼實現的?
如何評價C4d的插件Aronld?
能不能寫一點關於Maxwell Render渲染器的一些實例教程?

TAG:計算機圖形學 | 渲染器 | 高維幾何 |