14 ms·
The model for coins in Super Mario Odyssey is simpler than in Super Mario Galaxy
- h0l0cube 4y agoThis is completely incorrect. The complexity has just been moved into fragment shaders and texture assets. I'm quite sure the cumulative size of the asset is much larger even though it has less polygons.
- Waterluvian 4y agoIt seems objectively correct, though. The model is simpler. They might take the model and do more processor intensive work with it, transforming it, tessellating if, etc. before render (like all models). But the model itself, is simpler.
- makapuf 4y agoExcept that you can't separate model and normal maps since they're baked versions of the real model. As, you can say you have smaller textures (but shaders with complex 2D data also)
- Dylan16807 4y agoSure you can separate them. And normal maps don't have to be baked from a "real" model.
- raincole 4y agoDepending on what you mean by "model". I would probably call it "mesh".
- deleted 4y ago[deleted]
- kmeisthax 4y agoYes, but the end result still allows more detail with less processing power. You're going to do texture look-ups for each pixel of the coin anyway, you might as well also grab a normal vector while you're there if you can cut your polycount down by a third.
- ReactiveJelly 4y agoThe high-poly model might have looked okay with a blurrier texture, though. It's hard to say without realistic benchmarks on Wii and Switch hardware.
- MetaWhirledPeas 4y agoIsn't texture performance mostly a function of RAM though? Don't polygons require more CPU/GPU horsepower?
- Aeolun 4y agoOnly because current GPU’s have whole banks of processors specifically for texture processing, while you have only a single CPU in your machine. The equation might change a bit if you don’t have all those extra units.
- h0l0cube 4y ago> more detail with less processing power Unarguably it's also more processing power than its predecessor which appeared to be untextured. Far more FLOPs are executed at the fragment level than at the vertex level, and that will vary with how much the model takes up on the screen. But more bang for buck than geometry alone? Can't disagree with that.
- maverwa 4y agoWell, yes it shifts the details away from the actual poly model and into other assets, but this is what you want a lot of the time. The poly count factors in a lot of steps that do not care about normal maps or stuff like that. Depth pass, culling, transforming between coordination systems, all care about the poly count, not about color. Not sure how many of these things apply to Odyssey, but it’s probably safe to assume this was an intentional choice over going with more polys. Shifts the details to the very end of the pipeline instead is considering them on every step, kind of.
- h0l0cube 4y ago> but this is what you want a lot of the time Don't disagree with that, just the claim that the model is simpler. > Depth pass, culling, transforming between coordination systems, all care about the poly count At a guess a dynamic asset like this would be frustum or occlusion culled by bounding box, which doesn't scale with geometry count. Depth pass happens at draw time. But yes, there would be more vertices to transform. Moving geometric details to shaders is a trade-off between either being fill-rate or vertex bound.
- djmips 4y agoThe Switch tends to be vertex bound and texture reads in the fragment shader are efficient. But YMMV, always profile.
- maverwa 4y agoI guess the wording threw me of. For me, the „model“ references just the geometry. Which is what the post states is smaller (=less triangles). But if you include all the assets for the coin in that, yes it’s not simpler/smaller.
- philistine 4y agoThat's exactly what the second tweet addresses. Most devs would be aware of the difference, but the average game player would have no clue. I'm not the average player and I didn't know how much normal maps could replace.
- make3 4y agothey just present this as a cool optimization & aesthetic trick, which it is
- V__ 4y agoI assume both examples would run at indiscernible speeds on modern hardware. How about more complex scenes? Are poly calculations more expensive than map ones?
- bluescrn 4y agoPer-pixel lighting (with a normal map) is generally more expensive than per-vertex lighting (without). But when using normal maps, you've usually got less vertices to deal with, which helps. And modern GPUs are plenty fast enough to do quite a bit of work per pixel, at least until the pixel count gets silly (resolutions of 4K and beyond), hence all the work going into AI upscaling systems. (But the first coin image is from Super Mario Galaxy, a Wii game, and the Wii had a rather more limited GPU with a fixed-function pipeline rather than fully-programmable shaders)
- mewse 4y agoThe Wii (like the GameCube) was weird. It was more than fixed-function, but less than fully-programmable; you'd basically assemble a simple "pixel shader" by clicking together up to 16 operations from a hardcoded list, using up to 8 textures. ('TEV Stages' is the term to Google if you want the gory technical details) If you were coming to it from the PS2 (like I was), it was super-freeing and amazing and so much more flexible and powerful than anything you were used to. But if you were coming to it from the Xbox (like many of my co-workers were) it was more like suddenly being handcuffed.
- royjacobs 4y agoThis reminds me of very early pixel shaders, which could only consist of about 6 assembly instructions.
- capableweb 4y agoIt would reduce the number of draw calls and increase the performance of rendering, as it's simpler to render textures than polygons. Although I think you wouldn't be able to use the same method for everything, as you'd use more vram when using textures for the effect rather than polygons. But for the case of something like coins in a Mario game, I guess it makes sense. As always, what is the right approach depends. If you want to run the game in a very memory constrained environment (early game consoles), the approach of using polygons might make more sense. But nowadays we have plenty of vram and if the entity is used a lot, 1 texture for 100s of entities makes it a worthwhile tradeoff. Edit: thank you for the corrections, I'm not heavily into game programming/rendering but am familiar with 3D/animation software, but the internals of rendering is really not my specialty so I appreciate being corrected. Cunningham's Law to the rescue yet again :)
- gravitronic 4y agoNow I understand the point of a normal map. Thanks!
- tinco 4y agoWere normal maps new in 2007? I feel I learned about normal maps in around 2005, as a high schooler just hobbying around in Maya. Did they maybe get a head start in PC games, or in raytracing? Maybe my memory is just mixing things up, Mario Galaxy did feel like a state of the art game when it came out although I wouldn't associate the cartoony style with normal maps, maybe that's part of why it doesn't have them.
- capableweb 4y agoI don't think they were. Maybe they were new in gaming, but for the 3D/animation scene they were not new at that point, I remember using them earlier than so, and also using dump and displacement maps which are related concepts.
- FartyMcFarter 4y agoSuper Mario Galaxy ran on the Wii, which had a GPU that is very different from modern GPUs (and very different from even the GPUs of other consoles in that generation i.e. Xbox 360 and PS3). I'm not sure whether using normal maps was feasible/efficient on it.
- masklinn 4y agoAccording to the wiki, the PS2 was the only console of the 6th gen to lack hardware normal mapping (and that’s including the Dreamcast), and all the 7th gen supported it.
- dogma1138 4y agoThe GPU on the Wii supports normal mapping and bump mapping, even the OG Xbox and the Dreamcast and most importantly the Gamecube did. https://www.nintendoworldreport.com/guide/1786/gamecube-faq-ngc-graphical-abilities https://www.nintendoworldreport.com/guide/1786/gamecube-faq-... Quite often it’s not even a question of the GPU itself but the development pipeline and the tooling used. As well as ofc does the engine itself supports it. Also at the end of the day your GPU has finite amount of compute resources many of them are shared across various stages of the rendering pipeline even back at the 6th and 7th gen of consoles where fixed function units were far more common. In fact in many cases even back then if you used more traditional “fixed function pipelines” the driver would still convert things into shaders e.g. hardware T&L even on the Wii was probably done by a vertex shader. Many teams especially in companies that focus far more on gameplay than visuals opted out for simpler pipelines that have fewer variables to manage. It’s much easier to manage the frame budget if you only need to care about how many polygons and textures you use, as if the performance is too low you can reduce the complexity of models or number/size of textures. Shaders and more advanced techniques require far more fine grain optimization especially once you get into deferred or multi pass rendering. So this isn’t hardware, it’s that the team behind it either didn’t want or didn’t need to leverage the use of normal mapping to achieve their design goals.
- mewse 4y ago"Simpler" is maybe a bit of a stretch, since what's happened is that a lot of the data which previously existed in vertices has been moved to substantially higher-detail storage in texture maps. If you weren't using the texture maps, you'd have to have a lot more vertices to compensate and get an acceptable look. In modern games, you often can't really separate the model from the textures the way that you used to. Hell, I have a couple models I render in my game which take their geometry entirely from textures and don't use traditional model vertices to carry their mesh at all. These days you kind of have to consider models and textures to be basically the same thing; just different data sources that get fed into your shader and accessed in different ways, and you can often move data back and forth between them depending on the exact effect you want to get. But I wouldn't call my no-vertex-data models "simpler" than a version which was drawn from a static mesh; all that complexity is still there, it's just being carried in a texture instead of in a vertex buffer object.
- thiht 4y ago> "Simpler" is maybe a bit of a stretch It’s not. The full rendering might not be simpler, but the model is simpler.
- jstimpfle 4y agoThe mesh is simpler.
- qikInNdOutReply 4y agoEh, the low-poly mesh is simpler, the high fidelity mesh to bake out the normal texture is actually more complex then ever.
- gcr 4y agosorry for nitpicking but that's actually a misconception - the GPU doesn't generate intermediate vertices as a result of normal maps! all of that happens in the fragment shader, which only changes how light behaves at the fragments being rendered. Look close and you'll see distortion. a vertex shader could change the geometry or emit intermediate vertices from a displacement map, but my understanding is that that also happens via fragment shader tricks! perhaps you mean the artist's highly detailed mesh used to bake normal maps but those aren't typically shipped out to the user's game engine to save space, it's just an artifact of the artist's production process
- samsaga2 4y agoThe model is simpler, but the render is substantially more complex. You need an high poly model, extract their normal map, convert it to a simpler one and then render the simpler model with a texture and the precalculated normal map through a vertex/fragment shader.
- causality0 4y agoI always thought the "yellow" style coins from games like Mario 64 were much more aesthetically pleasing than the more realistic gold coins of games like Odyssey.
- edflsafoiewq 4y agoMe too. Incidentally, those are just billboards (1 quad) with a grayscale+alpha texture. Vertex colors are used to tint them yellow, red, or blue.
- causality0 4y agoAs far as I know the N64 didn't support quads, just triangles.
- edflsafoiewq 4y agoThat's correct, 1 quad just means 2 tris.
- darkerside 4y agoAs a layman, I notice that the new model makes use of circles while the old model uses straight edge polygons.
- stefncb 4y agoThey're both straight edged, as you can see in the wireframe view. It's just that with modern programmable GPUs you get to fake the roundness. Essentially, in the lighting calculations, instead of using the real normal from the polygon face, you interpolate it with its neighbors, making it look smooth.
- polytely 4y agoOne of the quote tweets linked to this article about the most efficient way to model cylinders, which is pretty interesting: https://www.humus.name/index.php?page=Comments&ID=228 https://www.humus.name/index.php?page=Comments&ID=228
- Aeolun 4y agoThat’s a surprising amount of difference in performance. Wonder if it would still hold true on current GPU’s.
- kame3d 4y agoI was also curious so I just implemented and tried. For circles with 49152 vertices I get (RTX 2070 Super): - max area: ~2600 fps - fan: ~860 fps So it still holds true.
- Aeolun 4y agoCool, thanks! Though given the framerates I can also guess why they didn’t bother for the Mario circles with like 20 segments.
- deleted 4y ago[deleted]
- lmpdev 4y agoI wonder if there's an opportunity down the line as engines get faster for NURBs + modern texture rendering? Especially for geometrically simple shapes like this coin After using Rhino 3D for a while, meshes feel "dirty" I know NURBs would be much slower to render but I think it could be a potential future look for games NB I'm not a game developer or 3D modeller
- throwaway17_17 4y agoOne of the largest problems with moving to anything other than triangles as the rendering primitive is the decades of industry investment in pipelines for producing and hardware (on the player end) designed and optimized to push triangles. There would be huge issue with backwards compatibility for a GPU that defaulted to anything other than triangles, not to mention the graphics API’s designed for those triangle pushers.
- vvilliamperez 4y agoNurbs are not efficient for realtime rendering. There's no reason to encode all that curve data if all you care about in the end is a finite set of pixels rendered on the screen. You can achieve the same level of detail without having to recalculate the surfaces. It's a lot easier for the computer to morph a shape by applying some math function (that's essentially arithmetic) to all the polygon's vertexes. That said, I've seen some 3d artists work in NURBs, then render out to Polygons.
- pezezin 4y agoGPUs have implemented tessellation shaders for a long time now, and they can be used to implement what you describe. The Xbox 360 already had them, but it was too slow at the time so not used much. If I'm not mistaken, later generations have used them extensively.
- mortenjorck 4y agoPerhaps it would satisfy the pedants who have come out in force if the headline read “The in-game model for the coins in Super Mario Odyssey has a mesh that is 65% simpler than in SM Galaxy.” Does that pass muster? Are we now free to appreciate how the clever use of normal maps allowed Nintendo’s artists to counterintuitively decrease poly count across generations of Mario titles?
- Aeolun 4y agoIn the current state of game development I’m not sure if we can call using normal maps very ‘clever’ any more. It’s just par for the course. It’s fun anecdata though, that’s for sure.
- cnity 4y agoI also find terminology games boring and pointless, but there's something quite interesting that lies at (I think) the heart of the debate: people tend to view a mesh as something like the underlying concrete object, and the textures as a mere skin pasted onto the outside. This is evidenced in the way people seem to consider fragment shaders to be a kind of "illusion" or falsehood. But of course, a spoiler: it's "illusions" all the way down. This is not a pipe. A value in a normal map is just as "real" as a face in a mesh (that is, not at all, or entirely so, depending on your perspective).
- ShamelessC 4y agoRight but this is entirely clarified from reading the image posted. Instead people are reacting based on the title here. Not to imply people don’t read the articles here. I would never imply that…
- mortenjorck 4y ago> people tend to view a mesh as something like the underlying concrete object, and the textures as a mere skin pasted onto the outside This is interesting to consider, as it never occurred to me that anyone would think otherwise. I wonder if it's generational. Those who grew up with games whose triangle (or quad, in the case of a certain Sega system) budgets were constrained to the point of clearly distinct mesh faces probably have a different mental model from those for whom baked normals and LOD meshes have always been a continuum.
- ant6n 4y agoI was expecting an article on the changes of the monetary system in the Mario Universe.
- layer8 4y agoShouldn’t that be “simpler by a factor of 2.8” instead of “65% simpler”? The number of triangles is reduced by a factor of 2.8 (268/96). If “simplicity” is the inverse of the number of triangles used, then a 65% increase in simplicity would translate to a reduction of the number of triangles to 1/1.65 = 61%, whereas it’s really 1/2.8 = 36% (which I guess is where the 65% was derived from as 1 – 35%). Just nitpicking about the confusing use of percentages here.
- dragontamer 4y agoFor more information, see this GIF from Wikipedia: https://en.wikipedia.org/wiki/Normal_mapping#/media/File:Rendering_with_normal_mapping.gif https://en.wikipedia.org/wiki/Normal_mapping#/media/File:Ren... The left polygons are "truly" a polygon. The right 4 shapes is this "fake" technique of normal-mapping. https://en.wikipedia.org/wiki/Normal_mapping https://en.wikipedia.org/wiki/Normal_mapping In particular: https://en.wikipedia.org/wiki/Normal_mapping#/media/File:Normal_map_example_with_scene_and_result.png https://en.wikipedia.org/wiki/Normal_mapping#/media/File:Nor... This png makes it more obvious how to "Bake" a proper mesh into a normal map. ---------- Normal mapping looks pretty good, but its obviously not as good as a proper mesh. Still though, normal-mapping is far, far, far cheaper to calculate. In most cases, normal-mapping is "good enough".
- zwkrt 4y agoTIL about Normal Mapping, which to my layman eyes kind of looks like computing a hologram on the flat surface of an object. In the coin example in TFA, even though I now 'know' that the coin is a cylinder, the normal map gives it very convincing coin shape. Cool!
- dragontamer 4y agoSo "classic" rendering, as per DirectX9 (and earlier) is Vertex Shader -> Hardware stuff -> Pixel Shader -> more Hardware stuff -> Screen. (Of course we're in DirectX12U these days, but stuff from 15 years ago are easier to understand, so lets stick with DX9 for this post) The "hardware stuff" is automatic and hard coded. Modern pipelines added more steps / complications (Geometry shaders, Tesselators, etc. etc.), but the Vertex Shader / Pixel Shader steps have remained key to modern graphics since the early 00s. ------------- "Vertex Shader" is a program run on every vertex at the start of the pipeline. This is commonly used to implement wind-effects (ex: moving your vertex left-and-right randomly to simulate wind), among other kinds of effects. You literally move the vertex from its original position to a new one, in a fully customizable way. "Pixel Shader" is a program run on every pixel after the vertexes were figured out (and redundant ones removed). Its one of the last steps as the GPU is calculating the final color of that particular pixel. Normal mapping is just one example of the many kinds of techniques implemented in the Pixel Shading step. ------------- So "Pixel Shaders" are the kinds of programs that "compute a hologram on a flat surface". And its the job of a video game programmer to write pixel shaders to create the many effects you see in video games. Similarly, Vertex Shaders are the many kinds of programs (wind and other effects) that move vertices around at the start of the pipeline.
- pyrolistical 4y agoCould they have striped odyssey coin to further reduce the vetex buffer?
- wlesieutre 4y agoThe details within the object can look great but you'll see the low vertex count in the shape of its silhouette
- bitwize 4y agoShaders can compensate for a lot of geometry. The humans in Doom 3 look like formless mudmen on the lowest graphic settings, but with all the intended shaders applied, detail emerges.
- butz 4y agoCould we "3D golf" to make coins looking the same, but using even less vertices?
- cdev_gl 4y agoAbsolutely. The minimal mesh is just 3 triangles rendering a 3D texture that contains depth information that gets raytraced in a shader. Or you could send a single point vertex over and have a geometry shader generate the geometry vertices for you. Or you could reduce the texture complexity to a 2D texture without raytracing if you defined the coin mathematically in the shader. Heck, you could get rid of the texture entirely and just do everything with math in the shader. 3D graphics used to require rigid hardware distinctions between vertices and textures and etc, but in modern pipelines it's pretty much all data and the programmer decides what to do with it.
- charlieyu1 4y agoI’m actually curious, can we use native circles/curves/spheres for rendering instead of polygons in a 3D engine? Is it at least technically feasible?
- Arch485 4y agoIt's completely doable, but most modeling software is built to produce triagonal meshes, and most graphics cards are optimized to render triagonal meshes.
- feiss 4y agoYou can use SDFs (signed distance functions) to express your objects in a mathematical form. It has its pros and cons. One of the bigger cons is that most tools use the polygonal approach, so you'd have to build a lot from scratch. Lots of SDF examples in ShaderToy[2], and many introductory videos on YouTube (I specially recommend Inigo Quilez's channel[2] --co-creator of [1]--, and The Art of Code [3]) [1] https://www.shadertoy.com/ https://www.shadertoy.com/ [2] https://www.youtube.com/channel/UCdmAhiG8HQDlz8uyekw4ENw https://www.youtube.com/channel/UCdmAhiG8HQDlz8uyekw4ENw [3] https://youtu.be/PGtv-dBi2wE https://youtu.be/PGtv-dBi2wE
- thedrbrian 4y agoHere’s a stupid question from someone who doesn’t do this for a living. Which one is most efficient? As a MEng I’d think the more polygons would be as you’re just rendering simple shapes but more of them. The other simple disc is more power hungry because it requires some special bits on a graphics card or whatever.
- Arch485 4y agoIt largely depends, but in general normal maps are faster to render. GPUs can parallelize that type of task better than rendering triangles.
- LarsDu88 4y agoThis is new news for people? This tech has been around since before DOOM3 (2003, 20 years ago!) As someone developing a VR game on the side who does all the models in blender myself, modeling in high res then baking to normal maps is a time consuming pain the the ass.
- chungy 4y agoCoins appear very seldomly in Mario Galaxy, whereas they are in abundance in Odyssey. I have doubts the Wii would have coped with the Galaxy coin model if so many appeared all at once. :)
- xg15 4y agoSo far I found most purely normal/depth map based effects disappointing: Yes, they kook amazing when you look at the object frontally and sufficiently far away. But especially if you look from the side, the effect falls flat because occlusion and silhouettes are still following the model, not the textures. Not sure if this has changed in recent years though.
- xg15 4y ago*look
- pcwalton 4y agoAs pointed out by Matias Goldberg [1], neither model is particularly optimized, however. They produce too many sliver triangles. The max-area approach [2] was brought up as an alternative that can significantly improve shading performance. I'd like to see benchmarks against constrained Delaunay triangulations too, which also tend to reduce sliver triangles and have some potential advantages over the greedy max-area approach because they distribute the large areas over many big triangles instead of leaving a few slivers around the edges. (Of course, none of this would be likely to improve FPS in the game, but it's an interesting computational geometry problem nonetheless.) [1]: https://twitter.com/matiasgoldberg/status/1636504187079995392 https://twitter.com/matiasgoldberg/status/163650418707999539... [2]: https://www.humus.name/index.php?page=Comments&ID=228 https://www.humus.name/index.php?page=Comments&ID=228
- Animats 4y agoI saw that yesterday in a graphics forum. Question: is there an existing level of detail generation system, preferably open source, which can take a high-detail mesh, vertex normals, and a normal map, and emit a lower level of detail mesh, with vertex normals and a new normal map which looks the same? (LOD generators tend to be either expensive, like Simplygon, or academic and brittle, blowing up on some meshes.)
- Jasper_ 4y agoThe traditional process is building a high-poly mesh and a low-poly mesh by hand, and using your 3DCG tool to bake from one onto the other. For instance, in Maya, this is done using the "Transfer Maps" tool [0]. The high-poly mesh can come from a tool like Z-Brush. For various productions reasons, we want to build the low-poly mesh by hand. Managing topology is key to maintain a good deformation, and you as the artist probably know all the areas that will need more vertex density. As things make their way down the rigging/animation pipeline, automated tools really just don't cut it. [0] https://help.autodesk.com/view/MAYAUL/2022/ENU/?guid=GUID-B011A4BC-1B7A-4EC3-9B73-BCF744886C84 https://help.autodesk.com/view/MAYAUL/2022/ENU/?guid=GUID-B0...
- rgj 4y agoIn 1993 had an exam for my MSc Computer Sciences, course “3D graphics”. To my despair, the exam turned out to consist of only a single question. Question: write code to approach a sphere using triangular planes so the model can be used in rendering a scene. I didn’t get to that specific chapter, so I had no idea. My answer consisted of a single sentence: I won’t do that, this is useless, let’s just use the sphere, it’s way more efficient and more detailed. And I turned it in. I got an A+.
- ClassyJacket 4y agoNURBS FTW
- rasz 4y ago200 -> 100 triangles, but we replace gourad shading with complex per pixel computations (pixel shaders, or TEV in case of wii).
- psychphysic 4y agoIf you like this stuff Kaze Emanuar does loads of neat work with the super mario 64 decompiled code. https://youtu.be/t_rzYnXEQlE https://youtu.be/t_rzYnXEQlE Loads of interesting quirks of the N64 to do with slow bus.