欧美日韩精品国产,欧美aⅴ99久久黑人专区,亚洲综合久久久久,中文字幕一区二区三区精彩视频

我的訂單|我的收藏|我的商城|幫助中心|返回首頁(yè)
搜維爾科技[www.gentlemenlisten.com]>服務(wù)>案例分享 應(yīng)用研究>案例分享>軟件開發(fā)

比肩原生4K畫質(zhì),《永劫無(wú)間》搭載DLSS流程公開

文章來(lái)源: 作者:frank 發(fā)布時(shí)間:2021年10月28日 點(diǎn)擊數(shù): 字號(hào):

自 2021 年 8 月全球發(fā)布以來(lái),大逃殺類新作《永劫無(wú)間》在全球掀起了一波又一波的游戲狂潮。游戲源自中國(guó)玄幻的美術(shù)風(fēng)格給世界各地的玩家們留下了極為深刻的印象。

作為網(wǎng)易的獨(dú)立子公司,24 Entertainment 工作室在其首款桌面端游戲《永劫無(wú)間》就搏得了開門紅,迅速吸引了全球玩家的目光。游戲在發(fā)布第一周內(nèi)便登上 Steam 排行榜前 10 名,活躍玩家數(shù)超過(guò)《彩虹六號(hào):圍攻》、《Splitgate》等熱門游戲。

這場(chǎng)大逃殺式的動(dòng)作冒險(xiǎn)將場(chǎng)景設(shè)立在五光十色的山巔、郁郁蔥蔥的森林和斷壁殘?jiān)墓懦侵校恳粋€(gè)都蘊(yùn)含了驚人的細(xì)節(jié)。為了抓住環(huán)境的美感,以足夠的性能和幀率支撐多達(dá) 60 人的多人游戲,24 Entertainment 與知名技術(shù)企業(yè) NVIDIA 和 Unity 展開了親密合作。

在與 NVIDIA 的合作中,24 Entertainment 提前用上了深度學(xué)習(xí)超采樣 (DLSS) 技術(shù):一項(xiàng)以渲染高幀率、高分辨率實(shí)時(shí)圖形為目的的新渲染技術(shù)。DLSS 可借助人工智能舉重若輕地增強(qiáng)圖形性能和整體質(zhì)量。

為了維持高性能,《永劫無(wú)間》以低分辨率渲染,避免了像素著色計(jì)算等流程。在運(yùn)行期間,DLSS 將利用神經(jīng)網(wǎng)絡(luò)生成高分辨率圖像,為玩家們保留美術(shù)細(xì)節(jié)。這樣一來(lái),游戲不僅能生成高質(zhì)量的圖像,還能借助人工智能填補(bǔ)圖像缺失,使得渲染速度提高幾乎一倍,這對(duì)于如此大體量的多人競(jìng)技游戲非常關(guān)鍵。

在 DLSS 的幫助下,24 Entertainment 成功實(shí)現(xiàn)了高幀率、高分辨率和高清細(xì)節(jié)。可以說(shuō),DLSS 的 4K 幾乎可以比肩原生 4K。Unity 2021.2 版本將支持并維護(hù) DLSS 技術(shù)。

經(jīng)過(guò)訓(xùn)練的 AI 能參考前幾幀畫面進(jìn)行渲染,輔助抗鋸齒等功能。并且,同一游戲的神經(jīng)網(wǎng)絡(luò)模型無(wú)須再度訓(xùn)練即可處理各種畫面。

《永劫無(wú)間》中的DLSS

在幾年前《永劫無(wú)間》的開發(fā)初期,團(tuán)隊(duì)在 Unity 可編程渲染管線(SRP,一種支持添加自定義C#渲染架構(gòu)的管線)的基礎(chǔ)上建立了自己的渲染管線。

在 NVIDIA 的 Developer Relations 專家及 Unity Core Support 的支持下,24 Entertainment 還率先在 Unity 中應(yīng)用了 DLSS 技術(shù)。

為了幫助其他開發(fā)者更深入地了解 DLSS 在實(shí)時(shí)環(huán)境下的運(yùn)作機(jī)制,《永劫無(wú)間》的圖形開發(fā)團(tuán)隊(duì)披露了部分技術(shù)應(yīng)用細(xì)節(jié)、提示及開發(fā)時(shí)遇到的挑戰(zhàn)。

高采樣(Upsampling)

DLSS 應(yīng)用的第一步是在低分辨率圖像中進(jìn)行高采樣。

部分24 Entertainment需要解決的難題

為了降低采樣對(duì)最終畫面的影響,24 Entertainment 將這一步放在了泛光、色調(diào)映射、特效光等后處理效果之前,所有后處理效果都應(yīng)用在了采樣后的高清圖像上。

整個(gè)管線的運(yùn)行流程如下:

第 1 步:將畫面設(shè)為高質(zhì)量模式,再使用 NVIDIA 的 getOptimalsettings 接口來(lái)計(jì)算輸入數(shù)據(jù)大小和最佳清晰度。不同的質(zhì)量模式有著不同的圖像縮放比例。

第 2 步:使用 NVIDIA 的 CreateFeature 接口在各個(gè)攝像機(jī)中抓取特征,據(jù)此設(shè)置質(zhì)量模式、輸出圖像大小及銳化程度。銳化后的輸出圖像可包含更多細(xì)節(jié)。

第 3 步:在后處理之前使用以下代碼執(zhí)行 DLSS 推算:

commandBuffer.ApplyDLSS(m_DLSSArguments);

準(zhǔn)備輸入數(shù)據(jù)

團(tuán)隊(duì)稍微調(diào)整了渲染管線來(lái)保證輸入圖像可以兼容 DLSS。

由于低分辨率圖像需要按一定比例進(jìn)行放大,游戲窗口需要緩存到 G-Buffer(Geometry Buffer,包含色彩、法線、坐標(biāo)信息的緩存紋理)中,才能正確在管線中行進(jìn),而窗口必須以正確的比例重新創(chuàng)建。

pixelRect = new Rect(0.0f, 0.0f,

Mathf.CeilToInt(renderingData.cameraData.pixelWidth * viewportScale),

Mathf.CeilToInt(renderingData.cameraData.pixelHeight * viewportScale));

commandBuffer.SetViewport(pixelRect); // RenderScale Supported

渲染完成后,DLSS的源圖像大小、目標(biāo)大小、目標(biāo)色彩渲染和目標(biāo)深度等參數(shù)將根據(jù)低分辨率原圖進(jìn)行設(shè)定。

int scaledWidth =

UpSamplingTools.Instance.GetRTScaleInt(cameraData.pixelWidth); int scaledHeight =

UpSamplingTools.Instance.GetRTScaleInt(cameraData.pixelHeight);

// Set the argument m_DLSSArguments.SrcRect.width = scaledWidth; m_DLSSArguments.SrcRect.height = scaledHeight;

m_DLSSArguments.DestRect.width = cameraData.pixelWidth;

m_DLSSArguments.DestRect.height = cameraData.pixelHeight;

m_DLSSArguments.InputColor = sourceHandle.rt;

m_DLSSArguments.InputDepth = depthHandle.rt

信號(hào)抖動(dòng)偏移(Jitter Offset)

接下來(lái)的問(wèn)題是輸入圖像的 Jitter Offset,這一步與時(shí)域上的樣本積累有關(guān)。

在渲染時(shí),著色器如果只渲染三角形所覆蓋的像素,會(huì)導(dǎo)致光柵化圖元變得分散,生成有鋸齒、不自然、邊緣不光滑的圖像。

如果渲染的分辨率更高,則圖像亦會(huì)變得精細(xì)、自然起來(lái)。然而,如果缺少分散的圖像樣本,要想生成連續(xù)的圖像信號(hào)會(huì)變得非常困難,更有可能產(chǎn)生鋸齒。

在 4K 分辨率下,鋸齒現(xiàn)象的確可以通過(guò)提高分辨率來(lái)緩解。但在 8K 分辨率下,此方法會(huì)導(dǎo)致渲染速度慢近四倍,并且很可能會(huì)產(chǎn)生紋理帶寬(內(nèi)存使用)的問(wèn)題。

另一種常見的抗鋸齒方法是由 GPU 硬件驅(qū)動(dòng)的多重采樣抗鋸齒(Multisample Anti-aliasing,常稱為MSAA)。MSAA 除了檢測(cè)像素的中心點(diǎn)外,還會(huì)檢測(cè)亞像素位置的樣本。三角形片元的色彩將根據(jù)圖元覆蓋的樣本數(shù)量進(jìn)行調(diào)整,來(lái)讓圖像邊緣更顯平滑。

時(shí)域抗鋸齒 (TAA) 是另一種跨幀累積樣本的方法。該方法將在每一幀上抖動(dòng)采樣位置,接著利用運(yùn)動(dòng)矢量混合幀之間的渲染色彩。

如果每個(gè)幀像素過(guò)去的色彩都可被識(shí)別,我們就可以利用這些過(guò)去的像素進(jìn)行抗鋸齒。

抖動(dòng)(Jitter)通常是指像素采樣位置的輕微調(diào)整,以達(dá)到累積多幀樣本的目的,免去了一次性解決欠采樣的必要。

24 Entertainment 之所以轉(zhuǎn)而采用 DLSS,就是因?yàn)樗粌H降低了渲染分辨率的要求,而且還生成邊緣平滑的高質(zhì)量圖像。

我們推薦在 DLSS 中使用的采樣模式包括 Halton 序列,一種看似隨機(jī)、覆蓋更均勻的低離散度序列。

Halton序列:

https://en.wikipedia.org/wiki/Halton_sequence

在實(shí)踐中,Jitter Offset 的應(yīng)用可以非常簡(jiǎn)單。要想實(shí)現(xiàn)高效的應(yīng)用,可以參考以下步驟:

第 1 步:在特定攝像機(jī)中根據(jù) Halton 序列生成不同圖像設(shè)定下的樣本。輸出信號(hào)的抖動(dòng)量應(yīng)該在 -0.5 到 0.5 之間。

Vector2 temporalJitter = m_HalotonSampler.Get(m_TemporalJitterIndex, samplesCount);

第 2 步:將抖動(dòng)量存儲(chǔ)到一個(gè) Vector4 中,將其乘以 2、再除以縮放后的分辨率,來(lái)將其應(yīng)用到屏幕空間的單位像素上。將結(jié)果存儲(chǔ)到 zw 組件中。

然后,使用這兩個(gè)值修改投影矩陣、改變總體的渲染結(jié)果:

m_TemporalJitter = new Vector4(temporalJitter.x, temporalJitter.y,

temporalJitter.x * 2.0f /

UpSamplingTools.GetRTScalePixels(cameraData.pixelWidth),

temporalJitter.y * 2.0f /

UpSamplingTools.GetRTScalePixels(cameraData.pixelHeight) );

第 3 步:將視圖投影矩陣設(shè)置為全局屬性 Unity_MATRIX_VP。頂點(diǎn)著色器會(huì)調(diào)用相同的函數(shù)來(lái)轉(zhuǎn)換屏幕上的世界位置,而將矩陣歸入該屬性可免去修改著色器的必要。

var projectionMatrix = cameraData.camera.nonJitteredProjectionMatrix;

projectionMatrix.m02 += m_TemporalJitter.z; projectionMatrix.m12 += m_TemporalJitter.w;

projectionMatrix = GL.GetGPUProjectionMatrix(projectionMatrix, true); var jitteredVP = projectionMatrix * cameraData.viewMatrix;

運(yùn)動(dòng)矢量

在解決 Jitter Offset 問(wèn)題后,接下便是借助工具生成運(yùn)動(dòng)矢量。

運(yùn)動(dòng)著的攝像機(jī)和對(duì)象會(huì)改變屏幕圖像,而要根據(jù)多幀樣本來(lái)生成圖像,則我們還需要抓取對(duì)象的前一位置。

例如,當(dāng)攝像機(jī)的位置從 q 變?yōu)?p 時(shí)(如圖所示),屏幕上的某個(gè)點(diǎn)很可能會(huì)被投射到另一個(gè)點(diǎn)上。將這兩個(gè)點(diǎn)相減便能得到此次運(yùn)動(dòng)的矢量,即前一幀相對(duì)于當(dāng)前幀的位置。

運(yùn)動(dòng)矢量可采用如下步驟計(jì)算:

第 1 步:在管線的深度信息通道中計(jì)算對(duì)象的運(yùn)動(dòng)矢量。通道中的深度信息主要用于描繪對(duì)象距攝像機(jī)的距離,輔助系統(tǒng)檢測(cè)“景深”。

第 2 步:根據(jù)前一幀的攝像機(jī) View Projection 矩陣移動(dòng)窗口、抓取前一窗口位置,再填補(bǔ)新像素。

第 3 步:在 DLSS 中寫入矢量相關(guān)的屬性。

我們可以根據(jù)不同的清晰度(分辨率)來(lái)計(jì)算對(duì)應(yīng)的運(yùn)動(dòng)矢量,通過(guò)按比例縮放矢量來(lái)實(shí)現(xiàn)想要的結(jié)果。這里,24 Entertainment 將矢量設(shè)為了負(fù)的寬高比。DLSS 要求運(yùn)動(dòng)矢量以像素為單位,而團(tuán)隊(duì)在屏幕空間中生成運(yùn)動(dòng)矢量,

之所以使用負(fù)號(hào),是為了在管線中互換減數(shù)(當(dāng)前幀)和被減數(shù)(前一幀)的位置。

m_DLSSArguments.MotionVectorScale = new Vector2(-scaledWidth, -scaledHeight); m_DLSSArguments.InputMotionVectors = motionHandle.rt;

《永劫無(wú)間》渲染循環(huán)集成概述

24 Entertainment 的渲染管線結(jié)合了延遲渲染和前向渲染。為了節(jié)省內(nèi)存,所有渲染對(duì)象都在放大之前作了分配。

DLSS 管理器會(huì)使用 RTHandle 系統(tǒng)在攝像機(jī)創(chuàng)建之際分為渲染對(duì)象分配一次內(nèi)存,省去為每次攝像機(jī)循環(huán)都分配一次內(nèi)存的必要。

RTHandle 系統(tǒng):

https://docs.Unity3d.com/Packages/com.Unity.render-pipelines.core@12.0/manual/rthandle-system-using.html

再到深度通道中生成運(yùn)動(dòng)矢量(僅包括運(yùn)動(dòng)對(duì)象),來(lái)實(shí)現(xiàn)時(shí)域上的 Jitter Offset 等效果。接著,在屏幕通道中生成攝像機(jī)的運(yùn)動(dòng)矢量。

DLSS 管理器支持在后處理開始時(shí)使用 RTHandle 系統(tǒng)為放大后的渲染對(duì)象分配內(nèi)存。

到這里,DLSS 推算已經(jīng)能獲取除信號(hào)抖動(dòng)以外所有參數(shù)信息了,再加上信號(hào)抖動(dòng)就可以實(shí)現(xiàn)時(shí)域化采樣了。

《永劫無(wú)間》的渲染管線帶有一個(gè)可以緩存攝像機(jī) Halton 采樣階段索引和矩陣抖動(dòng)與否等信息的系統(tǒng),并且所有光柵化步驟都采用了 View Projection 和 Jitter 矩陣,除了矢量通道。矢量通道采用的是無(wú)抖動(dòng)的矩陣。

24 Entertainment

關(guān)于充分利用DLSS的提示和技巧

Mip Map Bias

Mip Map 是一種預(yù)先計(jì)算好的、分辨率逐級(jí)遞減(后者為前者的二分之一)的圖像序列。它們可以有效地逐級(jí)過(guò)濾紋理,然后在原紋理中對(duì)所有組成屏幕像素的紋素進(jìn)行采樣。

在下例中,遠(yuǎn)離攝像機(jī)的對(duì)象會(huì)在低分辨率的 Mip Map 中被采樣,從而生成更符合實(shí)際的結(jié)果。

在為 DLSS 采集紋理樣本時(shí),一定要添加 Mip Map Bias。DLSS 與棋盤渲染等其他類似的上采樣方法一樣,需要在較高的分辨率下進(jìn)行采樣才能渲染出低分辨率的窗口圖像。這時(shí),在高分辨率下還原出的紋理不會(huì)顯得模糊。

Mip Map Bias可使用以下方法計(jì)算:

MipLevelBias = log2(RenderResolution.x / DisplayResolution.x)

如果輸出為負(fù),你可以利用偏差值回滾為更高分辨率的圖像。只有設(shè)置了 Mip Map Bias,DLSS 才能在采集低分辨率紋理樣本時(shí)維持圖像質(zhì)量不變。

緩存特征供攝像機(jī)使用

我們應(yīng)該在攝像機(jī)上緩存抓取的 DLSS 特征。

為了反映攝像機(jī)尺寸和質(zhì)量模式的變更,DLSS 必須抓取新的特征。有時(shí),多個(gè)大小和質(zhì)量模式相同的攝像機(jī)需要同時(shí)使用 DLSS 渲染。但每個(gè)特征都是根據(jù)前一幀的信息總結(jié)而來(lái),某個(gè)特征只能適用于特定攝像機(jī)。

在《永劫無(wú)間》中,24 Entertainment 以每臺(tái)攝像機(jī)的哈希值作為鍵值將各個(gè)特征緩存到了一個(gè)字典中,藉此保證每個(gè)特征只能被對(duì)應(yīng)的攝像機(jī)使用。

commandBuffer.ApplyDLSS(m_DLSSArguments, cameraDescriptor);

切忌將 DLSS 與其他抗鋸齒方法混合使用。最后,不要將 DLSS 與其他抗鋸齒方法組合使用。作為一種新技術(shù),DLSS 與其它抗鋸齒方法一同使用可能會(huì)產(chǎn)生不可預(yù)測(cè)的瑕疵。

Unity 2021.2中的DLSS

Unity 與 NVIDIA 有著緊密的技術(shù)合作關(guān)系,Unity 引擎和 HDRP 都已經(jīng)集成了 DLSS 及上述所有功能,進(jìn)一步的集成開發(fā)也將展開!

Unity 將自 2021.2 版本起支持并維護(hù)所有 NVIDIA 技術(shù)。以下為 NVIDIA 技術(shù)集成至 Unity 的詳情:

?

引擎核心的 DLSS 集成

在引擎內(nèi)核中,我們專門為 DLSS 模塊編寫了一層恰當(dāng)?shù)?C# API。這一層代碼還負(fù)責(zé)處理平臺(tái)兼容性、引擎內(nèi)的 #define(用于在運(yùn)行平臺(tái)上屏蔽特定的DLSS代碼)以及提供正確的說(shuō)明文檔,它屬于在 SRP 中調(diào)取完整 DLSS 的官方 API,也是其它可編程渲染管線的整合基礎(chǔ)。

說(shuō)明文檔:

https://docs.Unity3d.com/2021.2/Documentation/ScriptReference/NVIDIA.GraphicsDevice.html

HDRP 中的圖形集成

DLSS 以動(dòng)態(tài)分辨率系統(tǒng)(DRS) 功能的形式應(yīng)用在了 HDRP 中,功能也使用了上述的腳本 API。

動(dòng)態(tài)分辨率系統(tǒng)(DRS) 功能:

https://docs.Unity3d.com/Packages/com.Unity.render-pipelines.high-definition@12.0/manual/Dynamic-Resolution.html

我們以《永劫無(wú)間》的 TAA 抖動(dòng)算法為基礎(chǔ),在后處理之前類似地應(yīng)用了分辨率上采樣,再并以全分辨率渲染后處理效果。

并且 Unity 的 DLSS 還有了一點(diǎn)改進(jìn):應(yīng)用以動(dòng)態(tài)分辨率系統(tǒng)為基礎(chǔ),允許實(shí)時(shí)切換分辨率。動(dòng)態(tài)分辨率系統(tǒng)可完全兼容 RTHandle 系統(tǒng),并支持硬件驅(qū)動(dòng)的 DLSS(基于紋理鋸齒)及軟件驅(qū)動(dòng)的分辨率修改(基于游戲窗口)。而前邊提到的 Mip Map Bias 功能可用于所有 DRS 過(guò)濾器和技術(shù)。

為了減少粒子重影現(xiàn)象,我們建立了一個(gè)特殊的渲染通道,來(lái)保證動(dòng)態(tài)分辨率系統(tǒng)與其它 HDRP 功能的兼容。

此外,我們還建立了一個(gè)包含 DLSS 版本信息和幀狀態(tài)等信息的調(diào)試面板。最后,DLSS 現(xiàn)在支持 VR、實(shí)時(shí)光追、DX11、DX12 和 Vulkan。

Unity 2021.2中使用DLSS

首先確認(rèn)項(xiàng)目使用的是 Unity 2021.2 版本(Unity 2021.2 版本現(xiàn)已正式發(fā)布,可通過(guò) Unity Hub 下載),以及確保項(xiàng)目中使用的渲染管線為 HDRP。

啟用 DLSS 的方法如下:

第 1 步:按照下圖中的步驟找到安裝 NVIDIA 軟件包的 Fix 按鈕。

打開 Project Settings 窗口

在 Quality 設(shè)置下找到 HDRP 配置界面

選擇當(dāng)前項(xiàng)目使用的 HDRP 配置

找到 Rendering 渲染功能配置組

找到 Dynamic resolution(動(dòng)態(tài)分辨率)組(DLSS 是通過(guò) HDRP 的 Dynamic resolution 功能來(lái)提供的)

可以看到提示說(shuō) DLSS 功能還未被激活:NVIDIA Deep Learning Super Sampling (DLSS) is not active in this project. To activate it, install the NVIDIA package. 點(diǎn)擊 Fix(修復(fù))按鈕激活 NVIDIA DLSS 功能

第 2 步:安裝完畢以后可以在 Dynamic resolution 參數(shù)組中啟用 DLSS,并選擇調(diào)整相關(guān)參數(shù)。

第 3 步:最后在場(chǎng)景主攝像機(jī)中啟用 DLSS。

電話:010-50951355 傳真:010-50951352  郵箱:sales@www.gentlemenlisten.com ;點(diǎn)擊查看區(qū)域負(fù)責(zé)人電話
手機(jī):13811546370 / 13720091697 / 13720096040 / 13811548270 / 13811981522 / 18600440988 /13810279720 /13581546145

  • 暫無(wú)資料
  • 暫無(wú)資料
  • 暫無(wú)資料
  • 暫無(wú)資料
  • 暫無(wú)資料
主站蜘蛛池模板: 南平市| 广德县| 芜湖市| 建昌县| 抚州市| 平陆县| 宿州市| 廊坊市| 化州市| 宝山区| 澎湖县| 巧家县| 修水县| 页游| 潢川县| 绩溪县| 武陟县| 班戈县| 嘉荫县| 翼城县| 安福县| 沁阳市| 德令哈市| 延边| 同仁县| 卢氏县| 平和县| 南和县| 色达县| 长葛市| 马公市| 新田县| 鸡西市| 荆州市| 瑞安市| 景洪市| 丰镇市| 桦南县| 新干县| 长兴县| 邵阳市|