#Platinum — Path Tracing in Metal

1 messages · Page 1 of 1 (latest)

winged veldt
#

My third path tracer project and first one using the GPU. Also features a GUI scene editor and, soon, custom scene format.
Initially named metal-pt, then renamed platinum because it's a metal with symbol Pt, and also a cooler name.

#

@quick zealot i have a project thread now

quick zealot
#

NOO WAYYYY

#

Actually cooking

#

Oh shit indirect goes brrrr on the second screenshot

#

what are EVs by the way for the exposure?

#

Effort values?

#

Min-maxing pokemons?

winged veldt
#

that one is at +6.7EV

#

first one is about +5 i think

quick zealot
#

oh I meant what does EV mean?

#

what is it?

winged veldt
#

oh

quick zealot
#

i just have a scalar for my exposure control, no "EV" thingy

winged veldt
#

actually not sure what ev stands for but it's stops of exposure

#

+1ev is double the light

#

you just multiply by exp2(exposure_ev)

quick zealot
#

hmmm okay I see
so yeah -11EV was a lot earlier hehe

winged veldt
#

yeh it's like 1/2048 lmao

quick zealot
winged veldt
#

6 and 2/3 stops is also a lot, but not unreasonable

quick zealot
#

what does it look like with EV 0 ?

winged veldt
#

5 stops is about the difference between direct sunlight and bounced light in daytime

#

if you ever wondered why getting nice photos in sunny weather is fucking hard, that's why

#

the sun is bright

quick zealot
#

That's blender, it looks okay without any exposure modification

#

But i guess exposure tuning is purely artistic control no? Like, there's no "correct" image and it's all about what looks good or not?

#

Also Blender sweating a bit with the indirect lighting noise in the first few samples (100)

winged veldt
winged veldt
quick zealot
#

How does Blender "get it right" automatically? Auto-exposure? I haven't seen a feature like that in Blender though

winged veldt
#

honestly idk

#

the thing about the ev scale is it's relative

#

so "0ev" is not some kind of absolute value, just means whatever your sensor picks up

quick zealot
#

it's there actually but default values just work 🤷‍♂️

winged veldt
#

iirc there is an "absolute" lv scale where direct sunlight is something like 14lv

#

in terms of exposure in a real camera that usually corresponds to about 1/250s f/8 at iso 100

quick zealot
#

oh and then you can do everything relative to the sun?

winged veldt
#

yeah you sorta use that as a reference point

#

but for rendering your values can be pretty much anything

#

as long as they make sense relative to each other you can scale as much as you want

winged veldt
#

so maybe they are doing some kind of auto exposure or they just handle env maps different

white hatch
#

PlatinumSrc 🤝 Platinum

quick zealot
#

Just tried path guiding in Blender also, for fun, to see how much it helps

First is 256SPP no guiding. 2min09
Second is 256SPP with path guiding (all samples both used for training and rendering). 2min39
Third is no path guiding but equal time with path guiding (2min44)

Uncompressed images

winged veldt
#

damn, gotta get myself some path guiding

old hollow
#

Looks awesome 🙂 does it run on any apple silicon Mac? Even M1 Pro? Send a demo over when you have something and I’ll have a go

#

Also in case no one said, afaik EV just means exposure value

#

But idk it’s been a while since I did photography heh

winged veldt
old hollow
#

Ahhhhh yeah mine supports metal 3

winged veldt
old hollow
#

Also it’s crazy how my Mac can get almost as good fps on my renderer as my pc with a 4070 in it

#

Xcode?

winged veldt
#

yeh

old hollow
#

Ok mate I’ll have a try

winged veldt
#

sadly lol, but the metal debugger is a must have

old hollow
#

Yeah haha

#

I use c# is yours c++ or objective c?

winged veldt
#

i think the only dependency you'll need actually installed on your system is openimageio

old hollow
#

Ah ok

winged veldt
#

cause it's an absolute pain to build and link from source agonyfrog

old hollow
#

Did you see my shadows btw in #wip

#

Haha yeah fun

#

You’d have to guide me I use rider never done shit with Xcode only have it installed because it’s required for ue5

winged veldt
#

yee looking great! do you have a project thread for your renderer? realtime right?

old hollow
#

Not yet and yeah real time

#

Because it supports dx12

#

😄

winged veldt
old hollow
#

OpenGL on Mac tho

#

Ahhhhh

winged veldt
#

oof

#

i just don't bother supporting other platforms lol

old hollow
#

I was tempted to install that Mac specific Linux distribution on as a second os

winged veldt
#

i have a pc but my mbp is more powerful anyway

old hollow
#

Forgot the name but where Mac OS stops gl support > 4.1 this has 4.6 and vulkan 1.3

winged veldt
old hollow
#

Heh which MacBook you go yeah I mean that one mate

winged veldt
#

don't think they support m3 yet, though

old hollow
#

Got*

#

Pretty sure asahi flavour of uhhhhhh

#

Fuckin

winged veldt
old hollow
#

The new one in their homepage lol

#

Ooooo nice

#

Which BVH method you using?

winged veldt
#

the driver one KEKW

old hollow
#

Was it Tiny? Idk if it was yours that had that in one of the messages

#

Ah 🤣

#

Hah

#

Btw for my gl renderer

#

I wanna do hierarchical culling

winged veldt
#

though i have wondered if it's possible at all to custom build a bvh and give that to metal's hw rt api

old hollow
#

So parent gets its bounds tested if it passes and should draw don’t bother testing stuff lower down the chain

#

My frustum culling on a scene with 500 game objects is like 0.006ms on cpu anyway haha

#

Game object atm includes renderables

#

I don’t wanna do an ecs until I finish the uni portion of the project

winged veldt
#

nice, i haven't done much realtime (by which i mean i basically did learnopengl and that's it lol)

old hollow
#

You using Assimp?

winged veldt
#

nope

old hollow
#

Ahh 🙂

winged veldt
#

it's stinky and bad

#

fastgltf frogapprove

old hollow
#

I did that shadow filter just from knowing a lil bit about how Pcss works

#

Ah ok

#

Gltf is nice

winged veldt
#

though i'm gonna be working on my custom scene format next because gltf doesn't support everything i want and is actually pretty slow to load

old hollow
#

Ahhh ok

#

Well

winged veldt
#

well, not the gltf itself, fastgltf lives up to its name

old hollow
#

You can process with fastgltf and save as your own binary format

winged veldt
#

decoding the png textures for something like intel sponza takes >1m

old hollow
#

Ah shit

winged veldt
old hollow
#

I need to add texture loading but first I wanna do a material system lmao

winged veldt
#

(i could multithread it which would make it much faster ofc, but still, i do want my own scene format)

old hollow
#

So I can at least have colours

#

Ahhhh yeah

#

Threading in c# is super easy too

winged veldt
old hollow
#

I have to learn cpp decently enough to make some weird social network thingy as final project for the module

#

Yeah 😄

winged veldt
#

i'll have to build my own nih thread pool/job system at some point

old hollow
#

Assimp is cool but I only use it because it gives results and supports everything

#

Ahhh yeah

winged veldt
#

but it does support a lot of formats which is nice

old hollow
#

heh

winged veldt
#

and quite shrimple to integrate

old hollow
#

yeah it's very easy

#

hang on lemme share some fun stuff 😄

winged veldt
#

you should check out fastgltf tho, it's good

old hollow
#

c# binding?

#

if it's a c api then it'll probs have a csharp flavour 😄

winged veldt
#

also the author is in this server and a cool frog so you can bother them if you can't find something in the docs lol

old hollow
#

ahhh 🙂

winged veldt
old hollow
#

yeah I don't wanna bug people tho cos like I got in trouble for saying about trying to get some code gpt spat out working lol

winged veldt
#

or just switch to c++ the superior language misinfo

old hollow
#

I used gpt to do my pbr but that's all 🙂

#

cos I don't understand mathematical notation in papers 😄

winged veldt
#

time to learn them maths

old hollow
#

haha well ye c++ is good but meh

#

I'd rather use rust if I wanted to learn a new language

#

mmm thread safe by design

#

borrows et

#

c

#

good stuff for if I ever learn vulkan lol

#

anyway peep this for how I load my assimp stuff 😄

#

sorry for the big message hang on

#

oh thanks discord for making it smalleer 😄

#

the new parent thing may or may not cause issues but probably not as it doesn't matter if it maintains a hierarchy lol

#

it loads the scene so I don't give a shit until I need to worry about parenting for blender files etc 🙂

winged veldt
#

so much more likely to find the right libraries and resources

old hollow
#

yeah

winged veldt
# old hollow

if those are assimp apis they look way nicer than the cpp ones heh

old hollow
#

here's light radius turned up far too high

#

but as you can see no artifacts or issues really as I have per pixel noise (the classic frac(sin shit)

#

adds a bit of noise but it's ok

#

I'll try and do materials but I need to shuffle some stuff about

#

thinking of doing a thickness estimation with shadowmap and projected z to do some sss shit but I need to add some data to the gbuffer aha

#

gonna try and visualise the depth difference between projection and the shadowmap see if it's feasible to do sss using that

#

anyway feel free to dm me if you wanna chat 🙂

#

will try to remember to attempt to compile your pt

#

😄

#

at some point

winged veldt
#

sure, lmk if you have any issues

coral abyss
old hollow
#

Yeah Xcode sucks shit

#

🤣

winged veldt
winged veldt
#

@coral abyss how do you get clion/vscode/whatever to work with metal shaders? i know you can get most of the way there by telling it to pretend it's a cpp file

#

but iirc you need some additional defines and such

coral abyss
#

i’m cheating by using wgpu instead of writing metal directly

winged veldt
#

ah

#

i like msl though

#

it's like the least bad shading language

old hollow
#

Yeah btw it’s asahi fedora

#

Supports gl4.6 and vk1.3

#

I want to try and do voxel cone tracing on my windows flavour of the renderer hah

timid frigate
#

@winged veldt why you dont use gulbrandsenFresnelFit()? can you do compare with Schlick approx?

timid frigate
#

gulbrandsen's approach looks better

#

is halton give HUGE advantages in quality?

#

why halton, not hammersley or sobol?

winged veldt
#

i'm gonna replace it with a nice fast sobol implementation soon

#

i just didn't bother yet cause ehh it works

#

but it's a crap halton stolen from apple's ray tracing example

#

notice how the scrambling is a texture written with rand() on the cpu side bleakekw

winged veldt
timid frigate
#

Saint lazyness

hazy zenith
jaunty void
#

i like the white theme too

#

but you can do one better 🙂

#

these drop down thingies kind of ruin it

#

however, with this simple trick you can let youtubers know:
style.WindowMenuButtonPosition = ImGuiDir_None;

#

how to hide it 😉

winged veldt
#

will be keeping it as an option, though

jaunty void
#

it does look nice anyway

winged veldt
#

@jaunty void frogapprove

#

i think ima do dark theme now

#

working on ui shit for a bit will be a nice break between all the renderer stuff and refactoring the entire data model

#

i'd like to get icons in as well, afaik the easiest way to do that with imgui is an icon font but i'd rather have my own custom icons and if they can have color even better

jaunty void
#

please do 🙂

winged veldt
#

dark theme wip

#

also trying out a nice green/teal accent color, blue is good but a little too generic

jaunty void
#

the mac border ruins it

#

: >

winged veldt
#

ye, i should figure out how to remove the titlebar and just keep the traffic lights

#

like imhex

jaunty void
#

borderless binbow perhaps and then 3 custom buttons ye

winged veldt
#

they're not custom

#

those are the native buttons, pretty sure there's a window mode in macos where you can keep the buttons and just remove the titlebar

jaunty void
#

i see, but it also looks like the menu is drawn into the non client rectarea then

#

ah that could be a cocoa thing perhaps

winged veldt
#

afaik it's borderless with the buttons as an overlay

jaunty void
#

i mean you can do that on windows too at least

#

we could check imhex : >

winged veldt
#

ye

#

does it use sdl?

jaunty void
#

i dont think so

#

looks like they have custom backends for each platform

#

    source/window/window.cpp
    source/window/win_window.cpp
    source/window/macos_window.cpp
    source/window/linux_window.cpp
    source/window/web_window.cpp
#

macos uses glfw

winged veldt
#

ah, ima have a look

jaunty void
#

nah they use glfw for everything

#

just some custom shizzle per platform it seems

winged veldt
#

telling sdl to make the window borderless loses the traffic lights and rounded corners too

#

sadge

#

tbh i can probably hack sdl some more

#

i've already added custom events to it for touchpad zoom lel

jaunty void
#

wurst case you add some custom title bar which handles mouse capture for moving it around

#

and the system buttons

winged veldt
#

ah apparently glfw provides access to the cocoa window object

#

wonder if sdl exposes that

winged veldt
#

@jaunty void mission accomplished

#

now i need to add dark theme to the viewports as well

#

and a custom light theme

#

i think i can get fancy and make it use the system theme him

winged veldt
#

now supports viewport theming, couple more things to tweak but it's looking pretty good

timid frigate
quick zealot
hazy zenith
#

Outlines are hard garfsmug

winged veldt
#

i pretty much still did, just had to find how to get a handle to the cocoa window object from sdl2

winged veldt
#

what i'm doing is fairly shrimple and works super well

#

i just write a secondary uint16 framebuffer with the object ids for each mesh

#

then in a later pass i run a simple edge detect kernel on that fb, color the results (selection color if any of the pixels match the selected object id, gray otherwise) and merge it into the main framebuffer using the edge detect value as the alpha channel

#

having that framebuffer also lets me select objects by clicking on the viewport without doing a raycast or anything, as i can just read back the pixel behind the mouse cursor to get the object id

winged veldt
#

i'll have to upgrade that to u32 eventually, that fb isn't too big anyway

jaunty void
#

that looks neat

#

i also like the teal/peach or whatever you call those colors 😄

winged veldt
#

if your peach looks like that don't eat it KEKW

jaunty void
#

😄

quick zealot
#

Any thoughts on that @winged veldt ?

winged veldt
#

oh looks nice

#

i'll read the full thing later, might be interesting to implement

#

it's always heitz isn't it

quick zealot
#

hehe ye

winged veldt
#

i wonder if it works well with the blue noise sampler from that other paper

quick zealot
#

one thing that bothers me is that this is only relevant at low SPP count
I'd expect 64 or more to show barely no difference

and I don't expect my offline renderer to produce anything that useful below 64 SPP (although this may actually be debatable with ReSTIR shenanigans)

quick zealot
winged veldt
#

yeah seems to be

#

so i'm wondering if they sort of synergize to give even better blue noise characteristics

quick zealot
#

oh okay

winged veldt
#

i'm on phone so i just read the abstract heh

winged veldt
quick zealot
winged veldt
#

yea

#

always some noise left though, so why not make it better

quick zealot
#

ye I guess that's right
"give it a shot" is probably the best answer

winged veldt
#

ye

#

soon™

quick zealot
#

always

#

the soon™ todolist is getting longer and longer

winged veldt
#

it do

#

still stuck on getting the scene stuff right

#

and probably end up rewriting it 3 more times anyway agonyfrog

quick zealot
#

the custom scene format?

winged veldt
#

not yet, that's the next bikeshed

#

this is the internals, all the code for handling the scene graph assets etc

#

i ended up using entt for the scene graph which is nice since the ecs model makes it super easy to extend with new stuff should i need to

#

asset manager otoh is a pain

#

i'm still debating how to handle it exactly

#

i think i'm just going to keep my own ref count because it's the most strsightforward way to get the features i want, but it also means a lot of interconnected code

quick zealot
#

bruhhhh engine management stufff

#

helll nahh I'll keep my disgusting architecture xD

#

pray in the trustworthy 1-level BVH no instancing no scene graph no nothing 🙏

winged veldt
#

alright, after some more thinking about the use case and implementation i think i've arrived at an asset management model that should work pretty well without being too complicated

#

one thing i noticed is that having ids as handles to resources is far more flexible than pointers, so i'm going to keep that and avoid using shared_ptr for everything even though it would make parts of the code cleaner

#

also, i need some assets (like individually imported textures, or user created materials) to live on regardless of whether they are in use or not, as it's entirely possible for them not to be in use when created, but i also need a way to quickly clean up imported assets (ie from a gltf) which are potentially very large with 100s of textures, meshes and materials

#

then there's the issue of manually removing assets which invalidates references to them

#

considering all that i decided to keep my current implementation of an internal reference count, dropping assets when they are orphaned, and simply add a "retain" flag that can be toggled on and off for individual assets which tells the asset manager not to drop them when the ref count hits zero

#

imported textures and anything user created will be retained by default, anything from a gltf import will not, so removing it from the scene will drop any assets that haven't been manually retained or used elsewhere

#

and as for the reference issue, i'm simply going to stop reusing ids (don't think i should ever run out of uint64...) and invalidate references to deleted assets (probably by just removing the key from the assets map but not the refcount one)

#

i can deal with invalid references later, probably just culling those objects from the scene when rendering and adding a warning to the ui

quick zealot
#

oh wait NVM you're probably going to do that for user assets and immediately clean up unused GLTF assets as you say below

winged veldt
#

and even add an option to retain gltf imports so it behaves like blender

#

i wanted to have the auto delete for imports though, cause importing and deleting gltf assets is a pretty common use case and it's trivial to implement once the ref count is in place

full hornet
winged veldt
#

dear imgui

#

rounded corners and a nice font go a long way

full hornet
winged veldt
#

oh yea people do some impressive stuff with imgui

#

this is imgui as well

#

idk at which point you're better off writing your own ui, though

#

imgui is rather limited when it comes to layout (haven't run into those limitations yet, though)

quick zealot
winged veldt
quick zealot
#

Yoooo Lyon university that's me frogeheart

#

So that's basically concurrent work to the other paper no?

old hollow
#

Btw does hw rt work on M1 Pro?

#

I can’t remember if it does

#

All I know is I’m enjoying pissing about with rust and (for Mac) metal even tho wgpu abstracts the balls off api specifics heh

#

Tempted to do bdpt but would need to know specifics so I can adjust to make it the best it can be per platform heh

quick zealot
#

hmmmmm actually they seem to suggest it's fine for GPUs with their hashing approach

#

nice

#

That's white noise at the top

#

and FFT at the bottom

#

why isn't the FFT white noise too?

#

Hmmmm I guess it's the emissive quad actually

winged veldt
#

the apis do work iirc, but the gpu doesn't have rt cores

#

rt hardware is m3 and a(whatever-is-in-the-iphone-15-pro) onwards

winged veldt
#

it's hard to make it performant on the gpu though, iirc

#

i'll have to read the paper to see if they have any notes on a gpu implementation since pbr book doesn't

old hollow
#

ohhhh right ok 😦

#

rip

#

😄

#

also I'll post in wip again, got a triangle drawing 😄

winged veldt
#

took a while because this is a major rewrite of the entire scene architecture, but the new code is much cleaner and should scale much nicer as i keep adding stuff

#

being the first major refactor i did it was also a nice test of my overall architecture, i think it went pretty well as even though i completely overhauled the api for one "module" the changes to the other parts (ui, renderers) were limited and quite simple which tells me the "contact surface" between modules is small

old hollow
#

Nice one

#

Looks good, can you path trace in the “editor” viewport or is it limited to that lil output window?

winged veldt
#

it's on its own window, but it can be resized

#

at some point i might add a "live" pt view, but it's not a priority at the moment

#

i think i'm going to make the ui a little nicer and start working on the scene format

#

big render window

#

(imgui docking is great)

#

i have to see if imgui has an api to save/restore dockspace state so i can have workspaces kinda like blender

hazy zenith
#

Doesn't it save stuff to imgui.ini automatically?

quick zealot
winged veldt
#

ig if it saves it to the file that must be in memory somewhere as well

hazy zenith
#

Oh I see what you mean

winged veldt
#

took way longer than it should have, but i added a nice grid display for textures in the asset manager

jaunty void
#

theres even a demo of it in ze imgui demo -> examples menu

winged veldt
#

there is too

#

fuck

jaunty void
#

: )

#

it (yours) looks cool

winged veldt
#

ye, but i'm probably gonna look at the example code and rewrite cause that supports pretty much all the features i was gonna add anyway

#

and looks cleaner than my cursed table shit

#

ima keep the layout and texture preview, though

jaunty void
#

aye

winged veldt
#

looking nicer now, and it supports showing all asset types at once + multiselect

#

ima add some filters and a preview/properties panel

#

also, sdl is pissing me off, the scrolling behavior sucks dogshit

full hornet
winged veldt
#

ehh been working on platinum on and off since... november last year iirc? progress has been kinda slow because life keeps getting in the way though

full hornet
#

so you have 1 year of experience in gp ?

winged veldt
#

been doing gp somewhat seriously for just over a year i think, this is my third path tracer in that time

#

this is the first one with an actual ui, scene editor etc tho so still pretty new to the whole thing

#

i did some gp related stuff as far back as high school almost a decade ago now but few and far between (a couple very crappy ray tracers, a software rasterizer and super basic opengl stuff)

#

most of my programming experience is in webdev actually

full hornet
#

hopefully i can pull something like this in 3 years.

#

thanks for the answer !

winged veldt
#

don't worry about that tbh, take your time

timid frigate
winged veldt
#

frontend, mostly react/nextjs stuff but also some node backend stuff

timid frigate
#

I'm on webdev backend - node.js mostly

#

webdev for money, raytracing for fun

winged veldt
#

frfr

spice frost
#

if only ray tracing for both fun and money 😭

shrewd frost
#

just wanted to say the intel sponza render looks really nice on the cover photo froge_love

winged veldt
#

finally everything works with the new rewrite + asset manager

#

time to work on the actual scene format next

#

i'm thinking of combining json for the scene hierarchy with a binary dump of mesh/texture data in the same file

#

splitting into parts should be trivial with a shrimple header

winged veldt
#

got a quick json export test working, i'll refactor tomorrow to move all the serialization code to a different file/class and complete the scene export with materials etc

#

then just need to figure out the binary part, i think i'll just add some properties in the json with the byte length + offset of each buffer/texture

#

then i can have an extremely simple header (just a uint64 with the length of the json in bytes), loader takes the json bytes, parses that, then reads in asset data as needed

#

i might actually do two formats with one being json+sidecar binary file just for ease of debugging

#

i really am just reinventing gltf lmao

timid frigate
#

do you export with printf or some library like simdjson?

full hornet
winged veldt
#

intel sponza takes ~30 seconds to load in and most of that is png decoding

#

granted that is single threaded, i could bring it down to 4-5 seconds by decoding on all threads (and eventually will) but i'd rather not have to deal with texture decoding at all

timid frigate
#

you can repack textures to ktx for example and cache and in next time when you load scene you can check cache exists and load cached. Load time can be smaller

#

you can cache slow pngs only. jpg loads faster

winged veldt
#

or i can ditch gltf altogether, making a scene format is not hard

#

no decoding algo will be faster than memcpy

winged veldt
#

now just need to do the binary dump for buffers, textures etc

#

should be simple enough, just write the data to a file and store the offset/size for each one in a map, then write that to the json

winged veldt
#

added binary data file, now just need to write the code for loading scenes from these files

#

it saves pretty quick, but the downside of doing no compression/encoding whatsoever is the files are beeg

#

intel sponza is 7gb compared to 2.5gb glb

timid frigate
#

Did you plan to use wuffs for faster images loading or pkd images formats like bc ir astc?

winged veldt
#

i'm not gonna bother with wuffs, no docs

#

might look into some trivially decodable format in the future but for now file size is a non issue

old hollow
#

Gpu can decode some compressed formats btw 🙂

#

Bc6h I think it is?

winged veldt
#

ye, i might look into compressed texture formats later

old hollow
#

Yeah idk if there’s much benefit for something like a path tracer where you ideally don’t want compression artifacts etc but ye

winged veldt
#

it's not lossless?

#

haven't looked into it at all, file size is not a concern atm so i'm just dumping texture data to a file lol

#

i will eventually multithread gltf loading though and if it's fast enough i might use the same code to encode/decode images for my format

#

it's flexible enough that adding options should be trivial

winged veldt
#

scene loading done, i call this a big success frogapprove

Loaded scene intelsponza in 3332 ms
Import glTF sponza-new-ivy in 23559 ms
#

quick profiling tells me the loader is heavily i/o bound, it is reading 7gb of uncompressed texture data after all

#

ofc gltf import can go much quicker if i do it multithreaded (and eventually will), would probably get down to 5ish seconds on my m3 pro

#

i'll have to look into possible lossless compression algos for textures that are very quick to encode/decode, or metal's gpu encoding, might actually make the loading quicker as it's i/o bound

#

anyway, i have a scene format, that's enough for now

#

time for fun post processing stuff

winged veldt
#

also exposed agx "look" parameters, though i want to add additional post processing steps next (including proper color grading)

old hollow
#

Pls add davinci resolve style colour grading guff

#

😅 just modify the colour picker a wee bit eh

#

Looking very good

winged veldt
#

it's video editing so probably pretty complex stuff

#

i'm thinking of doing a lightroom style thing where you can modify curves, but idk yet

jaunty void
#

why does that look so neat

winged veldt
#

what part lol

#

i forgot to clamp the agx saturation slider and you can use it to invert the colors KEKW

winged veldt
#

made some ui changes to put all the labels on the left, the imgui default of having labels to the right of the controls annoys me

jaunty void
#

the imgui parts 🙂

winged veldt
#

heh thanks :)

#

i've been doing ui dev/design as a job for half a decade lol

jaunty void
#

: )

old hollow
#

I guess just generate a gradient from highlight to mid to low and map it using the image luminosity ? 🙂

winged veldt
#

ah, yea, lr has that as well

#

actually might be fun to implement

old hollow
winged veldt
#

though, anything color related in the ui has the ever present imgui skill issue of not being in srgb

old hollow
#

oh yeah it's diff 😄

#

and aha yeah

#

wait what does imgui use? oh yeah srgb ok gotcha

winged veldt
#

imgui is in linear color, doesn't do any srgb correction

old hollow
#

yeah

winged veldt
#

kinda makes sense because of how it's designed but uhh

old hollow
#

so I guess uh, custom imgui shader? 😄

#

with per-widget toggle 😄 😄

#

good luck with that one 😄

winged veldt
#

i'll figure something out lol

old hollow
#

btw can you upload an executable build so I can try without having to compile it myself? when you get time 😄

#

I've got an m1 pro 🙂

#

unless

#

clion is what you use yeah?

#

I can try to compile it with that, hopefully it works ha cos otherwise I ain't got a clue how to make it work 😄

#

will give it a go anyway :)))

jaunty void
#

ive seen a color wheel thing like those somewhere in the imgur galleries

old hollow
#

booo ;-; missing openimageio

#

;-;

#

it's homebrew'd but shouldn't it be included in the repo ?

#

rip

#

you should try to find some t ime to set up github actions and have it build into a mac app automatically 😄

winged veldt
winged veldt
old hollow
#

Aw shi

#

Can you do a build or help me build it? When you have time- I wanna try it haha

winged veldt
#

should just build with cmake tbh

#

assuming you have oiio installed via homebrew

winged veldt
#

added the flim tonemapper and boy does it expose a lot of parameters

#

@burnt peak you might be interested in this one, it seems to be a full on film simulation with negative+print much like you've been looking at

burnt peak
winged veldt
#

ye, that's it

burnt peak
#

I watched that guy's youtube video - good stuff

#

I more or less expanded on what he described.

#

it's actually very similar to agx

winged veldt
#

implementation is a fair bit more complex though, agx is very simple

burnt peak
#

except he uses a simple sigmoid curve

#

ehh - sure, he goes through the trouble of kind of modeling everything in detail, but the actual curve is simpler, and reused for every channel

#

unless it's evolved since that video

winged veldt
#

though i do like that the curve can be adjusted with just two points, though

burnt peak
#

that must be new

#

or is it? I think in the video used smoothstep - maybe just as example though

winged veldt
#

yea it's not smoothstep

#

uses a sigmoid curve with a linear segment defined by two points

burnt peak
#

ah

#

did you rewrite the whole thing for c++?

winged veldt
#

msl, so basically yes

#

based on the glsl version

burnt peak
#

awesome

#

I'm going to try fitting some LUTs for the second stage of mine and see if that goes anywhere

winged veldt
burnt peak
#

ah - cool
I'm blind

#

I tried a 7th order polynomial with added crosstalk and it's still not quite enough - so I'll pull all the saturation-related stuff out and leave that for the lookups

#

I don't know why I'm so stuck on this, but I'd really like to have something flexible enough for specific profiles

timid frigate
#

@winged veldt what tonemappers you prefer to use?

winged veldt
#

i'm in the process of trying them out rn lol

#

i like agx, looks nice for most scenes

#

flim is neat but it has so many parameters it can be a little overwhelming tbh

#

i also added the khronos pbr one but i don't really like it, it's fine if you just want a look as close as possible to no tonemapping but it doesn't look very good imo

#

will try tony and maybe add an aces fit but that's for tomorrow lol it's like 4:30am

timid frigate
#

What you think about uncharted2? Some times ago I like it a lot

#

Uncharted2 have lack of contrast but cover more colors

old hollow
#

I think I’ll have a try later on just on my way to uni then got a lecture at 11 I think ?

old hollow
#

ok so it seems

#

the version of openimageio you use is out of date, how can I install the specific version in your project, 3.0.1.0 as I can't seem to figure it out? 😦

#

@winged veldt

#

got it mate, figure out how to pull the specific bottle 🙂

#

ok so you have a nasty dependency on a local file

#

(:

#

just replaced your username with mine as I installed the font heh

#

ok well I got a basic scene rendering that I set up and exported with blender, but the MIS + NEE render mode does not produce anything besides black

#

😦

#

Btw mate

#

Replace /users/leo with $user

old hollow
#

Btw, make use of imguizmo save yourself hassle of making your own manipulator 🙂

#

Overall I love the ui, and found it easy to use after the initial headache and brew being dumb and not allowing you to specify a version like it used to

#

But yeah keep it up:) will you be adding lights to your editor next? Could add ies profile support as an extra fun thing 🙂

dense jacinth
winged veldt
# old hollow

oops i forgot to remove that from the very first commit lol

#

iirc ~ didn't work for some reason? hence the absolute path

#

but ye, gotta fix that

winged veldt
#

or scene

winged veldt
#

you have any good reading on that?

#

(btw, the reason i don't include the font with the app is because of apple's licensing not allowing redistribution)

old hollow
winged veldt
#

send ze file

old hollow
winged veldt
#

emissive surfaces are the only type of light supported, other than hdri

old hollow
#

I can understand c++ decently enough

#

Also it still didn’t work when I added a sphere with emissive

#

I’m on M1 Pro 8+10

#

I believe those are the core counts, but yeah I guess something doesn’t like me if it’s not working, but as far as the ies goes, I asked ChatGPT to help me convert the spherical encoding of the ies into 2D cookie 😬

#

It doesn’t have hw rt but it falls back so idk what’s up unless the scene is just weird breaking it gimme 5 mins I’ll send the glb

winged veldt
#

yeh, unless there's something in the nee path that's not supported on m1?

#

but afaik all apple silicon macs have the same feature support

old hollow
#

Hmmm yeah I’ll send the file just getting a coffee 🙂

#

alright, so the machine is overheating so I got water, let me upload the file 🙂

#

there you go hope that works ok with it being discord :V

#

it's just a plane and a cube lol with an area light and camera 🙂

#

btw, just fyi, the only way to rotate camera is using two fingers on the mac trackpad, there's no way to use an external mouse 🙂

#

but I guess that's just because it's what you use 🙂

#

I wouldn't have thought there'd be any difference, are you using some sort of mac specific multi touch api? )

#

also for me at least, selecting in my scene glb - I can select the plane, but clicking the cube does nothing 😄

#

playing about with it, the selecting seems to completely stop working heh

winged veldt
#

blender's area lights are not geometry, so i don't support that

#

works for me if i add an emissive sphere 🤷‍♂️

#

you were setting emissive strength on it to something other than zero, right?

winged veldt
winged veldt
#

might add later but it's a very low priority

#

mice on macos kinda suck ass anyway

old hollow
#

nope, even with an emissive sphere it only renders on simple for me

winged veldt
#

(and yea, i'm using the touch inputs for scrolling, also modified sdl2 to add the apple magnify event for zoom)

old hollow
#

😛

winged veldt
#

might be a hw support thing but i don't see anything in the support tables to suggest that

old hollow
#

I can show you a video 🙂

winged veldt
#

sure

old hollow
#

yeah, idk :/

#

uuhhhh wtf

#

it works now??????

winged veldt
old hollow
#

the fuck

#

I did the same exact thing as I did before

#

with the emissive stuff

#

it was rendering black before and now it works?????

#

uhhh weird

#

however

#

selection is very weird

#

I'm in fullscreen btw

winged veldt
#

works fine for me

#

the way i do outlines might be a little confusing ig

old hollow
#

it's not the outliens

#

I'm constantly clicking in that video

#

can't select the cube by clicking it

winged veldt
#

oh that is uhh yeah not supposed to happen lol

old hollow
#

😄

winged veldt
#

wait

#

did you happen to move the window to an external monitor by any chance

#

and is that monitor low dpi

old hollow
#

oh I have an idea, are you by any chance using your mac in a specific res?

#

no this is on my native display

winged veldt
#

huh

#

weird

old hollow
#

but the res is higher than default mac res

#

I have it higher than the default

#

😄

winged veldt
#

cause iirc i don't support display scaling after startup

#

but it should detect properly on start

old hollow
#

yeah I didn't move it anywhere

#

oh right? so if I maximise the window it breaks?

winged veldt
#

nah

#

that should be fine

#

...unless i just forgor to scale properly there

#

oh yep

#

i just hardcoded a 2 KEKW

#

well ima fix that

old hollow
#

hahahaha

#

this is fun 😄

#

not many people have tested this right? so some things that work for you just by chance don't work for me, we be fixing bugs today 😄

winged veldt
#

how are the render times on an m1 btw

old hollow
#

I wanna know why it's not working sometimes with MIS NEE

#

haha 😄

#

yeah well I don't mind testing cool shit

#

and uh I'll make a vid 🙂

winged veldt
#

just don't expect the bugs to get fixed quick cause i'm working on my postprocessing

#

lol

old hollow
#

ye, the MIS NEE is ropey

#

this is what happens when using an emissive material on a sphere added from the editor

winged veldt
#

that's odd, works fine for me

old hollow
#

and with the cube emmissive from the gltf file this happens XD

#

lmao something ain't right 😄

#

oh wait a sec

#

what is a sane value to use for emissive strength

#

because before I had to have it high

#

oh it was an issue with mat

#

but yeah your sphere and I guess cube that can be added from add menu

#

seems to break stuff 😄

winged veldt
#

huh, it shouldn't

#

but uhh maybe i broke the version on master lel

old hollow
#

and it's working again kek

#

weird

#

ignore the white floor

#

I had emissive on the mat

winged veldt
#

try pulling the pp branch that's the one i'm working on

old hollow
#

but there's deffo a bug where emissive sucks light out of the scne 😄

#

yeah I will try that 🙂

#

MIS NEE seems to work ok

#

let me try do what I did before to replicate the bug

#

pls, when you get time btw, add support for maximise without fullscreen by double clicking the title bar 😄

winged veldt
old hollow
#

I didn't 😄

winged veldt
#

i use rectangle so i forgot about that completely

#

but ig since i hide the titlebar that's gone

#

gotta figure out how to bring it back

old hollow
#

hm seems to be fine now so I guess it wasn't a bug just my own error 😄

#

or it's a tricky one, but yeah weird 😄

winged veldt
#

wontfix: unsupported hardware

#

(unsupported hardware is anything that's not my own laptop KEKW )

old hollow
#

also I like how you've got a lut generator 😄

winged veldt
#

do let me know if you figure out what might be causing it more specifically though lol, if i can reproduce i'll fix it

old hollow
#

and ye, I guess it's fine if you don't care about others using it, it's a personal fun project heh

winged veldt
old hollow
#

and yeah I'm not sure, like setting a light to negative just makes the whole scene black in the render view instantly

#

but in the bugged time, it would take colour away slowly 😄

#

and that was without negative in the emissive

winged veldt
old hollow
#

so testing if I ahd it negative proved wrong 😄

#

lol yeah 😄

#

haha

winged veldt
#

not the nans agonyfrog

old hollow
#

😢

winged veldt
#

oh well i'll have to check it out later lol

old hollow
#

yeah it's strange that it randomly happens 😄

winged veldt
old hollow
#

yeah hehe

#

I like it anyway

#

I've gotta do a similar thing but in rust, just as a way to learn rust and wgsl which is very unique compared to glsl or hlsl

#

glsl to hlsl and reverse is easy to transition, but going from hlsl / glsl to wgsl is really weird because it's completely unique 😄

winged veldt
#

my first path tracer was in rust frogeheart

#

it's kinda shit, just following along with rtow but it was super fun

old hollow
#

heh

winged veldt
#

ngl i miss rust lol

old hollow
#

😄 rust is pretty nice

#

I've had tons of people at uni saying oh learn rust

#

so I started 😄

dense jacinth
#

c++ supremacy

winged veldt
#

i'm one of those people lol i'm a rust evangelist at uni

#

(then i write c++ for most of my shit lol)

old hollow
#

haha 😄

old hollow
winged veldt
#

but yeah i think i prefer c++ for gp, anything else i like rust better, just very nice to write

#

though, gib polonius pls

old hollow
#

meanwhile, laughs in thread safe, memory safe

#

tbh c++ is ok it's just hard to figure out having never used it

#

did you do your rust raytracing on the gpu btw?

#

wgpu W

winged veldt
#

nope, cpu

#

this is my first gpu path tracer

old hollow
#

I'm legit hopeful about doing the path tracing stuff, and ohhh was it multi threaded ? and ah yeah. Ithink you did say that in this thread somewhere woops

#

😄

dense jacinth
#

but only as a discussion topic on how to easily eliminate memory safety issues

old hollow
#

heh, we've got it next year in some multithreading module along with C++ and cuda

#

heh

#

also

#

linux on mac runs on rust

#

(asahi)

dense jacinth
#

ye, well parts of it

old hollow
#

yeah ofc

#

it's cool though

dense jacinth
#

i think its only some drivers

dense jacinth
winged veldt
#

bro showing up at uni with a smurf account

dense jacinth
#

kinda

winged veldt
#

on a totally unrelated note, @quick zealot i was thinking last night and i think i came up with a way to do gmon with slightly less insane memory usage

#

still needs one framebuffer per bucket, but at least it's not two per bucket

#

but basically instead of each bucket getting two pingpong buffers, each bucket gets one accumulator buffer and you have one single buffer you bounce off

#

anyway ima try to implement it soon™ when i finish setting up my post processing pipeloin

old hollow
#

Cool idea 😅

timid frigate
winged veldt
#

gotta add it to the tonemapper list

#

added a proper post processing pipeline with arbitrary number of passes (tonemapping pass is always on and at the end), rn i only have the exposure pass so i did this thing to test

timid frigate
winged veldt
#

but it should be pretty shrimple to add more post processing passes now

timid frigate
#

And autoexpo

old hollow
#

Nice hehe

#

Exr output when

#

Or does that work already heh

winged veldt
old hollow
#

😅

#

How dare

winged veldt
#

actually exr output is pretty trivial

old hollow
#

Yeah haha

winged veldt
#

i just export the pre tonemap framebuffer

old hollow
#

Yeah heh

winged veldt
#

hdr display otoh is uhh

#

i mean i want to do that at some point

#

just not now KEKW

old hollow
#

Yeah I mean Macs are all hdr hehe

#

M series anyway idk about air models but I’m guessing those too

#

HDR on Mac is amazing tbh

winged veldt
#

ye, works great

#

i have to figure out how to actually use it, though

#

and more importantly deal with imgui

#

that's probably gonna be the hard part

timid frigate
quick zealot
#

What I do is I have one framebuffer per bucket yeah
So 5 framebuffers if 5 buckets

And

sample 1 is accumulated in buffer 1
sample 2 is accumulated in buffer 2
...
sample 6 is accumulated in buffer 1

winged veldt
#

ah wait you read and write to the same buffer?

quick zealot
#

Yeah, I only need to read when I do compute the GMoN stuff

#

otherwise, it's just accumulation

quick zealot
winged veldt
#

accumulation is r+w tho innit

quick zealot
#

lol

winged veldt
#

huh

quick zealot
#

so yeah I read/write to the same buffer indeed

winged veldt
#

wait you can do r/w to the same buffer

#

why didn't i think of that lol

quick zealot
#

VRAM 🔥

winged veldt
#

am i stupid actually

#

huh iirc the apple rt example used two accumulation buffers

#

wonder if there's some berf reason

winged veldt
#

one per bucket tho agonyfrog

winged veldt
quick zealot
quick zealot
winged veldt
quick zealot
#

not sure why you would do that yeah

#

perf sounds like a bit of a stretch but idk

winged veldt
#

yeah uh

#

actually idk

quick zealot
#

maybe the rt sample is just poop KEKW

winged veldt
#

ig i just assumed the apple example did it for a good reason lol

#

and then just left it there

quick zealot
#

or simplistic for "sample purposes"

winged veldt
#

apple skill issue

winged veldt
quick zealot
#

true

winged veldt
#

oh wait

#

i think i know why

#

compute+raster parallel

#

so while you're accumulating on buffer a buffer b is being drawn to the screen

#

or sth like that

quick zealot
#

oh I see that would make sense

#

but huh

#

that doesn't prevent race conditions though does it? if displaying and rendering are truly asynchronous, this doesn't prevent from the compute writing to the buffer being displayed
you'd still need some barrier somewhere
and if you have a barrier, things are not asynchronous anymore and so you don't need the two buffers anymore?

#

are they buffers or textures?

winged veldt
#

textures

quick zealot
#

textures can be read+write?

winged veldt
#

i'll have to try

winged veldt
#

so uh

#

there's no reason to bounce two framebuffers for rt

#

basically i am stupid

winged veldt
#

a little bit of color grading can go a long way, this is just simple lift/gamma/gain after tonemapping

winged veldt
#

got the shadow/highlight "zone" exposure working a bit better, it's actually pretty usable now, also added vignetting

#

also wow that's a lot of fireflies, i should deal with that lol

winged veldt
#

@quick zealot how are you sorting your buckets for gmon?

#

i assume you're doing it on the gpu in a compute shader

winged veldt
#

fireflies are being dealt with

#

unfortunately gmon also seems to get rid of a lot of indirect light along with the fireflies

#

i'm gonna try tweaking some parameters to see if i can improve it, but i might go looking for alternative means to remove fireflies because the donwsides are pretty big

winged veldt
#

i had a bug, looks much better now though it still has some issues

winged veldt
#

fixed, turns out 11 buckets is just way too low to get good image quality out of it

#

ofc more buckets -> better quality, though oddly enough at 25 buckets the best results seem to be when clamping the gini function result to 0.25 so it's not overly aggressive

#

15 seems to be the sweet spot for image quality vs memory use (which is significant, given every bucket is an additional framebuffer)

winged veldt
#

some nice renders

#

anyway now the fireflies are taken care of, i think i'm gonna do a quick round of refactors/cleaning up the code and then finally work on replacing the placeholder sampler with something better

dense jacinth
#

man this is motivating me to get back into rendering

#

what hardware you running?

winged veldt
#

m3 pro, base 11 core model

#

so the gpu is 14 core iirc

dense jacinth
#

ah so exactly the same

#

what render times are you seeing here?

winged veldt
#

honestly it's plenty fast

dense jacinth
#

cause i do have a 3060 ti which would probably be more performant, so thinking wether to use vk or mtl

winged veldt
#

those two renders are massively oversampled, 4k and 1k samples for the left/right one

#

left took ~6 min, right about 2 min both at 1920x1280

dense jacinth
#

ah ok so its just more orless bruteforce right now?

winged veldt
#

mis+nee, usually i'd be rendering at 200-500 samples but these have a lot of indirect lighting, really these are scenes i should be using bdpt or similar on

#

and i haven't done much to optimize perf

#

for example it's all one megakernel, idk how much faster it would be if i was doing wavefront (i intend to switch at some point)

dense jacinth
#

tbf I could probably slap a raytracer ontop of my previous attempts at a gltf renderer, since that's written in a really modular and nice way tbh

winged veldt
dense jacinth
#

well yeah it's a lot simpler

#

I mean with my renderer setup I could also have it run on both apis at the same time, with a dedicated renderer for each but with shared shaders

#

see whats quicker

#

though yes hdr + p3 might be a big plus

#

idk time to think about this stuff after I write this exam which I am totally not procrastinating learning for right now

winged veldt
dense jacinth
#

idk tbh, probably not since spirv-cross doesn't support it

#

what I do is I abuse macros to their fullest extent to have a single header compile as GLSL but also as Metal

#

and then I'd put stuff like the BRDF or other functions like that into those headers

#

and then the Metal or VK specific shaders just call the functions from those headers

#

well in theory at least, in my project I only focused on the Metal impl so most of the stuff is metal specific code, still

#

definitlely not easy to read, I'll be honest

#

but that's one of the worse examples

quick zealot
quick zealot
#

but your images here show the opposite? (if they are equal sample count)

winged veldt
#

i expect fewer buckets will work better with fewer samples

#

but gmon really does not like sample counts under 100 or so

old hollow
winged veldt
#

oh neat, i don't think i asked what kinda render times you're seeing

#

should be the same as the one i'm using, don't think i modified this one in editor

old hollow
#

Btw how are you able to do sun lighting. I didn’t see an option I don’t think in the editor 🙂

winged veldt
#

it's just the hdri

winged veldt
#

@quick zealot you have gltfs for the white room scene and the other similar ones?

#

i've only found blender files but the exporter shits itself

winged veldt
#

got distracted with this, found a nice model of the main hall of the london natural history museum, had to do quite a bit of cleaning it up in blender but it looks pretty nice just lit by sunlight

#

no textures unfortunately, i might have a go at adding them later at some point

bronze sedge
#

what did you have to clean up?

winged veldt
#

(i also removed the glass for this render, i don't have transparent shadows or anything so nee wouldn't work with it)

winged veldt
#

then i merged the whole thing because blender can't export a gltf with transforms if its life depended on it and had to spend a while fixing flipped normals from the parts that were flipped with a negative scale

#

cleaned up nicely though, and the model is great—actually made by hand with good (if a little low poly) topology, most of the architectural stuff you find on sketchfab is 3d scans which are kinda useless for rendering

#

and the detail is fine if you don't look too close

#

at least all those scans of the place will come in super handy if i decide to texture the thing

bronze sedge
#

ah

bronze sedge
#

I have to fix models inside blender too, like add tangents or fix the textures. Was wondering what this involved for you. Thank you

winged veldt
#

i add the tangents in engine (mikktspace) specifically because blender doesn't export them properly half the time lmao

#

i will never get tired of shitting on the gltf exporter

bronze sedge
#

I'm going to try and add an fbx importer to my engine

#

I haven't added mikktspace as I'm just not enabled for any kind of mesh optimization at the moment, I honestly don't even know how, like how to fix all the index counts and starts on all the primitives after mesh optimization

winged veldt
#

about fbx uh, good luck

timid frigate
bronze sedge
#

the fbx sdk I think

#

I don't know anything about it yet :<

quick zealot
#

There is a bit of darkening between OFF and 25 which I guess is what I wanted to see initially

timid frigate
timid frigate
#

about fbx libs need to be tested both approaches

quick zealot
bronze sedge
quick zealot
# winged veldt <@1291453365271789619> you have gltfs for the white room scene and the other sim...

Those are pretty much all the good scenes I have right now: https://mega.nz/file/s4BCARRZ#P_mEpVjimxLYojhc6aiZbEsCzcT2MPxguXg8cI5m0bw

3 the white room versions:

  • lucy is the one I used for the screenshot above (although the material was edited at runtime)
  • lights is the one with many lights for stress-testing NEE
  • low is the one with more lights than lights (naming doesn't really make sense here hehe)
  • the-white-room with no suffix is the "easy" one, classic
quick zealot
old hollow
#

btw this is a video showing the bug on my mac, NEE + MIS sometimes works, or it does this

#

that's with the entire scene material emissive

#

and then

#

with simple

#

so I think there's deffo a bug to fix 😄

winged veldt
#

maybe it's my crap sampler? i'm working on replacing it so we'll find out soon ig

#

or maybe it's time to refactor my bsdf code again agonyfrog

winged veldt
#

also that looks super clean for 512spp tbh

winged veldt
winged veldt
#

ye

quick zealot
winged veldt
quick zealot
# winged veldt ye

I think I got it on blendswap
But I did tweak it a bit here and there iirc

winged veldt
#

how's it look so clean? is that just plain mis+nee?

winged veldt
quick zealot
quick zealot
winged veldt
quick zealot
winged veldt
#

ohh

#

well that explains why it's so clean

#

dammit

quick zealot
winged veldt
#

ngl, i fucking hate pbrt

#

the code is so ass

#

book is fine, though

quick zealot
winged veldt
#

yeah it's definitely more complicated

#

but it does look much better at low sample counts, so worth it

#

it's also just really interesting, mathematically

quick zealot
#

ye I agree, maybe I'll have a go at some sobol stuff someday

#

it's still good, being that it is basically multiplicative variance reduction with all the rest

winged veldt
#

yea, it does converge faster

#

rn i have a crappy halton sampler which is fine for convergence but just really crap code lol

#

so i want to solve sampling for good

#

then i can uh

#

go back to fixing my layered bsdf

quick zealot
quick zealot
winged veldt
#

ye, that's basically what it should look like

quick zealot
#

then it's all okay I guess, disregard the ASSIMP rant hehe

winged veldt
#

well technically gltf does have specular intensity/tint but i ignore it

quick zealot
#

oh ye okay

quick zealot
#

maybe that's because I have the full BSDF evaluation instead of just the sampled lobe

winged veldt
#

might be

#

but also yeah taking a closer look the noise seems about right

#

also those trees might be scattering some light into the hallways to the side?

quick zealot
#

doesn't look like it

quick zealot
quick zealot
#

looks like it's just uncorrelated white noise no?

#

same as my xorshift

timid frigate
quick zealot
#

🤔

winged veldt
#

afaik it's just a regular prng with a uniform distribution

timid frigate
winged veldt
#

so not a lds then

timid frigate
#

pcg4d is better than xorshift

winged veldt
timid frigate
timid frigate
winged veldt
#

no mention of low discrepancy sequences there

#

yeah, pcg is state of the art prng afaik

#

at least for fast ones

timid frigate
#

xorshift is worse vs pcg4d

winged veldt
#

yes you have said this already

#

getting somewhere with the new sampler, it works properly now for 1spp