Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

匯入圖像

支援的圖片格式

Godot 可匯入下列圖片格式:

  • BMP (.bpm) - 不支援每像素 16 位元的圖片。僅支援每像素 1 位元、4 位元、8 位元、24 位元與 32 位元的圖片。

  • DirectDraw Surface (.dds) - 若紋理中有 Mipmap,則會直接載入 Mipmap。可以使用自定 Mipmap 來製作特效。

  • Khronos Texture (.ktx) - Decoding is done using libktx. Only supports 2D images. Cubemaps, texture arrays and de-padding are not supported.

  • OpenEXR (.exr) - 支援 HDR (強烈建議用於全景天空)。

  • Radiance HDR (.hdr) - 支援 HDR (強烈建議用於全景天空)。

  • JPEG (.jpg, .jpeg) - 由於檔案格式限制,不支援透明度。

  • PNG (.png) - 匯入時精度限制在每頻道 8 位元 (無 HDR 圖片)。

  • Truevision Targa (.tga)

  • SVG (.svg, .svgz) - SVG 在匯入時會使用 NanoSVG 柵欄化。支援有限。可能無法正確渲染複雜的向量。若為較複雜的向量,建議使用 Inkscape 渲染為 PNG 以獲得最佳效果。此操作可使用 Inkscape 的 命令行界面 (英文) 來自動化。

  • WebP(.webp)——WebP 檔支援透明,也支援有損和無失真壓縮。精度限制是每通道 8 位。

備註

若使用自行從原始碼編譯的 Godot 編輯器時禁用了特定模組,可能會無法使用某些格式。

匯入紋理

Godot 中的預設操作是將圖片匯入為紋理。紋理保存在視訊記憶體中,無法直接存取。這樣一來也能有效率地繪製。

在檔案系統擴充座中選擇影像後,可以調整十多個匯入選項:

在檔案系統擴充座中選擇影像後,匯入擴充座中的匯入選項

在檔案系統擴充座中選擇影像後,匯入擴充座中的匯入選項。其中一些選項僅在某些壓縮模式下可見。

更改匯入資源型別

可以在“匯入”面板中選擇其他匯入資源的型別:

  • BitMap: 1 位元單色紋理(設計用於 class_TextureButton 和 class_TouchScreenButton 中的按一下遮罩)。此資源型別無法直接顯示在 2D 或 3D 節點上,但可以使用 get_bit <class_BitMap_method_get_bit> 從腳本中查詢像素值。

  • 立方體貼圖: 將紋理匯入為 6 面立方體貼圖,並在立方體貼圖的側面(無縫立方體貼圖)之間進行插值,可以在自訂著色器中進行取樣。

  • CubemapArray: 將紋理匯入為 6 面立方體貼圖的集合,可以在自訂著色器中對其進行取樣。此資源型別僅在使用 Forward+ 或 Forward Mobile 渲染方法時才能顯示,而無法顯示相容性。

  • 字形資料(等寬圖像字形): 將圖像匯入為點陣字形,其中所有字元都具有相同的寬度。請參閱:ref:doc_gui_using_fonts

  • 影像: 依原樣匯入影像。此資源型別無法直接顯示在 2D 或 3D 節點上,但可以使用 get_pixel<class_Image_method_get_pixel> 從腳本中查詢像素值。

  • Texture2D: 將影像匯入為 2 維紋理,適合在 2D 和 3D 表面上顯示。這是預設的匯入模式。

  • Texture2DArray: 將影像匯入為二維紋理的集合。 Texture2DArray 類似於 3 維紋理,但圖層之間沒有插值。內建 2D 和 3D 著色器無法顯示紋理陣列,因此您必須在 2D <doc_canvas_item_shader>` 或 3D 中建立自訂著色器以顯示紋理陣列中的紋理。

  • Texture3D: 將影像匯入為 3 維紋理。這*不是*應用在 3D 表面上的 2D 紋理。 Texture3D 類似於紋理陣列,但在圖層之間進行插值。 Texture3D 通常用於體積霧 <doc_volumetric_fog>、class_Environment 3D LUT 色彩校正和自訂著色器中的 class_FogMaterial 密度圖。

  • TextureAtlas: 將影像匯入為不同紋理的*合集*。可用於減少動畫 2D 精靈的記憶體使用量。由於缺少內建 3D 著色器的支援,僅支援 2D。

偵測3D

預設的匯入選項(不帶 mipmap 並且使用 Lossless 壓縮)適合 2D,對於大多數 3D 專案而言並不理想。偵測 3D**能夠讓 Godot 關注紋理在 3D 場景中的使用(例如用作 :ref:`class_BaseMaterial3D` 的紋理)。一旦使用,就會將部分匯入選項進行修改,這樣紋理旗標就對 3D 更友好。除非修改了 :ref:`doc_importing_images_detect_3d_compress_to`,否則此時就會啟用 mipmap 並將壓縮模式修改為 **VRAM Compressed。紋理會自動進行重新匯入。

偵測到紋理在 3D 中使用時會在“輸出”面板中列印一個消息。

如果紋理偵測到在 3D 中使用後遇到了品質問題(例如像素風紋理),請在用於 3D 之前修改 偵測 3D > 壓縮到 選項,或者在用於 3D 之後將 壓縮模式 修改為 Lossless。這樣比禁用**偵測 3D** 更好,因為仍然會啟用 mipmap 生成,從遠處觀察紋理就不會感覺模糊。

匯入選項

也參考

在 Godot 4.0 中,對紋理篩選模式以及重複模式的修改不再位於匯入選項中。

現在,2D 中需要在 CanvasItem 的屬性中對紋理篩選模式和重複模式進行修改(專案設定中可以設定預設值),3D 中則是:ref:針對材質進行配置 <doc_standard_material_3d_sampling>。在自訂著色器中,sampler2D uniform 的篩選和重複模式使用提示修改,見 著色語言 文件。

壓縮模式

圖片是遊戲中其中一個最大的素材。為了有效率地處理圖片,應該進行壓縮。Godot 依據使用情況,提供了數種壓縮方法。

  • Lossless - 無損壓縮: 最常用於 2D 素材。不會顯示出噪點,也有適當地壓縮硬碟空間。雖然通常會使用比 VRAM 壓縮更多的視訊記憶體。該模式也建議用於像素畫 (Pixel Art)。

  • Lossy - 有損壓縮: 有損壓縮適合用於大型 2D 素材。會產生噪點,但比 VRAM 少,且檔案大小比起無損壓縮或無壓縮也小了數倍。此種模式並未降低視訊記憶體使用量,與 Lossless 無損壓縮及 Uncompressed 無壓縮相同。

  • VRAM 壓縮: 3D 素材中最常見的壓縮方式。可以減少硬碟暫用與記憶體使用 (通常介於 4 倍與 6 倍間)。由於會出現明顯的噪點,建議不要在 2D 素材上使用。

  • Uncompressed - 無壓縮: 只適用於無法壓縮的格式 (如 raw float 圖片)。

  • **Basis Universal:**這也是一種 VRAM 壓縮模式,編碼後的紋理格式為能夠在載入時轉碼為大多數 GPU 壓縮格式。這樣得到的檔就很小,能夠利用 VRAM 壓縮,但相對於 VRAM 壓縮而言品質較差,壓縮耗時也更長。顯存佔用通常和 VRAM 壓縮相同。Basis Universal 不支援浮點數圖像格式(引擎會在內部退回至 VRAM 壓縮)。

備註

即便在 3D 中,“像素畫”紋理也應該禁用 VRAM 壓縮,因為壓縮會對外觀產生負面影響,較低的解析度也無法得到顯著的性能提升。

在下表中,分別寫出了四個選項各自的優點與缺點 (good = 最優、 與 = 最差):

壓縮模式

無損壓縮 (PNG)

Lossy

壓縮

無壓縮

Basis Universal

描述

無損壓縮 (PNG)

保存為 WebP

依據不同平台,保存為 S3TC/BC 或 PVRTC/ETC

以原始像素點保存

轉碼至 VRAM Compressed 格式

硬碟空間

\|regular\| 小

good 非常小

\|regular\| 小

與

good 非常小

記憶體佔用

與

與

good

與

good

效能

\|regular\| 小 普通

\|regular\| 小 普通

good

\|regular\| 小 普通

good

品質損失

good

\|regular\| 小 稍微

與 中等

good

與 中等

載入時間

與

與

good

\|regular\| 小 普通

\|regular\| 小 普通

單張 RGBA8 紋理啟用 mipmap 後的預估記憶體佔用:

紋理貼圖

無損壓縮 (PNG)

Lossy

壓縮

無壓縮

Basis Universal

128×128

good 85 KiB

good 85 KiB

good 21 KiB

good 85 KiB

good 21 KiB

256×256

good 341 KiB

good 341 KiB

good 85 KiB

good 341 KiB

good 85 KiB

512×512

good 1.33 MiB

good 1.33 MiB

good 341 KiB

good 1.33 MiB

good 341 KiB

1024×1024

\|regular\| 小 稍微

\|regular\| 小 稍微

good 1.33 MiB

\|regular\| 小 稍微

good 1.33 MiB

2048×2048

與 21.33 MiB

與 21.33 MiB

\|regular\| 小 稍微

與 21.33 MiB

\|regular\| 小 稍微

4096×4096

與 85.33 MiB

與 85.33 MiB

與 21.33 MiB

與 85.33 MiB

與 21.33 MiB

備註

在上表中,對於沒有 Alpha 通道 (RGB8) 的圖像,記憶體使用量將減少 25%。對於停用 mipmap 的影像,記憶體使用量將進一步減少 25%。

請注意,在解析度較高的情況下,VRAM 壓縮的影響要大得多。 VRAM 壓縮採用 4:1 的壓縮比(對於 S3TC 的不透明紋理為 6:1),可以有效地使紋理在每個軸上增大兩倍,同時在 GPU 上使用相同數量的記憶體。

VRAM 壓縮還減少了取樣紋理所需的記憶體頻寬,這可以加快記憶體頻寬受限場景(整合顯示卡和行動裝置上常見)的渲染速度。這些因素結合在一起,使得 VRAM 壓縮成為具有高解析度紋理的 3D 遊戲的必備條件。

您可以透過在檔案系統停靠欄中雙擊紋理,然後查看屬性面板來預覽紋理所佔用的記憶體量:

在屬性面板中預覽紋理

在屬性面板中預覽紋理。圖片來源:Red Brick 03 - Poly Haven

壓縮 > 高品質

備註

高品質 VRAM 紋理壓縮僅在 Forward+ 和 Forward Mobile 渲染方法中支援。

使用相容性渲染方法時,此選項始終被視為停用。

如果啟用,則在桌面平台上使用 BPTC 壓縮,在行動平台上使用 ASTC(自適應可擴充紋理壓縮)壓縮。使用BPTC時,BC7用於SDR紋理,BC6H用於HDR紋理。

如果停用(預設),則在桌面平台上使用速度更快但品質較低的 S3TC 壓縮,在行動裝置/Web 平台上使用 ETC2。使用 S3TC 時,DXT1 (BC1) 用於不透明紋理,DXT5 (BC3) 用於透明或法線貼圖(RGTC(紅綠紋理壓縮))紋理。

BPTC 和 ASTC 支援 HDR 紋理的 VRAM 壓縮,但 S3TC 和 ETC2 不支援(請參閱下方的 HDR 壓縮)。

無損壓縮 (PNG)

備註

此選項僅對在 Godot 中以 HDR 格式匯入的紋理(.hdr.exr 檔案)有影響。

如果設定為**停用**,則永遠不會對 HDR 紋理使用 VRAM 壓縮,無論它們是不透明還是透明。相反,紋理會轉換為 RGBE9995(每通道 9 位元 + 5 位元指數 = 每像素 32 位元),以減少與半浮點或單精確度浮點影像格式相比的記憶體使用量。

如果設定為 **Opaque Only**(預設),則僅對不透明 HDR 紋理使用 VRAM 壓縮。這是由於 HDR 格式的限制,因為沒有同時支援透明度的 VRAM 壓縮 HDR 格式。

如果設定為**始終**,即使對於具有 Alpha 通道的 HDR 紋理,也會強制進行 VRAM 壓縮。為此,在匯入時將丟棄 Alpha 通道。

法線貼圖

當使用作為法線對應的紋理貼圖時,只需要紅色與綠色通道。使用一般的紋理貼圖壓縮演算法會產生噪點,使法線對應不那麼好看。RGTC 壓縮格式最適合用於此資料。將該選項強制設為「Enabled」會使 Godot 以 RGTC 壓縮匯入圖片。預設情況下,該選項設為「Detect」則代表若貼圖有用於法線對應,則會自動更改為「Enabled」並重新匯入。

請注意,RGTC 壓縮會影響法線對應圖片。為此則必須手動調整使用該法線對應的著色器。

在下面的範例中,使用 RGTC(紅綠紋理壓縮)壓縮的法線貼圖能夠更好地保留其細節,同時使用與標準 RGBA VRAM 壓縮紋理相同的記憶體量:

採用標準 VRAM 壓縮(左)與採用 RGTC VRAM 壓縮(右)的法線貼圖

採用標準 VRAM 壓縮(左)與採用 RGTC VRAM 壓縮(右)的法線貼圖

備註

Godot 中的法線對應必須使用 X+, Y- 與 Z+ 座標。換句話說,若匯入使用於其他引擎的素材,則必須將其 Y 軸翻轉過來,否則,法線對應方向的 Y 軸可能會顯示為相反。

有關更多法線對應的資訊 (包含各種常見引擎的座標順序表),請參考 此處 (英文)

壓縮 > 通道包

如果設定為 **sRGB 友善**(預設),則會阻止使用 RG 顏色格式,因為它不支援 sRGB 顏色。

如果設定為 最佳化,則在紋理不使用藍色通道時允許使用 RG 顏色格式。

第三個選項**法線貼圖(RG 通道)** 在分層紋理中可用(CubemapCubemapArrayTexture2DArray 和:ref:` class_Texture3D`) 。這會強制使用 RG 顏色格式匯入紋理中的所有圖層,以減少記憶體使用量,並且僅保留紅色和綠色通道。這僅對具有 VRAM 壓縮Basis Universal 壓縮模式的紋理有影響。

產生的檔案

如果啟用,匯入時會產生較小版本的紋理。例如,64×64 紋理將產生 6 個 mipmap(32×32、16×16、8×8、4×4、2×2、1×1)。這樣做有幾個好處:

  • 紋理在遠處(3D 中)或由於相機變焦或 CanvasItem 縮放(2D 中)而縮小時不會變得顆粒狀。

  • 如果紋理顯示在遠處,效能將會提高,因為對原始紋理的較小版本進行取樣速度更快並且需要更少的記憶體頻寬。

mipmaps 的缺點是會增加大約 33% 的記憶體使用量。

建議在 3D 中啟用 mipmap。但是,在 2D 中,僅當您的專案明顯受益於啟用 mipmap 時才應啟用此功能。如果相機從不大幅縮小,啟用 mipmap 不會有任何好處,但記憶體使用量會增加。

Mipmap

警告

Mipmaps > Limit 目前未實作,更改後無效。

如果設定為大於「-1」的值,則會限制可以產生的 mipmap 的最大數量。如果您不希望紋理在極遠距離處變得分辨率過低(以一些顆粒感為代價),則可以降低此值。

壓縮模式

將此紋理視為粗糙度貼圖的色彩通道。僅當 Roughness > Src Normal 不為空時才有效。

粗糙度 > Src 法線

紋理的路徑被視為匯入時粗糙度篩選的法線貼圖。指定此項有助於稍微減少 3D 中的鏡面鋸齒。

匯入時的粗糙度篩選僅用於 3D 渲染,不適用於 2D。

修正Alpha邊界

該處理會將周圍有相同顏色的像素從透明轉變為非透明。可有效減少從 Photoshop 等軟體匯出的圖片中的外框線效果。

../../_images/fixedborder.png

建議啟用此功能(預設),除非這會導致特定影像出現問題。

Premultiplied Alpha - 預乘 Alpha

另一種修正深色邊框的方法是使用預乘 Alpha。開啟該選項後,紋理貼圖會轉換為此格式。請注意,必須先建立材料,且該材料需在有需要的專案上開啟「Premult Alpha」混合模式。

  • 在 2D 中,需要建立並配置 class_CanvasItemMaterial ,以便在使用此紋理的 CanvasItem 上使用 Premul Alpha 混合模式。

  • 在 3D 中,尚不支援預乘 alpha 混合模式,因此此選項僅適用於 2D。

處理 > 法線貼圖反轉 Y

Godot 中的法線對應必須使用 X+, Y- 與 Z+ 座標。換句話說,若匯入使用於其他引擎的素材,則必須將其 Y 軸翻轉過來,否則,法線對應方向的 Y 軸可能會顯示為相反。

有關更多法線對應的資訊 (包含各種常見引擎的座標順序表),請參考 此處 (英文)

HDR as sRGB - 將 HDR 轉為 sRGB

有些損壞的 HDR 包含 sRGB 色彩資料。建議不使用這些檔案。但,最糟的情況下,開啟該選項可使這些檔案正確顯示。

警告

在格式良好的 HDR 影像上啟用 HDR as sRGB 會導致產生的影像看起來太暗,因此如果不確定,請將此停用。

處理 > HDR 箝位曝光

您可以在網路上找到的一些 HDR 全景影像可能包含極其明亮的像素,因為這些影像取自現實生活來源,沒有任何剪輯。

雖然這些 HDR 全景影像準確反映現實生活,但這可能會導致 Godot 產生的輻射圖在用作背景天空時包含閃光。這可以在材料反射中看到(即使在極端情況下在粗糙材料上)。啟用 HDR 箝位曝光 可以使用智慧型箝位公式解決此問題,該公式不會引入 可見 剪輯 - 在查看背景天空時發光將繼續工作。

流程 > 尺寸限制

如果設定為大於「0」的值,則匯入時紋理的大小將限制為小於或等於此處指定的值。對於非方形紋理,大小限制會影響較長的尺寸,而較短的尺寸會縮放以保持縱橫比。調整大小是使用三次插值來執行的。

這可用於減少記憶體使用而不影響來源影像,或避免紋理在行動/Web 平台上不顯示的問題(因為這些平台通常無法顯示大於 4096×4096 的紋理)。

偵測 3D > 壓縮到

這會變更偵測到紋理在 3D 中使用時使用的 doc_importing_images_compress_mode` 選項。

只有當偵測到紋理正在 3D 中使用時,變更此匯入選項才會生效。將其變更為**停用**,然後重新匯入不會變更紋理上的現有壓縮模式(如果偵測到在3D 中使用),但選擇**VRAM 壓縮** 或**Basis Universal** 會變更。

最佳實踐

支援 2D 高解析度紋理尺寸,無偽影

要支援多種解析度<doc_multiple_resolutions>` 並在高解析度下獲得清晰的視覺效果,您需要使用高解析度來源影像(適合您希望支援且不模糊的最高分辨率,在現代桌上遊戲中通常為4K )。

Godot 沒有使用限制

  • 在專案設定中使用較高的基本解析度(例如 4K),然後以原始比例使用紋理。這是一種更簡單的方法。

  • 在專案設定中使用較低的基本解析度(例如 1080p),然後在使用它們時縮小紋理。這通常比較困難,並且會使腳本中的各種計算變得乏味,因此建議改用上述方法。

執行此操作後,您可能會注意到紋理在較低的視窗解析度下變得顆粒狀。若要解決此問題,請在匯入塢中的 2D 中使用的紋理上啟用 Mipmaps。這會增加記憶體使用量。

啟用 mipmap 還可以使紋理看起來更模糊,但您可以選擇透過將 渲染 > 紋理 > 預設濾鏡 > 紋理 Mipmap 偏差 設定為負值來使紋理更清晰(以一些顆粒度為代價)。

在 3D 中使用適當的紋理尺寸

雖然沒有「一刀切」的建議,但以下是選擇 3D 紋理尺寸的一些一般建議:

  • 應調整紋理的大小,使其與周圍物體相比具有一致的紋素密度。雖然在堅持使用二次方紋理大小時無法完美確保這一點,但通常可以在整個 3D 場景中保持紋理細節相當一致。

  • 螢幕上出現的物件越小,其紋理應該越小。例如,僅出現在背景中的樹不需要與玩家可以走近的其他物件一樣高的紋理解析度。

  • 建議使用二次方紋理大小,但不是必要的。紋理不必是正方形 - 1024×512 等尺寸也是可以接受的。

  • 儘管記憶體使用量和載入時間增加,但使用大紋理尺寸的收益遞減。大多數不使用像素藝術風格的現代 3D 遊戲平均堅持 2048×2048 紋理,而跨越較小表面的紋理則為 1024×1024 和 512×512。

  • 在 3D 中使用基於物理的材質時,您可以透過對某些紋理貼圖使用較低的解析度來減少記憶體使用量和檔案大小,而不會過度影響品質。這對於僅具有低頻細節的紋理(例如雪紋理的法線貼圖)尤其有效。

如果您可以控制 3D 模型的建立方式,那麼這些技巧也值得探索:

  • 當使用大部分對稱的 3D 模型時,您可以使用鏡像 UV 將有效紋素密度加倍。不過,當用在人臉上時,這可能看起來不自然。

  • 當使用低多邊形樣式和純色處理 3D 模型時,您可以依靠頂點顏色而不是紋理來表示模型表面上的顏色。

也參考

Images can be loaded and saved at runtime using runtime file loading and saving, including from an exported project.