Render.ru

Понимание формата 3DL

Вбд Унит (VBDUnit)

Активный участник
Рейтинг
15
#1
Привет всем!
Задача расковырять формат 3DL, чтобы после программист мог его парсить. Почитал спецификацию и т.д.

В комплекте с фотошопом 2017 идет фильтр FuturisticBleak.3DL, который в фотошопе делает так:
plant_small.jpg

А у программиста получается так:
plant_small2.jpg


То есть всё как-бы синее. В файле 3DL при этом вижу следующее:

#Created by: Adobe Photoshop CS6
#Copyright: Copyright 2012 Adobe Systems Inc.
0 64 128 192 256 320 384 448 512 575 639 703 767 831 895 959 1023
128 193 337
96 193 353
145 241 418
177 273 514
225 273 562
337 337 707
385 385 803
450 450 883
562 514 996
594 578 1108
691 658 1220
739 723 1317
803 787 1429
915 867 1574
980 915 1638
1028
996 1766
1092 1044 1847

... (еще ~5000 строк)

Согласно спецификации, выделенная жирным строчка должна оканчиваться максимальным уровнем, который будет использоваться, то есть 1023. А ниже идущие значения то и дело выходят за эти пределы, и имеют максимальный уровень 4095. Выше указанный файл программист получил, используя максимальное значение 4095, т.к. если взять 1023 - получается очень осветленное нечто.

Вопрос: как фотошоп интерпретирует этот файл, и как правильно с ним работать? Я правильно понимаю, что он не соответствует спецификации 3DL?
 
Рейтинг
39
#2
Не могу быть уверенным, так как никогда не углублялся в данную тему, но могу предположить такую версию, базирующуюся на известных мне фактах: Как работает сама LUT таблица? Каждое значение нашего rgb цвета, допустим 8-ми битного, смещается методом интерполяции в сторону другого значения, заданного таблицей. Если вообразить цветовое пространство RGB как 3-х мерный куб, по аналогии xyz=rgb, то дополнительная таблица будет, как бы смещать точки нашего цвета в трехмерном пространстве. При этом используется 4-битное виртуальное "подпространство", задающее то самое, пресловутое, значение смещения (на сколько именно и в какую сторону сместится цвет). 4 бита это 16*16*16=4096, то есть тот самый градиент от 0 до 4095, который вы увидели в файле. Таким образом LUT таблицы позволяют как бы выйти за границы битности исходной картинки, так как добавляют "дополнительные значения" цвета. Когда-то это использовали производители мониторов, делая 6-битные матрицы и расширяя их цветопередачу "программно" посредством LUT. По этому же принципу работают и современные профессиональные мониторы.
 

Вбд Унит (VBDUnit)

Активный участник
Рейтинг
15
#3
При этом используется 4-битное виртуальное "подпространство", задающее то самое, пресловутое, значение смещения (на сколько именно и в какую сторону сместится цвет). 4 бита это 16*16*16=4096, то есть тот самый градиент от 0 до 4095, который вы увидели в файле.
Вот тут не совсем понял, 4 бита это же 2^4 = 16. А 16* 16 * 16 - это получается когда три таких значения в строчке. То есть речь о том, что каждое такое число (где три целых в строчке) надо рассматривать не как одно, а как три 4-битных?
 
Рейтинг
39
#4
То есть речь о том, что каждое такое число (где три целых в строчке) надо рассматривать не как одно, а как три 4-битных?
Во первых, повторю, это всего лишь мое предположение. Во вторых, я не понял, почему нужно считать таблицу отдельно? 16х16х16, это был просто пример расчета "глубины" 4-битной таблицы. Если картинка 8-битная, 1024 значения на один канал, то добавляя к ним 4 бита таблицы мы получаем 12-битные каналы, по 4096 значений.
 

Вбд Унит (VBDUnit)

Активный участник
Рейтинг
15
#6
Короче разобрались, ошибка была в порядке каналов - в файле BGR, а интерпретировалось всё как RGB. Сейчас всё встало на свои места.

Всем спасибо!
 
Сверху