從RTX&DXR看圖形學的發展

自從換了AI的工作,圖形學反倒成為了心頭中不可割捨的一部分。最近中國圖形學研究和國際前沿都發生了顯著的變化,我們來分析一下。圖形學的研究發展到了什麼地步。


首先:

傳統的管線渲染和路徑追蹤。

在兩三年以前,這兩項技術都有著自己嚴格的應用場景,既路徑追蹤等技術應用於影視渲染,動畫,等領域。而管線渲染應用於遊戲,數據可視化,等實時性能要求很高的領域。

現在優秀的硬體能渲染一個較為真實的4k*120hz的畫面,我們稍加計算一下就可以知道。4k解析度大概是1200w像素,120hz意味著屏幕渲染一幀的時間僅為0.0083秒既8毫秒。一秒的IO量大概是14億像素

而更通用的標準,1080p*60hz 一秒的IO數量大概是一億兩千萬像素,最高一幀的時間大概是0.016秒也就是16毫秒

這也就是為什麼現在移動GPU也能在低精度下渲染4k&60hz了 例如蘋果的A10X / A11 Bionic 完全可以有在移動端渲染4k &120hz的能力

A11 Bionic Die

同時定製化DSP俗稱NPU的加入,使得移動端機器學習計算有了獨立的指令集的情況下效率大大提升。

就在燈塔國的圖形學相關事業,在軟硬體結合的發展中大步前進的時候。中國的圖形學研究還屬於大公司的玩物。甚至大公司都沒心情玩的地步,浙大CAD和北航VR兩個實驗室在國內的地位相對於其他計算機相關重點實驗室可以說地位十分尷尬,以至於2017年出的成果還長這個樣子:

北航VR lab 主頁的demo

這種等級的畫質恐怕在國產遊戲公司中都是無法生存的

而浙大CAD的周昆教授等在微軟系的帶領下 有了一些可見的成果。而僅限於基礎研究領域的研究,沒有突破性的開源工作,沒有實質性的產品,導致上述兩個實驗室幾乎沒有對國內的遊戲產業和影視動漫產業產生什麼實質性的技術推動。

在很長一段時間內 國產動畫電影製作機構都被喜洋洋,高鐵俠,熊大這類五毛特效的「無毛「動畫,無腦IP所佔據。倒不是說毛在動畫製作中有多麼重要,而是中國影視製作領域,根本沒有心,也沒有技術去完成好的設計,精美,賞心悅目的設計。

國產」無毛「動畫

就在皮克斯的跳跳燈已經發布了幾十年之後,國產動畫終於迎來了曙光,第一個無論從畫面還是故事上更廣為人接受的動畫,雖然還是老套的孫悟空題材,並且出生於西遊題材已經被改編爛掉的2015-2016年,但是無論畫面還是特效,製作都非常有良心,非常有意境

毛猴子終於有了毛

最難能可貴的是,這次孫悟空這隻毛猴子,終於有了毛。並不是說這是一部多好的動畫電影,但是,這確實是中國動畫電影的一個里程碑。

而圖形學盛會SIGGRAPG,也愈來越像計算物理頂會。其各種物理模型的加入可以使人們更精確的渲染水,毛髮,流體,模擬軟性材質等等。

模擬液體與毛髮交互的多尺度模型 【SIGGRAPH 2017】_嗶哩嗶哩 (゜-゜)つロ 乾杯~-bilibili?

www.bilibili.com

很顯然,圖形學在2017年之前的這幾年,陷入了一個很尷尬的地步,兩種渲染的基礎理論早就有,修修補補也差不多了,有的改了這又出了新的問題。還有什麼好研究的呢? 那就加一些其他東西吧,計算物理加一加,流體力學SPH方程求解加一加,湍流加一加,應該就能發SIGGRAPH了吧。

時間一轉眼到了2017年,隔壁兄弟AlexNet,ResNet,FCN,MXnet,Faster-RCNN等等各種神經網路的加入使得機器視覺領域的進步飛快,CVPR很快成了炙手可熱的會議,情況甚至從成了各行各業轉CS變成了各行各業轉AI,AI全行業轉CV。

於是,各個階層的圖形學從業者都開始思考,深度神經網路和圖形學,能碰出什麼火花。包括我自己。附上之前探討光線追蹤器的文章

Winshare:Monte-Carlo Ray Tracing System (一)原理以及設計?

zhuanlan.zhihu.com圖標

在2017年中完成路徑追蹤器和實時渲染輪子的過程中,突然發現兩個有趣的問題,我們來深入探討一下:

First One

現在的實時渲染中Zbuffer起著遮擋剔除的作用,一個典型的Zbuffer灰度如下圖所示

一個典型的Zbuffer灰度表示

我們可以發現一個問題,如果是同一個物體,深度信息構成的Zbuffer相鄰位置之間不可能出現突變。既我們可以很簡單利用求導的方式判斷分類Zbuffer的區域是否是一個物體。於是利用很簡單的演算法就能夠得到物體的輪廓信息。

而這FCN等等分割網路需要的 像素級標註數據。於是,我們可以藉助一個三維引擎和Zbuffer實時生成無數的完全正確的像素級標註數據。而在實時渲染品質足夠的條件下,完全可以取代對傳統的ImageNet等等數據集的依賴。

Second One

這是常見的蒙特卡洛-路徑追蹤中低採樣的圖。

低採樣8 SPP

高採樣 25k spp

可以看到,除去噪點不說,高採樣的整體亮度和暗部細節和邊緣過度要好得多。但是路徑追蹤/光線追蹤方案的優勢是對光的準確反應,相比而言低採樣 的信息其實是足夠的。

那麼,我們可否把光線低採樣率的折射,反射信息,以及材質信息,光源等信息作為參數,以高採樣作為訓練樣本,訓練結果使得輸入低採樣,AI 模型降噪,增強後輸出。實現實時光線追蹤呢?


How game engine help computer vision~?

www.youtube.com

思路一的現實,

實際上已經有相當多的研究在進行

相信在不久的將來,計算機視覺領域將完全擺脫對數據集的依賴而是依靠逼真的渲染產生的像素級標註和渲染數據來訓練神經網路。相信這種形式,能夠將計算機視覺的正確率,推向極限。

生成示例

上圖的過程中,這一演算法闡述了生成數據集的演算法,相對來說是非常簡單的,同時我們也不必要拘泥於這個演算法,這類數據生成演算法的設計難度是可以忽略的。此文章鏈接如下:

UnrealCV: Connecting Computer Vision to Unreal Engine?

arxiv.org


對於第二個思路

我們可探討的事情就更多了。NVIDIA的 @文刀秋二 在<High Performance Graphics 2017>上發表了

SVGF?

behindthepixels.io

並獲得了最佳論文,每個像素的顏色首先被分解成直接光照和間接光照兩部分。然後我們通過除以像素上的紋理信息(Demodulate Albedo)得到像素的Irradiance(照度),接著對分別對直接光照和間接光照的Irradiance信息進行時間和空間上的混合Filter來重建因為樣本極度稀疏所丟失的信息。對Irradiance進行Filter之後,再把紋理信息疊加回來。這樣做的好處是,紋理的細節並不會因為Filter的強度過於大而丟失掉。在Pipeline的最後,我們採用現在引擎里非常流行的Temporal AA,更進一步的消除畫面上殘留的抖動,保證結果序列幀間的穩定。

追蹤Pipeline

基本流程就是,現在時間上用Exponential Moving Average積累像素的Irrdiance顏色信息用來增加每像素在1SPP情況下的有效樣本數量,同時在時間上積累Luminance的First & Second Moment去估計每像素的方差大小。方差大小又作為後續Spatial Filter中Edge Stopping函數的輸入去更好的指引Spatial Filter在不同噪點區域的力度。

在當時的工作中,對於時間和空間序列中的靜態場景,其Denosing效果是優異的,但是對於動態場景,其效果就要差很多,而鑒於我們的日常應用里都是一些高度動態化的場景。所以這篇文章算是一場革命的前哨。當時普遍認為,這項突破性的技術,可能需要三四年才能完成商用。

之後的一段時間,經過了長期積累,中國影視應用的圖形學研究的集大成者,《媽媽咪鴨》上映,這是中國動畫產業朝著迪士尼,皮克斯,夢工廠,工業光魔這些如雷貫耳的名字追趕的一個里程碑作品。成本2億,製作耗時2年,凝聚了原力動畫來自中美兩國近400名幕後工作人員的心血。這是中國第一次有成熟電影工業,導演,IP的動畫電影,是第一次中國的動畫作品具有打向世界市場的能力。價值觀普世,老少皆宜,富有娛樂性和教育意義。最難能可貴的就是,這次,動物不僅有了毛,還非常的好和逼真。畫面,鏡頭,設計都達到了好萊塢前些年的平均水準,著實不易

出品方南京原力和CEO&導演趙銳頓時名聲大噪,站上了中國製作公司的頭把交椅。

一片可喜可賀中,國內圖形學研發看似走上了快車道,騰訊買斷Unity源碼。更多企業開始涉及Unreal,圖形和遊戲相輔相成,一片大好。但是,圖形領域薄弱的基礎,對於圖形研發的漠視,仍然大規模存在於中國的公司中。遊戲產業中的底層垃圾們也嘗嘗會說一句,畫面什麼的根本不重要,老夫做遊戲的時候鍵盤只有三個按鍵,Ctrl,C,V。

在這種國外大步跨越,國內小步追趕的大環境下,一貫BUG的NVIDIA&Microsoft入場了......

______________________________________________________________手動牛逼預警風格線

微軟公布DXR/12,在新版的DX12(原本就存在)中支持實時光線追蹤。

DX12加入的全新光線追蹤管線

這次在API層面對DX12的改進,主要是加入了一個全新的管線專門執行光線追蹤的任務。以後讓GPU發起任務的方式除了現有的光柵化渲染,和通用計算以外,新加入了一個追蹤光線的調用

相關技術說明:

Announcing Microsoft DirectX Raytracing!?

blogs.msdn.microsoft.com圖標

NVIDIA公布RTX技術,在Volta架構顯卡中,加入了實時光線追蹤加速。

相關技術說明:

Introduction to NVIDIA RTX and DirectX Raytracing | NVIDIA Developer Blog?

devblogs.nvidia.com圖標

demo展示

【畫質炸裂1080p】歡迎來到次世代!微軟DXR&amp;英偉達RTX實時光線追蹤視頻合集_嗶哩嗶哩 (゜-゜)つロ 乾杯~-bilibili?

www.bilibili.com

在這個系列API中原先複雜的光線追蹤器被API管線化為一個借口 基本的demo結構如下

// An example payload struct. We can define and use as many different ones as we like.struct Payload{ float4 color; float hitDistance;};// The acceleration structure well trace against.// This represents the geometry of our scene.RaytracingAccelerationStructure scene : register(t5);[shader("raygeneration")]void RayGenMain(){ // Get the location within the dispatched 2D grid of work items // (often maps to pixels, so this could represent a pixel coordinate). uint2 launchIndex = DispatchRaysIndex(); // Define a ray, consisting of origin, direction, and the t-interval // were interested in. RayDesc ray; ray.Origin = SceneConstants.cameraPosition. ray.Direction = computeRayDirection( launchIndex ); // assume this function exists ray.TMin = 0; ray.TMax = 100000; Payload payload; // Trace the ray using the payload type weve defined. // Shaders that are triggered by this must operate on the same payload type. TraceRay( scene, 0 /*flags*/, 0xFF /*mask*/, 0 /*hit group offset*/, 1 /*hit group index multiplier*/, 0 /*miss shader index*/, ray, payload ); outputTexture[launchIndex.xy] = payload.color;}

可以看得出 。相比單純的GPU數值積分版本的光線追蹤器,新的結構被大大簡化,並且由於加速結構的存在我們單步追蹤的時間也被大大壓縮,再加上AI Denosing,對於主流場景的渲染,在同樣的效果前提下,三倍的提升綽綽有餘。

跟隨發布的還有NVIDIA Volta架構的最新計算卡GV100,32GB HBM2 gram,單卡雙精度7.4floaps,單精度14.8tfloaps,機器學習118tfloaps 支持實時光線追蹤,在AI Denoiser中性能異常的強悍。

Performance of GV100

我們其實根據之前的計算,現在的硬體至少要提高三倍才能滿足實時光線追蹤的需求。如今看來,恰好GV100在硬體上滿足了我們的需求,令人詫異的是,進步如此的快,應該是從硬體到光線追蹤管線設計都下了很大的功夫。其技術創新能力實在是令人汗顏。

目前,主流的廠商都加入了RTX&DXR的技術陣營 國內的圖形學發展又進入了新一輪的技術追趕周期中。任重道遠。

如同 @文刀秋二 所說:

The future has just begun~

推薦閱讀:

Rocket Training: 一種提升輕量網路性能的訓練方法
3D卷積神經網路Note01
Focal Loss for Dense Object Detection解讀
淺談深度學習的技術原理及其在計算機視覺的應用
brox近期論文

TAG:計算機圖形學 | 計算機視覺 | 深度學習DeepLearning |