99国产精品欲av蜜臀,可以直接免费观看的AV网站,gogogo高清免费完整版,啊灬啊灬啊灬免费毛片

網易首頁 > 網易號 > 正文 申請入駐

Unreal Engine Shader 開發技巧

0
分享至


【USparkle專欄】如果你深懷絕技,愛“搞點研究”,樂于分享也博采眾長,我們期待你的加入,讓智慧的火花碰撞交織,讓知識的傳遞生生不息!

這是侑虎科技第1800篇文章,感謝作者徐門子美供稿。歡迎轉發分享,未經作者授權請勿轉載。如果您有任何獨到的見解或者發現也歡迎聯系我們,一起探討。(QQ群:793972859)

作者主頁:

https://www.zhihu.com/people/BloodyGuys

每次稍微改一下引擎的Shader源碼,隨便修改一行USH文件,引擎都要十幾分鐘編譯Shader,非常影響開發效率,后來開始嘗試在RenderDoc里開發Shader,任何USH文件都是秒編譯,修改馬上就能看到,確實很方便,只恨之前不早早養成這個習慣。

而且Unreal Engine即使不使用引擎源碼,也可以直接打開引擎的ShaderDebug功能,直接修改Shader源碼。

一、打開Shader調試

修改源碼中的配置文件以調試著色器源碼ConsoleVariables.ini。

打開ShaderDevelopmentMode時,Shader編譯報錯不會直接Crash引擎,改一改還能重新編譯:

r.ShaderDevelopmentMode=1

打開Shaders.Optimize和Shaders.Symbols可以在Debugger中顯示Shader源碼:

r.Shaders.Optimize=0 r.Shaders.Symbols=1

更加硬核一點,如果需要使用類似GLSLC命令行來手動編譯Shader,那么加上“-g”就可以保留Shader源碼:

glslc -g base.frag -o base_frag.spv

在UE5.2之后,可以在[Platform]Engine.ini定義配置,詳情見:

《Shader Debugging Workflows》


https://dev.epicgames.com/documentation/en-us/unreal-engine/shader-debugging-workflows-unreal-engine?application_version=5.2

比如:

;DefaultEngine.ini [ShaderCompiler] r.Shaders.Symbols=1 r.Shaders.GenerateSymbols=1 [ShaderCompiler_BuildMachine] r.Shaders.WriteSymbols=1 r.Shaders.WriteSymbols.Zip=1

二、Shader開發流程

在引擎里搭一個簡單測試場景,然后RenderDoc截一幀,記得先打開RenderDoc插件:


命令行:renderdoc.CaptureFrame

如果需要開發和調試GlobalShader或者ComputerShader,這個Shader不是每幀都會被調用或者正常的Capture都無法捕獲到,那么就需要在代碼里手動捕獲:

#include "RenderCaptureInterface.h" ... // 在GameThread中創建FScopedCapture然后持續監聽叫“Xk-MyDrawCallName”的Event, // 一旦RenderThread開始繪制,就會捕獲到這個DrawCall。 RenderCaptureInterface::FScopedCapture RenderCapture(true, TEXT("Xk-MyDrawCallName")); ENQUEUE_RENDER_COMMAND(MyCustomGlobalShader)([](FRHICommandListImmediate& RHICmdList) {     TRACE_CPUPROFILER_EVENT_SCOPE(MyCustomGlobalShader_Render);     FRDGBuilder GraphBuilder(RHICmdList, RDG_EVENT_NAME("Xk-MyDrawCallName"));     // Do something...     GraphBuilder.Execute(); }); ...

這里創建的RenderCaptureInterface::FScopedCapture,第一個參數是是否開啟Capture,第二個參數是需要捕獲的DrawCall的EventName,一旦這個DrawCall開始繪制,就會自動被RenderDoc截幀并打開軟件。

找到要渲染的物體,我想直接改它的Shader源碼,需要先定位到這個DrawCall:


Find the DrawCall

然后去Pipeline State這個窗口,選擇需要修改的Shader類型,這里想要修改Vertex Shader,點擊Edit。注意,在Vertex Shader Edit窗口,修改Pixel Shader的文件,是不生效的:


然后找到你要修改的文件,比如LocalVertexFactory.ush,直接在RenderDoc寫代碼,修改完點擊Apply changes,修改就直接應用到Shader上了,注意Errors窗口的編譯報錯:


Shader修改了,Apply changes之后,在Texture Viewer里可以直接查看結果:


Texture Viewer

因為我改了Vertex Shader,所以改變的是頂點的數值,直接去Mesh Viewer中查看下變化,鼠標右鍵可以直接選擇頂點,挨個檢查數值:


Mesh Viewer

當渲染都正確之后,把RenderDoc里修改的代碼部分,拷貝到引擎的Shader源碼里,再重新編譯一下引擎檢查一下結果:


Unreal Engine Viewport

三、截取其他應用程序

1. 在Tools->Settings里開啟Global Process Hook:


Tools-Settings

2. 指定應用程序啟動路徑,開啟Global Hook:


Enable Global Hook

3. 手動啟動應用程序,在File->Attach to Running Instance里重新掛載程序:


File-Attach to Running Instance

4. From now on,應該可以正常截幀了:


Capture Frame

5. 如果你發現RenderDoc無法正常掛載需要截獲的程序,那么有可能是你的電腦開啟了安全啟動(Secure Boot),你需要重啟電腦,進入BIOS/UEFI設置:在計算機啟動時,你通常需要按下某個特定的鍵(如F2、F10、F12、Delete或Esc)來進入BIOS/UEFI設置。在BIOS/UEFI設置中,找到“安全啟動”或“Secure Boot”選項。這個選項通常位于“啟動”、“安全”或“高級”菜單下,然后禁用它。

四、小記

實際使用RenderDoc開發Shader后,發現真的香,之前寫Shader需要一遍一遍的編譯引擎,非常痛苦,尤其是去修改那幾個通用的USH文件,還是在RenderDoc一次寫完,然后把代碼寫回引擎更快。唯一的問題就是RenderDoc的IDE非常簡陋。

快捷鍵【Ctrl+Shift+,】,打開GPU Visualizer,渲染管線的RenderPass,去找源碼中對應的代碼:


引擎基本架構方便理解引擎代碼層級:

工具層(Tool Layer)

地形Landscape工具、植被Foliage工具等

功能層(Function Layer)

多線程,GameThread Tick,RenderThread Submit,RHIThread Submit等

資源層(Resource Layer)

UObject、UStaticMesh、UTexture、USound等

核心層(Core Layer)

數學庫FMath,數據結構,內存管理,引擎基礎

平臺層(Platform/RHI Layer)

操作系統、GraphicsAPI、硬件架構

主要渲染管線入口

Console & PC Renderer入口:

void FDeferredShadingSceneRenderer::Render(FRDGBuilder& GraphBuilder) { }

Mobile Renderer入口:

void FMobileSceneRenderer::Render(FRDGBuilder& GraphBuilder) {         //...     if (bDeferredShading)     {         RenderDeferred(GraphBuilder, SortedLightSet, ViewFamilyTexture, SceneTextures);     }     else     {         RenderForward(GraphBuilder, ViewFamilyTexture, SceneTextures);     }         //... }

Mobile Forward Shading入口:

void FMobileSceneRenderer::RenderForward(FRDGBuilder& GraphBuilder, FRDGTextureRef ViewFamilyTexture, FSceneTextures& SceneTextures) { }

Mobile Deferred Shading入口:

void FMobileSceneRenderer::RenderDeferred(FRDGBuilder& GraphBuilder, const FSortedLightSetSceneInfo& SortedLightSet, FRDGTextureRef ViewFamilyTexture, FSceneTextures& SceneTextures) { }

文末,再次感謝徐門子美 的分享, 作者主頁: https://www.zhihu.com/people/BloodyGuys, 如果您有任何獨到的見解或者發現也歡迎聯系我們,一起探討。(QQ群: 793972859 )。

近期精彩回顧


特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相關推薦
熱點推薦
黃曉明機場“整活”!16厘米鞋跟配詭異發際線,網友笑不活了

黃曉明機場“整活”!16厘米鞋跟配詭異發際線,網友笑不活了

玫瑰講娛
2025-06-16 19:44:51
美制戰機損失最大的一天,德黑蘭大批客機爆炸:伊朗空軍被摧毀了

美制戰機損失最大的一天,德黑蘭大批客機爆炸:伊朗空軍被摧毀了

帥先工場
2025-06-17 15:59:21
我爸出軌秘書已經45年,我媽不哭不鬧,在他70歲生日這天絕地反擊

我爸出軌秘書已經45年,我媽不哭不鬧,在他70歲生日這天絕地反擊

詭譎怪談
2025-05-02 15:13:52
S媽時隔27天再發文,稱與大S過去捐款不計其數,懇求網友停止網暴

S媽時隔27天再發文,稱與大S過去捐款不計其數,懇求網友停止網暴

鑫鑫說說
2025-06-18 11:03:14
如果這事還有人洗白,那真是極端的扭曲!

如果這事還有人洗白,那真是極端的扭曲!

胖胖說他不胖
2025-06-17 17:25:29
伊朗稱襲擊摩薩德總部 現場畫面曝光

伊朗稱襲擊摩薩德總部 現場畫面曝光

看看新聞Knews
2025-06-17 20:42:12
從古至今,賺錢最快的路子就一個,從未改變

從古至今,賺錢最快的路子就一個,從未改變

德魯克博雅管理
2025-05-29 17:03:46
第一批韭菜開始站崗

第一批韭菜開始站崗

懶貓的豐收日
2025-06-18 18:35:28
56歲高曉松與高中女友相約聚會,曬二人戀愛時合影,被嘲像兩代人

56歲高曉松與高中女友相約聚會,曬二人戀愛時合影,被嘲像兩代人

娛圈小愚
2025-06-18 08:53:07
全市場:羅馬官網短短幾小時被擠癱瘓,暫停季票銷售

全市場:羅馬官網短短幾小時被擠癱瘓,暫停季票銷售

懂球帝
2025-06-18 00:07:22
伊朗發生大規模網絡中斷 互聯網服務將切換至國家內部網絡

伊朗發生大規模網絡中斷 互聯網服務將切換至國家內部網絡

財聯社
2025-06-18 00:11:18
伊朗要變天了

伊朗要變天了

戰爭研究所
2025-06-13 23:40:34
以色列青年粗暴阻止亞洲工人進入防空洞:避難所專供以色列人用!

以色列青年粗暴阻止亞洲工人進入防空洞:避難所專供以色列人用!

阿龍聊軍事
2025-06-18 10:29:40
中紀委劃紅線!機關事業單位職工下班后,不能去這8類場所!

中紀委劃紅線!機關事業單位職工下班后,不能去這8類場所!

金哥說新能源車
2025-06-11 13:29:08
蘇超“太湖三可愛”成了交通一卡通卡面?官方:是真的

蘇超“太湖三可愛”成了交通一卡通卡面?官方:是真的

現代快報
2025-06-18 15:34:07
福建一姑娘把“荔枝核”泡水里,兩周長成“粉盆栽”,太治愈了

福建一姑娘把“荔枝核”泡水里,兩周長成“粉盆栽”,太治愈了

美家指南
2025-06-09 11:08:50
不要修特異功能:我身邊有神通的人沒有一個好下場

不要修特異功能:我身邊有神通的人沒有一個好下場

老僧奇譚
2025-06-17 11:23:09
李嘉誠說:“只有窮人,才會癡迷技術,只有笨人,才會先把事做好

李嘉誠說:“只有窮人,才會癡迷技術,只有笨人,才會先把事做好

伊人河畔
2025-06-08 11:05:34
國足敲定臨時主帥,久爾杰維奇將帶隊征戰東亞杯

國足敲定臨時主帥,久爾杰維奇將帶隊征戰東亞杯

齊魯壹點
2025-06-18 11:12:15
王虹北大講課座無虛席!韋東奕聽課表情惹爭議,網友評價太扎心!

王虹北大講課座無虛席!韋東奕聽課表情惹爭議,網友評價太扎心!

古希臘掌管松餅的神
2025-06-17 20:00:39
2025-06-18 19:24:49
侑虎科技UWA incentive-icons
侑虎科技UWA
游戲/VR性能優化平臺
1455文章數 984關注度
往期回顧 全部

科技要聞

別叫我互聯網公司,京東的野心藏不住了

頭條要聞

俄方稱朝鮮決定向俄羅斯追加派兵6000人 中方回應

頭條要聞

俄方稱朝鮮決定向俄羅斯追加派兵6000人 中方回應

體育要聞

高僧下山了!文班結束少林寺10日修行

娛樂要聞

前老板舉報李雪琴欠190萬轉移公司財產

財經要聞

潘功勝李云澤吳清發聲 資本市場關鍵信號

汽車要聞

燈光技術升級還有插混版本 全新奧迪Q3預計明年國產

態度原創

教育
健康
藝術
公開課
軍事航空

教育要聞

五年級期末考試附加題,難,除了尖子生,都放棄了

呼吸科專家破解呼吸道九大謠言!

藝術要聞

故宮珍藏的墨跡《十七帖》,比拓本更精良,這才是地道的魏晉寫法

公開課

李玫瑾:為什么性格比能力更重要?

軍事要聞

特朗普呼吁伊朗無條件投降

無障礙瀏覽 進入關懷版 主站蜘蛛池模板: 奉节县| 兴山县| 昌平区| 洛扎县| 西畴县| 司法| 方正县| 德庆县| 龙山县| 文昌市| 株洲市| 南宁市| 高雄市| 依安县| 广平县| 吉隆县| 郴州市| 清丰县| 孟津县| 四子王旗| 沧州市| 青海省| 吉安县| 苍南县| 桃园县| 宝兴县| 武平县| 于田县| 腾冲县| 连江县| 裕民县| 灵山县| 浑源县| 卓尼县| 塘沽区| 新泰市| 启东市| 光山县| 阿尔山市| 梅河口市| 卓尼县|