Программа-просмотрщик объектов: требуется помощь программистов!

Автор Zontik, 21 июля 2017 10:16:53

« назад - далее »

0 Пользователи и 2 гостей просматривают эту тему.

Maxim

ЦитироватьИли ждем автора темы?
Да сегодня выходной и пока он вряд ли ответит. И чего его ждать? Идею то я подал. Правда подробности разговора с PinkDot известны тока Зонтику.
Force, зачем вы сразу руки умываете? Может у вас лучше получится,  а то и гляди быстрее.
Still they talk anyway
When there's nothing to say
There's so much said in empty words...

Призрак Boris'а3000

Цитата: nemyax от 29 июля 2017 15:14:49
Для анимаций плух готов, если ты про него.
Нет, я всё о своём, о девичьем.

Цитата: nemyax от 29 июля 2017 15:14:49
А поддержку редактирования мешей он разве обещал?
Не знаю, мне он вообще ничего не обещал и не докладывал.
Corsair HX1000i / Gigabyte GA-X48-DS4 / Intel Core2-Quad Q9650@4.1GHz / Hynix 8GB DDR2-800@1100MHz /
EVGA 6GB GDDR5 <GeForce GTX 980Ti> K|NGP|N Edition / Creative SB X-Fi Xtreme Gamer Fatal1ty Pro Edition /
2xSSD Intel X25-M 120GB в RAID 0 / Samsung SyncMaster 957MB (CRT 2048х1536) / UPS PCM SKP-2000A /
Windows XP Professional SP3 VL 32-bit + Windows 7 Enterprise SP1 U 64-bit / ForceWare 368.81 / New-Dark 1.26

Force

Maxim, можно на "ты" ;).
Тогда предлагаю обсудить поднятые вопросы в моем первом посте в этой теме ( http://darkfate.org/forum/index.php?topic=5789.msg264884#msg264884 ). Утвердить ТЗ, так сказать.

Chuzhoi

Force, приветствую.

Я, честно говоря, удивлен, что в наше время есть люди, которые самостоятельно и в одиночку пишут игровые движки. Казалось бы, на дворе не 1995-й год, движки многократно усложнились и стали создаваться и поддерживаться большими компаниями - ну что может сделать в этих условиях один человек? В общем, очень интересно взглянуть.

Цитата: Force от 29 июля 2017 13:39:40
нужны ли ВСЕ возможные форматы или достаточно DDS?
Насчет DDS - согласен, что это очень хороший сбалансированный формат, но если делать просмотрщик, то он должен поддерживать все доступные в Dark Engine форматы. Я, честно говоря, до конца не даже понял, что значит "сконвертировать все текстуры Thief в DDS". Имеется в виду - сконвертировать текстуры, запаковать их в crf и выпустить некий отдельный дистрибутив нашей любимой игры со сжатыми текстурами? Этого лучше не делать во избежание бардака - иначе у одних будут одни текстуры, а у других другие. Или же разработчику миссий предлагается сделать копию ресурсов, сконвертировать текстуры в DDS и использовать эту копию исключительно для просмотра моделей? Ну это тоже крайне неудобно. К тому же есть большое количество ФМ-ок разных авторов и разных лет с кастомными моделями, есть просто паки с кастомными моделями, и текстуры в этих паках могут храниться в самых разных форматах. Каждый раз, получив пак или ФМ-ку, конвертировать текстуры только для того, чтобы просмотреть модели - это очень неудобно.

Цитата: Force от 29 июля 2017 13:39:40
Я понимаю, что он сжимает с потерями, но неужели это НАСТОЛЬКО критично?
DDS (точнее, DXT1/3/5) действительно жмет с некоторой потерей качества. Обычно на достаточно пестрых полноцветных текстурах, особенно если они высокого разрешения, это незаметно. Однако в некоторых случаях в DDS могут проявиться искажения и артефакты - например, если мы имеем дело с контурными изображениями вроде шрифтов или схем, или просто на контрастных деталях. Причем, по иронии судьбы, чем ниже разрешение текстуры и крупнее пиксели, тем заметнее эти артефакты - а мы знаем, что оригинальные текстуры Thief имеют весьма низкое разрешение. И это еще один повод их не трогать.

Цитата: Force от 29 июля 2017 13:39:40
Интерфейс рисуется средствами OpenGL. В связи с этим навряд ли удастся реализовать такие привычные действия как выделение строк, копирование в буфер обмена...
А рендеринг в окне поддерживается? В таком случае можно сделать OpenGL-окно внутри окна приложения, а вне OpenGL-окна (но внутри окна приложения) организовать интерфейс (меню, тулбар и т. п.) средствами WinAPI или какой-либо GUI-библиотеки. Правда, не знаю, насколько сложно будет обеспечить взаимодействие такого внешнего интерфейса и твоего движка.

Цитата: Force от 29 июля 2017 13:39:40
Самое главное ограничение: требуется видеокарта уровня не ниже DX10, а если конкретно - поддерживающая OpenGL 3.2 (что равнозначно в общем :) ). Если сказать совсем юзер-френдли языком, то видеокарта, произведенная не ранее чем 10 лет назад :lol: (позже 2007 года).
Подождем, когда придет Зонтик и выскажет все, что думает по этому поводу. Мне кажется, ждать особого воодушевления по этому поводу от него не стоит. Кстати, как насчет версии операционной системы? XP поддерживается?

PS. Картинка нравится. Довольно мягко и естественно выглядит. Красивая тень. Она динамическая?


[off]
Борис, спасибо за столь подробное тестирование. К сожалению, я не могу объяснить, почему моя программа ведет у тебя так странно и не желает синхронизироваться. Но я склонен думать, что виноват тут не мой код, а DirectX или что-то еще вовне. Вообще, опустив некоторые детали, рендеринг в программе можно описать следующим образом: сначала программа загружает модели и текстуры вызовом соответствующих функций D3D (причем модели грузятся в родном D3D-шном формате - *.x; жаль, конечно, что это не *.bin, иначе бы мы имели почти готовый просмотрщик, пусть и примитивный); затем входит в цикл, где сначала получает данные с клавиатуры и мыши, после чего на основании этих данных, скорости поезда и времени, прошедшего с момента расчета предыдущего кадра, рассчитывает новые координаты камеры и всех моделей сцены (что, по идее, очень быстро), затем для каждой модели передает эти координаты в D3D и вызывает D3D-шную функцию ID3DXBaseMesh::DrawSubset(), которая осуществляет рендеринг модели в задний буфер (при этом данная функция может делать геометрические преобразования как программно, загружая процессор, так и аппаратно - все зависит от настроек, которые мы задали при инициализации D3D). Когда все модели отрендерены и сцена полностью готова, мой код вызывает D3D-шную функцию IDirect3DDevice9::Present(), которая переносит готовую картинку из заднего буфера в окно, после чего цикл запускается по новой. При этом данная функция может подождать следующего кадра (при включенной синхронизации), а может перенести картинку сразу (при отключенной). Почему она у тебя иногда ждет больше одного кадра - неизвестно. Может, твой Samsung 757DFX ей чем-то не нравится, я не знаю. Но, судя по высокому FPS при отключенной синхронизации, собственно рендеринг одного кадра, включая все предварительные рассчеты, очень быстр и занимает весьма незначительное время (что неудивительно, учитывая простоту сцены). Бывают случаи, когда рендеринг длится дольше одного кадра, и тогда - при постоянной сложности сцены - при включенной синхронизации FPS может упасть ровно вдвое (втрое, вчетверо и т. д.), но здесь явно не твой случай.

Цитата: Boris3000 от 29 июля 2017 12:49:08
Кроме всего этого оказалось, что сглаживание радикально дропает фпс во всех режимах без VS. Даже в тех, где загрузка видеокарты не более 30%. Это выглядит, как будто сглаживание обрабатывается процессором...
Ну это тоже странновато. По идее, на скорость сглаживания должна влиять исключительно видеокарта.

Цитата: Boris3000 от 29 июля 2017 12:49:08
Это немного удивительно, т. к. у него ядра двухпоточные. Либо твоя программка, не умея задействовать более одного ядра, умеет задействовать гипертрейдинг, либо гипертрейдинг даёт прибавку всего в 1-3% производительности.
У меня в коде не предусмотрено никакой многопоточности. Весь мой код работает в одном потоке, дополнительные потоки не создаются. Однако Диспетчер задач показывает 16 потоков - можно предположить, что их создает DirectX, но что он там в них делает и как распределяет вычисления, лично мне неизвестно.

Цитата: Boris3000 от 29 июля 2017 12:49:08
Если интересно померяться попугаями, то прогони Линпак.
У меня 22 в среднем. Значит, 11 на ядро, как я понял.
[/off]

Force

Chuzhoi

DDS - если резюмировать, похоже всё-таки нужна поддержка всех форматов... Ладно, посмотрим, что получится сделать. Дело в том, что я стараюсь всё слинковать статически, чтобы обеспечить легкую переносимость и кроссплатформенность, и если у нужных графических либ не будет статической версии - будет неприятно.

Интерфейс - а всё-таки зачем АПИ-интерфейс? Неужели не подойдет интерфейс в самом 3d приложении? Ну, как в гонках мы выбираем модель автомобиля, который крутится на экране.

OpenGL 3.2 - у него нет ограничений на версию системы, главное - чтобы железо поддерживало. Что касается XP - то надо просто скомпилить версию под XP, я не пробовал, но можно попытаться, по крайней мере надо будет найти threaded gcc под xp или на крайняк попробовать visual studio... Но если у Зонтика видюха не держит ОГЛ 3, то всё пропало. Потому что делать даунскейл на более ранний ОГЛ - это слишком... скажем так... специфическая задача. Я и так из кожи вон лезу, чтобы воплотить некоторые современные решения на 3-м ОГЛе, а тут второй... :no: Если 3-й от 4-го визуально может практически не отличаться, то 2-й слишком уступает как визуально, так и алгоритмически. Там куча особенностей, которые разрушат универсальность кода, а этого хотелось бы избежать. На худой конец, может проще будет скинуться Зонтику на видюху посовременнее, если потребуется? :) Я и так, считаю, что даже 3-й ОГЛ - это архаизм, достаточно взглянуть на статистику железа в стиме... Еще один повод для меня кусать ногти...


По поводу скриншота. На самом деле он предназначен для демонстрации того, что движок умеет рендерить bin-объекты, показать их в масштабе, друг относительно друга. Я просто собрал эту комнатку в ДромЕде первого вора за пару минут чтобы сделать этот скриншот. То есть это совсем не домонстрация возможностей движка, тут кроме теней и гамма-коррекции больше нет никаких эффектов :). То есть, вообще, даже бампмаппинг отключен. Когда наступит время, я с удовольствием всё продемонстрирую.

[off]P.S.

Так и быть, сообщу о своих недавних изысканиях. Думаю, многим это будет интересно, а мне - приятно рассказать.

Тени строятся действительно реалтайм. У каждого источника есть флажок, происходили изменения в радиусе его действия или нет (надо перерисовывать тень или нет), если да - тень перерисовывается, если нет - остается прежней. Так вот, в режиме отрисовки всех теней от всех источников единожды (как это делается при портализации уровня - один раз и навсегда), и рендеринге ВСЕЙ геометрии уровня, ВСЕХ объектов и ВСЕХ источников (то есть, когда мы видим весь уровень целиком), фпс не проседает ниже 30, что ОЧЕНЬ неплохо, на мой взгляд, потому что на подходе отсечение по перекрытию и тогда вообще не будет рисоваться ничего лишнего, что повлечет значительный рост фпс. Но, если ПЕРЕРИСОВЫВАТЬ тени каждого источника каждый кадр - фпс падает ниже одного кадра и игра практически виснет. Но, надо сказать, в реальности Thief такого достичь невозможно, потому что мы никогда не можем видеть ВЕСЬ уровень сразу. Ко всему прочему, надо наводнить уровень толпами людей или движущихся объектов, и при этом всё это видеть в одном кадре. То есть, это должен быть уровень без крыш и без подвалов, одноэтажный и плоский, если мы смотрим сверху... А это довольно скучно, согласитесь... по крайней мере, слишком специфично. Потому что если источник находится за стеной, его пиксели уже сейчас обрабатываться не будут.

Именно по причине дороговизны рисования теней, современные движки предпочитают этого не делать вовсе, то есть в их редакторах надо явно указать, что источник должен отбрасывать тень, причем иногда надо даже указывать категории объектов, от которых источник отбрасывает тень.

Возможно, если всё будет хорошо и на этом движке выйдет интересная Thief-поделка и если кто-нибудь сделает миссию-эксклюзив спецом для этого движка, то можно будет продемонстрировать некую небывалую мощь и красоту... Но если честно, у меня есть куча сомнений относительно его востребованности в Thief-сообществе. Хотя бы потому что сам DromEd может не дать сделать такую миссию, или движок надо будет излишне затачивать под некие слишком специфические особенности ДромЕда, типа поддержки кастомных скриптов в dll'ках :suspect:, что навряд ли когда-нибудь будет сделано...[/off]

nemyax

Цитата: Force от 30 июля 2017 15:51:35
2-й слишком уступает как визуально, так и алгоритмически
Например? У тебя будут шейдеры геометрии и тесселяции?
Желаю тебе из тысячи рулеток одну — самую русскую!
Желаю тебе из тысячи надежд одну — самую крупскую!

Force

nemyax, геометрии - возможно, тесселяции в 3-м огле нет. Но во 2-м ограничение на количество инструкций шейдерных.

Zontik

Минуточку. Начнем с того, что PinkDot никому ничего не обещал и вообще с публичными заявлениями не выступал. Maxim, это же частная переписка. Давайте хотя бы воздержимся от дальнейшего обсуждения.
А теперь по теме.
Force
Во-первых, рад слышать снова.
Во-вторых,
ЦитироватьСамое главное ограничение: требуется видеокарта уровня не ниже DX10
Железо пролетает на 100%. Тут я ничего поделать не могу (требуется системный апгрейд, причем слово "требуется" здесь совершенно не отвечает изначальному смыслу, другими словами - мне это не надо), но это же не повод отказывать себе в удовольствии сделать что-то для других. Я за то, чтобы продолжать работу. Ну или за то, чтобы начать и продолжать.
Насчет форматов полностью согласен с Чужим. Сам я не перехожу полностью на DDS по банальнейшей причине: мне неудобно с ним работать. Это формат, слишком требовательный к харду и софту, а я и сам такой. И наши с ним требования в корне различаются.
[off]Ничего, 8 миссий из девяти готовых даже при этом не должны тормозить. Насчет девятой не уверен, но вероятность процентов 95, что тоже не будет. Есть и другие способы оптимизации, помимо перехода на иной формат.[/off]
Ну и в-третьих. Желаю удачи с тем, что ты так забавно называешь "поделкой". Мне кажется, это немного заниженная оценка. По крайней мере, все, что я понял из прочитанного, мне пока нравится. Ну, кроме несовместимости с New Dark, но нельзя же иметь все и сразу.
Дайте глазам отдохнуть! Тёмное место

Force

Zontik, грустно слышать... Если не секрет, какая у тебя видеокарта?

Maxim

Zontik А что, у тебя не было такого что некоторые PNG текстуры дают рябь от того, что детализация сохраняется даже на больших расстояниях игрока от текстуры? Вроде как DDS как раз от этого помогает.
Still they talk anyway
When there's nothing to say
There's so much said in empty words...

Призрак Boris'а3000

#100
Цитата: Zontik от 30 июля 2017 23:02:09
Железо пролетает на 100%. Тут я ничего поделать не могу (требуется системный апгрейд
С чего это? Даже если у тебя мать с AGP, то AMD очень долго поддерживала эту шину, и две самые мощные видеокарты на AGP -- Radeon HD 3850 и Radeon HD 4670 не только поддерживают DX10 (даже 10.1), но и по производительности будут где-то на уровне GeForce 9600 GT.
А если PCI-E, то проблем вообще никаких.
Так что, Зонтик, третий раз говорю -- айда на Авито! Иначе это уже просто несерьёзно -- из-за ерунды, на решение которой нужен один день и 500 рублей (если повезёт, то вообще задаром), ты будешь напрягать человека с поддержкой древнющего железа. Либо обломаешь сам себя.
Хочешь, я тебе сам найду подходящую модель.
[spoiler]Только не говори, что у тебя видеокарта на PCI.[/spoiler]
Corsair HX1000i / Gigabyte GA-X48-DS4 / Intel Core2-Quad Q9650@4.1GHz / Hynix 8GB DDR2-800@1100MHz /
EVGA 6GB GDDR5 <GeForce GTX 980Ti> K|NGP|N Edition / Creative SB X-Fi Xtreme Gamer Fatal1ty Pro Edition /
2xSSD Intel X25-M 120GB в RAID 0 / Samsung SyncMaster 957MB (CRT 2048х1536) / UPS PCM SKP-2000A /
Windows XP Professional SP3 VL 32-bit + Windows 7 Enterprise SP1 U 64-bit / ForceWare 368.81 / New-Dark 1.26

Chuzhoi

#101
Цитата: Force от 30 июля 2017 15:51:35
Интерфейс - а всё-таки зачем АПИ-интерфейс? Неужели не подойдет интерфейс в самом 3d приложении? Ну, как в гонках мы выбираем модель автомобиля, который крутится на экране.
В простейшем случае незачем. Но если реализовывать весь список хотелок - а именно просмотр списком с превьюшками, то, возможно, интерфейс, нарисованный средствами готовой GUI-библиотеки реализовать проще, нежели изображать все это посредством OpenGL.

Цитата: Force от 30 июля 2017 15:51:35
Тени строятся действительно реалтайм. У каждого источника есть флажок, происходили изменения в радиусе его действия или нет (надо перерисовывать тень или нет), если да - тень перерисовывается, если нет - остается прежней. Так вот, в режиме отрисовки всех теней от всех источников единожды (как это делается при портализации уровня - один раз и навсегда), и рендеринге ВСЕЙ геометрии уровня, ВСЕХ объектов и ВСЕХ источников (то есть, когда мы видим весь уровень целиком), фпс не проседает ниже 30, что ОЧЕНЬ неплохо, на мой взгляд, потому что на подходе отсечение по перекрытию и тогда вообще не будет рисоваться ничего лишнего, что повлечет значительный рост фпс. Но, если ПЕРЕРИСОВЫВАТЬ тени каждого источника каждый кадр - фпс падает ниже одного кадра и игра практически виснет.
Интересно. А если источник света начнет двигаться - например, по уровню пойдет стражник с факелом - сильно ли это ударит по быстродействию?

Цитата: Maxim от 31 июля 2017 00:26:49
Zontik А что, у тебя не было такого что некоторые PNG текстуры дают рябь от того, что детализация сохраняется даже на больших расстояниях игрока от текстуры? Вроде как DDS как раз от этого помогает.
Это оттого, что при использовании PNG, видимо, не поддерживается мипмэппинг (т. е. замена исходной текстуры на ее версии более низкого разрешения по мере удаления). В DDS все эти мип-уровни сохраняются в одном файле вместе с основной текстурой (но для этого надо при экспорте в DDS включить соответствующую опцию; в Фотошопе это MIP map generation - Generate MIP maps -  All). По идее, движок сам должен сгенерировать мип-уровни для основной текстуры, если их нет в исходном файле, но, видимо, не все движки себя этим утруждают.

Хотя вот здесь утверждается, что Dark Engine генерирует мипы при отсутствии их в файле текстуры сам (но точно не в DDS - проверено; в DDS они должны быть сгенерированы при экспорте). Короче, везде какие-то противоречивые слухи. Все надо проверять.


Призрак Boris'а3000

#102
Цитата: Force от 30 июля 2017 15:51:35
Интерфейс - а всё-таки зачем АПИ-интерфейс? Неужели не подойдет интерфейс в самом 3d приложении? Ну, как в гонках мы выбираем модель автомобиля, который крутится на экране.
Тут уже говорилось, что собственно просмотрщик -- это только полдела. Прежде чем отображать модель, её нужно найти. Поэтому нужен минимальный функционал СУБД. Таким функционалом обладает любой каталогизатор музыки, фоток и т. д. Должны быть предусмотрены возможности назначения каждой модели множества тегов, введения тега с клавиатуры в некое поле, поиска модели по введённым тегам и отображения списка найденных моделей. И только после этого пойдёт выбор модели "как в гонках". Если это проще реализовать в 3D, тогда нет вопросов.

База с тегами должна висеть в оперативке, естественно, иначе это будет издевательство над винтом.
Corsair HX1000i / Gigabyte GA-X48-DS4 / Intel Core2-Quad Q9650@4.1GHz / Hynix 8GB DDR2-800@1100MHz /
EVGA 6GB GDDR5 <GeForce GTX 980Ti> K|NGP|N Edition / Creative SB X-Fi Xtreme Gamer Fatal1ty Pro Edition /
2xSSD Intel X25-M 120GB в RAID 0 / Samsung SyncMaster 957MB (CRT 2048х1536) / UPS PCM SKP-2000A /
Windows XP Professional SP3 VL 32-bit + Windows 7 Enterprise SP1 U 64-bit / ForceWare 368.81 / New-Dark 1.26

Zontik

ЦитироватьА что, у тебя не было такого что некоторые PNG текстуры дают рябь
Не было. Просто никогда не использовал текстуры PNG.
С другими форматами никогда не замечал ничего подобного в критической стадии.
Может, еще и потому, что я не гонюсь за размерами текстур. Естественно, от текстуры большего разрешения с большей детализацией следует скорее ожидать ряби. Если движок настолько туп, что действительно пытается отобразить каждый пиксел.
Force
Radeon 1950x Pro. Кажется. По-моему, это PCI-E, было настолько давно, что уже просто не помню.
Я в гонке вооружений не участвую. Не тянет - и не надо. Ограничивать себя, ха. Ограничивать - это ставить себя в зависимость от каких-то драных железок. Да пропади они все.
ЦитироватьНо если реализовывать весь список хотелок - а именно просмотр списком с превьюшками
Да где же там в хотелках список с превьюшками? Не нужны превьюшки, они даже вредны. Что, долго мышкой ткнуть в файл?
Дайте глазам отдохнуть! Тёмное место

nemyax

Есть мнение, что лучше всего взять тривьюшку, которую предлагает Доброчёрт, приделать к ней вьюпорт на gl2 и приспособить к нему код, которым Force набивает вертексбуферы (ну или чего он там делает) из содержимого бинок.
Желаю тебе из тысячи рулеток одну — самую русскую!
Желаю тебе из тысячи надежд одну — самую крупскую!