16 ms·
LÖVR – An open source framework for rapidly building immersive 3D experiences
- redweer 5y agois there any relation with LÖVE? https://love2d.org/ https://love2d.org/ I don't see anything called out about this on the website. LÖVE is a great 2d game framework written in Lua
- deleted 5y ago[deleted]
- lioeters 5y ago> LÖVR is heavily inspired by LÖVE, a 2D game framework. https://github.com/bjornbytes/lovr https://github.com/bjornbytes/lovr
- animanoir 5y agoYeha, also that it uses Lua. I think I should try that language; always hear good stuff about it.
- memorable 5y agoThe syntax of LÖVR looks very similar to LÖVE, so I think it is heavily inspired by it.
- newsyyswen 5y agoIs this by the same people who made LÖVE? The naming and use of LuaJIT suggest it. I love LÖVE. It's a great way to throw together rapid prototypes, and Lua is a joy to work with. Exciting to see a 3D framework along the same lines, hope it can work well for non-VR apps.
- wsc981 5y agoFrom what I understand it's made by different people, but the LÖVR API tries to stay close to the design of the LÖVE API. It can work well for non-VR apps as well by just disabling the headset module.
- nabakin 5y agoI can confirm this was the case 3-4 years ago when it was in its early stages. Although, I wouldn't be surprised if developers who worked on LÖVE, have started working on this project since then.
- nonbirithm 5y agoI believe that if LÖVE weren't inextricably tied to Lua and were instead exposed as a C library that 2D game development would become a lot easier in someone's language of choice. You don't have to muck around with low-level details like initializing SDL or using raw calls to OpenGL, but you don't have to be constrained by the complexity of larger frameworks like Unity. It's like the one proper wrapper API for all the individual hard-to-use libraries. I don't like LÖVE because of Lua, I like LÖVE because the framework itself is so well-designed and easy to use. Other people seem to agree to the point of reimplementing LÖVE's API in Rust, as ggez.
- Koshkin 5y agoLua can be embedded in a C project as a library.
- nikki93 5y agoLove can actually be used directly as a C++ library. It's a bit of work to get the build system going but then you can use the Love API like: https://github.com/castle-xyz/castle-client/blob/7bfffa10e84b8423ce004692bc734c6f0797cdad/core/src/behaviors/analog_stick.cpp#L153-L165 https://github.com/castle-xyz/castle-client/blob/7bfffa10e84... -- we used to use the Lua Love and have since worked on porting our engine to C++. It even runs in the web with the same code through Wasm. No Lua VM ever gets initialized. I may create a minimal starter template repo showing an example of this at some point... Though, for a 'simple C library for 2d (and actually 3d) game development' -- I would highly recommend https://www.raylib.com/ https://www.raylib.com/. I really, really dig the API design there. One of the main 'downsides' I guess is it doesn't out of the box build natively for iOS -- but the Wasm support makes it run there pretty fine out of the box and raylib-fork can be used to get a native iOS build going with some work. It's got a lot of stuff out of the box including a GLTF loader and skeletal animation.
- lasagnaphil 5y agoA question: would it be too much work to port Love2D to a different embedding language? (I'm currently having looks at Squirrel (http://www.squirrel-lang.org/ http://www.squirrel-lang.org/) I always thought Lua was tightly coupled with the framework, but what you've mentioned seems to imply that's not the case.
- apineda 5y agoI don't like Lua. I prefer three.js and js because that's what I'm best at. That being said I did have some fun learning experiences with love 2d back in the day. This looks like an interesting tool just like love 2d was. I'll be envious of those who can use it to achieve their creative visions. :)
- andrehacker 5y agoIt seems that A-Frame (built on top of three.js) would be the way to go if Javascript is your thing. https://aframe.io/ https://aframe.io/
- ungamedplayer 5y agoA lot of us hate and loathe javascript. I'm not 'the best' at lua, but compared to javascript it makes me feel like I'm not taking crazy pills.
- wsc981 5y agoThis is an interesting video of some of LÖVR's capabilities and how it compares to some other popular gamedev SDKs: https://www.youtube.com/watch?v=u9cYW6ffkPM https://www.youtube.com/watch?v=u9cYW6ffkPM
- senthilnayagam 5y agohave installed the mac version how do I run the getting started example on Mac , dragging folder or main.lua seems not running anything
- wsc981 5y agoWhat I do is create a symlink of the lovr binary (inside LÖVR.app/Contents/macOS) and store the symlink in: ~/.bin On shell start-up the ~/.bin directory is added to my PATH env variable. Then I can just open terminal, navigate to project directory and do: $ lovr . To run examples or develop.
- senthilnayagam 5y agoyou are a life saver, it works now
- etaioinshrdlu 5y agoI enjoyed playing around with this a lot, and it was infinitely easier to make progress hacking around than Unreal or Unity. I got stuck because I couldn't get over the lack of AAA graphics and physics that LOVR lacks, compared to Unreal... Lua also shouldn't be used. It's a beautiful tiny embedded language, but I don't want to use it, and I don't want you to use it either.
- signa11 5y agomay you please elucidate why you dissuade the use of lua ? thank you kindly!
- etaioinshrdlu 5y agoIt's the automatic type coercion (strings <=> numbers), the overusage of tables as a universal data structure with bad API, the bizzare syntax. It might as well be Perl. I don't want you to use Perl either.
- lasagnaphil 5y agoLua is a language that I started programming with, and has a special place in my heart even if has some crappy parts. The main issue I have with the language is with table accesses and 'nil'. Tables in Lua are the most fundamental type of object in the language, it can be either an array (1-based index) or a hashtable. In this language objects are basically just tables with fields in them, and with metatables you can basically emulate all the features in a typical OOP language (classes, inheritance, traits, operator overloading, etc.) Field access in objects are just table accesses (like what you can imagine with Javascript). However, when you try to access a field in a table that doesn't exist (such as 'print(table.key_that_doesnt_exist)'): no errors or exceptions are explicitly raised, it just silently returns nil. This is such a dealbreaker that makes the language much harder to debug than other languages (at least Javascript returns undefined, which is different from null! Oh well, that actually has problems of its own though....) Some more horror: global variables are also implemented as tables (imagine that there's a table _G at the top of the scope). This means that any spelling mistakes with variables will also just silently return nil, since if it doesn't find any variable names at the local scope, it tries to find at the global scope. The global variable thing was actually such a big problem that people came up with some voodoo metatable trickery script like strict.lua (https://github.com/deepmind/strict/blob/master/strict.lua https://github.com/deepmind/strict/blob/master/strict.lua) that prevents this from happening (a showcase of the language's power, but probably not its proudest). I'm sure you could also do this with table creation (make a wrapper function tbl() that automatically adds metatables to tables to prevent invalid field access, so every time you need to do things like 'pos = tbl({x = 1, y = 2})') But still, there isn't a solution baked into the language, and it's cumbersome to do this (and I'm not sure about the performance implications of this addition). Right now I'm trying to integrate Squirrel (http://www.squirrel-lang.org/ http://www.squirrel-lang.org/) instead of Lua as a scripting language into my game. Squirrel is an embedded scripting language that's hugely inspired from Lua, but also fixes this shortcoming of the language by making invalid table accesses runtime errors. And when you want to add new fields to a table you need to explicitly do so via the <- operator: table = {} // print(table.x) (Runtime error) // table.x = 1 (Runtime error) table.x <- 1 table.y <- 2 print(table.x) // Outputs 1 which is much more explicit and less error-prone.
- dang 5y agoOne past thread: Show HN: LÖVR – VR framework for Lua - https://news.ycombinator.com/item?id=15177549 https://news.ycombinator.com/item?id=15177549 - Sept 2017 (23 comments)
- deleted 5y ago[deleted]
- robertwt7 5y agoEvery time I look at cool project like this, I add it to github star and plan to play around over the weekend. But then got too busy with something else and just forget that it exist in my pile of interesting starred project in github.
- meatsock 5y agoheres a good demonstration of LÖVR showing a unique selection interface https://twitter.com/mcclure111/status/1214638887173099520?s=19 https://twitter.com/mcclure111/status/1214638887173099520?s=...
- codelord 5y agoThis is cool, but I find it hard to find any use case for it. I did plenty of work as an indie game dev in the past, shipped and made money out of games based on my own C++/OpenGL game engine and also shipped a few indie games with some external indie game engines. Then I moved away from gamedev, but recently started playing around with Unreal engine again and was blown away by how much Unreal does for you. It felt like with Unreal engine, game dev is mostly about art and game design and not so much about programming anymore. Given game dev has become so much more competitive and harder to do than in the old days, and the fact that you can get a AAA game engine like Unreal for free (and only 5% royalty after 1-5M in sales), it doesn't make any sense to use anything else other than Unreal/Unity IMO.
- chii 5y ago> game dev is mostly about art and game design with a lot of low-effort unreal trash games that all look the same and doesn't have good artistic direction nor game mechanics. I think this is because unreal gives you so much by default that the developer doesn't really push any boundaries and innovate. Case in point : movement from different games made in unreal all feels "the same".
- codelord 5y agoHow much experience do you have with Unreal engine and game dev? If you think art-style is dependent on game engine you probably don't know what you are talking about. Modern game engines are pretty much like an operating system, there's little constraint in terms of what you can achieve artistically.
- chii 5y ago> can achieve artistically of course you can achieve any art style. I'm saying that low effort games you can find on steam, for example, don't do this.
- Agentlien 5y agoThere's definitely little constraint in what you can achieve. But a lot of low effort games are made by only setting up simple game logic and creating a few models and textures. This means they all use the same default lighting calculations, post processing steps, etc. That gives them a similar look. Contrast this with more ambitious games and you'll usually end up with an array of custom shaders, a stack of custom post effects, etc. That really lets you define a look that's all your own.
- alexissantos 5y agoAny idea if this currently has support for the Vive trackers? (Would love to track objects as well as hands.)
- ranguna 5y agoYes, it says so in their homepage.
- billfruit 5y agoIs there examples or a single page document of how to get start upto a finished working example? Does it support interactive applications, I mean does it handle inputs? Does it have physics/collision detection?
- weswayward 5y agoI actually have a decent relationship with Lua. It's not my favorite language in the world. But it works. I hated Love though. Not for any technical reason. I really wanted to use it. But, every damn library seemed to be a play on Anal or Lube. I realize that's a silly reason to give up on a piece of technology. But it's also silly those things had to have unfortunate names to begin with.
- jmiskovic 5y agoSome of worst offenders have since changed lib names, you should be OK if you ever decide to jump back in.
- Verdex 5y agoSoftware names are the worst. Even "highly respectable" library/framework/etc names sound ridiculous. I found the microservices[1] joke video to be funny (in a you have to laugh or you're going to cry kind of way) mostly because the names are so off the wall and true to life in a way that the muggles probably wouldn't believe is accurate. Saying, "Sorry guys, I just can't get past the names," is totally a legitimate thing to do. At some point you have to be able to talk to other people about this stuff and it's going to help a lot if you can say the names of the things you're working on without dying of shame. And it's not just about common decency. People are going to believe you're messing with them if you say something like, "Oh yeah, I've been working on getting `buttplug` to send ip packets correctly, however it's been giving me some problems." [1] - https://www.youtube.com/watch?v=y8OnoxKotPQ https://www.youtube.com/watch?v=y8OnoxKotPQ
- stavros 5y agoWell, personally, I wonder why you consider sexual names "unfortunate". Sex must be the single biggest thing that everyone does yet pretends not to. I'm not a fan of this "why I never" mindset. It just seems prudish to me. A library called "huge red buttplug"? I don't love the length, but I'll use it, why not.
- philsnow 5y agoI want to get my 12 and 10 year old children into programming, but I won't show them löve because of this naming issue. It's otherwise an ideal library for them, but I show them pygame/qbasic/logo instead.
- grawprog 5y agoI have to say, LÖVE 2d holds a special place with me because it's the first 'real programming game engine' (as in language only no accompanying ide or such) I ever actually developed anything that I would consider a fully fledged completed program I made entirely by myself with. This looks pretty awesome and all but I can't see the benefits over something like unity or unreal or the amazing for the cost and features Godot. I really like Lua. I've always recommended it to beginners or anyone curious about programming for fun over every other language. I've used it myself extensively But in this day and age, I can't really see recommendating this or even LÖVE2d anymore to anyone interested in getting into game programming. There's just too many high quality alternatives these days.
- paraph1n 5y agoPlease share the alternatives.
- andrewmcwatters 5y agoIf you're interested in graduating from LÖVE, try Planimeter's Grid Engine[1], which is based on Quakeworld architecture and comes with fully client-side predicted multiplayer out of the box.[2] In that regard, it's a lot easier than Unity 2D, which doesn't. It also has commercial support, uses pretty standard de facto formats, like Tiled, for its levels, and has been in development for several years. It's the most starred Lua game engine on GitHub to my knowledge.[3] Planimeter also publishes lgf[4], which is a LÖVE 11.3 drop-in replacement which provides PBR support, among other things, out of the box for those concerned with advanced workflows. [1]: https://www.planimeter.org/grid-sdk/ https://www.planimeter.org/grid-sdk/ [2]: https://www.planimeter.org/grid-sdk/api/Tick_rate_and_bandwidth https://www.planimeter.org/grid-sdk/api/Tick_rate_and_bandwi... [3]: https://github.com/topics/game-engine?l=lua https://github.com/topics/game-engine?l=lua [4]: https://github.com/Planimeter/lgf https://github.com/Planimeter/lgf
- kvark 5y agoLooking at the API here, it feels very much driven by OpenGL. You create a shader, send some parameters, push/pop some of the state, and bam - here is some rendering. I'm curious if there is still ideas to discover in the space of code-only 3d engines. Something more tied to modern API concepts, such as render passes and pipeline states.
- alice-i-cecile 5y agoHave you seen Bevy's new rendering experiments? Very much along the lines of what you're describing.
- cmdr2 5y agoNice, I hadn't come across Bevy, thanks for mentioning this. For others: https://bevyengine.org/news/introducing-bevy/ https://bevyengine.org/news/introducing-bevy/
- soylentgraham 5y agoI've gone back to an approach from the mid 2000's where high level i generate the most basic draw calls (setrendertarget,clearcolour) (Draw shader+geo+uniforms) As data, which i can serialise, stream, debug, pause&tweak, generate on multiple threads, etc and then low level batch together, generate pipelines, reduce state change, whatever the renderer needs, or just pump to a gui. Finally starting to build up little libraries of commands (generating text "draw calls", gizmos etc) which work project to project. Not very cutting edge tech, but lots of room for lower level (or even high level) optimising (culling, front to back, transparency sorting etc)
- 7OVO7 5y agohttps://www.virustotal.com/gui/file/a02339a89e1964522325f79865b7d4e9b277a8ca514a5ac7a623b5605e67a538/detection https://www.virustotal.com/gui/file/a02339a89e1964522325f798...
- TonyTrapp 5y agoOnly one false-positive? That's quite an achievement worth posting here. Snark aside, it's almost impossible to release (non-malicious, obviously) indie software these days that doesn't at least trip two or three AV products on VirusTotal that noone has ever heard of.
- ranguna 5y agoFor those of you who don't like lua but love LOVE2D and want to try LOVR, you can code in typescript and use this[1] transpiler to turn it into lua. Someone already did LOVE2D type definitions, it shouldn't be to hard to make some for LOVR. [1]: https://github.com/TypeScriptToLua/TypeScriptToLua https://github.com/TypeScriptToLua/TypeScriptToLua
- hdjjhhvvhga 5y agoThis is great news! I love Love2D! I just have one gripe with this: "Designed for VR". You see, not everybody wants to put a helmet on their head just to play motion-controlled game. Kinect obviously is not an option as it's no longer manufactured, but there are many toolkits for motion tracking using normal cameras such as webcams most people own. I wonder how difficult would be to add this kind of functionality to LOVR.
- zxspectrum1982 5y agoMakes me remember POV Ray times. I must be old.
- jmiskovic 5y agoThis framework is what I use for most of my hobby projects. There are some videos here: https://twitter.com/j_miskov https://twitter.com/j_miskov I went through Unity and Godot before picking it up. I like LOVR because it's so code-based, with boring boilerplate parts hidden away. I'm no artist and I prefer simple code editor to full engine IDE. The Lua API is easy to understand and remember, and even the framework code is simple to read and modify as needed.
- tudelo 5y agoAre there any drawbacks that you have experienced? Seems a lot more simple than using most game engines...
- jmiskovic 5y agoIt really depends on your use and expectations, if you expanded the question I could answer better. Maybe you expect things like scene manager, asset loader, animation rigging, pathfinding and network syncing to be built in, but LOVE2D/LOVR philosophy is to expose a sane and well thought out low level API and let the community provide the rest, in a bazaar sort of way. To put together something with complexity, you need to look around for various libs, and then design a way to put them together. Beside this trade off, the one "downside" is that this is largely a single person's effort with small community around it. LOVR is quite ambitious with supported platforms, and some platforms will exhibit bugs. Anyone working on a serious project will have to get their hands dirty with the framework code, which is thankfully rather easy on eyes. I think others already mentioned that LOVR is closer to raylib than to Godot. Once I experienced the flow of quickly iterating and hot-loading Lua code, I couldn't go back to Godot's flow adding entities in an editor, clicking around their properties, making OOP scripts and compiling to target platform to test. LOVR's sweet spot for me is making weird one-afternoon VR projects, for example conjuring thousand or so shapes and moving them around in interesting ways. I like having the option to evolve any those projects into something full fledged and more serious, even if it would require a substantial effort. That's just me thought, some other people in community are building a full business/social platform [1] and a full indie game [2] using the LOVR framework. [1] https://alloverse.com/ https://alloverse.com/ [2] https://www.youtube.com/watch?v=HLBAjKQNmFI& https://www.youtube.com/watch?v=HLBAjKQNmFI&
- bodge5000 5y agoI'm stuck between a state of absolute excitement and absolute disappointment, so I've got to ask... Is this "VR and 3D" or "VR...or traditional 3D". The second one implies its not really "meant" to be used for traditional 3D, but can be, which would be disappointing to me at least. Edit: To be clear, I'm fairly new to 3D game dev, up until this point I'm far more familiar with 2D, and never done any VR dev, so maybe its the case that a VR engine handles 3D without a problem
- wsc981 5y agoI think it’s VR and 3D in that you can choose to develop 3D apps and games on Desktop systems without VR headset or you can choose to target 3D headsets or both. By disabling the headset module (lovr.graphics.headset = false) the app functions as a normal desktop app.
- bodge5000 5y agoJust what I wanted to hear, cheers!
- hypertele-Xii 5y agoVR is just 3D rendered twice (once for each eye). You can trivially disable VR in LÖVR and use it for 3D.
- bodge5000 5y agoYeh that makes sense actually. I guess the control methods would be different, but I can see on the LOVR docs that keyboard and mouse are also supported. Maybe my concern with it comes with using 3D engines that can "also do 2D", but then when you try to do 2D with them, you find out its a bit of a hack job
- jakearmitage 5y agoI just can't get my head around Lua and it's usage of local. The impedance mismatch caused by using . and : is also terrible. I find it tragic that such a sloppy language design has one of the most impressive JIT runtimes ever written.
- johannboehme 5y agoI think this would be really interesting if it wasn't lua only.