<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6845625574553920830</id><updated>2013-06-19T05:39:00.132-07:00</updated><category term='G4TV'/><category term='recall'/><category term='saved files'/><category term='Lucid Lynx'/><category term='DIY'/><category term='stopped working'/><category term='SIP'/><category term='HLSL'/><category term='5.1'/><category term='ultimate'/><category term='selenium'/><category term='mencoder'/><category term='mario kart wii'/><category term='upgrade'/><category term='crimson echoes'/><category term='CLI wrapper'/><category term='Xquartz'/><category term='moveset swap'/><category term='PSNR'/><category term='quantal'/><category term='vp-20'/><category term='Kubuntu'/><category term='jaunty'/><category term='xsession'/><category term='Aspire One'/><category term='cherry mx blue'/><category term='launchpad'/><category term='btrfs'/><category term='ambient occlusion'/><category term='face-fixing'/><category term='vanilla'/><category term='microswitch'/><category term='gameboy color'/><category term='trackpoint'/><category term='PowerMizer'/><category term='dared'/><category term='wifi'/><category term='lenovo'/><category term='cheaters'/><category term='experiment'/><category term='Metroid: Other M'/><category term='force close'/><category term='beginner&apos;s guide'/><category term='ZSNES'/><category term='CRT'/><category term='beta'/><category term='WebM'/><category term='thinkpad'/><category term='xrandr'/><category term='intel hd4000'/><category term='emulator'/><category term='build'/><category term='pbuilder'/><category term='happ'/><category term='psy-trellis'/><category term='gameboy advance'/><category term='network'/><category term='fix'/><category term='Diablo III'/><category term='ubuntu'/><category term='error'/><category term='nvidia'/><category term='yasm'/><category term='svn'/><category term='challenge'/><category term='RetroArch'/><category term='video quality'/><category term='iso'/><category term='GHB'/><category term='bump map'/><category term='das'/><category term='dsp3'/><category term='wine'/><category term='template'/><category term='mechanical'/><category term='OS X'/><category term='GUI'/><category term='barkeeper&apos;s friend'/><category term='Google Voice Search'/><category term='sf4'/><category term='ssnes'/><category term='HTPC'/><category term='arcade'/><category term='frontend'/><category term='multipass shader'/><category term='skinning'/><category term='x120e'/><category term='squeeze'/><category term='RippedWire'/><category term='cydia'/><category term='backloaded'/><category term='wall of shame'/><category term='repository'/><category term='htc one'/><category term='unresponsive'/><category term='share'/><category term='freezes'/><category term='hack'/><category term='baseline'/><category term='KDE'/><category term='photoshop'/><category term='ssf4'/><category term='gHandBrake'/><category term='SFxT'/><category term='ssh'/><category term='oneiric ocelot'/><category term='automated'/><category term='speaker'/><category term='psychovisual'/><category term='deb'/><category term='HandBrake'/><category term='sd card reader'/><category term='filters'/><category term='horn'/><category term='wireless'/><category term='ipod'/><category term='Linux'/><category term='cheat engine'/><category term='netbook'/><category term='trackpad'/><category term='swap'/><category term='samba'/><category term='natty narwhal'/><category term='steam'/><category term='intrepid ibex'/><category term='Diablo 3'/><category term='mod'/><category term='PPA'/><category term='weaving'/><category term='Google Voice'/><category term='pixel shader'/><category term='nestopia'/><category term='problem'/><category term='free calls'/><category term='replacement'/><category term='blue shell'/><category term='netatalk'/><category term='high profile'/><category term='Gizmo5'/><category term='VP8'/><category term='phoenix gui'/><category term='mouse pointer integration'/><category term='d250-x'/><category term='nightlies'/><category term='how to'/><category term='cgwg'/><category term='pad hack'/><category term='binary'/><category term='advanced options'/><category term='HQ2x'/><category term='model swap'/><category term='binary driver'/><category term='japanese'/><category term='netflix'/><category term='NES'/><category term='Mac'/><category term='keyboard'/><category term='installer'/><category term='d-pad'/><category term='afp'/><category term='efi'/><category term='backend'/><category term='softmod'/><category term='review'/><category term='X11'/><category term='flames of eternity'/><category term='interpolation'/><category term='bsnes'/><category term='broken'/><category term='SNES emulator'/><category term='virtualbox'/><category term='compression driver'/><category term='64-bit'/><category term='slow'/><category term='filthypants'/><category term='Cyanogen Mod'/><category term='SSIM'/><category term='Street Fighter 4'/><category term='audiophile'/><category term='algorithm'/><category term='cloud'/><category term='bash'/><category term='compile'/><category term='filter'/><category term='emulation'/><category term='windows 8'/><category term='unlimited items'/><category term='qtHB'/><category term='android'/><category term='custom'/><category term='ups'/><category term='Gizmo'/><category term='tube'/><category term='Canonical'/><category term='glsl'/><category term='bloom'/><category term='scroll'/><category term='VNC'/><category term='X-forwarding'/><category term='acer'/><category term='libretro'/><category term='libsnes'/><category term='karmic'/><category term='x264'/><category term='region-locked'/><category term='zeitgeist'/><category term='overscan'/><category term='deb binary'/><category term='extract'/><category term='grub'/><category term='harlequin'/><category term='360'/><category term='shader'/><category term='normal map'/><category term='maverick meerkat'/><category term='psy-rd'/><category term='fighter stick'/><category term='cheat'/><category term='hardy'/><category term='handbrake dependencies list'/><category term='handbrakeCLI'/><category term='chrono trigger'/><category term='GTK'/><category term='permission fix'/><category term='AE'/><category term='gameboy'/><category term='optimized'/><category term='32-bit'/><category term='comparison'/><category term='byuu'/><category term='monitor'/><category term='UbuntuOne'/><category term='qt4'/><category term='script'/><category term='windows'/><category term='valve'/><category term='HandBrakeGTK'/><category term='compiz'/><category term='SNES'/><category term='usb gecko'/><category term='stage'/><category term='sensibeat'/><category term='sharing'/><category term='nano'/><category term='programming'/><category term='tutorial'/><category term='epic 4G'/><category term='wii'/><category term='srm'/><category term='genesis'/><category term='h.264'/><category term='Super Nintendo'/><category term='bacon'/><category term='amp'/><category term='Linux Mint 12'/><category term='alpha'/><category term='bluetooth'/><category term='dsp1b'/><category term='tyrquake'/><category term='xBR'/><category term='aspireone'/><category term='unlock'/><category term='surround sound'/><category term='subwoofer'/><category term='Dell Mini 9'/><category term='fusion'/><category term='cg'/><title type='text'>Filthy Pants: A Computer Blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://filthypants.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6845625574553920830/posts/default'/><link rel='alternate' type='text/html' href='http://filthypants.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/6845625574553920830/posts/default?start-index=26&amp;max-results=25'/><author><name>Hunter K.</name><uri>http://www.blogger.com/profile/18379090454291486194</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>136</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6845625574553920830.post-1153380401789356863</id><published>2013-06-11T14:10:00.002-07:00</published><updated>2013-06-18T10:43:11.805-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='htc one'/><category scheme='http://www.blogger.com/atom/ns#' term='custom'/><category scheme='http://www.blogger.com/atom/ns#' term='template'/><title type='text'>HTC One Back Template for DIY Case Artwork</title><content type='html'>I got a&lt;a href="http://www.amazon.com/gp/product/B00CML640A"&gt; super-cheap, clear hardshell case&lt;/a&gt;&amp;nbsp;(price seems to have gone up since I bought it...) for my HTC One and was interested in making some custom art to put between the case and the phone. I wasn't able to find any templates readily available online, so I spent a little bit of time with a flatbed scanner and whipped one up myself:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-qleLvhvkIvs/UbeSCaFai4I/AAAAAAAABw0/Oae33pvIuss/s1600/htc-one-template.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-qleLvhvkIvs/UbeSCaFai4I/AAAAAAAABw0/Oae33pvIuss/s320/htc-one-template.png" width="173" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Note: I make no guarantees about the applicability of this template to your own case. It worked for me and I hope you find it useful, as well. The biggest potential issue would be with the cutaways for the power and volume buttons, which are pretty large on my case, but it should be easy to remove them if your case doesn't have them.&lt;br /&gt;&lt;br /&gt;Here's how it looks when it's all finished:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-EmlDt9PBOGI/UbhuBZ3jxpI/AAAAAAAABxE/VxwaHboVZeU/s1600/IMG_20130612_074350_1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-EmlDt9PBOGI/UbhuBZ3jxpI/AAAAAAAABxE/VxwaHboVZeU/s320/IMG_20130612_074350_1.jpg" width="233" /&gt;&lt;/a&gt;&lt;/div&gt;Sorry about the weird picture. I didn't have another camera on hand, and there weren't any good mirrors at work, so I had to just use the reflection from an old hard drive platter...&lt;br /&gt;&lt;br /&gt;EDIT: Here's a slightly better picture:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-8jog2ZhD3NQ/UbnF71pJoXI/AAAAAAAABxY/us0YVg4hmdM/s1600/beemocasephoto.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-8jog2ZhD3NQ/UbnF71pJoXI/AAAAAAAABxY/us0YVg4hmdM/s320/beemocasephoto.png" width="223" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;I made this BMO design along with a couple of other Adventure Time designs, ready to print:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-gqnIsQyyAn8/UcCb7re-LLI/AAAAAAAAByk/1qNThPiLnJs/s1600/print.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-gqnIsQyyAn8/UcCb7re-LLI/AAAAAAAAByk/1qNThPiLnJs/s320/print.png" width="243" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Best show on television.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://filthypants.blogspot.com/feeds/1153380401789356863/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6845625574553920830&amp;postID=1153380401789356863' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6845625574553920830/posts/default/1153380401789356863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6845625574553920830/posts/default/1153380401789356863'/><link rel='alternate' type='text/html' href='http://filthypants.blogspot.com/2013/06/htc-one-back-template-for-diy-case.html' title='HTC One Back Template for DIY Case Artwork'/><author><name>Hunter K.</name><uri>http://www.blogger.com/profile/18379090454291486194</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-qleLvhvkIvs/UbeSCaFai4I/AAAAAAAABw0/Oae33pvIuss/s72-c/htc-one-template.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6845625574553920830.post-8374061706079751737</id><published>2013-05-31T07:39:00.000-07:00</published><updated>2013-05-31T07:39:01.490-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cydia'/><category scheme='http://www.blogger.com/atom/ns#' term='repository'/><title type='text'>Setting up a Cydia Repository</title><content type='html'>For RetroArch v0.9.9, the new star platform for support is/was iOS via jailbreak, so we needed to set up a Cydia repository for people to pull down the app. I followed &lt;a href="http://www.iphonemodding.com/forum/showthread.php?2264-How-to-create-a-Cydia-Repository"&gt;this guide&lt;/a&gt;, which was helpful, but there were a few important deficiencies that required additional work. I'm going to cover those issues here.&lt;br /&gt;&lt;br /&gt;First off, the directory structure described in the guide, with 'apps' and 'uploads' is unnecessary. All you need is a directory that contains your Packages.gz file and a subdirectory named 'deb' that holds your package. If you keep the directory structure from the guide, your Cydia URL will be http://yoursite.com/cydia/upload, which is tacky.&lt;br /&gt;&lt;br /&gt;More importantly, if you follow the guide, your app will not install to the /Applications directory of your iOS device, and any *.info files will be broken, which was very bad news for RetroArch. To fix this, I followed &lt;a href="http://www.ijailbreak.com/cydia/the-ultimate-tutorial-for-creating-a-cydia-repository-covering-everything-a-z/"&gt;this guide&lt;/a&gt;, the important parts from which I will summarize here:&lt;br /&gt;&lt;br /&gt;First, you'll need to take create a new directory with the same name as your application--in my case, RetroArch. Then, inside that directory, create another new directory named Applications and one named DEBIAN. In the DEBIAN directory, place your '&lt;a href="http://www.iphonemodding.com/forum/showthread.php?p=23401#post23401"&gt;control&lt;/a&gt;' file, which contains information about your application, and in the Applications directory, place your compiled application (in my case RetroArch.app).&lt;br /&gt;&lt;br /&gt;At this point, you're ready to bundle your application using dpkg:&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;dpkg -b [your.app.name]&lt;/blockquote&gt;Once your deb is created, you can delete the directory structure and then create your Packages.gz:&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;dpkg-scanpackages -m . /dev/null | gzip -9c &amp;gt;Packages.gz&lt;/blockquote&gt;Create a directory called 'deb' and drop your deb bundle into it and you should be all set.</content><link rel='replies' type='application/atom+xml' href='http://filthypants.blogspot.com/feeds/8374061706079751737/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6845625574553920830&amp;postID=8374061706079751737' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6845625574553920830/posts/default/8374061706079751737'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6845625574553920830/posts/default/8374061706079751737'/><link rel='alternate' type='text/html' href='http://filthypants.blogspot.com/2013/05/setting-up-cydia-repository.html' title='Setting up a Cydia Repository'/><author><name>Hunter K.</name><uri>http://www.blogger.com/profile/18379090454291486194</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6845625574553920830.post-2867788987982684840</id><published>2013-05-15T12:41:00.006-07:00</published><updated>2013-05-15T12:42:08.428-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Google Voice Search'/><category scheme='http://www.blogger.com/atom/ns#' term='force close'/><category scheme='http://www.blogger.com/atom/ns#' term='Cyanogen Mod'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>Fix for: Google Voice Search force closes immediately</title><content type='html'>This is just a quick post and it may or may not work in your case: I installed a nightly of Cyanogenmod 10.1 on my HTC One and the Google Voice Search app force closed every time I clicked on the little microphone icon. Everything else worked fine, including Google Now and so forth.&lt;br /&gt;&lt;br /&gt;The fix for it, in my case, was just to go to the Play Store and update the Google Search app. If that doesn't fix it for you, I would recommend uninstalling the Google Search app entirely and then reinstalling. If that doesn't help either, you probably have something more serious amiss.</content><link rel='replies' type='application/atom+xml' href='http://filthypants.blogspot.com/feeds/2867788987982684840/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6845625574553920830&amp;postID=2867788987982684840' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6845625574553920830/posts/default/2867788987982684840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6845625574553920830/posts/default/2867788987982684840'/><link rel='alternate' type='text/html' href='http://filthypants.blogspot.com/2013/05/fix-for-google-voice-search-force.html' title='Fix for: Google Voice Search force closes immediately'/><author><name>Hunter K.</name><uri>http://www.blogger.com/profile/18379090454291486194</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6845625574553920830.post-7800085451385930285</id><published>2013-04-25T20:56:00.000-07:00</published><updated>2013-04-25T20:58:53.317-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='multipass shader'/><category scheme='http://www.blogger.com/atom/ns#' term='glsl'/><category scheme='http://www.blogger.com/atom/ns#' term='cg'/><category scheme='http://www.blogger.com/atom/ns#' term='CRT'/><category scheme='http://www.blogger.com/atom/ns#' term='emulation'/><category scheme='http://www.blogger.com/atom/ns#' term='RetroArch'/><category scheme='http://www.blogger.com/atom/ns#' term='pixel shader'/><title type='text'>Multipass Shaders - NTSC, Motion Blur and More</title><content type='html'>It's been a while since I've done one of these posts and, in that time, RetroArch's multipass shader implementation has matured quite a bit, paving the way for a lot of really cool effects that simply can't be done in a single pass. At the time of this writing, higan's multipass shader implementation hasn't been released yet, but many of these shaders should be portable to it (with some substantial effort, at least) when it arrives.&lt;br /&gt;&lt;br /&gt;As always, images were captured at 4x scale. Click the thumbnails to embiggen.&lt;br /&gt;&lt;br /&gt;First up:&lt;br /&gt;&lt;b&gt;&lt;span style="color: red; font-size: large;"&gt;Themaister's NTSC Shader&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;Themaister wrote a sweet new real-time NTSC Composite shader that mimics a lot of the noise, fringing and crosstalk present in the NTSC composite signal:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-KMAlvSr-HjQ/UXnpF37PskI/AAAAAAAABqg/9wktV6Qma6Q/s1600/ntsc2-maister.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="280" src="http://3.bp.blogspot.com/-KMAlvSr-HjQ/UXnpF37PskI/AAAAAAAABqg/9wktV6Qma6Q/s320/ntsc2-maister.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;This shader is a big deal because blargg's CPU-based NTSC filter was previously the only way to get this effect, which was important in some older games' art design. However, the filter had to be hardcoded to the individual consoles' specific resolution, which made it a headache to maintain in a multi-console setting. This shader should work on all of RetroArch's cores, and it is available in &lt;a href="http://www.mediafire.com/download.php?touakpcbs2ujqcp"&gt;GLSL&lt;/a&gt; and &lt;a href="https://github.com/libretro/common-shaders/tree/master/NTSC"&gt;Cg/cgp&lt;/a&gt; flavors.&lt;br /&gt;&lt;br /&gt;I mixed it with cgwg's CRT shader and ended up with this (&lt;a href="http://www.mediafire.com/?954i66w8kgcnhwn"&gt;ntsc2-crt.shader&lt;/a&gt;):&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-SQJAeAIpxFQ/UXnsWSQXaXI/AAAAAAAABqw/ykPYZDaW27Q/s1600/ntsc2-crt.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="280" src="http://1.bp.blogspot.com/-SQJAeAIpxFQ/UXnsWSQXaXI/AAAAAAAABqw/ykPYZDaW27Q/s320/ntsc2-crt.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;You can compare that with an earlier version I cobbled together from the old NTSC shader--which tended to be finicky and not everyone liked anyway--and cgwg's CRT (&lt;a href="http://www.mediafire.com/download.php?cccv35x16hin2qk"&gt;crt-geom-interlaced-flat-ntsc.shader&lt;/a&gt;):&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-IovuOgDgg2c/UXntJi3h3rI/AAAAAAAABq8/M2WEAPMyeZQ/s1600/crt-geom-interlaced-flat-ntsc.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="280" src="http://2.bp.blogspot.com/-IovuOgDgg2c/UXntJi3h3rI/AAAAAAAABq8/M2WEAPMyeZQ/s320/crt-geom-interlaced-flat-ntsc.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Digging through an old thread on byuu's forum, I also found where cgwg had written a similar shader that combined NTSC with CRT in 6 passes with barrel distortion (&lt;a href="http://www.mediafire.com/download.php?jj19s9j08vef554"&gt;6-pass-ntsc+crt2.shader&lt;/a&gt;):&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-LbUthU3JYFc/UXntlr1w_PI/AAAAAAAABrE/yrtmsgBPGgY/s1600/6-pass-ntsc+crt2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="280" src="http://3.bp.blogspot.com/-LbUthU3JYFc/UXntlr1w_PI/AAAAAAAABrE/yrtmsgBPGgY/s320/6-pass-ntsc+crt2.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;In the same thread, cgwg had posted this shader, called '&lt;a href="http://www.mediafire.com/download.php?0t85p11fshudx7x"&gt;beam-dynamic&lt;/a&gt;,' that is essentially the same result as the beam4 shader mentioned in one of my other posts:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-74ykP-kaDqM/UXnuOkXnaBI/AAAAAAAABrQ/eJraaZfWBQU/s1600/beam-dynamic.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="280" src="http://1.bp.blogspot.com/-74ykP-kaDqM/UXnuOkXnaBI/AAAAAAAABrQ/eJraaZfWBQU/s320/beam-dynamic.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Out of all of these variations, I think my favorite is Themaister's NTSC with the addition of scanlines that have been softened with gaussian blur (&lt;a href="http://www.mediafire.com/download.php?y171b140g8tj4b1"&gt;ntsc2-maister-scanlines.shader&lt;/a&gt;):&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-hrnh5mPOfkk/UXnuwv8skgI/AAAAAAAABrY/NPvGAJpKfxw/s1600/ntsc2-maister-scanlines.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="280" src="http://2.bp.blogspot.com/-hrnh5mPOfkk/UXnuwv8skgI/AAAAAAAABrY/NPvGAJpKfxw/s320/ntsc2-maister-scanlines.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: red; font-size: large;"&gt;Harlequin's Gameboy Shader&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;This shader does for Gameboy emulators what cgwg's CRT does for regular consoles, i.e., recreates the look of the original display with startling verisimilitude:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-lpcrMOEtH_o/UXnvwtkBdpI/AAAAAAAABrk/hA-B1thmKv0/s1600/gameboy-new-default-settings.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="288" src="http://4.bp.blogspot.com/-lpcrMOEtH_o/UXnvwtkBdpI/AAAAAAAABrk/hA-B1thmKv0/s320/gameboy-new-default-settings.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;I'm not going to spend a lot of time talking about this shader here, even though it's completely badassed, since &lt;a href="http://filthypants.blogspot.com/2013/04/customizing-harlequins-gameboy-cg-pixel.html"&gt;it's covered at length in a previous post&lt;/a&gt;. It's available in &lt;a href="https://github.com/HarlequinVG/shaders/tree/master/gameboy_shader"&gt;Cg/cgp&lt;/a&gt; format only, though you can use Themaister's handy &lt;a href="https://github.com/Themaister/RetroArch/blob/master/tools/cg2glsl.py"&gt;cg-to-glsl&lt;/a&gt; python script to convert it to GLSL if necessary.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: red; font-size: large;"&gt;Harlequin's LCD Shader&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;Using some of the same concepts from the Gameboy shader, Harlequin is also working on &lt;a href="https://github.com/HarlequinVG/shaders/tree/master/lcd_shader"&gt;a more generalized shader&lt;/a&gt; that mimics the low-resolution, slow-refreshing color LCD displays from a number of handheld consoles, such as Sega's Game Gear and Nintendo's Gameboy Advance:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-n1ScxvAzNWE/UXny_1W_5EI/AAAAAAAABr4/tkcj44gB0Zo/s1600/lcd-harlequin2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="213" src="http://4.bp.blogspot.com/-n1ScxvAzNWE/UXny_1W_5EI/AAAAAAAABr4/tkcj44gB0Zo/s320/lcd-harlequin2.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-3hGzetWr0v4/UXnzBt0g7lI/AAAAAAAABsA/zyo_vDGhr4s/s1600/lcd-harlequin1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="213" src="http://3.bp.blogspot.com/-3hGzetWr0v4/UXnzBt0g7lI/AAAAAAAABsA/zyo_vDGhr4s/s320/lcd-harlequin1.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Similarly, cgwg posted an LCD shader he's been working on that produces a regular, square pixel grid pattern, paired with some simple motion blur (&lt;a href="http://www.mediafire.com/download.php?ct32tp21pdtqjap"&gt;lcd-cgwg.shader&lt;/a&gt;):&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-BOlMNhXpSqE/UXn0O-qY74I/AAAAAAAABsU/Zh31DDuVoBo/s1600/lcd-cgwg.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="213" src="http://2.bp.blogspot.com/-BOlMNhXpSqE/UXn0O-qY74I/AAAAAAAABsU/Zh31DDuVoBo/s320/lcd-cgwg.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-sypfBk0F3pI/UXn0OqH1nuI/AAAAAAAABsM/bOrDu8WH7To/s1600/lcd-cgwg2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="213" src="http://3.bp.blogspot.com/-sypfBk0F3pI/UXn0OqH1nuI/AAAAAAAABsM/bOrDu8WH7To/s320/lcd-cgwg2.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: red; font-size: large;"&gt;Motion Blur&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;Speaking of motion blur, I wrote a multipass version of this shader a while back and cgwg revised it down to a single pass (refers to previous frames, so still incompatible with higan v092 and earlier). This effect can be good for mimicking the slow response time of crummy LCDs (&lt;a href="http://www.mediafire.com/download.php?qqckwbu0mciyq7i"&gt;motion blur.shader&lt;/a&gt;):&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/--SvI3hZzGZ0/UXn1Gaos_UI/AAAAAAAABsk/rlrs4UHcW88/s1600/motion+blur.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="280" src="http://1.bp.blogspot.com/--SvI3hZzGZ0/UXn1Gaos_UI/AAAAAAAABsk/rlrs4UHcW88/s320/motion+blur.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;I also made a version that only adds the blur during rewind, along with a little sepia-tone effect, kinda like the rewind effect in Braid (&lt;a href="http://www.mediafire.com/download.php?bse8jcgbaeazzz9"&gt;braid rewind.shader&lt;/a&gt;):&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-rNuvPOvBtWA/UXn1p4oLJrI/AAAAAAAABsw/s-iyvjAIBrY/s1600/braid-rewind2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="280" src="http://3.bp.blogspot.com/-rNuvPOvBtWA/UXn1p4oLJrI/AAAAAAAABsw/s-iyvjAIBrY/s320/braid-rewind2.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;This shader can be added before pretty much any other shader (either manually by pasting in the code or by using the new, built-in RGUI shader stacking function and/or glslp shader configuration files) at a scale of 1.0 and the effect will only kick in when the game is rewinding :D&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: red; font-size: large;"&gt;GTU&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;This shader from aliaspider is an interesting take on the CRT paradigm insofar as he didn't want to focus on phosphor emulation or heavy-handed scanlines or any of that other jazz. He was more interested in the blurring/blending effect of CRTs that enabled tricks like pseudo-hires transparency and color dithering. Later revisions include some sweet gamma correction and the ability to create mild scanlines (if you choose; &lt;a href="http://www.mediafire.com/download.php?fft0fswwoyciu7t"&gt;GTUv031-multipass.shader&lt;/a&gt;):&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-38se1CRYUHQ/UXn3bfqs6JI/AAAAAAAABtI/6R9dkHKvif8/s1600/GTU.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="280" src="http://1.bp.blogspot.com/-38se1CRYUHQ/UXn3bfqs6JI/AAAAAAAABtI/6R9dkHKvif8/s320/GTU.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;I think this is one of the best ways to get pseudo-hires transparency working properly, and the transparency it creates is smooth and absolutely beautiful:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-UpHZk3pOaOI/UXn3oxm_yGI/AAAAAAAABtQ/qZQqnPsDqEU/s1600/RetroArch-0425-213142.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="298" src="http://3.bp.blogspot.com/-UpHZk3pOaOI/UXn3oxm_yGI/AAAAAAAABtQ/qZQqnPsDqEU/s320/RetroArch-0425-213142.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Aliaspider made &lt;a href="https://interpolation-shaders.googlecode.com/files/GTUv30.OpenGL.shader"&gt;a single-pass version of the shader&lt;/a&gt; that should work in higan v092 and earlier, along with the multipass version linked above for RetroArch, and &lt;a href="https://interpolation-shaders.googlecode.com/files/GTUv30.zip"&gt;a multipass version for higan v093's upcoming shader implementation&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: red; font-size: large;"&gt;My 4k Phosphor Shader&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;This is another one that I won't spend much time on, since I cover it at length &lt;a href="http://filthypants.blogspot.com/2013/02/designing-large-scale-phosphor.html"&gt;in another post&lt;/a&gt;:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-QlV3ycGNMSM/UUdrfR_7HJI/AAAAAAAABlw/1r5cP3Dg8M0/s1600/lowrezzed.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="298" src="http://4.bp.blogspot.com/-QlV3ycGNMSM/UUdrfR_7HJI/AAAAAAAABlw/1r5cP3Dg8M0/s320/lowrezzed.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="https://s3.amazonaws.com/Emulation/Pixel+Shaders/phosphorLUT.zip"&gt;This shader&lt;/a&gt; currently doesn't look so hot as it's designed to work at around 10x scale (i.e., on a 4k resolution television or other high-DPI display; it gets wrecked by subpixel behavior at current normal scales [read: 1080p]). However, it brings some nice things to the table, such as easily-edited LUTs that can be created/modified in Photoshop/GIMP rather than a text editor and&amp;nbsp;scale-ability&amp;nbsp;to freaky-huge resolutions. I'll attempt to convert this to byuu's higan v093 format at some point, though it may take some time.</content><link rel='replies' type='application/atom+xml' href='http://filthypants.blogspot.com/feeds/7800085451385930285/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6845625574553920830&amp;postID=7800085451385930285' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6845625574553920830/posts/default/7800085451385930285'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6845625574553920830/posts/default/7800085451385930285'/><link rel='alternate' type='text/html' href='http://filthypants.blogspot.com/2013/04/multipass-shaders-ntsc-motion-blur-and.html' title='Multipass Shaders - NTSC, Motion Blur and More'/><author><name>Hunter K.</name><uri>http://www.blogger.com/profile/18379090454291486194</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-KMAlvSr-HjQ/UXnpF37PskI/AAAAAAAABqg/9wktV6Qma6Q/s72-c/ntsc2-maister.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6845625574553920830.post-2258973979905520774</id><published>2013-04-24T20:31:00.001-07:00</published><updated>2013-04-24T20:31:38.930-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='harlequin'/><category scheme='http://www.blogger.com/atom/ns#' term='gameboy'/><category scheme='http://www.blogger.com/atom/ns#' term='cg'/><category scheme='http://www.blogger.com/atom/ns#' term='RetroArch'/><category scheme='http://www.blogger.com/atom/ns#' term='pixel shader'/><title type='text'>Customizing Harlequin's Gameboy Cg Pixel Shader</title><content type='html'>CRT shaders are great, but they're not always appropriate for every console, seeing as handhelds' tiny LCD screens have very different characteristics, which in turn shaped the way the games for those consoles were designed. The original Gameboy handheld had these characteristics in spades, including a slow response time (manifesting as motion blur), very low resolution and a distinctive 2-color palette that ranged from yellow to green. Emulators typically represent this color palette as black and white, which can be jarring for people who spent a lot of time with the system.&lt;br /&gt;&lt;br /&gt;Thankfully, a nice fellow named Harlequin has come to the rescue with a really great pixel shader for RetroArch that does for Gameboy displays what cgwg's CRT shader did for those displays. Like cgwg's CRT shader, &lt;a href="https://github.com/HarlequinVG/shaders/tree/master/gameboy_shader"&gt;Harlequin's Gameboy shader&lt;/a&gt; reproduces a lot of different aspects of the Gameboy display and presents a number of options to the user that are easy to modify with just a simple text editor (I use/prefer Notepad++ but almost anything will work). Unlike cgwg's, though, the Gameboy shader also uses some lookup textures (LUT) that require no text editing and can be modified using an image editor such as Photoshop or GIMP. Harlequin has included several example LUTs and I'll cover a few in screenshots.&lt;br /&gt;&lt;br /&gt;As usual, all shots are at 4x (which is a bit small for Gameboy resolution, but oh well) and you can click the thumbnails to embiggen. All shots were taken via RetroArch with the Gambatte core unless stated otherwise.&lt;br /&gt;&lt;br /&gt;First, here's an unfiltered shot for comparison:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-d4MSjRgrQBQ/UXiDQzYm8xI/AAAAAAAABns/ojsJo2D4I1Q/s1600/base.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="288" src="http://3.bp.blogspot.com/-d4MSjRgrQBQ/UXiDQzYm8xI/AAAAAAAABns/ojsJo2D4I1Q/s320/base.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;And here's one of Harlequin's Gameboy shader with default parameters:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-T0MX_qVv_Xk/UXiDd1_X3_I/AAAAAAAABn0/Fi5m95oXFKM/s1600/gameboy-new-default-settings.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="288" src="http://4.bp.blogspot.com/-T0MX_qVv_Xk/UXiDd1_X3_I/AAAAAAAABn0/Fi5m95oXFKM/s320/gameboy-new-default-settings.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;First, I'll cover the LUTs, which can be edited with an image editor. The palette files are found in the &lt;a href="https://github.com/HarlequinVG/shaders/tree/master/gameboy_shader/resources/sample_palettes"&gt;'resources' folder&lt;/a&gt; and they're just two 64x64 squares of color that the shader pulls from to get the appropriate colors (i.e., to replace white and black in the emulator). One of the included samples is yellower and resembles the display in strong light, such as daylight:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-3JWXp-YhD7w/UXiExGvV6jI/AAAAAAAABoA/7O7B0mQ73Sc/s1600/yellower.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="288" src="http://3.bp.blogspot.com/-3JWXp-YhD7w/UXiExGvV6jI/AAAAAAAABoA/7O7B0mQ73Sc/s320/yellower.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Another sample mimics the higher contrast of the Gameboy Pocket revision:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-x_lLIypvq-I/UXiE8ZaW66I/AAAAAAAABoI/d30bdR1LvHw/s1600/gameboy+pocket.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="288" src="http://2.bp.blogspot.com/-x_lLIypvq-I/UXiE8ZaW66I/AAAAAAAABoI/d30bdR1LvHw/s320/gameboy+pocket.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Also in the resources folder, you'll find some sample backgrounds, which apply a texture to the image. The default has some angled hatching, while the included samples show some different types of texture that are possible, like this noisy bit:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-eYoR4It7UN0/UXiFiepmCVI/AAAAAAAABoU/qBQGvfZ6wD0/s1600/background-grainy.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="288" src="http://2.bp.blogspot.com/-eYoR4It7UN0/UXiFiepmCVI/AAAAAAAABoU/qBQGvfZ6wD0/s320/background-grainy.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Next up, we have the shader variables that are easily modified by users with a simple text editor. These are enumerated in the shader's enclosed &lt;a href="https://github.com/HarlequinVG/shaders/blob/master/gameboy_shader/README.md"&gt;README&lt;/a&gt; file and I'll include some shots here for reference.&lt;br /&gt;&lt;br /&gt;The first one is the 'alpha' setting, which determines how dark a 'white' pixel should be. If you raise the value, &amp;nbsp;everything becomes darker:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-HJYA4KVDojg/UXiGVl75yRI/AAAAAAAABog/gp04zBHLTGY/s1600/alpha-06.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="288" src="http://2.bp.blogspot.com/-HJYA4KVDojg/UXiGVl75yRI/AAAAAAAABog/gp04zBHLTGY/s320/alpha-06.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;While lowering the value will make the pixel grid less visible in white areas:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-VKsHInV7WpU/UXiGfagEPoI/AAAAAAAABoo/ckydrv4cUNc/s1600/alpha-001.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="288" src="http://2.bp.blogspot.com/-VKsHInV7WpU/UXiGfagEPoI/AAAAAAAABoo/ckydrv4cUNc/s320/alpha-001.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;The next option, response time, determines how long it takes a pixel to go from white to black and vice versa. It doesn't really translate very well into static screenshots so I didn't bother showing it here. The next option after that, though--blending mode--determines whether just the space between dots is blended (mode 0) or all texels (mode 1), which, in practical terms, is how sharp/blurry the edges of the individual pixels are:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-9eYCO9suX5Y/UXie-x2c8eI/AAAAAAAABo4/uQ09VruMwss/s1600/blending+mode+1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="288" src="http://3.bp.blogspot.com/-9eYCO9suX5Y/UXie-x2c8eI/AAAAAAAABo4/uQ09VruMwss/s320/blending+mode+1.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;The next option--texel alpha blending--effectively controls how defined the grid pattern is. Higher values result in round/fat-looking pixels:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-2bl3IbCZrnA/UXif0WgDUwI/AAAAAAAABpE/YRzt6RG4SMo/s1600/texel-alpha-blending06.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="288" src="http://1.bp.blogspot.com/-2bl3IbCZrnA/UXif0WgDUwI/AAAAAAAABpE/YRzt6RG4SMo/s320/texel-alpha-blending06.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;While lower values give you a sharp, well-defined grid:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-tRayJrBlep0/UXigDt42E4I/AAAAAAAABpM/JDA9FJUQKJM/s1600/texel-alpha-blending-00125.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="288" src="http://4.bp.blogspot.com/-tRayJrBlep0/UXigDt42E4I/AAAAAAAABpM/JDA9FJUQKJM/s320/texel-alpha-blending-00125.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;After that, we have 'contrast,' which works just like the slider on the side of the Gameboy. Lower values can simulate the look of low batteries:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-2McCGOywdsE/UXigXeeKhII/AAAAAAAABpU/9mCVrxjy87k/s1600/contrast-05.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="288" src="http://4.bp.blogspot.com/-2McCGOywdsE/UXigXeeKhII/AAAAAAAABpU/9mCVrxjy87k/s320/contrast-05.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;'Background smoothing' lessens the effect of the background LUT. Higher values make the background less visible, lower values make it more visible:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-74pS8SQrTjg/UXigxFsskTI/AAAAAAAABpg/6y8c5pvPPwA/s1600/background-smoothing-025.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="287" src="http://2.bp.blogspot.com/-74pS8SQrTjg/UXigxFsskTI/AAAAAAAABpg/6y8c5pvPPwA/s320/background-smoothing-025.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;'Shadow opacity' controls how dark the drop-shadows from the pixels are. Higher values mean darker shadows:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-bcEKNG-KAcA/UXig_xWcLRI/AAAAAAAABpo/V4Y1FVmWm-A/s1600/shadow-opacity-095.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="287" src="http://1.bp.blogspot.com/-bcEKNG-KAcA/UXig_xWcLRI/AAAAAAAABpo/V4Y1FVmWm-A/s320/shadow-opacity-095.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Finally, 'shadow offset' determines which direction the drop-shadows appear (i.e., for simulating a light source that isn't directly above the display). Setting both the X- and Y- values to 2.0 will offset it more:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-d_1CpxK3GUU/UXihci3TGgI/AAAAAAAABpw/XvGH7vb4E9o/s1600/shadow-offset2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="287" src="http://2.bp.blogspot.com/-d_1CpxK3GUU/UXihci3TGgI/AAAAAAAABpw/XvGH7vb4E9o/s320/shadow-offset2.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;While setting them both to 0 puts the shadows directly underneath the pixels:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-cjn4V0MhfQs/UXihkEu0o4I/AAAAAAAABp4/AEkybhrQj5Y/s1600/shadow-offset-0.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="287" src="http://2.bp.blogspot.com/-cjn4V0MhfQs/UXihkEu0o4I/AAAAAAAABp4/AEkybhrQj5Y/s320/shadow-offset-0.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Just so you know: you can use this shader with other RetroArch cores, as well, and see what your favorite games would look like in an alternate, Gameboy-centric universe:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-5Sq662d5IYA/UXih38zFmvI/AAAAAAAABqA/T5DXKfFIXMg/s1600/SMW-GB.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="298" src="http://1.bp.blogspot.com/-5Sq662d5IYA/UXih38zFmvI/AAAAAAAABqA/T5DXKfFIXMg/s320/SMW-GB.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Harlequin has made some major changes to the way the shader looks and works since he first started working on it. While the current iteration is extremely convincing, I also liked an earlier version that looked more stylized. Here's a couple of shots:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-lDGbruby9DE/UXiiXaVAMSI/AAAAAAAABqI/tpoxpupflSw/s1600/gameboy-old.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="288" src="http://1.bp.blogspot.com/-lDGbruby9DE/UXiiXaVAMSI/AAAAAAAABqI/tpoxpupflSw/s320/gameboy-old.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-Zd6sdfcoJ1Q/UXiiXUE1BQI/AAAAAAAABqM/VdtpHPT3cgw/s1600/gameboy-old2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="288" src="http://2.bp.blogspot.com/-Zd6sdfcoJ1Q/UXiiXUE1BQI/AAAAAAAABqM/VdtpHPT3cgw/s320/gameboy-old2.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;You can download it from my &lt;a href="http://www.mediafire.com/?eausahbwqrfa9nn"&gt;Mediafire&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://filthypants.blogspot.com/feeds/2258973979905520774/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6845625574553920830&amp;postID=2258973979905520774' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6845625574553920830/posts/default/2258973979905520774'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6845625574553920830/posts/default/2258973979905520774'/><link rel='alternate' type='text/html' href='http://filthypants.blogspot.com/2013/04/customizing-harlequins-gameboy-cg-pixel.html' title='Customizing Harlequin&apos;s Gameboy Cg Pixel Shader'/><author><name>Hunter K.</name><uri>http://www.blogger.com/profile/18379090454291486194</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-d4MSjRgrQBQ/UXiDQzYm8xI/AAAAAAAABns/ojsJo2D4I1Q/s72-c/base.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6845625574553920830.post-3547120907296007654</id><published>2013-03-14T20:55:00.002-07:00</published><updated>2013-03-15T17:29:47.103-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tyrquake'/><category scheme='http://www.blogger.com/atom/ns#' term='RetroArch'/><category scheme='http://www.blogger.com/atom/ns#' term='pixel shader'/><title type='text'>Pixel Shaders for RetroArch 3D Cores</title><content type='html'>RetroArch got its first 3D core recently in the form of TyrQuake and it seems most of the existing pixel shaders either look unimpressive or don't work at all. Thankfully, shaders written for Pete's OpenGL plugin for PSX emulators are easy to port to RetroArch's XML format and they seem to generally work well enough.&lt;br /&gt;&lt;br /&gt;&lt;div class="" style="clear: both; text-align: left;"&gt;&lt;a href="https://s3.amazonaws.com/Emulation/Pixel+Shaders/quake+shaders.zip"&gt;Click here to download all of the shaders covered in this post&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: red; font-size: large;"&gt;No Shader (for comparison)&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-CW2eJlGAoCg/UUKWPfsZoiI/AAAAAAAABkA/1pBIzdoVuMM/s1600/base.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/-CW2eJlGAoCg/UUKWPfsZoiI/AAAAAAAABkA/1pBIzdoVuMM/s320/base.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="" style="clear: both; text-align: left;"&gt;&lt;b&gt;&lt;span style="color: red; font-size: large;"&gt;A Lovely Bloom&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-5uQS4kmO6PU/UUKWOsh6UdI/AAAAAAAABj0/OWQWmd3WRnE/s1600/ALovelyBloom.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/-5uQS4kmO6PU/UUKWOsh6UdI/AAAAAAAABj0/OWQWmd3WRnE/s320/ALovelyBloom.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;One of the few conventional shaders that still functions as expected, this one looks really nice, and the screenshot doesn't really do it justice. It gives light sources a nice bloomy glow that softens things up a bit.&amp;nbsp;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&amp;nbsp;&lt;span style="color: red;"&gt;&lt;b&gt;HDRTV&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-w_LS7n_wcwk/UUO83a97uZI/AAAAAAAABlM/OeFAEgcWP7Y/s1600/HDRTV.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/-w_LS7n_wcwk/UUO83a97uZI/AAAAAAAABlM/OeFAEgcWP7Y/s320/HDRTV.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;This shader saturates colors somewhat and adds faint scanlines. It has been around for a long time (it was one of the original shaders available for bsnes when it first got pixel shader support) but the scanlines weren't visible on 2D sources, so I was surprised to see them here.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: red; font-size: large;"&gt;NV+MSAA&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-FnkLVowShjk/UUKWPT2v-aI/AAAAAAAABkM/5RXTfsbOrKw/s1600/NV-4xMSAA.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/-FnkLVowShjk/UUKWPT2v-aI/AAAAAAAABkM/5RXTfsbOrKw/s320/NV-4xMSAA.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;This shader uses the "natural vision" algorithm to do some color adjustment with added post-proc anti-aliasing.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: red; font-size: large;"&gt;&lt;b&gt;Cartoon&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-jTIJheaJ_Ns/UUKWQPZvn8I/AAAAAAAABkQ/Fuf-9lj_KwQ/s1600/cartoon.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/-jTIJheaJ_Ns/UUKWQPZvn8I/AAAAAAAABkQ/Fuf-9lj_KwQ/s320/cartoon.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;This one darkens the image too much to be very useful in an already dark game like Quake but may be good for future cores that have brighter games.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: red; font-size: large;"&gt;Edge Detection&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-Ief8HAe4xNE/UUKWQn1Qo8I/AAAAAAAABkc/QHK2Zss5D24/s1600/edge-detection.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/-Ief8HAe4xNE/UUKWQn1Qo8I/AAAAAAAABkc/QHK2Zss5D24/s320/edge-detection.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;While not necessarily practical, this shader draws a line at each color intersection to produce a cool, old-timey effect.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="color: red; font-size: large;"&gt;&lt;b&gt;Scale4xHQ&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-bksr2lf5P6E/UUKWRS09ewI/AAAAAAAABkk/ZOoJQfabozc/s1600/scale4xHQ.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/-bksr2lf5P6E/UUKWRS09ewI/AAAAAAAABkk/ZOoJQfabozc/s320/scale4xHQ.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;One of the only scale/interpolation shaders that has any noticeable effect, this one is a bit blurry for my tastes but it evens out a lot of the jaggies.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: red; font-size: large;"&gt;&lt;b&gt;Scanline3x&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-5bmRNgLf3Xo/UUKWSPgsyNI/AAAAAAAABks/rCXp82nVgk4/s1600/scanline3x.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/-5bmRNgLf3Xo/UUKWSPgsyNI/AAAAAAAABks/rCXp82nVgk4/s320/scanline3x.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;I'm a sucker for scanlines and these normally crummy-looking scanline filters I made a while back actually look pretty nice here. (Note: I think I got the 3x and 4x mixed up; 3x should have fewer, larger scanlines than 4x)&lt;br /&gt;&lt;br /&gt;&lt;span style="color: red; font-size: large;"&gt;&lt;b&gt;Scanline4x&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-mriIndVMsPU/UUKWSiilwgI/AAAAAAAABk0/uxEfF_8J0-Q/s1600/scanline4x.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/-mriIndVMsPU/UUKWSiilwgI/AAAAAAAABk0/uxEfF_8J0-Q/s320/scanline4x.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="color: red; font-size: large;"&gt;&lt;b&gt;Themaister Waterpaint Scanlines&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-KW2Yw8nbzIA/UUKWTKOICbI/AAAAAAAABk8/14NIeo5eIyg/s1600/themaister+waterpaint+scanlines.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/-KW2Yw8nbzIA/UUKWTKOICbI/AAAAAAAABk8/14NIeo5eIyg/s320/themaister+waterpaint+scanlines.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;While the effect isn't as pronounced as with 2D cores, this shader does some smoothing with scanlines and ends up with a sort of screen-door effect that nevertheless looks pretty good.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;b&gt;&lt;span style="color: red; font-size: large;"&gt;CPU Filters&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-RqfzWGJaQpM/UUKWNyvOfYI/AAAAAAAABjw/dIxJKq1GNWM/s1600/NTSC-RGB.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/-RqfzWGJaQpM/UUKWNyvOfYI/AAAAAAAABjw/dIxJKq1GNWM/s320/NTSC-RGB.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Some of the bsnes-style CPU filters work, but not that well. The NTSC variants all perform their normal functions, but the the image is off-center and cuts some things off, as pictured. The scanline filters work pretty well, too, though they're sort of hard to see. Interpolation filters like HQ2X seem to have no visible effect, and SuperEagle crashed my game :/</content><link rel='replies' type='application/atom+xml' href='http://filthypants.blogspot.com/feeds/3547120907296007654/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6845625574553920830&amp;postID=3547120907296007654' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6845625574553920830/posts/default/3547120907296007654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6845625574553920830/posts/default/3547120907296007654'/><link rel='alternate' type='text/html' href='http://filthypants.blogspot.com/2013/03/pixel-shaders-for-retroarch-3d-cores.html' title='Pixel Shaders for RetroArch 3D Cores'/><author><name>Hunter K.</name><uri>http://www.blogger.com/profile/18379090454291486194</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-CW2eJlGAoCg/UUKWPfsZoiI/AAAAAAAABkA/1pBIzdoVuMM/s72-c/base.png' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6845625574553920830.post-6519842054897053033</id><published>2013-03-11T15:08:00.002-07:00</published><updated>2013-03-11T15:09:32.284-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xrandr'/><category scheme='http://www.blogger.com/atom/ns#' term='overscan'/><category scheme='http://www.blogger.com/atom/ns#' term='intel hd4000'/><category scheme='http://www.blogger.com/atom/ns#' term='quantal'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>XRandR Overscan Fix for Intel HD4000 Ubuntu</title><content type='html'>I have my television hooked up to a computer running Ubuntu 12.10 Quantal and have had issues with overscan across a variety of chipsets. For Nvidia graphics, the proprietary driver sometimes has an overscan compensation slider or at least &lt;a href="http://filthypants.blogspot.com/2012/12/fix-for-tv-overscan-in-ubuntu-with.html"&gt;something&lt;/a&gt;. Intel drivers are open source and very convenient but don't seem to have much in the way of driver configuration outside of what's exposed in the normal settings applications.&lt;br /&gt;&lt;br /&gt;If you have an Intel chipset, such as the built-in HD4000 graphics that come with Ivy Bridge CPUs, there are a few angles you can try that center around using xrandr, which stands for 'X Resize, Rotate and Reflection.' This program has a bunch of different options, and I strongly recommend spending some time with the &lt;a href="http://linux.die.net/man/1/xrandr"&gt;man page&lt;/a&gt;. No matter which options you try first, you'll need to query the program and see which display device is being used. You can do this by typing into a terminal:&lt;br /&gt;&lt;span style="color: lime; font-family: Courier New, Courier, monospace;"&gt;xrandr -q&lt;/span&gt;&lt;br /&gt;For me, HDMI3 is the one that's hooked up, so it lists all of the available modelines and some other information.&lt;br /&gt;&lt;br /&gt;Now that we know which device is being used, we can invoke xrandr with this syntax:&lt;br /&gt;&lt;span style="color: lime; font-family: Courier New, Courier, monospace;"&gt;xrandr --output [device] --[option]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The option that worked for me is &lt;span style="color: lime; font-family: Courier New, Courier, monospace;"&gt;--transform&lt;/span&gt;, which performs some crazy matrix math that I don't understand (I'll update this post if someone tells me wtf is going on) on each pixel, apparently kinda like the pixel shader stuff I've written about elsewhere, I think...? Anyway (replace HDMI3 with whatever your device is called):&lt;br /&gt;&lt;span style="color: lime; font-family: Courier New, Courier, monospace;"&gt;xrandr --output HDMI3 --transform 1.05,0,-35,0,1.05,-19,0,0,1&lt;/span&gt;&lt;br /&gt;This doesn't make it fit exactly on my screen but it's much closer than it was. Unfortunately, it gets wiped out every time you logout, so we need to do something to make it stick. You can add it to your startup items or tack it onto your lightdm window manager's configuration file by typing into a terminal:&lt;br /&gt;&lt;span style="color: lime; font-family: Courier New, Courier, monospace;"&gt;sudo nano /etc/lightdm/lightdm.conf&lt;/span&gt;&lt;br /&gt;Navigate to the end of the file and start a new line and paste this in:&lt;br /&gt;&lt;span style="color: lime; font-family: Courier New, Courier, monospace;"&gt;display-setup-script=xrandr --output HDMI3 --transform 1.05,0,-35,0,1.05,-19,0,0,1&lt;/span&gt;&lt;br /&gt;Save and exit and the transform command should kick in every time you login.&lt;br /&gt;&lt;br /&gt;Other options that may help:&lt;br /&gt;The 'scale' option should ideally just scale your screen down, but in my experience, it makes everything (text, window borders , etc) bigger, similar to changing the DPI in Windows, without actually changing the visible area.&lt;br /&gt;&lt;br /&gt;The 'border' option also seems like it should do exactly what we want, but I haven't seen it actually work anywhere. On my system, it fails with this error:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: lime; font-family: Courier New, Courier, monospace;"&gt;X Error of failed request: &amp;nbsp;BadName (named color or font does not exist)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: lime; font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; Major opcode of failed request: &amp;nbsp;140 (RANDR)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: lime; font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; Minor opcode of failed request: &amp;nbsp;11 (RRQueryOutputProperty)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: lime; font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; Serial number of failed request: &amp;nbsp;29&lt;/span&gt;&lt;br /&gt;&lt;span style="color: lime; font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; Current serial number in output stream: &amp;nbsp;29&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;which seems to be a catch-all for unrecognized commands :/&lt;br /&gt;&lt;br /&gt;Generally, I would recommend skipping all of this and attempting to fix it through your TV's built-in options (generally called "just scan" mode or "pixel perfect" or something like that). The only time you should attempt to do it in software is when your TV is too crummy (like mine) and doesn't have any of those options.</content><link rel='replies' type='application/atom+xml' href='http://filthypants.blogspot.com/feeds/6519842054897053033/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6845625574553920830&amp;postID=6519842054897053033' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6845625574553920830/posts/default/6519842054897053033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6845625574553920830/posts/default/6519842054897053033'/><link rel='alternate' type='text/html' href='http://filthypants.blogspot.com/2013/03/xrandr-overscan-fix-for-intel-hd4000.html' title='XRandR Overscan Fix for Intel HD4000 Ubuntu'/><author><name>Hunter K.</name><uri>http://www.blogger.com/profile/18379090454291486194</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6845625574553920830.post-1174826123985765325</id><published>2013-02-21T15:41:00.001-08:00</published><updated>2013-02-28T13:06:40.947-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='stage'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='swap'/><category scheme='http://www.blogger.com/atom/ns#' term='ssf4'/><title type='text'>How to Swap Stages in SSF4AE</title><content type='html'>With a lot of new stages being backported from SFxT and some brand new stages from mugenlove100, Alff suggested I write a tutorial on swapping around stages. It's a very simple process but it requires a hex editor, which makes some people uncomfortable. I use the free and open-source &lt;a href="http://frhed.sourceforge.net/en/"&gt;Frhed&lt;/a&gt;, which is somewhat limited in functionality but is thankfully quite simple to use. As a general note, stage mods are often built from the Training Stage (abbreviated as TRN), but I'll be using one that started from the Brazilian Jungle stage, or BRA. For reference, here's a key that shows which abbreviations go with which stages:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-bXqBFhhRhXU/USdyLgexqNI/AAAAAAAABhk/p7qoD_N1V2Y/s1600/StageSelect.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-bXqBFhhRhXU/USdyLgexqNI/AAAAAAAABhk/p7qoD_N1V2Y/s320/StageSelect.jpg" width="290" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;So, to get started, we'll first want to make backups of the stage we're going to replace. Personally, I hate the Crumbling Laboratory stage, so I copy those files to a safe place. Then, take your stage mod files, in this case BRA.emz and BRA.tex.emz, and open them each in your hex editor, like this:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/--__EixujcKY/USatlO7vS8I/AAAAAAAABhE/rDtGBfkm3Xg/s1600/hex.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="179" src="http://1.bp.blogspot.com/--__EixujcKY/USatlO7vS8I/AAAAAAAABhE/rDtGBfkm3Xg/s320/hex.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Next, use the find-and-replace function (the standard shortcut for this is ctrl+H; you'll have to do it in each of the modded stage files) to replace each instance of BRA (or TRN if the mod is based on the Training Stage) with the 3-letter prefix of whichever stage you wish to replace, in this case LBX:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-X-_20fPrq_E/USauH8zAUHI/AAAAAAAABhM/CXW4NtAztrQ/s1600/find-and-replace.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-X-_20fPrq_E/USauH8zAUHI/AAAAAAAABhM/CXW4NtAztrQ/s320/find-and-replace.png" width="258" /&gt;&lt;/a&gt;&lt;/div&gt;Click the button to replace all following occurrences and it should pop up a message telling you how many instances were replaced (it's generally a much larger number for the ***.emz files than for the ***.tex.emz files, FYI).&lt;br /&gt;&lt;br /&gt;Once that's done, just save it and close, then rename the modded stage to match the 3-letter prefix you just swapped in. In this case, I change BRA.tex.emz &amp;gt; LBX.tex.emz and BRA.emz &amp;gt; LBX.emz.&lt;br /&gt;&lt;br /&gt;Now you just copy those modded stage files into your &lt;span style="color: lime;"&gt;[install dir]\resource\battle\stage&lt;/span&gt; directory and overwrite what's already there. Just make sure you backed up those original files first, in case you change your mind later.&lt;br /&gt;&lt;br /&gt;UPDATE: If you would rather not overwrite any of the files, there is a way to supersede the original stages in a non-destructive way. Instead of adding your modded files to the above directory, instead go to &lt;span style="color: lime;"&gt;[install dir]\patch 1a\battle&lt;/span&gt; and create a new directory named '&lt;span style="color: lime;"&gt;stage&lt;/span&gt;'. Put your modded files in there and the game should use them instead of the originals. (thanks to Nemesys_Syndrome for the tip)&lt;br /&gt;&lt;br /&gt;That's it. You're done. Now, go try it out and make sure it works :)</content><link rel='replies' type='application/atom+xml' href='http://filthypants.blogspot.com/feeds/1174826123985765325/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6845625574553920830&amp;postID=1174826123985765325' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6845625574553920830/posts/default/1174826123985765325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6845625574553920830/posts/default/1174826123985765325'/><link rel='alternate' type='text/html' href='http://filthypants.blogspot.com/2013/02/how-to-swap-stages-in-ssf4ae.html' title='How to Swap Stages in SSF4AE'/><author><name>Hunter K.</name><uri>http://www.blogger.com/profile/18379090454291486194</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-bXqBFhhRhXU/USdyLgexqNI/AAAAAAAABhk/p7qoD_N1V2Y/s72-c/StageSelect.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6845625574553920830.post-2418455772711896102</id><published>2013-02-18T20:52:00.000-08:00</published><updated>2013-02-24T08:22:41.921-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xsession'/><category scheme='http://www.blogger.com/atom/ns#' term='error'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='zeitgeist'/><title type='text'>xsession-errors Log Filling Hard Drive Ubuntu</title><content type='html'>Last night, all of a sudden, I started getting poor performance out of my HTPC running Ubuntu 12.10 Quantal Quetzal, followed by a complaint that my /home partition was running low on space and only had ~350 MB of free space. A minute or so later, I got another warning that only ~35 MB were free! :O&lt;br /&gt;&lt;br /&gt;I clicked the hard drive disk usage analyzation utility to figure out what was up, but it showed my largest directory as weighing-in at just ~29 GB.&lt;br /&gt;&lt;br /&gt;Turns out the culprit was a gigantic, hidden file called .xsession-errors, which had ballooned to 170 GB over the course of a couple of hours, apparently. You can check if this is your problem by typing this into a terminal:&lt;br /&gt;&lt;span style="color: lime; font-family: Courier New, Courier, monospace;"&gt;ls -a -s | grep xsession&lt;/span&gt;&lt;br /&gt;This file is archived at every reboot, with the previous version renamed to .xsession-errors.old and a new log created in its place. If this file is the source of your troubles, you'll want to see what's been spamming your system with errors, but, obviously, such a huge file isn't going to open gracefully in a text editor. However, we can use the 'tail' command to check out the last few lines, like this:&lt;br /&gt;&lt;span style="color: lime; font-family: Courier New, Courier, monospace;"&gt;tail -10 .xession-errors&lt;/span&gt;&lt;br /&gt;That should give you an idea of what's causing your problems. Once you've had a good look, go ahead and delete the file and then reboot your system to free up the space:&lt;br /&gt;&lt;span style="color: lime; font-family: Courier New, Courier, monospace;"&gt;rm .xession-errors* ; sudo reboot now&lt;/span&gt;&lt;br /&gt;As soon as your system comes back up, look for the error log again using the first command (and then a third time to see if the size changed in between commands) and then open it in a text editor to see what's up:&lt;br /&gt;&lt;span style="color: lime; font-family: Courier New, Courier, monospace;"&gt;gedit .xsession-errors&lt;/span&gt;&lt;br /&gt;Scroll down to the bottom and see if you spot any errors repeating. In my case, there was a constant stream of errors from zeitgeist-daemon not being able to find file:///whatever/file.path. Zeitgeist is a program that keeps track of pretty much everything you do on your machine and uses that data to populate 'recent files' lists and so on. It also adds overhead to your system and occasionally shits the bed by making giant error logs ;)&lt;br /&gt;&lt;br /&gt;If you don't mind getting rid of the Unity desktop, you can just flat-out remove it and its associated packages like this:&lt;br /&gt;&lt;span style="color: lime; font-family: Courier New, Courier, monospace;"&gt;sudo dpkg -r zeitgeist*&lt;/span&gt;&lt;br /&gt;However, if this is too invasive for you, you can use the following command to remove the read and write attributes from the zeitgeist-daemon database:&lt;br /&gt;&lt;span style="color: lime; font-family: Courier New, Courier, monospace;"&gt;chmod -rw ~/.local/share/zeitgeist/activity.sqlite&lt;/span&gt;&lt;br /&gt;You can test the effect out by typing:&lt;br /&gt;&lt;span style="color: lime; font-family: Courier New, Courier, monospace;"&gt;zeitgeist-daemon --replace&lt;/span&gt;&lt;br /&gt;It should error out with a complaint about not being able to access the database, which is exactly what we want. This essentially cripples the daemon without risking breaking any other packages, present or future.&lt;br /&gt;&lt;br /&gt;Go about your normal tasks and make sure everything still works like it should (anything that used zeitgeist will obviously be broken, but I mean everything that you normally depend on). If all is well, you're finished. Pat yourself on the back.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;UPDATE:&lt;/span&gt; The problem popped up again, even with zeitgeist removed, so I tailed the error log again and saw this line repeated over and over:&lt;br /&gt;&lt;span style="color: lime; font-family: Courier New, Courier, monospace;"&gt;Authentication deferred - ignoring client message&lt;/span&gt;&lt;br /&gt;This error appears to be a result of the vino server (Ubuntu's built-in VNC server) getting hammered with bruce-force login attempts. It appears that the server allows a few bad attempts and then ignores the rest, which is good. The attempts still get logged, though, so I thought it best just to remove vino altogether, since I never use it anyway:&lt;br /&gt;&lt;span style="color: lime; font-family: Courier New, Courier, monospace;"&gt;sudo apt-get remove vino&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://filthypants.blogspot.com/feeds/2418455772711896102/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6845625574553920830&amp;postID=2418455772711896102' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6845625574553920830/posts/default/2418455772711896102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6845625574553920830/posts/default/2418455772711896102'/><link rel='alternate' type='text/html' href='http://filthypants.blogspot.com/2013/02/xsession-errors-log-filling-hard-drive.html' title='xsession-errors Log Filling Hard Drive Ubuntu'/><author><name>Hunter K.</name><uri>http://www.blogger.com/profile/18379090454291486194</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6845625574553920830.post-4200704679633130546</id><published>2013-02-14T07:49:00.001-08:00</published><updated>2013-05-09T08:37:57.822-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='photoshop'/><category scheme='http://www.blogger.com/atom/ns#' term='CRT'/><category scheme='http://www.blogger.com/atom/ns#' term='pixel shader'/><title type='text'>Designing a Large-scale Phosphor Filter/Shader</title><content type='html'>&lt;span style="color: red; font-weight: bold;"&gt;Update (5/9/2013):&amp;nbsp;&lt;/span&gt;I ported my shader to the Cg shader language and made some improvements in the process (&lt;a href="https://s3.amazonaws.com/Emulation/Pixel+Shaders/PhosphorLUT-Cg.zip"&gt;click here to download&lt;/a&gt;). It now looks decent at sane, non-4k scale factors and has some easily-modified variables to allow users to make their own adjustments more easily. See the bottom of the post for new screenshots.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: red; font-weight: bold;"&gt;Update (3/29/2013):&amp;nbsp;&lt;/span&gt;Some other versions of the shader and more screenies at the bottom of the post.&lt;br /&gt;&lt;b&gt;&lt;span style="color: red;"&gt;Update (3/18/2013):&lt;/span&gt;&lt;/b&gt; I think the shader is pretty much done! &lt;a href="https://s3.amazonaws.com/Emulation/Pixel+Shaders/phosphorLUT.zip"&gt;You can download it here&lt;/a&gt;. Skip to the bottom of the post for images and some details.&lt;br /&gt;&lt;br /&gt;With 4k TVs on the horizon and high-dpi computer monitors already here, I figured it was time to start thinking about using these screens to better recreate the look of CRT TVs.&lt;br /&gt;&lt;br /&gt;cgwg's CRT shader is already fantastic, but it was designed with the assumption of relatively low resolution (i.e., the current HD/1080p paradigm at the upper end and 720p screens at the lower end, resulting in ~3-4x scale factors) and single-pass shader implementations, and it makes certain concessions with those limitations in mind.&lt;br /&gt;&lt;br /&gt;At 10x scale (2240 vertical pixels for NTSC) and assuming multipass support, we can forego some of those concessions, though. For example, you can draw the shadow mask right on the screen at 1 pixel width and each phosphor lens at 3 pixels tall by 9 pixels wide, which gives you a pattern like this (blurriness comes from the bilinear upscaling; click for normal size):&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-QaIwAYq9XcI/URwQzzq1VOI/AAAAAAAABdQ/1jwU0tfj2R0/s1600/phosphorLUT.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://4.bp.blogspot.com/-QaIwAYq9XcI/URwQzzq1VOI/AAAAAAAABdQ/1jwU0tfj2R0/s200/phosphorLUT.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span id="goog_1624656450"&gt;&lt;/span&gt;&lt;span id="goog_1624656451"&gt;&lt;/span&gt;In this figure, the phosphors have a horizontal orientation rather than the vertical orientation seen in all of the phosphor images I've found online (&lt;a href="http://en.wikipedia.org/wiki/File:CRT_pixel_array.jpg"&gt;like this one&lt;/a&gt;). I tried both ways and the vertical orientation didn't look right to me, insofar as it had vertical scanlines rather than horizontal ones. I'll show results both ways later on and you can judge for yourself.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: red;"&gt;Update (3/18/2013):&lt;/span&gt;&lt;/b&gt; Turns out the vertical orientation is correct. I got a macro lens and took some pictures of a CRT up close (the letter 'e' followed by a heart icon from Zelda OoT):&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-O1RMxt4O0AE/UUe-J5r9pAI/AAAAAAAABm0/dSeBxFOaxJ8/s1600/macro-e.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="312" src="http://1.bp.blogspot.com/-O1RMxt4O0AE/UUe-J5r9pAI/AAAAAAAABm0/dSeBxFOaxJ8/s320/macro-e.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-DhgmaNQkqxM/UUe-Nz4F-8I/AAAAAAAABm8/L4j48ax2Ejo/s1600/macro-heart.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="232" src="http://4.bp.blogspot.com/-DhgmaNQkqxM/UUe-Nz4F-8I/AAAAAAAABm8/L4j48ax2Ejo/s320/macro-heart.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;I still think it looks better horizontally at small scales (i.e., 1080p and lower) but vertically at larger scales. Anyway, back to the original post.&lt;br /&gt;&lt;br /&gt;With that LUT tiled up to cover the entire SNES image (&lt;a href="http://www.mediafire.com/?nuh38o6b5tbljq7"&gt;you can download it here&lt;/a&gt;), we're ready to add in our image, scaled to 10x using nearest-neighbor, which looks like this (click thumbnails for full resolution):&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-DzWx7WH104E/URwSlDEtIRI/AAAAAAAABdY/HaIr1W3Y54A/s1600/10x.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="280" src="http://3.bp.blogspot.com/-DzWx7WH104E/URwSlDEtIRI/AAAAAAAABdY/HaIr1W3Y54A/s320/10x.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Next, we need to invert the colors in the image, which looks like this:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-LtX89L9lDUQ/URwTQsJLpSI/AAAAAAAABdg/ypfHPhDC_rs/s1600/inverted.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="280" src="http://4.bp.blogspot.com/-LtX89L9lDUQ/URwTQsJLpSI/AAAAAAAABdg/ypfHPhDC_rs/s320/inverted.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;We then need to subtract these pixel color values from our LUT matrix, which results in this:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-5QdtTkDMTJQ/URwTu18SXHI/AAAAAAAABdo/fePOugow-yo/s1600/subtracted.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="280" src="http://2.bp.blogspot.com/-5QdtTkDMTJQ/URwTu18SXHI/AAAAAAAABdo/fePOugow-yo/s320/subtracted.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;We subtract because the phosphor LUT represents a full 100% brightness in all phosphors, which is blended by our eyes into flat white. In our image, the white pixels are inverted to black, which subtracts nothing from our LUT and leaves those parts white, while magenta blanks out the red and blue pixels, leaving just green, and so on. Likewise, brighter pixels are inverted to dim, and they subtract less brightness from our LUT phosphors, leaving them bright. At this point, we have our basic phosphor coloration and luminance values represented.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;Next, we'll make a new pass using the result of the previous pass as input (or in Photoshop, create a new layer), to which we'll apply a gaussian blur that will approximate the luminance-based color bleed into neighboring phosphors (no picture here, since it looks the same, just blurry; not very exciting). According to cgwg's comments in his existing CRT shader, this blur portion may be better suited to a 2-part process of blurring, once horizontally and once vertically, but I just did one all-over blur. You can use a blur intensity of 3 pixels to keep some sharpness or increase the value to 5 pixels to get a more bloomy, halated look. I'll show examples of both in a bit.&lt;br /&gt;&lt;br /&gt;Obviously, this is image is still waaaay too dark, so we'll also need to crank up the brightness of our blurred layer to around 150% and combine it with the underlying raw image using the 'screen' method, which lightens everything a bit more. &lt;a href="http://en.wikipedia.org/wiki/Blend_modes#Screen"&gt;The math for a screen combine is f(a , b) = 1- (1 - a)(1 - b), where 'a' is the base layer value and 'b' is the blend value&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;That gives us this result:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-61Q1dZ67iWo/URzq4NnirJI/AAAAAAAABeA/Zum7i4G5jyo/s1600/screened.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="280" src="http://3.bp.blogspot.com/-61Q1dZ67iWo/URzq4NnirJI/AAAAAAAABeA/Zum7i4G5jyo/s320/screened.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;At this point, it looks pretty good and we could probably call it quits, but the darkening from the shadow mask is still monkeying with our perceived colors a bit, so I played around with the levels to try and get something that looked closer to the original image. I found that moving the black point to around 23 and the white point to around 179 while keeping the gray point at 1.0 gives a good, bright result:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-JfQHdW3JrTo/URzrSFbtV6I/AAAAAAAABeI/geTTkjSPXhc/s1600/leveled.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="280" src="http://3.bp.blogspot.com/-JfQHdW3JrTo/URzrSFbtV6I/AAAAAAAABeI/geTTkjSPXhc/s320/leveled.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;This adjustment also ensures that blacks are actually black and not brown and whites are white instead of gray. Here's a comparison shot:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-98M3f0FJILY/URzv3G9_WZI/AAAAAAAABeg/woO9bctirIY/s1600/brown-black+comparison.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="279" src="http://4.bp.blogspot.com/-98M3f0FJILY/URzv3G9_WZI/AAAAAAAABeg/woO9bctirIY/s320/brown-black+comparison.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;While we're looking at this Super Metroid shot anyway, lets zoom in and take a better look at the luminance-based glow created by our blur:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-K-sMdx664-c/URzwzbjVsMI/AAAAAAAABeo/ejwNuQR98OY/s1600/glow-detail.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="247" src="http://4.bp.blogspot.com/-K-sMdx664-c/URzwzbjVsMI/AAAAAAAABeo/ejwNuQR98OY/s320/glow-detail.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;You can see where the brighter pixels bleed into the adjacent phosphors, particularly on the glowing suit highlights.&lt;br /&gt;&lt;br /&gt;Using a 5 px gaussian blur bleeds the colors even more but ends up making the entire picture more hazy (3 px blur followed by 5 px blur):&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-vUQ-tko9iZs/URz1vfIeL2I/AAAAAAAABfA/QS5xeNMskwg/s1600/3xblur.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="209" src="http://3.bp.blogspot.com/-vUQ-tko9iZs/URz1vfIeL2I/AAAAAAAABfA/QS5xeNMskwg/s320/3xblur.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-_Za_B4KVK-w/URz1vfnek8I/AAAAAAAABfE/O7ZOdRN_pRs/s1600/5xblur.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="209" src="http://4.bp.blogspot.com/-_Za_B4KVK-w/URz1vfnek8I/AAAAAAAABfE/O7ZOdRN_pRs/s320/5xblur.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;You can see from the thumbnails that the 5 px picture looks nice from a distance, while the 3 px looks a lot better up close. So, you could make a valid argument for either one depending on your preferences and intended viewing distance.&lt;br /&gt;&lt;br /&gt;The above process could work alright at a 5x scale, using a bilinear reduction on the LUT and a 1.5 px blur, and not look too bad:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-V0UnoZhORDg/URz9FuteMgI/AAAAAAAABfw/wnxSFG18oy0/s1600/bilinear2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="280" src="http://3.bp.blogspot.com/-V0UnoZhORDg/URz9FuteMgI/AAAAAAAABfw/wnxSFG18oy0/s320/bilinear2.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;But dropping it to 4x starts to really cause some problems with the colors, giving the appearance of too much gamma:&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-qJPNM8byfPs/URz9V-6OKHI/AAAAAAAABf4/XpVFQJlZ81Q/s1600/4x2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="280" src="http://1.bp.blogspot.com/-qJPNM8byfPs/URz9V-6OKHI/AAAAAAAABf4/XpVFQJlZ81Q/s320/4x2.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;At these scales and lower, cgwg's CRT shader looks much, much better, due to his compensation for LCD subpixel aliasing (among other things, such as gamma interpolation, screen curvature, etc.).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The last thing I want to cover is the phosphor orientation. I oriented my LUT with red at the bottom and blue at the top because doing it the opposite way looks weird up close (notice how the red pixels on the shell create a sort of halo instead of having the intended cartoony black outline, as compared with the pictures above):&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-R9EgTALlJ6g/URz5j3fOJNI/AAAAAAAABfQ/6c2qB1dZcfQ/s1600/flippedphosphors.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="209" src="http://2.bp.blogspot.com/-R9EgTALlJ6g/URz5j3fOJNI/AAAAAAAABfQ/6c2qB1dZcfQ/s320/flippedphosphors.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Likewise, using vertical phosphors--as shown in all of the phosphor images I could find online--looks like crap close up *and* far off (eschew the cutoff edge; click to embiggen):&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-jJgUn4hjxz0/URz8k-npETI/AAAAAAAABfo/VD_dmHBFu0c/s1600/vertphosphorleveled.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="312" src="http://2.bp.blogspot.com/-jJgUn4hjxz0/URz8k-npETI/AAAAAAAABfo/VD_dmHBFu0c/s320/vertphosphorleveled.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;At the moment, I've just been playing around with Photoshop, but I hope to do some work on a legit shader that performs this process in real time. Unfortunately, I suck ass at writing GLSL, so it may never get anywhere. If anyone else would like to take a stab at it, I'm happy to provide any information I have.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: lime;"&gt;Update&lt;/span&gt;: For the Photoshop steps, &lt;a href="http://mouaif.wordpress.com/2009/01/05/photoshop-math-with-glsl-shaders/"&gt;Romain Dura has helpfully converted the math functions to GLSL&lt;/a&gt;, and the gaussian blur steps from cgwg's halated CRT shader can drop right in.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: lime;"&gt;Update 2&lt;/span&gt;: I cobbled together some code that works at least partially and I'm pleased with the outcome so far. I don't have a high dpi screen, so I'm stuck working at 4x, but I think the code should work fine with a larger resolution.&lt;br /&gt;&lt;br /&gt;Currently, I can get it to the point where it has the shadow mask and phosphor lenses, as well as gaussian blur (though the blur is happening underneath the phosphors, which isn't exactly what I wanted):&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-Q5jB4i2gXik/USTnpvMA9jI/AAAAAAAABgQ/UqEX0mxvYnw/s1600/toodark.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="305" src="http://1.bp.blogspot.com/-Q5jB4i2gXik/USTnpvMA9jI/AAAAAAAABgQ/UqEX0mxvYnw/s320/toodark.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;This is obviously much too dark, but when I tried to lighten it up, I couldn't get things looking quite right. It would either blast out the colors underneath or make the phosphors visible on a flat black screen, which is unacceptable. When I tried adding a bloom pass, the phosphor bleed looked good (if a bit exaggerated) and the brightness was pretty close but the colors got totally wrecked &amp;gt;.&amp;lt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-xlUvtYRLeyU/USTpu8f6npI/AAAAAAAABgo/zMkESQj5C00/s1600/bloomed.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="305" src="http://2.bp.blogspot.com/-xlUvtYRLeyU/USTpu8f6npI/AAAAAAAABgo/zMkESQj5C00/s320/bloomed.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Oh well... I'll keep at it. If anyone wants to play around with the code I've got so far and/or play around with my phosphor LUT, you can get it &lt;a href="http://www.mediafire.com/download.php?alyc48c9gaacj6j"&gt;here&lt;/a&gt;.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span style="color: lime;"&gt;Update 3&lt;/span&gt;: As cgwg pointed out in the comments, mapping the phosphors 1:1 on the SNES pixels, like I did above, isn't really how TVs worked. They were designed to receive a 480i signal (i.e., 2 sets of 240 lines of resolution, alternating which lines get displayed for an effective 30 fps), as per the NTSC broadcast spec, which Nintendo and others tweaked to show just 240(ish) lines, non-alternating, at 60 fps. This format goes by many names, including non-interlaced mode, 240p (not a real spec, btw) and "double-strike."&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;I did some more mockups using the same procedure as above, but using a phosphor array that's ~480 pixels tall (I actually went with 448; i.e., double the SNES res) and started with an image that should match the "double-strike" idea at 10x, namely, a 20x image with half of the pixels blanked out, like this (note, it looks exactly like if you added a 100% black scanline filter; if this is somehow incorrect, I'd love to hear about it in the comments):&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-CWSVN7BrVmc/UTeBwxyP0_I/AAAAAAAABik/_uzTJ3JDyZY/s1600/doublestrike20x.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="280" src="http://4.bp.blogspot.com/-CWSVN7BrVmc/UTeBwxyP0_I/AAAAAAAABik/_uzTJ3JDyZY/s320/doublestrike20x.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Since the vertical resolution doubled, I also doubled the pixel radius of the gaussian blur, up to 6 px and, instead of adjusting the levels, I increased the brightness by 300% and the contrast by 25%, which resulted in this (crap: blogspot won't display that large of a file and insists on shrinking it and converting to jpg; &lt;a href="http://www.mediafire.com/?zeh8uj96c1k093o"&gt;here's a link to download the full-res if anyone wants it&lt;/a&gt;). And here it is shrunken bilinearly back down to 10x:&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-mvHjARtoHyA/UTeDc_8XBjI/AAAAAAAABi0/fsAsow4aEvY/s1600/480i-doublestrike-10x.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="280" src="http://2.bp.blogspot.com/-mvHjARtoHyA/UTeDc_8XBjI/AAAAAAAABi0/fsAsow4aEvY/s320/480i-doublestrike-10x.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;It still looks pretty nice. And here's a detail shot:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-VouO9U_qHKs/UTeDcoS0SrI/AAAAAAAABiw/Rbt43BtsYuM/s1600/10xdetail.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="212" src="http://1.bp.blogspot.com/-VouO9U_qHKs/UTeDcoS0SrI/AAAAAAAABiw/Rbt43BtsYuM/s320/10xdetail.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Interestingly, at this scale, the vertically oriented phosphors look a lot better and produce an image that's much less scanliney, so perhaps it is the better option:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-l7_E6W4L0fk/UTifU_irVXI/AAAAAAAABjY/k58g2Qk_ggo/s1600/480ivertphosphors10x.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="280" src="http://3.bp.blogspot.com/-l7_E6W4L0fk/UTifU_irVXI/AAAAAAAABjY/k58g2Qk_ggo/s320/480ivertphosphors10x.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-PHMk0tDNi7c/UTifU50i21I/AAAAAAAABjU/Qp8n0fXLWP0/s1600/vertphosphor10xdetail.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="212" src="http://3.bp.blogspot.com/-PHMk0tDNi7c/UTifU50i21I/AAAAAAAABjU/Qp8n0fXLWP0/s320/vertphosphor10xdetail.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Here's a link to download that &lt;a href="http://www.mediafire.com/?vogr2bnygjibs5l"&gt;vertically oriented shadow mask / phosphor LUT&lt;/a&gt;, if anyone's interested in playing around with it.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;&lt;span style="color: red;"&gt;UPDATE (3/18/2013):&lt;/span&gt;&lt;/b&gt; After digging around in an old thread on byuu's forum, I came across a post from Themaister where he explained how to go about using and accessing various framebuffers in shaders, which allowed me to finish this one up, for the most part (at least to the point where I don't have to keep poking away at it). It's a real beast of a shader and doesn't run fullspeed on the Intel HD4000 I've been testing with, but it looks pretty good in slow motion :P&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="https://s3.amazonaws.com/Emulation/Pixel+Shaders/phosphorLUT.zip"&gt;You can download the shader and a couple of LUTs here&lt;/a&gt;. (same as the link at the top of the post)&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;I included 240p and 480p LUTs with both horizontal and vertical phosphor orientations. The 240phoriz LUT will give you essentially the image I was going for at the start of this post:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-AM1UPfPd4eU/UUdpAfJnPQI/AAAAAAAABlg/QTLu8CnPl0c/s1600/240phoriz.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="298" src="http://2.bp.blogspot.com/-AM1UPfPd4eU/UUdpAfJnPQI/AAAAAAAABlg/QTLu8CnPl0c/s320/240phoriz.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-0RTNHxFsPwc/UUdpAdCoR7I/AAAAAAAABlc/fFn9d_uFouI/s1600/240phoriz-big.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-0RTNHxFsPwc/UUdpAdCoR7I/AAAAAAAABlc/fFn9d_uFouI/s320/240phoriz-big.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Notice, these shots look a bit dark, due to the way the LUT gets shrunken on my 1080p/4x scale screen. In the shader, there's a line you can uncomment when you're on a low-resolution screen like this to make the colors a bit brighter, which gives you something like this:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-QlV3ycGNMSM/UUdrfR_7HJI/AAAAAAAABls/QXLXWD32nwc/s1600/lowrezzed.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="298" src="http://1.bp.blogspot.com/-QlV3ycGNMSM/UUdrfR_7HJI/AAAAAAAABls/QXLXWD32nwc/s320/lowrezzed.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;For anyone on a larger screen (or if you'd like to play around with the higher-resolution LUTs), I also included 480p variants, the vertical version of which looks like this:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-rmqFTWZTINE/UUdr51L8Q-I/AAAAAAAABl4/3LnRvBm1I3M/s1600/480pvert.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="298" src="http://2.bp.blogspot.com/-rmqFTWZTINE/UUdr51L8Q-I/AAAAAAAABl4/3LnRvBm1I3M/s320/480pvert.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-HnC2p4d13dA/UUdr55v2FlI/AAAAAAAABl0/SvAq11rqR3c/s1600/480pvert-big.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-HnC2p4d13dA/UUdr55v2FlI/AAAAAAAABl0/SvAq11rqR3c/s320/480pvert-big.png" width="304" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Again, these shots would be brighter with the low-res mode enabled.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Last, just for fun, I made some screenshots of Super Metroid using the low-res option with the 240phoriz LUT, just like the Photoshop renders I made above, and here's how it looks:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-zoK_hKsQApU/UUdsUHAGBmI/AAAAAAAABmE/LWOGfSHU5sc/s1600/metroid2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="298" src="http://4.bp.blogspot.com/-zoK_hKsQApU/UUdsUHAGBmI/AAAAAAAABmE/LWOGfSHU5sc/s320/metroid2.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-1ZJE7PY4jds/UUdsUIp1klI/AAAAAAAABmM/9TaH5zeGzY8/s1600/metroid.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="298" src="http://2.bp.blogspot.com/-1ZJE7PY4jds/UUdsUIp1klI/AAAAAAAABmM/9TaH5zeGzY8/s320/metroid.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Not bad! :D&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;One thing that still needs work is that the gaussian blur is only happening vertically, I think, but I'm not really sure why. I'm assuming I didn't put the horizontal pass into the framebuffer properly, so I'll keep fiddling with that. Also, certain emulation cores (such as snes9x-next) don't really play nicely with it, presumably due to horizontal resolution issues. Genesis Plus GX seems to work fine, at least:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-r6eSmoJWZAg/UUdwhNkmx3I/AAAAAAAABmc/y3DSVPvlmY0/s1600/aladdin.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="280" src="http://2.bp.blogspot.com/-r6eSmoJWZAg/UUdwhNkmx3I/AAAAAAAABmc/y3DSVPvlmY0/s320/aladdin.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&amp;nbsp;&lt;a href="http://1.bp.blogspot.com/-84Q9fg6j3YE/UUdwhMLpolI/AAAAAAAABmg/iLh3rOX5Fyc/s1600/sonic2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="280" src="http://1.bp.blogspot.com/-84Q9fg6j3YE/UUdwhMLpolI/AAAAAAAABmg/iLh3rOX5Fyc/s320/sonic2.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;&lt;span style="color: red;"&gt;Update (3/29/2013):&lt;/span&gt;&lt;/b&gt; I made a couple of small changes to the shader and a few different variations. I added in a new variable called 'brightness' (toward the end of the file) that you can raise/lower to increase/decrease the brightness of the image if it's too dark (within a range). Here's a pastebin of the &lt;a href="http://pastebin.com/qf6HBBmf"&gt;updated default shader&lt;/a&gt;&amp;nbsp;(shown with 240pvert LUT):&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://img834.imageshack.us/img834/1948/retroarch20130319145920.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://img834.imageshack.us/img834/1948/retroarch20130319145920.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;And &lt;a href="http://pastebin.com/4D9mX4xj"&gt;here's one with scanlines added&lt;/a&gt; (sry, no screenshot; I'll try to add one soon):&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;And &lt;a href="http://pastebin.com/Y1qmS5XJ"&gt;here's a super-mega version with Themaister's multipass NTSC shader+scanlines&lt;/a&gt; (another missing screenshot).&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;GPDP made some new LUTs, too, which is awesome. The first one mimics an aperture grill (&lt;a href="http://img10.imageshack.us/img10/4792/aperture2.png"&gt;click to download the LUT&lt;/a&gt;; shown here with scanlines added):&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://img577.imageshack.us/img577/785/retroarch0322141219.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="280" src="http://img577.imageshack.us/img577/785/retroarch0322141219.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;This one will look best at 9x scale instead of 10x.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;The second LUT is actually pretty good at smaller scales, such as 4x, and takes the same idea as cgwg's CRT shader in that it tints alternating pixels green or magenta (&lt;a href="http://img255.imageshack.us/img255/3674/crtgeom.png"&gt;click to download the LUT&lt;/a&gt;;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://img203.imageshack.us/img203/5668/retroarch20130322180450.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://img203.imageshack.us/img203/5668/retroarch20130322180450.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&amp;nbsp;I also modified cgwg's CRT shader to use the phosphor LUTs instead of the built-in pink/green pixel tint (note: screen transformation doesn't work right in this version)&amp;nbsp;. It looks like this (&lt;a href="http://pastebin.com/kGWKJWR3"&gt;click to download&lt;/a&gt;; shown with 240phoriz LUT):&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://i45.tinypic.com/ok02hd.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="298" src="http://i45.tinypic.com/ok02hd.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Just as a warning: there's no reason to use this one instead of the regular CRT shader at less-than-huge scales. It looks significantly worse than the normal version. TBH, that's true for all of the shaders in this post...&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;And here's one with aliaspider's GTU shader replacing the gaussian passes (&lt;a href="http://pastebin.com/D2Ev98TU"&gt;click to download&lt;/a&gt;; shown with 480pvert LUT):&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://i46.tinypic.com/2ynnndy.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="298" src="http://i46.tinypic.com/2ynnndy.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;&lt;span style="color: red;"&gt;Update (5/9/2013):&lt;/span&gt;&lt;/b&gt; Here's how the updated Cg port looks. I now consider this the best version and recommend users upgrade to it if they've been using the older GLSL version:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-iAxrozuiTc0/UYvCHDolrOI/AAAAAAAABuE/K2x3ounx02Q/s1600/RetroArch-0509-094841.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="280" src="http://4.bp.blogspot.com/-iAxrozuiTc0/UYvCHDolrOI/AAAAAAAABuE/K2x3ounx02Q/s320/RetroArch-0509-094841.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-tXURVhJKFHg/UYvCHd7py-I/AAAAAAAABuI/5EkklacZcg8/s1600/RetroArch-0509-094907.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="280" src="http://3.bp.blogspot.com/-tXURVhJKFHg/UYvCHd7py-I/AAAAAAAABuI/5EkklacZcg8/s320/RetroArch-0509-094907.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-RKaF661nk_E/UYvCHRVrO4I/AAAAAAAABuM/l4qmyDBb1UE/s1600/RetroArch-0509-095021.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="280" src="http://4.bp.blogspot.com/-RKaF661nk_E/UYvCHRVrO4I/AAAAAAAABuM/l4qmyDBb1UE/s320/RetroArch-0509-095021.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-uZZrxiIBosg/UYvCH-xZ5hI/AAAAAAAABuQ/vuoOu_G284E/s1600/RetroArch-0509-095052.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="280" src="http://4.bp.blogspot.com/-uZZrxiIBosg/UYvCH-xZ5hI/AAAAAAAABuQ/vuoOu_G284E/s320/RetroArch-0509-095052.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;These shots were all taken at 4x, which would never have been possible with the GLSL version (without it looking like total garbage). It also handles pseudo-hires transparency decently well (see: Kirby shot), though you'll notice there's quite a bit of color mangling still...&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;You can download this shader &lt;a href="https://s3.amazonaws.com/Emulation/Pixel+Shaders/PhosphorLUT-Cg.zip"&gt;here&lt;/a&gt;.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://filthypants.blogspot.com/feeds/4200704679633130546/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6845625574553920830&amp;postID=4200704679633130546' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6845625574553920830/posts/default/4200704679633130546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6845625574553920830/posts/default/4200704679633130546'/><link rel='alternate' type='text/html' href='http://filthypants.blogspot.com/2013/02/designing-large-scale-phosphor.html' title='Designing a Large-scale Phosphor Filter/Shader'/><author><name>Hunter K.</name><uri>http://www.blogger.com/profile/18379090454291486194</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-QaIwAYq9XcI/URwQzzq1VOI/AAAAAAAABdQ/1jwU0tfj2R0/s72-c/phosphorLUT.png' height='72' width='72'/><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6845625574553920830.post-3037840304878759832</id><published>2012-12-31T16:30:00.001-08:00</published><updated>2012-12-31T16:30:24.063-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='overscan'/><category scheme='http://www.blogger.com/atom/ns#' term='nvidia'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Fix for TV Overscan in Ubuntu with Nvidia Drivers</title><content type='html'>Ok, this problem has been a consistent thorn in my side for as long as I've been running Ubuntu on my TV (a number of years). On a lot of HDTVs, setting your computer to display 1080p or 720p or whatever will often cut off the edges of the screen. This cutoff is known as overscan and it used to be necessary because all sorts of garbage data would be displayed in the edges of broadcast signals and video games. Nowadays, that doesn't happen and we want to see every bit of the picture but many TVs still do it.&lt;br /&gt;&lt;br /&gt;The easiest fix on TVs of any reasonable quality is to set the TV to "just scan" or "pixel perfect" mode (it goes by many different names depending on manufacturer). However, if your TV is cheap/crappy, you won't have such an option and the only way to deal with it is via software. This works just dandy in Windows, where the Nvidia driver has a handy little "overscan compensation" option where you can adjust a slider until your entire desktop is visible.&lt;br /&gt;&lt;br /&gt;Sometimes, depending on driver revision and apparently some other unknown (to me) factors, a similar slider is available in the nvidia-settings applications in Ubuntu. This is undependable, though, and it will sometimes be grayed out or even disappear after you've used it in the past! :O&lt;br /&gt;&lt;br /&gt;If you run into any of this, the way to fix it is to add a line to your /etc/X11/xorg.conf files that invokes the ViewPortIn/ViewPortOut options in the driver. So, open a terminal and type:&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&lt;span style="font-family: Courier New, Courier, monospace;"&gt;sudo nano /etc/X11/xorg.conf&lt;/span&gt;&lt;/blockquote&gt;You should see:&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&lt;span style="font-family: Courier New, Courier, monospace;"&gt;Section "Device"&lt;/span&gt;&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Identifier &amp;nbsp; &amp;nbsp;"Default Device"&lt;/span&gt;&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Option &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;"NoLogo" &amp;nbsp; &amp;nbsp; &amp;nbsp; "True"&lt;/span&gt;&lt;span style="font-family: Courier New, Courier, monospace;"&gt;EndSection&lt;/span&gt;&lt;/blockquote&gt;Or something similar. If you don't see any of that (e.g., if your file is totally empty), then just add it in manually.&lt;br /&gt;&lt;br /&gt;Next, add a new line under the "NoLogo" line that looks like this (all one line, btw):&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&lt;span style="font-family: Courier New, Courier, monospace;"&gt;Option &amp;nbsp; &amp;nbsp;"metamodes" "DFP-0: idealxresolution { ViewPortIn=&lt;i&gt;ideal&lt;/i&gt;x&lt;i&gt;resolution&lt;/i&gt;,ViewPortOut=&lt;i&gt;desired&lt;/i&gt;x&lt;i&gt;resolution&lt;/i&gt;+&lt;i&gt;excess&lt;/i&gt;X+&lt;i&gt;excess&lt;/i&gt;Y }"&lt;/span&gt;&lt;/blockquote&gt;So, if, like me, you want it to run in 720p with 24 pixels of horizontal overscan compensation added to left/right sides and 14 pixels of vertical overscan compensation added to top/bottom, your line will look like this:&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&lt;span style="font-family: Courier New, Courier, monospace;"&gt;Option "metamodes" "DFP-1: 1280x720 { ViewPortIn=1280x720,ViewPortOut=1232x692+24+14 }"&lt;/span&gt;&lt;/blockquote&gt;Now, you'll notice that the buffers I've added to the end are exactly half of the total amount of resolution I'm chopping off. That's because the specified amount is added to both sides.&lt;br /&gt;&lt;br /&gt;You'll also notice that my line uses DFP-1 instead of DFP-0. I'm not sure why that is, but that's what it identifies as in my nvidia-settings application, so be sure to check there first to find out what yours should be labeled as.&lt;br /&gt;&lt;br /&gt;Log out and back in and it should use the new resolution. If not, try rebooting.</content><link rel='replies' type='application/atom+xml' href='http://filthypants.blogspot.com/feeds/3037840304878759832/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6845625574553920830&amp;postID=3037840304878759832' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6845625574553920830/posts/default/3037840304878759832'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6845625574553920830/posts/default/3037840304878759832'/><link rel='alternate' type='text/html' href='http://filthypants.blogspot.com/2012/12/fix-for-tv-overscan-in-ubuntu-with.html' title='Fix for TV Overscan in Ubuntu with Nvidia Drivers'/><author><name>Hunter K.</name><uri>http://www.blogger.com/profile/18379090454291486194</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6845625574553920830.post-6242639549312933488</id><published>2012-10-31T04:54:00.002-07:00</published><updated>2012-10-31T05:44:41.241-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='windows 8'/><category scheme='http://www.blogger.com/atom/ns#' term='fix'/><category scheme='http://www.blogger.com/atom/ns#' term='ssf4'/><title type='text'>Fix for Win8 Unhandled Error -1 (SSF4)</title><content type='html'>Ugh, this problem was infuriating. I got a cheap copy of Windows 8 through my job and decided to go ahead and install it, just to be up-to-date. Then, I went to play SSF4AE via Steam and instead of launching, I got an ugly little window that said "An unhandled error has occurred -1."&lt;br /&gt;&lt;br /&gt;After digging around online, it appears that the fault lies in Windows 8's default implementation of Games For Windows Live. |:-[&lt;br /&gt;&lt;br /&gt;To get around this problem, we need to uninstall the default GFWL and download the latest installer from Microsoft.&lt;br /&gt;&lt;br /&gt;You DO NOT have to uninstall/reinstall Steam as is suggested elsewhere online. If you try that, be aware that it &lt;strike&gt;will&lt;/strike&gt; may uninstall all of your games at the same time (thanks to MasterPhW for the correction). It's supposed to ask before doing so, but it didn't ask me, so YMMV.</content><link rel='replies' type='application/atom+xml' href='http://filthypants.blogspot.com/feeds/6242639549312933488/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6845625574553920830&amp;postID=6242639549312933488' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6845625574553920830/posts/default/6242639549312933488'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6845625574553920830/posts/default/6242639549312933488'/><link rel='alternate' type='text/html' href='http://filthypants.blogspot.com/2012/10/fix-for-win8-unhandled-error-1-ssf4.html' title='Fix for Win8 Unhandled Error -1 (SSF4)'/><author><name>Hunter K.</name><uri>http://www.blogger.com/profile/18379090454291486194</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6845625574553920830.post-4519666226264362808</id><published>2012-09-13T12:46:00.000-07:00</published><updated>2012-09-26T12:22:56.674-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='emulation'/><category scheme='http://www.blogger.com/atom/ns#' term='RetroArch'/><category scheme='http://www.blogger.com/atom/ns#' term='pixel shader'/><title type='text'>Background Shader for RetroArch</title><content type='html'>&lt;b&gt;UPDATE (9/18/2012):&lt;/b&gt; It turns out the Themaister already wrote a waaay better version of this shader that can do some cool things like move the location of the game window and scale to arbitrary scale factors (i.e., not just even integers). I also made another old TV background:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://1.bp.blogspot.com/-PQreasWZa4g/UFiMA_8PWRI/AAAAAAAABYQ/nPMiju8MGzc/s1600/RetroArch-0918-093903.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="180" src="http://1.bp.blogspot.com/-PQreasWZa4g/UFiMA_8PWRI/AAAAAAAABYQ/nPMiju8MGzc/s320/RetroArch-0918-093903.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;If you'd like to try Themaister's version of the shader--which I've provided as-is, as well as combined with flat and curved CRT shaders--you can download it and the above TV background here:&lt;br /&gt;&lt;a href="http://www.mediafire.com/?av2y788pn3v1b3e"&gt;http://www.mediafire.com/?av2y788pn3v1b3e&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;UPDATE (9/26/2012)&lt;/b&gt;: Another one by request, using Super Metroid's Japanese artwork:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://2.bp.blogspot.com/-5PKmwdrgOks/UGNUnapKSsI/AAAAAAAABYo/ClIa5rHsp1Y/s1600/preview.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="180" src="http://2.bp.blogspot.com/-5PKmwdrgOks/UGNUnapKSsI/AAAAAAAABYo/ClIa5rHsp1Y/s320/preview.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Download:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://www.mediafire.com/?ah2a1hxptte886l"&gt;http://www.mediafire.com/?ah2a1hxptte886l&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Original Post:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;I've been working on a fun little pixel shader for use with RetroArch that functions similarly to the Cg border shader but using GLSL and the XML shader format. The way it works is that it combines the functionality of the existing integer scale shader with a lookup texture (LUT) that loads an external texture and then combines that image with the rendered game image. The LUT then has a transparent window in the middle where you can see the game peeking through.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In the simplest application, you can put whatever fancy stuff you want around the game window, like this awesome pixel-art border created by FirebrandX (NOTE: all of these look better in actual use; the way I took the screenshots caused the game's vertical resolution to get cut off by the border a bit):&lt;/div&gt;&lt;div&gt;&lt;a href="http://4.bp.blogspot.com/-hmn0R2yTShk/UFI0guldFTI/AAAAAAAABX4/A_4Y0-cTbR4/s1600/firebrand-metroid.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="169" src="http://4.bp.blogspot.com/-hmn0R2yTShk/UFI0guldFTI/AAAAAAAABX4/A_4Y0-cTbR4/s320/firebrand-metroid.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;By using RetroArch's awesome multipass shader support, you can also tack on some fun effects, like cgwg's CRT shader and some high-resolution artwork:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://4.bp.blogspot.com/-DHvD3jpAnv4/UFIzb5LU5HI/AAAAAAAABXo/ggWwloqLX9o/s1600/rgb-flat.png" imageanchor="1" style="display: inline !important; margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="169" src="http://4.bp.blogspot.com/-DHvD3jpAnv4/UFIzb5LU5HI/AAAAAAAABXo/ggWwloqLX9o/s320/rgb-flat.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;We can also do fun stuff like this TV border:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-qcpbvOffMqA/UFIzaorSucI/AAAAAAAABXg/4qJZ852KeXY/s1600/crt-background.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: left;"&gt;&lt;img border="0" height="169" src="http://3.bp.blogspot.com/-qcpbvOffMqA/UFIzaorSucI/AAAAAAAABXg/4qJZ852KeXY/s320/crt-background.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="http://3.bp.blogspot.com/-qcpbvOffMqA/UFIzaorSucI/AAAAAAAABXg/4qJZ852KeXY/s1600/crt-background.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: left;"&gt;&lt;br /&gt;&lt;/a&gt;&lt;a href="http://3.bp.blogspot.com/-qcpbvOffMqA/UFIzaorSucI/AAAAAAAABXg/4qJZ852KeXY/s1600/crt-background.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: left;"&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;And we can use the transparency of the background image to overlay things across the game, like this Super Mario Bros 2 border, which has the characters overlapping a bit:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-8ZCCNpJOWpg/UFIzcRoddHI/AAAAAAAABXw/RrjoSvby64w/s1600/smb2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: left;"&gt;&lt;img border="0" height="169" src="http://4.bp.blogspot.com/-8ZCCNpJOWpg/UFIzcRoddHI/AAAAAAAABXw/RrjoSvby64w/s320/smb2.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;You can download these and others here:&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;a href="http://www.mediafire.com/?1bss7814eupav1b"&gt;http://www.mediafire.com/?1bss7814eupav1b&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;To use the shader, you'll need to uncheck the 'Lock Aspect Ratio' option in RetroArch, under 'Video' and put the desired background image in the same folder as the shader with filename 'background.png.' The backgrounds only work with specific monitor resolutions, so I've included 1080p versions of the ones pictured above, while FirebrandX was kind enough to make several iterations of his sweet pixel-art backgrounds that work at their specified resolutions. I've also included several background-compatible shaders, including the raw shader, ones with cgwg's CRT+NTSC-RGB (both flat and curved varieties) and some with cgwg's CRT+NTSC-RF (both flat and curved varieties).&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;In case you'd like to make your own, I've also included a simple template (in PSD format) for 1080p resolutions.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://filthypants.blogspot.com/feeds/4519666226264362808/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6845625574553920830&amp;postID=4519666226264362808' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6845625574553920830/posts/default/4519666226264362808'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6845625574553920830/posts/default/4519666226264362808'/><link rel='alternate' type='text/html' href='http://filthypants.blogspot.com/2012/09/background-shader-for-retroarch.html' title='Background Shader for RetroArch'/><author><name>Hunter K.</name><uri>http://www.blogger.com/profile/18379090454291486194</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-PQreasWZa4g/UFiMA_8PWRI/AAAAAAAABYQ/nPMiju8MGzc/s72-c/RetroArch-0918-093903.jpg' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6845625574553920830.post-4380391561340435262</id><published>2012-09-08T07:02:00.001-07:00</published><updated>2012-09-08T07:02:47.323-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='beta'/><category scheme='http://www.blogger.com/atom/ns#' term='quantal'/><category scheme='http://www.blogger.com/atom/ns#' term='x120e'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='lenovo'/><title type='text'>Ubuntu Quantal Beta - First Impressions on x120e</title><content type='html'>I just updated to the latest beta release of Ubuntu, codenamed Quantal Quetzel (or, as I call it, Quantum Pretzel), on my Lenovo x120e netbook.&lt;br /&gt;&lt;br /&gt;Installation went smoothly and my optional broadcom wireless chipset was detected and enabled automatically during installation. This is the first time that has loaded without any hassle on my part, and I'm very pleased with the result. Users with the default atheros chipset have been enjoying this ease of installation for several releases already.&lt;br /&gt;&lt;br /&gt;Installation went smoothly, now that they've squashed a particularly nasty bug in the installer that would crash if you tried to manually modify the partition table...&lt;br /&gt;&lt;br /&gt;Once I booted into the actual installed system, it defaulted to use the open source driver for my integrated Radeon Fusion chipset, which provides adequate acceleration for transparency and other desktop composition goodies. Speaking of, the default Unity interface seems to have been improved further beyond the already much-improved Precise release, with the icons in the dock being smaller and less cartoony on my machine, with transparent backgrounds rather than the garish multicolored backgrounds from before (YMMV).&lt;br /&gt;&lt;br /&gt;Virtual desktop switching also seems much improved. I never used it before because it felt clunky and laggy, but now transitions are smooth and dragging windows among desktops is effortless and intuitive. However, sometimes the windowing system gets confused and tries to maximize things inappropriately, leaving a transparent orange overlay on the screen--to show where it's trying to maximize--until you click on the window decoration and let it do its thing, then resize.&lt;br /&gt;&lt;br /&gt;Suspend works well on this machine, faster than before and with quicker wakeups, and the wireless reconnects faster after suspend, as well. There doesn't seem to be a hibernate option anymore, so I couldn't test that.&lt;br /&gt;&lt;br /&gt;One problem I ran into: I previously used my /etc/fstab to mount a shared folder from my network at startup via smbfs, but that package has been removed upstream, so now I use cifs as the filesystem and that seems to work just fine.&lt;br /&gt;&lt;br /&gt;If you have any questions or anything you'd like me to test, feel free to hit me up in the comments.</content><link rel='replies' type='application/atom+xml' href='http://filthypants.blogspot.com/feeds/4380391561340435262/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6845625574553920830&amp;postID=4380391561340435262' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6845625574553920830/posts/default/4380391561340435262'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6845625574553920830/posts/default/4380391561340435262'/><link rel='alternate' type='text/html' href='http://filthypants.blogspot.com/2012/09/ubuntu-quantal-beta-first-impressions.html' title='Ubuntu Quantal Beta - First Impressions on x120e'/><author><name>Hunter K.</name><uri>http://www.blogger.com/profile/18379090454291486194</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6845625574553920830.post-3256298931124358492</id><published>2012-08-04T09:00:00.000-07:00</published><updated>2012-08-25T18:53:11.580-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wii'/><category scheme='http://www.blogger.com/atom/ns#' term='softmod'/><category scheme='http://www.blogger.com/atom/ns#' term='netflix'/><title type='text'>Netflix Channel Installation Error on Softmodded Wii</title><content type='html'>The Netflix channel on my Wii finally stopped letting me skip the nag screen and demanded that I update. So, I deleted the old Netflix channel from Wii's the built-in channel management menu and attempted to download the new version from the Shop Channel.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I was greeted with an error 204036 and given the option to try again, which gave the same results each time.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So, I tried to just download a copy of the channel wad (Netflix Channel v1024 USA) to install through a wad manager. This didn't work, either, as it kept giving me error -1022 (Content did not match hash in TMD).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I tried using a bunch of different IOSes to install, but nothing worked, though I ended up finding a solution:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Step 1.&lt;/span&gt;&lt;/b&gt; Go download a copy of the old Netflix Channel wad (NetflixChannel-v1-USA) and reinstall it via a wad manager.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Step 2.&lt;/span&gt;&lt;/b&gt; Once it's installed successfully, use the wad manager to uninstall it. (I got an error during uninstallation, but it finished okay anyway, FYI)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Step 3.&lt;/span&gt;&lt;/b&gt; Install the new Netflix Channel wad and it should complete successfully this time.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Apparently, the Wii's normal channel removal tool leaves behind some garbage that stops the new channel from installing properly. By reinstalling the old version and then uninstalling it through the wad manager, we can get rid of that garbage and end up with a clean slate.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;Update&lt;/span&gt;: If this doesn't work for you right away, you may have to install IOS 56 and/or the Shop Channel v20 first. In my case, I'm still on a much older shop channel, but someone in the comments mentioned needing to do this before it would work.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;Update2&lt;/span&gt;: It's asking for another update... If you follow the steps above, then uninstall Netflix via a wad manager, you should be able to download the updated Netflix channel from the Shop Channel.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://filthypants.blogspot.com/feeds/3256298931124358492/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6845625574553920830&amp;postID=3256298931124358492' title='15 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6845625574553920830/posts/default/3256298931124358492'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6845625574553920830/posts/default/3256298931124358492'/><link rel='alternate' type='text/html' href='http://filthypants.blogspot.com/2012/08/netflix-channel-installation-error-on.html' title='Netflix Channel Installation Error on Softmodded Wii'/><author><name>Hunter K.</name><uri>http://www.blogger.com/profile/18379090454291486194</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6845625574553920830.post-5000678045487384084</id><published>2012-07-28T19:49:00.000-07:00</published><updated>2013-03-07T05:53:27.332-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cgwg'/><category scheme='http://www.blogger.com/atom/ns#' term='bsnes'/><category scheme='http://www.blogger.com/atom/ns#' term='CRT'/><category scheme='http://www.blogger.com/atom/ns#' term='RetroArch'/><category scheme='http://www.blogger.com/atom/ns#' term='pixel shader'/><title type='text'>Customizing cgwg's CRT Pixel Shader</title><content type='html'>This document identifies some of the user-configurable options available in cgwg's GLSL CRT shader and provides some screenshots to explain their effects.&lt;br /&gt;&lt;br /&gt;For individuals interested in recapturing the look of retro gaming consoles played on a CRT television like the ones we grew up with, cgwg's CRT shader provides the closest approximation available for modern LCD displays. The pixel shader is purely cosmetic--nothing could impart the technical advantages of a CRT, such as negligible input lag and insanely high contrast, to an LCD--but it can go a long way to displaying old games as we remember them. Since memory and nostalgia are important to the way we perceive these games, each person will have different feelings about what looks "right" to them.&lt;br /&gt;&lt;br /&gt;We will be using the latest (as of the time of this writing, 7/28/12) and most complete version of the shader, known as &lt;a href="http://www.mediafire.com/download.php?7noofxmsowlzik4"&gt;CRT-Geom&lt;/a&gt;. This shader allows for simulated screen curvature, rounded corners, simulation of a back-tilted screen (for arcade emulation) and many other goodies. All images are captured at 4x scale, click the thumbnails to embiggen.&lt;br /&gt;&lt;br /&gt;This is what the shader looks like with all default parameters, also known as the 'curved' variant (cgwg chose sane values for all of the variables by default):&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://2.bp.blogspot.com/-ixgSYAuYiHA/UBSIseRWS8I/AAAAAAAABRU/nyh_scr3PGU/s1600/default.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="305" src="http://2.bp.blogspot.com/-ixgSYAuYiHA/UBSIseRWS8I/AAAAAAAABRU/nyh_scr3PGU/s320/default.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;The user-configurable parameters are primarily located in two places in the shader, starting at line 87 for the first section and line 135 for the second section. You should be able to open and edit the shader in any text editor, but I recommend &lt;a href="http://notepad-plus-plus.org/download"&gt;Notepad++&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The first parameters, 'gamma of simulated CRT' and 'gamma of display monitor' allow the shader to determine how much gamma correction to apply to the image. CRT displays generally had higher gamma ratings than most LCD displays (2.4 for a typical CRT vs 2.2 for a typical LCD), so the shader adds 0.2 to the gamma to compensate. If you calibrate your LCD to a higher or lower gamma setting, you may wish to change the 'gamma of display monitor' to reflect your individual settings. You can also raise or lower the simulated gamma to make a darker, more saturated look:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://4.bp.blogspot.com/-1cgZeFMEJQ4/UBSJm6l54nI/AAAAAAAABRk/HQgWJ_ir630/s1600/sim-gamma-3-0.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="305" src="http://4.bp.blogspot.com/-1cgZeFMEJQ4/UBSJm6l54nI/AAAAAAAABRk/HQgWJ_ir630/s320/sim-gamma-3-0.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;or a lighter, desaturated look:&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-ZFlCHwH3oh0/UBSJl2LeEdI/AAAAAAAABRc/pJ_WHGmPD5A/s1600/sim-gamma-1-5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="305" src="http://3.bp.blogspot.com/-ZFlCHwH3oh0/UBSJl2LeEdI/AAAAAAAABRc/pJ_WHGmPD5A/s320/sim-gamma-1-5.png" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Next, we have 'overscan.' Each CRT showed a slightly different amount of the picture, and the cut-off portion was referred to as overscan. You can modify the amount of over- or underscan by changing this variable. Setting it to (0.00,0.00) will assume you want the picture aligned exactly with the borders of the window. Setting it to a value greater than 1.0 (for example, 1.10,1.10) will cut off a large portion of the screen (approximately 10% in this example):&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://3.bp.blogspot.com/-Xhipf3ihgmw/UBSJ6W4iTMI/AAAAAAAABR0/6QmVaS_rG7M/s1600/overscan-1-10.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="305" src="http://3.bp.blogspot.com/-Xhipf3ihgmw/UBSJ6W4iTMI/AAAAAAAABR0/6QmVaS_rG7M/s320/overscan-1-10.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;while setting it to a value less than 1.0 will surround the screen with black bars (i.e., underscan):&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-geO2QAvre0E/UBSJ5KaKThI/AAAAAAAABRs/Ujt6ocWYf9U/s1600/overscan-090.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="305" src="http://4.bp.blogspot.com/-geO2QAvre0E/UBSJ5KaKThI/AAAAAAAABRs/Ujt6ocWYf9U/s320/overscan-090.png" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;Increasing the overscan slightly, say, to 1.02,1.02, can cut off unsightly garbage lines at the top of the screen, which is common on NES games.&lt;br /&gt;&lt;br /&gt;Next, we have 'aspect ratio,' which controls how much our screen curvature settings will affect the top/bottom and sides of the image. The default setting of 1.0, 0.75 means the curvature will be more pronounced on the top/bottom than on the sides, to compensate for the standard 4:3 aspect ratio. Setting it to 1.0, 1.0 will make the settings affect both sides of the screen equally, which isn't quite right in that the top/bottom actually appears more curved than the sides:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://2.bp.blogspot.com/-roY5Sa4Zf_E/UBSKROJKyJI/AAAAAAAABSE/Amno0ulVHXk/s1600/AR1to1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="305" src="http://2.bp.blogspot.com/-roY5Sa4Zf_E/UBSKROJKyJI/AAAAAAAABSE/Amno0ulVHXk/s320/AR1to1.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&lt;span style="text-align: center;"&gt;If for some reason you want only the sides straight, you can set it to 1.0, 0.5:&lt;/span&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-i8aUd3dk9jE/UBSKSU69DsI/AAAAAAAABSM/mfVqAyqEIOo/s1600/AR1to1half.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="305" src="http://4.bp.blogspot.com/-i8aUd3dk9jE/UBSKSU69DsI/AAAAAAAABSM/mfVqAyqEIOo/s320/AR1to1half.png" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;or 0.5, 1.0 to make only the top/bottom straight:&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-xctWngMdwbA/UBSKPeU-O5I/AAAAAAAABR8/dpQqvr7lWc4/s1600/AR1halfto1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="305" src="http://3.bp.blogspot.com/-xctWngMdwbA/UBSKPeU-O5I/AAAAAAAABR8/dpQqvr7lWc4/s320/AR1halfto1.png" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Next up, we have 'simulated distance from viewer to monitor.' Similar to the 'aspect ratio' setting, this exaggerates the effect of the 'tilt angle' setting that we'll be covering in just a moment. The default value of 2.0 is reasonable. Increasing the value reduces the effect of the tilt angle:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://2.bp.blogspot.com/-DAA1YHrT9Zg/UBSKxYpNVdI/AAAAAAAABSc/wS2hkodG_EE/s1600/sim-distance-8.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="305" src="http://2.bp.blogspot.com/-DAA1YHrT9Zg/UBSKxYpNVdI/AAAAAAAABSc/wS2hkodG_EE/s320/sim-distance-8.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;while lower values magnify it:&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-aKfLNYbLZWU/UBSKwPjMJrI/AAAAAAAABSU/W8rmR5-gTR0/s1600/sim-distance-0-5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="305" src="http://3.bp.blogspot.com/-aKfLNYbLZWU/UBSKwPjMJrI/AAAAAAAABSU/W8rmR5-gTR0/s320/sim-distance-0-5.png" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Next, we have 'radius of curvature,' which determines how curved our simulated TV tube will be. Setting the value to 2.0 reduces the curvature to something more like what I remember.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://4.bp.blogspot.com/-_mzVWeV9wFI/UBVxRd0cIaI/AAAAAAAABW8/cI7UuKmpNf0/s1600/curv-rad-2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="305" src="http://4.bp.blogspot.com/-_mzVWeV9wFI/UBVxRd0cIaI/AAAAAAAABW8/cI7UuKmpNf0/s320/curv-rad-2.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;'Tilt angle' pincushions one side of the screen. To tilt the screen back, use a negative value for the second number. The default for the 'arcade tilt' variant, (0.0,-0.15), is a sane value:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://3.bp.blogspot.com/-AbsCKDqksuY/UBSLBSMkkTI/AAAAAAAABSs/b5A4pbguje4/s1600/tilt-angle-0--015.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="305" src="http://3.bp.blogspot.com/-AbsCKDqksuY/UBSLBSMkkTI/AAAAAAAABSs/b5A4pbguje4/s320/tilt-angle-0--015.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;while increasing the second value tilts it back further, which can be disorienting:&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-GgHRfl_L00s/UBSLAITb_PI/AAAAAAAABSk/XowdV017d9Q/s1600/tilt-angle--0-5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="305" src="http://1.bp.blogspot.com/-GgHRfl_L00s/UBSLAITb_PI/AAAAAAAABSk/XowdV017d9Q/s320/tilt-angle--0-5.png" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;After that, we come to 'cornersize,' which determines the radius of the corner arc. I think a setting of 0.03, as used in the default image, looks appropriate. Increasing the value to 0.10 makes for some silly, super-round corners:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://4.bp.blogspot.com/-NI2ABZ-E5aM/UBSLac3wdoI/AAAAAAAABS0/e_2_H7fpwIQ/s1600/cornersize-0-10.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="305" src="http://4.bp.blogspot.com/-NI2ABZ-E5aM/UBSLac3wdoI/AAAAAAAABS0/e_2_H7fpwIQ/s320/cornersize-0-10.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;while a value of 0.001 makes for super-pointy corners:&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-S29w3bM7vPc/UBSLbwx9BtI/AAAAAAAABS8/VcKFFiz1VSg/s1600/cornersize-001.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="305" src="http://2.bp.blogspot.com/-S29w3bM7vPc/UBSLbwx9BtI/AAAAAAAABS8/VcKFFiz1VSg/s320/cornersize-001.png" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;For the last parameter in this section, we have 'cornersmooth,' which determines how sharp (sharp as in sharp/blur, not as in pointy) the corners look. The default value is 1000.0, which looks fine, but I noticed that if you set the value insanely low (i.e., 80), you get a little vignetting around the edges, which reminds me of my crummy old TVs:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://2.bp.blogspot.com/-WBcg2OaJzhQ/UBSLrTlq_HI/AAAAAAAABTE/ISLGzu-DLzI/s1600/cornersmooth-80.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="305" src="http://2.bp.blogspot.com/-WBcg2OaJzhQ/UBSLrTlq_HI/AAAAAAAABTE/ISLGzu-DLzI/s320/cornersmooth-80.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;On to the next set of parameters.&lt;br /&gt;&lt;br /&gt;The second set of options are either enabled or disabled by using 'comments,' which in this case are represented as a double-slash, like this //.&lt;br /&gt;&lt;br /&gt;The first option is 'linear processing,' which enables interpolation of linear gamma:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://2.bp.blogspot.com/-AqorNrlHSr4/UBSL5AoqlUI/AAAAAAAABTM/-9LzMoCgbJk/s1600/linear+processing.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="305" src="http://2.bp.blogspot.com/-AqorNrlHSr4/UBSL5AoqlUI/AAAAAAAABTM/-9LzMoCgbJk/s320/linear+processing.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;The effect is subtle, but disabling it via commenting it out (//#define LINEAR_PROCESSING) can improve the framerate with some video cards.&lt;br /&gt;&lt;br /&gt;Next, we have 'Enable screen curvature.' Pretty self-explanatory, but if you comment this line out, you'll get straight top/bottom/sides of the screen, but with the corner arcs intact (barely visible in this shot):&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://3.bp.blogspot.com/-fojEynWxxcg/UBSMGmAnBcI/AAAAAAAABTU/ftm_pRzCW_o/s1600/no-def-curv.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="305" src="http://3.bp.blogspot.com/-fojEynWxxcg/UBSMGmAnBcI/AAAAAAAABTU/ftm_pRzCW_o/s320/no-def-curv.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;By commenting this out and setting 'cornersize' to 0.0, you get an idealized flat CRT tube, which is represented by the 'CRT-flat' shader variant:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://1.bp.blogspot.com/-V5Eazk5_OjE/UBSitXdhiwI/AAAAAAAABWE/167wrgkn-FM/s1600/flat.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="305" src="http://1.bp.blogspot.com/-V5Eazk5_OjE/UBSitXdhiwI/AAAAAAAABWE/167wrgkn-FM/s320/flat.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The next two options work together (that is, if you uncomment one, you should comment the other). By default, the shader uses 3x oversampling of the beam profile, which makes brighter pixels bleed further into the surrounding scanlines. Here it is with the default oversampling, scaled up 400% (look closely; it's most obvious on the bright red of Mario's sleeve):&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-EjxUBI7jNe0/UBSNzaKeTHI/AAAAAAAABT8/khjd8eQyiE4/s1600/oversample-noninteger-zoom.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="200" src="http://1.bp.blogspot.com/-EjxUBI7jNe0/UBSNzaKeTHI/AAAAAAAABT8/khjd8eQyiE4/s200/oversample-noninteger-zoom.png" width="200" /&gt;&lt;/a&gt;&lt;br /&gt;and here it is with the gaussian beam profile:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://4.bp.blogspot.com/-CQC-LS3lOBg/UBSOLhXBpsI/AAAAAAAABUE/DL4KVV9As8k/s1600/gaussian-non-integer-zoom.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="200" src="http://4.bp.blogspot.com/-CQC-LS3lOBg/UBSOLhXBpsI/AAAAAAAABUE/DL4KVV9As8k/s200/gaussian-non-integer-zoom.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;The gaussian beam profile may have better performance on some video cards.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="" style="clear: both; text-align: left;"&gt;Those are all of the options available for the standard CRT shader, but there are a few more things we can add in. The first of which is support for interlaced video. Some games did a sort of fake doubling of their vertical resolution by showing different lines of a progressive signal on alternating frames in a process known as interlacing. If handled incorrectly, you will see a ton of combing artifacts (weird horizontal lines on moving objects), as well as distorted scanlines (first image taken using &lt;a href="http://www.mediafire.com/download.php?yypcggpsanhldwr"&gt;this older, non-interlace-supported version&lt;/a&gt;):&lt;/div&gt;&lt;div class="" style="clear: both; text-align: left;"&gt;&lt;a href="http://4.bp.blogspot.com/-xqQycxO__oM/UBSO4QV_S9I/AAAAAAAABUM/Afvd_dhGKZM/s1600/combing.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="304" src="http://4.bp.blogspot.com/-xqQycxO__oM/UBSO4QV_S9I/AAAAAAAABUM/Afvd_dhGKZM/s320/combing.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="http://1.bp.blogspot.com/-vsGmcsG1J_Y/UBSO5SsMK_I/AAAAAAAABUU/fNOq6K7DoV4/s1600/interlaced.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;br /&gt;&lt;/a&gt;&lt;a href="http://1.bp.blogspot.com/-vsGmcsG1J_Y/UBSO5SsMK_I/AAAAAAAABUU/fNOq6K7DoV4/s1600/interlaced.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: left;"&gt;&lt;img border="0" height="304" src="http://1.bp.blogspot.com/-vsGmcsG1J_Y/UBSO5SsMK_I/AAAAAAAABUU/fNOq6K7DoV4/s320/interlaced.png" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div class="" style="clear: both; text-align: left;"&gt;These pictures unfortunately cannot show the jutter in the lower image that occurs from showing different lines on each alternating frame.&lt;/div&gt;&lt;div class="" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="" style="clear: both; text-align: left;"&gt;Next, we have support for pseudo-hires transparency--whereby games created a fake transparency effect by doubling the horizontal resolution to 512 and then covering the transparent area with thin vertical lines, which were then squished together and blurred when the CRT displayed the image--in the games that utilize it, including Jurassic Park and Kirby's Dreamland 3:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://2.bp.blogspot.com/-Kq2Cr-Fbmps/UBSP5p8qguI/AAAAAAAABUk/gu8t8nVzCFg/s1600/noblur.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="305" src="http://2.bp.blogspot.com/-Kq2Cr-Fbmps/UBSP5p8qguI/AAAAAAAABUk/gu8t8nVzCFg/s320/noblur.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="http://1.bp.blogspot.com/-R9fsIVq0C9A/UBSP46ayyNI/AAAAAAAABUc/IuocFIgxfho/s1600/blur.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: left;"&gt;&lt;img border="0" height="305" src="http://1.bp.blogspot.com/-R9fsIVq0C9A/UBSP46ayyNI/AAAAAAAABUc/IuocFIgxfho/s320/blur.png" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;This blurring is accomplished by adding another pass to the shader that does nothing but squish the horizontal resolution from 512 to 256.&amp;nbsp;&lt;span style="background-color: black; color: red;"&gt;Note&lt;/span&gt;: this variant is multipass and therefore incompatible with the official bsnes/higan GUI. Retroarch can use it just fine with bsnes-derived emulation cores, but it is incompatible with FBO/2-pass shader stacking.&lt;br /&gt;&lt;br /&gt;Finally, to simulate the natural phosphor glow of a CRT display, cgwg created a multipass version of his CRT shader that includes a "halation" pass, which provides a soft blur that is most noticeable against a black background, such as the Nintendo logo screen in Super Mario World (it also seems to be doing some aspect ratio correction, though I'm unsure if that's intentional):&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://4.bp.blogspot.com/-qiYa_tW5TCU/UBSQULFSyrI/AAAAAAAABU0/q8sd0aTWays/s1600/non-hal.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="305" src="http://4.bp.blogspot.com/-qiYa_tW5TCU/UBSQULFSyrI/AAAAAAAABU0/q8sd0aTWays/s320/non-hal.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://2.bp.blogspot.com/-bR_xwjJj8tc/UBSQToVngRI/AAAAAAAABUs/KL0toYsRWVw/s1600/hal.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="305" src="http://2.bp.blogspot.com/-bR_xwjJj8tc/UBSQToVngRI/AAAAAAAABUs/KL0toYsRWVw/s320/hal.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Here's a shot of Super Metroid's title screen without and with halation, respectively:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://4.bp.blogspot.com/-I0Qs_o6cbig/UBSSrJVsWUI/AAAAAAAABVE/ocRU01Khu4Q/s1600/metroid-no-hal.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="305" src="http://4.bp.blogspot.com/-I0Qs_o6cbig/UBSSrJVsWUI/AAAAAAAABVE/ocRU01Khu4Q/s320/metroid-no-hal.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="http://2.bp.blogspot.com/-a6THJGcOrvE/UBSSqWqFR2I/AAAAAAAABU8/XuI0iLroM8M/s1600/metroid-hal.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="305" src="http://2.bp.blogspot.com/-a6THJGcOrvE/UBSSqWqFR2I/AAAAAAAABU8/XuI0iLroM8M/s320/metroid-hal.png" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="background-color: black; color: red;"&gt;Note&lt;/span&gt;: Like the TV blur variant, this halation variant is multipass and thus incompatible with the official bsnes/higan GUI. It works fine with Retroarch but is incompatible with the FBO/2-pass feature.&lt;br /&gt;&lt;br /&gt;Now, beyond the CRT display, our childhood gaming experiences were also colored by limitations of the NTSC signal standard and the lossy, analog hookups we used to connect our consoles. To capture these effects, we turn to blargg's NTSC filter, which runs on the CPU rather than the GPU and can thus be combined with our CRT shader.&lt;br /&gt;&lt;br /&gt;The NTSC filter is available in these CPU filter packs (compatible with RetroArch but not bsnes/higan):&lt;br /&gt;&lt;a href="http://www.mediafire.com/?356uu02o7oxw0u1"&gt;Win32&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.mediafire.com/?62p83g46s95v44r"&gt;Win64&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.mediafire.com/?bqnp2etqkq3fkz1"&gt;Linux 32-bit&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.mediafire.com/?01747etfqs8tt6g"&gt;Linux 64-bit&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.mediafire.com/?l5abvq3077cuqvt"&gt;Mac OS X&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The least intrusive variant of the filter is the RGB preset, which simulates a high-quality RGB connection. This variant provides NTSC color gamut correction but leaves the signal otherwise untouched:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://3.bp.blogspot.com/-ZMdXZXC-75Y/UBSS6TU1IYI/AAAAAAAABVM/aeDno6riiZ0/s1600/ntsc-rgb.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="305" src="http://3.bp.blogspot.com/-ZMdXZXC-75Y/UBSS6TU1IYI/AAAAAAAABVM/aeDno6riiZ0/s320/ntsc-rgb.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Next, we have the S-video variant, which has color correction and some fringing, but is still relatively high-quality. This is the variant I use most of the time:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://2.bp.blogspot.com/-ZmmB0fONH4U/UBSTBXbGKZI/AAAAAAAABVU/3fLGUJfdr3o/s1600/ntsc-svideo.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="305" src="http://2.bp.blogspot.com/-ZmmB0fONH4U/UBSTBXbGKZI/AAAAAAAABVU/3fLGUJfdr3o/s320/ntsc-svideo.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;The third variant, composite, brings in a lot of signal noise and color bleed, just as you would get through a composite, RCA-cable connection:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://4.bp.blogspot.com/-ux1Qk-9qNSY/UBSTKfKHwBI/AAAAAAAABVc/ybt1s03aae4/s1600/ntsc-composite.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="305" src="http://4.bp.blogspot.com/-ux1Qk-9qNSY/UBSTKfKHwBI/AAAAAAAABVc/ybt1s03aae4/s320/ntsc-composite.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;The worst-quality variant is RF, which looks just as messy as the composite signal, but with added jutter every other frame, just like when using the RF adapter bundled with classic consoles:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://4.bp.blogspot.com/-2KyNmvSOhqk/UBSTWDL5YqI/AAAAAAAABVk/VahlEkseqZ4/s1600/ntsc-rf.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="305" src="http://4.bp.blogspot.com/-2KyNmvSOhqk/UBSTWDL5YqI/AAAAAAAABVk/VahlEkseqZ4/s320/ntsc-rf.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;One thing to be aware of, though, when using any variant of the NTSC filter is that it also does some gamma correction, which can be overwhelming to some people when combined with the CRT shader. To mitigate this effect, you can modify the CRT shader's 'gamma of simulated CRT' to match the 'gamma of display monitor' value to disable the shader's own gamma correction (shown here with the S-video variant):&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://2.bp.blogspot.com/-F0fCSZMb40A/UBSTf6kq7KI/AAAAAAAABVs/ZtB844rSaIM/s1600/ntsc-svideo-no-gamma-correction.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="305" src="http://2.bp.blogspot.com/-F0fCSZMb40A/UBSTf6kq7KI/AAAAAAAABVs/ZtB844rSaIM/s320/ntsc-svideo-no-gamma-correction.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;My personal preferences, depending on the game/system: 'radius of curvature' of 2.0, cornersize of 0.03, cornersmooth of 80.0 and NTSC-Svideo. Sometimes I'll use the flat variant (especially on displays that have problems with moire patterns caused by curvature+scanlines), and I often use the halation variant when I'm on a machine with sufficient resources. I always use interlacing support, which has been incorporated into all of the latest versions, and TV blur when possible (i.e., when using Retroarch rather than the official bsnes/higan GUI).&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://filthypants.blogspot.com/feeds/5000678045487384084/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6845625574553920830&amp;postID=5000678045487384084' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6845625574553920830/posts/default/5000678045487384084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6845625574553920830/posts/default/5000678045487384084'/><link rel='alternate' type='text/html' href='http://filthypants.blogspot.com/2012/07/customizing-cgwgs-crt-pixel-shader.html' title='Customizing cgwg&apos;s CRT Pixel Shader'/><author><name>Hunter K.</name><uri>http://www.blogger.com/profile/18379090454291486194</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-ixgSYAuYiHA/UBSIseRWS8I/AAAAAAAABRU/nyh_scr3PGU/s72-c/default.png' height='72' width='72'/><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6845625574553920830.post-8665184563816390469</id><published>2012-07-15T12:00:00.003-07:00</published><updated>2013-05-03T07:59:31.810-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SFxT'/><category scheme='http://www.blogger.com/atom/ns#' term='mod'/><title type='text'>SFxT: How to Duplicate A Character - Proof of Concept</title><content type='html'>There are a lot of reasons why you might want to duplicate a character in SFxT, the most obvious (to me) being that you would like to play a team that consists of 2 copies of a single character that you are most skilled with. To accomplish this task, we need to edit a few files and make copies and rename a bunch of others, so lets get some tools together first.&lt;br /&gt;&lt;br /&gt;As usual, you'll need &lt;a href="http://sf4viewer.sourceforge.net/"&gt;piecemontee's Asset Explorer (aka SF4Viewer)&lt;/a&gt;&amp;nbsp;and a text editor (I recommend &lt;a href="http://notepad-plus-plus.org/download/v6.1.5.html"&gt;Notepad++&lt;/a&gt;; regular Notepad WILL NOT WORK). You'll also probably want a bulk renaming utility, such as the aptly named &lt;a href="http://www.bulkrenameutility.co.uk/Main_Intro.php"&gt;Bulk Rename Utility&lt;/a&gt;. You should also take this opportunity to make backups of any files we plan to edit, as mistakes can render your game unplayable. Repeat: MAKE BACKUPS BEFORE TRYING ANY OF THIS.&lt;br /&gt;&lt;br /&gt;NOTE: this is currently a proof of concept. &lt;strike&gt;The duplicate character will only work in training mode unless we duplicate more files, which I'll add to the post if/when I track them all down. Fights with intro animations will crash&lt;/strike&gt;. &lt;span style="color: red;"&gt;See the bottom of the post for Robhal's update!&lt;/span&gt; Also, duplicating characters will corrupt your save data, so be sure to back that up first.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: red; font-size: x-large;"&gt;&lt;b&gt;STEP 1 - Creating our duplicate&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The first step to duplicating a character is to make a copy of the target's character folder. For this tutorial, I'll be using Ken as an example. So, navigate to [install dir]\resource\CMN\battle\chara, right-click on the desired character folder, select copy, then right-click elsewhere in the directory and choose 'paste.' You should end up with a folder named '*** - copy.'&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-OPapimQjRKY/UAMRuateAHI/AAAAAAAABPI/oA-eCfIaAV8/s1600/1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="163" src="http://2.bp.blogspot.com/-OPapimQjRKY/UAMRuateAHI/AAAAAAAABPI/oA-eCfIaAV8/s320/1.jpg" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Next, rename that folder to a non-conflicting 3-letter prefix that will represent your new character duplicate. In my case, I'm going to use 'KE2.' Note: you must use exactly 3 letters for your prefix or the game will fail to even load.&lt;br /&gt;&lt;br /&gt;Once that's done, navigate into your new folder and open your bulk renaming utility. Select all of your files in the folder and rename all of them to match your 3-letter prefix (that is, all of the KEN* files should be renamed to KE2*), then do the same for all of the files in the 'sound' folder (these steps will be different depending on which renaming utility you use, so I'm not going to go over it here).&lt;br /&gt;&lt;br /&gt;It should end up looking like this:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-g_GL5ObWcZE/UAMRu5QQFFI/AAAAAAAABPQ/TkNTMU98nBw/s1600/2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="163" src="http://3.bp.blogspot.com/-g_GL5ObWcZE/UAMRu5QQFFI/AAAAAAAABPQ/TkNTMU98nBw/s320/2.jpg" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now, we'll need to make duplicate call sounds (*_CAL_*) for each character we expect to partner our duplicate with. For the sake of simplicity, I'm only going to partner KE2 with regular ol' KEN, but if you wanted to be able to partner him/her with any other character, you would need to make calls in each potential partner's 'sound' directory. So, navigate to his folder, go into 'sound' and then make a copy of his *_CAL_KEN_E and ...J files. Rename them to match your duplicate prefex, like this:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-SLN4Bln9SFc/UAMRvF3n5mI/AAAAAAAABPY/ijm-JqUKiwA/s1600/3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="163" src="http://1.bp.blogspot.com/-SLN4Bln9SFc/UAMRvF3n5mI/AAAAAAAABPY/ijm-JqUKiwA/s320/3.jpg" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Note: Failure to create the proper calls in each partner's sound folder will result in a game crash. (It's interesting that Capcom has these duplicate calls in the first place, suggesting that single-character teams were a possibility at some point).&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;Ok, with that done, we're ready to move on to step 2.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: red; font-size: x-large;"&gt;&lt;b&gt;STEP 2 - Telling the game about our duplicate&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;SFxT keeps track of the available characters and what to think about them in the const.lua file, located in the [install dir]\resource\CMN\boot\game directory. Make a copy of the file and move it to a directory where you have write permissions, such as your desktop.&lt;br /&gt;&lt;br /&gt;Then, open the file in your text editor and you should see a section labeled "charas" at the top of the file. Navigate down to the subsection for your duplicated character (in my case, Ken) and copy everything from his/her subsection, starting with the open-curly-braces (this thing: { ) and ending with close-curly-braces-followed-by-a-comma (this part: }, ).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-QdZFCngQxmQ/UAMRvoY66PI/AAAAAAAABPg/M0ViwiLYmLg/s1600/4.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-QdZFCngQxmQ/UAMRvoY66PI/AAAAAAAABPg/M0ViwiLYmLg/s320/4.jpg" width="306" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now, paste that in (right after the original is fine) and change the first line, labeled "['code']" to your duplicate's code (in my case, KE2). You can change the name here, too, but I don't think it really matters. While we're here, you can also modify anything else you want, such as vitality, "official partner," default voice, etc.&lt;br /&gt;&lt;br /&gt;Save the file and replace the original (make a backup first, if you haven't already). Now we're ready for step 3.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: red; font-size: x-large;"&gt;&lt;b&gt;STEP 3 - Creating a character select slot&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;SFxT determines which character slots are available through the selector_layout.emz file, located in the [install dir]\resource\CMN\ui\pre_battle directory. However, if you try to open the file directly, you'll see just a bunch of gibberish because the file is compressed. To decompress it, just open piecemontee's Asset Explorer and drag the file into the left-hand window pane. It will automatically create a backup of the original file (called selector_layout.emz.compressed) in the same directory, which is convenient. Once that is done, open the now-decompressed file in your text editor and it should look something like this:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-hTMOZwinGuk/UAMRwApGOVI/AAAAAAAABPo/ngfeiZqJMbM/s1600/5.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="254" src="http://3.bp.blogspot.com/-hTMOZwinGuk/UAMRwApGOVI/AAAAAAAABPo/ngfeiZqJMbM/s320/5.jpg" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This grid represents the character select icon grid, and we can use this file to move characters around (in case you want your favorite character to be closer to the top, for instance) or create new slots altogether by overwriting blanks (#BL). You can also remove characters by replacing them with blanks.&lt;br /&gt;&lt;br /&gt;As you can see in the above pic, I have already replaced one of the blanks with my duplicated character abbreviation, to the left of the Random Select box. Note: Make sure you place it somewhere adjacent to an existing character or else you won't be able to move the cursor to it (i.e., the far corners are not good spots).&lt;br /&gt;&lt;br /&gt;Once you're finished making changes, save the file and replace the original, making sure to back it up first, if you haven't already.&lt;br /&gt;&lt;br /&gt;Now we're ready to launch our game. If all goes well, you should see a new character select slot on the character select screen (to the left of the Random box, just as we stipulated in our text file), which is treated as an entirely new character as far as double-picking is concerned:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://4.bp.blogspot.com/-JHJWGQl_c-8/UAMRwZvh_AI/AAAAAAAABPw/RYmrjxCGNEM/s1600/6.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://4.bp.blogspot.com/-JHJWGQl_c-8/UAMRwZvh_AI/AAAAAAAABPw/RYmrjxCGNEM/s320/6.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://3.bp.blogspot.com/-WQxL5fViMWM/UAMRw6rQ7kI/AAAAAAAABP4/OSAx0iccQRg/s1600/7.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://3.bp.blogspot.com/-WQxL5fViMWM/UAMRw6rQ7kI/AAAAAAAABP4/OSAx0iccQRg/s320/7.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: red; font-size: x-large;"&gt;&lt;b&gt;Some Current Unknowns&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;First, I don't know how the game determines which character portrait goes into the character select screen, which is why our dupe has a blank box. Second, I don't know why the duped character is positioned strangely when you select him/her (my KE2 always appears hanging off the screen if I select him first for some reason).&lt;br /&gt;&lt;br /&gt;If you figure out anything cool, please leave a comment.&lt;br /&gt;&lt;br /&gt;Have fun, share your work and ALWAYS MAKE BACKUPS.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: red; font-size: large;"&gt;UPDATE&lt;/span&gt;&lt;/b&gt; - Robhal figured out the missing files to make the duplicated characters usable in vs. and story modes:&lt;br /&gt;&lt;br /&gt;&lt;big style="color: #333333; font-family: Helvetica, Arial, 'Bitstream Vera Sans', Verdana, sans-serif;"&gt;&lt;em&gt;&lt;strong&gt;&lt;u&gt;And now these my instructions below are continuation from hunterk's method above, to be able to play the duplicated character in Arcade and Versus mode.&lt;/u&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/big&gt;&lt;br style="color: #333333; font-family: Helvetica, Arial, 'Bitstream Vera Sans', Verdana, sans-serif; font-size: 13px; line-height: 21px;" /&gt;&lt;span style="background-color: #fafafa; color: #333333; font-family: Helvetica, Arial, 'Bitstream Vera Sans', Verdana, sans-serif; font-size: 13px; line-height: 21px;"&gt;1. Go to folder "\Street Fighter X Tekken\stream\CMN\battle\chara", right-click on the desired character folder, select copy, then right-click elsewhere in the directory and choose 'paste.' You should end up with a folder named '*** - copy.' Next, rename that folder to a non-conflicting 3-letter prefix that will represent your new character duplicate. In this case, 'KE2'. Then navigate into the new folder and rename all the files (just two files) to match your 3-letter prefix (that is, all of the KEN* files should be renamed to KE2*).&lt;/span&gt;&lt;br style="color: #333333; font-family: Helvetica, Arial, 'Bitstream Vera Sans', Verdana, sans-serif; font-size: 13px; line-height: 21px;" /&gt;&lt;br style="color: #333333; font-family: Helvetica, Arial, 'Bitstream Vera Sans', Verdana, sans-serif; font-size: 13px; line-height: 21px;" /&gt;&lt;span style="background-color: #fafafa; color: #333333; font-family: Helvetica, Arial, 'Bitstream Vera Sans', Verdana, sans-serif; font-size: 13px; line-height: 21px;"&gt;2. Go to folder "\Street Fighter X Tekken\resource\CMN\ui\battle\comment\cmt", copy the desired character file (in here, KEN.cmt) and rename it to 'KE2.cmt'. OPTIONAL: You may also move the file 'KE2.cmt' to folder "\Street Fighter X Tekken\patch\CMN\ui\battle\comment\cmt" for easier maintenance.&lt;/span&gt;&lt;br style="color: #333333; font-family: Helvetica, Arial, 'Bitstream Vera Sans', Verdana, sans-serif; font-size: 13px; line-height: 21px;" /&gt;&lt;br style="color: #333333; font-family: Helvetica, Arial, 'Bitstream Vera Sans', Verdana, sans-serif; font-size: 13px; line-height: 21px;" /&gt;&lt;span style="background-color: #fafafa; color: #333333; font-family: Helvetica, Arial, 'Bitstream Vera Sans', Verdana, sans-serif; font-size: 13px; line-height: 21px;"&gt;3. Go to folder "\Street Fighter X Tekken\resource\ENG\ui\battle\comment", copy the desired character file (in here, KEN.m4s) and rename it to 'KE2.m4s'. OPTIONAL: You may also move the file 'KE2.m4s' to folder "\Street Fighter X Tekken\patch\ENG\ui\battle\comment" for easier maintenance.&lt;/span&gt;&lt;br style="color: #333333; font-family: Helvetica, Arial, 'Bitstream Vera Sans', Verdana, sans-serif; font-size: 13px; line-height: 21px;" /&gt;&lt;br style="color: #333333; font-family: Helvetica, Arial, 'Bitstream Vera Sans', Verdana, sans-serif; font-size: 13px; line-height: 21px;" /&gt;&lt;span style="background-color: #fafafa; color: #333333; font-family: Helvetica, Arial, 'Bitstream Vera Sans', Verdana, sans-serif; font-size: 13px; line-height: 21px;"&gt;4.Go to folder "\Street Fighter X Tekken\resource\ENG\ui\battle\subtitle", copy the desired character file (in here, KEN.m4s) and rename it to 'KE2.m4s'. OPTIONAL: You may also move the file 'KE2.m4s' to folder "\Street Fighter X Tekken\patch\ENG\ui\battle\subtitle" for easier maintenance.&lt;/span&gt;&lt;br style="color: #333333; font-family: Helvetica, Arial, 'Bitstream Vera Sans', Verdana, sans-serif; font-size: 13px; line-height: 21px;" /&gt;&lt;br style="color: #333333; font-family: Helvetica, Arial, 'Bitstream Vera Sans', Verdana, sans-serif; font-size: 13px; line-height: 21px;" /&gt;&lt;big style="color: #333333; font-family: Helvetica, Arial, 'Bitstream Vera Sans', Verdana, sans-serif;"&gt;&lt;strong&gt;SOME ISSUE TO NOTICED:&lt;/strong&gt;&lt;/big&gt;&lt;br style="color: #333333; font-family: Helvetica, Arial, 'Bitstream Vera Sans', Verdana, sans-serif; font-size: 13px; line-height: 21px;" /&gt;&lt;span style="background-color: #fafafa; color: #333333; font-family: Helvetica, Arial, 'Bitstream Vera Sans', Verdana, sans-serif; font-size: 13px; line-height: 21px;"&gt;1. In any battle, when the duplicated character use the Cross Rush (ABC Launcher), he/she still has that zoom-in camera animation.&lt;/span&gt;&lt;br style="color: #333333; font-family: Helvetica, Arial, 'Bitstream Vera Sans', Verdana, sans-serif; font-size: 13px; line-height: 21px;" /&gt;&lt;span style="background-color: #fafafa; color: #333333; font-family: Helvetica, Arial, 'Bitstream Vera Sans', Verdana, sans-serif; font-size: 13px; line-height: 21px;"&gt;2. In battle with intro, the duplicated character has a weird subtitle. And in the winning screen, the duplicated character has a blank comment.&lt;/span&gt;&lt;br style="color: #333333; font-family: Helvetica, Arial, 'Bitstream Vera Sans', Verdana, sans-serif; font-size: 13px; line-height: 21px;" /&gt;&lt;span style="background-color: #fafafa; color: #333333; font-family: Helvetica, Arial, 'Bitstream Vera Sans', Verdana, sans-serif; font-size: 13px; line-height: 21px;"&gt;3. You can't view the quickcombo preview, the trial, and the command list of the duplicated character, otherwise it will fall back to title screen.&lt;/span&gt;&lt;br style="color: #333333; font-family: Helvetica, Arial, 'Bitstream Vera Sans', Verdana, sans-serif; font-size: 13px; line-height: 21px;" /&gt;&lt;span style="background-color: #fafafa; color: #333333; font-family: Helvetica, Arial, 'Bitstream Vera Sans', Verdana, sans-serif; font-size: 13px; line-height: 21px;"&gt;4. When you play the Arcade mode, make sure you pick the duplicated character as 2nd character (tag partner). The reason is if you pick the duplicated character as 1st character and when you defeat the final boss (either Akuma or Ogre), after the credit screen, it will fall back to title screen. --&amp;gt; (I haven't found the solution to this issue yet)&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://filthypants.blogspot.com/feeds/8665184563816390469/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6845625574553920830&amp;postID=8665184563816390469' title='21 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6845625574553920830/posts/default/8665184563816390469'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6845625574553920830/posts/default/8665184563816390469'/><link rel='alternate' type='text/html' href='http://filthypants.blogspot.com/2012/07/sfxt-how-to-duplicate-character.html' title='SFxT: How to Duplicate A Character - Proof of Concept'/><author><name>Hunter K.</name><uri>http://www.blogger.com/profile/18379090454291486194</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-OPapimQjRKY/UAMRuateAHI/AAAAAAAABPI/oA-eCfIaAV8/s72-c/1.jpg' height='72' width='72'/><thr:total>21</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6845625574553920830.post-4083788395423029768</id><published>2012-06-02T08:08:00.000-07:00</published><updated>2012-06-02T13:35:42.280-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mac'/><category scheme='http://www.blogger.com/atom/ns#' term='permission fix'/><category scheme='http://www.blogger.com/atom/ns#' term='Diablo 3'/><category scheme='http://www.blogger.com/atom/ns#' term='Diablo III'/><category scheme='http://www.blogger.com/atom/ns#' term='installer'/><title type='text'>Diablo 3 Mac Installation and Unsupported Video Fixes</title><content type='html'>I got my hands on an old iMac the other day and decided to install some games on it. So, I downloaded the Diablo 3 installer and tried to run it, but it just bounced in the dock for a while and then disappeared :(&lt;br /&gt;&lt;br /&gt;The first thing I tried was to right-click on the installer and select 'Show Package Contents.' Then, under 'Contents' &amp;gt; 'MacOS,' you'll find the Diablo III Setup executable. Double-click it and you should see a Terminal window pop up and quickly disappear. You may not be able to see what has caused the problem, but it should have reported a permissions error ('Permission denied').&lt;br /&gt;&lt;br /&gt;To fix this, open a Terminal window and navigate to the directory where you put your installer (for me it was Downloads; the easy way to get to it is to type '&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;cd &lt;/span&gt;' [that's the letter c, the letter d and a space] and then drop the desired folder onto the Terminal window and hit 'enter') and type (include the quotes here):&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;sudo chmod -R 777 "Diablo III Setup.app"&lt;/span&gt;&lt;/blockquote&gt;It will ask for your password and, once authenticated, it should fix your permissions issue.&lt;br /&gt;&lt;br /&gt;At this point, you can try double-clicking on the installer and you should be in business.&lt;br /&gt;&lt;br /&gt;If, however, it tells you that your video card is not supported (like me), you will have to do a little more work. No biggie.&lt;br /&gt;&lt;br /&gt;Open a terminal and type:&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;nano ~/Library/"Application Support"/Blizzard/"Diablo III"/D3Prefs.txt&lt;/span&gt;&lt;/blockquote&gt;You should see a bunch of options, followed by values, like this:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-UZcjfKKKKPk/T8p4rdyKvYI/AAAAAAAABOg/eA_FIwqB9Hs/s1600/d3prefs.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="248" src="http://2.bp.blogspot.com/-UZcjfKKKKPk/T8p4rdyKvYI/AAAAAAAABOg/eA_FIwqB9Hs/s320/d3prefs.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Scroll down until you see the option '&lt;span style="color: red;"&gt;DisableTrilinearFiltering&lt;/span&gt;' and change its value from '0' to '1,' then do the same thing for the option '&lt;span style="color: red;"&gt;HardwareClass&lt;/span&gt;.'&lt;br /&gt;&lt;br /&gt;It may not be required for everyone, but I also had to add an option, '&lt;span style="color: red;"&gt;DisplayModeWindowMode&lt;/span&gt;,' with a value of "1."&lt;br /&gt;&lt;br /&gt;Now, save and close by hitting Ctrl+x and then 'enter.'&lt;br /&gt;&lt;br /&gt;You should be good to go :)&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-hHQCjRaZuLI/T8p4qvuLMBI/AAAAAAAABOY/LjNETx705Ww/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://3.bp.blogspot.com/-hHQCjRaZuLI/T8p4qvuLMBI/AAAAAAAABOY/LjNETx705Ww/s320/1.png" style="cursor: move;" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;And, I assure you, performance *will not* be a problem (this is meant as a joke; of course performance will be a problem; it hardly runs, ffs).</content><link rel='replies' type='application/atom+xml' href='http://filthypants.blogspot.com/feeds/4083788395423029768/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6845625574553920830&amp;postID=4083788395423029768' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6845625574553920830/posts/default/4083788395423029768'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6845625574553920830/posts/default/4083788395423029768'/><link rel='alternate' type='text/html' href='http://filthypants.blogspot.com/2012/06/diablo-3-mac-installation-fix.html' title='Diablo 3 Mac Installation and Unsupported Video Fixes'/><author><name>Hunter K.</name><uri>http://www.blogger.com/profile/18379090454291486194</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-UZcjfKKKKPk/T8p4rdyKvYI/AAAAAAAABOg/eA_FIwqB9Hs/s72-c/d3prefs.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6845625574553920830.post-1417559902013454113</id><published>2012-05-11T09:01:00.002-07:00</published><updated>2012-08-26T15:15:23.746-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='beginner&apos;s guide'/><category scheme='http://www.blogger.com/atom/ns#' term='SFxT'/><category scheme='http://www.blogger.com/atom/ns#' term='mod'/><title type='text'>Beginner's Guide to Custom Colors in SFxT</title><content type='html'>&lt;br /&gt;&lt;span style="color: red;"&gt;Update&lt;/span&gt;: The steps from this tutorial have been automated. You can now do all of it easily from sloth86's EMMEdit tool.&lt;br /&gt;&lt;br /&gt;Street Fighter x Tekken handles colors in a completely different way from Street Fighter 4 and its derivatives as a result of the color customization feature. Instead of just pulling colors and textures directly from the texture image, the textures look like this:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-Y8Po1jGJBZ0/T601rIPPMNI/AAAAAAAABNs/-lBDbFtz29o/s1600/5.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://4.bp.blogspot.com/-Y8Po1jGJBZ0/T601rIPPMNI/AAAAAAAABNs/-lBDbFtz29o/s200/5.png" width="190" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;and the game calculates the appropriate color based on a series of numbers, which represent a color mix from the texture image's color channels. These numbers are stored in the *.obj.emm files--specifically the 'MatCol' attributes--alongside the various other object materials and material attributes.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;There are two main ways to edit *.obj.emm files, manually via hex or using NanjouJ's MatEdit tool, which is a little more user-friendly than fiddling with hex codes. In this tutorial, we'll be using MatEdit to copy colors from another color file, rather than calculating the color from scratch. If you would like to calculate an entirely new color from scratch, &lt;a href="http://shoryuken.com/forum/index.php?threads/sfxt-pc-modding-thread-no-piracy-dlc-circumvention-discussion.159824/page-8#post-6943832"&gt;this post from yajirobe does a good job of explaining it&lt;/a&gt;.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;So, first thing, we need to make backups of any of the files we plan to mess with. Once you've done that, go &lt;a href="http://aemods.pbworks.com/w/page/42053948/aetools#NanjouJsMaterialsTool"&gt;download MatEdit from the AE wiki's 'tools' page&lt;/a&gt;&amp;nbsp;and identify which files you want to work with. I'm going to be copying a color from one of Ryu's *.obj.emm files into one of Poison's.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;div&gt;Now, create a new folder (on your desktop or wherever) and copy matedit.exe and both Ryu and Poison's *.obj.emm files into it. Then, hold ctrl+shift on your keyboard and right-click somewhere inside that folder, and choose 'Open command window here':&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-tI16ybgohxs/T601oqANgOI/AAAAAAAABNM/C7chiaL7lR8/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="224" src="http://2.bp.blogspot.com/-tI16ybgohxs/T601oqANgOI/AAAAAAAABNM/C7chiaL7lR8/s320/1.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;This will open a command line window, but don't freak out. I'm going to tell you exactly what to type in.&lt;br /&gt;&lt;br /&gt;First thing, we want to export the materials from both of our files, using the syntax "matedit.exe export [target obj.emm file] [newfile.txt]." So, in my case, I'm going to type (replace PSN/RYU and poison/ryu as appropriate for your files):&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&lt;span style="color: lime; font-family: 'Courier New', Courier, monospace;"&gt;&lt;b&gt;matedit.exe export PSN_01_01.obj.emm poison.txt&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;and&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&lt;span style="color: lime; font-family: 'Courier New', Courier, monospace;"&gt;&lt;b&gt;matedit.exe export RYU_01_01.obj.emm ryu.txt&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;If done correctly, you should have two new files in your directory, in my case, poison.txt and ryu.txt. At this point, we're done with the command line for now, but don't close it yet because we're going to need it again later.&lt;br /&gt;&lt;br /&gt;For now, open both files in the text editor of your choice. Notepad works, but I prefer &lt;a href="http://notepad-plus-plus.org/"&gt;Notepad++&lt;/a&gt; (it's free and awesome; go get it).&lt;br /&gt;&lt;br /&gt;Open both of the txt files in your text editor. You'll see a series of sections which correspond to the various objects that make up the character's model. In each section, there are a bunch of variables and values that tell the game how to render each object. The ones we're worried about today are the MatCol variables:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-n-Eg4aWnaeg/T601pvKfliI/AAAAAAAABNU/lyRGS9R-uVI/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-n-Eg4aWnaeg/T601pvKfliI/AAAAAAAABNU/lyRGS9R-uVI/s320/2.png" width="201" /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;You'll notice that I highlighted just the *R, *G and *B MatCols, which correspond to the red, green and blue color channels, respectively, and not the *A MatCol, which corresponds to the Alpha channel. You shouldn't mess with the alpha value if you're just trying to change colors. ;)&lt;br /&gt;&lt;br /&gt;So, lets say we want to take the color of Ryu's pants--i.e., white--and copy it over to Poison's hair. To do this, we would hop over to our ryu.txt file and search for 'pants.' Then, scroll down through his 'pants' section until we find the MatCol subsection.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-uRxtmDwTCIk/T601p02v2EI/AAAAAAAABNc/hsqLoG03sRQ/s1600/3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-uRxtmDwTCIk/T601p02v2EI/AAAAAAAABNc/hsqLoG03sRQ/s320/3.png" width="201" /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;In this case, I only have a single color, MatCol0 to choose from, but some models will have multiple color groups, such as MatCol1 and MatCol2. These MatCols represent the color groups that can be customized in-game, so make sure you're choosing the correct one.&lt;br /&gt;&lt;br /&gt;Copy those values and then switch over the poison.txt file and search for 'hair.' Scroll down to the MatCol section and replace the values there with your new, copied values:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-KuZUH67RhMw/T601qieYzBI/AAAAAAAABNk/O04zke7gLlU/s1600/4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="253" src="http://1.bp.blogspot.com/-KuZUH67RhMw/T601qieYzBI/AAAAAAAABNk/O04zke7gLlU/s320/4.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;Great, we're almost done.&lt;br /&gt;&lt;br /&gt;The last step is to import the modified text files back into the target *.obj.emm file. So, back to your command line window (if you didn't listen earlier and closed it, just open a new one) and type:&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&lt;span style="color: lime; font-family: 'Courier New', Courier, monospace;"&gt;&lt;b&gt;matedit.exe import poison.txt PSN_01_01.obj.emm&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;Now you're ready to test it out. Copy the PSN_01_01.obj.emm file into your [install directory]\resource\CMN\battle\chara\PSN folder, overwriting the one that was there (you made a backup, right??) and go check it out.&lt;br /&gt;&lt;br /&gt;If you had calculated a new color from scratch using yajirobe's instructions instead of copying the color from some other costume, you would go through the exact same steps, only using your calculated color numbers instead of the ones from Ryu's pants.&lt;br /&gt;&lt;br /&gt;That's it. Have fun, share your work and always make backups.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://filthypants.blogspot.com/feeds/1417559902013454113/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6845625574553920830&amp;postID=1417559902013454113' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6845625574553920830/posts/default/1417559902013454113'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6845625574553920830/posts/default/1417559902013454113'/><link rel='alternate' type='text/html' href='http://filthypants.blogspot.com/2012/05/beginners-guide-to-custom-colors-in.html' title='Beginner&apos;s Guide to Custom Colors in SFxT'/><author><name>Hunter K.</name><uri>http://www.blogger.com/profile/18379090454291486194</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-Y8Po1jGJBZ0/T601rIPPMNI/AAAAAAAABNs/-lBDbFtz29o/s72-c/5.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6845625574553920830.post-7883163558003559638</id><published>2012-03-12T18:49:00.000-07:00</published><updated>2012-03-14T16:33:03.247-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='custom'/><category scheme='http://www.blogger.com/atom/ns#' term='challenge'/><category scheme='http://www.blogger.com/atom/ns#' term='how to'/><category scheme='http://www.blogger.com/atom/ns#' term='sf4'/><category scheme='http://www.blogger.com/atom/ns#' term='mod'/><category scheme='http://www.blogger.com/atom/ns#' term='ssf4'/><title type='text'>Beginner's Guide to Custom Challenges using Waterine's ClgEditor</title><content type='html'>&lt;br /&gt;This tutorial will cover the very basics of using Waterine's ClgEditor tool to create your own combo challenges for SSF4AE. For this, we will need the &lt;a href="http://code.google.com/p/ssf4ae-tools/downloads/list"&gt;ClgEditor&lt;/a&gt; and &lt;a href="http://www.sf4remix.com/wp-content/uploads/2012/02/ono_02132012.zip"&gt;Dantarion et al's Ono! Editor&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;When you first run the ClgEditor, click the button to 'Open...' and browse to your installation directory (usually C:\Program Files (x86)\Steam\steamapps\common\super street fighter iv - arcade edition), then go to ...\resource\battle\chara and go into the folder for the character whose Trial Mode you wish to modify. It should filter the folder contents such that the only file displayed is our desired CLG file, in my case, CMY.clg.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-ysDh8Y87tDo/T16mgONxOtI/AAAAAAAABME/Ndg2_nNnyc4/s1600/1+basic+window.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="202" src="http://4.bp.blogspot.com/-ysDh8Y87tDo/T16mgONxOtI/AAAAAAAABME/Ndg2_nNnyc4/s320/1+basic+window.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;Once the file is loaded, you can see the list of challenge levels on the left. At the top of the window you should see a pulldown menu labeled 'Ultra Selection,' which lets you select which Ultra combo should be loaded for the challenge, and another pulldown labeled 'Target State,' which determines how the dummy (Dan) should act (for use with situational combos, like ones that must start with a counterhit or only work on jumping opponents).&lt;br /&gt;&lt;br /&gt;The area underneath those pulldowns is where most of the fun happens.&lt;br /&gt;&lt;br /&gt;In the 'Scripts' section, the first button from the left (looks like a sun) creates a new command, either an 'attack' or a 'script,' which you can choose between using the 'Criteria type' pulldown menu to the right. Attacks are just your normal actions while scripts are movement actions, like dashes and FADCs.&lt;br /&gt;&lt;br /&gt;The 'Criteria indices' field tells the game which moves it should accept as a successful command. If any strength of a move will do, as is the case with many of the early challenges, you must include each index that fulfills the criteria. For a regular special move (light, medium, hard and EX), you would need entries for all four strengths.&lt;br /&gt;&lt;br /&gt;Back in the scripts window, each command represents one discreet portion of a challenge, and you can show up to 8 on the screen. You can go beyond 8 in the list, but unfortunately the display doesn't scroll in-game, so the player won't be able to see the rest.&lt;br /&gt;&lt;br /&gt;To the right, you can choose what on-screen instructions and input help to display from the respective pulldown menus.&lt;br /&gt;&lt;br /&gt;So, lets say I want to change Cammy's first challenge from a simple Spiral Arrow to a Cannon Spike &amp;gt; FADC &amp;gt; EX Cannon Spike.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Step 1.&lt;/span&gt;&lt;/b&gt; Select the first trial from the levels list and hit the 'X' button under Scripts to delete the existing command. Then, click the sun button to create a new command. Our first command--Cannon Spike--is an attack, so choose that from the Criteria type pulldown.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Step 2.&lt;/span&gt;&lt;/b&gt; Next, we need to fill in the Criteria indices field with the indices for the move (I cheated and stole them from Challenge #3), in this case, 100, 101, 102, 103, 104, 105.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Step 3.&lt;/span&gt;&lt;/b&gt; Under 'On-screen command text's last pulldown menu, we want to select Cannon Spike, and under 'Help menu command text's last pulldown menu, we want to select Cannon Spike Input.&lt;br /&gt;&lt;br /&gt;Great! There's our first command. Now, we need to make another.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Step 4.&lt;/span&gt;&lt;/b&gt; Click on the sun button again, but this time we're going to use a movement script, so select 'Script' from the Criteria type pulldown.&lt;br /&gt;&lt;br /&gt;As in step 2, fill in the Criteria indices field with the appropriate inputs, in this case 325 (I stole that from a later challenge, as well; are you seeing a pattern here?).&lt;br /&gt;&lt;br /&gt;Likewise, we'll fill in the On-screen command text and Help menu command text, which are a little weird for FADCs: in the first pulldown under On-screen commant text, choose 'EX,' and under the third pulldown, choose 'FocusCancel.' Then, under Help menu's first pulldown, choose 'EX' again, and under the third, choose 'MP+MK.'&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Step 5.&lt;/span&gt;&lt;/b&gt; Alright, moving right along, click the sun button one more time and choose the 'Attack' criteria. Up until now, all of the moves we've wanted to use could be easily pilfered from other challenges. However, no challenge requires an EX Cannon Spike specifically, so we'll have to figure this one out on our own. To do it, open up the Ono! Editor and open Cammy's BCM file. You should see a window that looks something like this:&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-YkWC3h46mlk/T16mgeAtkUI/AAAAAAAABMM/ZqEhRht1GyQ/s1600/2+-+ono.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="200" src="http://1.bp.blogspot.com/-YkWC3h46mlk/T16mgeAtkUI/AAAAAAAABMM/ZqEhRht1GyQ/s200/2+-+ono.png" width="105" /&gt;&lt;/a&gt;&lt;br /&gt;Click on the bottom button, labeled "Hitbox Table." It should open a new window that looks something like this:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href="http://1.bp.blogspot.com/-vDg2fjn2IN4/T16mgh9JCfI/AAAAAAAABMU/9vWizv0rFdM/s1600/3+hitbox+data.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="169" src="http://1.bp.blogspot.com/-vDg2fjn2IN4/T16mgh9JCfI/AAAAAAAABMU/9vWizv0rFdM/s320/3+hitbox+data.png" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;There's a lot of really great information available in this window, but we really only need the numbers on the far left in front of the move names. So, scroll down until you find your desired move, in my case EX Cannon Spike, which is listed under #106 and #107.&amp;nbsp;If the criteria type is an attack, you use the hitbox data number, if it's a script, you should use the script number (you can expand the header info in Ono! to see it).&lt;br /&gt;&lt;br /&gt;Now, enter those numbers into the Criteria indices field, separated by commas and spaces as necessary.&lt;br /&gt;&lt;br /&gt;Fill in the appropriate on-screen command and help menu text, and you should be all set. Click the save button and lets go check it out by copying it into our ...\resource\battle\chara\CMY folder (don't forget to make a backup!!).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-aVDVwtaZUHY/T16mhapiptI/AAAAAAAABMc/Txbu-NhD9Vw/s1600/4+test.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="303" src="http://1.bp.blogspot.com/-aVDVwtaZUHY/T16mhapiptI/AAAAAAAABMc/Txbu-NhD9Vw/s320/4+test.png" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now, as a note, you can make your combos against any version of the characters' movesets you like (Super is the default, of course, but you can use movesets from AE, 2012 or even custom movesets created in Ono!), you just have to copy the appropriate BAC/BCM files into the ...\resource\battle\chara\*** folder to overwrite the ones that are already there.&lt;br /&gt;&lt;br /&gt;If you create something cool, be sure to share your work with the community, and always always always make backups!</content><link rel='replies' type='application/atom+xml' href='http://filthypants.blogspot.com/feeds/7883163558003559638/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6845625574553920830&amp;postID=7883163558003559638' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6845625574553920830/posts/default/7883163558003559638'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6845625574553920830/posts/default/7883163558003559638'/><link rel='alternate' type='text/html' href='http://filthypants.blogspot.com/2012/03/beginners-guide-to-custom-challenges.html' title='Beginner&apos;s Guide to Custom Challenges using Waterine&apos;s ClgEditor'/><author><name>Hunter K.</name><uri>http://www.blogger.com/profile/18379090454291486194</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-ysDh8Y87tDo/T16mgONxOtI/AAAAAAAABME/Ndg2_nNnyc4/s72-c/1+basic+window.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6845625574553920830.post-2958935345971671124</id><published>2012-03-03T11:22:00.000-08:00</published><updated>2013-04-19T06:20:36.244-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='interpolation'/><category scheme='http://www.blogger.com/atom/ns#' term='HQ2x'/><category scheme='http://www.blogger.com/atom/ns#' term='filter'/><category scheme='http://www.blogger.com/atom/ns#' term='emulator'/><category scheme='http://www.blogger.com/atom/ns#' term='algorithm'/><category scheme='http://www.blogger.com/atom/ns#' term='xBR'/><category scheme='http://www.blogger.com/atom/ns#' term='pixel shader'/><title type='text'>xBR vs HQx Interpolation Filter Comparison</title><content type='html'>This post compares the popular HQx interpolation algorithm with the newer xBR, which has been covered in some of my &lt;a href="http://filthypants.blogspot.com/2011/12/cg-pixel-shaders-for-ssnes.html"&gt;other&lt;/a&gt;&amp;nbsp;&lt;a href="http://filthypants.blogspot.com/2011/05/more-emulator-pixel-shaders-crt-updated.html"&gt;posts&lt;/a&gt;. If you just want to download the filters, you can get them from the link at the bottom of the post.&lt;br /&gt;&lt;br /&gt;Since Maxim Stepin created the HQx interpolation algorithm more than a decade ago, it has been the favored real-time interpolation filter for the emulation scene. The way it works is it looks at each pixel and then compares its color to that of the 8 surrounding adjacent pixels. If it finds a match, the filter then compares the resulting pattern with a predefined lookup table to guess what the original pattern was trying to represent.&lt;br /&gt;&lt;br /&gt;For example, if we take a pattern like this:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-oZVeRdCqZC4/T1JMb45H6qI/AAAAAAAABJ0/AZdRnOZF0fk/s1600/orig.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-oZVeRdCqZC4/T1JMb45H6qI/AAAAAAAABJ0/AZdRnOZF0fk/s1600/orig.png" /&gt;&lt;/a&gt;&lt;a href="http://1.bp.blogspot.com/-dl0En0_cXyg/T1JMbRHeg1I/AAAAAAAABJk/jXKRtmpC8TA/s1600/hq2x.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;and scale it up via nearest neighbor--that is, a straight upscale with no interpolation--you end up with this checkerboard pattern:&lt;/div&gt;&lt;a href="http://4.bp.blogspot.com/-INxnumZe8mo/T1JMblvrfXI/AAAAAAAABJs/8Zez7Yj1E0c/s1600/nearestneighbor.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-INxnumZe8mo/T1JMblvrfXI/AAAAAAAABJs/8Zez7Yj1E0c/s1600/nearestneighbor.png" /&gt;&lt;/a&gt;&lt;br /&gt;But, if you use HQ2x, you end up with this:&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-dl0En0_cXyg/T1JMbRHeg1I/AAAAAAAABJk/jXKRtmpC8TA/s1600/hq2x.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-dl0En0_cXyg/T1JMbRHeg1I/AAAAAAAABJk/jXKRtmpC8TA/s1600/hq2x.png" /&gt;&lt;/a&gt;&lt;br /&gt;The algorithm guesses that the original pattern was trying to represent a diagonal line rather than a checkerboard pattern, so it fills in the gaps to compensate.&lt;br /&gt;&lt;br /&gt;Recently, a Brazilian programmer by the name of Hyllian (aka Jararaca) developed a new algorithm that actually improves on HQx, known as xBR (stands for "a filter that scales By Rules").&lt;br /&gt;&lt;br /&gt;xBR works much the same way as HQx insofar as it is based on pattern recognition, and it would upscale the above pattern with the same result. However, it goes further than HQx by using a 2-stage set of interpolation rules, which better handle more complex patterns such as antialiased lines and curves.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://board.byuu.org/viewtopic.php?f=10&amp;amp;t=2248"&gt;You can read more about Hyllian's algorithm here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Lets take a look at how they compare on a real-world example (HQ2x on the left, 2xBR on the right; click to embiggen):&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-YztBuZJOsGI/T1Jg4DK0N7I/AAAAAAAABJ8/7HkM-Zy1N7M/s1600/2xBR.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="175" src="http://4.bp.blogspot.com/-YztBuZJOsGI/T1Jg4DK0N7I/AAAAAAAABJ8/7HkM-Zy1N7M/s200/2xBR.png" width="200" /&gt;&lt;/a&gt;&lt;a href="http://4.bp.blogspot.com/-vjKJ-LEkWRc/T1Jg5nEho1I/AAAAAAAABKM/md8iFtRqqD0/s1600/HQ2x-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="175" src="http://4.bp.blogspot.com/-vjKJ-LEkWRc/T1Jg5nEho1I/AAAAAAAABKM/md8iFtRqqD0/s200/HQ2x-1.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-fXxb2kgGVw0/T1Jg4llWFVI/AAAAAAAABKE/2IavHRlL6sU/s1600/2xBRbig.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="199" src="http://3.bp.blogspot.com/-fXxb2kgGVw0/T1Jg4llWFVI/AAAAAAAABKE/2IavHRlL6sU/s200/2xBRbig.png" width="200" /&gt;&lt;/a&gt;&lt;a href="http://4.bp.blogspot.com/-aS21G3Tq_KI/T1Jg66fjYaI/AAAAAAAABKQ/pRiCA5-uVCg/s1600/HQ2xbig.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="198" src="http://4.bp.blogspot.com/-aS21G3Tq_KI/T1Jg66fjYaI/AAAAAAAABKQ/pRiCA5-uVCg/s200/HQ2xbig.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;As you can see, 2xBR does a much better job on smoothing curves without getting chunky (see Yoshi's nose and the dragon coin). It also does a better job on the 'eyes' of the block, which is represented as a diagonal line with 2xBR compared with the series-of-squares look with HQ2x.&lt;br /&gt;&lt;br /&gt;Here's another comparison, using Earthworm Jim's title screen:&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-1diR8weAVig/T1K6TEf9EjI/AAAAAAAABLc/f-qyE6_2Vq8/s1600/HQ2xsmall.png" imageanchor="1" style="clear: left; display: inline !important; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="175" src="http://4.bp.blogspot.com/-1diR8weAVig/T1K6TEf9EjI/AAAAAAAABLc/f-qyE6_2Vq8/s200/HQ2xsmall.png" width="200" /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://4.bp.blogspot.com/-tv4HvofQPnE/T1K6WXH8KCI/AAAAAAAABLs/-WbjOWeO9T4/s1600/xBRsmall.png" imageanchor="1" style="clear: left; display: inline !important; margin-bottom: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="174" src="http://4.bp.blogspot.com/-tv4HvofQPnE/T1K6WXH8KCI/AAAAAAAABLs/-WbjOWeO9T4/s200/xBRsmall.png" width="200" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-toXiBnrfEaY/T1K6R6U39OI/AAAAAAAABLU/w0snHeUMHL4/s1600/HQ2big.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://4.bp.blogspot.com/-toXiBnrfEaY/T1K6R6U39OI/AAAAAAAABLU/w0snHeUMHL4/s200/HQ2big.png" width="200" /&gt;&lt;/a&gt;&lt;a href="http://3.bp.blogspot.com/-LGqw3s_ZejE/T1K6UVXl4nI/AAAAAAAABLk/TCYs5b3zPh8/s1600/xBRbig.png" imageanchor="1" style="clear: right; display: inline !important; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="200" src="http://3.bp.blogspot.com/-LGqw3s_ZejE/T1K6UVXl4nI/AAAAAAAABLk/TCYs5b3zPh8/s200/xBRbig.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span style="text-align: -webkit-auto;"&gt;And here's a third comparison, using the title screen to Earthworm Jim 2:&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-GAOqQZSa0Cc/T1KtVlBXc8I/AAAAAAAABK8/6E7DI5pGSU8/s1600/HQ2x-2-small.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="175" src="http://1.bp.blogspot.com/-GAOqQZSa0Cc/T1KtVlBXc8I/AAAAAAAABK8/6E7DI5pGSU8/s200/HQ2x-2-small.png" width="200" /&gt;&lt;/a&gt;&lt;a href="http://3.bp.blogspot.com/-hqn_CDq5-Lk/T1KtX1UtxoI/AAAAAAAABLM/ITm_X7QYXbE/s1600/xBR-2-small.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="175" src="http://3.bp.blogspot.com/-hqn_CDq5-Lk/T1KtX1UtxoI/AAAAAAAABLM/ITm_X7QYXbE/s200/xBR-2-small.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-v1boPCCMuFg/T1KtUZofQPI/AAAAAAAABK0/_Bh9ySIZN0U/s1600/HQ2x-2-big.png" imageanchor="1" style="clear: left; display: inline !important; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://2.bp.blogspot.com/-v1boPCCMuFg/T1KtUZofQPI/AAAAAAAABK0/_Bh9ySIZN0U/s200/HQ2x-2-big.png" width="200" /&gt;&lt;/a&gt;&lt;a href="http://1.bp.blogspot.com/-HJQlQ8kATME/T1KtWjnWI9I/AAAAAAAABLE/JouM7UVpWak/s1600/xBR-2-big.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://1.bp.blogspot.com/-HJQlQ8kATME/T1KtWjnWI9I/AAAAAAAABLE/JouM7UVpWak/s200/xBR-2-big.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;HQ2x actually does a slightly better job at getting a smooth gradient around the highlight in Jim's eye, but the rest of the image is a mess. xBR has smoother, straighter lines at every color transition.&lt;br /&gt;&lt;br /&gt;Additionally, the xBR algorithm scales to higher scale factors much more easily than the HQx algorithm, making 3-, 4-, 5- and higher versions faster and more effective.&lt;br /&gt;&lt;br /&gt;At very high scale factors (5 and higher), the xBR algorithm can obliterate some small details, such as pupils in eyes, dots, and so on, so Hyllian introduced some additional calculation to compensate (5xBR-v3.5a on the left [uncompensated] vs 5xBR-v3.5b on the right [compensated]):&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-yD9tWVGyW9I/T1JkuN9_GxI/AAAAAAAABKc/QPOlQ7vV0yA/s1600/5xBR-v3.5a.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://2.bp.blogspot.com/-yD9tWVGyW9I/T1JkuN9_GxI/AAAAAAAABKc/QPOlQ7vV0yA/s200/5xBR-v3.5a.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="http://1.bp.blogspot.com/-l0jZY9pswRw/T1Jkub6pt1I/AAAAAAAABKk/Uv9iBwqBF2I/s1600/5xBR-v3.5b.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="200" src="http://1.bp.blogspot.com/-l0jZY9pswRw/T1Jkub6pt1I/AAAAAAAABKk/Uv9iBwqBF2I/s200/5xBR-v3.5b.png" width="200" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Of course, this compensation comes with its own drawbacks and false-positives, so which version works better varies on a game-by-game basis.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: red;"&gt;UPDATE&lt;/span&gt;&lt;/b&gt;: Hyllian has made a third variant that is even more cautious. Here's an animated GIF comparing the way each variant handles text:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://i41.tinypic.com/2uqob60.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="180" src="http://i41.tinypic.com/2uqob60.gif" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Another interesting aspect of this algorithm is that it works very effectively on images already upscaled with xBR, so you can easily get absurdly large images (scaled 1x, 3x, 9x and 27x) with just a few iterations:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-V56_DGAQv7Y/T1JopDbYRUI/AAAAAAAABKs/mvFp-d_pSCE/s1600/exponential.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="127" src="http://4.bp.blogspot.com/-V56_DGAQv7Y/T1JopDbYRUI/AAAAAAAABKs/mvFp-d_pSCE/s400/exponential.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;This puts it in direct and favorable competition with &lt;a href="http://research.microsoft.com/en-us/um/people/kopf/pixelart/"&gt;this vectorization method&lt;/a&gt; that recently made the rounds. xBR manages to maintain detail a bit better than the vectorizer, and it can actually operate in real-time, unlike the vectorizer.&lt;br /&gt;&lt;br /&gt;You can download these shaders from &lt;a href="http://www.mediafire.com/?78p842uko34ce"&gt;my Mediafire repo&lt;/a&gt; (most are available in either XML/GLSL or Cg format, both of which are compatible with SSNES). UPDATE: &lt;a href="http://www.mediafire.com/?38icbi6yq2vi8bv"&gt;KrossX ported 2xBR-v3.5a&lt;/a&gt; to ePSXe format and &lt;a href="http://cdn.anonfiles.com/1331579241123.zip"&gt;SimoneT ported 5xBR-v3.5a&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: red;"&gt;UPDATE&lt;/span&gt;&lt;/b&gt;: &lt;a href="http://cdn.anonfiles.com/1332029038263.zip"&gt;New Cg version of 5x variant. Runs approx. 25% faster&lt;/a&gt;. :)&lt;br /&gt;&lt;b&gt;&lt;span style="color: red;"&gt;UPDATE&lt;/span&gt;&lt;/b&gt;: &lt;a href="http://www.sendspace.com/file/5delpx"&gt;new XML versions of 5xBR-v3.7&lt;/a&gt;. This package includes 3 variants (a, b and c), as well as the A-variant+scanlines.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: red;"&gt;UPDATE&lt;/span&gt;&lt;/b&gt;: Hyllian has been working on a new version that analyzes an image frame by frame and dynamically decides whether to apply xBR smoothing or Reverse-Anti-aliasing to produce the best picture. It handles text better than any filter/shader I've encountered, and it also excels at digitized, prerendered images and backgrounds. Here's a shot of it with Final Fantasy VI on GBA:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-jWOzsDwKgx0/UJvrgw5EScI/AAAAAAAABZs/P_3vMDvKhRw/s1600/hybridxbr.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="222" src="http://1.bp.blogspot.com/-jWOzsDwKgx0/UJvrgw5EScI/AAAAAAAABZs/P_3vMDvKhRw/s320/hybridxbr.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;You can download this shader &lt;a href="http://www.mediafire.com/download.php?5kbxm37kya6hb65"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: red;"&gt;UPDATE (4/19/2013)&lt;/span&gt;&lt;/b&gt;: Another great update from Hyllian, this time adding 3 levels of analysis. This version runs a bit slower in my experience (unsurprisingly), but it now handles jagged edges that earlier versions simply couldn't detect, due to their 2-level analysis pattern. Compare this shot with the ones at the top of the post:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-dwFAmdhLVXQ/UXFDvf6_geI/AAAAAAAABnc/O0Gh594FHDs/s1600/RetroArch-0419-081043.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="280" src="http://1.bp.blogspot.com/-dwFAmdhLVXQ/UXFDvf6_geI/AAAAAAAABnc/O0Gh594FHDs/s320/RetroArch-0419-081043.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Notice that inclined bit of ground under the dragon/yoshi coin. This new version will also really help with Mega Man X games, which tended to have a lot of these sorts of gently sloping planes. &lt;a href="https://github.com/libretro/common-shaders/blob/master/xBR/5xBR-v4.0-NoBlend.cg"&gt;You can download a Cg shader of this new version here&lt;/a&gt;, or a &lt;a href="https://anonfiles.com/file/0a82d42049cfcd053b294fe13dba25e6"&gt;3x scale Kega Fusion plugin here&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://filthypants.blogspot.com/feeds/2958935345971671124/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6845625574553920830&amp;postID=2958935345971671124' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6845625574553920830/posts/default/2958935345971671124'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6845625574553920830/posts/default/2958935345971671124'/><link rel='alternate' type='text/html' href='http://filthypants.blogspot.com/2012/03/xbr-vs-hqx-interpolation-filter.html' title='xBR vs HQx Interpolation Filter Comparison'/><author><name>Hunter K.</name><uri>http://www.blogger.com/profile/18379090454291486194</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-oZVeRdCqZC4/T1JMb45H6qI/AAAAAAAABJ0/AZdRnOZF0fk/s72-c/orig.png' height='72' width='72'/><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6845625574553920830.post-2282227882652727360</id><published>2012-01-07T10:40:00.000-08:00</published><updated>2012-01-07T10:41:12.312-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nano'/><category scheme='http://www.blogger.com/atom/ns#' term='replacement'/><category scheme='http://www.blogger.com/atom/ns#' term='ipod'/><category scheme='http://www.blogger.com/atom/ns#' term='recall'/><title type='text'>Apple iPod Nano 1G Recall</title><content type='html'>Due to a potential for exploding batteries, &lt;a href="http://www.apple.com/support/ipodnano_replacement/"&gt;Apple recently instituted a recall on all 1G iPod Nanos&lt;/a&gt;, of which I had two (one with 2GB capacity and one with 4GB). I sent them off and, after a pretty long turnaround time (nearly two months altogether), I've received my first replacement: a brand new 6th generation touchscreen iPod Nano with 8GB capacity :D&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-ROD4QnBRBUo/TwiRi5WGIiI/AAAAAAAABJM/Xu4miaGw5iE/s1600/nano+replacement.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="183" src="http://2.bp.blogspot.com/-ROD4QnBRBUo/TwiRi5WGIiI/AAAAAAAABJM/Xu4miaGw5iE/s200/nano+replacement.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;If you happen to have one or more of the old models, I recommend you take advantage.</content><link rel='replies' type='application/atom+xml' href='http://filthypants.blogspot.com/feeds/2282227882652727360/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6845625574553920830&amp;postID=2282227882652727360' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6845625574553920830/posts/default/2282227882652727360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6845625574553920830/posts/default/2282227882652727360'/><link rel='alternate' type='text/html' href='http://filthypants.blogspot.com/2012/01/apple-ipod-nano-1g-recall.html' title='Apple iPod Nano 1G Recall'/><author><name>Hunter K.</name><uri>http://www.blogger.com/profile/18379090454291486194</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-ROD4QnBRBUo/TwiRi5WGIiI/AAAAAAAABJM/Xu4miaGw5iE/s72-c/nano+replacement.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6845625574553920830.post-3115787497060208738</id><published>2011-12-23T07:54:00.000-08:00</published><updated>2011-12-23T08:01:05.484-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='region-locked'/><category scheme='http://www.blogger.com/atom/ns#' term='japanese'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>How to Download Region-Locked Japanese Games from Android Market</title><content type='html'>&lt;span style="font-size: x-small;"&gt;The content of this tutorial is pulled from &lt;a href="http://board.byuu.org/viewtopic.php?p=51314#p51314"&gt;this post on byuu's forum&lt;/a&gt;. I am copying it here for redundancy and search engine indexing. The copyright belongs to D--.&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;I've finally found a way to pull region and phone model locked Japanese games from the Android market, such as &lt;a href="https://market.android.com/details?id=jp.co.chunsoft.ShirenRainbow&amp;amp;rdid=jp.co.chunsoft.ShirenRainbow&amp;amp;rdot=1"&gt;the new Shiren game by Chunsoft&lt;/a&gt;. I'm posting the instructions here so no other poor fucker ever has to go through figuring this out.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Basically speaking, these games are locked by both SIM region and firmware information. Companies like NTT DoCoMo offer a select group of handsets with their service, and these handsets have firmware that has been heavily hacked on the inside to brand it as such. In order to get such a locked game, whether free or for sale, onto your phone, you will need to make Android Market think you are running an NTT branded handset.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To do this, you will need the following:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;A rooted Android phone&lt;/li&gt;&lt;li&gt;RootExplorer&lt;/li&gt;&lt;li&gt;Superuser&lt;/li&gt;&lt;li&gt;Market Access - this app is ad free and can run at boot&lt;/li&gt;&lt;li&gt;A barcode reader that can handle QR codes&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="color: #cc0000;"&gt;1.&lt;/span&gt;  Run RootExplorer and navigate to /system. Click the button to remount as r+w.&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;span style="color: #cc0000;"&gt;2.&lt;/span&gt;  Long press on build.prop and select Copy. Paste it into the same folder or another folder to make a backup. You DO NOT want to lose this.&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;span style="color: #cc0000;"&gt;3.&lt;/span&gt;  Long press on build.prop and select Edit in Text Editor.&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;span style="color: #cc0000;"&gt;4.&lt;/span&gt;  Find and modify the following values (jacked from an NTT DoCoMo SHARP SH12C). Be aware they may not be grouped logically, so search the whole file if need bed. If a value doesn't exist, you will need to create it: &lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&lt;span style="color: #93c47d;"&gt;ro.build.id=S7140&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #93c47d;"&gt;ro.build.display.id=01.01.02&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #93c47d;"&gt;ro.build.version.incremental=01.01.01&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #93c47d;"&gt;ro.build.version.release=2.3.3&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #93c47d;"&gt;ro.product.model=SH-12C&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #93c47d;"&gt;ro.product.brand=DOCOMO&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #93c47d;"&gt;ro.product.name=SH12C&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #93c47d;"&gt;ro.product.device=SH12C&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #93c47d;"&gt;ro.product.board=SH12C&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #93c47d;"&gt;ro.product.manufacturer=SHARP&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #93c47d;"&gt;ro.product.locale.language=ja&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #93c47d;"&gt;ro.product.locale.region=JP&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #93c47d;"&gt;ro.mtp.manufacturer=NTT DOCOMO, Inc.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #93c47d;"&gt;ro.sh_build.id=S7301&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #93c47d;"&gt;ro.sh_build.version.incremental=01.01.02&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #93c47d;"&gt;ro.build.product=SH12C&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #93c47d;"&gt;ro.build.description=SH12C-user 2.3.3 S7140 01.01.01 release-keys&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #93c47d;"&gt;ro.build.fingerprint=DOCOMO/SH12C/SH12C:2.3.3/S7140/01.01.01:user/release-keys&lt;/span&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;With it, I was actually able to purchase and install locked apps. In theory, if you have a tool like TitaniumBackup that converts installed apps to APK files, you could purchase an app, convert it to APK, then use the 15-minute return to get your money back. I have not done this because I don't want this kind of purchase pattern on my credit card, and because I'm willing to give Chunsoft 500 yen because that's a very fair price for Shiren.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style="color: #cc0000;"&gt;5.&lt;/span&gt;&amp;nbsp; Close Root Explorer.&lt;/div&gt;&lt;div&gt;&lt;span style="color: #cc0000;"&gt;6.&lt;/span&gt;&amp;nbsp; Open System-&amp;gt;Applications-&amp;gt;All and scroll down to Market. Click Force Close and Clear Cache.&lt;/div&gt;&lt;div&gt;&lt;span style="color: #cc0000;"&gt;7.&lt;/span&gt;&amp;nbsp; Power off your phone. You absolutely must reboot your phone in order to populate the new values we just made in the RAM.&lt;/div&gt;&lt;div&gt;&lt;span style="color: #cc0000;"&gt;8.&lt;/span&gt;&amp;nbsp; Run MarketEnabler. Click the third tab and enter this for your SIM code: 44010. All NTT network SIM cards are branded 0xABEA.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style="color: #cc0000;"&gt;8a.&lt;/span&gt;&amp;nbsp; Go to System-&amp;gt;Accounts &amp;amp; Sync and add a NEW GOOGLE ACCOUNT. One that has never been tied to any phone. Create one if you must.&lt;/div&gt;&lt;div&gt;&lt;span style="color: #cc0000;"&gt;9.&lt;/span&gt;&amp;nbsp; Copy the URL of the program in the market and go to kaywa.com. Paste it in and generate a QR code.&lt;/div&gt;&lt;div&gt;&lt;span style="color: #cc0000;"&gt;10.&lt;/span&gt;&amp;nbsp; Take a picture of the QR code with your barcode scanner. When prompted, pick to use Market to open the link.&lt;/div&gt;&lt;div&gt;&lt;span style="color: #cc0000;"&gt;10a.&lt;/span&gt;&amp;nbsp; Immediately click the menu button and change your account to the new Google account you added to your phone.&lt;/div&gt;&lt;div&gt;&lt;span style="color: #cc0000;"&gt;11.&lt;/span&gt;&amp;nbsp; Agree to the Market terms and conditions.&lt;/div&gt;&lt;div&gt;&lt;span style="color: #cc0000;"&gt;12.&lt;/span&gt; &amp;nbsp;Congratulations! You can finally install the fucking game!&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;NOTE:&amp;nbsp;I was finally able to isolate a strange bug in that your current Google count does not notify Google that it is present on a new device. Apparently, your phone information is only sent to Google when an account is first tied to your phone. If you wish to purchase apps in the market with the account you've added, you will need to use that account to log in. Make sure your Market app is also set to that account so automated downloading can begin.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://filthypants.blogspot.com/feeds/3115787497060208738/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6845625574553920830&amp;postID=3115787497060208738' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6845625574553920830/posts/default/3115787497060208738'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6845625574553920830/posts/default/3115787497060208738'/><link rel='alternate' type='text/html' href='http://filthypants.blogspot.com/2011/12/how-to-download-region-locked-japanese.html' title='How to Download Region-Locked Japanese Games from Android Market'/><author><name>Hunter K.</name><uri>http://www.blogger.com/profile/18379090454291486194</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6845625574553920830.post-1863679679302761988</id><published>2011-12-22T09:37:00.000-08:00</published><updated>2012-03-07T12:16:41.573-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mechanical'/><category scheme='http://www.blogger.com/atom/ns#' term='das'/><category scheme='http://www.blogger.com/atom/ns#' term='keyboard'/><category scheme='http://www.blogger.com/atom/ns#' term='cherry mx blue'/><category scheme='http://www.blogger.com/atom/ns#' term='ultimate'/><category scheme='http://www.blogger.com/atom/ns#' term='microswitch'/><title type='text'>My New Das Keyboard</title><content type='html'>Newegg briefly ran a huge sale on Das mechanical keyboards, so I decided to shell out the money and pick one up. This post will cover my background with keyboards and switches, and then provide some information about the Das.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: #cc0000; font-size: large;"&gt;Background&lt;/span&gt;&lt;/b&gt; (feel free to skip it if you don't care)&lt;br /&gt;&lt;br /&gt;I've been a dedicated touch typist for a number of years, though I have fallen out of practice since leaving professional writing as an occupation and have settled into a modest 85-wpm rut. Even so, the specter of repetitive stress injury (RSI) hangs over me and informs my decisions on which keyboards I will and won't use.&lt;br /&gt;&lt;br /&gt;For years, I was drawn to the scissor-switch keyboards, which have a short travel, light resistance and are more common on laptops, rather than the more common "rubber dome" keyboards, which dominate the desktop keyboard market, due to the reduced fatigue on my fingers and wrists. A few years ago, though, I began using my grandfather's original 1989&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Model_M_keyboard"&gt;IBM Model M keyboard&lt;/a&gt;, which features the delightful "buckling spring" mechanical switch, and was instantly won over. Rather than lug it back and forth from home to work every day, I asked my employer to purchase a &lt;a href="http://pckeyboards.stores.yahoo.net/customizer.html"&gt;Unicomp Customizer&lt;/a&gt;, which retails for approximately $80.&lt;br /&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://upload.wikimedia.org/wikipedia/commons/1/11/Model_M_patent.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="200" src="http://upload.wikimedia.org/wikipedia/commons/1/11/Model_M_patent.png" width="191" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Diagram of a buckling spring switch.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;The Unicomp is a joy to type on and feels identical to the original Model M I use at home. However, both keyboards suffer from 2-key rollover, which means that certain keys conflict with one another when pressed, such that the keyboard will ignore any further keypresses, sometimes with as few as 2 keys pressed. This is no big deal when typing because typists never need to press more than one key at a time (except for modifiers, like shift, of course). However, when playing computer games, rollover (sometimes known as "ghosting") becomes a serious problem, which is what led me to shop around for a gaming-specific keyboard.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: #cc0000; font-size: large;"&gt;The Das Keyboard Model S Ultimate&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;After poring over &lt;a href="http://www.overclock.net/t/491752/mechanical-keyboard-guide"&gt;Overclock.net's exhaustive mechanical keyboard analysis and review thread&lt;/a&gt;, it seemed to me that there is a segment of the market that could be considered equivalent. These keyboards all use various permutations of the Cherry MX microswitches and provide N-key rollover (i.e., you can press as many keys as you want and they will never conflict with one another) when connected to the computer via PS/2 (via USB, they are all limited to 6-key rollover, which is a limitation of the generic USB keyboard driver, apparently). Out of the many options, I decided to go with the Das since it was on a hefty sale and I had a spare Newegg gift card to make it even cheaper.&lt;br /&gt;&lt;br /&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-fKyTt6LeZq8/TvSMDMk9a7I/AAAAAAAABIw/cAFwEMfoYZ4/s1600/IMG_20111222_211747.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="150" src="http://3.bp.blogspot.com/-fKyTt6LeZq8/TvSMDMk9a7I/AAAAAAAABIw/cAFwEMfoYZ4/s200/IMG_20111222_211747.jpg" width="200" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Foreshortening makes the Model M&lt;br /&gt;appear larger, but they are roughly&lt;br /&gt;the same size.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Of the Das models available, I had my choice between blue and brown&amp;nbsp;Cherry&amp;nbsp;switches. According to reviews, the blues are tactile (meaning your fingers feel a haptic click when the switch actuates) and clicky, while the browns are tactile and non-clicky. I have grown accustomed to the clickiness of my buckling springs, so the blues were attractive to me.&amp;nbsp;In practice, the clickiness is nice and familiar and the resistance is surprisingly even less than I'm used to from my buckling springs.&lt;br /&gt;&lt;br /&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-DBdIuPyDdzQ/TvSMDoZYCCI/AAAAAAAABI4/9XUkexwlj7Q/s1600/IMG_20111222_211819.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="150" src="http://4.bp.blogspot.com/-DBdIuPyDdzQ/TvSMDoZYCCI/AAAAAAAABI4/9XUkexwlj7Q/s200/IMG_20111222_211819.jpg" width="200" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;This pic shows the difference in pitch.&lt;br /&gt;While the Model M is rounded, the Das&lt;br /&gt;is straight and flat. I don't really notice&lt;br /&gt;the difference during use, though.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;For anyone who is familiar with arcade buttons, the Model M feels like clicky Happ buttons, while non-tactile Cherry blacks would be more like Sanwa buttons (no haptic feedback for when the button actuates). Tactile Cherry MX switches, like the blues and browns, are somewhere in between, probably more like the Seimitsu clickies.&lt;br /&gt;&lt;br /&gt;Though I am a touch-typer, I would have preferred to get labeled keycaps on my Das, but the model with Cherry blues and keycaps wasn't on sale. In the future, I'll probably pick up a handful of colored/labeled keycaps, just to give myself a few more landmarks. Perhaps the letter 'P' and/or the hyphen key, and maybe a Tux keycap for the 'super'/Windows key...&lt;br /&gt;&lt;br /&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-9q_b_GlsnFM/TvSMDycvHHI/AAAAAAAABJA/1hAOyEDkNqg/s1600/IMG_20111223_080810.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="150" src="http://4.bp.blogspot.com/-9q_b_GlsnFM/TvSMDycvHHI/AAAAAAAABJA/1hAOyEDkNqg/s200/IMG_20111223_080810.jpg" width="200" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;An area smoothed by high traffic on&lt;br /&gt;my Unicomp after barely 1 year of use.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Other aspects of the keyboard are all top-notch. The USB ports on the side provide handy access for plugging in a mouse or thumb drive, though the placement of the ports can interfere with mousing on cramped keyboard trays, like mine (see the bottom-right corner of my pics). The keyboard housing is solid, well-constructed and easy to clean, though the glossy, piano black finish really attracts and holds fingerprints. On the other hand, this type of finish won't develop smooth spots in areas of high traffic like the stippled/matte finishes would, so there's a trade-off.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: #cc0000; font-size: large;"&gt;Final Thoughts&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Overall, I'm very pleased with the Das. For typing, I guess I still prefer the buckling springs, but the Das is most definitely satisfactory and still blows away any scissor-switch or rubber dome I've encountered. I would recommend this keyboard to anyone who is interested in a solid gaming keyboard that can do double-duty as a very competent typing keyboard.&lt;br /&gt;&lt;br /&gt;In a typing comparison, I am able to achieve my same 85 wpm on the Das as with the buckling spring keyboards (as measured by TypeRacer), though the lighter actuation pressure on the Das leads me to bottom out on it more often. However, I think this is something that I could get used to over time and could potentially end up increasing my speed somewhat, once I grow accustomed.&lt;br /&gt;&lt;br /&gt;If you would like to learn more and/or are considering taking the plunge on a mechanical keyboard, the aforementioned Overclock.net thread is full of information for potential buyers. To learn more about keyboards in general, &lt;a href="http://en.wikipedia.org/wiki/Keyboard_technology"&gt;the wikipedia has an excellent article covering the various technologies&lt;/a&gt;. If you have any questions about any of the keyboards mentioned in this post, feel free to leave a comment.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;&lt;b&gt;Update (3/07/2012)&lt;/b&gt;&lt;/span&gt;: I talked my employer into picking up a Das Professional S(ilent) for me. This keyboard uses the Cherry MX Brown switches and features labeled keycaps, unlike the Ultimate I have at home.&lt;br /&gt;&lt;br /&gt;While the switches are definitely quieter than the Cherry Blues, they are far from "silent" and are probably only a little quieter than my Unicomp. I'm pleased with this, though, since I like the clickity-clack anyway; it just annoys my office-mates a little less now. Additionally, the Browns require a slightly higher actuation pressure&amp;nbsp;compared with the Blues, putting them more on the level of the Unicomp/Model M.&lt;br /&gt;&lt;br /&gt;Typing feels light and sure. This is a very comfortable keyboard and I think most anyone will be pleased with it for typing, probably more so than with the Blue microswitches.&lt;br /&gt;&lt;br /&gt;Here are a couple of pics:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-4wgynx3Wt0o/T1fByI_a-jI/AAAAAAAABL0/hMqgu9BeUCU/s1600/IMG_20120307_135912.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="150" src="http://3.bp.blogspot.com/-4wgynx3Wt0o/T1fByI_a-jI/AAAAAAAABL0/hMqgu9BeUCU/s200/IMG_20120307_135912.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-lvRiisb7jJ0/T1fByrRPTYI/AAAAAAAABL8/qVPo48QFmjE/s1600/IMG_20120307_140013.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="150" src="http://3.bp.blogspot.com/-lvRiisb7jJ0/T1fByrRPTYI/AAAAAAAABL8/qVPo48QFmjE/s200/IMG_20120307_140013.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://filthypants.blogspot.com/feeds/1863679679302761988/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6845625574553920830&amp;postID=1863679679302761988' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6845625574553920830/posts/default/1863679679302761988'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6845625574553920830/posts/default/1863679679302761988'/><link rel='alternate' type='text/html' href='http://filthypants.blogspot.com/2011/12/my-new-das-keyboard.html' title='My New Das Keyboard'/><author><name>Hunter K.</name><uri>http://www.blogger.com/profile/18379090454291486194</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-fKyTt6LeZq8/TvSMDMk9a7I/AAAAAAAABIw/cAFwEMfoYZ4/s72-c/IMG_20111222_211747.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6845625574553920830.post-3886983392860274375</id><published>2011-12-20T20:15:00.000-08:00</published><updated>2012-11-08T09:14:39.849-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ssnes'/><category scheme='http://www.blogger.com/atom/ns#' term='cg'/><category scheme='http://www.blogger.com/atom/ns#' term='nvidia'/><category scheme='http://www.blogger.com/atom/ns#' term='pixel shader'/><title type='text'>Cg Pixel Shaders for SSNES</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-QiSh3D8V1xs/TvKkIk26FZI/AAAAAAAABH8/SMesj667OC8/s1600/5xBR.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;b&gt;&lt;span style="color: red;"&gt;Update (11/08/2012)&lt;/span&gt;&lt;/b&gt;: New shaders added to the end of the post.&lt;br /&gt;&lt;br /&gt;In addition to XML/GLSL pixel shaders, SSNES also supports pixel shaders written in Nvidia's proprietary Cg shader language, which is similar in syntax to Microsoft's HLSL language. While Cg hasn't been a very popular language for shaders, historically, many new shaders have been written for use with PS3 homebrew, where Cg is the only supported shader language. In fact, these shaders were downloaded from &lt;a href="https://github.com/twinaphex/common-shaders"&gt;TwinAphex's SNES9x Next source code repository&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Another benefit to the Cg shaders is that they work with both OpenGL and Direct3D drivers in SSNES, which makes many of the more modern shaders to available to people with poor OpenGL performance for the first time.&lt;br /&gt;&lt;br /&gt;As with my previous shader posts, these images were captured at a 3x scale factor, then enlarged using nearest neighbor to 400% for the detail shot. Click the thumbnails to embiggen.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc0000; font-size: x-large;"&gt;&lt;b&gt;5xBR+CRT&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-3AYPJ9FJRv4/TvKkIwilYQI/AAAAAAAABIE/CRLBJZhYtEk/s1600/5xBR%252BCRT.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="180" src="http://3.bp.blogspot.com/-3AYPJ9FJRv4/TvKkIwilYQI/AAAAAAAABIE/CRLBJZhYtEk/s200/5xBR%252BCRT.png" width="200" /&gt;&lt;/a&gt;&lt;a href="http://3.bp.blogspot.com/-xMlsg3qBW3Q/TvKkJXY2uSI/AAAAAAAABIM/yO8ny8TaWvE/s1600/5xBR%252BCRT-big.png" imageanchor="1" style="clear: left; display: inline !important; margin-bottom: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="200" src="http://3.bp.blogspot.com/-xMlsg3qBW3Q/TvKkJXY2uSI/AAAAAAAABIM/yO8ny8TaWvE/s200/5xBR%252BCRT-big.png" width="200" /&gt;&lt;/a&gt;&lt;br /&gt;This shader combines Hyllian's 5xBR algorithm with the phosphor-derived scanline shader from Caligari with great results. This shader is designed for use with square, non-aspect-corrected pixels, so be sure to use an 8:7 aspect ratio on SNES to avoid any nasty artifacting. It also expects at least a 5x scale factor, which looks like this:&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-QiSh3D8V1xs/TvKkIk26FZI/AAAAAAAABH8/SMesj667OC8/s1600/5xBR.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="143" src="http://4.bp.blogspot.com/-QiSh3D8V1xs/TvKkIk26FZI/AAAAAAAABH8/SMesj667OC8/s200/5xBR.png" width="200" /&gt;&lt;/a&gt;&lt;br /&gt;Here are a few more pictures from the GBA version of Final Fantasy 6 and Street Fighter 3: Third Strike on FBA:&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-_dnMMu4hIIk/TvFfz1_4-TI/AAAAAAAABHw/OEsY1qMOaD0/s1600/1.png"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5688433148618668338" src="http://3.bp.blogspot.com/-_dnMMu4hIIk/TvFfz1_4-TI/AAAAAAAABHw/OEsY1qMOaD0/s200/1.png" style="cursor: hand; cursor: pointer; height: 139px; width: 200px;" /&gt;&lt;/a&gt;&lt;a href="http://3.bp.blogspot.com/-MKxWOdQCH_E/TvFfzMgb0iI/AAAAAAAABHo/nZwOUWBo1lU/s1600/2.png"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5688433137480880674" src="http://3.bp.blogspot.com/-MKxWOdQCH_E/TvFfzMgb0iI/AAAAAAAABHo/nZwOUWBo1lU/s200/2.png" style="cursor: hand; cursor: pointer; height: 139px; width: 200px;" /&gt;&lt;/a&gt;&lt;a href="http://2.bp.blogspot.com/-jCmgDtEUrI4/TvFfyy7PxQI/AAAAAAAABHY/bWqLPif0OcQ/s1600/3.png"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5688433130614015234" src="http://2.bp.blogspot.com/-jCmgDtEUrI4/TvFfyy7PxQI/AAAAAAAABHY/bWqLPif0OcQ/s200/3.png" style="cursor: hand; cursor: pointer; height: 113px; width: 200px;" /&gt;&lt;/a&gt;&lt;br /&gt;I find the scanlines make text easier to read than with 5xBR alone, for whatever reason.&lt;br /&gt;Download the xBR pack from Hyllian &lt;a href="http://www.multiupload.com/M2SUIU3J6H"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc0000; font-size: x-large;"&gt;&lt;b&gt;Retro&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-uJkFZiFMOJg/TvKkJ-n_KII/AAAAAAAABIU/awyniYdHo7k/s1600/retro.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="180" src="http://2.bp.blogspot.com/-uJkFZiFMOJg/TvKkJ-n_KII/AAAAAAAABIU/awyniYdHo7k/s200/retro.png" width="200" /&gt;&lt;/a&gt;&lt;a href="http://3.bp.blogspot.com/-ockIpdJftto/TvKkKjRgpDI/AAAAAAAABIk/7IRK6FPscEg/s1600/retro-big.png" imageanchor="1" style="clear: left; display: inline !important; margin-bottom: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="200" src="http://3.bp.blogspot.com/-ockIpdJftto/TvKkKjRgpDI/AAAAAAAABIk/7IRK6FPscEg/s200/retro-big.png" width="200" /&gt;&lt;/a&gt;&lt;br /&gt;This shader accentuates the individual pixels by adding a cool, beveled look along with some color-tweaking mojo to give them a feeling of depth. Again, it expects non-aspect-corrected images, or else subpixel aliasing effects will make a mess of things.&lt;br /&gt;&lt;br /&gt;Here's another picture at 20x (5x scale factor, enlarged 4x with nearest neighbor; see it full size to get the full effect):&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-aWh1ApMXBrg/TvKkKZ1d0VI/AAAAAAAABIc/IU6xHhQEIJA/s1600/retro5x.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="171" src="http://3.bp.blogspot.com/-aWh1ApMXBrg/TvKkKZ1d0VI/AAAAAAAABIc/IU6xHhQEIJA/s200/retro5x.png" width="200" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Notable ports from the XML shader family include cgwg's CRT shader, Themaister's dot-n-bloom (listed as 'dots.cg') and Waterpaint shaders and an extremely fast implementation of bicubic filtering (bicubic-fast.cg) from Hyllian, as well as all the classics, such as HQ2x, SuperEagle and so on.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: red;"&gt;Update (11/08/2012)&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: #cc0000; font-size: large;"&gt;CRT-ReverseAA&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Hyllian has been working on some interesting shaders lately, including an implementation of Christoph Feck's "reverse anti-aliasing" algorithm, which allows for some very sharp, smooth upscaling. It works on any image but really shines on digitized images with lots of gradients (think: SNES games with digitized sprites or games with prerendered backgrounds, like Resident Evil or Final Fantasy 7). It's also particularly good at rendering legible text, so it's great for RPGs, as well. Here are some images of &lt;a href="http://www.mediafire.com/download.php?run3o7oo05e0o90"&gt;this shader paired with some scanlines&lt;/a&gt;:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-39PmzQrLvHI/UJvjsaywVHI/AAAAAAAABZA/LR74Wk2Jck4/s1600/CRT-ReverseAA.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="179" src="http://4.bp.blogspot.com/-39PmzQrLvHI/UJvjsaywVHI/AAAAAAAABZA/LR74Wk2Jck4/s200/CRT-ReverseAA.png" width="200" /&gt;&lt;/a&gt;&lt;a href="http://1.bp.blogspot.com/-EmhDlznyorE/UJvjtLLSnCI/AAAAAAAABZI/keFycOJ_6jI/s1600/CRT-ReverseAA2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="190" src="http://1.bp.blogspot.com/-EmhDlznyorE/UJvjtLLSnCI/AAAAAAAABZI/keFycOJ_6jI/s200/CRT-ReverseAA2.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;As you can see, Clay Fighter looks really great with this shader. Too bad the game is godawful.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: #cc0000; font-size: large;"&gt;bsnes-gamma-ramp&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;As with pretty much everything else, bsnes has taken some sophisticated steps to achieve an authentic gamma ramp that reflects the actual appearance of games. &lt;a href="http://www.mediafire.com/download.php?d88n4h1nqll4kq1"&gt;Themaister was kind enough to reproduce the relevant code in Cg form&lt;/a&gt;. This is how it looks:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-Cfozxr_eMP4/UJvlsxuJhJI/AAAAAAAABZQ/KbCgTOJX6YY/s1600/bsnes-gamma-ramp.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="179" src="http://2.bp.blogspot.com/-Cfozxr_eMP4/UJvlsxuJhJI/AAAAAAAABZQ/KbCgTOJX6YY/s200/bsnes-gamma-ramp.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;He also wrote a cgp file (just a simple file that tells RetroArch how to deal with multiple Cg shaders) that will enable pixel blending used in pseudo-hires transparency, which bsnes-derived emulation cores typically render as a series of vertical stripes instead of the intended translucent color. You can download the bsnes-gamma-ramp+hires blending bundle &lt;a href="http://www.mediafire.com/download.php?d06gkpuk2s0p9gb"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: #cc0000; font-size: large;"&gt;LCD3x&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;A simple, fast scanline shader from Gigaherz, &lt;a href="http://www.mediafire.com/download.php?x0gg3dkjqlb9304"&gt;LCD3x &lt;/a&gt;is intended to evoke the look of handheld console LCD displays:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-hATK8EffF8o/UJvnVKUUxaI/AAAAAAAABZY/X5AmWcud0cI/s1600/lcd3x.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="179" src="http://3.bp.blogspot.com/-hATK8EffF8o/UJvnVKUUxaI/AAAAAAAABZY/X5AmWcud0cI/s200/lcd3x.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;It's also a very easy shader to customize, if you want darker scanlines or to brighten the overall image. These variables are located on lines 12 and 13 of the shader, respectively.&lt;br /&gt;&lt;br /&gt;I'll add more shaders and more pics in the near future.</content><link rel='replies' type='application/atom+xml' href='http://filthypants.blogspot.com/feeds/3886983392860274375/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6845625574553920830&amp;postID=3886983392860274375' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6845625574553920830/posts/default/3886983392860274375'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6845625574553920830/posts/default/3886983392860274375'/><link rel='alternate' type='text/html' href='http://filthypants.blogspot.com/2011/12/cg-pixel-shaders-for-ssnes.html' title='Cg Pixel Shaders for SSNES'/><author><name>Hunter K.</name><uri>http://www.blogger.com/profile/18379090454291486194</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-3AYPJ9FJRv4/TvKkIwilYQI/AAAAAAAABIE/CRLBJZhYtEk/s72-c/5xBR%252BCRT.png' height='72' width='72'/><thr:total>6</thr:total></entry></feed>