Replies: 20 comments 18 replies
-
|
In theory the gaussian splatting formulation could be extended to handle higher bit depths. If you have a test dataset you should give it a try, it might already +- work, but no gaurantees haha |
Beta Was this translation helpful? Give feedback.
-
|
Here is an (ugly) test-data set with 16bit PNG files. https://drive.google.com/file/d/1ZED7j8iipnvQYDoB4KJIaYjsx8JsDAEV/view?usp=sharing If brush was actually training with the full 16bit, it would produce more details on the dark side: |
Beta Was this translation helpful? Give feedback.
-
|
I did some inconclusive tests comparing 8/16/32 bit files in png and exr format. I was surprised to discover that the exr is accepted by brush, however the largest colour space Brush appears to accept it srgb - I tried Adobe rgb, which looked ok, but I'm not 100% convinced that it's not clipping out the bandwidth. If EXR / HDR workflow is to be included, I think the colour space is quite an important consideration, as the higher bit depth range can utilise this data and provide a better tonal range. So, I trained a 16bit exr in adobe rgb. and the export seemed to have maintained the dynamic range beyond 1 when testing the result in supersplat. However, I'm not sure that visually there was much difference than training on an 8bit png as mentioned above by Simon. It looks like the dynamic range is being clipped or something. Having said that, I don't know the technicalities of what's going on under the hood, so these are more or less blind tests. However, it does seem that there is a good case for pushing further into higher dynamic and colour ranges, it seems that Postshot already does this, and for obvious pipeline reasons, it would be great to push Brush to its maximum pipeline potential quality. The following video is a test training with 27 stacked, 6 stop HDR images from three bracketed exposures. The exported format was 16bit EXR, using Adobe RGB colour space. With the help of @mvaligursky_59448 we identified in Supersplat that Brush is exporting HDR ranged ply, as identified by the histogram showing colour data above the 1 cnt value. 2025-12-04.08-50-33.webm |
Beta Was this translation helpful? Give feedback.
-
|
This is the stacked HDR raw image in Darktable demonstrating the available dynamic range. 2025-12-04.09-06-48.webm |
Beta Was this translation helpful? Give feedback.
-
|
This is the dataset for testing (comes with apologies for poor focus and sub optimal alignment) https://drive.google.com/file/d/1SW5wTXDJW-xkmlg8pkJyMW7jzqrL59t5/view?usp=sharing |
Beta Was this translation helpful? Give feedback.
-
Have you tried opening the same dataset in blender with KIRI engine? I think that it appears to be able to interpret the colour and dynamic range better. It would be interesting to see if you find the same with that dark export. It's interesting that Arthur was saying with hdr images, the processing appears to favour the brighter areas. So at the moment I'm finding that the data might well survive intact during export, but currently there doesn't appear to be a viewer that can correctly "tone map" the data. So if with a mostly dark data set, you increase "exposure" for example in supersplat. It increases between 0-1 meaning the image becomes flat. It doesn't use the full dynamic range. Same in blender kiri engine. But I will experiment more with this. It would be cool if the "exposure" controls could leverage the full dynamic range. |
Beta Was this translation helpful? Give feedback.
-
|
After a few more tests bringing in high dynamic range exr datasets, using different colour spaces, it seems that Brush is perfectly capable of working with and outputting large hdr splats. This is really encouraging, but it seems to me that whilst it will train with the required colour spaces like linear rec 2020 and aces2065-1, it seems that brush can't read the image data properly. So I assume (not knowing enough about it) that there is no colour space transform capability to ensure correct interpolation of the larger colour space. For example, a dataset imported as aces2065-1 will display as a dark, underexposed image, and will train accordingly. If brush could understand colour transforms, then I think it should be able to output high quality, truly HDR splats. Again, I don't know enough about how this is dealt with, but I'm thinking it might not be all that hard to get this workflow working. If a small set of colour space transforms could be added pre splat algorithm, I'd suggest linear rec 2020 as it is common and reasonably browser friendly, rec2100 hdr, as well as aces2065-1 as it is a massive space that seems to be future compatible, then I think HDR workflow could be possible. I'm more than happy to supply some datasets in different colour spaces for testing. In the meantime, I will post some examples of what I am seeing using different colour spaces in the exr hdr datasets. |
Beta Was this translation helpful? Give feedback.
-
Beta Was this translation helpful? Give feedback.
-
Beta Was this translation helpful? Give feedback.
-
|
I asked ClaudeAI about this. And it has come up with a technical proposal to implement colour transforms into Brush. You can view the summary here https://claude.ai/public/artifacts/9a486b60-ec67-4675-8da8-ca0532205fc0 I'll have a go at cloning the repo tomorrow and see if I can get this working. |
Beta Was this translation helpful? Give feedback.
-
|
From ClaudeAI re Brushes current image crate handling ... No, the Here’s what I found: What the
|
Beta Was this translation helpful? Give feedback.
-
|
Why would you want to transform color spaces? |
Beta Was this translation helpful? Give feedback.
-
|
I think I have demonstrated the answer to that above, but if it's not clear, I'll repeat it here: Currently, if I supply the same image dataset to brush, but in different colour spaces, the results differ hugely. If Brush doesn't care about colour spaces, then the results wouldn't differ with different colour spaces, but it does. If I supply images in rec2020, the image in preview is dark and underexposed with incorrect colour representation, and similarly the resultant splat is also underexposed with incorrect colour representation. This simple test demonstrates that colour space does indeed matter for brush, and currently, it interprets all images as if they are plain srgb, which means that the resulting splats will not be correct if the images are in a larger colour space. Therefore, Brush needs to know what the colour space is, and how to process it correctly in linear colour space. As mentioned before, srgb is not a good fit for hdr, where larger colour spaces like prophoto and aces2065-1 are required. I think maybe what you are saying is that (A in = A out), regardless of the colour space, which maybe the case, but A colour space is not the same as B colour space and presently, brush cannot read colour space B correctly and outputs garbage as a result. We don't need Brush to export in the supplied colour space, we just need it to be able to read it correctly in the first place. I may well be completely wrong, but I really don't think so. It's just a case of brush being able to correctly transform larger colour spaces into linear space. Which I don't think it does right now. My point also, that currently Postshot seems to be the only software that can handle HDR images in EXR format correctly, and the specification for that to work is that the images are in ACES2065-1 colour space, if Postshot specifies that colour space for it to work, it means that it must be using a colour transform in order to process correctly, or otherwise you could supply any old colourspace. But that isn't the case, it needs that space because it understands how to transform it to corrected linear colour. |
Beta Was this translation helpful? Give feedback.
-
|
What is suggested is that the brush does not care about color space. This should mean that if you give it HDR image in any HDR space, you get HDR splats out in the same space. There are two solutions:
But that should also mean, that if images are stored in a linear HDR (and not any extended spaces), that should just work. |
Beta Was this translation helpful? Give feedback.
-
|
Thank you for being able to explain with knowledge of someone who actually knows what they're talking about!! |
Beta Was this translation helpful? Give feedback.
-
|
Reposting from the discord: I still haven't had the time to properly think about all this, and really need to go deeper on this, but thanks everyone for all the helpful research! All of this requires some experiments my side as well, but here's how I understand things currently:
The direction of things should be:
I think to get a handle on things displaying the images correctly tonemapped and maybe in HDR would be the first step. This might require dropping down from the image crate to the exrs crate directly, not entirely sure. |
Beta Was this translation helpful? Give feedback.
-
|
Looking further into this. ACES2065-1 is a very wide HDR format, that can store large intensities using float16 data., and so great for HDR. But it is not something that most engines use internally, as they use less wide format that is suitable for displays, typically Rec.709. If ply with ACES2065-1 colors is used, the tonemappers engines are using (ACES, Reinhard, filmic ...) do not produce correct colors. If we do not want to do any conversion, the ply should use We can also consume ACES2065-1 data, and there seems to be a simple 3x3 matrix to convert ACES2065-1 to linear Rec.709. We could apply this either during rendering, or perhaps during load time. Then colors from ACES2065-1 would work perfectly. Details of the actual needed color conversion: ACES2065-1 → linear Rec.709 matrixThis 3×3 matrix converts scene-linear ACES2065-1 (AP0, ACES white) into This mapping preserves neutral greys: Possible solutionPersonally, I like the idea of standardizing on ACES2065-1, as it's better (wider, can store more colors) than Rec.709. So if all training software would output HDR in this color space, and somehow mark ply with this, so that the engine can detect this. The engines can then use the conversion matrix above to bring it to Rec.709, but also use different conversion if they internally support wider space. For example to P3 color space browsers support lately. I could add support for this conversion to the HDR viewer I added, which would allow us to test dataset in ACES2065-1. |
Beta Was this translation helpful? Give feedback.
-
|
So, I did a test with the bathroom dataset in brush. First I worked out that the exr images are in rec.709. The first screen shot is having run the dataset in brush with exr rec709 the second screenshot is after I converted the exr's to srgb. As expected, the srgb version is perfect colour wise (same transform as brush and viewer). The Rec.709 is underexposed and harsh colours, but should display correctly if the viewer or brush had a rec.709 - srgb transform. (Not suggesting rec.709 should be the preferred colour space) |
Beta Was this translation helpful? Give feedback.
-
|
Having said that, the srgb version (first in video) shows all over burn out when increasing the exposure, whereas the rec709 version retains a much more defined exposure differential. Both are highlighted with the bloom option which helps show the exposure areas. So this kind of helps to demonstrate the importance of colour space in HDR. Theoretically, the aces2065-1 space should be amazing at HDR. 2025-12-18.22-47-56.webm |
Beta Was this translation helpful? Give feedback.
-
|
Could brush just add a display gamma slider? So if user supplies linear rgb (non gamma) a slider for gamma for display srgb could be used to transform for screen space? |
Beta Was this translation helpful? Give feedback.









Uh oh!
There was an error while loading. Please reload this page.
-
What is the maximum colour gamut and bit depth brush can handle?
Ie, is there any point supplying 16/32 bit pngs in rec2020 etc, or should the images to process just be flattened down to srgb and 8bit?
What gains/losses are had with higher quality colour spaces?
Beta Was this translation helpful? Give feedback.
All reactions