在機能有限的情況下只對玩家容易關注的元素採取高幀率,是否可行。


直到我玩出這個bug之後我想這個問題能解決了


不行,因為攝像機(你的視點)是移動的。

實際上可以這樣:遊戲世界邏輯(控制邏輯、物理引擎)是一個低幀率(比如20、30幀),渲染在高幀率上。


本來就是很尋常的操作,但這隻能減少CPU佔用,而目前遊戲很少會遇到CPU瓶頸。

CPU蒙皮和植被計算多採用這種做法,起伏水也可以,總之就是需要高頻計算的地方,很尋常的LOD手段。

不過要記得做這個事情的時候必須錯幀執行,否則只會是一幀卡一幀流暢。


放個最近的實例,《超級馬裏奧 奧德賽》

New Donk City裡面:馬裏奧自身穩定60幀,場景裏的人物離得很近的60幀,離遠點變30幀,再離原點20幀,再遠一點連3D模型都不用了,都是2D貼圖在動

反正除了數毛社也沒人會注意到,高幀數也就這麼確保了

來源:下面那個不存在的騙人網址


完全可以

現在有了Vulkan之後更方便了


渲染不行,動作、邏輯更新可行。

何止

90年代的3D遊戲還出現過遠景60幀近景30幀這樣的設計

因為遠景和近景不是同一個渲染過程,遠景可能是2D方式實現的。

但是這種做法我只在早期3D遊戲裏見過,現代的3D遊戲應該是不能這樣做的。

很多人說遊戲遠景角色的運動跳幀,所以是低幀率,這是不對的。

要分清邏輯運算和圖像運算。遠景的角色跳幀,是因為邏輯運算刷新慢,但是角色愣在原地不動的時候,圖像還是在正常運算的,並不是說不動的東西就不算圖像了。

3D遊戲的圖像渲染是一個整體過程,如果沒有特殊引擎支持是不太可能前後景分開的(反正我沒見過)。最簡單的道理:你前景視角移動了1度,後面所有東西的透視能不變?這都要重算。

老遊戲能前後景分開是因為它的圖像運算是拆開的。有興趣的可以看下32X這臺機器,它的前後景就是分別在兩臺機器上運算,然後做視頻信號合成的。


技術上可行,但不建議這麼做

角色站在石頭上(石頭屬於場景),鏡頭橫向移動

下一幀,角色動了,他腳下的石頭沒動,角色會浮空再下一幀,角色動了,石頭也動,角色又回到了石頭上如此,角色與場景之間會出現顫抖現象

所以,建議乾脆角色和場景一起30幀率


可以,完全可以。

你說的這種方法可以有效的降低CPU負載,但是現代遊戲基本上CPU負載不是很大……也有很多遊戲內部邏輯和圖像渲染是剝離的,或者說一個合格的現代遊戲引擎都是這樣的。比如戰地內部邏輯是30tick,CSGO在官方伺服器裏是64tick。(遊戲邏輯因為並不直接關聯畫面渲染,所以不稱之為「幀」,而稱之為「Tick」)

初稿寫完GPU無法被如此優化,但是我突然想到了一個實現方法。用Render to Texture,創建四個屏幕大小的Buffer,兩個背景兩個人物,手動實現Double Buffer。每2個渲染循環把背景渲染到背景用Buffer裡面,每1個渲染循環把人物渲染到人物Buffer,然後每個循環把兩個Buffer合併到一起。

配合前文所述的遊戲邏輯和渲染的剝離,遊戲本身並不會異常。

只是有一個很大的問題,那就是題主的前提條件是錯的。人對場景的幀率非常敏感,如果場景和人物的的幀率不同,那玩家會立刻發現,並覺得非常難受……


有的 比如 全面戰爭的鏡頭拉遠 小兵行動是一下一下的

理論上可以。限幀60,逐幀渲染角色的位置,隔幀渲染場景。

實際中是什麼效果還真不知道,沒有研究過。


首先表明,題主是否表達、概念錯誤。

顯卡對不同場景的處理頻率和最終輸出畫面幀數不是一個概念。 畫面動了一定渲染了新的幀,畫面沒動不一定沒渲染新的幀。

幀——就是影像動畫中最小單位的單幅影像畫面。 一幀就是一副靜止的畫面,連續的幀就形成動畫,如電視圖象等。 我們通常說幀數,簡單地說,就是在1秒鐘時間裡傳輸的圖片的幀數,也可以理解為圖形處理器每秒鐘能夠刷新幾次,通常用FPS(Frames Per Second)表示。

幀數(Frames),為幀生成數量的簡稱。由於口語習慣上的原因,我們通常將幀數與幀率混淆。每一幀都是靜止的圖象,快速連續地顯示幀便形成了運動的假象,因此高的幀率可以得到更流暢、更逼真的動畫。(摘自百度百科)

無論如何,最終我們看到的輸出到顯示器的畫面是統一的幀數,顯卡最終輸出的畫面幀數是確定的,不可以人物場景不一致。

如果都是3D場景,渲染是即時的,不存在幀率不統一。

如果是3D混2D場景,在分別處理兩個不同場景時是可以以不同頻率處理的(如半靜態背景),但這個也不能用幀形容。最終畫面輸出時合成畫面幀數以最高幀為準。純2D場景同上。例魔幻三傑,遠景是圖片,主景3D,遠景靜態不意味著不處理,最終每一幅畫面都是要渲染的(無論遠景變不變化)。其他回答裡面說背景移動比人物慢的,最終輸出的畫面仍要渲染背景,只是背景處理省了。不存在場景30人物60。只能說場景處理30次一秒,人物處理60一秒,最終幀數60。

這種操作當然有,但變的不是各種素材的幀率

遊戲尤其是3D遊戲要60幀,那麼每一幀必須老老實實畫,沒得商量。不過有各種稀奇古怪節約資源的方法,而不是你想的幀率這麼簡單。

靜態場景的材質可以離線渲染,節省實時渲染消耗的處理時間

遠處的物體材質精細度降低,節省內存等

遠處的運動物體刷新率降低,主要是減少CPU更新頂點的開銷,這個和你說的很接近。你觀察Halo5就有這個機制

可以交錯跳像素間隔渲染,然後根據時域和空間插值生成剩下的畫面,這樣渲染刷新率是降低了,然而並不降低幀率,而是60幀交錯刷新兩個場,然後插值合併,但你看其中任何一個場真正的刷新率是30Hz,另外一半是插值填出來的,湊合也算吧


渲染的幀率沒辦法用不同頻率,就算人和物體都不動,攝像機也會動。就算針對這種特殊情況做了優化,對於實際容易掉幀的情況也沒有任何幫助。

邏輯的幀率倒是確實可以做LOD,遠處的東西tick頻率降低、近處的東西tick頻率是60幀。然而這個也得具體情況具體分析,之前的項目,即使把人物骨骼動畫在cpu上的tick頻率降到1fps也不見任何幀數優化。


可以,甚至於有些遊戲,人物隨著距離的遠近,也是以不同的幀率運行,主角60幀,近處的角色45幀,稍遠一些的30幀,遠處的角色15幀,這也算是一種LOD。

Intel一篇描述用CPU進行角色模型多線程Skinning的文章裡面也提到過這種優化方法。


[⑨打法]你所不知道的宇宙巡航機_嗶哩嗶哩 (゜-゜)つロ 乾杯~-bilibili?

www.bilibili.com

這才叫真的機能有限,因為MSX沒有滾動捲軸的能力,場景恐怕只有1fps。


forza7就是全程60幀,但是反光鏡裏30幀

什麼鬼?你的顯示器處理畫面的時候都是完整輸出一個畫面為一幀…

就算你說內部計算,最終輸出肯定也以最高幀率為標準。

同樣,如果說處理的時候人物和場景有差,那邊緣細節所造成的虛假體驗甚至可能還不如全部低幀率來得好。

所以,如果單指處理,可以做到但沒多大好處;指輸出那你這是對原理不瞭解。

說實話,你這麼搞還不如可變幀率技術有討論價值…


會讓你遊戲體驗很差,具體參考尼爾機械紀元PC版。


這個問題很有意思啊,可能有些人覺得這個不現實,但是實際情況是:分幀控制的確是有應用的

之前有款遊戲叫H1Z1大家應該知道的,之前因為這種大逃殺遊戲優化很不好導致掉幀,主要因為有些場景人物模型太多了,太喫渲染了,黎明公司很機智優化:遠處的任務模型降低幀數,近處的模型保證60幀,這樣就算人多的素質廣場也能保證幀數掉的不是很膩害。

當然我說的是這種分開幀數的確可以做到的,甚至可以很好解決人物模型太多導致的掉幀,(喫雞當時沒有分開出生島的時候大家應該都知道90多個人在那裡幀數掉的膩害)至於題主所說的人物60幀,環境30幀這個可以實現但是應該沒意義,因為環境大多數是靜止的,調成了30幀你滑屏的時候還卡頓的膩害


推薦閱讀:
查看原文 >>
相關文章