【翻譯】ppsspp替換紋理語法規則


# 簡介

在PPSSPP中你可以創建紋理替換包來替換紋理。

你可以在textures.ini文件中自定義紋理路徑,如果該路徑不存在則使用默認紋理。

## 基本結構

```
[options]
# 目前只有 '1' 這一種版本
version = 1
# 'hash' 的默認值為 'quick'. 其他可選值: xxh32, xxh64 (更好的散列,但速度較慢)
# 當你改變此選項所有的哈希值將會變化。所以從一開始就選定,並堅持使用它。
hash = quick

# 默認使用路徑結尾的 '.png'文件。
# 使用自定義文件名稱覆蓋下面的文件名。
# 使用空白文件名來跳過紋理(如下面的介紹紋理)。
# 語法: hash = filename.png
[hashes]
# 忽略介紹視頻紋理。
099bf1c000000909 =
0993698000000909 =
09a47a0000000909 =
09ad024000000909 =
# 水動畫。
099c0db096c0500ecd2f3e6e = water/frame1.png
099c2db0d26dc9a7966195cf = water/frame2.png
099c4db0fa2cbcfec0bd3e0f = water/frame3.png
099c6db0d17d9a67c7591d4f = water/frame4.png
# 這個紋理被兩個地址加載,內容相同。
094b89907dcca1a5ee284131 = 094b5a707dcca1a5ee284131.png
# 額外的mip level也需要重命名。
094b89907dcca1a5ee284131_1 = 094b5a707dcca1a5ee284131_1.png

# 允許自定義已散列紋理的范圍。
# 注意: 有時同一個地址稍后會被重新用於需要更多散列的紋理。
# 語法: address,w,h = w,h
[hashranges]
# 強制把介紹視頻散列為480x272。
0x09936980,512,512 = 480,272
0x099bf1c0,512,512 = 480,272
0x09a47a00,512,512 = 480,272
0x09ad0240,512,512 = 480,272
# 把logo修剪為實際紋理大小。
0x090056d0,256,256 = 176,160
0x0900c4d0,256,64 = 208,56
```

## Windows, Android, Linux, Mac和一些其他系統的區別。

如果你准備為其他人制作紋理包——那很棒棒。否則忽略這部分。

文件名是很棘手的一部分。 具體來講:

* 總是使用 `/` 而不是 `\` 作為目錄。 所有平台(甚至 Windows)支持 `/`,但 `\` 只有 Windows 有用。
* 只使用小寫文件名. 在 Windows 和 Mac 平台, "Hello.png" 和 "hello.png" 是相同的, 但不是所有系統都這樣。 全使用小寫是最安全的做法。
* 避免使用特殊字符: Windows 不支持很多特殊符號,並且在其他平台也可能導致問題出現。

如果你遵循這些准則,更多的人將能夠感激你的辛勤工作。

## PSP上的紋理尺寸

TL;DR: 有些事機器很難,人卻很容易做。 很不幸,這讓紋理替換更加困難和煩人。

PSP 的硬件把紋理尺寸限制在 2 的指數,所以游戲一般使用這些尺寸(e.g. 512x512 or 512x256.)

當某個游戲要展示全屏圖像 (480x272),不得不使用 512x512 的紋理,因為 PSP 的硬件就是不能處理 480x272 大小的紋理。其余的部分是否利用? 游戲並不在乎——所以經常有垃圾。

不幸的是, 這意味着就算任何人都可以明顯看出hashes的不同(像驗證碼一樣)。PPSSPP卻很難檢測到:有時 512x512 圖像是精靈表、字體,或者只是縮小了比例。小圖像(甚至32x64)也會出現這種情況。

如果你在不會使PPSSPP變慢的同時解決了這個問題,請發pull request。

解決辦法: 你可以在 `[options]` 下添加 `reduceHash = True` ( `hash = quick` 時不能使用。 這只是假設只有上半部分的紋理是重要的。如果一個游戲某一次將一個字母的文本繪制成一個紋理,或者改變下半部分,在這種情況下,這肯定會破壞繪圖。如果你碰到這個…你唯一的選擇將是從頭開始(去掉“reducehash”),或者用破圖將就。別說我沒告訴你。

##hash部分

hash只是使用PPSSPP內部使用的相同散列來分辨紋理。除了圖像數據的散列之外,它還使用調色板的散列(用於調色板交換的圖像)和內存中的圖像的地址。

請記住,`quick` hash 特別不完美。如果你只依賴它,你可能會發現自己意外地替換了一個完全不相關的紋理。小心決定你的風險。

可以忽略其中一些部分,但如果忽略了,請不要使用 “hash=quick”。 Here are the options (includes mipmap levels, 見下):

```
[hashes]
# 地址 + CLUT (調色板) + 數據 + mipmap level 0.
094b89907dcca1a5ee284131_0 = very/organized/things/texture1.png

# Level 默認為 0.
094b89907dcca1a5ee284131 = very/organized/things/texture2.png

# 忽略使用這個CLUT的紋理 無論數據如何.
094b89907dcca1a500000000_0 =

# 相同CLUT/數據+任何地址:
000000007dcca1a5ee284131 = very/organized/things/texture3.png

# 相同地址/數據+任何CLUT:
094b899000000000ee284131 = very/organized/things/texture4.png

# 相同數據+任何地址 (可能會發生沖突):
0000000000000000ee284131 = very/organized/things/texture3.png
```

## Mipmaps

Mipmapping是一種使遠出的紋理看起來更好的游戲技術。

假設你有一張HD (1920x1080)的汽車圖像,但這輛車很遠。它太遠了在你的屏幕上只有19x11 像素 (1%。)

因為GPU的工作機制, 它們會從 1920x1080 的圖像中隨機挑選幾個像素在屏幕中繪制。你可能得到幾個尾燈上的像素點,這輛車走遠時會變成一個紅色的模糊形狀(即使這輛車是黑色的)。

Mipmapping修復了這個問題通過給GPU更小的圖像當圖像在遠處。但並不是所有的PSP游戲都使用這些。

原始圖像大小是 "mip level 0", 之后每次都寬高精確地變為一半。例如, 如果 "mip level 0" 是 1920x1080, "mip level 1" 就是 960x540。
```
094b89907dcca1a500000000_0 = mip_level_0.png
094b89907dcca1a500000000_1 = mip_level_1.png
094b89907dcca1a500000000_2 = mip_level_2.png
# etc.
```

不需要很大的mip levels,有一些就通常夠用。尤其是當玩家啟用各向異性紋理時。

mipmapping會讓游戲加載速度慢一點,但通常看起來更好。有時它也能使繪圖(在初始加載后)更快。

## 更多信息

見 #8715, #8792, #4630, and #9668.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM