在Unity 3D中,shader是何時編譯的,在何時加載入視訊記憶體中的?

時間 2021-06-02 04:36:54

1樓:minggoddess

以下是我的看法:

我先講下texture資源在dx12向api裡的這個過程很簡單

create的時候建立到視訊記憶體 bindtex的時候把address發給gpu

接著看shader資源它比tex多了從hlsl到binarycode的階段也就是compile

shader一開始會load進memory 在載入場景的時候此時是hlsl

要用哪個material的時候/首次呼叫會把hlsl編成binary code 用binarycode

create vs ps也就是這步create之前compile 然後cache(我們之前寫的是加進來的shader全部compile一遍取決於引擎)

第三步每次畫的時候bindprogram 就是把視訊記憶體位址傳過去

2樓:侯帥英

Editor中:修改shader並儲存時立即編譯。

Runtime下,無論哪個平台,都是在進入場景時載入shader object內容到記憶體,但是首次實際呼叫渲染時才編譯,編譯完成之後會cache下來。

有兩種優化方法:

1. 呼叫Shader.WarmupAllShaders(),自動編譯該場景中用到的所有shader。該方法在Unity5中已經廢棄。

2. 在專案設定的GraphicsSettings中,可以匯出ShaderVariantCollection,並在Preloaded Shader中匯入,這樣的話就可以在載入場景時一併編譯需要預載入的shader,這樣的優化在移動平台上用得比較多。

具體見:

Unity - Manual: Optimizing Shader Load Time

3樓:錢康來

你在編輯器裡,每次修改、儲存的時候就會自動編譯(unity是監視Asset檔案改動的)

移動平台的話,感覺是載入場景的時候,按需編譯、載入的,不過不是十分確定

Unity - Scripting API: 這個文件裡有一些說明:Usually graphics drivers do not actually prepare shaders until they are first needed.

However when some object is first rendered with a previously unused shader, there can be a hiccup because the driver is compiling/optimizing the shader. This can be quite noticeable, especially on mobile platforms.

作為Unity3D的指令碼而言,c 中for是否真的比foreach效率更高?

你真的已經喪心病狂到連這40B也要省了麼?以下是從執行時間上來看哪個效率高 可以看出foreach比for用的時間多那麼一些,但是我把for放到前面,那麼for的時間比foreach多,執行時間幾乎是相同的,所以.效率上沒啥差別,測試環境是.NET Framework 2.0 控制台程式 Ivony...

多少歲學unity 3D合適?

奇怪的呼吸者 Unity一直在更新,如果這兩年想做自己的產品,馬上就學。但如果學完等兩年,你已經忘光了或者被新版本淘汰了。技術這個東西,除了構架很難積累,更新太快。 老橘貓1024 12歲目前最重要的還是學習,完成自己的學業可以提高自己的學習能力學習unity也是游刃有餘,高考考到乙個好的學校再學u...

Unreal 和 Unity 3D 各有什麼特點?如何選擇?

GuardHei 一直在用Unity,後來準備去搞一搞Unreal,然後發現 Unreal對程式設計師是真的不友好啊!本人的是mbp 原生支援XCode,外掛程式支援CLion和VS Code。XCode大家都懂得,那個效率,空專案index一下都要3 4分鐘,智慧型提示等我把函式補完了才彈出來,V...