The SNES Can Do Ray Tracing Thanks to a Homebrew “SuperRT” Chip

Prime Benefit Spotlight: Free games and in-game content

Ray tracing isn’t a new graphics term. It’s been around for ages, and if you’ve ever seen old demos of reflective orbs and teapots from the ’90s, those were probably ray tracing showcases. The reason it’s a big dealtoday is that modern graphics cards and new consoles can finally start doing ray traced lighting and effects in games in real time. Big deal, though; you can also get ray tracing going on a Super Nintendo.

That’s what engineer Ben Carter’s achieved with “SuperRT,” his homebrew ray tracing add-on conceived for the SNES (actually, he’s running his off a Super Famicom, but it’s all the same). Riffing off the idea of the Super FX, the processors included inside the cartridges for games like Star Fox and Yoshi’s Island, Carter’s chip design interfaces with the SNES in the same way.

The “SuperRT” has three execution cores that run at 50Mhz for handling the ray tracing. Both it and its demo scene are purpose-built, as the chip can only render certain primitive shapes like spheres and cubes (it doesn’t rasterize objects i.e. render them as polygons as typical 3D games do). Carter designed his chip in the spirit of the Super FX, meaning this isn’t a ray tracing demo being handled on other hardware that’s then merely passed through the SNES.

“This isn’t a case where there’s a PC or ARM [System On a Chip] running everything behind the scenes,” Carter explains in a supplementary tech walkthrough video. “The SNES is firmly in the driving seat here, with the SuperRT only handling ray tracing duties, image data conversion, and providing some extra maths functions.”

You can see the demo chug a bit at points, but the chip can push a 200 by 160 pixel ray traced scene at 30 frames per second in ideal conditions. That’s really impressive for a 1990 console, especially when you consider that Carter’s working prototype is also a large rat’s nest of wires poking out of breadboards.

It’d be neat to see someone with FPGA production know-how make a production-ready version of Carter’s chip that can be put in a cartridge (I’m looking at you, Analog). Cooler still would be something like a ray traced version of a polygonal game like Star Fox; all basic shapes and planes still, but with dynamic lighting from the sun and reflections galore. Demos full of cubes are nice and all, but just imagine seeing the Arwing reflected in Andross’s ugly mug.


Thanks, Digital Foundry.

custom_variables['games'] = ["star-fox"];

custom_variables['tags'] = ["action","news","nintendo","retro","shooter","snes"];

var ads_space = 450; var uam_timeout = 1400;

var version = 'hd';

window['adsSidebar'] = new SidebarAds({ content: $(".page > .above"), sidebar: $(".page > .sidebar .ads-sidebar"), firstOffset: 1050 + 500, minSpacing: 1500, limit: 5, prefix: "ARTICLE", zone: 'USG_Lazy_Load_HP_MPU', site: 'usgamer.net', articles: [{"slug":"super-nes-classic-reviews-game-by-game-21-star-fox-2","title":"Super NES Retro Review: Star Fox 2","comments":0,"image":"2017/usgamer/star_fox_2_review_featured.png"},{"slug":"super-nes-classic-reviews-game-by-game-8-star-fox","title":"Super NES Retro Review: Star Fox","comments":0,"image":"2017/usgamer/star_fox_snes_classic_featured.jpg"}], lang: { advertisement: "Advertisement", related: "Related content" } });

do_the_ads(ads_space, custom_variables, uam_timeout, version);

} // Check for other Amazon links and add subtag if required jQuery('.article .body a').each( function(i, k) { var link_href = jQuery(k).attr('href');

if(link_href.match(/amazon./i) && link_href.indexOf('ascsubtag') == -1) { subtag=''; if(window.location.pathname.length > 1) { var subtag = window.location.pathname.substring(1); subtag = subtag.replace(///g,'-').substring(0,89); } else { subtag='index'; } link_href = link_href + ((link_href.indexOf('?') == -1) ? '?ascsubtag=' : '&ascsubtag=') + subtag; jQuery(k).attr('href', link_href); } } );

function runGoogleAnalytics(anonymous) {

if (window.gtagDone) return;

window.dataLayer = window.dataLayer || [];

function gtag(){ dataLayer.push(arguments); }

gtag('js', new Date()); gtag('set', 'allow_ad_personalization_signals', true);

var options = {};

options = { 'dimension1': 'news', 'dimension2': 'Nintendo,Retro', 'dimension3': 'Mathew Olson' };

options['dimension4'] = 'No';

options['link_attribution'] = true;

if(anonymous) { options['store_gac'] = false; options['client_storage'] = 'none'; options['anonymize_ip'] = true; }

gtag('config', 'UA-36289065-1', options);

window.gtagDone = true;

var ga_script = document.createElement("script"); ga_script.type = "text/javascript"; ga_script.async = true; ga_script.src = "https://www.googletagmanager.com/gtag/js?id=UA-36289065-1"; document.getElementsByTagName('head')[0].appendChild(ga_script); } function runSAK() { var s = document.createElement('script'); s.type="text/javascript"; s.async = true; s.src="https://sak.userreport.com/gamer-network/launcher.js"; s.id = 'userreport-launcher-script'; document.getElementsByTagName('head')[0].appendChild(s); } function youtube_parser(url){ var regExp = /^.*((youtu.be/)|(v/)|(/u/w/)|(embed/)|(watch?))??v?=?([^#&?]*).*/; var match = url.match(regExp); return (match&&match[7].length==11)? match[7] : false; }

function runBBMVS() { jQuery('article iframe').each(function(){ src = jQuery(this).attr('src'); if(src) {

// If people have allowed targeting we can // swap the nocookie embed with the standard embed if(src.match(/www.youtube-nocookie.com/i)) { jQuery(this).attr('src', src.replace('www.youtube-nocookie.com', 'www.youtube.com')); }

check_yt = youtube_parser(src); if(check_yt){ jQuery(this).attr('id', 'yt-' + check_yt); jQuery(this).attr('data-yt-id', check_yt); jQuery(this).addClass('yt-embed'); } } }); var promises = []; jQuery('article iframe.yt-embed').each(function() { check_yt = jQuery(this).attr('data-yt-id'); (function(replace_yt) { promises.push(jQuery.getJSON( "https://gamernetwork.bbvms.com/json/search?query=%22" + replace_yt + "%22&context=all", function( data ) { if(typeof data['items'][0] !== 'undefined' && typeof data['items'][0].id !== 'undefined') { yt_video = jQuery('#yt-' + replace_yt); jQuery(yt_video).attr('data-bbvms-id', data['items'][0]['id']); }; })); })(check_yt); }); Promise.all(promises).then(function( data ) { first_yt = true; jQuery("[data-bbvms-id]").each(function() { yt_video_wrapper = jQuery(this).closest('figure.video'); if(first_yt) { playout_id = 'us_gamer_autoplay'; first_yt = false; } else { playout_id = 'us_gamer'; } jQuery(yt_video_wrapper).append('

');
jQuery('.video-container', yt_video_wrapper).remove();
jQuery('.bb_wrapper', yt_video_wrapper).append('Watch on YouTube');
});
});

}

function runComscore() {
var _comscore = _comscore || [];
_comscore.push({ c1: "2", c2: "8518622" });
(function() {
var s = document.createElement("script");
el = document.getElementsByTagName("script")[0];
s.async = true;
s.src = "https://sb.scorecardresearch.com/beacon.js";
el.parentNode.insertBefore(s, el);
})();
}
function runFacebookLogin() {
$(document).ready(function() {
fbs = $("[data-action=facebook-login]");
for(i = 0; i 3&&void 0!==arguments[3]?arguments[3]:"",a=arguments[4],c=arguments[5];if(a){var d=e.lastIndexOf("."),s=e.lastIndexOf("https://www.usgamer.net/"),u=-1===d||s>d?e+".png":e.substring(0,d)+".png",l=new Image;l.addEventListener("load",function(){r("1",u)}),l.addEventListener("error",function(){o.i(f.a)(u,function(n,t,o){r("0",u+"::"+o)})}),l.src=u}else r()}function i(n,t,o,e){var r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},a=arguments.length>5&&void 0!==arguments[5]&&arguments[5],c=function(){i(n,t,o,e,r,!0)};n(t,a?o:c,e,r)}function a(n,t,o,e){function r(o,r){t(o,n,r,e.enableImageLoad)}function i(t,r){o(t,n,r,e.enableImageLoad),e.onError&&e.onError(r)}var a=document.createElement("script");a.src=n,a.onload=function(){e.onLoad&&e.onLoad()},a.onerror=function(){function t(n){return o.indexOf(n)>-1}var o=(navigator.userAgent||navigator.vendor||window.opera).toLowerCase();t("mobi")||t("ipad")||t("android")||t("iphone")?i(x):t("exabot")?i(U):t("bingbot")||t("bingpreview")?i(S):t("googlebot")||t("adsbot-google")||t("mediapartners-google")?i(E):t("googleweblight")?i(O):window.location.host===w?i(I):window.location.host.indexOf(b)>-1?i(j):t("msie 10")||t("msie 9")||t("msie 8")?i(k):c(n,r,i)},document.head.appendChild(a),document.querySelector('script[src="'+n+'"]')||-1!==window.location.host.indexOf(b)||(g.info("Script not present"),r(C,n))}function c(n,t,e){o.i(f.a)(n,function(o,r,i,a){(o||r?t:e)(a,n+"::"+i)})}function d(n,t,o,e){if(q)return void s(R+"::"+n,o);r(L,n,t,o,e,function(){if(N){if(F){g.error("bootstrap locking",L,n,t,o,e);debugger}setTimeout(function(){N()},250)}})}function s(n,t,o,e){r(y,n,t,o,e)}function u(){h._networkListenerData||(h._networkListenerData=o.i(p.a)())}function l(n,t){e(),g.info("bootstrap called with",n,t),i(a,n,d,s,t)}Object.defineProperty(t,"__esModule",{value:!0});var f=o(4),p=o(5),v=o(3),g=o(0),m=void 0;m=o(0);var w=["w","e","b","c","a","c","h","e",".","g","o","o","g","l","e","u","s","e","r","c","o","n","t","e","n","t",".","c","o","m"].join(""),b=["o","p","t","i","m","i","z","e","l","y","p","r","e","v","i","e","w",".","c","o","m"].join(""),h=window._sp_||{},_=1,y=0,L=1,C="s",x="m",E="g",I="gw",O="gl",k="i",S="b",U="e",R="n",j="o",D=!1,q=!1,F=!1,z=void 0,N=void 0,B=void 0,G=void 0;window.addEventListener("beforeunload",function(){q=!0}),window._sp_=h,h.setupNetworkListeners=u,h.bootstrap=l,window.spBootstrap=l,t["default"]=h},function(n,t,o){o(0);n.exports=o(1)["default"]},function(n,t,o){"use strict";function e(n){return n.join("")}o.d(t,"b",function(){return r}),o.d(t,"a",function(){return i});var r=(o(0),"2.0.1056"),i=(e(["w","w","w",".","s","u","m","m","e","r","h","a","m","s","t","e","r",".","c","o","m"]),e(["w","w","w",".","r","o","o","s","t","e","r","f","i","r","e","w","o","r","k",".","c","o","m"]));e(["https://www.usgamer.net/","https://www.usgamer.net/","f","s","m","1","0","1","9",".","g","l","o","b","a","l",".","s","s","l",".","f","a","s","t","l","y",".","n","e","t","https://www.usgamer.net/","f","s","m","https://www.usgamer.net/","d","s"]),e(["h","t","t","p","s",":","https://www.usgamer.net/","https://www.usgamer.net/","d","2","z","v","5","r","k","i","i","4","6","m","i","q",".","c","l","o","u","d","f","r","o","n","t",".","n","e","t","https://www.usgamer.net/","0","https://www.usgamer.net/","2",".","0",".","1","0","5","6","https://www.usgamer.net/","r","e","c","o","v","e","r","y","_","d","f","p","_","i","n","t","e","r","n","a","l","-","v","2",".","0",".","1","0","5","6",".","j","s"]),e(["h","t","t","p","s",":","https://www.usgamer.net/","https://www.usgamer.net/","d","2","z","v","5","r","k","i","i","4","6","m","i","q",".","c","l","o","u","d","f","r","o","n","t",".","n","e","t","https://www.usgamer.net/","0","https://www.usgamer.net/","2",".","0",".","1","0","5","6","https://www.usgamer.net/","r","e","c","o","v","e","r","y","_","l","i","b","_","a","p","i","_","i","f","r","a","m","e","-","v","2",".","0",".","1","0","5","6",".","h","t","m","l"]),e(["h","t","t","p","s",":","https://www.usgamer.net/","https://www.usgamer.net/","d","2","z","v","5","r","k","i","i","4","6","m","i","q",".","c","l","o","u","d","f","r","o","n","t",".","n","e","t","https://www.usgamer.net/","0","https://www.usgamer.net/","2",".","0",".","1","0","5","6","https://www.usgamer.net/","r","e","c","o","v","e","r","y","_","l","i","b","_","r","i","d","_","i","f","r","a","m","e","-","v","2",".","0",".","1","0","5","6",".","h","t","m","l"])},function(n,t,o){"use strict";function e(n,t){function o(n){try{return n&&n.timeStamp?n.timeStamp:window.performance.now()}catch(n){return Date.now()}}var e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:window.location,l=arguments.length>3&&void 0!==arguments[3]?arguments[3]:window.navigator,f=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},p=document.createElement("a");if(p.href=n,"https:"===e.protocol&&p.protocol!==e.protocol)return r.error("protocol mismatch in https environment, standing down"),void t(!1,!1,p.protocol,s);var v=new XMLHttpRequest,g=f.withCredentials;null!=g&&(v.withCredentials=g);try{v.open(f.method||"GET",n)}catch(n){return void t(!0,!1,n.toString(),c,v)}if(null!=f.headers){var m=f.headers;Object.keys(m).forEach(function(n){v.setRequestHeader(n,m[n])})}var w=void 0,b=void 0;v.onloadstart=function(n){w=o(n)},v.on
statechange=function(n){if(4===this.readyState){b=o(n)-w;var e=0===this.status&&!1!==l.onLine,r="2"===this.status.toString()[0],c=void 0;return c=r?a:!1===l.onLine?u:i,void t(e,r,this.status+"::"+b,c,v)}};try{v.send(f.body)}catch(n){return void t(!0,!1,n.toString(),d,v)}}t.a=e;var r=o(0),i="n",a="nx",c="xo",d="xs",s="p",u="of"},function(n,t,o){"use strict";function e(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:document,t=[],o=[],e=r.bind(null,t),i=r.bind(null,o);return n.addEventListener("load",e,!0),n.addEventListener("error",i,!0),{load:{events:t,listener:e},error:{events:o,listener:i}}}function r(n,t){if(t.target){var o="string"==typeof t.target.tagName?t.target.tagName.toLowerCase():"",e="string"==typeof t.target.src?t.target.src:"";"iframe"!==o&&n.push({tagName:o,src:e})}}t.a=e;o(0)}]);
//# sourceMappingURL=https://s3.amazonaws.com/d3jlsadfjkuern/2.0.1056/Ym9vdHN0cmFwLmpz.map
window ._sp_ = window ._sp_ || {};
window ._sp_.config = window ._sp_.config || {};
window ._sp_.config.account_id = 347;
window ._sp_.config.content_control_callback = function () {
//console.log( 'CONTENT LOCK' );
};
window ._sp_.config.mms_domain = 'usgamer-us.usgamer.net' ;
window ._sp_.mms = window ._sp_.mms || {};
window ._sp_.mms.cmd = window ._sp_.mms.cmd || [];
window ._sp_.config.mms_client_data_callback = function (o) {};
window._sp_.config.fsm_endpoint = "//usg-p2.usgamer.net";
window._sp_.config.enable_fsm_detection = true;
window._sp_.config.enable_fsm_network_detection = true;
window ._sp_.mms.cmd.push( function () {
window ._sp_.mms.setTargeting( "logged-in" , "false" );
window ._sp_.mms.setTargeting( "show-ads" , "true" );
});
window ._sp_.mms.cmd.push( function () {
window ._sp_.mms.startMsg();
});
window ._sp_.bootstrap( '/static/scripts/musgamer-fsm.js' );
window ._sp_.config.mms_choice_selected_callback = function (choiceID) {
};
window ._sp_.config.mms_client_data_callback = function (dataObject) {

};
}
function runFacebookPixel() {
!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;
n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,
document,'script','//connect.facebook.net/en_US/fbevents.js');

fbq('init', '686233492142124');
fbq('track', 'PageView');
}

const frames = window.frames;
for (let i = 0; i
Prime Benefit Spotlight: Free games and in-game content

Add Comment