RADIUS: Native, Physically Based, and Performant Pathtracing [Open Source!]

Crossroads, 1024x521, 4096 samples, 7 bounces. All rendered natively.

About

What is RADIUS?

Deriving from the Latin word of “Ray”, RADIUS aims to be a performant path tracer using parallel luau and OSGL to leverage its speeds.

OSGL is the fastest EditableImage wrapper for Roblox. RADIUS serves to be the flagship of OSGL by demonstrating most of its features.

Why make RADIUS?

RADIUS was initially inspired by filiprodak’s raytracing test place, and it is the spiritual successor to my first Raytracing Engine place which surpassed 8K+ visits. However, many bugs are known and the place is not easily maintainable. RADIUS aims to be better in every way, and to represent as a more complete product by making it more accessible and modular. The main catalyst for the RADIUS project was Sebastian Lague’s video on the subject.

Who is making RADIUS?

As of now, I am responsible for developing the project. Luau and engine optimizations goes to the main contributors of OSGL. There are also countless other supporters suggesting ideas including but not limited to:

@Sle_l, @msix29, @saaawdust, @filiprodak, @Ethanthegrand14, ...

How performant is RADIUS?

The current goal of the path tracer is to provide a fast and reliably stable image interactively.

In a simple scene, we can achieve 30FPS+ on a 256² display. In a more complex scene, we can render 2048 samples on a 1024² screen in under 15 minutes*. But I do plan on measuring this more “scientifically” by using millisecond timings across popular scenes.

*Tested using an intel i5-12600K; performance varies across hardware. Complexity of scenes can vary render speeds. Parallel luau does not yet use all cores in-experience; measurements made in-studio.

Where is RADIUS?

RADIUS is completely open-source and you can download the demo! The next major version is currently in developement.


Features

:white_check_mark: - done
:yellow_square: - implementing
:cross_mark: - incomplete, still planned
:multiply: - cancelled

  • PBR Materials :white_check_mark:
    • Albedo/Color
    • Normals
    • Roughness
    • Metalness
  • Traditional Materials :white_check_mark:
    • Roughness
    • Transparency / Refraction
    • Emission
  • Tonemapping :white_check_mark:
    • ACES approximation applied in real-time
    • ACES full applied when finished rendering
  • Spheremaps :white_check_mark:
    • sRGB only, HDR can be supported in an upcoming OSGL update

Nothing in RADIUS is baked.


Updates

[0.1a]
● Release!

[0.1.1a]
● Backend reworkings/rewritings
● Refractions are less likely to fail

[0.1.2a]
● QOL improvements
● Restructured & Modulated tonemapping
● Tuned the NLM denoiser to be more aggresive
● Added raytracing (not to be confused with pathtracing. should only used as a “debug” tool)

[0.2.0]
still indev


Renders!

Some of these renders are rendered in old, experimental or modified versions of RADIUS.





Download it!

The demo is open-sourced with a BSD 3-Clause license. Please read it thoroughly if you plan to modify and/or use it commercially.

Note:

  • The demo is still in alpha, and the path tracer has not been thoroughly tested.
  • You can enable textures under the module src>ray>material, but this will increase RAM usage.
  • To get renders without the character, edit raycastParameters in src>ray>construct.
  • Everything visible in the camera instance will be rendered; camera controllers for screenshots are recommended.
82 Likes

Why is this so photo-realistic?

It’s so cool

3 Likes

Thanks!
It uses the same methods as a real raytracers! The same programs that render animated movies use this technique or something similar :+1:

5 Likes

Sure looks like Cycles. Keep up the great work! I am interested in updates.

2 Likes

This advanced parthtracer looks great! Nice job on it! How long did it take to create this in total? It’s cool!

1 Like

NO WAY this is supposed to be in #resources:community-resources BUT NO WAY OMG AWESOME GG GOOD WOW!

1 Like

Will this be free or paid? Does it work smoothly?

Appreciate the support!
I went ahead and changed it to #resources:community-resources :+1:

1 Like

A rough estimate would be around a month/3 weeks of cumulative work. I started the project a long time ago though.

There was a bunch of recycled material from things I have already done years prior, and many times where I had paused for a week and continued again. But most of my time went into optimizing.

1 Like

It will be completely open source! Meaning every line will be yours to use and edit.

At the moment it is still a private project because there are still many features pending to be implemented.

Wow amazing!! Ill use this for my anomaly game.

1 Like

That’s great to hear! But I will need to remind you that this is not intended for real-time applications (like games).

1 Like

Then why bother optimizing it? If it’s not meant to be used in projects then what is it for?

1 Like

Roblox is slow. Roblox is very slow. Walking around in 2 frames per second is unbearable. Not only are we optimizing it for the novelty of being the fastest, but we are perfectionists too.

As I said in the post, it is meant to provide a fast real-time preview of your scene, and it’s not meant to be played in games in real-time. I guess the only exception is when you’re aiming for a niche aesthetic not seen in any other game.

I will be posting how the pathtracer looks in real-time soon! I hope this clears most doubts.

2 Likes

Holy shit DAYUM! You cooked! None of my ray tracers are anything close to this man, dayum!

3 Likes

THIS IS WHAT I WANT TO SEE!! I was working on my own path tracer with a denoiser that can look alright at around 20 samples… THIS IS INSANE! I think this is a new thing. First it was Crazyblox making a realtime raytracer, now I am seeing stuff like THIS! Good job!

1 Like

I found this and wanna share with you. This is made for heavy calculations like this.

3 Likes

ActorGroups look promising! I’ll probably not use it because I already have made my own parallel luau module using the structure of fragment shaders as inspiration. I think ActorGroups is slightly more performant though, so I plan to update my module to closer represent theirs (but crediting @athar_adv of course)

And as of now, I don’t want to delay the release anymore. Most of the todo list is already done, and it’s mostly UI that is a roadblock for me. Getting good environments is also a hassle. I’m also waiting on the OSGL v1.6b release because the pathtracer uses the nightly build.

1 Like

One thing I wanna know; which build gets the most FPS and when does it start to go lower than 10? And would be great if you could give link to an example place.

I’m planning to release it as a downloadable place. The first release won’t be downloadable though; I will only open-source it after it is more or less complete. Right now I’m trying to get a demo up and running quickly for you guys to test it out. After the demo phase is over, you would be able to get a copy yourself.

FPS rarely goes down to 10 or less. For extremely intensive renders where all the bad stars align (high render resolution/fidelity/settings) it might drop to 10 and less. I plan to implement two render modes: real-time and non real-time. That should void any stuttery experience.