In Super Mario Odyssey, whenever Mario is a certain distance away from the camera, his pupils become smaller, leading to his irises appearing slightly brighter. Whenever Snapshot Mode is entered, though, his pupils become the correct size again. The difference can be seen by quickly toggling between gameplay and Snapshot Mode. (The same effect applies to Cappy and other characters with similar eyes.) Main Blog | Twitter | Patreon | Store | Source: myself, Super Mario Odyssey on original Switch hardware
This is most likely intentional! Games typically use lower quality textures on distant objects in order to save processing power.
Mario’s in-game texture from this distance is a lot less detailed, so the pupils ended up less visible. You can also see that the emblem on his hat is a lot blurrier.
But when the game switches to snapshot mode, it makes sense for it to return to the higher-quality textures. It won’t be processing any gameplay calculations, so it can afford to instead invest into the nicer looking textures. In the better textures, Mario’s pupils are much more visible and distinct, so they may look smaller. But really, the entire texture is a whole lot more clear; the eyes just stand out a lot more.
A lot of this comment is technically incorrect. “Lower quality textures” wouldn’t save on processing power, only on memory bandwidth. Sometimes games drop down on shader complexity with distance (less operations, texture fetches, etc.) but that’s a bit more rare and I don’t believe SMO does that on its character models. “Gameplay calculations” don’t run on the video chip but on the processor. They have nothing to do with how the game looks.
(And, really, if you’ll allow me to be blunt for a second, if there’s one kind of post I really don’t like at Supper Mario Broth, it’s the misguided attempts at technical explanations. Other gamer™ places like “Digital Foundry” often get that wrong too or just thoughtlessly regurgitate marketing talk.)
Games don’t “switch” to lower quality textures in the distance (mipmapping) to save processing power, they do it to avoid aliasing*. That’s mipmapping.
Aliasing isn’t just a thing that can happen to geometry edges, it can also happen from shader effects (such as tight specularity on normal maps); this is why temporal screen-space AA is a strong solution, because it helps address issues that traditional AA (MSAA, etc.) does nothing against.
(*The one exception to this is when games have lots of very high res textures that they have to juggle between; that’s “texture streaming” and aims to keep the highest mip levels for stuff near you in video memory, and lower mip levels for far away stuff)
Broadly speaking, texture aliasing happens when you have more texels (texture pixels) than you can display in a single screen pixel. Ideally, you want the ratio of texel-to-pixel to be as close as possible to 1:1. So if we display less texels far away (where there are less screen pixels to display things), our textures won’t create aliasing.
You might remember some weird texture crawling/shimmering in PS2 games (like Shadow of the Colossus, IIRC). This is because some textures back then didn’t have mipmapping present. Why? Because mipmapping costs you about 35% more video memory. On top of the texture itself, you also have to store a quarter of your texture, then a quarter of a quarter, then a quarter of a quarter of a quarter, and so on. In percentages, this would be about 100% + 25% + 6.25% + 1.56%… and so on.
The PS2 had limited memory so sometimes they had to do that tradeoff.
Left: no mipmapping, a crawly aliased mess.
Right: mipmapping present, no crawling, no aliasing, but some blurriness.
Mipmapping is also what makes “texture quality” settings work on PC. Don’t have enough video memory to fit everything at once? Just tell the game to load most textures one mip level down. Suddenly they’re 25% the size in memory.
Now there are two big things of relevance here.
1. HOW MIPMAPS ARE GENERATED
Mipmaps are almost always pre-generated when the texture file is created. There are lots of debates on what’s the best approach to generate them, in fact. How can you try to represent the most amount of perceptually visible frequency/energy when you are doing it with a quarter of the pixels each step down? (half the resolution = ¼ the pixels)
Naive approaches will create mipmaps that may be overly blurry and lose their visual energy in the wrong ways. For Mario’s eyes up here, it may be that the surrounding white of his eyes will start encroaching too much on the blue, like in the first “17″ up here.
2. HOW MIPMAPS ARE DISPLAYED
It’s one thing to have your textures and their mipmaps, but you still gotta know how to display them. The naive approach: bilinear filtering. This usually refers to interpolating texels when the texels are bigger than each screen pixel. Before bilinear filtering we only had what we now refer to as “nearest neighbor” or “point sampling”. It means “just display whatever texel is the nearest neighbor of the pixel on screen, no fanciness here”.
That’s nearest neighbor vs. bilinear.
The next step up is trilinear, then anisotropic filtering.
Anisotropic filtering will sample more texels for each screen pixel, thereby reducing the blurriness of mipmapping while still not causing texture aliasing.
IIRC Mario Odyssey uses trilinear. I don’t remember seeing a Nintendo game ever using anisotropic. I do remember a funky case with Super Mario 3D Land using trilinear for everything but normal map / spec mip transitions were bilinear. (weird!)
OKAY BUT WHAT ABOUT MARIO’S EYES
How does all this pertain to the Mario Odyssey thing?
SMO has dynamic resolution scaling. While docked, the game will switch anywhere between 1280x720 and 1600x900 to maximize resolution while prioritizing 60 frames per second first and foremost. In portable mode, it does something even crazier: it halves the horizontal resolution, creating an anamorphic 640x720 image, and odd/even vertical columns alternate each frame; the horizontal axis is effectively interleaved, which is a very cool trick. You can see that things will be more aliased in motion that way but the technique is practically invisible for static images.
ANYWAY, when you enter the camera mode, Super Mario Odyssey will drop the framerate to 30 and maximize resolution. I think it also toggles 2xMSAA on but I can’t remember.
Because we suddenly have more screen pixels, it means that, well, we have more screen pixels to represent the same amount of texels. Therefore, all mipmap levels get pushed back a bit. Here’s an example with Half-Life 2 (set to bilinear filtering). Each band of color represents a different mipmap level.
Therefore Mario’s eyes are most likely going one mip level back up. You can see the same thing on his hat.
Fun fact: I did the above GIF when “Digital Foundry” grossly misinformed people about texture filtering. They claimed that Breath of the Wild had better “texture filtering” on Switch than Wii, because the mipmap transitions started further away. Nope, that’s just because Zelda BOTW runs at 900p on Switch and 720p on Wii U.
I think it’s great that people are interested about the technical side of games and I will always encourage curiosity of everything around yourself, whether it’s games or how bread is made. But please be careful and mindful when you do that. Joe Wintergreen explains it better than me:
Did you download the free Miitomo
update yet? It adds some major new features like private messages with friends, the ability to customize your room and more!
Hey everyone! So for the first time in awhile, I’m opening up icon commissions here on Tumblr. I decided to open this opportunity up in the Splatoon community as well, so if you’re eager to grab some art from me, this is a good time to do so. The commissioner will also receive a full resolution of 1000X1000 of their piece as well.
You can either contact me using the available e-mail or DM me here is fine.
I also offer these at discounted prices depending on a certain quantity you would like. Please contact me to learn more.
If you’re not interested but still would like to reblog and pimp me out that works too!! Thank you for your time guys!
Hey everyone! Just a shout out to let you know that commissions are open for business!
Here are some example prices based on the images I’ve included above: - Sketchy-Paint Telegram Stickers: $15 each or $40 for 3 - Character Drawings: $35 per colored character + $15 for Background