一面:電話面試 一個人
第二個人
1.測試性能分析表格 得出結(jié)論(控制變量法) FPS 輸入輸出延遲
2.游戲參數(shù)設(shè)置 影響
3.V-Sycn G-Sycn介紹
4.抗鋸齒
5.各向異性過濾
6.平時玩的游戲(?
二面:視頻面試 一共三個人
第一個人
1.自我介紹
2.詢問家常
3.介紹項目 人員分工 具體邏輯代碼 樣式等處理
4.算法題 冒泡排序
第二個人 (和電話面基本一致)
1.測試性能分析表格 得出結(jié)論(控制變量法) FPS 輸入輸出延遲
2.游戲參數(shù)設(shè)置 影響
3.V-Sycn G-Sycn介紹
4.抗鋸齒
5.各向異性過濾
6.平時玩的游戲(?
第三個人 電話面試的那個人
職業(yè)規(guī)劃 未來發(fā)展
有什么問題嗎
筆記
游戲性能指標(biāo)
FPS:顯卡1s可以渲染的幀數(shù)
輸入延遲:用戶輸入到輸入結(jié)果反映到顯示器上的時長
它們?nèi)Q于
顯卡計算能力
內(nèi)存頻率
CPU&GPU主頻等因素
場景復(fù)雜度
抗鋸齒優(yōu)化程度
屏幕刷新率
垂直同步
幀生成時間
OpenGL渲染管線
什么是OpenGL:開放圖形庫的應(yīng)用編程API 由各個硬件廠商進(jìn)行硬件加速的實現(xiàn)又碌,專注于圖形的渲染长捧,不包括輸入等其他功能
整個過程是
用戶輸入
CPU進(jìn)行邏輯運算 準(zhǔn)備渲染內(nèi)容并交給GPU
GPU執(zhí)行渲染管線(pipeline)
生成幀緩存等待輸出
輸出到顯示器
渲染管線流程
頂點數(shù)據(jù)
-
頂點變換 (頂點著色器)
-
三維坐標(biāo)變換成二維坐標(biāo)
模型頂點構(gòu)建
變換到世界坐標(biāo)
變換到相機坐標(biāo)
變換到屏幕坐標(biāo)
三維到二維
-
形狀(圖元)裝配 面處理 這個階段是根據(jù)索引將頂點連接在一起胧谈,組成線蒜田、面單元
幾何著色器 將頂點著色器的輸出值執(zhí)行裁剪、透視分割、視口變換后進(jìn)入光柵化階段。
光柵化 將連續(xù)的物體結(jié)構(gòu)(頂點信息&線面方程芝发?)映射到離散的像素級別,確定需要被繪制的像素苛谷,完成插值工作(像素值插值)
片段著色器 對光柵化后的像素進(jìn)行著色工作辅鲸,產(chǎn)生每個像素值的顏色,alpha值腹殿,z-depth值 景深
-
測試與混合
裁剪測試
透明度測試
模板測試
深度測試
混合測試
輸出到幀緩沖
將mesh(模型)從磁盤中讀取到內(nèi)存
-
CPU對每一個mesh設(shè)置渲染狀態(tài)独悴,調(diào)用draw call讓GPU渲染所有使用同一個渲染狀態(tài)的mesh
渲染狀態(tài)包括 頂點著色器 像素著色器 材質(zhì) 紋理等
相同渲染狀態(tài)的mesh可以在一個batch中讓GPU處理,因此可以通過合并draw call來進(jìn)行優(yōu)化锣尉,因為設(shè)置渲染狀態(tài)是一件比較耗時的工作
-
設(shè)置渲染狀態(tài)的同時將mesh信息從內(nèi)存全部拷貝到顯存
- mesh信息包括 定點位置 法線 切線等
頂點著色器對所有頂點進(jìn)行坐標(biāo)轉(zhuǎn)換 最終轉(zhuǎn)換到camera坐標(biāo)
根據(jù)camera的可視視角對頂點信息進(jìn)行裁剪刻炒,去掉視野外的
執(zhí)行Culling,去掉所有非朝向camera的頂點(面自沧?) 屏幕映射
-
光柵化坟奥,將連續(xù)的物體結(jié)構(gòu)(頂點信息&線面方程?)映射到離散的像素級別拇厢,確定需要被繪制的像素爱谁,完成插值工作(像素值插值)
光柵化的本質(zhì)是坐標(biāo)變換、幾何離散化孝偎。就是將幾何信息轉(zhuǎn)換成一個個的柵格組成的圖像的過程访敌。
確定需要被繪制的像素:通過對每個像素點進(jìn)行采樣,判斷采樣點是否在三角形內(nèi)部來決定是否需要繪制
紋理信息的插值在這一步完成衣盾,為每一個像素得到正確的紋理坐標(biāo)
基于采樣的抗鋸齒就在這一步執(zhí)行:SSAA, MSAA等寺旺,越好的抗鋸齒會導(dǎo)致越高的計算量
-
像素著色器/片段著色器:對光柵化后的像素進(jìn)行著色工作,產(chǎn)生每個像素值的顏色势决,alpha值阻塑,z-depth值
- 陰影的渲染在這一步進(jìn)行,越多的細(xì)節(jié)會需要進(jìn)行越多次的著色過程
-
產(chǎn)生的每個像素值經(jīng)過
z-test深度測試(去除所有被覆蓋的像素)果复,
通過的像素再進(jìn)行混合測試(可以用于透明材質(zhì))陈莽,
模板測試(一個掩膜,可以用于限制畫面范圍)据悔,
color mask(對顏色通道進(jìn)行控制)后传透,得到最終顏色耘沼,放進(jìn)顏色緩沖區(qū)
顏色緩沖區(qū)即幀緩沖
基于后處理的抗鋸齒在這一步之后進(jìn)行极颓,主要通過對像素信息的分析以及一些緩沖信息得出邊緣信息,并對邊緣進(jìn)行重著色
垂直同步
垂直同步主要聚焦在生成幀緩沖之后
需要解決的問題:
顯卡輸出幀與顯示器顯示不同步導(dǎo)致的畫面撕裂
產(chǎn)生理由:
顯示器與顯卡的幀率不同群嗤,在顯示器從前緩沖區(qū)讀取像素信息還沒有讀取完的時候菠隆,顯卡完成了新的一幀并向前緩沖區(qū)寫入,導(dǎo)致顯示器從前緩沖區(qū)讀到兩幀不同的畫面
解決辦法:
垂直同步強制將GPU與顯示器的刷新率保持一致,在顯示器讀完一幀之前骇径,不允許顯卡寫入前緩沖區(qū)
問題:
延遲&輸入延遲變高躯肌,F(xiàn)PS降低
三重緩存
使用前中后三個幀緩沖區(qū)來解決鎖FPS的問題,當(dāng)垂直同步信號來之前破衔,顯卡產(chǎn)生的幀在中&后緩沖區(qū)交替緩存清女,當(dāng)同步信號來了之后,將最新的幀緩沖與前緩沖區(qū)交換晰筛,保證了低延遲嫡丙,同時不會有畫面撕裂的問題,但是會對顯存大小有要求
G-Sync和Adaptive-Sync(Free Sync)
搭載G-sync和Free sync的顯示器可以動態(tài)調(diào)整他們的刷新率而不是固定的1/60秒或者1/144秒掃描完一張畫面读第,他會去適應(yīng)顯卡的輸出幀曙博,而不是在這里等著,說白了就是:顯示器刷新率變頻技術(shù)怜瞒。這樣的話不僅可以解決畫面撕裂父泳,解決錯幀,還可以保證幾乎沒有的鼠標(biāo)延遲吴汪。
抗鋸齒
主要有基于采樣的抗鋸齒和基于后處理的抗鋸齒惠窄,還要了解一下最新的DLSS,以及這些抗鋸齒會對游戲產(chǎn)生的影響(一般而言抗鋸齒等級越高浇坐,游戲FPS越低睬捶,DLSS是例外,開了DLSS后游戲的FPS可能會升高)可以參考下面兩篇文章
失真
-
幾何失真
- 幾何體邊緣和一個像素部分覆蓋
-
透明失真
- 貼圖包含透明圖案,由于貼圖本身由個數(shù)有限的像素陣列所組成,當(dāng)判斷被渲染幾何體透明與否的時候會將貼圖的柵格化特性帶入最后的渲染結(jié)果.
-
子像素失真
- 柵格化物體小于一像素
-
紋理失真
- 包含大量高頻信號的紋理未被充分采樣
-
渲染失真
- 像素渲染器在對每個像素進(jìn)行顏色填充時產(chǎn)生的失真.
基于采樣的反鋸齒技術(shù)
提高渲染時的采樣數(shù)來減少鋸齒.
其中,采樣數(shù)量,采樣位置,采樣類型和采用或和模式,影響畫面質(zhì)量
采樣位置
OGAA(理想的四點采樣) 規(guī)整的采樣點排列 (不是最優(yōu)解)
SGAA 稀疏擺放-任意兩個采樣點不會再N x N網(wǎng)格的同一行 列以及對角線上.(N皇后問題)
采樣類型
SSAA 超采樣抗鋸齒 每個采樣點都進(jìn)行獨立計算
MSAA 多重采樣抗鋸齒 每個像素點僅計算1次,對深度和模板值仍計算n次(降低性能開銷)
CSAA (Nvidia 2006) 覆蓋采樣抗鋸齒 保留MSAA像素點計算,深度和模板值處理方式的通識,增加了覆蓋采樣.后者并不存儲任何著色,深度或模板信息,而是存儲了一個二進(jìn)制的Coverage值作為參考(增加了少量性能開銷但在輸出質(zhì)量上更高),剝離覆蓋率這個特性,針對地增加覆蓋采樣信息,更高的狂鋸齒效率.
[圖片上傳失敗...(image-ef8655-1592376782781)]
采樣混合模式
常見或和方法 相同權(quán)重混合 box filter (傳統(tǒng)MSAA采用
(AMD 2007 HD2900) 可編程的混合能力 根據(jù)采樣點離像素中心的距離決定相應(yīng)的混合權(quán)重
雖然基于采樣的抗鋸齒算法不僅原理簡單近刘,在采樣點足夠的情況下也有很優(yōu)秀的效果择镇,但在性能方面仍然會帶來巨大的開銷
后處理抗鋸齒(分析抗鋸齒)
渲染出未使用抗鋸齒的原始畫面(無任何采樣和縮放),隨后嘗試通過對成品畫面的分析來減少鋸齒和失真苹丸。
延遲渲染中先不進(jìn)行光照計算,而是在所有的緩沖區(qū)都計算完成(法線,色彩,深度信息等)最后融合這些緩沖區(qū)結(jié)果,在融合郭崇中剔除掉被遮蓋的物體,進(jìn)行針對性的光照運算,避免大量額外運算.
- 復(fù)雜度由O(mn) m代表總的幾何體的像素總量 降低到O(m'n) m'代表屏幕分辨率 n代表光照數(shù)量座咆。由于在很多情況下m'<<m,延遲渲染的性能優(yōu)勢就尤為明顯案淋。
沖突
MSAA的原理座韵,我們可以發(fā)現(xiàn)MSAA之所以能節(jié)省性能是因為它僅僅處理幾何體邊緣相關(guān)的那些像素——計算混合完相關(guān)像素信息后覆蓋到原有值上。但現(xiàn)在由于渲染管線被打亂踢京,特別是由于最終的合成渲染是針對數(shù)個緩沖區(qū)執(zhí)行誉碴,那些幾何體原始信息已經(jīng)丟失,便無法在最終渲染中判斷到底哪些是邊緣而哪些不是瓣距。這樣一來MSAA只能對所有的像素進(jìn)行采樣黔帕,和SSAA已經(jīng)沒有什么區(qū)別了。
多重采樣抗鋸齒的缺失一直是延遲渲染的一個痛點蹈丸,當(dāng)然也有一些科學(xué)家試圖引入額外的信息來輔助MSAA在這種渲染流程中判斷邊緣信息成黄,但出于各種各樣的原因應(yīng)用并不廣泛呐芥。
RTX20系列特性
實時光線追蹤性能提高
DirectX12 Ultimate
可變速率著色集中處理細(xì)節(jié)豐富的區(qū)域,從而提高性能
同步浮點和整數(shù)處理使Turing GPU 性能提高
-
DLSS 深度學(xué)習(xí)超級采樣 訓(xùn)練GPU渲染清晰的游戲圖像
顯卡性能不足以支持高分辨率流暢運行的時候
用低分辨率的硬件要求,實現(xiàn)了接近于高分辨率的顯示效果