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

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

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

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

Zontik

[off]Chuzhoi, ты халтурщик. Ну-ка быстро пошел и исправил! Чтоб завтра же у Бориса все работало как часы.[/off]
Дайте глазам отдохнуть! Тёмное место

Chuzhoi

[off]Уже. Борис таки соблазнил меня посмотреть код повнимательнее. Оказалось, что насчет софтового режима Борис отчасти прав. Устройство Direct3D инициализировалось следующим образом:

gpD3D->CreateDevice (D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
                                  D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                                  &d3dpp, &gpD3DDev)

D3DDEVTYPE_HAL означает, что используется аппаратное 3d-ускорение, но D3DCREATE_SOFTWARE_VERTEXPROCESSING означает, что геометрические преобразования Direct3D будет делать программно. Это, вероятно, я сделал затем, чтобы обеспечить совместимость с самыми древними 3d-ускорителями, которые умели аппаратно накладывать текстуры, но еще не умели делать геометрические преобразования - подобные ускорители тогда еще были в некотором ходу. Чтобы включить аппаратные геометрические преобразования, нужно заменить D3DCREATE_SOFTWARE_VERTEXPROCESSING на D3DCREATE_HARDWARE_VERTEXPROCESSING (что я и сделал).

Заодно я разобрался, как отключить вертикальную синхронизацию (без этого на моей машине разница в FPS в вообще не видна). Нужно установить в D3DPRESENT_PARAMETERS следующее поле:
d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;

Архив обновил: http://chuzhoi.city/files/railroad.zip
Там теперь четыре бинарника, имена которых говорят сами за себя (один исходный и три новых). Исходный называется Railroad (Software vertex processing).exe. По идее, Railroad (Hardware vertex processing).exe - это окончательный, "релизный" бинарник. Также в целях тестирования я добавил варианты с отключенным VSync.

У меня с отключенным VSync FPS примерно такой:

Vertex processingТоварный поезд"Пассажирский" поезд
Hardware9001500
Software500750

Двухъядерный Core i3 6100 грузится при этом на 47-49%.

Мне интересно - неужели одно ядро бюджетного процессора 2015 года аж  в 10 раз быстрее одного ядра топового процессора 2008-2009 года? Да не может быть.
[/off]

Zontik

Дайте глазам отдохнуть! Тёмное место

HellRaiser

чёт вы господа заофтопились.

Цитата: Boris3000 от 28 июля 2017 04:22:15
Цитата: HellRaiser от 28 июля 2017 02:57:14
Но она не делает вообще всё за тебя
Я тут при чём? Она должна делать не за меня, а за процессор. Если используется D3D, то нагрузка должна лечь на видеокарту, разгрузив проц -- ради этого ж и задумано. В такой программке загрузка процессора должна болтаться в районе нуля, и даже в софтовом режиме не должна и близко доходить до 100% одного ядра.

Ну конкретно тебя я и не имел в виду, а рядового/начинающего разработчика - пользователя той или иной библиотеки/SDKи.
Ниже я тоже почитал, но сам в код так пристально не вглядывался, конечно же.

Цитата: Chuzhoi от 28 июля 2017 14:59:57
...что я и сделал...
А смысл был? Работает и ладно. Хотя я б на твоём месте не билдил 3 экзешника, а всего лишь вынес настроечку например в реестр, если конфигурялку влом делать.
Цитата: Zontik от 28 июля 2017 15:45:51
[off]Беру "халтурщика" обратно.[/off]
Так ты у нас тут насяльника за старшего манагера? Нуок, я не против. Буду иметь это в виду, хотя изначально предполагал, что ты у нас тут не насяльника уберфюрер, а всего лишь авторитетный заказчик.

Призрак Boris'а3000

#79
[off]
Цитата: Chuzhoi от 28 июля 2017 14:59:57
Railroad (Hardware vertex processing).exe
У тебя там оба хардваре написаны как Hardvare.

Цитата: Chuzhoi от 28 июля 2017 14:59:57
Двухъядерный Core i3 6100 грузится при этом на 47-49%
Это немного удивительно, т. к. у него ядра двухпоточные. Либо твоя программка, не умея задействовать более одного ядра, умеет задействовать гипертрейдинг, либо гипертрейдинг даёт прибавку всего в 1-3% производительности. Последнее, впрочем, недалеко от истины, т. к. чем совершеннее архитектура и чем более полно задействуется однопоточное ядро, тем меньший прирост даёт добавление второго потока. Это во времена четвёртых пней на 478 сокет гипертрейдинг давал процентов 30-50 прибавки, а сейчас это больше маркетинг.

Цитата: Chuzhoi от 28 июля 2017 14:59:57
неужели одно ядро бюджетного процессора 2015 года аж  в 10 раз быстрее одного ядра топового процессора 2008-2009 года?
Нет. Времена столь стремительного прогресса остались позади. Сейчас производительность растёт в основном за счёт увеличения количества ядер, а сами ядра развиваются достаточно вяло. А если их вообще к одному знаменателю привести, запустив на одной частоте, без гипертрейдинга, без SSE4.2, то даже топовое современное ядро дай бог чтоб в 1.5-2 раза оказалось производительнее, чем у Q9650 почти десятилетней давности. Что и позволяет до сих пор с этим Q9650 совершенно спокойно себя чувствовать, т. к. далеко не все программы умеют задействовать кучу ядер. Я потому его и взял в 2011-ом году, т. к. никакого смысла морочиться с полным апгрейдом не было и нет до сих пор. А когда-то такое было немыслимо -- чтоб, например, в 2000-ом году сидеть с процессором 90-го года.
Тут дело в том, что бенчмарка из твоей программки не выйдет, т. к. совершенно непонятно, что и как она там бенчмаркирует.

Если интересно померяться попугаями, то прогони Линпак. Он уже настроен. Просто запусти Linx.exe и нажми "Тест". Он прогонит тест один раз и выдаст гигафлопсы. У меня он выдаёт 54.1 ГФлопс, что составляет 13.5 на ядро.

Цитата: Chuzhoi от 28 июля 2017 14:59:57
У меня с отключенным VSync FPS примерно такой:

Vertex processingТоварный поезд"Пассажирский" поезд
Hardware9001500
Software500750
Я теперь потестировал потщательнее... В общем, это какой-то вынос мозга. Анализу получившиеся цифры поддаются плохо.
В видеодровах вертикальная синхронизация, антиальясинг и анизотропная фильтрация отключены. Загрузку буду приводить одного ядра. Загрузка процессора = загрузка ядра / 4.

Начну с Railroad (Software vertex processing).exe, который по идее является старым вариантом:
1) окно по умолчанию (оно запускается как раз с тем разрешением, которое нужно, -- 1024х768, но сдвинуто вниз и вправо, поэтому часть подсказок по управлению не видны), всё остальное тоже по умолчанию, кроме переключения поездов:
товарный поезд -- 38-40 фпс, загрузка ядра 0 (изредка 3%), загрузка видеокарты 1-4%
пассажирский -- 38-44 фпс, загрузка ядра 0 (изредка 3%), загрузка видеокарты 1-2%

2) развёрнутое окно (запускаю диспетчер задач и в нём "развернуть", окно фактически не разворачивается, а просто центрируется, занимая всю площадь экрана, и за его пределы ничего больше не вылезает):
товарный поезд -- 38-40 фпс, загрузка ядра 0 (изредка 3%), загрузка видеокарты 1-3%
пассажирский -- 40-48 фпс, загрузка ядра 0 (изредка 3%), загрузка видеокарты 1-2%

На этот раз загрузка адекватная, но простите, а где мои позавчерашние хотя бы 55-60 фпс? И по-прежнему это не 70 и даже не половина от 70-ти. Похоже, вертикальная синхронизация в твоей программе -- это какая-то вещь в себе, с чем она там синхронизируется, совершенно непонятно.
Во-вторых, можно увидеть, что разворот на весь экран практически ни на что не влияет. Но это под ХР. Под Семёркой же картина прямо противоположная -- по умолчанию где-то 30 фпс, а при развёрнутом -- 60. И опять-таки не 70.
Ещё одно отличие ХР от Семёрки -- под Семёркой картинка при отключённой VS, как и положено, с разрывами. А под ХР в любом случае цельная. При том что в играх и под ХР разрывы присутствуют. Чудеса да и только.


Следующий файл -- Railroad (Hardvare vertex processing).exe:
1) окно по умолчанию:
товарный поезд -- 42-48 фпс, загрузка ядра 0 (изредка 3%), загрузка видеокарты 4%
пассажирский -- 44-46 фпс, загрузка ядра 0 (изредка 3%), загрузка видеокарты 3%

2) развёрнутое окно:
товарный поезд -- 42-48 фпс, загрузка ядра 0 (изредка 3%), загрузка видеокарты 3-4%
пассажирский -- 44-46 фпс, загрузка ядра 0 (изредка 3%), загрузка видеокарты 2%

Перенос геометрии на видюху чуть её подгрузил, а вертикальная синхронизация решила синхронизироваться на чуть более высокий фпс. Разворот окна по-прежнему не оказывает под ХР почти никакого влияния.


Теперь файлы без VS.
Railroad (Software vertex processing, no VSync).exe:
1) окно по умолчанию:
товарный поезд -- 330-442 фпс, загрузка ядра 88-100%, загрузка видеокарты 21-33%
пассажирский -- 498-618 фпс, загрузка ядра 91-100%, загрузка видеокарты 27-34%

2) развёрнутое окно:
товарный поезд -- 364-486 фпс, загрузка ядра 94-100%, загрузка видеокарты 14-30%
пассажирский -- 586-748 фпс, загрузка ядра 94-100%, загрузка видеокарты 22-31%

А вот тут прекрасно виден эффект от разворота окна. Потому что абсолютно всё, что ещё отображается на экране -- рядом или поверх -- дропает фпс. И чем более навороченное это постороннее окно, тем сильнее оно его дропает. Но это опять-таки под ХР. Под Семёркой же и здесь картина противоположная -- под ней разворот файлов без VS никакого эффекта на фпс не оказывает.
То есть ХР и 7 в данном случае абсолютные антиподы -- под ХР разворот файлов с VS не оказывает влияния на фпс, а без VS -- оказывает. Под Семёркой же всё с точностью до наоборот.


Railroad (Hardvare vertex processing, no VSync).exe:
1) окно по умолчанию:
товарный поезд -- 564-572 фпс, загрузка ядра 25-72%, загрузка видеокарты 58-59%
пассажирский -- 818-838 фпс, загрузка ядра 3-94%, загрузка видеокарты 62-63%

2) развёрнутое окно:
товарный поезд -- 1196-1210 фпс, загрузка ядра 100%, загрузка видеокарты 70-71%
пассажирский -- 1800-1846 фпс, загрузка ядра 100%, загрузка видеокарты 81-82%

И вот он рекорд. Но под Семёркой у пассажирского поезда только 1070 фпс в обоих вариантах окна. Т. е. больше, чем в ХР по умолчанию, но существенно меньше, чем в ХР в развёрнутом виде.
Во-вторых, по умолчанию какая-то непонятная загрузка ядра -- всё время скачет и до 100% дотянуться не может.
В-третьих, по умолчанию рост загрузки видеокарты при переносе на неё геометрии явно неадекватен приросту фпс.


Кроме всего этого оказалось, что сглаживание радикально дропает фпс во всех режимах без VS. Даже в тех, где загрузка видеокарты не более 30%. Это выглядит, как будто сглаживание обрабатывается процессором... А так как позавчера оно у меня было включено, то этим, возможно, и объяснялась стопроцентная загрузка ядра при 60 фпс.
Если взять рекордный режим со включённым сглаживанием, то загрузка видеокарты станет 99% (видимо, это есть 100), а фпс сильно просядет. Казалось бы, узкое место в данном режиме -- видеокарта, и проц должен разгрузиться, но он как был загружен на 100%, так и остаётся.

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


Цитата: HellRaiser от 29 июля 2017 03:22:13
ты у нас тут не насяльника уберфюрер, а всего лишь авторитетный заказчик
Авторитарный заказчик.
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

#80
Здравствуйте, друзья!

Случайно нашел эту тему и очень удивился, обнаружив тут даже упоминание о себе! Это ж какой-то инсайд! :biggrin:

А если серьезно, то да, nemyax прав. У меня процентов на 80 готово то что вам нужно и я могу этим поделиться. И да, мне очень понравилась идея бартера, которую предложил Zontik. Но обо всём по-порядку.

Эх, я откладывал этот момент до последнего, надеясь на некий reveal с вау-эффектом, скриншотами и видосиком... но раз уж так вышло, да еще и пользу можно кому-то нанести, то так и быть, будет анонс. :biggrin: Я думаю, выгоду извлекут все. Это я о том, что я уже шесть лет втихаря тружусь над своим проектом - написание собственного игрового движка для собственных же целей. И так уж вышло, что в качестве ресурсной основы я выбрал свою любимую игру - Thief. Не буду углубляться в детали, поскольку эта тема посвящена другой задаче... Но могу сказать, что bin-модели (пока только статические) этот движок успешно рисует, накладывает текстуры, камера движется, интерфейс рисуется (OpenGL-интерфейс, из полигонов, не WinAPI, не GTK...), в общем всё что вам нужно. Потребуется некоторое время чтобы сделать из этого полноценную отдельную программу, но это не годы, которые я уже потратил на это (как оказалось по счастливой случайности), а месяцы.

Но надо сказать, у движка есть определенные ограничения. Это обсуждаемо, что я и призываю сделать.

  • Самое главное ограничение: требуется видеокарта уровня не ниже DX10, а если конкретно - поддерживающая OpenGL 3.2 (что равнозначно в общем :) ). Если сказать совсем юзер-френдли языком, то видеокарта, произведенная не ранее чем 10 лет назад :lol: (позже 2007 года). Я надеюсь, все обладают соответствующим железом? :)

  • Движок работает исключительно с текстурами формата DDS. Я размышлял так, DDS - это оптимальный формат для рендеринга, он хранится в сжатом виде и в таком же сжатом виде передается видеокарте для рисования, то есть, мы экономим видеопамять. Какой-нибудь JPEG, к примеру, на диске хранится может быть в еще более сжатом виде, но вот для передачи видеокарте, его надо разжимать и передавать распакованным, а это в разы больше. Я понимаю, что для такой мелкой проги как САБЖная это не актуально, но вспомним, что речь идет изначально об игровом движке... Поскольку конвертация всех текстур в DDS - это вопрос 10 минут и делается один раз (могу поделиться скриптиком, которым я перекодировал все текстуры Thief в DDS), то возникает вопрос, нужны ли ВСЕ возможные форматы или достаточно DDS? Тем более что NewDark успешно с ним работает. И кстати, а почему до сих пор все не перешли на DDS в NewDark'е? Я понимаю, что он сжимает с потерями, но неужели это НАСТОЛЬКО критично?

  • Интерфейс рисуется средствами OpenGL. В связи с этим навряд ли удастся реализовать такие привычные действия как выделение строк, копирование в буфер обмена... Нужно ли это? И да, интерфейс мне придется значительно дорабатывать, реализовывать скролл и т.п., поскольку на данном этапе я сделал только базовый функционал: клики, переход между экранами... так что потребуется время. Но это в любом случае надо будет делать.

  • Потребуется доработка в поддержке формата моделей персонажей. Как я говорил выше, сейчас рисуются только статичные модели. Скажем так, это не очень сложно доделать на базе существующего функционала, не сложнее чем интерфейсные функции, просто иначе :). Еще существуют некоторые проблемы в отрисовке моделей, состоящих из нескольких костей. Проблемы плавающие и я пока не успел с ними до конца разобраться, так что надеюсь вместе мы сможем это победить.

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

    Так что я предлагаю обсудить поднятые вопросы, и если вам это подходит, потихоньку начну делать форк проекта.


nemyax

Force
Запилишь отдельную тему про движок? Очень интересует, что ты придумаешь со скелетными модельками.
Желаю тебе из тысячи рулеток одну — самую русскую!
Желаю тебе из тысячи надежд одну — самую крупскую!

Force

[off]nemyax, да, но ближе к релизу публичной тестовой версии. Я очень не люблю делать анонсы на пустом месте, либо когда еще уйма работы предстоит. Есть риск не доделать и тогда получаются пустые обещания.[/off]

Maxim

То есть вы писали собственный игровой движок?  :eek: Ничёсе! А для своей получается игры или как база для создания миссий разными авторами? Редактор какой-то предполагался?
В общем, подробности интересны.
По поводу данной программы: на TTLG вроде откликнулся PinkDot и сел делать. Причём, в отличие от наших, кто заявляет что это ужас и 100 лет мороки, он вроде как сказал что без особых проблем сделает. Причём, с рендером модельки в окошке.
Но подробнее скажет Zontik.
Still they talk anyway
When there's nothing to say
There's so much said in empty words...

Force


Force

Ладно, что сделано, то сделано. Если буду нужен - я у себя. :bigsmirk:

[off]Вкратце о движке. Начинался он в далеком 2011-м, когда лицензия на Unreal Engine 3 стоила $800 000, в связи с чем идея написания движка для своего проекта не вызывала столько бугугашечек. Плюс ко всему, мне интересно было изучить процесс создания игры "от и до". Потом времена изменились и игровые движки стали доступны простым смертным практически бесплатно. Я долго сомневался в том, нужно ли продолжить пилить то что я пилил или перейти на готовый и не париться. Но решил остаться при своих.

Редактор - DromEd, поскольку движок считывает ОРИГИНАЛЬНЫЕ mis-файлы. Почему так крупно? Потому что чуваки из NewDark'а изменили формат оригинальных файлов, что разрушило совместимость. И теперь считать миссии ньюдарка могут только они. Есть вариант с собственной перекомпиляций исходной геометрии (если она не вырезана из миссии), но уж больно много исследований нужно и тонны времени, проще выклянчить у ньюдарковцев их формат.

Движок - для своей игры. Я на базе Thief планировал сделать общий функционал, пересекающийся. Дать потестить людям тут, выявить косяки. Возможно, прийти к какому-то интересному решению в плане Thief. А потом - как это модно у индюков - автогенерация уровней и т.п. Так что дром ед не планировалось использовать для своего проекта.[/off]

nemyax

Цитата: Maxim от 29 июля 2017 14:07:07
По поводу данной программы: на TTLG вроде откликнулся PinkDot и сел делать. Причём, в отличие от наших, кто заявляет что это ужас и 100 лет мороки, он вроде как сказал что без особых проблем сделает. Причём, с рендером модельки в окошке.
Нуну. Если ты вспомнишь его темпы разработки плуга для макса, то "без особых проблем" приобретёт несколько другое значение. На то и выйдет карочы.
Желаю тебе из тысячи рулеток одну — самую русскую!
Желаю тебе из тысячи надежд одну — самую крупскую!

Призрак Boris'а3000

[off]
Цитата: nemyax от 29 июля 2017 14:48:59
его темпы разработки плуга для макса
Как там у него дела с этим плугом для mesh?[/off]
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

Так что вы решили в итоге? Или ждем автора темы? Мне эта разработка выгодна в плане обратной связи, еще я надеюсь на ваш потенциал в раскопках инфы, если это понадобится.

nemyax

Boris3000
Для анимаций плух готов, если ты про него. Первоначальная оценка трудозатрат тоже была сипец какая оптимистичная, ну как водится. А поддержку редактирования мешей он разве обещал?
Желаю тебе из тысячи рулеток одну — самую русскую!
Желаю тебе из тысячи надежд одну — самую крупскую!