Берсеркер
2319 постов
Карма: 216
#1581 14 сентября 2016 в 10:49
HDR-Rendering + toneMapping + autoExposure
Все три сборки (Q3, Q3_MME, RTCW) тут:
https://cloud.mail.ru/public/HCH8/7K7RGpEKE
Обновленный док:
https://cloud.mail.ru/public/KLue/3qeSZzZaP

Добавил HDR-рендеринг, вычисления цвета и яркости в формате плавающей точки, что позволило избавиться от характерных артефактов LDR-рендеринга:


Для ужатия HDR в LDR реализован Filmic Tone Map, сделана автоподстройка яркости.
Цвары:
r_hdr "1" CVAR_ARCHIVE | CVAR_LATCH включить HDR-рендеринг.
r_toneMap "1" CVAR_ARCHIVE | CVAR_LATCH (поддерживается быстрое применение параметра) включить tonemap, подстройку яркости сцены.
r_autoExposure "1" CVAR_CHEAT при 0 запрет автоподстройки яркости.
r_autoExposureTime "0.5" CVAR_ARCHIVE (лимит от 0.1 до 4) время (секунды) автоподстройки.
r_forceToneMap "0" CVAR_CHEAT при 1 форсируется применение следующих параметров:
r_forceToneMapMin "-8.0" CVAR_CHEAT минимум
r_forceToneMapAvg "-2.0" CVAR_CHEAT среднее
r_forceToneMapMax "0.0" CVAR_CHEAT максимум
r_forceAutoExposure "0" CVAR_CHEAT при 1 форсируется применение следующих параметров:
r_forceAutoExposureMin "-2.0" CVAR_CHEAT минимальная граница яркости
r_forceAutoExposureMax "2.0" CVAR_CHEAT максимальная граница яркости
Параметры r_forceToneMap и r_forceAutoExposure позволяют разработчикам карт оперативно подобрать приемлимые параметры toneMap и autoExposure.

Параметры материала неба:
q3gl2_tonemap toneMin toneAvg toneMax autoExposureMin autoExposureMax позволяет задать все параметры тонмапа и автоподстройки. Применять в материалах неба.

Команды редактора:
autoExposureMinMax min max задать границы автоподстройки яркости.
toneMinAvgMax toneMin toneAvg toneMax задать параметры tonemap: минимум, среднюю, максимум яркости.
Редактор сохраняет данные в worldspawn блок релайта.
Соответственно, то же самое можно загрузить и из BSP, для новых карт, вот параметры worldspawn:
autoExposureMinMax min max задаёт границы автоподстройки яркости.
tonemap toneMin toneAvg toneMax autoExposureMin autoExposureMax более полная версия autoExposureMinMax, позволяет задать все параметры тонмапа и автоподстройки.


Заменена система image programs на функции, совместимые с idTech4:
These can be used anywhere that accepts <map> and can be nested
heightmap(<map>, <float>) Turns a grayscale height map into a normal map. <float> varies the bumpiness
addnormals(<map>, <map>) Adds two normal maps together. Result is normalized.
smoothnormals(<map>) Does a box filter on the normal map, and normalizes the result.
add(<map>, <map>) Adds two images without normalizing the result
scale(<map>, <float> [,float] [,float] [,float]) Scales the RGBA by the specified factors. Defaults to 0.
invertAlpha(<map>) Inverts the alpha channel (0 becomes 1, 1 becomes 0)
invertColor(<map>) Inverts the R, G, and B channels
makeIntensity(<map>) Copies the red channel to the G, B, and A channels
makeAlpha(<map>) Sets the alpha channel to an average of the RGB channels. Sets the RGB channels to white.
Новые функции:
makeColor(<map>) Copies the Alpha channel to the R, G and B channels
mul(<map>, <map>) Multiply two images without normalizing the result
bias(<map>, <float> [,float] [,float] [,float]) Shifts the RGBA by the specified factors. Defaults to 0.
makeLuminance(<map>) Sets the RGB channels to an average of the RGB channels. Sets the alpha channel to white.
smooth(<map>) Does a box filter on the RGBA without normalizing the result



Отменен кламп цвета лайтов при r_hdr = 1

Цвару r_noLODmodel выставил значение по умолчанию "0". При "0" модели с лодами будут кушать больше vbo-памяти, но это может дать небольшой прирост fps.

Поправил работу с травой в RTCW, трава не рисовалась на карте forest, хотя тень от неё была.

Прочие мелкие багфиксы и оптимизации.....
Машина несла меня через неведомые районы Галактики сквозь пространство математической реальности быстрее скорости света. (C) Фред Саберхаген.
C.Z.R
119 постов
Карма: 2
#1582 20 сентября 2016 в 20:49
Berserker why You restore verticles limit? Can You make unlimited again, like in previously versions?
v1o2v3a4n5
7 постов
Карма: 0
#1583 29 сентября 2016 в 14:17
Просьба обновить в теме http://quakegate.ru/forum/topic886/ архивы с полным модом для Quake 3 на версию от 2016.09.14 (в архиве 2015.02.14)
Берсеркер
2319 постов
Карма: 216
#1584 29 сентября 2016 в 15:48
немного терпения, допилю текстурный кэш и выложу.
Машина несла меня через неведомые районы Галактики сквозь пространство математической реальности быстрее скорости света. (C) Фред Саберхаген.
v1o2v3a4n5
7 постов
Карма: 0
#1585 29 сентября 2016 в 16:14
Спасибо! Очень благодарен за ответ и труд
C.Z.R
119 постов
Карма: 2
#1586 30 сентября 2016 в 00:59
Berserker, я все еще жду вашего ответа...
Берсеркер
2319 постов
Карма: 216
#1587 30 сентября 2016 в 13:54
C.Z.R
Where vertexes limit? In BSP, models?
Машина несла меня через неведомые районы Галактики сквозь пространство математической реальности быстрее скорости света. (C) Фред Саберхаген.
C.Z.R
119 постов
Карма: 2
#1588 06 октября 2016 в 00:38
Берсеркер
in models. before I had 20 000 vert. models and no error. In newest version of Bers@wolfSP i have error "max verts limit 10240" or something like that when I try load map with my new models. Please make higher limit in next version, because I dont want to change all models to more low poly in my REMAKE MOD. :)
Берсеркер
2319 постов
Карма: 216
#1589 06 октября 2016 в 18:49
C.Z.R., check it:
http://www.filedropper.com/berssp
Машина несла меня через неведомые районы Галактики сквозь пространство математической реальности быстрее скорости света. (C) Фред Саберхаген.
Берсеркер
2319 постов
Карма: 216
#1590 08 октября 2016 в 20:40
Новые билды Q3Bers, Q3Bers_mme и Bers@RTCW:
https://cloud.mail.ru/public/HLNB/ewScmWMgP
Обещанные полные паки выложу попозже, ибо ночь и спать охота %))

Что нового:
1. Подчистил и оптимизировал код загрузчиков текстур, движок может искать и загружать текстуры в таком порядке: DDS, TGA, JPG, JPEG, PNG, PCX, BMP.
Внутренние форматы:
DDS: RGB, RGBA, DXT5, BPTC.
TGA: greyscale, 8-bits w/palette (Indexed), 16/24/32-bits, also RLE compression supports, also row-inverted supports.
JPG/JPEG: greyscale and RGB-images.
PNG: greyscale, 8-bits w/palette (Indexed), RGB8 and RGB16 (loads as RGB8), also interlaced supports.
PCX: greyscale and 8-bits w/palette (Indexed).
BMP: uncompressed, 8-bits w/palette (Indexed), 16/24/32-bits, also row-inverted supports.

Подробнее про DDS текстуры:
а) должны содержать mipmaps, загружаются сразу в видеопамять, поэтому этот формат самый быстрый для загрузки.
б) если текстура сжата в DXT5, и если это карта нормалей, то:
- если нет альфа-канала (карты интенсивности микробампа), то предварительно произвести swizzle цветовых каналов: GGGR (т.н. DXT5_NM)
- если есть альфа-канал (карта интенсивности микробампа), то предварительно произвести swizzle цветовых каналов: AGAR
в) если текстура сжата в DXT5, и если это карта высот, то необходимо произвести swizzle цветовых каналов: GGGR (т.н. DXT5_NM)
г) Не участвует в кэшировании (про кэширование текстур см. ниже...).

2. Убрал "зоопарк" форматов сжатий, оставил только BPTC и DXT5. Эти форматы совмещаются с DDS.
Загрузчик для color/specular maps автоматически выбирает BPTC сжатие, для normal/height maps - DXT5. Если какой то формат сжатия не поддерживается, то выбирается другой формат. Если оба формата не поддерживаются, то сжатие отключается.
Удалил цвары: r_ext_compressed_textures, r_ext_compressed_normalmaps, r_ext_compressed_heightmaps, r_roundImagesDown.
Сжатие текстур позволяет заметно сэкономить видеопамять, сжатие 4 к 1.

3. Новые цвары:
r_compressImages (вместо r_ext_compressed_textures) def = 1, archive, latch
r_texture_compression_bptc def=1, arch, latch - при 0 запрещает BPTC сжатие.
r_texture_compression_s3tc def=1, arch, latch - при 0 запрещает DXT5 сжатие.
r_imageCache def=1, arch - включает кэш текстур.
r_debugImages def = 0 - при 1 выводит диагностическую информацию о загрузке и кэше текстур.

4. Про кэширование текстур.
Этапы загрузки текстуры:
- чтение с диска и получение raw-данных. Распаковка из JPG/PNG форматов может занять заметно много времени. Кэширование устраняет эту задержку.
- если текстура имеет размеры не кратные степеням двойки, то требуется приведение размеров текстуры к ближайшим степеням. Кэш уже содержит текстуру с правильными размерами.
- получение пирамиды mipmaps. Кэширование пропускает этот этап, т.к. готовые мипмапы уже в кэше.
- если разрешено сжатие текстур, то при заливке в видеопамять raw-данных, драйвер производит сжатие в BPTC или DXT5. Это тоже занимает какое то время. В кэше могут храниться уже сжатые текстуры, загрузка в видеопамять очень быстрая.
Кэш текстур создается в папке Cache.
Текстуры с Image Programs также кэшируются, что также ускоряет загрузку.
Внимание: если r_picmip не нулевой, то кэш работает в режиме read onlу!

5. DXT5 хранит цветовые каналы с разным качеством. Максимальное качество у Альфа-канала. Похуже у Зеленого, и ещё хуже (на 1 бит) у Красного и Синего каналов. Следовательно, при хранении карт нормалей и высот, применяется DXT5_NM хак. Качество практически идентично несжатым текстурам.
Для color/specular maps без альфа-канала также могут быть применен swizzle BRBG: Альфа канал в DXT5 имеет максимальное качество, поэтому туда помещаем Green канал, как наиболее чувствительный для человеческого глаза. Red канал помещаем на место зеленого (в DXT5 зеленый канал имеет на 1 бит больше чем красный и синий), т.к. в Quake много красного цвета. Синий канал помещается на место красного и синего, чтобы уменьшить артефакты сжатия.

6. Новая команда showimage <textures/basewalls/wall0> <время в сек.> загружает и показывает текстуру на экране. Имеет статус cheat.

7. Для RTCW увеличил лимит вершин на батч в 10 раз:
SHADER_MAX_VERTEXES = 102400
В вольфе модели скелетной анимации (MDS) обсчитываются на CPU, поэтому требуется увеличение лимита.
Машина несла меня через неведомые районы Галактики сквозь пространство математической реальности быстрее скорости света. (C) Фред Саберхаген.