Unity中Batching優化的GPU實例化整理總結

文章目錄

  • 前言
  • 一、GPU Instancing的支持
    • 1、硬件支持
    • 2、Shader支持
    • 3、腳本支持
  • 二、我們來順著理一下GPU實例化的使用步驟
    • 1、GPU實例化前的C#代碼準備
    • 2、在 appdata 和 v2f 中定義GPU實例化ID
    • 3、在頂點著色 和 片元著色器 設置GPU Instance ID,使實例化對象頂點位置正確(設置后坐標變換矩陣就生效)
    • 4、如果GPU實例化后,需要不同對象使用不同屬性,Shader中GPU實例化怎么定義和使用屬性。以及在C#腳本中使用材質屬性塊來修改材質屬性
  • 三、最終代碼
    • Shader代碼:
    • C#代碼:


前言

我們在之前的文章中,實現了GPU實例化的支持,我們在這篇文章中來整理總結一下


一、GPU Instancing的支持

1、硬件支持

2、Shader支持

3、腳本支持


二、我們來順著理一下GPU實例化的使用步驟

1、GPU實例化前的C#代碼準備

  • Unity中Batching優化的GPU實例化(1)

2、在 appdata 和 v2f 中定義GPU實例化ID

  • Unity中Batching優化的GPU實例化(2)

3、在頂點著色 和 片元著色器 設置GPU Instance ID,使實例化對象頂點位置正確(設置后坐標變換矩陣就生效)

  • Unity中Batching優化的GPU實例化(3)

4、如果GPU實例化后,需要不同對象使用不同屬性,Shader中GPU實例化怎么定義和使用屬性。以及在C#腳本中使用材質屬性塊來修改材質屬性

  • Unity中Batching優化的GPU實例化(4)

三、最終代碼

請添加圖片描述

Shader代碼:

Shader "MyShader/P2_6_5"
{Properties{_Color("Color",Color) = (1,1,1,1)}SubShader{Tags { "RenderType"="Opaque" }LOD 100Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#pragma multi_compile_instancing#include "UnityCG.cginc"struct appdata{float4 vertex : POSITION;float2 uv : TEXCOORD0;//1、定義GPU實例化 IDUNITY_VERTEX_INPUT_INSTANCE_ID};struct v2f{float2 uv : TEXCOORD0;float4 pos : SV_POSITION;float3 worldPos : TEXCOORD4;//1、定義GPU實例化 IDUNITY_VERTEX_INPUT_INSTANCE_ID};UNITY_INSTANCING_BUFFER_START(prop)UNITY_DEFINE_INSTANCED_PROP(fixed4,_Color)UNITY_INSTANCING_BUFFER_END(prop)v2f vert (appdata v){//2、設置GPU實例化ID,使實例化對象頂點位置正確UNITY_SETUP_INSTANCE_ID(v);v2f o;UNITY_TRANSFER_INSTANCE_ID(v, o);o.pos = UnityObjectToClipPos(v.vertex);o.worldPos = mul(unity_ObjectToWorld,v.vertex);o.uv = v.uv;return o;}fixed4 frag (v2f i) : SV_Target{//2、設置GPU實例化ID,使實例化對象頂點位置正確UNITY_SETUP_INSTANCE_ID(i);return i.worldPos.y * 0.15 + UNITY_ACCESS_INSTANCED_PROP(prop,_Color);}ENDCG}}
}

C#代碼:

using UnityEngine;public class P2_6_5 : MonoBehaviour
{public GameObject Prefab;public int Count = 1;public int Range = 10;// Start is called before the first frame updatevoid Start(){for (int i = 0;i < Count;i++){Vector3 pos = Random.insideUnitCircle * Range;GameObject chair = Instantiate(Prefab,new Vector3(pos.x,0,pos.y),Quaternion.identity);Color color = new Color(Random.value,Random.value,Random.value);MaterialPropertyBlock prop = new MaterialPropertyBlock();prop.SetColor("_Color",color);chair.GetComponentInChildren<MeshRenderer>().SetPropertyBlock(prop);}}
}

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

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

相關文章

Docker的資源控制

Docker的資源控制&#xff1a; 對容器使用宿主機的資源進行限制。 CPU 內存 磁盤I/O(讀寫性能) docker使用linux自帶的功能cgroup control groups是linux內核系統提供的一種可以限制&#xff0c;記錄&#xff0c;隔離進程組所使用的物理資源的一種機制。 docker借助這個機制…

go grpc高級用法

文章目錄 錯誤處理常規用法進階用法原理 多路復用元數據負載均衡壓縮數據 錯誤處理 gRPC 一般不在 message 中定義錯誤。畢竟每個 gRPC 服務本身就帶一個 error 的返回值&#xff0c;這是用來傳輸錯誤的專用通道。gRPC 中所有的錯誤返回都應該是 nil 或者 由 status.Status 產…

如何克服微服務測試的挑戰,并最大化收益

多年來&#xff0c;微服務一直是行業趨勢&#xff0c;但組織卻未能從該方法中獲益&#xff0c;并因發布失敗而苦苦掙扎。這些失敗通常歸結為測試服務之間的接口以獲得預期的質量、安全性和性能的困難。 最終&#xff0c;未能以足夠穩健的方式測試這些 API。一線希望是遺留 SOA…

cookie總結

cookie和session&#xff1a; 一、Cookie和Session二、使用Cookie保存用戶上次的訪問時間。三、Cookie常用方法總結亂碼問題解決&#xff1a; 一、Cookie和Session 會話&#xff1a;用戶從打開瀏覽器到關閉的整個過程就叫1次會話。 比如有的網站登錄過一次&#xff0c;下次再進…

Gitleaks - 一款高效的Github倉庫敏感信息泄露查詢工具

Gitleaks - 一款高效的Github倉庫敏感信息泄露查詢工具 1.工具概述2.安裝3.參數解析4.使用1.工具概述 Gitleaks 是一種 SAST 工具,用于檢測和防止 git 存儲庫中的硬編碼機密,如密碼、API 密鑰和令牌 Gitleaks 是一個開源工具,用于檢測和防止簽入 Git 存儲庫的機密(密碼/A…

使用 Kubernetes 為 CI/CD 流水線打造高效可靠的臨時環境

介紹 在不斷發展的科技世界中&#xff0c;快速構建高質量的軟件至關重要。在真實環境中測試應用程序是及早發現和修復錯誤的關鍵。但是&#xff0c;在真實環境中設置 CI/CD 流水線進行測試可能既棘手又昂貴。 Kubernetes 是一個流行的容器編排平臺&#xff0c;提供臨時環境解決…

【qt】Qt+OpenCv讀取帶有中文路徑的圖片

【opencv4.5.1版本】下載exe解壓即可。。。https://opencv.org/releases/page/2/ 【qt5.15.2】 pro文件 QT core guigreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c17# You can make your code fail to compile if it uses deprecated APIs. # In order to …

YOLOv8配置文件yolov8.yaml解讀

&#x1f368; 本文為&#x1f517;365天深度學習訓練營 中的學習記錄博客&#x1f356; 原作者&#xff1a;K同學啊 | 接輔導、項目定制 位置 該文件的位置位于 ./ultralytics/cfg/models/v8/yolov8.yaml 模型參數配置 # Parameters nc: 80 # number of classes scales: #…

碩士畢業論文格式修改要點_word

目錄 0、最開始要做的事情1、更改樣式&#xff08;先善器&#xff09;2、多級標題&#xff08;解決自動更新問題必要的基礎設置&#xff09;2、插入圖片&#xff08;1&#xff09;設置一個圖片樣式——“無間隔”&#xff08;2&#xff09;插入題注&#xff08;3&#xff09;修…

redis.conf詳解之replica-read-only

本文基于 redis_version:6.2.5 用法 控制從節點允許讀寫操作&#xff0c;還是讀操作。 replica-read-only yes 1 注意事項&#xff1a; 默認yes&#xff0c;只讀操作。 replica-read-only支持參數[yes,no]&#xff0c;no 支持讀寫操作。 這里說的從節點&#xff0c;是普通…

【flink番外篇】1、flink的23種常用算子介紹及詳細示例(完整版)

Flink 系列文章 一、Flink 專欄 Flink 專欄系統介紹某一知識點&#xff0c;并輔以具體的示例進行說明。 1、Flink 部署系列 本部分介紹Flink的部署、配置相關基礎內容。 2、Flink基礎系列 本部分介紹Flink 的基礎部分&#xff0c;比如術語、架構、編程模型、編程指南、基本的…

小白學java棧的經典算法問題——第四關白銀挑戰

內容1.括號匹配問題2.最小棧3.最大棧 1.括號匹配問題 棧的典型題目還是非常明顯的&#xff0c;括號匹配、表達式計算等等幾乎都少不了棧&#xff0c;本小節我們就看兩個最經典的問題 首先是LeetCode20,鏈接 本道題還是比較簡單的&#xff0c;其中比較麻煩的是如何判斷兩個符…

力扣面試題 08.12. 八皇后(java回溯解法)

Problem: 面試題 08.12. 八皇后 文章目錄 題目描述思路解題方法復雜度Code 題目描述 思路 八皇后問題的性質可以利用回溯來解決&#xff0c;將大問題具體分解成如下待解決問題&#xff1a; 1.以棋盤的每一行為回溯的決策階段&#xff0c;判斷當前棋盤位置能否放置棋子 2.如何判…

hbuilder + uniapp +vue3 開發微信云小程序

1、創建項目&#xff1a; 2、創建項目完成的默認目錄結構&#xff1a; 3、在根目錄新建一個文件夾cloudFns&#xff08;文件名字隨便&#xff09;&#xff0c;存放云函數源碼&#xff1a; 4、修改manifest.json文件&#xff1a;添加 小程序 appid和cloudfunctionRoot&#xff0…

python的websocket方法教程

WebSocket是一種網絡通信協議&#xff0c;它在單個TCP連接上提供全雙工的通信信道。在本篇文章中&#xff0c;我們將探討如何在Python中使用WebSocket實現實時通信。 websockets是Python中最常用的網絡庫之一&#xff0c;也是websocket協議的Python實現。它不僅作為基礎組件在…

pyside/qt03——人機協同的編程教學—直接面向chatGPT實戰開發(做中學,事上練)

先大概有個草圖框架&#xff0c;一點點豐富 我糾結好久&#xff0c;直接用Python寫UI代碼 還是用designer做UI 再轉Python呢&#xff0c; 因為不管怎么樣都要轉成Python代碼&#xff0c; 想了想還是學一下designer吧&#xff0c;有個中介&#xff0c;有直觀理解。 直接這樣也可…

智能優化算法應用:基于食肉植物算法無線傳感器網絡(WSN)覆蓋優化 - 附代碼

智能優化算法應用&#xff1a;基于食肉植物算法無線傳感器網絡(WSN)覆蓋優化 - 附代碼 文章目錄 智能優化算法應用&#xff1a;基于食肉植物算法無線傳感器網絡(WSN)覆蓋優化 - 附代碼1.無線傳感網絡節點模型2.覆蓋數學模型及分析3.食肉植物算法4.實驗參數設定5.算法結果6.參考…

設計并實現一個多線程圖書館管理系統,涉及數據庫操作

沒有實現全部功能&#xff0c;希望路過的大佬&#xff0c;可以實現全部功能&#xff0c;在評論區聊聊 創建數據庫library-demo CREATE DATABASE library-demo創建圖書表book CREATE TABLE book (bookId int(11) NOT NULL AUTO_INCREMENT COMMENT 圖書ID,bookName varchar(15)…

QUIC協議對比TCP網絡性能測試模擬弱網測試

QUIC正常外網壓測數據---時延diff/ms如下圖&#xff1a; QUIC弱網外網壓測數據 TCP正常外網壓測數據 TCP弱網外網壓測數據 結論&#xff1a; 在弱網情況下&#xff0c;TCP和QUIC協議的表現會有所不同。下面是它們在弱網環境中的性能對比&#xff1a; 連接建立&#xff1a;…

HarmonyOS創建JavaScript(類 Web開發模式)項目

上文 HarmonyOS帶大家創建自己的第一個Page頁面并實現路由跳轉(ArkTS)帶大家創建了我們項目中第一個自己創建的page 并完成了一個跳轉邏輯的編寫 上文的開發模式是 ArkTS 的 也被稱為 聲明式開發范式 還有一種 javaScript的 類Web開發模式 這種方式就類似于我們傳統的前端開發模…