【知乎】為什么很多游戲在第一次進(jìn)入時編譯著色器?
為什么很多游戲在第一次進(jìn)入時編譯著色器?
為什么使命召喚,最后生還者等游戲需要在第一次進(jìn)入游戲時編譯著色器。而不是直接安裝編譯好的著色器文件
關(guān)注者
7
被瀏覽
4,131
關(guān)注問題寫回答
邀請回答
好問題 1
2 條評論
分享
修改問題
收起?
你可以邀請下面用戶,快速獲得回答

委托劉看山邀請
開啟后為你智能邀請潛在的回答者
開啟邀請

秘銀法王
TA 已幫助 125 人獲得解答
邀請回答

黑梅蒂爾的主場
TA 已幫助 228 人獲得解答
邀請回答

艾瑞克
曾在「游戲」話題獲得 540 次贊同
邀請回答

Gameplay編程匠
騰訊 移動客戶端開發(fā)工程師
邀請回答
更多推薦結(jié)果
3?個回答
默認(rèn)排序

Italink
X.Y
?關(guān)注
了解一下PSO緩存:
mike:UE4 PSO緩存
發(fā)布于 2023-05-03 00:19
贊同添加評論
分享
收藏喜歡

idovelemon
Programmer,Gamer
?關(guān)注
2 人贊同了該回答
簡單的說,平時我們寫的 shader 只是一種資源文件,需要通過硬件自帶的 GPU compiler 編譯成對應(yīng) GPU 的機(jī)器碼來執(zhí)行。不同的機(jī)器所需要的機(jī)器碼不同,所以基本都只能讓機(jī)器自己去編譯,無法提前準(zhǔn)備好。
一旦機(jī)器編譯好了之后,就可以緩存下來,以后打開程序的時候就不用再編譯了。
不過 steam 似乎有一個功能,會收集所有玩家對應(yīng)機(jī)型的緩存數(shù)據(jù),然后你下載的時候可以將這個收集到的數(shù)據(jù)直接下載下來,省去第一次的編譯,不記得是在哪里看到的報告了。
另外蘋果公司的 Metal API 最新版本中,已經(jīng)準(zhǔn)備支持將編譯好的機(jī)器碼直接放在資源里面,后面程序跑的時候,不用在編譯了。它能這么做是因為 API 和 芯片都是自己造的,其他公司模仿不來。
發(fā)布于 2023-05-06 15:37?IP 屬地上海
贊同 2添加評論
分享
收藏喜歡

新生命
?關(guān)注
一般是因為這些項目的shader采用了大量的uber(變體)。會動態(tài)的根據(jù)用戶硬件采用不同的shader。
發(fā)布于 2023-05-01 10:24