前往
大廳
主題

開發日誌20250209

畫家 | 2025-02-09 13:18:55 | 巴幣 1004 | 人氣 351

開發日誌20250209

今天講一點比較特別的事。

這問題困擾我3年了,
任何半透明的texture丟到UE4裡面,
都會像上圖左邊→中間那樣,
不透明度變得有點異常,
但也不是變成全透明或全不透明,
而是感覺變濃了。

起初我以為是光照問題,
但光源全關了還是一樣,
後來在想大概是引擎的什麼設定造成的,
也不知道具體是被改掉多少、公式是什麼。

而且這問題網路上查、問人都沒有答案,
最奇怪的是,
甚至幾乎沒看到UE用戶有在問這個問題的。
(而那些教學影片用的點陣圖也都很少用到半透明像素,
 甚至很難注意到這個問題,
 這種光暈類的東西都是直接用光照或自發光處理)

所以我只能給不透明度開個平方,
讓它強制變薄,但還是沒有解決問題,
seed48層練習器的飛鏢和藤條都有類似問題,
所以藤條曾經被指出好像比遊戲內更細。

而且這個做法也有缺陷,
像粒子特效那種超級淡的圖片疊好幾十個來呈現的話,
圖片濃度會看起來差很多,得手動補正。

直到最近跟chatGPT問問題時提到線性color,
才找到突破口。

簡單來說,半透明這東西最終顯示的公式是這樣:
最終color=圖像RGB*Alpha+背景RGB*(1-Alpha)

這公式在繪圖軟體和UE引擎都是一樣,
但是,
UE引擎內場景的顏色計算似乎是在線性顏色空間,
不是在sRGB空間計算,
所以sRGB會先pow2.2之後再混合,
那混合結果會亂掉是理所當然的,
因為絕大多數圖片都是在sRGB空間混合的前提下去畫的。
(但UI上沒有這問題,只有場景有,很奇怪)

雖然我不曉得為什麼UE4會有這種奇怪的缺陷,
總之本質上來說Alpha數值沒出問題、color數值也沒出問題,
是最終呈現在螢幕上的時候的算法有問題。

這我就沒轍了,要改這玩意可能得去動引擎源碼,
讓它轉成sRGB再混合,
但我不太敢在不熟悉的情況下去動它,
至少現在還太早。

所以最後的辦法就是想個補正公式,
在引擎混合之前把可能混合的結果事先預想好,
將數值補正完再去混合。

還好現在有chatGPT這種AI,
我不必用自己大腦內那有限的數學函數資料庫去想該怎麼補正。

我先是算了一下同樣是純白色RGB=255的圖,
在透明度75%、50%、25%的前提下,
和UE4內的Sprite預覽背景一樣顏色(RGB=058)混合後,
結果顏色差多少,
然後把這些差距統計之後讓chatGPT去找可以用來補正的數學公式。

測試結果是這樣:
75%:206→225
50%:157→189
25%:107→142
10%:077→100
5%:067→081

然後把它丟給chatGPT計算,
讓它去想Alpha怎麼補正,
我之前試過補正RGB結果徒會變黑就改成補Alpha,
然後給出了一個公式,
但有點麻煩,我讓它簡化,
畢竟人眼對半透明沒敏感到要那麼精準才行,
所以就產生了新公式

於是就有了修正後的那顆月亮,
看起來已經足夠接近Texture的效果了,
正當我以為沒事的時候…
怎麼藤條好像反而太淡了?

不對,補正之前就比texture原本還淡了,
後來想想也是,
因為是顏色混合比例出了問題,
所以黑色和白色的問題也是反過來的,
白色半透明是看起來太濃、黑色半透明是看起來太淡,
我把不透明度弄淡的話,
那本來就有問題的黑色問題會更大,
於是我讓chatGPT再想個補正公式,

用來對越接近黑色的圖進行越多的反向補正


但這還有個小問題,
很接近透明的黑色的圖片會被過度補正,
所以我希望它再加一個根據透明度計算這個補正幅度的功能。
還算滿意

到這個步驟就差不多了,剩下都是數值的微調,
這樣做應該是能緩和大部分情況的問題,
但目前也看到少數的問題,
如果是利用很接近黑色的很接近完全透明的圖呈現的特效,
可能會有點問題,特別是粒子這種瘋狂疊加的。

這次,
或者說最近的多次嘗試下讓我感嘆的是,
聊天AI的出現大幅改善了沒有家教可以問的問題,
它就像是一個行走的百科全書,
只要是書上能查到的資料它大多都知道,
而且重要的是,
在書中、網路上那海量的資料裡面,
它能像全部背下來一樣,
把我需要的情報PickUP出來教我,
就算它沒有背下來,
也能立刻上網去找並且過濾不必要的情報,
只要我有足夠的辨識能力,它可以直接擔任1對1教師,
我也不必再為了找一個功能,
在官方文檔或書籍一頁一頁翻找,甚至還會漏掉。

也不只UE引擎的問題,
日文、韓文文法、慣用句、甚至網路用語之類的,
以前還需要問人,
現在也都完全不用再找人問了。
送禮物贊助創作者 !
0
留言

創作回應

追蹤 創作集

作者相關創作

相關創作

更多創作