![]()
一大早看到VRchat Dev update開始想吐槽這東西怎感覺不如自動改資產(chǎn)到各項異性紋理過濾到16x貢獻(xiàn)更大。
然後無聊把自己還製作的半成品打開來試驗一下,發(fā)現(xiàn)...坑爹了難怪一直測量計算紋理採樣性能怎樣都很難準(zhǔn)確對上。
關(guān)閉各向異性和開啟各向異性過濾到16x性能在同個場景不同地方影響25~50%額外耗時...
而剛好做偏向風(fēng)格化的Shader,這下子本身就很偏向紋理單元瓶頸了,而解析度一般都較高,人物不會太多不會影響幾何耗時過多,總是因此導(dǎo)致像素Shader瓶頸,而紋理單元總是瓶頸而影響巨大。
導(dǎo)致問題的原因在於驅(qū)動本身可能會覆蓋部分設(shè)置導(dǎo)致繪製做處理紋理相關(guān)的時候在採樣過濾被改善,其次最大原因在於目前現(xiàn)代的GPU架構(gòu)是『自適應(yīng)』式的。
實際上並沒有在紋理單元內(nèi)部提供足夠大的buffer和固定內(nèi)置很多的計算單元,足以輕鬆大量處理N個採樣點,而是自適應(yīng)根據(jù)一定需求降低採樣級別(實際PC硬體只有2x、4x、8x、16x加速)。
也沒什麼方便好查的spec和profile會提醒這問題一直沒注意過。
你遊戲中設(shè)置為16x其實意思是最大16x而不是真的一直執(zhí)行16x...
這一定程度上會導(dǎo)致紋理單元採樣週期增加,如果你剛好紋理單元瓶頸就會導(dǎo)致顯著減慢。
其次有mipmap等,再加上Shader存取模式才導(dǎo)致對VRAM存取的頻寬影響小得多,總是紋理單元瓶頸。
![]()
只能說測試還是太少,沒把各種可能考慮進(jìn)去,強(qiáng)制開啟至16x(150fps)和關(guān)閉(210fps)
各向異性相當(dāng)於執(zhí)行了三線性在不同方向,Unity基本上專案設(shè)置『強(qiáng)制』時就是8x的意思(9~16x 但硬體實際上只有2x 4x 8x 16x,因為不是設(shè)置為16x所以實際為8x)
還想說可以吐槽一下行動GPU的填充率週期延長問題(手冊上寫了),但沒仔細(xì)考慮過PC是怎實現(xiàn)也很少詳細(xì)給,只是能說好一些
![]()
。
在手機(jī)上比方說你fp16格式下紋理採樣單元週期是1,fp32是2,再堆個三線性上去會變成4,吞吐就大幅下降了,尤其手機(jī)遊戲大多數(shù)偏向風(fēng)格化導(dǎo)向設(shè)計,讓玩家注意力多在相對顯眼飽和度較高的地方,準(zhǔn)確計算材質(zhì)和製造許多高級效果好像不是那麼必要就是了。
爛手機(jī)舊架構(gòu)你API給你8x 16x實際上只跑2x...沒做的硬體就不考慮能實際執(zhí)行了!
PC上一般就是fp32的計算座標(biāo)的處理的就是...
基本上雙線性吞吐週期就是1,到三線性估計也是1,各向異性往上多少都會導(dǎo)致需要更多紋理單元採樣的週期...
![]()
還以為是免費的 坑爹啊 然後由於現(xiàn)代基本上內(nèi)置mipmap所以紋理駐留紋理cache影響性能只有1%左右甚至更低不miss,但是如果你是需要動態(tài)生成mipmap例如深度判斷剔除等需求,例如草剔除就很可能需要更進(jìn)階的API標(biāo)準(zhǔn)和硬體加速改善了。
不過CS異步動態(tài)處理mipmap還是挺行的就是。
然後另外VRchat上,專案的總設(shè)定是無效的,所以無法靠專案設(shè)定覆寫所有紋理走各向異性,必須手動將需要的紋理進(jìn)行調(diào)整才能產(chǎn)生效果。(無論avatar或world)
(現(xiàn)在版本有強(qiáng)制複寫AL9實際是AF8x AF需大於等於1還有一些條件要允許能開AF的紋理...)
另外可能是硬體實現(xiàn)問題,採樣量增長還會提高利用率,所以才導(dǎo)致實際只額外25~50%,實際影響更大。
______
VRchat官方人員說已經(jīng)強(qiáng)制套用16x了????? 到底是我業(yè)障重到平行宇宙還是遊戲出現(xiàn)靈異事件了?
_____
問題出在Unity引擎的實現(xiàn)...
![]()
甚至可能裡面有許多坑 甚至許多遊戲引擎恐怕存在問題...
_________
Unity覆寫紋理各向異性會存在一點問題,實際上預(yù)設(shè)(VRchat也採預(yù)設(shè))強(qiáng)制是設(shè)定為9,實際硬體工作為8x(只能處理2x 4x 8x 16x)
當(dāng)數(shù)值為1~9之間設(shè)為9
正常情況下覆寫效果與性能測試應(yīng)當(dāng)是一致與驅(qū)動測試覆蓋8x相等,但是關(guān)閉(各向異性)或按每紋理甚至強(qiáng)制使用性能會相等...
只有使用驅(qū)動覆蓋關(guān)閉才能真關(guān)閉,奇怪的是即使在關(guān)閉各向異性下性能也與強(qiáng)制使用或手動設(shè)置至8x相等,跟驅(qū)動情形不一樣,但紋理是真的模糊了然後也沒拿到性能...
可能是Unity的神奇吧?
不過VRchat專案測試與關(guān)閉和2x相等與大致相等,強(qiáng)制開8x或16x(驅(qū)動)會更慢,但VRchat確實按照Untiy API進(jìn)行設(shè)定那正常應(yīng)該跑8x沒錯...?
但VRchat官方人員說已經(jīng)強(qiáng)制16x,但你自己家的文檔寫使用Unity API的預(yù)設(shè)那應(yīng)該是9(實質(zhì)為8x)...??
但遊戲中仍存在異常的模糊和摩爾紋等現(xiàn)象(不過部份可以靠反鋸齒解決,但能靠反鋸齒解決代表跟紋理過濾屬於不同類型就是了)