Crazytracer [Raytracing Project]

The features you have on your renderer are very impressive! It’s cool hearing from other people who’ve dabbled in this.

I love RetroRaster, and appreciate what it has done for pushing boundaries with regards to realtime rendering on Roblox. The art style is subjective, but the performance and methods of optimisation they use is something that should not be slept on.

I appreciate how pretty the results your renderer can output, although I completely understand that the visual fidelity you strived for is something that has never been done before in realtime on this platform.

1 Like

This really cool to see! Glad to see more people trying stuff like this out! Very impressive results so far!

1 Like

Here’s today’s demo :slight_smile:

1 Like

That looks really good! I have a few questions about your system. How many reflection parts can you have without having performance issues? Can you have a part that is reflecting off of a part that is reflecting? Can you make a room of mirrors where each face in that room is a mirror? What would it look like inside?

In many rendering systems on roblox, I notice that when you move the camera, there is this “blur” effect. Is that on purpose, or is it intended?

1 Like

I was just thinking the same thing. I’m assuming it’s to help the rendering with performance, but it could be a stylistic choice too.

1 Like

It’s better to think about how many rays can be shot per frame before seeing any performance slowdown. In the video I’ve provided stats in the bottom left showing the amount of rays shot compared to the amount of pixels rendered in a frame.

When I turn on reflections in the video, you can see the ray count shoot up, and it no longer matches the amount of pixels rendered. I wouldn’t expect an environment where everything is completely reflective, but this serves as a proxy for how the system would respond if I added more checks with rays in the future, like shadows and lighting.

The blurring or lines that are left behind when quickly moving the camera helps reduce how many pixels are rendered per frame, allowing for more respectable frame-times.

Luau on the client is interpreted & doesn’t have access to the GPU, so it’s important to scrutinise every line of Luau while taking advantage of any C++ functions I can get my hands on [Faster, lower level language].

The blurring/lines is far from optimal, and in-fact shortly after uploading that previous demo I came across another method that dramatically increases performance in a way that it isn’t as jarring visually, which I will share in my next progress post.

For fun I tried out adding ‘CRT Scanlines’ to match the currently low-res aesthetic the renderer runs best at. Not only for visuals but it aided in further removing more lines to render per frame.

This is something that stylistically limits the renderer though, and for my new rendering method it may not yield any improvement due to upcoming architectural changes.

2 Likes

Ray tracing update in Flood Escape 2??? :pray: :pray:

5 Likes

Reminds me a lot of the style that the Atari series my dad and I used to play together used. It definitely has that retro style. Could be really cool for something similar to the Atari games, or the fnaf minigames. Honestly super impressed with how far and how fast this progressed!

1 Like

For a roblox run-time raytracer, it is a pretty good solution for a lot of devs and hobbyist.

And depending on the game, you can get a higher frame rate by adjusting some settings and tuning it to your liking. The videos shown on my forum post are highest graphics settings enabled, which ofc means it will run a bit slower and then you can down the settings a bit.

This still is a raytracer, so you’ll ofc run into performance issues just like with any raytracing attempt on roblox, as you’ve mentioned before. Trying to get much higher resolution with nice looking textures and stuff and a responsive renderer just isn’t feasible for roblox games via raytracing, especially on mobile.

This has never been the case. The renderer has tons of settings and are very customizable, including the resolution.

Can even get +60 FPS at 200x120 if we disable some of the more intensive settings.

You can completely disable that, and down some settings a bit and you can honestly get a very pleasing results.

RetroRaster was designed like a template, It can get higher resoltuions, but you can disable all kinds of rendering stuff, just like with a custom one. So it’s pretty well as good as a roblox raytracer can get.

I might even experiment with polygon rendering at some point honestly as I know you can definitely recreate PS1 or even Nintendo-like game engines via EditableImage.

Well, this just isn’t true. It’s up to the developer as It depends on the game. It could be a very nice and detailed game designed for PC and console only for example (or I guess you could call it a AAA title), or it could be a moderately detailed and a large open world game for an example (which would only be suitable for mid-end devices or higher)

I like to treat roblox similar to a platform like steam, a library of games with different variants of quality and performance requirements. There are markets for a high-end games, low-end games, etc, but generally, yes you do tend to aim more for mid-end / low-end devices, but this isn’t always the case

2 Likes

Honestly love that esthetic. Can’t wait to see what else you can do with this!

1 Like

Wow, what a fascinating use of editableimages. Is there currently support for objects that arent recorded by raycasts, such as decals or specialmeshes?

1 Like

If you add support with fog, and variable reflections, it will be amazing

What is the current specs of your computer to render this?

1 Like

There is currently no support for Decals or SpecialMeshes; only BaseParts.

Decals might be possible. As for SpecialMeshes, it seems like using InsertService:CreateMeshPartAsync() might be a viable path, raycasting depends on the collision logic of a BasePart in order to render it out correctly.

1 Like

There is support for Fog and reflections are determined by the reflectance of the BasePart :slight_smile:

I run a Macbook Pro M4 Max, so the single-threaded score is quite high (Which is important since the renderer is currently only single-threaded). That allows me to get pretty good performance out of it vs other machines.

I have, however, been doing regular sanity checks on my machine against other rendering solutions [RetroRaster and BeauChavelet], of which all have very different architectures, and so far there are no obvious issues with the performance.

1 Like

Here’s today’s realtime render; not much has changed other than being able to accurately calculate colours. I’m currently researching and making plans on how best to implement more features into the renderer, so stay tuned :slight_smile:

2 Likes

Things are starting to take shape!
Initial skybox support and correct global shadows!

5 Likes

This actually looks sick! You can definitely see the progress covered!

1 Like

I’ve added more stuff! Support for transparent parts while also influencing the colour of shadows. I messed around with the CRT effect I showed in an earlier post and now it looks like the footage is starting to come from a VHS tape :sweat_smile:

Still single-threaded!

1 Like

I’ve spent some time figuring out how best to allocate resources without any degradation in image quality, and I think this is the solution I will be resting on (Unless I discover something better, of course, but I need to move on and implement other features).

This rendering method preserves two-dimensional motion as opposed to previously using interlacing which is inherently one-dimensional. As a result, despite rendering at a lower frame-rate via increased resolution, the clarity of motion is miles better than how it was before.

There isn’t much performance to be gained beyond this until I take a more granular approach to the rendering pipeline, and implement multi-threading.

1 Like

why does this one have so much better frames then your next post