匯入圖像
支援的圖片格式
Godot 可匯入下列圖片格式:
BMP (
.bpm) - 不支援每像素 16 位元的圖片。僅支援每像素 1 位元、4 位元、8 位元、24 位元與 32 位元的圖片。DirectDraw Surface (
.dds) - 若紋理中有 Mipmap,則會直接載入 Mipmap。可以使用自定 Mipmap 來製作特效。Khronos Texture (
.ktx) - 解碼使用 libktx。僅支援 2D 圖像,不支援立方體貼圖、紋理陣列與去填充。OpenEXR (
.exr) - 支援 HDR (強烈建議用於全景天空)。Radiance HDR (
.hdr) - 支援 HDR (強烈建議用於全景天空)。JPEG (
.jpg,.jpeg) - 由於檔案格式限制,不支援透明度。PNG (
.png) - 匯入時精度限制在每頻道 8 位元 (無 HDR 圖片)。Truevision Targa (
.tga)SVG(
.svg)— 匯入時會使用 ThorVG 進行柵格化。支援有限;複雜的向量圖可能無法正確顯示。文字必須轉換為路徑,否則在柵格化後的影像中不會出現。你可以用其 網頁版檢視器 檢查 ThorVG 是否能正確繪製特定向量。對於複雜向量,使用 Inkscape 先轉成 PNG 通常更佳;這可透過其 命令列介面 自動化。WebP(
.webp)——WebP 檔支援透明,也支援有損和無失真壓縮。精度限制是每通道 8 位。
備註
若使用自行從原始碼編譯的 Godot 編輯器時禁用了特定模組,可能會無法使用某些格式。
匯入紋理
Godot 中的預設動作是將影像匯入為貼圖。貼圖儲存在視訊記憶體中。若不將它們在腳本中轉換回 Image,其像素資料無法直接從 CPU 存取。這就是使它們的繪製變得有效率的原因。
在檔案系統擴充座中選擇影像後,可以調整十多個匯入選項:
在檔案系統擴充座中選擇影像後,匯入擴充座中的匯入選項。其中一些選項僅在某些壓縮模式下可見。
更改匯入資源型別
可以在“匯入”面板中選擇其他匯入資源的型別:
BitMap: 1 位元單色紋理(設計用於 TextureButton 和 TouchScreenButton 的點擊遮罩)。這類資源無法直接顯示於 2D 或 3D 節點上,但可於腳本中用 get_bit 查詢像素值。
立方體貼圖: 將紋理匯入為 6 面立方體貼圖,並在立方體貼圖的側面(無縫立方體貼圖)之間進行插值,可以在自訂著色器中進行取樣。
CubemapArray: 將紋理匯入為一組 6 面立方體貼圖,可以在自訂 shader 當中取樣。此資源型態僅能在 Forward+ 或 Mobile 算繪器中顯示,Compatibility 算繪器不支援。
字型資料(等寬點陣字型): 匯入圖像為等寬點陣字型(全部字元寬度一致)。詳見 使用字型。
影像: 保持原樣匯入影像。此類資源無法直接顯示於 2D 或 3D 節點,可用 get_pixel 在腳本查詢像素值。
Texture2D: 將影像匯入為 2 維紋理,適合在 2D 和 3D 表面上顯示。這是預設的匯入模式。
Texture2DArray: 將影像匯入為二維紋理陣列。Texture2DArray 類似三維紋理,但圖層間無插值。內建 2D、3D 著色器無法顯示紋理陣列,需在 2D 或 3D 自訂著色器顯示。
Texture3D: 將圖片匯入為三維貼圖。這*不是*將 2D 貼圖套用在 3D 表面上。Texture3D 類似於貼圖陣列,但支援圖層間插值。Texture3D 通常用於 FogMaterial 密度圖、volumetric fog、粒子吸引場 向量場、Environment 3D LUT 色彩校正及自訂著色器。
TextureAtlas: 將影像匯入為不同紋理的*合集*。可用於減少動畫 2D 精靈的記憶體使用量。由於缺少內建 3D 著色器的支援,僅支援 2D。
Cubemap 須依 Godot 坐標系,圖片順序為 X+、X-、Y+、Y-、Z+、Z-(Y+ 為「上」,Z- 為「前」)。以下提供常用立方體貼圖模板(右鍵另存連結):
偵測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 中則是 針對材質進行配置。在自訂著色器中, 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 壓縮,因為壓縮會明顯影響畫面品質,而低解析度本身並不會帶來顯著效能提升。
在下表中, 分別寫出了四個選項各自的優點與缺點 (
= 最優、
= 最差):
壓縮模式 |
無損壓縮 (PNG) |
Lossy |
壓縮 |
無壓縮 |
Basis Universal |
|---|---|---|---|---|---|
說明 |
無損壓縮 (PNG) |
保存為 WebP |
依據不同平台,保存為 S3TC/BC 或 PVRTC/ETC |
以原始像素點保存 |
轉碼至 VRAM Compressed 格式 |
硬碟空間 |
|
|
|
|
|
記憶體佔用 |
|
|
|
|
|
效能 |
|
|
|
|
|
品質損失 |
|
|
|
|
|
載入時間 |
|
|
|
|
|
單張 RGBA8 紋理啟用 mipmap 後的預估記憶體佔用:
紋理貼圖 |
無損壓縮 (PNG) |
Lossy |
壓縮 |
無壓縮 |
Basis Universal |
|---|---|---|---|---|---|
128×128 |
|
|
|
|
|
256×256 |
|
|
|
|
|
512×512 |
|
|
|
|
|
1024×1024 |
|
|
|
|
|
2048×2048 |
|
|
|
|
|
4096×4096 |
|
|
|
|
|
備註
在上表中,對於沒有 Alpha 通道 (RGB8) 的圖像,記憶體使用量將減少 25%。對於停用 mipmap 的影像,記憶體使用量將進一步減少 25%。
請注意,在解析度較高的情況下,VRAM 壓縮的影響要大得多。 VRAM 壓縮採用 4:1 的壓縮比(對於 S3TC 的不透明紋理為 6:1),可以有效地使紋理在每個軸上增大兩倍,同時在 GPU 上使用相同數量的記憶體。
VRAM 壓縮還減少了取樣紋理所需的記憶體頻寬,這可以加快記憶體頻寬受限場景(整合顯示卡和行動裝置上常見)的算繪速度。這些因素結合在一起,使得 VRAM 壓縮成為具有高解析度紋理的 3D 遊戲的必備條件。
您可以透過在檔案系統停靠欄中雙擊紋理,然後查看屬性檢視器來預覽紋理所佔用的記憶體量:
在屬性檢視器中預覽紋理。圖片來源:Red Brick 03 - Poly Haven
壓縮 > 高品質
備註
高品質 VRAM 貼圖壓縮僅支援於 Forward+ 與 Mobile 算繪器。
若使用 Compatibility 算繪器,此選項一律視為關閉。
如果啟用,則在桌面平台上使用 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 壓縮(右)的法線貼圖
備註
Godot 中的法線對應必須使用 X+, Y- 與 Z+ 座標。換句話說,若匯入使用於其他引擎的素材,則必須將其 Y 軸翻轉過來,否則,法線對應方向的 Y 軸可能會顯示為相反。
有關更多法線對應的資訊 (包含各種常見引擎的座標順序表),請參考 此處 (英文) 。
壓縮 > 通道包
如果設定為 sRGB 友善 (預設),則會阻止使用 RG 顏色格式,因為它不支援 sRGB 顏色。
如果設定為 最佳化,則在紋理不使用藍色通道時允許使用 RG 顏色格式。
第三個選項 Normal Map(RG 通道) 僅適用於分層貼圖( Cubemap 、 CubemapArray 、 Texture2DArray 、 Texture3D )。這會強制所有圖層匯入時只保留紅、綠通道(RG 格式)。 RGTC 壓縮能保持細節且記憶體用量與標準 RGBA VRAM 壓縮相同。僅當壓縮模式為 VRAM Compressed 或 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 不為空時才有效。
粗糙度 > 源法線
紋理的路徑被視為匯入時粗糙度篩選的法線貼圖。指定此項有助於稍微減少 3D 中的鏡面鋸齒。
匯入時的粗糙度篩選僅用於 3D 算繪,不適用於 2D。
修正Alpha邊界
該處理會將周圍有相同顏色的像素從透明轉變為非透明。可有效減少從 Photoshop 等軟體匯出的圖片中的外框線效果。
建議啟用此功能(預設),除非這會導致特定影像出現問題。
Premultiplied Alpha - 預乘 Alpha
另一種修正深色邊框的方法是使用預乘 Alpha。開啟該選項後,紋理貼圖會轉換為此格式。請注意,必須先建立材料,且該材料需在有需要的專案上開啟「Premult Alpha」混合模式。
在 2D 中,對於使用此貼圖的 CanvasItem,需要建立並設定一個 CanvasItemMaterial 以使用 預乘 Alpha 混合模式。在 custom canvas item shaders 中,應該使用
render_mode blend_premul_alpha;。在 3D 中,需要建立並設定一個 BaseMaterial3D 以在使用了此貼圖的材質上使用 預乘 Alpha 混合模式。在 自訂空間著色器 中,應該使用
render_mode blend_premul_alpha;。
處理 > 法線貼圖反轉 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 中使用時使用的 壓縮模式 選項。
只有當偵測到紋理正在 3D 中使用時,變更此匯入選項才會生效。將其變更為**停用**,然後重新匯入不會變更紋理上的現有壓縮模式(如果偵測到在3D 中使用),但選擇**VRAM 壓縮** 或**Basis Universal** 會變更。
SVG > 縮放
僅適用於 SVG 圖像。
設定 SVG 繪製的比例,1.0 為原始設計尺寸。值越高,圖像越大。注意這會直接影響 2D 中 SVG 的實際大小(不同於字型超採樣)。另見下方 編輯器 > 隨編輯器縮放。
編輯器 > 隨編輯器縮放
僅適用於 SVG 圖像。
啟用時,匯入圖像會自動依編輯器顯示縮放比例縮放。建議用於編輯器外掛圖示、自訂類別圖示,其餘情境請保持停用。
編輯器 > 隨主題轉換顏色
僅適用於 SVG 圖像。
如果勾選,將匯入圖像的顏色轉換以符合編輯器的圖示與字型調色盤。這假設圖像使用的顏色與 Godot 自己的編輯器圖示調色盤 完全相同,且原始檔是為深色編輯器主題設計的。這應該啟用用於編輯器外掛程式圖示和自訂類別圖示,否則應該保持停用。
匯入含有文字的 SVG 圖像
由於 Godot 使用的 SVG 函式庫不支援將 SVG 圖中的文字柵格化,匯入前你必須先將文字轉為路徑。否則那些文字在轉 JPG/PNG 點陣圖時會完全消失。
有兩種不損原檔的方式可以讓你轉換 SVG 文字成路徑(這樣日後還能回頭編輯原始文字):
在 Inkscape 選取你的文字物件,按 Ctrl + D 複製一份,然後用「路徑 > 物件轉路徑」。複製完後,可用「圖層與物件」面板把原本的文字物件隱藏起來。
或是用 Inkscape 的命令列工具,從原 SVG 輸出一份文字已轉為路徑的 SVG:
inkscape --export-text-to-path --export-filename svg_with_text_converted_to_path.svg svg_with_text.svg
最佳實務
支援 2D 高解析度紋理尺寸,無偽影
為了支援具有高解析度清晰視覺效果的 多種解析度,您需要使用高解析度原始圖片 (適用於您希望支援的最高解析度且不會模糊,在現代桌面遊戲中通常為 4K)。
有兩種方式可以繼續:
在專案設定中使用較高的基本解析度(例如 4K),然後以原始比例使用紋理。這是一種更簡單的方法。
在專案設定中使用較低的基本解析度(例如 1080p),然後在使用它們時縮小紋理。這通常比較困難,並且會使腳本中的各種計算變得乏味,因此建議改用上述方法。
執行此操作後,您可能會注意到紋理在較低的視窗解析度下變得顆粒狀。若要解決此問題,請在匯入塢中的 2D 中使用的紋理上啟用 Mipmaps。這會增加記憶體使用量。
啟用 mipmap 還可以使紋理看起來更模糊,但您可以選擇透過將 算繪 > 紋理 > 預設濾鏡 > 紋理 Mipmap 偏差 設定為負值來使紋理更清晰(以一些顆粒度為代價)。
在 3D 中使用適當的紋理尺寸
雖然沒有「一刀切」的建議,但以下是選擇 3D 紋理尺寸的一些一般建議:
應調整紋理的大小,使其與周圍物體相比具有一致的紋素密度。雖然在堅持使用二次方紋理大小時無法完美確保這一點,但通常可以在整個 3D 場景中保持紋理細節相當一致。
螢幕上出現的物件越小,其紋理應該越小。例如,僅出現在背景中的樹不需要與玩家可以走近的其他物件一樣高的紋理解析度。
建議使用二次方紋理大小,但不是必要的。紋理不必是正方形 - 1024×512 等尺寸也是可以接受的。
儘管記憶體使用量和載入時間增加,但使用大紋理尺寸的收益遞減。大多數不使用像素藝術風格的現代 3D 遊戲平均堅持 2048×2048 紋理,而跨越較小表面的紋理則為 1024×1024 和 512×512。
在 3D 中使用基於物理的材質時,您可以透過對某些紋理貼圖使用較低的解析度來減少記憶體使用量和檔案大小,而不會過度影響品質。這對於僅具有低頻細節的紋理(例如雪紋理的法線貼圖)尤其有效。
如果您可以控制 3D 模型的建立方式,那麼這些技巧也值得探索:
當使用大部分對稱的 3D 模型時,您可以使用鏡像 UV 將有效紋素密度加倍。不過,當用在人臉上時,這可能看起來不自然。
當使用低多邊形樣式和純色處理 3D 模型時,您可以依靠頂點顏色而不是紋理來表示模型表面上的顏色。
也參考
影像可於執行時透過 執行時檔案讀寫 載入或儲存,包含已匯出的專案。
小