Формат Mpr
#21
ALtair,Tuesday, 12 January 2010, 11:59 Написал:В той секции, которая обозначена "тайлами" указывается привязка материалов к текстурным тайлам. Геометрические тайлы при отрисовке будут использовать указанный текстурный тайл с примененным к нему материалом.
Как-то плохо сходится. Количество тайлов не соотвествует кол-ву геометрических тайлов (геометрич. 16*16, а тайлов от 256 до 512). А индекс текстурного тайла лежит в land/water_textures.
Потом напрягают указанные там (в массиве тайлов) числа, это явно не индексы материалов, слишком большие.

ALtair,Tuesday, 12 January 2010, 11:59 Написал:А в секции анимированных тайлов просто позволяет сгруппировать некоторые текстурные тайлы в анимационные последовательности. В текстуре, к примеру, содержится 4 кадра анимации воды, так вот в секции анимированных тайлов будет сказано, что с такого-то по такой текстурный тайл лежит пачка кадров анимации, которую надо воспринимать как единый текстурный тайл. Ферштейн?
Да, увидел группировку. Группируются тайлы всегда с одинаковым значением (однако есть и несгруппированные подряд идущие одинаковые тайлы).
Windows - аналог плохо понятых механизмов Unix
Use Linux - open your mind
Ответ
#22
v1s0r,Среда, 13 Января 2010, 21:30 Написал:Как-то плохо сходится. Количество тайлов не соотвествует кол-ву геометрических тайлов (геометрич. 16*16, а тайлов от 256 до 512).[right][snapback]39912[/snapback][/right]
Давай для начала определимся с понятиями. У нас есть террейн - это общий ландшафт. Террейн делится на сектора - это куски сетки размерностью в 33х33 вершины. Каждый сектор состоит из 32х32х2 полигонов (треугольников) или из 32х32 квадов (ака квадратный полигон). Вот тут хочу остановиться и заметить, что в ПЗ текстурируется террейн не по одному кваду, а по 4 сразу в режиме 2х2. Вот этот кусочек террейна размером 3х3 точки или 2х2 квада я называю "геометрическим тайлом". Это единица террейна, на которую накладывается один непрерывный атомарный кусочек текстуры.

Теперь что касается текстур. Текстура состоит из текстурных тайлов. Каждая текстура, которую использует террейн, по сути является атласом текстурных тайлов. По умолчанию каждый текстурный тайл занимает 64х64 пикселя текстуры, а в одной текстуре умещается 64 текстурных тайла.

Так вот "количество тайлов" про которое ты говоришь - это как раз количество текстурных тайлов. Если ты возьмешь прочитанное из mpr количество тайлов и поделишь его на количество тайлов в одной текстуре, у тя получится количество файлов текстур.

v1s0r,Среда, 13 Января 2010, 20:54 Написал:На стыке текстурных тайлов видны швы (иногда куски текстуры идеально склеиваются, иногда нет). Не в курсе, как с этим бороться?[right][snapback]39911[/snapback][/right]
Скорее всего, ты не учитываешь mipmapping. Каждый текстурный тайл хранится с рамочкой из отраженных пикселей. Это необходимо для того, чтобы при переключении mip-уровней не было видно паразитных полосок от смешивания по границе текущего текстурного тайла со смежными текстурными тайлами на одном геометрическом тайле при выборе младшего мипа. Рамка эта на текстурном тайле по ширине в пикселях равна количеству мип-уровней, если я ниче не путаю. Помню, что на дефолтных текстурах надо текстурировать кусочком не 64х64, а 48х48 пикселей (по 8 пикселей рамка с каждой стороны).

v1s0r,Среда, 13 Января 2010, 21:30 Написал:Потом напрягают указанные там (в массиве тайлов) числа, это явно не индексы материалов, слишком большие.[right][snapback]39912[/snapback][/right]
Про большие числа не понял.
Duty is everything, the greatest of joys, the deepest of sorrows.
Ответ
#23
ALtair,Thursday, 14 January 2010, 16:36 Написал:Так вот "количество тайлов" про которое ты говоришь - это как раз количество текстурных тайлов. Если ты возьмешь прочитанное из mpr количество тайлов и поделишь его на количество тайлов в одной текстуре, у тя получится количество файлов текстур.
Всё дошло, спасибо большое. Индекс в массиве тайлов мы всегда найдём, зная номер текстуры и индекс тайла в ней. Всё сходится.

Теперь плавно к вопросу про большие числа. Ты говорил о привязке материала к текстурным тайлам. Я не вижу этой связи. В массиве тайлов какие-то числа, это не индексы материала. Я попробовал закрасить тайлы, которые имеют одно и тоже число в массиве тайлов. Получил группировку - например, для зоны bz8k числа 1 и 7 группируют тайлы с изображением камня для дорог. Число 6 - тайлы воды. А число 9 - тайлы снега.

Кстати, для той же зоны есть 1 анимированный тайл - это вода (32 6-ки в массиве тайлов).
Для игровой зоны пещера зназарки - это болото. Так что анимированные тайлы действительно группируют тайлы воды/лавы.

ALtair,Thursday, 14 January 2010, 16:36 Написал:Помню, что на дефолтных текстурах надо текстурировать кусочком не 64х64, а 48х48 пикселей (по 8 пикселей рамка с каждой стороны).
Да, я текстурирую куском 64x64 с загруженными mipmap-уровнями с mmp файлов "как есть". Однако, если открыть dds в граф. редакторе, не видно никакой рамки, о которой ты говоришь. Попробую 48х48. Спасибо тебе за ответы, здорово выручил!
Windows - аналог плохо понятых механизмов Unix
Use Linux - open your mind
Ответ
#24
насчёт непонятных чисел - у меня сейчас тут доков нет а по памяти не помню, но там точно где-то описывалась привязка звуков шагов для тайлов (всмысле чтобы топот ног скажем по камню и по снегу разный был), толи в виде соответствия звука для каждого тайла на текстурных листах, толи вообще для каждого текстурного тайла рельефа, но скорее всё-таки первое. Соответствие цифровых ID-шников файлам для звуков прописаны в database.res.
Gipat Group
Ответ
#25
Sagrer,Saturday, 16 January 2010, 03:51 Написал:насчёт непонятных чисел - у меня сейчас тут доков нет а по памяти не помню, но там точно где-то описывалась привязка звуков шагов для тайлов (всмысле чтобы топот ног скажем по камню и по снегу разный был), толи в виде соответствия звука для каждого тайла на текстурных листах, толи вообще для каждого текстурного тайла рельефа, но скорее всё-таки первое. Соответствие цифровых ID-шников файлам для звуков прописаны в database.res.
[right][snapback]39922[/snapback][/right]
Если это id звуков - то всё норм, как я уже выяснил ранее, все тайлы с одинаковым id (напомню остальным, мы говорим о массиве тайлов - IdArray в доке от Sagrer) принадлежат одному типу (воде, земле, снегу...). Так что это сходится. Когда доберусь до звука Smile - проверю.

А вот насчёт материалов вопрос открытый. Сейчас, когда я загружаю вершины воды, я ищу первый материал с типом 3 (вода) и применяю его. Вода визуализируется отлично, прозначная, красивая. На материал с типом 1 (видимо, земля) пока забил. Очень он странный, особенно для карт Кании, как я уже говорил ранее. Других типов материалов я не обнаружил.
Windows - аналог плохо понятых механизмов Unix
Use Linux - open your mind
Ответ
#26
ALtair,Thursday, 14 January 2010, 16:36 Написал:Скорее всего, ты не учитываешь mipmapping. Каждый текстурный тайл хранится с рамочкой из отраженных пикселей. Это необходимо для того, чтобы при переключении mip-уровней не было видно паразитных полосок от смешивания по границе текущего текстурного тайла со смежными текстурными тайлами на одном геометрическом тайле при выборе младшего мипа. Рамка эта на текстурном тайле по ширине в пикселях равна количеству мип-уровней, если я ниче не путаю. Помню, что на дефолтных текстурах надо текстурировать кусочком не 64х64, а 48х48 пикселей (по 8 пикселей рамка с каждой стороны).
Здесь, наконец-то, получилось. 8 пикселей - много. Я взял за основу скрин с оригинальных земель и попробовал подобрать смещение с краёв для uv. Получилось 4 пикселя с каждого края (4 / ширину текстуры = сдвиг для uv). Тайл выглядит почти так же, как в ПЗ. Такое ощущение, что в ПЗ поверхность немного масштабирована и текстура накладывается на чуть меньший квадрат, чем у меня. Но это мелочь.

Здорово, уже сейчас картинка почти не уступает оригинальным ПЗ!
Windows - аналог плохо понятых механизмов Unix
Use Linux - open your mind
Ответ
#27
2v1s0r - это уже движок, или пока просто разбираешься во всём?
Gipat Group
Ответ
#28
Sagrer,Saturday, 16 January 2010, 16:02 Написал:2v1s0r - это уже движок, или пока просто разбираешься во всём?
Эх, до движка ещё далеко. Пока пишу спайки - небольшие программы для каждого формата/технологии ПЗ, использующие одну либу. Развиваю либу на этих спайках.
Впереди большая работа - mob, reg, fig, db...
Windows - аналог плохо понятых механизмов Unix
Use Linux - open your mind
Ответ
#29
Ещё пара слов про смещения (XOffset, YOffset в доке от Sagrer), дабы окончательно избавиться от непоняток.

Читать их нужно как signed (!) byte (т.к. смещения могут быть и вправо и влево). Смещения спроецированы на диапазон 0...255 (!), т.е. чтобы получить реальные смещения, нужно что-то типа этого:
XOffsetReal = XOffset / UBYTE_MAX
YOffsetReal = YOffset / UBYTE_MAX

С этим мне удалось добиться 100% совпадения с оригинальными ПЗ.
Windows - аналог плохо понятых механизмов Unix
Use Linux - open your mind
Ответ
#30
v1s0r,Воскресенье, 17 Января 2010, 22:11 Написал:Читать их нужно как signed (!) byte (т.к. смещения могут быть и вправо и влево). Смещения спроецированы на диапазон 0...255 (!)[right][snapback]39930[/snapback][/right]
Раз уж говоришь про signed (!) byte, то и диапазон правильный пиши: -128..127.
Duty is everything, the greatest of joys, the deepest of sorrows.
Ответ
#31
ALtair,Monday, 18 January 2010, 12:01 Написал:Раз уж говоришь про signed (!) byte, то и диапазон правильный пиши: -128..127.
[right][snapback]39931[/snapback][/right]
Ты совершенно прав, спасибо.
XOffsetReal = XOffset / (127-(-128)) = XOffset / (255)

Добавил: v1s0r [mergetime]1263837368[/mergetime]
v1s0r,Saturday, 16 January 2010, 13:56 Написал:Здесь, наконец-то, получилось. 8 пикселей - много. Я взял за основу скрин с оригинальных земель и попробовал подобрать смещение с краёв для uv. Получилось 4 пикселя с каждого края (4 / ширину текстуры = сдвиг для uv).
[right][snapback]39926[/snapback][/right]
Прошу прощения, ввёл в заблуждение всех.
Я на нездоровую голову на кой-то чёрт делил размер текстуры на 2.
Но в mpr файле размер текстуры указан для одной размерности, тестура - квадрат.
Так что ALtair опять совершенно прав - рамка 8 пикселей.
Итого: 8.0 / TexSize = uv_border_offset
Windows - аналог плохо понятых механизмов Unix
Use Linux - open your mind
Ответ
#32
Наконец-то всё выложил на хостинг (никак не мог закончить предыдущий проект).

Всё, о чём говорилось в этой теме до этого сообщения (со мной и без меня) отражено здесь. Поиск по *mpr*.
Сам проект здесь.

Также я сделал сборку спайка mprviewer. Ура, это первый просмотрщик mpr с открытым кодом Smile
Только для линукса пока бинарник есть. С виндой пока не разобрался - древний ogl там (1.1), попробовал собрать mesa - пока не получилось.
В разделе файлы всё можно найти.
Запускать с -h - там исчерпывающая инфа по использованию.
Windows - аналог плохо понятых механизмов Unix
Use Linux - open your mind
Ответ
#33
Так, мы ещё на шаг приблизились к полной разгадке MPR.
Я понял для чего нужен материал земли и смог его заиспользовать.

Итак, у нас есть день и ночь.

Во-первых, вне зависимости от времени суток, всегда применяем цвет из mpr материала к диффузной (!) составляющей цвета материала геометрии. Материал воды применяем к геометрии воды, материал земли - к геометрии земли.

Вопрос в том, как его применять.

День: текстура накладывается на геометрию без изменения RGB комнонентов. В случае воды альфа смешивается с альфой материала.

Ночь: RGB компоненты текстуры перемножаются с RGB материала. В случае воды альфа так же умножается. В результате текстура темнеет.

Ну и на последок нужно врубить прожектор с фоновой (!) составляющей цвета.
Новая версия mprviewer уже доступна.

Ранее у меня выходил бред, т.к. выставлял как фоновый, так и диффузный цвета.

Всё вроде неплохо, но пока не то. Предстоит ещё поэкспериментировать. Видимо, нужно искать баланс между степенью затемнения геометрии и ослаблением прожектора. Ведь у нас будет переход день-ночь и наоборот.

Может у кого есть мысли по этому поводу.
Windows - аналог плохо понятых механизмов Unix
Use Linux - open your mind
Ответ
#34
Гхм.. Вообще-то алгоритмы использования "материала" никак не отличаются по времени суток в игре. Ну т.е. что ночью, что днем - все одинаково там "умножается".

Другое дело, что там есть динамическое освещение прожектором-солнцем, которое разными "цветами" окрашивает террейн и тоже "накладывается" на итоговую картинку. Эти цвета можно посмотреть в файлах .EvilIslandsConfiglights*.ini
См. скриншот:
   
Duty is everything, the greatest of joys, the deepest of sorrows.
Ответ
#35
ALtair,Monday, 01 February 2010, 17:38 Написал:Гхм.. Вообще-то алгоритмы использования "материала" никак не отличаются по времени суток в игре. Ну т.е. что ночью, что днем - все одинаково там "умножается".

Другое дело, что там есть динамическое освещение прожектором-солнцем, которое разными "цветами" окрашивает террейн и тоже "накладывается" на итоговую картинку. Эти цвета можно посмотреть в файлах  .EvilIslandsConfiglights*.ini
См. скриншот:
[attachment=688]
[right][snapback]39978[/snapback][/right]
А вот про них я и забыл. Чувствал, чего-то нехватает, поэтому начал мудрить. Благодарю.

Давай я расскажу о ходе своих экспериментов, а ты меня поправь, пжл, если что не так.
Именно экспериментов, т.к. я далеко не эксперт по освещению и материалам. В конце покажу скрин.

1. Значит, в mpr указан диффузный цвет. Применяем его как есть только к диффузному цвету материала. Без мудрежа, обычная модуляция с цветом текстуры и для воды и для земли.

2. Выставляем глобальное фоновое освещение, раздел [ambient] в ini-файле.

3. Затем задаём бесконечно удалённый источник света, направленный вдоль отрицательной оси y (типа солнца). Ему ставим ambient цвет из раздела [sunlight]. Диффузный цвет я поставил в 0, иначе картинка портится ("выцветает").

4. А цвет оцистки (Clear Color) - как в разделе [sky] ini-файла.

Экспериментально я определил, что цвета в ini-файле точно лежат в диапазоне 0...255. Преревёл их во float делением на 255. По крайней мере, цвет неба получился как в ПЗ.

В итоге получилось темно. Вопрос. Наверняка ведь в ПЗ зашиты какие-нибудь константы для корректировки цвета?

Я вернулся к материалу. Диффузный цвет не трогал, а попробовал поднять ambient. Довел до (0.5, 0.5, 0.5, 1.0) и получил очень похожую на ПЗ картинку.

И ещё. По поводу бликов. Можно заметить, что горы подкрашиваются в цвет неба, отражая его свет. Я так думаю, это сделано как-то вручную, потому что больше никаких данных о цветах нет.

В чём я не прав и можно ли что-нибудь сделать проще?

Добавил: v1s0r [mergetime]1265225894[/mergetime]
Да, еще, по этому скрину особенно хорошо видно, что есть затемнения в углублениях и отражение света от камня. Мне пока этого добиться не удалось.


Файлы вложений Эскизы(ов)
                   
Windows - аналог плохо понятых механизмов Unix
Use Linux - open your mind
Ответ
#36
v1s0r,Среда, 03 Февраля 2010, 22:38 Написал:3. Затем задаём бесконечно удалённый источник света, направленный вдоль отрицательной оси y (типа солнца). Ему ставим ambient цвет из раздела [sunlight]. Диффузный цвет я поставил в 0, иначе картинка портится ("выцветает").
Эммм, вот нифига не понял, с чего вдруг выцветает что-то? Скриншот в студию. На моем скриншоте видно террей освещенный с помощью DirectionalLight, у которого цвет sunlight установлен в качестве диффузного именно.

v1s0r,Среда, 03 Февраля 2010, 22:38 Написал:В итоге получилось темно. Вопрос. Наверняка ведь в ПЗ зашиты какие-нибудь константы для корректировки цвета?
В оригинальном движке ПЗ много хардкода, возможно какие-то цвета там тоже захардкодены, но у меня на скриншоте никакой темности, как видишь, нет, и я ничего дополнительного не мудрил...

v1s0r,Среда, 03 Февраля 2010, 22:38 Написал:Я вернулся к материалу. Диффузный цвет не трогал, а попробовал поднять ambient. Довел до (0.5, 0.5, 0.5, 1.0) и получил очень похожую на ПЗ картинку.
У меня этого нет. Тоже лишнее, имхо.

v1s0r,Среда, 03 Февраля 2010, 22:38 Написал:И ещё. По поводу бликов. Можно заметить, что горы подкрашиваются в цвет неба, отражая его свет. Я так думаю, это сделано как-то вручную, потому что больше никаких данных о цветах нет.
А о том, что такое Specular, ты не слышал вовсе? Smile

v1s0r,Среда, 03 Февраля 2010, 22:38 Написал:Да, еще, по этому скрину особенно хорошо видно, что есть затемнения в углублениях и отражение света от камня. Мне пока этого добиться не удалось.
[right][snapback]39983[/snapback][/right]
Затемнения - это лишь стандартная работа NdotL. Солнце светит не ровно вниз, оно перемещается по небосклону по некоторой "кривой". По сути это означает, что в процессе игры со временем меняется угол наклона луча источника света, реализующего солнце, к плоскости террейна. Отражения света, как я уже говорил выше, - это обычный спекуляр.
Duty is everything, the greatest of joys, the deepest of sorrows.
Ответ
#37
Цитата:Да, еще, по этому скрину особенно хорошо видно, что есть затемнения в углублениях

гм, нормали из mpr-ок для освещения уже используешь или ещё не?
Gipat Group
Ответ
#38
Sagrer,Thursday, 04 February 2010, 18:53 Написал:гм, нормали из mpr-ок для освещения уже используешь или ещё не?
[right][snapback]39985[/snapback][/right]
Да, с самого начала. Переключил источник света на диффузный - появились затемнения. Т.е. нормали в порядке.

Про отражения слышал)), но вот как настроить материал не знаю.
Я думаю, это уже оффтоп и обращусь в личку или забью на это до лучших времён и знаний. Делать всего и так дофига. Напоследок скрин с "выцветанием" (с увеличенным ambient, иначе темно).

И ещё по поводу mpr. Тест с самосвечением прошёл успешно, лава светится красиво. Выше в этой теме ALtair писал, как это сделать.
И последний штрих - wave_mult - некий коэфициент для имитации волн воды. Лично я на него наверно забью и воду буду анимировать другими способами.

ALtair, Sagrer спасибо вам и респект Smile


Файлы вложений Эскизы(ов)
   
Windows - аналог плохо понятых механизмов Unix
Use Linux - open your mind
Ответ
#39
Цитата:Лично я на него наверно забью и воду буду анимировать другими способами.

даешь шейдеры %).

Хотя вообще старый способ анимации всё-равно нужен - там те же болота кажись тоже анимированные были.
Gipat Group
Ответ
#40
Sagrer,Thursday, 04 February 2010, 23:10 Написал:даешь шейдеры %).

Хотя вообще старый способ анимации всё-равно нужен - там те же болота кажись тоже анимированные были.
[right][snapback]39987[/snapback][/right]
Именно вершинный шейдер я и имел в виду))
Болота и лава тоже слегка двигаются. Я думаю, всё это вполне решится шейдером.
Windows - аналог плохо понятых механизмов Unix
Use Linux - open your mind
Ответ


Перейти к форуму:


Пользователи, просматривающие эту тему: 1 Гость(ей)