#RaZ - Modern & multiplatform 3D game engine

90 messages ยท Page 1 of 1 (latest)

fossil agate
#

Better late than never, lemme introduce yet another game engine froge_yeehaw https://github.com/Razakhel/RaZ

It can be used under Windows, Linux, macOS and in a browser (see https://razakhel.github.io/RaZ/demo/). You can develop with it in C++ (17 for now, but will migrate to recent versions when they're fully finalized), its base language, but is also entirely usable with Lua scripting.

Mostly rendering-oriented, as it's the main domain I'm a big fan of, it also of course features other aspects necessary to aim being a full-fledged game engine (audio, physics, ...). I'm however very interested in any kind of real-life phenomenon simulation, so I intend to try out many of those in the future (procedural generation of many things, fluid simulation, precise physics simulation, ...). Sadly, free time is not infinite froge_sad

Feel free to follow and/or star the project, or even contribute to it! You're especially very welcome to try it out, make your own project(s) and give me your feedback; several projects (only made by myself for now) are referenced on the repo's main page to give you an idea of what's easily possible (although much more can be done). I also have a (rather small for now) YouTube playlist that I use to showcase any kind of random experiment using the engine: https://www.youtube.com/playlist?list=PLLYADJ7Ri6mURjJka9ZscOH8JBRi9lEne.
There's also a dedicated GUI editor (in C++ too, using Qt), which greatly needs improvement to be actually usable and thus can also very well be contributed to (https://github.com/Razakhel/RaZor).

See the engine's repo's README and wiki (https://github.com/Razakhel/RaZ/wiki) for all information!

GitHub

Modern & multiplatform 3D game engine. Contribute to Razakhel/RaZ development by creating an account on GitHub.

#

Features summary (see https://github.com/Razakhel/RaZ#features for a more complete list):

  • Custom ECS architecture
  • Lua scripting (using sol2)
  • Rendering:
    • OpenGL, from 3.3 to 4.6 (picks the highest supported version)
    • PBR rendering (metalness/roughness)
    • Render graph with customizable render passes
    • "Render processes" (predefined sets of render passes): blur methods, bloom, SSR, film grain, vignette, chromatic aberration, ...
    • Tessellation & compute shaders support
  • Audio:
    • Positional 3D audio sources & listener
    • Sound effects (reverberation, echo, ...)
    • Mono/stereo microphone support
  • Physics:
    • Shape definitions (plane, sphere, AABB, ...)
    • Ray/shape intersection tests
    • Basic rigid body simulation
  • Data:
  • Many utilities, including multithreading & parallelization capabilities

The engine only supports OpenGL, mostly due to browser compatibility (waiting for WebGPU?) on one side, and the architectural hassle of supporting multiple APIs on the other. I've started tinkering with Vulkan almost 2 years ago, but with no real purpose. I'd very much like to support it later, as I'm very interested in it, although this would be a long-term work that I'm not willing to put time into at the moment

upbeat ivy
#

I have been stumbling upon this one on github every other week ๐Ÿ™‚ because its being suggested all the time

#

and it feels like you change the name every other month or so, perhaps you did in the past hehe

fossil agate
#

I've never changed its name since I began the project ~6 years ago though, although I've been trying to find a better one for a couple years now

upbeat ivy
#

ah, hmm possible that im mixing it with another one which also keeps popping up

fossil agate
#

most likely yeah

fossil agate
#

A few screenshots of stuff done with the engine for demonstration:

  • Simple earth-like atmospheric simulation, seen from space (see https://github.com/Razakhel/Atmos)
  • Terrain procedural generation with simple fog & sun effect, either on CPU or GPU (using tessellation shaders) (see https://github.com/Razakhel/Midgard)
  • Non-PBR (yet) multi-pass bloom effect, partly based on froyok's article frogapprove (see the bloom demo from the engine's examples)
  • SSR + bloom effect, with reflections varying over the floor's roughness
#

And a few more from the "playground" YT channel (https://www.youtube.com/playlist?list=PLLYADJ7Ri6mURjJka9ZscOH8JBRi9lEne):

upbeat ivy
#

that spagnetti monster looks cool

#

the other stuff too : >

fossil agate
#

And finally a few videos I have on progress I made in the past:

  • Demonstration of the BVH structure with mouse-based ray/triangle intersection picking, with an addition of a sphere on each hit and its reinsertion into the BVH
  • 3D Perlin & Worley noises in compute shaders (not yet tileable, but will be for procedural cloud rendering in the future)
  • Mesh picking using the BVH in the editor
  • Random experiment on a Noita clone "physics-based" "particle" simulation, entirely in compute shaders
fossil agate
upbeat ivy
#

Virtual Shadow Mapping

fossil agate
#

yeaaah shadows in general is one of the big thing I need to get onto nervous

#

I have this weird problem that if I'm not (almost) 100% sure something is either correct or architecturally ideal, I delay that stuff

upbeat ivy
#

2024 is the year of shadows : >

fossil agate
#

it's been very hard doing anything major over the years, and I have a lot of unfinished stuff in my stash list froge_sad

upbeat ivy
#

move it up the list

fossil agate
#

it's not even in that list agonyfrog

upbeat ivy
fossil agate
#

now I'm pumped up froge_yeehaw

fossil agate
#

meh I believe my engine doesn't deserve the cube role froge_sad

upbeat ivy
#

heh how come?

#

it does the cubes

#

ah wait you dont have the role yet

#

fixed

fossil agate
#

no idea, there's geometry that's inside out, and I don't support vertex colors so that'd explain for some

upbeat ivy
#

its hard to see

fossil agate
#

wee I'm approved frogapprove

upbeat ivy
#

the textured cubes seem right

fossil agate
#

yup the textured ones look fine

upbeat ivy
#

sending low quality screenshot frog_police

fossil agate
#

that's all of them loaded though, I don't even know if all have some geometry that's actually rendered (nevermind, the debug output for each loaded mesh looks legit)

world.addEntityWithComponent<Raz::Transform>(Raz::Vec3f(10.f, 0.f, 0.f))
  .addComponent<Raz::MeshRenderer>(Raz::MeshFormat::load("deccer-cubes-main/SM_Deccer_Cubes.glb").second);
world.addEntityWithComponent<Raz::Transform>(Raz::Vec3f(-10.f, 0.f, 0.f))
  .addComponent<Raz::MeshRenderer>(Raz::MeshFormat::load("deccer-cubes-main/SM_Deccer_Cubes_Colored.glb").second);
world.addEntityWithComponent<Raz::Transform>(Raz::Vec3f(0.f, 10.f, 0.f))
  .addComponent<Raz::MeshRenderer>(Raz::MeshFormat::load("deccer-cubes-main/SM_Deccer_Cubes_Merged_Texture_Atlas.gltf").second);
world.addEntityWithComponent<Raz::Transform>(Raz::Vec3f(0.f, -10.f, 0.f))
  .addComponent<Raz::MeshRenderer>(Raz::MeshFormat::load("deccer-cubes-main/SM_Deccer_Cubes_Textured.glb").second);
world.addEntityWithComponent<Raz::Transform>(Raz::Vec3f(10.f, 10.f, 0.f))
  .addComponent<Raz::MeshRenderer>(Raz::MeshFormat::load("deccer-cubes-main/SM_Deccer_Cubes_Textured_Complex.gltf").second);
world.addEntityWithComponent<Raz::Transform>(Raz::Vec3f(-10.f, -10.f, 0.f))
  .addComponent<Raz::MeshRenderer>(Raz::MeshFormat::load("deccer-cubes-main/SM_Deccer_Cubes_Textured_Embedded.gltf").second);
// That one is huge, gotta scale down
world.addEntityWithComponent<Raz::Transform>(Raz::Vec3f(-10.f, 10.f, 0.f), Raz::Quaternionf::identity(), Raz::Vec3f(0.01f))
  .addComponent<Raz::MeshRenderer>(Raz::MeshFormat::load("deccer-cubes-main/SM_Deccer_Cubes_With_Rotation.glb").second);
upbeat ivy
#

oh

#

there might be a goofed up version of cubes lol

#

although

#

hang on

#

this is complex

#

minus the boundingboxes and imagine there are textures on it

#

let me try cubes with rotation, that might be the goofy version heh

#

yep ๐Ÿ™‚

#

sorry for tricking you into thinking your engine is fucked

fossil agate
#

haha that's reassuring!

fossil agate
upbeat ivy
#

i think only one cube is "inside out"

fossil agate
#

which isn't even in the file nice (result below taken from Windows' mesh viewer)

upbeat ivy
#

xD

#

try them standalone

#

not all models at the same time

fossil agate
#

that's the "complex" on its own ๐Ÿ˜ฐ

#

firing RenderDoc

upbeat ivy
#

the windows mesh viewer shows it correctly

fossil agate
#

mmh RenderDoc says that's just a bunch of boxes, all of them being [-100; 100]

#

right, I don't use the nodes' info

#

that explains a lot

upbeat ivy
#

๐Ÿ˜‰

fossil agate
#

I wondered if that'd be useful for common meshes, I guess it is nervous

upbeat ivy
#

hmm but then any of the deccer cubes should haev just be "1" box at origin

fossil agate
#

not all of them, this is merged texture atlas

#

(damn I should get on that aliasing someday too, this is awful)

upbeat ivy
#

hmm

#

i thought this was JUST merged texture atlas

#

but geometry/node wise it should also "just" be unit cubes at origin

#

and the node world matrices take care of the rest

#

also sorry for publicly shaming you in #926896734284689428 ๐Ÿ˜„

fossil agate
#

haha no worries, that's what these cubes are made for after all!

fossil agate
#

I'll handle the nodes info then ๐Ÿ‘Œ

fossil agate
#

well not correct yet but it's something

upbeat ivy
#

looks like just flipperinoed axis

#

gltf exports yup

#

and there hsould be a big green cube at origin (above (in yup terms) the red one)

#

with 4? more, smaller ones around each face of it

fossil agate
#

yeah the green cube is just extremely tiny here

#

I'm applying children the wrong way, gonna be a mess doing it the right way

upbeat ivy
#

: )

fossil agate
#

lil' crosspost for reference so that it's not lost, volume sphere marching through a mesh distance field: #showcase message

fossil agate
fossil agate
#

aaand say goodbye to the artifacts using a Fibonacci sphere froge_yeehaw

#

(looks a bit wobbly and the plane below is being eaten away, but that's the grid's definition that's too low froge_sad)

#

(oh, not for the plane, there are still some artifacts getting in the way; I assume the wobbly effect on non-axis-aligned objects is definitely due to the definition though)

#

increasing the samples to 200 (was previously 100) reduces it a lot indeed

fossil agate
fossil agate
#

after more than a year of inexplicable Lua errors which apparently have disappeared, the online demo is now up to date, including the Lua script that can be tinkered with: https://razakhel.github.io/RaZ/demo/

fossil agate