最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

【UE4材質(zhì)】紋理數(shù)組Texture2DArray說明

2023-05-20 21:04 作者:這就很離譜丶  | 我要投稿

Texture2DArray說白了就是將貼圖打成一組,一個(gè)集合/紋理數(shù)組。

什么情況下需要用Texture2DArray,目前我接觸到的基本都在地形或者建筑模型需要刷混合的時(shí)候用。

為什么要強(qiáng)調(diào)Texture2DArray在地形上的應(yīng)用?

紋理數(shù)組UTexture2DArray能夠讓我們輕松使用更多的紋理而不受制于采樣數(shù)目的限制。

說白了就是可以減少bind,優(yōu)化性能,減少性能消耗,尤其是手游用的比較多。

Texture2DArray具體的優(yōu)勢解釋起來比較復(fù)雜:

下面我收集了網(wǎng)上部分大佬的解釋:

  • A

  • 為什么要強(qiáng)調(diào)Texture2DArray可以用于地形,除了減少Bind以外有什么優(yōu)勢?既然每個(gè)Slice都要Sampling的話,性能上應(yīng)該沒有明顯區(qū)別才對?

  • 主要是為了減少 Bind,因?yàn)槔?API 對 texture slot 個(gè)數(shù)有限制。

  • 2. 假設(shè)如一些資料所說Texture2DArray對比多個(gè)Texture有性能優(yōu)勢的話,那么是不是更極端點(diǎn)直接用Texture3D?Trilinear filtering甚至可以代替Shader里Blend的過程吧?但是實(shí)際沒有見過這種做法不知道是不是有什么沒有考慮到的地方。

  • Texture3D 只能對相鄰的兩個(gè) slice 進(jìn)行插值。

  • 地形貼圖不止用兩張貼圖喲,可能 n 張貼圖同時(shí) blend。

  • B

  • 為什么要強(qiáng)調(diào)Texture2DArray可以用于地形,除了減少Bind以外有什么優(yōu)勢?既然每個(gè)Slice都要Sampling的話,性能上應(yīng)該沒有明顯區(qū)別才對?

  • 主要是為了減少 Bind,因?yàn)槔?API 對 texture slot 個(gè)數(shù)有限制。

  • 2. 假設(shè)如一些資料所說Texture2DArray對比多個(gè)Texture有性能優(yōu)勢的話,那么是不是更極端點(diǎn)直接用Texture3D?Trilinear filtering甚至可以代替Shader里Blend的過程吧?但是實(shí)際沒有見過這種做法不知道是不是有什么沒有考慮到的地方。

  • Texture3D 只能對相鄰的兩個(gè) slice 進(jìn)行插值。

  • 地形貼圖不止用兩張貼圖喲,可能 n 張貼圖同時(shí) blend。

  • C

  • 1. Texture2DArray和Texture2D有什么區(qū)別,為什么在地形圖上要使用前者? 首先,像前面人回答的一樣,texture2Darray可以減少binding的次數(shù),但是這并不是主要原因。最重要的是Texture2DArray可以實(shí)現(xiàn)layer間的sampling & blending。舉個(gè)簡單的例子,假設(shè)你的Texture2DArray中有三層, 在某個(gè)場景下你需要從第二層和第一層分別sampling,再進(jìn)行blending時(shí),Texture2DArray就有這樣的硬件支持。一般GPU Texture pipeline中,Texture2DArray的紋理坐標(biāo)由r,s,t三個(gè)維度組成,而普通texture2D的只有r,s兩個(gè)維度。這就意味著在計(jì)算LOD時(shí),texture2D沒有辦法實(shí)現(xiàn)layer與layer之間的blending,相反Texture2DArray就可以。這要比你在Fragment shader中,讀取多個(gè)單一2維texture再blending要快多了。

  • 2. Texture2DArray和Texture3D有什么區(qū)別,為什么不直接用Texture3D?

  • 很多人對于這兩者都有些迷惑。舉個(gè)最形象的例子,Texture2DArray像一個(gè)相冊,每一頁都是一個(gè)獨(dú)立的圖片。而Texture3D像一個(gè)香腸,你用刀把它切成了幾節(jié),每一節(jié)看成一個(gè)2D texture。 了解到這點(diǎn), 你就知道為什么在地形圖這種場景下,要使用Texture2DArray了。

  • D

  • 問題:2D 紋理數(shù)組和 3D 紋理有什么區(qū)別?(1D 紋理數(shù)組和 2D 紋理的類似問題)

  • 它們根本沒有相似之處。至少,從概念上講。2D 數(shù)組紋理是一種 2D 紋理,其中每個(gè) mipmap 級別都包含一個(gè) 2D 圖像數(shù)組。3D 紋理是每個(gè) mipmap 級別包含單個(gè)三維圖像的紋理。

  • 2D 數(shù)組紋理的目的是能夠在單個(gè)對象中具有多個(gè) 2D 紋理。這樣,著色器本身就可以選擇要用于每個(gè)特定對象的圖像。紋理坐標(biāo)的含義與 2D 紋理相同:表示 2D 空間中的位置。只是您還有一個(gè)選擇器,可以說明要使用的數(shù)組中的哪個(gè) 2D 圖像。

  • 3D 紋理都是關(guān)于從數(shù)據(jù)量中采樣的。也就是說,您具有本質(zhì)上是三維的紋理坐標(biāo),可能表示紋理體積空間內(nèi)的位置。

  • 這兩種紋理類型不會相互競爭。也就是說,你可以用2D數(shù)組紋理來解決,也可以用3D紋理解決(或者至少,不是沒有躲避某種形式的視覺偽影)。反之亦然;如果您需要 3D 紋理,則它處于不適合使用 2D 數(shù)組紋理的問題空間中。

  • 哦,當(dāng)然,在硬件內(nèi)部,它們大多只是它們之間的一些差異。具體來說,數(shù)組的較低 mipmap 具有相同的深度但不同的寬度和高度,并且數(shù)組的過濾始終最接近 Z 分量。但就OpenGL本身(以及任何一種紋理類型的使用)而言,它們是兩個(gè)不同的東西,它們解決了兩組完全不同的問題。

  • 因此,永遠(yuǎn)不應(yīng)該有您試圖在其中一個(gè)之間進(jìn)行選擇的情況。

  • bind texture對于api是非常費(fèi)cpu的操作。如果沒有bind texture array。綁定八個(gè)貼圖需要8個(gè)bing texture??赡苄枰獛装俸撩?。 有了texture array。一個(gè)綁定操作就可以了。

  • 對于dx12 或者 Vulkan。沒有綁定texture的概念。一個(gè)texture 已經(jīng)很像cpu的一個(gè)內(nèi)存指針。想用多少都可以。

UTexture2DArray源碼,默認(rèn)是開啟的。

UTexture2DArray源碼
UTexture2DArray源碼

若右鍵創(chuàng)建Materials&Textures列表沒有Texture2DArray,在Cmd中輸入命令r.AllowTexture2DArrayCreation 1開啟

了解以后,下面是使用方法:
創(chuàng)建方法:

材質(zhì)如何使用Texture2DArray?

把貼圖放入其中

圖片尺寸或格式需要保持一致

檢查

UV第三個(gè)變量Z表示貼圖索引

采樣數(shù)目對比


【UE4材質(zhì)】紋理數(shù)組Texture2DArray說明的評論 (共 條)

分享到微博請遵守國家法律
文水县| 清新县| 蒙城县| 西城区| 普宁市| 四会市| 来宾市| 隆回县| 来凤县| 沾化县| 宁德市| 静安区| 汉川市| 怀化市| 保康县| 敦化市| 大新县| 上杭县| 阿坝县| 惠东县| 兴海县| 邯郸市| 循化| 丽水市| 新邵县| 鹤庆县| 邵阳县| 合作市| 临沧市| 黎川县| 邳州市| 通榆县| 利津县| 林州市| 英超| 香河县| 共和县| 西和县| 盐亭县| 奉节县| 台中县|