掃描線模擬的方法可以很簡單,也可以很講究背後的原理(特別是NTSC Video視訊這塊),如果你只是要一個"很像"掃描線呈現的質感,網路上查到的方式多數是利用掃描線pattern依照一定比例混合圖片,製造出明暗相間的線條排列效果,關鍵字 可以搜尋 photoshop scanline patterm , 範例教學 http://photoshopcafe.com/tutorials/scanlines/scan.html ,如果你要自己寫程式,有基本的影像處理概念,應該並不困難,甚至也不需要pattern樣版,基偶線固定減少一定的亮度交叉,其實就是掃描線的"樣子" , 不過這種做法說穿了就是做做樣子,其背後沒有什麼很嚴謹的模擬原理,不過的確會多一些 fu .....
真正說起來掃描線模擬如果要考慮到NTSC訊號的特性等等 , 那麼做起來就比較複雜了 , 首先訊號源要從RGB改成以 明亮度 . 色度 . 濃度來表示的色彩空間資訊,接著是重新取樣,和上掃描線,然後加入一些不完美的缺陷 (漏色.閃爍.雜訊.模糊有的沒的...) ,這中間流程其實我也並沒有完全搞懂,出來的效果會更為理想有古早味,下面就是一款相當棒的NTSC模擬libraray http://slack.net/~ant/libs/ntsc.html ,還有針對不同的輸入特性做差異表現,但目前還在study階段中,之前嘗試移植到c#也失敗,有東西沒弄好,後來就沒用了,想打算自己搞懂多些東西來實作自己的版本(主要是針對自己的喜好來優化調整).
其實我個人並沒有很喜好太古早味太爛的畫面效果,但遊樂器主機這種低解析度的畫面確實還是以前的CRT電視表現的比較好,簡單來說那種呈現方式加上輕度模糊,恰巧就是最佳的放大與抗鋸齒效果,這中間拿捏其實是需要平衡和參考各人喜好的.
PS.補充一款重口味的NTSC電視畫面模擬程式,應該是早期很爛很爛無線類比廣播電視的那種效果... http://www.reenigne.org/blog/ntsc-hacking/ 這個大概是5.6年級生比較早期的回憶畫面...我沒啥經歷過無線類比廣播電視的那個時代....
其實我個人並沒有很喜好太古早味太爛的畫面效果,但遊樂器主機這種低解析度的畫面確實還是以前的CRT電視表現的比較好,簡單來說那種呈現方式加上輕度模糊,恰巧就是最佳的放大與抗鋸齒效果,這中間拿捏其實是需要平衡和參考各人喜好的.
PS.補充一款重口味的NTSC電視畫面模擬程式,應該是早期很爛很爛無線類比廣播電視的那種效果... http://www.reenigne.org/blog/ntsc-hacking/ 這個大概是5.6年級生比較早期的回憶畫面...我沒啥經歷過無線類比廣播電視的那個時代....
2017.02.09 更新
目前已經開發出我自己還算喜好的掃描線模擬效果範例程式(以後或許會嘗試高速優化加到自己的程式內當FILTER去用).大概把說法流程說一下,沒有很限定怎樣處理才是正確或是好,自己衡量參考就好.
step 1. RGB圖片使用 nearest法,高度拉長兩倍 new_ h = h * 2 ,寬透過公式計算拉伸到正確的比例 ( 因為pixel的顯示長寬比並非 1:1 ) , 公式為 new_w = ((w - 1) / 3 + 1) * 7 (參考Blargg的做法) ,最後 new_w 取能夠被4整除的最接近倍數長度 (方便後期單位取樣處理). 原圖可以使用效果不錯的XBrz先upscale,效果更好.
step 2.RGB轉換成YIQ色域,其實YUV也可以,但NES輸出訊號是以YIQ為訊源(至少官方機種是這樣).
step 3. 以 4:1:1 取樣,會降低一些畫質,但這才接近於真實畫面輸出的效果,會有很輕微的些許漏色效果(在色彩對比差異比較大的對比邊界處). 可以參考 https://zh.wikipedia.org/wiki/%E8%89%B2%E5%BA%A6%E6%8A%BD%E6%A0%B7
step 4. 簡單進行輕微模糊,同時也有抗鋸齒的效果,採用的是要處理的pixel跟左右兩邊的pixel取某種比例的平均.
經過step 1~4出來的結果基本上已經有比較考究的味道了,包括畫面長寬比例修正.RGB轉YIQ出來的色彩感覺,以及subsample後的色彩溢出,最後就是不論是AV端子或是S端子,類比訊號經過線材傳送,以及類比訊號處理的結果,就不可能如同數位訊號那麼清晰,反來有抗鋸齒效果.
step 5. 最後套用上scanlie pattern 效果,其實scanlien pattern也是有不同的參數可以調整(線寬度,明暗比例大小)
大體上經過 step 1 到 5步驟後,已經算是比較考究的效果了...至於週期性閃爍.雜訊或是殘影效果,這個我就不太清楚,而實際上那些效果加入後,我反來不是很喜歡,而且會把問題變得很複雜,需要進階考慮到ntsc訊號的timing等等之類問題,有些濾鏡還會再加入非平面的電視crt螢幕的輕微球圓狀變型效果.
把一個大概的sampe放到GITHUB去 https://github.com/erspicu/ScanLineBuilder
程式還沒最佳高速化
預覽畫面因為經過再壓縮,所以看起來掃描線質感會於實際程式不符合.
目前已經開發出我自己還算喜好的掃描線模擬效果範例程式(以後或許會嘗試高速優化加到自己的程式內當FILTER去用).大概把說法流程說一下,沒有很限定怎樣處理才是正確或是好,自己衡量參考就好.
step 1. RGB圖片使用 nearest法,高度拉長兩倍 new_ h = h * 2 ,寬透過公式計算拉伸到正確的比例 ( 因為pixel的顯示長寬比並非 1:1 ) , 公式為 new_w = ((w - 1) / 3 + 1) * 7 (參考Blargg的做法) ,最後 new_w 取能夠被4整除的最接近倍數長度 (方便後期單位取樣處理). 原圖可以使用效果不錯的XBrz先upscale,效果更好.
step 2.RGB轉換成YIQ色域,其實YUV也可以,但NES輸出訊號是以YIQ為訊源(至少官方機種是這樣).
step 3. 以 4:1:1 取樣,會降低一些畫質,但這才接近於真實畫面輸出的效果,會有很輕微的些許漏色效果(在色彩對比差異比較大的對比邊界處). 可以參考 https://zh.wikipedia.org/wiki/%E8%89%B2%E5%BA%A6%E6%8A%BD%E6%A0%B7
step 4. 簡單進行輕微模糊,同時也有抗鋸齒的效果,採用的是要處理的pixel跟左右兩邊的pixel取某種比例的平均.
經過step 1~4出來的結果基本上已經有比較考究的味道了,包括畫面長寬比例修正.RGB轉YIQ出來的色彩感覺,以及subsample後的色彩溢出,最後就是不論是AV端子或是S端子,類比訊號經過線材傳送,以及類比訊號處理的結果,就不可能如同數位訊號那麼清晰,反來有抗鋸齒效果.
step 5. 最後套用上scanlie pattern 效果,其實scanlien pattern也是有不同的參數可以調整(線寬度,明暗比例大小)
大體上經過 step 1 到 5步驟後,已經算是比較考究的效果了...至於週期性閃爍.雜訊或是殘影效果,這個我就不太清楚,而實際上那些效果加入後,我反來不是很喜歡,而且會把問題變得很複雜,需要進階考慮到ntsc訊號的timing等等之類問題,有些濾鏡還會再加入非平面的電視crt螢幕的輕微球圓狀變型效果.
把一個大概的sampe放到GITHUB去 https://github.com/erspicu/ScanLineBuilder
程式還沒最佳高速化
預覽畫面因為經過再壓縮,所以看起來掃描線質感會於實際程式不符合.