Grand Theft Auto V 图形研究(2)
生活随笔
收集整理的這篇文章主要介紹了
Grand Theft Auto V 图形研究(2)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
原文鏈接?http://www.adriancourreges.com/blog/2015/11/02/gta-v-graphics-study-part-2/
Level of Detail
如果說Rockstar(GTA的開發(fā)商)在一個(gè)領(lǐng)域優(yōu)于競爭對手的,那就是接下來要介紹的LOD。洛杉磯的游戲世界隨著多邊形和細(xì)節(jié)的多少,有許多不同的版本,即便是在線直播游戲時(shí)也不會(huì)被加載畫面阻塞,使得整個(gè)游戲體驗(yàn)更加的身臨其境。Lights 光源
你看到的遠(yuǎn)處所有的小的光源都是真實(shí)的,你可以朝著他們的方向開車,并找到投射光源的燈泡。 Aaron Garbut 上面這段話是 ? Rockstar North的創(chuàng)始人和藝術(shù)總監(jiān) Aaron Garbut,在PS3版發(fā)布不久前宣布的。 他的描述是否準(zhǔn)確?讓我們思考下面這個(gè)夜景: 簡直像真的一樣:你看到的每個(gè)小的光斑都都是用一個(gè)使用32x32? texture的正方形渲染出來的。 ? ?? 盡管用? instanced geometry(實(shí)例化幾何體) ?進(jìn)行了大量的batch,但仍有數(shù)萬多邊形推送到了GPU ? ?? ? ?? ? ?? ? ?? ? ?? ? ?? ?? 而且這些并不只是靜態(tài)幾何體:車輛的前燈也在街道上移動(dòng),實(shí)時(shí)更新。當(dāng)然,這個(gè)距離并不需要渲染所有的車輛模型,只要兩個(gè)前燈就足以創(chuàng)作視覺。但如果你要接近一些遠(yuǎn)處的光源,LOD會(huì)增加,并最終繪制汽車的整體模型。Low-Poly Meshes 低多邊形網(wǎng)格
我們回到前面討論的那一幀上,游戲世界里一些相當(dāng)廣闊的部分在一幀中被渲染。例如我們下面討論的山的渲染: ? ?? 那么遙遠(yuǎn)的小山究竟是什么樣呢? 原來這個(gè)山一點(diǎn)也不小,實(shí)際上Vinewood Hill(現(xiàn)實(shí)中的好萊塢山)是一個(gè)跨越了幾平方公里的區(qū)域,以及許多的房屋和建筑。 還有伽利略天文臺(tái)坐落在山頂上,以及?Sisyphus Theater(希臘劇場),?Lake Vinewood(好萊塢水庫),可以在所有的這些區(qū)域里探索或駕車,并由數(shù)千的draw-calls 和大量的多邊形來繪制。 但在當(dāng)前這個(gè)場景里,這個(gè)區(qū)域很遠(yuǎn),所以用低多邊形的版本來渲染:只有1個(gè) draw-call和2500多邊形。 ? 所有的渲染是用一個(gè)讀取了多張Diffuse texture的Mesh做到的。即便有一些工具可以把Mesh轉(zhuǎn)化為低多邊形的版本,但這個(gè)轉(zhuǎn)化并不能完全的自動(dòng)化處理,即便是 Rockstar的3D美術(shù)師花費(fèi)幾天時(shí)間來手動(dòng)的微調(diào)Mesh,也不會(huì)感到驚訝的。 另外一個(gè)例子, 是城市中“小首爾”區(qū)的幾條街,也是由一個(gè)draw-call來繪制的。游戲世界的低多邊形版,在高效的渲染 reflection ?? cubemap這類不需要非常高細(xì)節(jié)和很高分辨率時(shí)非常的有用。游戲里如果只有一個(gè)LOD等級的話,實(shí)時(shí)的渲染環(huán)境 cubemap因?yàn)榘舜罅康膸缀误w,會(huì)非常昂貴或無法實(shí)現(xiàn)。 ?
Asset Streaming 資源流加載
像在GTA中給不同的LOD創(chuàng)建多個(gè)版本的游戲世界,是非常龐大和耗時(shí)的任務(wù),是一個(gè)相當(dāng)挑戰(zhàn)。但是,即便你完成了這些,也僅僅做到了一半:你可以在硬盤上放幾個(gè)G的model和texture,但如果不能找到方法來高效的加載到內(nèi)存或GPU顯存上就沒有任何意義。 GTA V是實(shí)時(shí)的流加載資源, 當(dāng)你進(jìn)入地圖的另一個(gè)區(qū)域時(shí), 加載/卸載model和texture。真正使人印象深刻的是它實(shí)時(shí)的實(shí)現(xiàn)了并在幾個(gè)小時(shí)內(nèi)保持穩(wěn)定。 技術(shù)上最大的成就,就是把這一些都壓縮到了家用機(jī)的內(nèi)存,并讓游戲得以流暢的運(yùn)行。我們流加載和壓縮到內(nèi)存的越多,就意味著可以比GTA4有更高數(shù)量級的細(xì)節(jié)。 Aaron Garbut 當(dāng)然,這種流加載系統(tǒng)也有其局限性:例如當(dāng)你切換角色時(shí),相機(jī)要從地圖的一個(gè)區(qū)域跳到另外一個(gè)區(qū)域,這種情況下,流加載系統(tǒng)會(huì)突然的過載,也是完全可以理解的,它需要5秒來整理和趕上進(jìn)度。但GTA5通過縮小/轉(zhuǎn)化/放大的動(dòng)畫很好的處理了這個(gè)過渡,并不會(huì)覺得完全像是加載畫面。 當(dāng)你正常駕車時(shí),移動(dòng)速度足夠慢,流加載系統(tǒng)就有足夠的帶寬來保持更新。開飛機(jī)的情況就不一樣了:它們對流加載系統(tǒng)來說太快了,這也就是為什么駕駛飛機(jī)的速度與現(xiàn)實(shí)相比大大的減慢了。飛行時(shí),mesh會(huì)以和駕車相比更低等級的LOD來渲染以緩解流加載的壓力,但有時(shí)仍然會(huì)有資源的"突然出現(xiàn)"。Reflections 反射
因?yàn)榍懊娣治龅膸瑳]有那么多的水,讓我們通過下面場景更接近的看看游泳池和海洋是如何渲染的: 就像之前所見的,這個(gè)場景被正常的渲染:生成一張環(huán)境Cubemap(下圖),主要用來渲染物體對周圍的反射效果。 例如,游泳池的梯子的反射就歸功于這張cubemap。 注意角色和一些像梯子這樣的小的物體對象并沒有在這張cubemap里。 在渲染水之前場景看起來像這樣: 渲染水面和這個(gè)完全不同,它并不包括上面這張cubemap。Reflection Map 反射貼圖
首先,是生成" planar reflection map ",這張圖分辨率很低,是240x120,處理類似cubemap的生成,但只生成一張buffer并且有梯子和角色出現(xiàn)。 場景被顛倒的渲染,隨后做對稱采樣就可以獲得正確的反射了。Refraction Map 折射貼圖
圖像的一部分被提取出來:這是水面所在的部分用來創(chuàng)建折射貼圖,用來模擬后面的折射效果:光從水面下的射出。 這時(shí)加入一些“不透明水”的藍(lán)色(水越深顏色越強(qiáng)),以及 caustics( 焦散)效果。最終的貼圖為原始buffer的一半大小。Combination 組合
要組合不同的buffer,再繪制一個(gè)矩形多邊形來表現(xiàn)游泳池的水面。依靠bump texutre,逐pixel的擾動(dòng)多邊形的法線作出一些水運(yùn)動(dòng)的錯(cuò)覺。 海面的情況不只是擾動(dòng)法線,繪制一個(gè)每幀更新頂點(diǎn)的整體的Mesh來模擬波浪的運(yùn)動(dòng)以替換之前的四邊形。 根據(jù)每個(gè)pixel的法線, ? pixel shader在不同的點(diǎn)獲取 reflection和 refraction ?map信息,通過菲涅爾方程計(jì)算出坐標(biāo)。 ? ?? ? ?? ? ?? ? ?? ? ?? ? ?? ? ?? ? ?? ? ?? ? ?? ? ?? ? ?? ? ?? ? ?? ? ?? ? ?? ? ?? ? ?? ? ?? ? ?? ? ?? ? ?? ? ?? ? ?? ? ?? ? ?? 最后的結(jié)果非常不錯(cuò),加入真實(shí)擾動(dòng)的水面效果非常有說服力。Mirrors 鏡面
鏡面的渲染和水面是完全一樣的技術(shù),由于鏡子只反射光,甚至比水面更簡單,不用考慮來自鏡面后的折射效果。 不像水面,鏡面是完全平坦的,很難隱藏用 較低分辨率時(shí)問題,texel相當(dāng)?shù)拿黠@。通過設(shè)置給予較高的分辨率可以增加反射的質(zhì)量。 生成 ? reflection map需要額外的pass渲染場景而且相當(dāng)?shù)某林亍.?dāng)鏡面在視口外或者玩家距離很遠(yuǎn)時(shí)(這時(shí)看起來像一個(gè)黑色的四邊形),引擎可以避免執(zhí)行這個(gè)額外的pass。Spotlights 聚光燈
記得在每幀開始前生成的環(huán)境貼圖并不包含任何角色和車輛,只有主要的建筑和風(fēng)景吧? 這種情況下,下圖中車的前燈是如何反射在潮濕的路面上的呢? 在幀分析的部分這個(gè)效果并不明顯,因?yàn)槟鞘且粋€(gè)白天的場景,但畢竟所有的 G-Buffers ?都被合并了,燈光也被順序的繪制。每個(gè)燈泡,光投射到的其他mesh被計(jì)算了,也包括像潮濕馬路的高光澤度表面上很強(qiáng)的反射高光的效果。 ?每個(gè)光源都要繪制一個(gè)mesh,這個(gè)mesh類似一個(gè)細(xì)分的八面體,只是通過修改vertex shader,使它與光暈的形狀相匹配。 這個(gè)mesh沒有texture,目的是為了讓光暈內(nèi)所有接觸的Pixel可以調(diào)用一個(gè)Pixel Shader。Shader會(huì)根據(jù)Pixel深度,與光源的距離,法線以及specular/glossiness屬性,來動(dòng)態(tài)的計(jì)算光照。 上面的線框視圖就是用來計(jì)算路燈光源的影像的Mesh。 這里你可以看到延遲管線(Deferred)和前渲染管線(Forward)相比的一大優(yōu)勢:延遲管線可以在場景中渲染大量的光源,而 pixel shaders調(diào)用盡可能的少,只涉及了被光源影響到的pixel。而前渲染管線中,你必須要計(jì)算所有受光源影響的fragment,即使這個(gè) fragment實(shí)際并不任何光的影響,或者隨后被其他的fragment遮擋。 Well, since you made it this far, you can check-out the final part about post-effects.
轉(zhuǎn)載于:https://www.cnblogs.com/TracePlus/p/5123301.html
總結(jié)
以上是生活随笔為你收集整理的Grand Theft Auto V 图形研究(2)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: angr符号执行用例解析——CSCI-4
- 下一篇: 51单片机通过DHT11温度传感器读取温