Time Nick Message 08:31 sfan5 <_devsh_> ------- also do you have a "blackhole render" mode ? 08:31 sfan5 we don't 09:51 sfan5 the primary problem is that we don't have anyone experienced enough in graphics to implement even half the techniques you have suggested in the last days 09:51 sfan5 that would normally be the "dedicated graphics person", which we haven't had for years 09:55 rubenwardy they see 'opengl 1.0' and run away screaming 10:04 sfan5 after reading https://learnopengl.com/Advanced-OpenGL/Advanced-GLSL it sounds like this would maybe save us 50 glUniform* calls per frame since we don't have a huge amount of unique shaders in use. so good in principle, but won't have much performance impact. 10:05 sfan5 did I miss something? is this even correct? I can't tell 10:06 sfan5 (maybe it was meant in context of skinning, idk) 10:15 sfan5 if it was about skinning then I suppose every model could keep its own UBO with skinning related data and that can simply be used and updated as needed. would be very inefficient with uniforms. 10:20 MTDiscord Is that 50 gluniform calls per frame or per mesh? 10:23 sfan5 frame 10:25 sfan5 each shader has its own set of uniforms. with the use case described in the article an UBO would make sense for rarely changing global stuff 10:25 sfan5 so instead of updating stuff per-variable per-shader there'd be just one global UBO with the variables inside 10:25 sfan5 (rarely changing = once per frame) 10:28 MTDiscord How hard would it be to stream all those uniforms for each mesh in one struct array with indirect draw, so it's not clogging the pcie bridge, with how the current landscape is, in the opengl 3.1 driver? 10:32 MTDiscord glDrawElementsIndirect is 4.0 hmm 10:32 MTDiscord Probably has an extension somewhere 10:33 MTDiscord I can already see, the sun position, the camera matrix, stuff like that as ubo 10:38 MTDiscord I'm tripping over myself a bit because I am trying to think about the different GL versions support at the same time I am proposing ideas, a bit frustrating 13:23 MinetestBot 02[git] 04sfan5 -> 03minetest/minetest: Refactor ScriptApiSecurity for cleaner separation of concerns 131fd4e0b https://github.com/minetest/minetest/commit/1fd4e0b82dd4e15aef0025eccdcb3bc984f70d9d (152024-11-13T13:22:41Z) 13:23 MinetestBot 02[git] 04sfan5 -> 03minetest/minetest: Implement script sandboxing for main menu 13ea4ae55 https://github.com/minetest/minetest/commit/ea4ae55e24d2c27524490cb8e0d3c34aa46e3da3 (152024-11-13T13:22:41Z) 13:23 MinetestBot 02[git] 04grorp -> 03minetest/minetest: Replace forgotten SEvent memset 1311e04ec https://github.com/minetest/minetest/commit/11e04ec1136f9cd37817a2e129770fe463f2aea1 (152024-11-13T13:23:13Z) 13:23 MinetestBot 02[git] 04veprogames -> 03minetest/minetest: Change minetest.net to luanti.org in 'Further documentation' 130fde9ab https://github.com/minetest/minetest/commit/0fde9ab7e84490914a7e22fe674f1de237c3a674 (152024-11-13T13:23:39Z) 13:26 MinetestBot 02[git] 04sfan5 -> 03minetest/minetest: Drop fixed pipeline support code (#15421) 13794aea8 https://github.com/minetest/minetest/commit/794aea8e92b9f06d3118f65223729b92b505568a (152024-11-13T13:24:01Z) 13:45 MTDiscord there we go 16:01 erle end of an era 17:20 [ rip luanti 17:32 SFENCE Zughy: I have macOS. 17:44 MTDiscord I'm sorry about that 17:45 erle luatic i believe you are wrong here about “barely playable”. i have gotten better performance than the issue submitter on worse hardware. https://github.com/minetest/minetest/issues/15433#issuecomment-2474309928 17:46 MTDiscord erle: the "barely playable" remark is about the FPS reported here specifically - i consider 22 FPS barely playable. 17:46 [ I also got better performance when I tested on 5.6.1 on the other computer 17:46 erle luatic i got more fps without shaders, but a larger drop. like rendering time 6ms to 60ms. 17:47 [ It's probably to do with the fact that I tested in different worlds (looking at different things) and it being a debug build 17:47 erle [ i have an idea 17:47 erle [ see if you get more performance out of your intel integrated GPU by starting the game with MESA_GL_VERSION_OVERRIDE=1.4 MESA_EXTENSION_MAX_YEAR=2005 17:48 erle this should report the bare minimum that makes it runnable (if you have shaders disabled, otherwise you get a crash) 17:48 erle but it should look the same (if you are not using any fancy effects, which you are not, because you are not using the shaders) 17:48 sfan5 in the best case we'll make generaly performance improvements in the future, which you will also benefit from 17:49 MinetestBot 02[git] 04sfan5 -> 03minetest/minetest: Fix mainmenu settings crash caused by last commit 130c3117f https://github.com/minetest/minetest/commit/0c3117f9b32624955846314ebf87f757d124184f (152024-11-13T17:39:10Z) 17:50 MTDiscord [: ideally don't test performance on debug builds. that includes rendering performance, because our rendering may be largely CPU-bound. 17:50 MTDiscord in my experience, noticeable performance differences between debug and release builds is quite rare, at least. 17:50 erle luatic 22 to 25fps was in old magazines like “PC games” etc. as “ruckelt, aber spielbar” lol 17:51 MTDiscord It can be HUGE 17:51 MTDiscord it could be huge, but it's almost always nothing 17:51 sfan5 I think our debug builds are not -O0 anymore? 17:51 MTDiscord that's not what i'm feeling tbh, release builds generally feel smooth for me, debug builds don't 17:52 erle in my experience, everyone who has not tried something is full of shit about performance on some hardware. i have had people ask how i even use firefox with 2GB RAM who only ever used chrome (which will gobble up RAM like it is going out of fashion) 17:52 MTDiscord Is it fair to say that RelWithDebInfo releases are closer to release than debug builds in terms of performance? 17:53 sfan5 of course 17:53 sfan5 because debug information doesn't cost anything except larger binaries 17:54 erle sanitizers definitely cost something, otherwise i have not noticed anything weird 17:55 MTDiscord If I make a RelWithDebInfo build and then just strip the binary, does that get me pretty close to what I'd get with a simple Release build? 17:57 sfan5 yes 17:57 erle [ given that the game ran better on intel GMA 950 (GMA generation 3) someone is probably doing *something* wrong if you only get 22 fps on intel GMA 4500 (GMA generation 4). unless i am mistaken about chipsets getting better. 17:57 erle [ have you tried that thing i suggested? 17:57 [ I'm still compiling a release build 17:58 MTDiscord Probably memory latency, needing to go into ram more often 17:58 sfan5 note that LTO builds generally take more time, so disable that if you have a slow machine 17:58 sfan5 (we enable that by default) 17:58 erle [ disable LTO, it takes forever 17:59 MTDiscord Try mold 18:11 [ erle: what viewrange do you use? 18:11 [ neither those environment variables nor using a release build seems to help much 18:12 [ with 50 viewrange I do get 30 fps 18:12 erle [ 50 to 200, depending on what game i want to play. nodecore does not benefit from a large view range. what do you use? 18:12 erle in fact, nodecore is the anti-exploration game. i only explore to get some [spoiler] ore 18:12 [ I was testing with 100 18:13 erle do you notice *any* perf impact of the env variables? 18:15 [ no 18:15 erle [ do you have different performance for joining servers vs playing locally? 18:16 erle like, on weak machines sometimes the mapgen starves out everythin else for some games that have bad mapgen 18:16 erle but this has always been the case and is an issue of the game 18:16 erle not the engine 18:26 [ erle: it's hard to compare because the worlds are different 18:26 erle [ you will be able to figure out if you get 20fps (borderline unplayable) or 30fps (what i think you should get) though? 18:27 erle like use some game that is not very dynamic, like nodecore or so 18:27 erle or minetest_game without mods 18:28 MTDiscord Wait the gma 950 has windows xp drivers available 18:30 MTDiscord Dude, that GPU has 4 pixel shaders. I'm not sure how you're even getting that many fps 18:31 MTDiscord Are you running a Celeron D? 18:31 erle LOUD INCORRECT GENDER BUZZER 18:31 [ it varies 18:31 MTDiscord So it's a Celeron D then 18:31 erle jordan4ibanez, it's a classic gamer thing. you could see that in the mineclone2 issue tracker as well. 18:32 erle remember the time when i opened an issue about some legit perf issue and everyone started saying “nah, your hardware is garbage” and then it was retitled to “post your computers specs”? gamers, as a group, can't do otherwise. the perf issue was legit and fixed btw. 18:32 erle (on the mineclone2 issue tracker, mind you) 18:33 MTDiscord A classic gamer thing? Then why not retire it to play classic games? 18:33 erle classic as in “devs who are gamers” 18:33 MTDiscord lol 18:34 MTDiscord That hardware is old enough to buy cigarettes 18:34 erle curiously, i have never seen this for any non-gaming software that people *insist* it can not possible run some software 18:34 erle hardware 18:34 erle sorry 18:34 erle curiously, i have never seen this for any non-gaming software that people *insist* it can not possible run some hardware [fixed the statement] 18:35 erle or rather, gamers sometimes do 18:35 erle but not the devs of said software 18:35 MTDiscord You're obviously running the game, yes? Maybe you could invest in a raspberry pi model 2 and double your fps lol 18:35 erle or people intimately familiar with it 18:36 erle like no one is saying “you can't possibly run wayland on an old thinkpad” (because you can) or “you can't possibly run blender on that hardware” (because blender deprecates stuff so fast that a lot of people basically stay on an old version, so it is clear what works and what not) 18:37 [ new versions of blender won't run on that hardware (unless you do software rendering) 18:37 MTDiscord I think you don't understand, you're basically proposing that we attempt to make a stock Suzuki Cultus run on pikes peak at above 50 kph lol 18:37 erle jordan4ibanez i am currently waiting for replacement batteries for my reform 2 to be delivered so i can use it again 18:38 MTDiscord I'm sure windowmaker will run very well on it 18:38 erle see, you are doing it again 18:40 MTDiscord https://tenor.com/view/dog-eyebrow-funny-eyebrow-raise-gif-13185653 18:40 erle jordan4ibanez i think YOU don't understand. if you develop on hardware that is much better (or simply different) than what at least some of your users have, you end up breaking that stuff *unless* you structure your code so that everything is additive (as in progressive enhancement) 18:41 erle jordan4ibanez as an example, i have built a python-based synthesizer library, called libglitch, many years ago. i used the worst machine i could grab to test it and optimized it, because any lag would create stuttering sound. 18:41 MTDiscord Well, I'm sure if it were 2010 I'd greatly consider 950 as part of my target for legacy windows xp users 18:41 erle i don't actually think you get the same performance on windows as on linux actually 18:42 MTDiscord Why did you make something in python if performance was critical? 18:42 erle because it was easy 18:42 erle and you can optimize python stuff to make sure the compute intensive things use fast c code 18:43 erle but mainly, by constraining myself to the shittiest laptop i could find, i made sure i do not accidentally metaphorically paint myself into a corner 18:43 erle i *could* have made that app with C + SDL 18:43 [ GMA 4500 MHD is important because it is the most recent GPU in RYF hardware 18:44 erle [ important to you. not important to any of the devs, apparently. and this has been a thing for a while. 18:44 MTDiscord It's also very easy to go out on trash day and find a pc to upgrade your rig with, that's how I got my first upgrade from an athlon ii 220 to a core 2 duo 18:44 [ it's important for software freedom 18:44 MTDiscord Listen, there is react os and freedos for the ancient hardware, freedom is good 18:44 erle jordan4ibanez i have core duo! 18:45 erle jordan4ibanez i gave you the meme, cut the crap. 18:45 MTDiscord It's not crap, this is so out of touch I think it might be pulling me into another dimension 18:45 [ newer hardware is simply not usable without compromising on software freedom 18:46 MTDiscord erle: the people demand more memes 18:46 MTDiscord your hardware was never free to begin with 18:47 MTDiscord I can't believe it was said verbatim 18:47 MTDiscord "free software" hardware is an arbitrary puristic requirement 18:47 sfan5 what's "RYF" hardware? 18:47 MTDiscord like pure functional programming 18:47 MTDiscord Just ignore those proprietary bits of firmware in there, you didn't see anything 18:47 sfan5 If I had that blog post lying around where someone criticized the fsf free software definition I'd post it 18:48 ROllerozxa "respects your freedom", which is mostly an arbitrary decision from the FSF whether the hardware is rubberstamped by them or not 18:49 MTDiscord Your hard drive control board better have the C code posted on github under a gpl compatible license or I'm going to be very disappointed 18:49 erle [ going with the theme of jordan4ibanez you should obviously pony up money to buy a MNT reform 2 or MNT reform NXT 18:49 erle NEXT 18:49 sfan5 anyway MNT Reform might be more up your alley if you like freedom 18:49 erle until the devs decide that the MNT reform is “too old” obviously 18:49 MTDiscord Literally, any website, 20 dollars, buy something that's about to be thrown away 18:50 erle jordan4ibanez it's actually not that easy. 4:3 matte monitors in laptops died out around >10 years ago 18:50 MTDiscord You're lucky you never got into itanium or you would still be very mad at Linus torvalds 18:50 erle you either get 16:9 or, rarely (chromebooks) 3:2 18:50 erle and almost all glossy 18:51 erle anyway, “buy new hardware” is almost always the gamer response to removing functionality people use 18:51 MTDiscord Literally, first generation i3, bam you have an upgrade for like 10 dollars 18:51 erle jordan4ibanez wdym? 18:51 erle i3 is a window manager? 18:51 MTDiscord Gamer response? When your hardware is in historical documents it might be time to upgrade 18:52 erle is it possible to tell the bridge i want to selectively ignore one user? 18:52 [ ignores are client-side 18:52 [ some clients have regex filters 18:52 MTDiscord The gma 950 is 19 years old :D 18:53 [ I actually do have a thinkpad t440p which supports opengl 4.6, but unfortunately it requires (neutered) intel ME and so isn't entirely an upgrade 18:56 MTDiscord Well without minix there would be no Linux, and ME is Minix, so just think of it as a family reunion 18:58 [ it's not minix in this generation yet, that started with skylake 18:58 erle [ don't feed the troll 18:59 [ it's threadx running on ARC 18:59 erle [ IIRC when i found a bug in mineclone2 that crashed clamity, jordan4ibanez abused that bug and made a youtube video about it, “crashing clamity like a maniac”. 18:59 erle (crashing the server is one of the few things that are forbidden on anarchy servers) 19:01 erle [ given the generally unhelpful responses, i guess forking is the only reasonable response. 19:09 MTDiscord So you're going to redirect the fact that you're getting frustrated that your hardware that came out before windows vista was even a thought doesn't run minetest smoothly because you don't want to run Intel management engine by bringing up a mistake I apologized for? 19:10 MTDiscord Let's put it this way, I realized I was erranous in my procedure and moved on, you're still using hardware that was out before "does it run crysis" was a meme, you're stuck 19:12 MTDiscord The hypocrisy of using closed source hardware with one strawman in it to stand on your mighty hill and claim fsf approval is very sad 19:13 MTDiscord It's quite obvious Intel needed that management engine, look at how their hardware runs without it 19:13 [ what are you talking about? 19:14 [ are you confusing the ME with microcode? 19:14 MTDiscord You know exactly what I'm talking about, and if you don't, you shouldn't be so concerned about the management engine 19:15 [ No, I don't. 19:15 [ It doesn't run without the ME only because they intentionally made it not run without the ME 19:17 MTDiscord Well actually, that brings up a great question. Why don't you get AMD hardware then? 19:17 [ AMD is no better, in fact it's worse because there's no equivalent of me_cleaner for the PSP (AMD's ME equivalent) 19:17 [ https://libreboot.org/faq.html#amd 19:18 MTDiscord Another strawman 19:18 [ How is that a strawman? 19:18 sfan5 i think it's safe to say the freedom you're looking for is at a dead end on x86 19:19 MTDiscord Why not use arm64? There's plenty of support 19:19 [ sfan5: There's a bug in MEv12 that allows arbitrary code execution in the ME. Someone just needs to write a free ME replacement and free raminit for kabylake. 19:20 MTDiscord You know, and I know, and the person reading this knows, good luck with getting that in the next few years 19:21 [ Most performant ARM hardware requires blobs. RK3399 can run blobless but it has worse single core performance than my core 2 duo and only supports 4GB RAM 19:21 MTDiscord Well they're on version 16 of ME now 19:23 [ The latest intel hardware is even worse: it requires nonfree firmware for the GPU 19:23 MTDiscord So, you refuse to enjoy your hardware that can actually play the game, but you still use that hardware anyways 19:23 MTDiscord So firmware is now an issue again 19:24 MTDiscord Look at the firmware chips inside your current setup and go try to find any source code for them 19:57 ireallyhateirc can I do UV animation in Luanti? 19:58 ireallyhateirc I for example have a color palette and clothes with colorful parts unwrapped in a way that places each part on a single pixel 19:59 ireallyhateirc so with UV animation I could swap colors 20:01 ireallyhateirc alternatively I could have atlas with multiple face variants and swap them 20:25 MTDiscord ireallyhateirc: not really, unfortunately. for the future, would you be able to leverage morph animations (https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#morph-targets) if we implemented them? 20:26 ireallyhateirc I need to understand what they are first 20:28 ireallyhateirc my use case is animating face textures all inside blender without having to redo the animations in Luanti 20:29 ireallyhateirc so if the morph thing would allow me to do that then yes 20:57 MTDiscord <_devsh_> You want programmable pulling for that 20:59 ireallyhateirc programmable pulling? 20:59 ireallyhateirc the current plan was to animate in Blender and write an addon to export the animations to Luanti somehow 21:00 ireallyhateirc alternatively I could hide all eye/face textures in the head and control them with bones 21:02 MTDiscord <_devsh_> Indirect draw is GL 4.x 21:03 MTDiscord <_devsh_> In gltf every morph target is a separate set of vertex positions and normals 21:04 MTDiscord <_devsh_> The animations can access any target arbitrarily and interpolate between them 21:04 MTDiscord <_devsh_> You will run out of HW vertex attribute bindings 21:05 MTDiscord <_devsh_> Also it's super wasteful to pump 8 or 16 attributes if you don't need them at a given moment 21:05 MTDiscord <_devsh_> Hence "programmable vertex pulling" Google it, it's a well known term 21:06 MTDiscord <_devsh_> You know you could just have a uint8_t vertex coordinate and sample a 1D texture or a texel Buffer instead? 21:08 MTDiscord <_devsh_> I used to play WoW classic in the gma 950, that GPU is such a piece of shit it couldn't render WoW with a dx9 nor OpenGL backend properly 21:11 MTDiscord <_devsh_> Make a black hole render mode, conditionally omit every call to glDraw, then you'll see pure CPU overhead 21:13 MTDiscord <_devsh_> Have you actually put a static variable counter next to the glUniform calls to find out how many times they get called per frame? Or a counter next to glUseProgram (or whatever GL 1.4-2.1 uses to bind a shader)? 21:14 MTDiscord <_devsh_> Unless multiple (all) meshes share a buffer it might be just as bad as sending the bones with glUniform call 21:15 MTDiscord irc doesnt get context of what your replying to/edits fyi 21:15 MTDiscord <_devsh_> That's unhelpful 22:03 erle alternatively I could hide all eye/face textures in the head and control them with bones 22:03 erle i love how hacky that is 22:05 MTDiscord you can't because we only support linear animation 22:05 MTDiscord i considered bringing it up but that reason is why it's not an option 22:06 MTDiscord i will probably implement no interpolation for gltf soon though 22:06 erle you will implement no interpolation? is this like the eastern block joke? 22:06 MTDiscord it's a feature where you can turn interpolation off on some channels 22:07 erle sales person is asked “you don't have any meat, do you?” and answers “no, this is where we have no fish. the store across the street has no meat.” 22:08 erle _devsh_ GMA 950 is plenty for rendering some virtual legos though. or playing earth 2150 or quake or whatever. 22:09 erle luatic have you thought upstreaming your gltf work to irrlicht? not out of the good of your heart, but because then more people take a look at it (and maybe you get sth back) 22:11 erle i made a self-igniting smelter in nodecore. the lenses redirect the light in a circle (this was difficult to achieve using only lenses) and ignite the fuel by means of focused lenses https://mister-muffin.de/p/YKDs.jpg 22:12 erle (rendered using opengl 1.4? lol) 22:16 ireallyhateirc @_devsh_, all that sounds advanced and I'm probably too dumb to comprehend that but sounds like a trouble 22:17 erle i have also made a coal creation station: the focused lens sets the log on fire. logs float. coal is a falling block. coal falls into water and extinguishes: https://mister-muffin.de/p/fmCW.jpg 22:18 ireallyhateirc sounds like the best solution for now is going to be waiting for non-linear animation and exporting face data to Luanti so it can then pick the proper face texture 22:19 erle ireallyhateirc what mod/game are you working on? 22:20 ireallyhateirc I'm an Exile contributor and the thing I'm working on is going to be for my WIP horror game called "Perfect City" 22:20 ireallyhateirc there's nothing but a few nodes, a half-working road procedural generator and a story: https://codeberg.org/perfect_city_game_studio/perfect_city 22:20 ireallyhateirc the story is also 10% finished 22:21 ireallyhateirc that's one of the characters I'm working on currently: https://files.catbox.moe/icyrm2.png 22:22 ireallyhateirc eyes and lips are implemented as a separate materials and textures 22:23 ireallyhateirc (without "a") 22:24 ireallyhateirc I'm a masochist so even the hoodie is rigged 22:24 ireallyhateirc there's the "on" state when the hood tracks the head and the "off" state when the hood tracks the torso 22:27 MTDiscord <_devsh_> @erle nobody will take a look at it except for CuteAlien 22:28 erle ireallyhateirc what do you think of the mm3d modeler 22:30 MTDiscord <_devsh_> Yes like 2000 Legos tops, if that's the look and aesthetic you want to stay with forever, that's cool. But don't expect to be able to do huge draw distances or fancy graphics on RTX 4060, ever. 22:31 MTDiscord <_devsh_> In which case I invite you to delete the Shadow mapping code : P 22:31 erle _devsh_ sorry, which view distance is like 2000 legos? 22:32 ireallyhateirc erle, no idea what that is 22:32 MTDiscord <_devsh_> I'm exaggerating, the gma 950 can probably draw like 200k tris 22:32 MTDiscord <_devsh_> Let me pull up the spec sheet 22:33 erle ireallyhateirc a 3d model editing program https://clover.moe/mm3d/ 22:33 ireallyhateirc I'm using blender 22:34 ireallyhateirc hard to judge just by looking at it, but looks obscure and most likely doesn't have as many features as blender 22:35 erle ireallyhateirc definitely not. i just used it for some stuff regarding mineclonia 22:35 ireallyhateirc blender is pretty straightforward and there is a ton of tutorials for it 22:36 erle look, i am not trying to convince you to use anything else. i was trying to ask what you think of that program. obviously you think nothing of it. 22:40 ireallyhateirc yeah, I understand 22:41 ireallyhateirc looks really basic at first glance and that's it 22:43 erle i think i used it to automatically merge surfaces 22:43 erle because i noticed some model having way to many triangles 22:44 ireallyhateirc yeah it's a common beginner mistake 22:44 ireallyhateirc I once opened a sofa model from Sweet Home 3D 22:45 ireallyhateirc the mesh had a really ugly topology and like 10 times the vertices needed 22:45 MTDiscord <_devsh_> Erle, the gma 950 is a horrible GPU It's actually old enough for "shaders" to be slower than fixed function, because it doesn't have unified shader cores. It kinda claims 62.5M vertices per second peak throughput which mean about 500k block faces at 30 FPS. However such numbers are usually given for the most puny of vertices, so I'm kinda guessing that this 520k number is only valid for something like a position only attribute vertex 22:45 MTDiscord and probably in some compressed 4 byte format not full 12 bytes per vert. So for crappy irrlicht format vertices this throughput is probably 9x less, and even if you did all the compression "right" you'd still come out at about 8 bytes per vertex. With the default irrlicht vertex format you won't get past a hard 64k Tri limit per frame on a gma 950. 22:46 MTDiscord <_devsh_> By comparison a recent desktop GPU can draw somewhere in the order of 30-120M tris per frame 22:47 MTDiscord <_devsh_> Without culling 22:47 erle _devsh_ that sounds plenty for the amount of surface i am seeing in the game though? 22:47 ireallyhateirc in blender I simply merge points by distance every now and then 22:48 erle like, even if i pessimistically assume that 1 node is 6 triangles (because i see 3 faces) or 12 (because i see all the faces), it's plenty? 22:48 MTDiscord <_devsh_> 64k is the triangle budget for a skinned character model in Gears of War, an Xbox 360 game 22:49 erle sure buddy, but i am pretty sure that i haven't seen a 64k model in block game world, like, ever 22:50 MTDiscord <_devsh_> Your worst case scenario is a diagonally sloped terrain which can't be greedy meshed 22:50 erle also aren't high-poly models compiled down to low-poly models that have bump maps or so? 22:50 MTDiscord <_devsh_> Yes but the high poly gears models were 12M tris 22:50 erle actually my worst case scenario is lots of node boxes. i made the “studs” mod. 22:50 erle it adds 4 small boxes to each node 22:51 MTDiscord <_devsh_> Well anyway for that slope or checkerboard patter (one block up, one down) you get 3 tris per block 22:52 ireallyhateirc my character is 17K tris for now, but I didn't remove redundant vertices yet (skin under clothes) 22:52 erle yeah and at view distance 100 that entire pattern fits in the budget width a lot to spare? 22:52 ireallyhateirc so I should be able to cut it down to 10K 22:52 erle with 22:52 MTDiscord <_devsh_> No your view distance caps out at 50 if you're still using a 36 byte vertex 22:53 MTDiscord <_devsh_> 100 is best case with optimized vertex format 22:53 erle _devsh_ guess i never ran into people who make the most pessimistic landscape 22:53 erle well, people used particle spam lag to lag out clients 22:53 erle and they used huge glass/water structures to lower fps 22:54 erle but plain territory? nope 22:54 MTDiscord <_devsh_> Well whenever your landscape is greedy meshed you have the polycount of mobs, particles and other stuff to worry about 22:55 sfan5 <_devsh_> Have you actually put a static variable counter next to the glUniform calls to find out how many times they get called per frame? 22:55 sfan5 just did. it's 750 22:57 MTDiscord <_devsh_> That's every glUniform call in the whole frame? 22:57 sfan5 yes 22:58 MTDiscord <_devsh_> Not bad, you might actually fit in a single UBO for the whole scene 22:59 sfan5 nevermind I missed some 22:59 sfan5 but it's not like most will stay static during the entire frame, will they? 23:00 MTDiscord <_devsh_> Mind you that you still need to know what offset to use the UBO at, so this can often mean rebinding the buffer at a different offset or having to set at least one glUniform anyway 23:00 sfan5 okay new figure: it's more like 1200 23:00 MTDiscord <_devsh_> No they will not stay static, your largest ones are the MVP and Normal matrices 23:00 MTDiscord <_devsh_> They change almost every draw 23:01 MTDiscord <_devsh_> Also there's a few nasty thing that irrlicht does like abusing the uniform setting function for texture slot speccing 23:01 MTDiscord <_devsh_> One should use explicit bindings and locations in the Glsl source 23:04 MTDiscord <_devsh_> Erle the gma 950 has peak triangle rate of 41 Million, Adreno phone GPUs can routinely do 10-50x more 23:04 sfan5 to verify my understanding: the main advantage of UBOs is for variables that stay the same when switching between programs? 23:05 erle _devsh_ given that usually the naive way vs the optimized way to do something is like one or two orders of magnitude, maybe that is not important for a game that looks basically like it did 10 years ago? 23:05 erle _devsh_ i don't know what you want to convince me of. i know more modern GPUs are faster/better/harder/stronger. 23:06 erle i'm just not playing gears of war 23:06 MTDiscord <_devsh_> If you want to keep that look and scale , why are you even looking into doing anything with irrlicht or shaders 23:07 MTDiscord <_devsh_> Pick your best DirectX 8 or 9 emulator and go brrr 23:08 MTDiscord <_devsh_> Sfan5 it's complicated, if you only use a few uniforms here and there and you don't dynamically index them, they can get preloaded as registers and GPU is happy and goes brrr 23:08 erle _devsh_ actually i just want to continue playing one of the few games i enjoy and i hate that this means i have to backport API changes eventually. 23:09 MTDiscord <_devsh_> In Vulkan land it's more explicit where the line is, you get 128 bytes of push constant data and that's it 23:09 erle _devsh_ but i hope there are enough CSM API enthusiasts that it can be viable somewhat 23:09 MTDiscord <_devsh_> Also you can't index arrays of push constants 23:09 sfan5 I see 23:10 MTDiscord <_devsh_> However each time you change them before a draw, the driver needs to make temporary copies 23:10 MTDiscord <_devsh_> So it's kinda building something similar to a UBO behind your back 23:11 MTDiscord <_devsh_> This is also explicit in vulkan because you have a command buffer and a pool that backs it and grows 23:12 MTDiscord <_devsh_> But Vulkan is more sane, because the setPushConstans command is actually a memcpy 23:12 MTDiscord <_devsh_> And in the shader your declare what struct variable lays at what offset 23:13 MTDiscord <_devsh_> Whereas the dx9-10 and OpenGL way of setting uniforms is kinda like trying to serialise your push constants to JSON and driver unserialising back 23:13 MTDiscord <_devsh_> As you obviously know you kinda have to call glUniform on each variable identifier separately 23:15 sfan5 yea 23:15 MTDiscord <_devsh_> As you can imagine a simple memcpy of 128 bytes (mind you, this is barely enough to fit MVP and Normal matrix) is a lot faster than sending each thing dword by dword or mat4 at a time 23:16 MTDiscord <_devsh_> The other thing is that in GL driver guesses which uniforms benefit from being in registers more than others 23:16 sfan5 so what I am gathering is it has advantages even if you have a big burst of changes before every draw 23:16 MTDiscord <_devsh_> In Vk it's simple, shit with lower byte offset wins 23:16 sfan5 (unless 20x glBufferSubData is just as bad as 20x glUniform?) 23:16 sfan5 anyway, bed time for me 23:16 MTDiscord <_devsh_> It's worse 23:16 MTDiscord <_devsh_> Far worse 23:17 MTDiscord <_devsh_> The optimum is actually to manage buffers explicitly 23:17 MTDiscord <_devsh_> So you build one UBO for whole frame in your app 23:18 MTDiscord <_devsh_> And you upload the draw data for all draws at once 23:18 MTDiscord <_devsh_> But this requires rm irr/video/* 23:20 MTDiscord <_devsh_> Since irrlicht has Uber rtrd coupling between the scene graph and drawing logic 23:21 MTDiscord <_devsh_> It almost draws in immediate mode, seriously not far off glBegin and glEnd 23:22 MTDiscord <_devsh_> You have to go in and change the way the drawcalls are emitted during scene graph traversal, sort them properly in the order of state change expense, etc. 23:23 MTDiscord <_devsh_> Then do multiple passes over the draw lists, e.g. prep the shader constants first, then issue draws 23:23 erle _devsh_ finally someone who shares my opinion on “changing materials often during drawing” 23:23 erle (don't do it) 23:23 sfan5 we do this kind of manual management for the map drawing 23:24 MTDiscord <_devsh_> The way it's supposed to be done is that you produce a soup of draw call structs, sort, and then do gl calls 23:24 MTDiscord <_devsh_> https://github.com/Devsh-Graphics-Programming/Nabla/blob/master/include/nbl/video/utilities/CSubpassKiln.h 23:25 MTDiscord <_devsh_> Just sorting my drawcalls got me 25% FPS increase on a very simple sponza render in GL 23:25 MTDiscord <_devsh_> And this was no culling, nothing 23:26 MTDiscord <_devsh_> Even no frustum culling 23:27 MTDiscord <_devsh_> Erle, that's standard practice and GDC presentations from 15 years ago were quite explicit about the fact your supposed to order your drawcalls by shaderid 23:28 MTDiscord <_devsh_> Then stuff like textures bound 23:30 MTDiscord <_devsh_> That way you can also optimise the state changes, like flip flopping between different depth testing modes, etc. 23:31 MTDiscord <_devsh_> This is also why you should only have 1 or 2 transparent shaders and make sure particles use an array texture 23:32 MTDiscord <_devsh_> Because if you sort particles (or just emitters), and then have to rebind the texture in between each billboard or even emitter... Rip 23:32 MTDiscord <_devsh_> Obviously that whole problem goes away if you used order independent transparency 23:33 MTDiscord <_devsh_> Because you no longer need to sort by depth and can focus on sorting by shader and pipeline state instead 23:34 MTDiscord <_devsh_> But order independent transparency is only possible with MSAA textures and weird sample shding tricks or multiple render target framebuffers for MBOIT or WBOIT 23:35 MTDiscord <_devsh_> Also they're quite slow compared to the fancy methods in GL 4.3 using atomic images and other fun things 23:47 MTDiscord devsh: speaking of OIT, which methods would you practically suggest we try out? you can comment on #15436 if you'd like 23:47 ShadowBot https://github.com/minetest/minetest/issues/15436 -- Solving semitransparency: Order-independent transparency