【渲染流水線】[幾何階段]-[圖元裝配]以UnityURP為例

【從UnityURP開始探索游戲渲染】專欄-直達

前情提要

【渲染流水線】主線索引-從數據到圖像以UnityURP為例-CSDN博客

  • 圖元裝配負責將離散頂點組裝成完整幾何圖元(如點、線、三角形、三角形條帶)

對渲染的探索是個持續不斷完善的過程,記錄這個過程將零散的內容整理起來,其中肯定會有理解偏差和問題,如果哪里有問題,歡迎在評論區探討和指出)

輸入數據?

接收?頂點著色器輸出的離散頂點數據?,包括:

  • 變換后的空間坐標(如裁剪空間位置)
  • 頂點屬性(顏色、法線、紋理坐標等

輸出數據?

生成?完整幾何圖元?(Primitive),例如:

  • 三角形(GL_TRIANGLES
  • 線段(GL_LINES
  • 點(GL_POINTS)?

在Unity中,圖元裝配的實現

主要通過?**網格拓撲(Mesh Topology)?和?索引緩沖區(Index Buffer)**?完成。

頂點分組模式?

  1. ?索引分組模式?通過索引數組(如Mesh.trianglesMesh.GetIndices())定義頂點連接順序,每個索引指向頂點緩沖區中的位置,按預設拓撲規則分組?。例如:

    text
    索引數組 [0,1,2,3,4,5]
    三角形拓撲 → 分組為△(0,1,2)和△(3,4,5)
    
  2. ?順序分組模式?無索引時直接按頂點提交順序分組(如連續3頂點構成一個三角形)?。


?Unity支持的圖元類型?

?圖元類型??描述?
三角形(Triangles每3個獨立頂點構成一個三角形,默認用于3D模型渲染?。
三角形條帶(TriangleStrip復用前2頂點與當前頂點生成新三角形,減少頂點重復提交?。
四邊形(Quads每4頂點構成一個四邊形(實際渲染時拆分為2個三角形)。
線段(Lines每2頂點構成一條線段,用于線框渲染?。
點(Points每個頂點獨立渲染為屏幕上的點?。

?拓撲連接規則?

  1. ?纏繞順序(Winding Order)?Unity默認使用?順時針順序?判定三角形正面,逆時針面會被剔除?。例如:
    • 頂點順序(v1,v2,v3)為順時針 → 可見
    • 順序(v1,v3,v2)為逆時針 → 剔除?。
  2. ?共享頂點優化?索引數組可復用頂點(如[0,1,2,1,2,3]生成兩個共享邊(1,2)的三角形)。

?關鍵實現接口?

  1. ?設置拓撲類型?通過MeshTopology枚舉指定圖元類型(如MeshTopology.Triangles)?。
  2. ?索引緩沖區操作?
    • Mesh.SetIndices():自定義索引分組規則
    • Mesh.triangles:直接設置三角形索引(舊API,效率較低)?

URP中對圖元裝配的調用位置與示例

在Unity URP (Universal Render Pipeline) 中,幾何階段的圖元裝配是由底層渲染管線自動處理的,主要通過ScriptableRenderContextCommandBuffer系統完成。

?核心類與調用流程?

  • ?UniversalRenderPipeline.RenderSingleCamera?入口點,通過ScriptableRenderContext提交繪制命令
  • ?ScriptableRenderContext.DrawRenderers?觸發幾何處理,最終調用底層圖形API (如OpenGL/D3D)
  • ?CommandBuffer.DrawProcedural?直接控制圖元裝配(手動模式)

圖元裝配示例代碼?

以下是不同圖元類型的裝配方式示例:

三角形 (Triangles)?

csharp
// 通過MeshFilter自動裝配var meshFilter = GetComponent<MeshFilter>();
Graphics.DrawMesh(meshFilter.sharedMesh, transform.position, transform.rotation, material, 0);

三角形帶 (Triangle Strip)?

csharp
// 手動通過CommandBuffer裝配
CommandBuffer cmd = new CommandBuffer();
cmd.DrawProcedural(Matrix4x4.identity,material,0,MeshTopology.TriangleStrip,vertexCount: 4// 需要至少4個頂點形成2個三角形
);
context.ExecuteCommandBuffer(cmd);

四邊形 (Quads)?

csharp
// URP中四邊形會被拆分為三角形處理
Mesh quadMesh = new Mesh();
quadMesh.vertices = new Vector3[] {/* 4個頂點 */ };
quadMesh.SetIndices(new int[] {0,1,2, 0,2,3}, MeshTopology.Triangles, 0);
Graphics.DrawMesh(quadMesh, Matrix4x4.identity, material, 0);

線段 (Lines)?

csharp
// 使用GL.LINES或LineRenderer組件
CommandBuffer cmd = new CommandBuffer();
cmd.DrawProcedural(Matrix4x4.identity,lineMaterial,0,MeshTopology.Lines,vertexCount: 2
);

點 (Points)?

csharp
// 使用MeshTopology.Points
CommandBuffer cmd = new CommandBuffer();
cmd.DrawProcedural(Matrix4x4.identity,pointMaterial,0,MeshTopology.Points,vertexCount: 1
);

底層實現位置?

  • ?URP源碼關鍵文件?:UniversalRenderPipelineCore.cs?→?ExecuteRenderPass方法ScriptableRenderer.cs?→?EnqueuePass提交繪制命令
  • ?Shader支持?:在Shader中需聲明正確的#pragma target和幾何著色器(如需要)

調試

  1. 使用Frame Debugger查看實際提交的圖元類型
  2. 在URP設置中啟用Native Rendering Debugger
  3. 檢查材質的Render QueueShader Pass設置

更深入的管線定制,可繼承ScriptableRendererFeature實現自定義幾何處理。

接下來:【渲染流水線】[幾何階段]-[歸一化NDC]以UnityURP為例-CSDN博客


【從UnityURP開始探索游戲渲染】專欄-直達
(歡迎點贊留言探討,更多人加入進來能更加完善這個探索的過程,🙏)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/93087.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/93087.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/93087.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

jvm有哪些垃圾回收器,實際中如何選擇?

7.G1收集器一款面向服務端應用的垃圾收集器。 特點如下&#xff1a; 并行與并發&#xff1a;G1能充分利用多CPU、多核環境下的硬 件優勢&#xff0c;使用多個CPU來縮短Stop-The-World停頓時間。部分收集器原本需要停頓Java線程來執行GC動作&#xff0c;G1收 集器仍然可以通過并…

多語言與隱形攻擊:LLM安全防線為何被頻頻突破?

你是否曾以為&#xff0c;只要加裝了“防火墻”&#xff0c;大型語言模型&#xff08;LLM&#xff09;就能高枕無憂&#xff1f;Trendoyl 的實際測試卻讓我大吃一驚&#xff1a;即便部署了 Meta 的 Llama Guard&#xff0c;攻擊者還是能輕松用多語種、字符混淆&#xff0c;甚至…

分布式光伏氣象站:為光伏電站的 “氣象感知眼”

分布式光伏氣象站&#xff1a;為光伏電站的 “氣象感知眼”柏峰 【BF-GFQX】在全球能源轉型的浪潮中&#xff0c;分布式光伏發電憑借其就近消納、清潔高效的優勢&#xff0c;成為能源結構優化的重要力量。而分布式光伏氣象站&#xff0c;作為光伏電站的 “智慧感知眼”&#xf…

TCP與UDP:如何選擇最佳傳輸協議

應用場景選擇如果需要可靠傳輸&#xff0c;首選 TCP如果需要傳輸的數據包很大&#xff0c;也首選 TCP絕大部分的場景&#xff0c;都可以優先考慮 TCPUDP 相比于 TCP&#xff0c;最大的優點在于傳輸效率有些情況&#xff0c;既需要可靠性又需要性能&#xff0c;這個時候時候就需…

《Leetcode》-面試題-hot100-棧

題目列表 20. 有效的括號 簡單難度 leetcode鏈接 155. 最小棧 中等難度 leetcode鏈接 394. 字符串解碼 中等難度 leetcode鏈接 739. 每日溫度 中等難度 leetcode鏈接 84. 柱狀圖中最大的矩形 困難難度 leetcode鏈接 題目 &#xff08;1&#xff09;有效的括號 題目 給…

GPT-5、Claude-4 同臺亮相!OneEval發布全新“大模型+知識庫”評測白皮書!

OneEval官網地址&#xff1a;http://OneEval.OpenKG.cnOneEval文章鏈接&#xff1a;https://arxiv.org/abs/2506.12577要點導讀 今年4月&#xff0c;OpenKG發布“大模型知識庫”融合能力評估榜單OneEval v1.0。近期&#xff0c;OpenKG在此基礎上&#xff0c;組織撰寫了OneEv…

【最新版】沃德云商協系統全開源+uniapp小程序

一.介紹沃德云商協是一款基于FastAdmin&#xff08;thinkphp&#xff09;Uniapp開發的“多組織”的云服務平臺&#xff0c;打造總商會、總協會、總校友會、工商聯等多組織無障礙溝通合作平臺&#xff0c;讓各大分會、各大分校友會、分組織實現輕松管理&#xff0c;線上宣傳展示…

Wireshark專家模式定位網絡故障:14種TCP異常深度解剖

TCP連接如同精密運轉的傳送帶&#xff0c;每一個異常數據包都是故障的早期信號。作為網絡工程師的“外科手術刀”&#xff0c;Wireshark在TCP故障診斷領域的價值無可替代。本文將通過14個真實故障場景&#xff0c;揭示如何利用Wireshark專家系統&#xff08;Expert System&…

Python Day28 HTML 與 CSS 核心知識點 及例題分析

一、HTML 布局標簽&#xff08;含 H5 語義化標簽&#xff09;傳統布局多使用div標簽&#xff0c;H5 新增語義化標簽增強可讀性&#xff1a;核心知識點header&#xff1a;替代div#header&#xff0c;用于頁面頭部&#xff08;如標題、導航&#xff09;。footer&#xff1a;替代d…

MySQL 數據庫表操作與查詢實戰案例

MySQL 數據庫表操作與查詢實戰案例 在數據庫學習過程中&#xff0c;熟練掌握表的創建、數據插入及各類查詢操作是基礎且重要的技能。本文將通過實際案例&#xff0c;詳細介紹 MySQL 中數據庫表的設計、數據插入以及常用的查詢操作&#xff0c;幫助初學者快速上手。 項目一&…

THCV215一種高速視頻數據收發器,采用低電壓差分信號(LVDS)技術支持高速串行數據傳輸,支持1080p/60Hz高分辨率傳輸

THCV215 是一款符合 V-by-One HS 標準的 高速視頻數據收發器。THCV215和THCV216被設計為支持主機和顯示器之間的視頻數據傳輸。該芯片組可以在20MHz至100MHz的LVDS時鐘頻率下&#xff0c;僅通過一根差分電纜傳輸39bit視頻數據和3bit同步數據。該芯片組有兩個高速數據通道&#…

Linux 系統下 VS Code 降級至 1.85 版本教程:通過歷史版本網站解決兼容性問題

一、問題背景 當前使用的 VS Code 版本為 1.102.3&#xff0c;這一版本可能是未來版本、內部測試版或 Insiders 版本&#xff0c;而目前最新的穩定版屬于 1.8x 系列。由于版本過新&#xff0c;可能導致與部分插件&#xff08;如舊版 Remote-SSH&#xff09;或系統環境不兼容。…

一個基于 PyTorch 的完整模型訓練流程

一個基于 PyTorch 的完整模型訓練流程 flyfish訓練步驟具體操作目的1. 訓練前準備設置隨機種子、配置超參數&#xff08;batch size、學習率等&#xff09;、選擇計算設備&#xff08;CPU/GPU&#xff09;確保實驗可復現&#xff1b;統一控制訓練關鍵參數&#xff1b;利用硬件加…

ffmpeg,ffplay, vlc,rtsp-simple-server,推拉流命令使用方法,及測試(二)

一、常用命令 ffmpeg 推流命令 : ffmpeg -re -i input.mp4 -c copy -f flv rtmp://39.105.129.233/myapp/ffmpeg -re -i input.mp4 -c copy -f flv rtsp://39.105.129.233/myapp/-re 讀取流 -i 輸入文件 -f # 指定推流formatffplay 拉流命令 : ffplay rtmp://39.105.129.233/m…

使用行為樹控制機器人(三) ——通用端口

文章目錄一、通用端口功能實現1. 功能實現1.1 頭文件定義1.2 源文件實現1.3 main文件實現1.4 tree.xml 實現2. 執行結果使用行為樹控制機器人(一) —— 節點使用行為樹控制機器人(二) —— 黑板使用行為樹控制機器人(三) —— 通用端口有了上述前兩節我們已經可以實現節點間的通…

DataDome反爬蟲驗證技術深度解析:無感、滑塊與設備驗證全攻略

DataDome反爬蟲驗證技術深度解析&#xff1a;無感、滑塊與設備驗證全攻略 隨著網絡安全威脅的不斷演進&#xff0c;企業對數據保護的需求日益增強。DataDome作為業界領先的反爬蟲解決方案&#xff0c;以其三層防護機制在眾多知名網站中得到廣泛應用。本文將深入解析DataDome的…

RabbitMQ 消息轉換器詳解

RabbitMQ 消息轉換器詳解 一、為什么需要消息轉換器&#xff1f; RabbitMQ 的消息傳輸協議只識別字節流&#xff1a; 發送對象時&#xff0c;需要序列化成字節數組接收消息時&#xff0c;需要將字節數組反序列化成對象 如果不使用消息轉換器&#xff1a; 需要手動序列化和反序列…

內網穿透的應用-告別“現場救火”!用 cpolar遠程調試讓內網故障排查進入“云時代”

文章目錄前言**常見困境與解決方案****實際應用價值**1. Remote JVM Debug2. 系統要求與環境準備2.1 服務器環境2.2 本地開發環境3. 內網服務器準備及開始3.1 安裝cpolar配置支持遠程ssh登錄3.1.1 什么是cpolar&#xff1f;3.1.2 安裝cpolar3.1.3 注冊及配置cpolar系統服務3.1.…

Cherryusb UAC例程對接STM32內置ADC和PWM播放音樂和錄音(下)=>UAC+STM32 ADC+PWM實現錄音和播放

1. 程序基本框架整個程序框架, 與之前的一篇文章《Cherryusb UAC例程對接STM32內置ADC和DAC播放音樂和錄音(中)>UACSTM32 ADCDAC實現錄音和播放》基本一致, 只是這次將DAC替換成了PWM。因此這里不再贅述了。 2. audio_v1_mic_speaker_multichan_template.c的修改說明(略) 參…

1 JQ6500語音播報模塊詳解(STM32)

系列文章目錄 文章目錄系列文章目錄前言1 JQ6500簡介2 基本參數說明2.1 硬件參數2.2 模塊管腳說明3 控制方式3.1 通信格式3.2 通信指令4 硬件設計5 軟件設計5.1 main.c5.2 board_config5.2.1board_config.h5.2.2 board_config.c5.3 module_config5.3.1 module_config.h5.3.2 mo…