Skip to content
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

3D log-encoded LUT for color correction/grading #733

Open
0x4E69676874466F78 opened this issue Jan 19, 2024 · 1 comment
Open

3D log-encoded LUT for color correction/grading #733

0x4E69676874466F78 opened this issue Jan 19, 2024 · 1 comment
Labels
enhancement New feature or request

Comments

@0x4E69676874466F78
Copy link
Collaborator

0x4E69676874466F78 commented Jan 19, 2024

По хорошему цветами надо рулить не через тонемаппер, а через LUT (look-up texture/table).
Задача тонемаппера прижать значения выходящие за низкий динамический диапазон в его рамки, цветовая коррекция там происходит в процессе как побочный эффект этого прижатия.
Тем более в HDR у нас не всегда есть возможность использовать тонемаппер руками (EXTENDED_SRGB_LINEAR уже содержит компонент тонемаппера), а LDR тонемапперы даже если их вытянуть вряд ли корректно применимы в рамках HDR вывода.
Ознакомиться как работает типичная LUT можно тут: https://lettier.github.io/3d-game-shaders-for-beginners/lookup-table.html
Но это не наш случай, этот вариант расчитан на LDR, а нам надо HDR.
Юнити для HDR использует Alexa LogC (El 1000) https://xibanya.github.io/UnityShaderViewer/Library/PostProcessing/Colors.html
При этом если для LDR использовались LUT-текстуры 1024х32, то для HDR там CUBE файл который можно получить например от Photoshop или от DaVinci Resolve.
CUBE файл это довольно простой текстовый файл, но совсем некомпактиный и неоптимальный. Есть ещё 3DL файл который раза в два компактнее, но всё равно текстовый.
Мы могли бы хранить эти значения в текстурах как типичные LUT-текстуры только вместо 8бит, 16/32бит float.
Можно было бы сгенерячить нейтральную текстуру в формате OpenXR и работать с ней в darktable, потом этот EXR преобразовать в KTX2, без сжатия (со сжатием думаю поплывут цвета). Comressonator умеет работать с OpenXR.

Альтернативный вариант это не пытаться использовать таблицу, а манипулировать шейдерными функциями цветокоррекции, которым пробросить через UBO параметры читаемые из файла предустановок цветокоррекции (коих может быть множество). Это потенциально будет дороже по вычислениям чем готовая текстура.

Низкий приоритет.

@0x4E69676874466F78 0x4E69676874466F78 added the enhancement New feature or request label Jan 19, 2024
@0x4E69676874466F78 0x4E69676874466F78 moved this to 🆕 New in HLRT Jan 19, 2024
@0x4E69676874466F78 0x4E69676874466F78 changed the title 3D log-encoded LUT (with LogC Curve) 3D log-encoded LUT (with LogC Curve) for color correction/grading Jan 19, 2024
@0x4E69676874466F78 0x4E69676874466F78 changed the title 3D log-encoded LUT (with LogC Curve) for color correction/grading 3D log-encoded LUT (LogC Curve) for color correction/grading Jan 19, 2024
@0x4E69676874466F78 0x4E69676874466F78 changed the title 3D log-encoded LUT (LogC Curve) for color correction/grading 3D log-encoded LUT for color correction/grading Jan 19, 2024
@0x4E69676874466F78
Copy link
Collaborator Author

https://www.polyphony.co.jp/publications/sa2018/ тут чуваки делают HDR LUT для 10000 нит, это требует преобразований чтобы подогнать данные до этих 10к а потом обратно. Возможно нам так же нужно.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
Status: 🆕 New
Development

No branches or pull requests

1 participant