Аппаратная частьЦветовые модели

Имеет ли смысл дробить диапазон интенсивности цветов модели RGB с 0 - 255 на 0 - 728 в троичной технике

Serg,

Мнения

  • 001Alexander ObukhovТринари

    Вопрос интересен,
    3 байта в двоичной технике обеспечивают 16777216 цветов,
    3 трайта бы могли бы обеспечить диапазон из 387420489 цветов.

    • 002Alexander ObukhovТринари

      С другой стороны можно и сделать следующие
      3 трайта = 18 трит
      15 трит оюеспечивают 14348907 цветов что конечно меньше чем 24 бита,
      а оставшиеся 3 трита отвечают за прозрачность (27 степеней)
      Так называемый RGBA.

      Правда что цветов (14348907), что степеней прозрачности (27) явно недостаточно.

      • 004Serg

        Я думаю, что целесообразность той или иной схемы зависит от того, может ли то или иное устройство поддерживать 256 (или 728) различных оттенков или нет. Если устройство не может отобразить разницу между 135 и 136, то можно количество оттенков уменьшить

      • 015Toman

        Вообще говоря, меня уже давно очень не радует в общепринятых форматах файлов и в концепции этих самых цветовых каналов, что прозрачность почему-то всегда серая. Это вопиющее надругательство над реальным миром. Очевидно, что в действительности (в физическом мире) прозрачность - такая же цветная, как и "самосвечение". Имея прозрачность с тем же числом каналов, и, желательно, с такой же точностью дискретизации, что и "самосвечение" (ну или просто "цвет"), можно было бы реализовать в одном флаконе субтрактивную цветовую модель вместе с аддитивной.
        В результате, честно говоря, нынешняя "серая" прозрачность, скажем, в PNG файлах, для веб-дизайна, например, имеет некий смысл, по большому счёту, только для размытия краёв картинки или (частный случай) просто аккуратненького антиалиасинга растрового изображения на фоне (по сравнению с однобитной прозрачностью GIF картинок). Но, увы, не годится для изображения каких-то действительно прозрачных объектов, т.к. таковые в большинстве случаев как раз окрашены в какой-то цвет, а не серые. Светофильтр, плёнка, красочный слой. Просто оконное стекло, слой морской воды или воды из торфяного болота.
        Так что я вообще как-то не вижу логики отдельного канала "серой" прозрачности. Либо мы говорим (предпочтительно), что один "цвет" отвечает за что-то одно (самосвечение, или рассеяние/диффузное отражение/зеркальное отражение, или пропускание). Или, для случая простой двумерной картинки, вводим упрощённое понятие "цвета", который просто состоит из 2 простых цветов - самосвечения и пропускания (т.е. прозрачности) или наоборот поглощения, каждый из которых равноправен и в принципе самодостаточен. Хотя каждый из них может быть и серым, но увязывать такой вариант прямо в базовый формат цвета, имхо, неуместно.

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

        • 016kvas

          1) Во времена оны, когда я компьютерной графикой занимался, была в компьютерах не одна цветовая модель RGB, а две (основных) и вторая называлась HSV. Формулы пересчёта не сложные, я даже небольшую библиотеку делал для этого. В системе RGB прозрачность именно в градациях серого считается. Не надо смешивать эти модели.
          2) В одной из публикаций мне встретилось упоминание, что RGB модель не полностью описывает весь цветовой диапазон, воспринимаемый человеческим глазом, поскольку для некоторых оттенков, что может видеть человек, нужны отрицательные числа в каналах RGB. Но это я ни подтвердить, ни опровергнуть не смогу - сам в этом факте сомневаюсь, но статью помню что читал.

          • 017Toman

            Цветовых моделей вообще гораздо больше (кстати, заметьте, я выше нигде даже не упоминал RGB). HSV, кстати, одна из почти настолько же искусственных и ориентированных на (аддитивное) воспроизводящее устройство, как RGB. У которой единственное преимущество - выделение оттенка цвета в отдельное число. Остальные же 2 числа в ней не выражают однозначно тех субъективных параметров (ощущений), которые декларируются в их названиях. Точнее, выражают - но только в рамках одного и того же оттенка цвета. Ещё одна модель, тоже техническая, и ещё более удобная для пересчёта в/из RGB (в силу линейности), но более-менее выделяющая общую яркость в отдельный канал - это YUV, типичная для телевидения, видео, да и для некоторых форматов статичных картинок. Есть и другие модели, в т.ч. стремящиеся к более точной передаче каких-то субъективных параметров.

            Так вот, никакая модель цвета вообще не подразумевает прозрачности ни в каком виде. Модель цвета занимается цветом, и только. В том числе и в RGB, и в HSV, и в YUV, и в Lab, и в XYZ, и т.д. никакой прозрачности нет. Прозрачность добавили для технических нужд, а именно, в первую очередь для показа на экране не прямоугольных спрайтов, но внутренне представленных прямоугольной картинкой. Т.е. фактически для регулирования "здесь рисовать/здесь не рисовать". К RGB это имеет только то отношение, что RGB тоже последняя "техническая" стадия для представления цвета перед выводом на экран, только поэтому они оказались по соседству. Бесцветный (серый) альфа-канал, конечно, даёт возможность делать более симпатично выглядящие размытые границы или просто антиалиасинг по минимуму. Хотя в принципе ничто не мешает делать антиалиасинг и на этапе отображения, с изначально однобитной прозрачностью. (И это, вообще-то, более правильно, т.к. даст положительный результат и при размещении изображения не по границам целых пикселов, или при масштабировании, а вот всякий "предподготовленный" антиалиасинг в этих случаях даст осечку - так что остаётся только вариант действительно сильного размытия границы прозрачности или оверсэмплинга). И вот собственно только для таких технических нужд и годится одноцветная прозрачность. Ещё мы можем изобразить частичное затемнение как бы этакой мельчайшей сеткой (или чем-то вроде закопчёного или полузеркального стекла). Но не можем изобразить прозрачный объект - вроде просто стекла, которое имеет свой собственный цвет.

            А насчёт цветов, не передаваемых RGB - всё так и есть. Собственно, все чистые спектральные цвета, кроме тех, которые использованы как базовые (если базовые вообще чистые спектральные), не могут быть переданы в RGB и производных моделях, без выхода в отрицательные значения. Более того, есть, наоборот, другие модели, в которых представимы в т.ч. цвета, которые вообще не могут быть физически реализованы никаким спектром (но предполагается, что соответствующие цветовые ощущения могут испытываться человеком, скажем, в состоянии изменённого сознания или, в более ограниченной степени, при помощи особых приёмов просмотра, основанных на цветовом контрасте или на кратковременной цветовой адаптации). Такой "перелёт" относительно физически реализуемых цветов оказывается просто необходим для того, чтобы по крайней мере не потерять никакой из физически реализуемых цветов. Например, таково пространство XYZ, стремящееся имитировать непосредственно сигнал, воспринимаемый тремя типами светочувствительных клеток. Поскольку спектры чувствительности этих типов сильно перекрываются, естествнно, что что-либо близкое к чистому X, чистому Y, чистому Z - оказывается физически нереальным цветом.

            • 018Alexander ObukhovТринари

              Очевидно, что один байт для прозрачности выделен в целях экономии.
              Кстати, в RGBA (RGB + канал прозрачности) возможно сделать конректный цвет полупрозрачным:
              rgba(1, 1, 1, 0.5) – полупрозрачный белый;
              rgba(1, 0, 0, 0.5) – полупрозрачный зелёный;
              а используя наложение слоев получить комбинации.

              Если рассмотреть вариант с тремя слоями, получаем в модели rgba требуется 4×3=12 байт;
              в случае RAGABA – 6 байт.

              • 020Toman

                Проблема в том, что rgba(1, 0, 0, 0.5) - это не (полу)прозрачный зелёный, а сочетание 50% непрозрачного зелёного с 50% бесцветных прозрачных "отверстий" или "щелей". Ну т.е. это как бы мелкая, неразличимая глазом, сеточка из зелёного непрозрачного материала (самосветящегося или освещённого "собственным" источником) - но никак не зелёная прозрачная плёнка. Т.е. свойства светофильтра тут нет. Проходящий свет не меняет своего цвета. Ну и светофильтр сам по себе не светится, а именно только избирательно поглощает проходящий от нижележащих слоёв свет.

                Так что никакое наложение полупрозрачных картинок в обычном режиме (который, например, и используется в веб-браузерах, и который является режимом по умолчанию в графических редакторах) не даст желаемого эффекта светофильтра. Даст - только явным образом объявленный для слоя режим умножения. Но в этом режиме альфа-канал уже избыточен и потому не нужен, т.к. сами RGB и есть прозрачность для каждого цветового канала. А такой режим слоя - это только в тех самых графических редакторах, в многослойных форматах.

    • 007Kvanttt

      почему же 387420489 цветов, может 7625597484987, в зависимости от того, какой будет трайт 6 тритный или 9 тритный.

      • 011Alexander ObukhovТринари

        Трайт 6 трит
        http://trinary.ru/kb/ac4ab224-b213-43c3-a430-af1e1609cf96

  • 003Alexander ObukhovТринари

    Для обозначения цвета наиболее широкое распространение получила запись в шестнадцатеричной системе.
    Как быть тут?

    • 005Serg

      Писать тройками (123, 212, 142) или четверками (123, 212, 142, 21), если с учетом прозрачности. Так, наглядно видно, сколько какого цвета

      • 006Alexander ObukhovТринари

        Так в принципе и пишут сейчас
        rgb(255, 255, 255) — белый
        А в троичке?
        trgb(364, 364, 364) — ?
        trgb(0, 0, 0) — ?
        trgb(-364, -364, -364) — ?

        • 008Kvanttt

          ну можно сделать, чтобы функция trgb(0, 0, 0) возращала бы оттенок серого (средний цвет между черным и белым), а trgb(-364, -364, -364) и trgb(364, 364, 364) белые и черные цвета соответственно. Ну во всяком случае мне кажется это более правильно, чем традиционная схема (trgb(-364, -364, -364) - белый, trgb(364, 364, 364) - черный), потому что это вписывается в концепцию симметрии троичного кода))

          • 010Kvanttt

            блин, что же я пишу?

            Там вместо trgb(-364, -364, -364) я имел ввиду черный, а не белый цвет, ну и для trgb(364, 364, 364) я имел ввиду белый.

          • 012Alexander ObukhovТринари

            trgba(0, 0, 0) смущает, всё таки привыкли что 0 это ничего
            а тут получается что серый,
            потому то вопрос и был поднят

          • 013Serg

            Хочу заметить, что серый цвет в традиционной RGB - необязательно (0, 0, 0). Любая комбинация RGB(x, x, x) (0

            • 014Serg

              В связи с этим считаю, что лучше:
              1. Для кодирования каждого канала (R, G, B, прозрачность) использовать 1 трайт (3^6=729 значений). Если обычные мониторы и видео карты и не поддерживают столько оттенков, то высококачественная полиграфия скажет нам спасибо. То же и в отношении прозрачности.
              2. Отсчет вести от нуля (диапазон значений [0;728]). Здесь нет смысла использовать диапазон [-363;364] и выделять нулем какое-то "срединное" значение.

  • 019JeNNeR

    Тогда уж нечто вроде tLab, где (как и в обычной) 0.0.0 серый, а больше и меньше - это отклонения от серого