-
Notifications
You must be signed in to change notification settings - Fork 1.2k
KHR_gaussian_splatting_wide_gamut_color #2539
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
|
In general, I like splitting up the extension. However, to avoid future fragmentation and/or duplication, I recommend to define it more generic, as defining a color encoding is required not just for gaussian splatting. |
|
|
||
| ## Overview | ||
|
|
||
| This extension adds wide-gamut color support to the KHR_gaussian_splatting extension. It introduces several additional wide-gamut color space options for the `colorSpace` property. These additional color spaces enable more accurate color representation for high dynamic range (HDR) content and wide-gamut displays when using Gaussian splatting in glTF assets. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
WCG does not imply HDR. Could we be more specific about the intended use cases here?
| SPDX-License-Identifier: CC-BY-4.0 | ||
| --> | ||
|
|
||
| # KHR_gaussian_splatting_wide_gamut_color |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Saying "wide color gamut" (here and throughout) would be more standard than "wide-gamut color", which is often used as an adjective.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
To include HDR and WCG in this extension, naming as color_space should be better.
| | BT.2020-ITU | BT.2020-ITU color space. | | ||
| | BT.2020-linear | BT.2020 linear color space. | | ||
| | BT.2100-PQ | BT.2100 PQ (Perceptual Quantizer) color space. | | ||
| | BT.2100-HLG | BT.2100 HLG (Hybrid Log-Gamma) color space. | | ||
| | Display-P3 | Display P3 color space. | |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
glTF strings are case-sensitive. Could we align lower/upper case usage here? Not a very strong opinion but I'd prefer making these enums all-lowercase (or at least capitalizing Linear).
|
As this has been discussed. |
| SPDX-License-Identifier: CC-BY-4.0 | ||
| --> | ||
|
|
||
| # KHR_gaussian_splatting_wide_gamut_color |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
To include HDR and WCG in this extension, naming as color_space should be better.
| | Color Space | Description | | ||
| | --- | --- | | ||
| | BT.2020-ITU | BT.2020-ITU color space. | | ||
| | BT.2020-linear | BT.2020 linear color space. | | ||
| | BT.2100-PQ | BT.2100 PQ (Perceptual Quantizer) color space. | | ||
| | BT.2100-HLG | BT.2100 HLG (Hybrid Log-Gamma) color space. | | ||
| | Display-P3 | Display P3 color space. | |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It would be clearer if we explicitly state what color primiaries and transfer characteristics are being used for each color space. For example, describing BT.2020-PQ as "BT.2020 color primaires and SMPTE ST2084 Perceptual Quantizer (PQ) transfer function".
PQ is defined for HDR, while BT.2020 defines SDR and WCG. BT.2100 extends BT.2020 to HDR, but using the same color primaires.
|
|
||
| ## Overview | ||
|
|
||
| This extension adds wide-gamut color support to the KHR_gaussian_splatting extension. It introduces several additional wide-gamut color space options for the `colorSpace` property. These additional color spaces enable more accurate color representation for high dynamic range (HDR) content and wide-gamut displays when using Gaussian splatting in glTF assets. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It would be helpful to add informative language somewhere explaining that the splats are intended for alpha blending in the specified linear or non-linear color space. This behavior differs from traditional meshes where people should first convert colors to linear color space before performing any other color operations.
| "meshes": [ | ||
| { | ||
| "primitives": [ | ||
| { | ||
| // snip... | ||
| "extensions": { | ||
| "KHR_gaussian_splatting": { | ||
| "colorSpace": "Display-P3", | ||
| "extensions": { | ||
| "KHR_gaussian_splatting_wide_gamut_color": {} | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
While gaussian splatting extension is in primitives level, I feel the colorSpace property should be put in meshes level, as multiple gaussian splatting "primitives" in a "mesh" probably share the same color space.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It has to be on inside the primitive, as e.g. another primitive in the same mesh is e.g. common, triangle based glTF asset.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Okay. If we are going to add color space for other kinds of primitives, then in meshes would be better.
|
Hi, I work for Autodesk and am serving as the chief architect on the OpenColorIO project, which is a color management system that is used in applications from Autodesk, Adobe, Foundry, Unreal, SideFX, V-Ray, and many more. We have a collaboration going with senior representatives from the OpenUSD and MaterialX projects to establish good color interop across the Academy Software Foundation (ASWF) projects and OpenUSD. I was wondering if we could interest you in adopting our color space naming? We have published a recommendation for scene-referred color spaces used in computer graphics. And we have another recommendation for display-referred color spaces that is in progress here. We are providing open source OpenColorIO implementations of all of the color spaces to try and make them very clearly defined. The key item is a compact name that we are now calling the "color interop ID", and that is the string I would propose you adopt. This has recently been added to OpenEXR as a standard attribute and there is work being done to implement that in OpenImageIO, Blender, and other software. The splats schema that is in progress for OpenUSD will use the OpenUSD ColorSpaceAPI, which utilizes the interop IDs and these color space definitions. Sharing common naming and precise color space definitions would help promote good interop between all of these projects. |
I can bring this up today in a meeting we have, especially for For curiosity, there are these image file formats: |
|
@doug-walker We consider to use the values from here also in the base extension: |
|
@NorbertNopper-Huawei, thank you for considering our proposal!
Yes, it could look like that, if it were included in one of the Color Interop Forum recommendations. Otherwise, it would need a namespace prefix to indicate it was an external definition. But I would not recommend adding a scene-referred version of PQ. As described in ISO 22028-5, it is, in theory, possible to use a scene-referred version of PQ (or HLG). However, in practice, the display-referred version is far more commonly used and a renderer would not want to apply additional tone-mapping to such a signal. When defining the Color Interop Forum color spaces we included the ISO 22028-1 image state (i.e., scene-referred vs. display-referred) as part of the color space encoding definitions. This is an important detail for the renderer to know: If it's display-referred it has already been tone-mapped, whereas if it is scene-referred the tone-mapping is yet to be done. This is obviously something that will very significantly change the look of the final result, so it's important to communicate the intent of the file author. It seems like most of the color spaces in this PR and the base schema are display-referred (tone-mapping has already been done), so the mapping to the Color Interop Forum ID strings would be as follows: BT.709-sRGB: srgb_rec709_display There is currently no CIF ID for "BT.2020-ITU" because Rec.2020 video never became a popular format. For the two linear options, if the intent is that they are scene-referred, the CIF IDs would be: If it would be helpful for me to attend one of your meetings to answer questions, please let me know. |
|
Okay, thanks I got it. |
|
I do not know, if finally the naming will be changed in the glTF extensions. At minimum, there should be the mapping possible. As soon as we proceed on this extension, it would make sense that you join the discussions. |
|
One problem I do see is, that the list is not yet complete and all the |
@weegeekps Could you please invite him for Tuesday, mainly to clarify the values for the colorSpace #2490 (comment) From my side, I was not considering the image states. |
|
As discussed in the meeting today, I followed up on my action-item and added a display-referred linear Rec.709 color space encoding to the draft ASWF "Color Space Encodings for Displays" recommendation. The interop ID for this is "lin_rec709_display". The initial feedback on the ASWF Slack has been positive, so I think we should be able to include that. |
|
From a Vulkan perspective, it does make sense to match most of the given color spaces: |
As mentioned in the base KHR_gaussian_splatting extension pull request, this extension adds support for several wide-gamut colors and their associated encoding methods to
KHR_gaussian_splatting.Some initial open questions: