![]() |
Ответ: Пишем 3D движок - замену Xors3D
Цитата:
Только я тебя огорчу - постоянно шапку править не получится, потому что есть предельный срок на правку поста (если конечно это не было убрано на форуме). По крайней мере раньше было ограничение такое. |
Ответ: Пишем 3D движок - замену Xors3D
Цитата:
Вроде как 10 дней. Кстати тоже призываю убрать такое ограничение - всё самое свежее должно быть в шапке в кратком виде. |
Ответ: Пишем 3D движок - замену Xors3D
Работает.
ФПС: 118 - без объектов. 63 - полностью с объектами. Конфиг Проц 2.8 ГГц x 4, 4 Гб оперативки, видюха HD 4870 512 Мб. |
Ответ: Пишем 3D движок - замену Xors3D
125 фпс когда видно все объекты.
680gt насчет стерео режима в 3d vision и opengl подтвердилось. все вот эти PFD_STEREO и GL_BACK_LEFT, GL_BACK_RIGHT на обычной карте не работают (нужна квадра). Хотя что то похожее удается замутить показывая по очереди левый и правый кадр. |
Ответ: Пишем 3D движок - замену Xors3D
Разве не вся суть заставить карточку выдавать регулируемо один буфер в чётный кадр, а другой в нечётный. При этом даже если твоё приложение не выдаёт 120 кадров (на каждый глаз), то всё равно замена кадров будет, лишь факт замены буффера для кадров замедлиться.
Но суть в том что стабильныеы 120 кадров мигают, и очки синхронизированны с монитором на эту чистоту (если активное 3Д), будет ОК. Да и тут не суть в монике. Ведь монику обычно кормят разные форматы, например можно кормить все 120 кадров один за другим, а можно кормить левый и правый кадры слева и справа на экране как один - кормим это монику, а моник сам уже интерполирует изображение в стерео для очков. Также работают и проекторы. Есть ещё разные режимы - по полоскам, вертикально, горизонтально, и ещё другие. Unigine Heaven демка умеет много режимов, главное найти которыые поддерживаются твоим монитором/проектором. По факту для левый/правый режима, не нужно никаких расширений и дров - просто две камеры рендер, для левого и правого глаз :) |
Ответ: Пишем 3D движок - замену Xors3D
Сейчас пытаюсь разобраться, что я делаю не так:
когда включен стереорежим 3D vision - разделение на 2 вида (2 камеры) должно произойти автоматом. У меня же такого почему-то не происходит. Не пойму, толи что-то с буфером глубины, толи что-то добавить нужно. Самое интересное - в чужих демках разделение на 2 ракурса происходит автоматом. |
Ответ: Пишем 3D движок - замену Xors3D
Нашел на сайте NVidia такой фрагмент:
Цитата:
P.S. Кстати, 3D vision можно использовать на любом мониторе и практически любой видеокартой NVidia в режиме Discovery c анаглифными очками. Т.е. многим 3D доступно. |
Ответ: Пишем 3D движок - замену Xors3D
Цитата:
в любом случае, оно тоже должно эмулироваться через шейдеры. ----- я подключал нвидийный 3д вижн - он и правда как по волшебству работает без особого кода - единственное надо convergence/separation параметры подобрать к сцене и устанавливать их через NvAPI. |
Ответ: Пишем 3D движок - замену Xors3D
Накатайте лучше импортер из новых максов в b3d формат.
|
Ответ: Пишем 3D движок - замену Xors3D
b3d не нужен.
|
Ответ: Пишем 3D движок - замену Xors3D
|
Ответ: Пишем 3D движок - замену Xors3D
Цитата:
|
Ответ: Пишем 3D движок - замену Xors3D
Блин.... как же я ступил с 3D vision... Удивляюсь, почему не работает разделение ракурсов - а ведь банально проглядел, что у меня стояло %D3DCREATE_SOFTWARE_VERTEXPROCESSING
... Поправил на %D3DCREATE_HARDWARE_VERTEXPROCESSING и все стало работать... :) И ФПС поднялся в 4 раза... :) P.S. У кого есть опыт создания игрушек на DX - подскажите - как работали с клавиатурой? Через DirectInput или GetAsyncKeyState WinApi? |
Ответ: Пишем 3D движок - замену Xors3D
Цитата:
в винапи я только не GetAsyncKeyState юзал, а GetKeyboardState - она возвращает массив со всей клавы где нажато, где нет (раз в кадр вызывал). |
Ответ: Пишем 3D движок - замену Xors3D
Точно. Шапку больше править нельзя... :(
|
Ответ: Пишем 3D движок - замену Xors3D
Имеем: ландшафт и набор моделей с разными материалами и камеру, которая смотрит на часть моделей из набора.
Правильно ли я понимаю следующие вещи: (поправьте, если не прав) 0. Постоянно загружаем в фоне нужную порцию вертексов с диска в память (неважно для чего: ландшафта, моделей и т.п.), проверяя что нужно грузить исходя из положения и направления камеры. 1. Опрашиваем устройства ввода, считаем физику, меняем координаты вертексов и т.п. 2. Сортируем все вертексы по материалам, создаем вертексные буферы для каждого материала и пишем в них только то, что должно быть видно из камеры. 3. Для каждого материала перед рендером соответствующего вертексного буфера на экран устанавливаем вертексный шейдер через SetVertexShader. 4. Рендерим все получившиеся вертексные буферы. 5. Применяем пиксельный шейдер на всю картинку. НО! постоянное создание буферов - дорогая операция! Если создать большие буферы и просто рендерить их не целиком - будет неэффективная трата памяти. Подскажите, кто как подходил к решению данной задачи? |
Ответ: Пишем 3D движок - замену Xors3D
Цитата:
во время игры в идеале вообще никаких загрузок ничего ниоткуда и даже аллокаций памяти не должно происходить. если мир игры действительно большой, то действительно стримим данные время от времени с харда во время игры, но и это обычно делается элегантнее - с ленивым копированием по частям без переаллокаций за несколько кадров, чтобы не повлиять на фпс (тебе это пока не нужно). Цитата:
Цитата:
применять постпроцессовый шейдер поверх всей картинки в конце можно - но не обязательно. запомни - закачка чего-то из оперативки в видеопамять (и наоборот) это адово дорогая операция, ничего кроме шейдерных констант ты не должен по-хорошему каждый кадр перезаливать. нет, бывают исключения, типа когда нам надо на цпу какое-нибудь soft body симулировать, но это единичные случаи, за которыми надо чётко следить и вырубать/лодить их жестоко при первой возможности. в старых играх, бывало фпс у анимаций скиненых персонажей уменьшали вдали, лол, чтобы скинмеши перезаливать реже. ----- почитай http://netlib.narod.ru/library/book0032/ http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx |
Ответ: Пишем 3D движок - замену Xors3D
Я понял так: если геометрия статичная, то действительно - можно сделать один единственный буфер вертексов и один раз залить его в видеопамять. В этом буфере будут все вертексы всех статичных моделей с кадрами анимаций, уровнями детализации и т.п. Естественно там должно быть отсортировано всё по материалам. А рендерить такой буфер необходимо кусками по типу материала. Например: верстекс 1-120 - вертексы одного материала, 121-240 - другой материал, и .т.п. Уменьшить кол-во вызовов DrawPrimitive можно использованием текстурных атласов.
Но как быть с динамической геометрией? Или ее желательно тоже привести к статике? При динамическом ландшафте можно попробовать что-то типа marching triangles, т.е. залить в буфер вертексов все возможные комбинации и рендерить ту комбинацию, которую нужно, предварительно задав матрицу транформации. Что я имею ввиду. Возьмем к примеру мир Minecraft. Базовый элемент мира - куб. Если использовать идею, которую я описал выше, то нам в буфере вертексов нужен всего один куб (36 вертексов). При рендере куба в нужном месте мы просто задаем матрицу смещения. Я правильно рассуждаю? |
Ответ: Пишем 3D движок - замену Xors3D
В майнкрафте рендерится не кубами, а чанками, каждый чанк это 16х16х128 генерируется отдельно, и там не кубы, а фейсы только те, что видно.
Плюс вспомни прозрачную геометрию, которая должна сортироваться каждый кадр и рисоваться от дальнего к ближнему. |
Ответ: Пишем 3D движок - замену Xors3D
Цитата:
|
Ответ: Пишем 3D движок - замену Xors3D
Да, там чанки постоянно перестраиваются.
|
Ответ: Пишем 3D движок - замену Xors3D
Цитата:
|
Ответ: Пишем 3D движок - замену Xors3D
В Unity есть так называемый статик батчинг, который объединяет всю статическую геометрию на старте, но это отключается если не нужно.
Цитата:
|
Ответ: Пишем 3D движок - замену Xors3D
Я пытаюсь сказать, что имеется дилемма: либо относительно часто менять буфер вертексов, но рисовать минимальным кол-вом вызовов DrawPrimitive, либо наоборот: не трогать буфер вертексов, но тогда будет огромное число вызовов DrawPrimitive.
|
Ответ: Пишем 3D движок - замену Xors3D
В универсальных движках всегда так. Когда пишешь движок под конкретный проект ты сможешь все оптимизировать как тебе надо.
|
Ответ: Пишем 3D движок - замену Xors3D
Цитата:
такие случаи имеют право быть. остаётся находить выгодный баланс между кол-вом буферов/дроуколов и их размером - тут ты правильно понял дилемму. больше дроуколов - меньше общий фпс, больше размер буфера - заметнее будет лаг в момент тыканья куба. |
Ответ: Пишем 3D движок - замену Xors3D
8100 кубиков на сцене при 60-70 ФПС (100000 треугольников) - это много или мало? (оптимизаций пока никаких)
При разрешении 1680х1050 в стерео - ФПС: 4-5 При разрешении 1680х1050 не стерео - ФПС: 60-65 Не пойму, почему в стерео режиме такое сильное падение... :( |
Ответ: Пишем 3D движок - замену Xors3D
Кубики бенчить приятно, но бессмысленно. Т.к. смысл есть как раз в сложных сценах с множеством рендеров (тени и т.п.)..
|
Ответ: Пишем 3D движок - замену Xors3D
Цитата:
Цитата:
|
Ответ: Пишем 3D движок - замену Xors3D
выложи демку уже. посмотрим.
|
Ответ: Пишем 3D движок - замену Xors3D
Цитата:
P.S. Погоняв тесты выявил прямую линейную зависимость от числа DrawPrimitive. У меня сейчас каждый куб - это отдельный вызов DrawPrimitive. В стерео режиме 60-70 ФПС достигается только при рендере не более 600 кубов. Но все-равно непонятно, почему не в стерео режиме ФПС в 8-10 раз больше. В стерео режиме ФПС должно падать примерно в полтора раза по сравнению с обычным режимом. P.P.S Сейчас соберу демку с настраиваемым конфигом и выложу... |
Ответ: Пишем 3D движок - замену Xors3D
Вложений: 1
Народ!
Вот демка: Вложение 20236 Посмотрите, пожалуйста - у кого какая производительность. Особенно интересно в стерео режиме. |
Ответ: Пишем 3D движок - замену Xors3D
GTX560, 1280x1024 - 122fps.
при 1024 кубиках - 500 фпс. к чему сравниваю с 1024 - у меня была демка своего движка с таким кол-вом кубов, тоже с отдельным дроуколом на каждый и текстурами, плюс куллингом - при всех кубах и таком же разрешении в кадре было 1000+ фпс. ----- это всё без стерео. |
Ответ: Пишем 3D движок - замену Xors3D
6000 кубов, MSI R5770 (в подписи точное название), 1280x1024 - 42 fps. Что в полноэкранном, что в оконном.
|
Ответ: Пишем 3D движок - замену Xors3D
Вложений: 1
Вот лог.
HTML не даёт заливать, переименовал. Обратно переименуй. |
Ответ: Пишем 3D движок - замену Xors3D
Стабильно 32 FPS
Конфиг в подписи |
Ответ: Пишем 3D движок - замену Xors3D
работает. 3д эффект есть.
со стерео 4 фпс на 6000 кубах. 680gt. |
Ответ: Пишем 3D движок - замену Xors3D
Главный цикл примерно так выглядит?
Код:
QueryPerformanceFrequency(qFreq) |
Ответ: Пишем 3D движок - замену Xors3D
Цитата:
P.S. Буду стараться ориентироваться на эту цифру.... |
Ответ: Пишем 3D движок - замену Xors3D
Цитата:
Цитата:
DIP. Цитата:
Цитата:
Цитата:
Сейчас соберу эту демку и кину (надо кое-что лишнее убрать). |
Ответ: Пишем 3D движок - замену Xors3D
Вложений: 1
Вот она. WASD + мышка управление.
Попробуй отлети чтобы все кубы в кадр влезали - их 1024 штуки, у меня 1100 фпс. Алсо, там ещё MSAA 4x. В settings.ini можно настроить разрешение. |
Ответ: Пишем 3D движок - замену Xors3D
Mr_F_ - просто супер! На моем железе 1720 ФПС при старте, если отдалиться - 514 .... У моей демки - фрапс показывает 92-100, но везде и при 6000 кубах. При 1108 кубах без 3D Vision - 485-505...
А можно кусок кода главного цикла посмотреть? P.S. Что-то полный экран не включается... P.S.S Все-таки не нашел косяков у себя. Единственное - не понятно, что со стерео не так - почему так сильно падает производительность (при 1108 кубах - 32 ФПС у меня) |
Ответ: Пишем 3D движок - замену Xors3D
спасибо, хоть кто-то оценил :D
Цитата:
но я скажу, на практике ещё ни разу не видел разницы между окном-фулскрином по фпс, хоть и считается что фулскрин быстрее должен быть. Цитата:
но если отдалиться у меня - то можно сравнивать с твоей. Цитата:
пока рисуется текущий кадр одним потоком, другие потоки подготавливают отрисовку следующего. |
Ответ: Пишем 3D движок - замену Xors3D
Mr_F_ , меня глючит или на сцене только 256 кубов? :)
|
Ответ: Пишем 3D движок - замену Xors3D
тебя глючит - там 32х32 (посчитай с любой стороны) сетка из кубов, итого 1024.
|
Ответ: Пишем 3D движок - замену Xors3D
Цитата:
Вобщем вывод пока один - без разницы на чем писать код. Главное КАК писать код... Что и подтвердилось: примерно по 500 ФПС у нас обоих, если тупо рисовать 1000 кубов.... |
Ответ: Пишем 3D движок - замену Xors3D
Я понимаю что ещё рано меряться (т.к. не много в движке есть), но думаю будет на много лучше потестить что-то посложнее, например сделать тест сценарий такого рода:
32 текстуры: 2 1024х1024 2 512х512 8 256х256 8 128х128 8 64х64 4 32х32 Три модели (загруженные): Куб, кролик (тот самый популярный), чайник Сцена: Модели отрисованы массивом - 8 х 8 х 8, где идут по очереди по 4, получается например первый ряд верхнего слоя будет 4 куба, и 4 кролика, во втором ряду 4 чайника и 4 куба, и т.д. Текстуры же будут чередоваться одна за другой по моделям. Вот такая демка думаю получше протестирует несколько аспектов - скорость загрузки, то как переключение и дипы держутся, много текстур. Далее для усложнения сцены для второго теста, можно добавить 3 источника света, без теней, но с нормал картами и бампом. Третий тест добавить 16 источников света и тени. Это уже будет стресс тестом. Также вращением всех объектов (чтобы не статика была, и тени каждый кадр обновлялись). Думаю вот такие 3 демки, будут отличным тестом для многих аспектов движка, и более реалистичны для реальных условий применения движка. Понимаю что ещё очень много нужно сделать до того как такие демки можно реализовать. |
Ответ: Пишем 3D движок - замену Xors3D
Цитата:
у тебя сколько ядерный проц? мою демку если запускаешь - вместе с основным окном открывается окно консоли - в нём строчка found cores - что в ней? Цитата:
сделай FBX со всем описанным |
Ответ: Пишем 3D движок - замену Xors3D
Цитата:
Лог консоли: Plugin initialized: Graphics Added task: CAMS Added task: CLCH Added task: CLCR Added task: CULL Added task: PRSS Added task: SBSH Added task: PRMT Added task: REND Component registered: visnode Component registered: vismesh --- HEAP STATE: OK Activating plugins...done. Found cores: 8 Direct3D9 handle: 007D07E0 Support for chosen AA levels: OK Support for chosen AA type: OK Support for Vertex Shaders 3.0: OK Support for Pixel Shaders 3.0: OK Max VS constants: 256 D3D9Device Handle: 047F9F80 |
Ответ: Пишем 3D движок - замену Xors3D
Вложений: 2
Цитата:
хотя ядер столько же. |
Ответ: Пишем 3D движок - замену Xors3D
Цитата:
P.S. Загрузка моделей уже есть. Из самостоятельно написанного с нуля - только OBJ пока. Можно сделать любой подобный OBJ формат - это не сложно. Самое главное, что требуется для дальнейшего развития - это информация по архитектуре движков. Информацию достаю по крупицам, реальных статей в интернете практически нет. Везде примеры с выводом треугольника и код в виде сплошного листинга, в котором в лучшем случае есть класс. Если у кого есть любые материалы - пожалуйста кидайте ими в меня в любом количестве... :) |
Ответ: Пишем 3D движок - замену Xors3D
Цитата:
очень хорошая книжка в инете валялись сканы (правда не всех страниц), если не найдёшь - скину какие у меня есть. |
Ответ: Пишем 3D движок - замену Xors3D
Вложений: 1
Цитата:
Вложение 20244 |
Ответ: Пишем 3D движок - замену Xors3D
Вы еще посоревнуйтесь в скорости математики, пусть все кубики крутятся :)
|
Ответ: Пишем 3D движок - замену Xors3D
Цитата:
Цитата:
|
Ответ: Пишем 3D движок - замену Xors3D
А вообще соревноваться - очень интересно! Лично меня - мотивирует :)
Может еще кто готов посоревноваться? :) |
Ответ: Пишем 3D движок - замену Xors3D
Чем ваши шейдеры отличаются?
|
Ответ: Пишем 3D движок - замену Xors3D
Цитата:
|
Ответ: Пишем 3D движок - замену Xors3D
Прикол короче.
Стоит упомянуть, что тестировал я на WinXP. На этом же ПК стоит вин7, решил проверить в ней: на вин7 обе демки примерно равны и выдают около 700 фпс (все кубы в кадре). У меня есть ещё одна демка со сложной графикой, более того, она сделана на юнити (но все шейдеры, рендер теней и прочее - своё), и прикол в том что она на семёрке идёт в 30 фпс, а на хп в 60 - ровно в 2 раза быстрее. Также можно наблюдать 20-50% ускорение на ХП в некоторых других играх: http://forums.steampowered.com/forum....php?t=1608036 http://www.terrariaonline.com/thread...se-bump.39668/ http://benchmark3d.com/bulletstorm-w...ws-7-benchmark Почему так происходит? Хз. |
Ответ: Пишем 3D движок - замену Xors3D
Mr_F_ , а в стерео режиме не тестировал разницу?
|
Ответ: Пишем 3D движок - замену Xors3D
у меня нет стерео девайсов.
|
Ответ: Пишем 3D движок - замену Xors3D
Цитата:
|
Ответ: Пишем 3D движок - замену Xors3D
ничего нет
|
Ответ: Пишем 3D движок - замену Xors3D
тестировать нужно под высокой нагрузкой, т.к. сравнения на высоких FPS нерепрезентативны.
Добейтесь сложности сцены чтобы фпс был порядка 20-100 и сравнивайте. |
Часовой пояс GMT +4, время: 11:57. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot