我想找可以自由套用shader濾鏡的模擬器,
例如Snes9x可以在Video裡設定,
選擇使用D3D或OpenGL的shader濾鏡,
載入用cg語言撰寫的.cgp檔案,
用shader放大畫面來提升2D遊戲的清晰度。
我想套用的shader濾鏡叫做「4xbr-hybrid-crt」,
它是我覺得顯示效果最好的2D畫面放大濾鏡。
xbr是效果很好的2D像素放大的演算法,
但是有時候它放大的畫面會有很嚴重的失真,
例如文字的斜線會變得扭曲變形,
或者有很多的細節會變得消失不見,
使得遊戲的畫面看起來像用刷筆描繪的油畫,
反而不如原始像素直接放大看起來還比較真實。
各種像素放大算法的比較圖
https://i.imgur.com/TQxSyJd.png
可以看到XBR4x的前後箭頭和三角波浪線條特別平滑,
完全看不到鋸齒,而且畫面相當清晰銳利,
但是花朵的花瓣樣式變形,花瓣間連接處的細節喪失,
右邊的ABC文字扭曲,
方塊圖形和下方的矩形波則可以很明顯的發現直角完全消失。
但是「4xbr-hybrid-crt」這個濾鏡,
混合了xbr、Reverse-AA和crt掃描線的算法,
改善了上述的缺點,特別是減輕了xbr的油畫感,
在一些2D遊戲上有著很棒的顯示效果。
以下的圖片如果看縮圖會看到縮放失真造成的橫格線,
要打開來看,以1:1顯示才會看到在模擬器上真正的顯示效果。
FC的吞食天地2諸葛孔明傳
原始像素直接放大 漢字和英文字的轉折有明顯的鋸齒
https://i.imgur.com/GiWF44a.png
用4xbr-hybrid-crt放大
https://i.imgur.com/a4YqO0H.png
原始像素直接放大 劉備的頭像和日文的假名有明顯的鋸齒
https://i.imgur.com/dlnI5iF.png
用4xbr-hybrid-crt放大
https://i.imgur.com/h6oRPml.png
FC的太空戰士3
原始像素直接放大 數字和人物圖象和上方背景的顆粒感
https://i.imgur.com/7cZ0pRM.png
用4xbr-hybrid-crt放大
https://i.imgur.com/Wl6QzVz.png
SFC的勇者鬥惡龍3
原始像素直接放大 有很粗重的雜訊和顆粒感
https://i.imgur.com/ynUDYfg.png
用4xbr-hybrid-crt放大
https://i.imgur.com/NQpDp3D.png
SFC的超時空之鑰
原始像素直接放大
https://i.imgur.com/C4Orfs2.png
用4xbr-hybrid-crt放大
https://i.imgur.com/cz9DsrT.png
原始像素直接放大
https://i.imgur.com/VN16s72.png
用4xbr-hybrid-crt放大
https://i.imgur.com/ci91CEs.png
原始像素直接放大
https://i.imgur.com/gME5OYV.png
用4xbr-hybrid-crt放大 日文字補得不太好看 感覺已經是極限了
HP/MP有些分不太清楚 蠟燭台補得不錯
https://i.imgur.com/bIhLCMN.png
原始像素直接放大
https://i.imgur.com/9RUQeFw.png
用4xbr-hybrid-crt放大
https://i.imgur.com/lSsJZv4.png
MD的夢幻模擬戰2
原始像素直接放大
https://i.imgur.com/nj0KJoc.png
用4xbr-hybrid-crt放大
https://i.imgur.com/WZFbqaO.png
原始像素直接放大
https://i.imgur.com/bkvTe1R.png
用4xbr-hybrid-crt放大 綠地上的小白點縮小快要看不到了
https://i.imgur.com/sN5dNuQ.png
PS的夢幻模擬戰1+2增值版
Pete的OpenGL2 Driver 預設會開啟Bilinear濾鏡 畫面非常模糊
https://i.imgur.com/l8dvKaY.png
gpuBladeSoft 2D顯示效果最好的plugin 原始像素直接放大
https://i.imgur.com/xyMKI3W.png
用4xbr-hybrid-crt放大
https://i.imgur.com/3rzHC3J.png
總結
優點:減少畫面的顆粒感,平滑曲線,
和其他算法相比保留較多的細節,較銳利
缺點:畫面會有一條一條的暗線,造成總亮度下降,色彩飽和度下降,
有時線條失真的瑕疵仍然相當明顯
整體觀感:有變得比較好看XD
不過不是所有模擬器都支援自由載入cg語法的shader濾鏡,
像是SEGA的Fusion,GBA的mGBA、VBA-M,PSX的ePSXe等等,
都不支援自由套用cg、glsl、slang語法的濾鏡,
所以這些模擬器都無法使用4xbr-hybrid-crt來放大畫面。
我有找到兩個整合型的模擬器介面,RetroArch和BizHawk,
RetroArch有支援cg、glsl、slang三種語法的shader,
BizHawk則有支援cg的shader。
不過RetroArch的操作介面在桌機上我覺得不是很方便,
而TAS推出的BizHawk則功能非常強大,非常非常好用,
可以取代很多單獨的模擬器成為使用主力,
不過它有一個很嚴重的缺點是載入shader以後啟動的速度會變得很慢。
這兩個模擬器還有一個共同的問題,
即使暫停模擬器的運作,shader仍然會繼續畫面的運算,
所以GPU會一直維持在高負載的狀態。
有時候遊戲玩到一半,我會暫停模擬器開其他的視窗查攻略資料,
這時因為shader仍然在繼續運算,GPU的負擔非常重,
所以會拖累其他視窗的顯示效能,反應會變得相當遲鈍。
想要完全停止shader的運算,必須將模擬器的視窗最小化,
才能釋放GPU的資源,讓電腦的運作恢復正常。
因為我這人非常懶惰,
所以希望可以按一個手把上的按鈕就幫我做到視窗最小化的操作XD
我是利用JoyToKey這個軟體,將Windows視窗最小化的快速鍵:
「先按Alt+Space」「然後按下N」這兩個動作映射到手把的按鈕上,
這樣只要按一下按鈕就可以立刻最小化模擬器的視窗。
設定的方法是:
1. 打開JoyToKey,指定一個要用來做最小化的按鈕,
切換到設定的第三個項目
「Keyboard emulation: switch between multiple assignments」
「模擬鍵盤的按鍵輸入:在指定的不同按鍵之間切換」。
2. 將第一組 [Input1] 的輸入設為「Alt+Space」,
第二組 [Input2] 則是單獨一個「N」,Input3、4不需設定,
然後勾選下面的
「Execute from [Input1] to [Input4] in sequence at the specified duration」
「以指定的時間間隔依序送出 [Input1] 到 [Input4] 的按鍵」
後面的Input Hold Duration用預設的20msec即可。
這樣當按下手把上的指定按鈕,JoyToKey就會自動幫我送出:
「先按Alt+Space」隔20msec以後「再接著按下N」的組合鍵,
自動將執行中的模擬器視窗最小化。
雖然利用JoyToKey可以減少操作上的麻煩,
不過我還是想找找看有沒有其他整合型或者單獨的模擬器,
可以載入cg或glsl或slang語言的shader,
而且沒有「啟動速度慢,要最小化才能停止GPU運算」的問題。
請大家幫忙推薦。
shader濾鏡列表
https://emulation.miraheze.org/wiki/List_of_shaders_and_filters#CRT
cg shaders
https://github.com/libretro/common-shaders
glsl shaders
https://github.com/libretro/glsl-shaders
slang shaders
https://github.com/libretro/slang-shaders
cg/glsl/slang shaders整合包
http://www.emu-france.com/emulateurs/5-consoles/51-nintendo-super-nintendo/3677-cg-glsl-slang-shaders-pack/
RetroArch
https://www.retroarch.com/
BizHawk
http://tasvideos.org/BizHawk.html