Я заметил, что в очень мягких градиентах 24-битной глубины цвета недостаточно, поскольку вы можете видеть переходы цвета. Это выскакивает больше всего в темных сценах или ночном небе.
Почему никто не меняет глубину цвета на два байта на канал? Я знаю, что это было бы много работы, и многие аппаратные средства должны быть заменены, но я нахожу это немного раздражает. Я действительно не думаю, что технология оборудования недостаточно развита.
Так почему никто этого не делает?
Вот картина "Война Z", где вы можете увидеть, что я имею в виду:
Ответы:
Вы более или менее сказали это сами: «Я знаю, это было бы много работы, и многие аппаратные средства должны быть заменены». В то время как графическое и аппаратное обеспечение на самом деле было бы относительно простым (если дорогое - удвоить размер всех текстур и буферов кадров - далеко не тривиально), «экосистема» для изображений с большей глубиной цвета просто не существует для В некоторой степени это делает это достойным расходом от чьего-либо имени, так как ни один производитель ЖК-дисплеев не пытается сосредоточиться на попытке получить до 16 бит на пиксель (хотя были некоторые эксперименты с 10BPP, который удобно все еще вписывает сигнал RGB в 32 битовый канал).
Короче говоря, это просто слишком много работы для того, что большинство людей считают еще слишком малой прибылью. Это может быть «немного раздражающим», но этот уровень раздражения настолько мал, что другие улучшения качества изображения были приоритетными.
источник
Да, вы не первый человек, который заметит это . :) С сегодняшними высококонтрастными коэффициентами 8 бит на компонент недостаточно для получения плавного градиента без видимых полос - если только не используется сглаживание.
Использование более 8 бит на канал на дисплее называется « глубоким цветом » изготовителями дисплея. Это не очень широко распространено из-за проблемы курицы и яйца. Глубокий цветной дисплей бесполезен без видеокарты, которая может выводить глубокие цвета, и игрового движка, который поддерживает рендеринг в глубокие цвета. Кроме того, нет никакого смысла в игровом движке или видеокарте, которая поддерживает глубокие цвета без дисплея. Таким образом, у производителей оборудования и разработчиков игр нет особого стимула добавлять поддержку этой технологии, так как с обеих сторон нет рынка, который оправдывал бы стоимость разработки.
Кроме того, существуют другие способы исправить полосу из-за ограниченной 8-битной точности. Как я упоминал ранее, игровые движки могут использовать дизеринг, чтобы скрыть полосу.
(Изображение кота с 256-цветовой палитрой, без и с размытием. Создано пользователем Wikipedia Wapcaplet , используется по лицензии CC-By-SA 3.0 .)
Добавление небольшого сглаживания ± 0,5 / 255 перед записью значения пикселя в буфер кадров чрезвычайно эффективно при скрытии полос на плавных градиентах и по существу незаметно. Если вы работаете с движком HDR, вы делаете это на этапе создания тональной карты.
Наконец, как уже отмечали другие, сжатие текстур может быть большим источником полосообразных артефактов в изображении, чем 8-битная точность. Это может быть то, что происходит с небом на этом изображении, хотя трудно сказать - в нем столько сжатия JPEG, что любые артефакты из-за сжатия DXT в значительной степени затоплены.
источник
Стоит также отметить, что многие ЖК-панели не имеют даже 8 бит на канал. Более дешевые имеют тенденцию использовать меньше битов и использовать различные уловки, чтобы скрыть это. Например, они могут быстро переключаться между двумя смежными цветами, чтобы представлять один из них. http://www.anandtech.com/show/1557/3
Некоторые подробности о том, как DXGI поддерживает 10 бит на канал и ярче, чем белые цвета, можно найти по адресу http://msdn.microsoft.com/en-us/library/windows/desktop/jj635732%28v=vs.85%29.aspx.
D3D также поддерживает более 8 бит на канал в течение многих лет. Нет ничего, что мешало бы разработчикам делать некоторые колебания от 16 бит на канал до 8 бит, если они думают, что это хорошая идея.
Конечно, это не очень поможет, если исходные данные (текстура и т. Д.) Являются только 8-битными (или, более вероятно, DXT1, что составляет 5-6-5 бит на канал). Я полагаю, что это то, что происходит с небом на этом скриншоте (размытие по Гауссу с 8 битами на дюйм делает его намного более плавным для меня), но трудно быть уверенным.
источник
Ответ Стивена Стадницки правильный: в играх редко используются текстуры с более высокой точностью, поскольку для этого требуется слишком много памяти текстур и, следовательно, слишком большая пропускная способность памяти при выборке текстуры в пиксельном шейдере. Однако есть решения, которые не требуют больших текстур. (Я бы опубликовал это как комментарий, но это слишком долго.)
Homeworld решает эту проблему путем кодируя изображение неба как градиенты вершин . Этот метод отлично подходит для больших низкочастотных изображений (например, плавных градиентов) - например, неба - где текстура покрывает огромное количество игровых пикселей.
Другое возможное решение - применить нормализацию гистограммы. к изображению вашего неба. Если данные текстуры находятся в узком диапазоне значений, как темное ночное небо, большинство битов в каждом цветовом канале не содержат полезных данных. Вместо этого сделайте это:
Убедитесь, что код шейдера является гамма-верным . Если вы выполняете математику (освещение и последующую обработку) для образцов текстуры, которые не преобразованы из цветового пространства sRGB в линейное пространство, вы увидите артефакты полосатости, подобные описанным вами. Гамма-коррекция была создана, чтобы помочь решить проблему такого рода, выделяя больше битов темным значениям, когда ваши глаза более чувствительны к изменениям значений. Но вы можете легко сломать вещи, если не учитываете гамма-коррекцию при расчете, например, освещения, экспозиции или постобработки эффектов. Gamma FAQ полезно.
источник
24 бита недостаточно, но гораздо чаще встречаются такие проблемы, как алгоритмы сжатия изображений, сглаживание или другие цифровые артефакты. Кроме того, не забывайте о роли технологии дисплея - независимо от того, какие цифровые входы, дисплей может не производить соответствующие шаги в реальной яркости.
источник