The article has the link buried so deep. https://github.com/MaxYari/OpenMWLuaPhysics
PC Gaming
For PC gaming news and discussion. PCGamingWiki
Rules:
- Be Respectful.
- No Spam or Porn.
- No Advertising.
- No Memes.
- No Tech Support.
- No questions about buying/building computers.
- No game suggestions, friend requests, surveys, or begging.
- No Let's Plays, streams, highlight reels/montages, random videos or shorts.
- No off-topic posts/comments, within reason.
- Use the original source, no clickbait titles, no duplicates. (Submissions should be from the original source if possible, unless from paywalled or non-english sources. If the title is clickbait or lacks context you may lightly edit the title.)
OG programming language developed by OG Brazilian nerds implemented into OG morrowind by OG modders
But useful idiots told me people won't work for free.
What is this referencing?
Every Anarcho capitalist boot licker
If someone calls themselves an anarcho-capitalist, I immediately think that person is of very low IQ trying to sound smart and educated.
At least the term libertarianism isn't a contradiction, even if it is selfish and stupid.
Sure, no kings, no masters but when you don't go the extra step to understand where the kings and masters come from, then you are just a useful idiot to the next fascist that comes along.
Absolutely!
yeah except libertarians love kings and masters, they just want it to be private and not collective. because they think they're going to be kings and masters in such a society. and it's always the most miserable looking dweeb because that's usually the motivation behind the fantasy.
To translate your message: "Libertarians wrongly believe they are kings and masters." Evidenced by the famous Highlander line "There can be only one!"
I mean. You already pay for your road and the ambulance that can drive down it to save your life. Why would you pay more to utilise the same overburdened service? Unless you're going to pay to build a hospital, fire station, etc. what's the point? And then the maintenance bills. Libertarians cannot wait to spend all of their money on things we currently help them pay for. (I'm Canadian by the way, just to explain the paid ambulance part)
Most of libertarians I've met rang to me like the old adage of them being like a housecat. Fiercely certain of their own independence, while being completely unaware of the system they rely upon. I don't think homie your responding to deserves heat, because they do legit think they will be the kings. Like look at the devil Peter thiel. He is currently ungodly rich, but when his wishes come to fruition, the dollars he hoarded will be with nothing.
... Ok, that is legitimately impressive, from a technical standpoint.
Lua is a high level, not exactly very 'fast', very performant language. It is designed to be very, very human readable, and coding noob friendly.
Getting a 3D physics engine to work ... in lua... is not something I would have thought possible.
Usually you need to use a much lower level language to ... actually do that.
EDIT:
A few other commenters have now pointed out that this is actually using LuaJIT... which passes Lua code to a C compiler, quickly translates and then compiles in C, and then runs in C.
So, that makes much more sense, its functionally running in C, a lower level, compiled code language.
Still impressive nonetheless!
Imma be the guy and drop an ackshually
- Nothing about Lua would make it difficult to implement a physics engine in it compared to other languages
- The hardest part would be integrating with Morrowind's systems. If the engine doesn't expose e.g. collision geometry to scripts in an efficient way, then you'll run into some real challenges
- Even without LuaJIT, there's no reason to expect performance so bad you can't implement realtime rigid body physics. Interpreted Lua is fast, but even if it wasn't, a 60 fps performance target for physics is not tough to achieve at all
Nothing about Lua would make it difficult to implement a physics engine in it compared to other languages.
Correct, but said implementation will be orders of magnitude slower than implementing at a lower level... meaning you cannot handle lots of objects, you can only handle a few, and only with a few players if this is all networked... otherwise you get massive physics calculation innacuracy, terrible performance spikes, crashes, and if networked, server hangs/stalls, huge desync, etc.
The hardest part would be integrating with Morrowind's systems. If the engine doesn't expose e.g. collision geometry to scripts in an efficient way, then you'll run into some real challenges.
I mean... that is true, that having to emulate collision meshes/hulls would be less efficient than just actually having direct access to them... but that would be the case with any language, and Lua is still much slower at any real time collision mesh/hull emulation than doing the same in a lower level language.
Even without LuaJIT, there's no reason to expect performance so bad you can't implement realtime rigid body physics. Interpreted Lua is fast, but even if it wasn't, a 60 fps performance target for physics is not tough to achieve at all.
You say that, but I've never seen it done well in a way that can scale for many tens or hundreds or thousands of 3D physics calls in a complex single player scenario, or a multiplayer scenario where you now also have to account for networked synchronization.
Not saying its impossible, just saying it... I've never seen anyone pull off an efficient and accurate 3D physics engine in Lua, untill now with this LuaJIT implementation.
If you can show me a high performance 3d physics engine written entirely in just straight up Lua, well please do show me, and share with the class.
My guess would be that it would be constrained to either specific physics scenarios, as in, wouldn't have as full a realistic physics feature set... wouldn't handle well a lot of simultaneous intersctions... but I'm open to being surprised.
...
Like uh, Godot's Jolt physics are written in C++...
...and while this used to basically be an addon, that was better than Godot's default physics engine...
...even Jolt isn't nearly as efficient or accurate as say, Valve's implementation of Havok in Source.
Godot has been catching up with Unity on this physics engine performance front, but Unity still has the performance edge by a bit, and neither are close to Source.
And these are all C++ physics implementations, to the best of my knowledge.
Correct, but said implementation will be orders of magnitude slower than implementing at a lower level…
"order of magnitude" typically means 10x. A reasonable Lua implementation of rigidbody physics isn't going to be 10+ times slower than an equivalent C++ version. C++ provides a lot more tools for optimization than Lua, so you're unlikely to find a truly apples-to-apples comparison showing the difference between a Lua and C++ that isn't a benchmark of the particular algorithms in the implementations.
To be clear, I'm not saying Lua is faster or as fast as C++, just that you're making it sound as if Lua is too slow for something like this. I know this isn't a programming community, but we're talking about programming languages, so I feel compelled to point stuff like this out.
meaning you cannot handle lots of objects, you can only handle a few, and only with a few players if this is all networked… otherwise you get massive physics calculation innacuracy, terrible performance spikes, crashes, and if networked, server hangs/stalls, huge desync, etc.
None of this is true.
... than just actually having direct access to them… but that would be the case with any language ...
It is specifically a problem with embeddable languages like Lua because they're limited by what is exposed to its VM and how. In the context of modding physics into Morrowind, it's possible that not everything you'd need is cleanly exposed through Lua (which afaik is implemented with a third party plugin and not natively supported).
Not saying its impossible, just saying it… I’ve never seen anyone pull off an efficient and accurate 3D physics engine in Lua, untill now with this LuaJIT implementation.
At the risk of sounding like a dick, I think you're bullshitting. I doubt you've ever seen any physics engine implemented in Lua before, much less benchmarked them or evaluated them for their "efficient" and "accurate" qualities (which are meaningless terms). Lua physics engines certainly exist, but they're mostly gimmicks interesting to developers to study/learn as there aren't many real world use cases for something like that. There are few reasons to choose that over a C++ physics library, not because Lua is slow, but simply because C++ is faster, and the libraries are typically much more mature and feature-rich.
"order of magnitude" typically means 10x.
Correct!
A reasonable Lua implementation of rigidbody physics isn't going to be 10+ times slower than an equivalent C++ version...
So, here's where you make me go find some actual benchmarks, because you obviously have no clue what you are talking about, and have likely never written any serious code in your life.
https://programming-language-benchmarks.vercel.app/lua-vs-cpp
Take a look at the nbody benchmark scores. nbody is a simulation of Newtonian physics for a 3d point cloud of n number of objects.
When n is 500,000, standard Lua takes about 1145 ms, LuaJIT takes about 75ms, C++ takes about 20ms. to 35ms.
So thats in your two orders of magnitude ballpark range.
When n is 5,000,000, standard Lua just crashes, C++ evaluates it in about 160ms to about 315ms, LuaJIT takes about 715 ms.
So thats uh... infinitely worse? Standard Lua can't even do it.
...
Or take a look at the spectral-norm benchmarks, which show how performant a language is at manipulating matrices and vectors... the kind of calculation core to a 3d physics simulation.
Base Lua can't even complete any of the inidcated benchmarks at all. Times out, crashes, for each given n benchmark.
LuaJIT ends up being about one order of magnitude slower than various C++ compilers.
So these show you Lua doesn't scale well and crashes, because Lua is far less efficient with memory usage than C++ (or C, through LuaJIT)... when it comes to trying to perform the kind of calculations that would need to be performed in a 3d physics engine.
...
To be clear, I'm not saying Lua is faster or as fast as C++, just that you're making it sound as if Lua is too slow for something like this.
I am saying that standard, non LuaJIT Lua is indeed too slow for this, because that is true.
meaning you cannot handle lots of objects, you can only handle a few, and only with a few players if this is all networked… otherwise you get massive physics calculation innacuracy, terrible performance spikes, crashes, and if networked, server hangs/stalls, huge desync, etc.
None of this is true.
All of that is infact true.
I know this, because I have tried it, I've done it.
Lua is too slow, and all of those things I mentioned are indeed what happen if you try to implement 3d physics entirely within it, instead of using a game's actual, native, almost always C++ physics engine.
...
... than just actually having direct access to them… but that would be the case with any language ...
It is specifically a problem with embeddable languages like Lua because they're limited by what is exposed to its VM and how. In the context of modding physics into Morrowind, it's possible that not everything you'd need is cleanly exposed through Lua (which afaik is implemented with a third party plugin and not natively supported).
You don't seem to get what I am saying.
If it is the case that your scripting language, whatever scripting language there exists a plugin for, for whatever game... if that scripting language doesn't have an API method of referencing or manipulating an actual collision mesh or hull... then that doesn't have anything to do with that particular language itself, it means the API is insufficient, the method of communicating between the game's core library and the added in language is insufficient.
What I am saying is, is that this isn't specifically a problem with whatever language you are writing your modifications in.
It is a problem with the API, the injection and interaction system/method/layer.
Thus, the problem you are pointing out as specific to Lua in this instance... isn't even a problem with Lua per se. It would be a problem with any language that is using that particular interaction method.
...
You could compile a .dll that overrides or injects into or otherwise manipulates or interacts with the core game code itself, and then also possibly provide a custom .exe that uses the custom .dlls and the base game .dlls and other files.
This is what many ENB Shader mods do (complex lighting is a different kind of physics calculation), its what Skyrim Script Extender, New Vegas Script Extender do.
Those kinds of mods represent basically a better, more thorough or more powerful API, roughly, as compared to your theoretical example... because they directly manipulate the core game code, have access to more of the core game's function libraries.
NVSE can do things like manipulate the world's gravity, manipulate friction values between different classes of physics objects, manipulate how ragdoll tensor and flexor limits operate, etc.
It can and does directly manipulate the core game physics code.
...
Also I am.... fairly confident that embeddeding a scripting language into a game that doesn't normally support said scripting language... I don't see how or why a VM would be involved in that at any point... unless you're talking about the entire modded game being run in a VM?
I don't know why you would need an entire virtual machine, a virtualized entire operating system... to add Lua into a game. That makes no sense.
...
At the risk of sounding like a dick, I think you're bullshitting. I doubt you've ever seen any physics engine implemented in Lua before...
Nope, I am not bullshitting.
I have never seen or even heard or a 3d, rigid body physics system that is performant enough to run in a 3d game, that just runs in standard Lua, that doesn't pass it to C as LuaJIT does.
There are many games that have their physics engine done in another language... usually C++... which expose an API that parses Lua, such that custom scripts or mods can be written for that game... but that doesn't mean the physics engine of the game itself is somehow now written in Lua, it just means you are using Lua to instantiate and perhaps provide basic initial position, rotation and velocity vectors to an ingame object... and then the physics calculations are handled by C++.
I asked you to provide an example of an actual 3d physics engine running in Lua, because I am calling bullshit on you.
I have never heard of one, I don't know of one that exists, yet you just confidently claim 'oh actually this is totally possible and would be comparably performant!'
You... seem to admit you are bullshitting with these statements:
Lua physics engines certainly exist, but they're mostly gimmicks interesting to developers to study/learn as there aren't many real world use cases for something like that.
Yes, 3d Lua physics examples do exist, but as you say, they are mostly gimmick, proof of concept things, where someone mocks up a 3d physics engine in Lua, and would then presumably later learn how to port that code over into a more performant language like C or C++ or Rust... so that they could actually be used in a releasable game... because Lua is too slow to be useful as a core language for a physics engine, unless its translated into a faster language and then compiled, as is done with LuaJIT.
There are few reasons to choose that over a C++ physics library, not because Lua is slow, but simply because C++ is faster, and the libraries are typically much more mature and feature-rich.
You do not seem to realize that that literally is the more technically worded version of the exact point I am making: Lua is slow, no one has figured out how to code a 'more mature and feature-rich' 3d physics implementation that is comparable to C++ physics implementations, which actually runs in Lua, and doesn't pass it over to C and run the actual code in C, as LuaJIT does.
...
In summation, you yourself claim that a performant and fast Lua physics engine could exist, and when I ask you to provide an example, you stammer and waffle about with claims about theoretical ones that could exist, and then in the end of your post you admit that the only Lua physics engines/simulations you know of are basically little toy ones that are not efficient or fast enough to be used in a game.
... But thats after you say that I am bullshitting by saying the thing you just said at the end there.
Do you even realize you are contradicting yourself and being a hypocrite?
You remind me of the edgelord script kiddies I used to run into on Facepunch all the time.
All talk, no walk, and the talk is all nonsense.
Please either actually learn how to code, or go back to reddit with your baseless bullshitting.
Can confirm
Project Zombie and GMod both use Lua scripts. GMod is also one of the best physics sandboxes imo, and has like the most mods on the workshop ever.
The physics in GMod isn't implemented in Lua though. It was already part of the Source engine.
Unless GMod isn't referring to Garry's Mod.
Yeah, was gonna say this.
If you actually do use Lua to significantly alter the actual physics, shit gets fuckywucky really, really fast... its quite inefficient and laggy.
I know, because I've tried to implement custom physics manipulations in Gmod via Lua... the netgraph, and server side lag, becomes absolutely absymal, really fast, if you're trying to use it for more than just a few objects/interactions at a time.
Like the uh... Armored Combat Framework?
That uses Lua to allow you to construct your own custom tanks and what not?
That tries to do things like penetration/ricochet calls on physics and collision hulls... through Lua?
Astoundingly inefficient and laggy in pretty much any situation with more than 3 or 4 vehicles operating and engaging each other at the same time... especially so if they are using high rate of fire autocannons or machine guns.
You have to have an unusually powerful server to be able to handle more than that, and its still gonna chug as you scale up conflict sizes.
As I remember, most ACF servers had/have a bunch of rules about giving warnings before you dupe spawn or dupe save a vehicle design, have maximum part complexity limits, have designated build and designated battle times, or just seperate servers for each... because using Lua to handle so much physics stuff is so often likely to cause server stalls and crashes.
Project....Zombie?
Do you mean Zomboid?
If so, Zomboid isn't ... the physics aren't done in Lua.
The base of the game is written in C++, and then certain parts of that are exposed to modders via an API that works with Lua.
https://expertbeacon.com/is-project-zomboid-java/
The physics engine is written in C++.
Because Lua is waaay too slow, and even compiled Java is about 4x as slow as C++.
This appears to use OpenMW, not MWSE
Now, that is a very relevant detail!
I did not know LuaJIT was even a thing.
Still probably not as performant as ... C++ or Rust or something, that is totally precompiled... but that would explain how this is even possible, a 3D Lua based physics engine.
Yeah, looks like LuaJIT passes a bunch of the Lua code into C, just good ole C, and then dynamically compiles it, then runs the 'translated' C code.
That makes a lot more sense lol.
It is designed to be very, very human readable, and coding noob friendly
As someone who can't wrap my head around lua syntax, I will have to assume I simply have too much coding experience
I know what you mean lol, but Lua is very noob friendly... it goes fairly far out of its way to make many common functions and data types as compatible with each other as possible... so thats another way it is generally more slow, but also more forgiving, won't just totally error out and be frustrating to a beginner coder.
Yeah, I remember using LUA back in the day for gmod.
Hands down one of the shittiest languages I ever touched, right down there with PHP.
Really puts into perspective how stupid developers can be when deciding the tools that they use.
Hot take.
Lua is an industry standard for a reason. The syntax isn't great. But the reference implementation of Lua is under 500kb, very easy to embed and very fast.
Lua is pretty fast actually, though I don't know how it compares to compiled speed.
I haven't benchmarked anything in a while, so it is possible Lua is more performant now than it once was... but in my (out of date) experience, python is faster than Lua, and nearly every language that is actually compiled is... one or two or three orders of magnitude faster.
Though it is also worth mentioning that Lua is fairly simple to plug in to some kind of database language, which can result in reasonably good performance in situations involving say... dynamically spawning or unspawning tons of inventory style minor items, or containers with them.
Lua has been fast enough to handle a simple 2D physics engine... but this is the first time I am hearing of it handling 3D.
At the dawn of mankind's perversion Lua was used for 3D
Lua can be very fast using LuaJIT or similar
What a grand and intoxicating modding community
While awesome for just the technical aspect, I actually would find this to be a downgrade in the way I play, since it would mean no longer being able to make staircases out of books and pillows, as they would actually fall if they had physics. 🤣
Cyrodillic Brandy has no physics and wont fall. Staircase away, my friend. Especially if you know how to dupe. (its ridiculously easy)
You should take a look into KSP and Rimworld modding. Adding emtirely new physics is only the cup of the cake there.
This is a mod that only runs in a fan-made from-scratch recreation of the game's engine. Morrowind modders have basically every other game's modders beaten if you want to make it a competition.