Kujivunia

Пользователь

Регистрация: 10.01.2015

Сообщения: 5528

Рейтинг: 1004

Kujivunia

Регистрация: 10.01.2015

Сообщения: 5528

Рейтинг: 1004

XlsBgLDRdQQ.jpg

Хочу замутить олдскульную гаму на нём, правда это пока кривой прототип, и когда я гляжу на картинку из tes: arena -- я просто выпадаю в осадок от того, сколько всего мне нужно сделать, чтобы хотя бы примерно соответствовать играбельному уровню.

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

LQVO8VzD528.jpg 

 

[UPD 03-05-2020]

Сейчас игра выглядит так. Подробности в этом комментарии

-LcpguoJSJs.jpg

[UPD 21-05-2020]

Натянул текстуру на стены

kGPbyzORivM.jpg

[UPD 26-05-2020]

Первый тест сущностей

unknown.png

[UPD 30-06-2020]

Сущности вроде стали работают.

Первый тест текстурного пола и неба.

4HVAiuvGCOA.jpg

[UPD 02-07-2020]

 

 

[UPD 20-07-2020]

Текстуры на полу, разные текстуры стен. 

raptor86

Пользователь

Регистрация: 14.01.2014

Сообщения: 2647

Рейтинг: 1020

raptor86

Регистрация: 14.01.2014

Сообщения: 2647

Рейтинг: 1020

Ляпота

Reach Beach

Пользователь

Регистрация: 07.10.2015

Сообщения: 20026

Рейтинг: 39552

Reach Beach

Регистрация: 07.10.2015

Сообщения: 20026

Рейтинг: 39552

Kujivunia сказал(а):

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

Нажмите, чтобы раскрыть...

Таблицу лидеров введи и можешь в открытый доступ запускать

DaniCh

Пользователь

Регистрация: 16.09.2011

Сообщения: 8790

Рейтинг: 2535

DaniCh

Регистрация: 16.09.2011

Сообщения: 8790

Рейтинг: 2535

Крутотень! Автоматически уважаю людей которые делают свои движки. Не ну правда, почти все игры на юнити и уе4 ужасно похожи друг на друга, где те времена когда каждая игра имела свою уникальность и не повторимость как раз из-за своих уникальных движков. Да да, и тогда было двигло от квейка и хл, но сейчас вообще одноликие игры, да и ещё эта мода абсолютно тупая на без текстурные дал дизайны и всякие лоу поли, скипаю такое все чаще и чаще...

 

ТС это С# ??

Kujivunia

Пользователь

Регистрация: 10.01.2015

Сообщения: 5528

Рейтинг: 1004

Kujivunia

Регистрация: 10.01.2015

Сообщения: 5528

Рейтинг: 1004

Reach Beach сказал(а):

Таблицу лидеров введи и можешь в открытый доступ запускать

Нажмите, чтобы раскрыть...

Сетевой режим я добавлю позже. Скорее всего, это будет игра про командный поиск выхода из огромной тёмной пещеры с монстрами. В 2.5мерном пространстве. С графикой хуже, чем в 1994 году. 

Vladimir2015

Пользователь

Регистрация: 19.09.2016

Сообщения: 2330

Рейтинг: 213

Vladimir2015

Регистрация: 19.09.2016

Сообщения: 2330

Рейтинг: 213

еще немножко и возьмут в Volvo пилить движок для ксго 3

 

S30N1K

Пользователь

Регистрация: 24.09.2014

Сообщения: 7199

Рейтинг: 4911

Нарушения: 35

S30N1K

Регистрация: 24.09.2014

Сообщения: 7199

Рейтинг: 4911

Нарушения: 35

Или я тупой, или 2.5d все же = изометрия? monkaH.png

Kujivunia

Пользователь

Регистрация: 10.01.2015

Сообщения: 5528

Рейтинг: 1004

Kujivunia

Регистрация: 10.01.2015

Сообщения: 5528

Рейтинг: 1004

S30N1K сказал(а):

Или я тупой, или 2.5d все же = изометрия? monkaH.png

Нажмите, чтобы раскрыть...

изометрия - это отсутствие перспективы. Но да, если игра с видом сверху под углом, то изометрия - способ из 2д сделать 2.5д. 

DaniCh

Пользователь

Регистрация: 16.09.2011

Сообщения: 8790

Рейтинг: 2535

DaniCh

Регистрация: 16.09.2011

Сообщения: 8790

Рейтинг: 2535

Kujivunia сказал(а):

Это PascalABC.NET. Но вообще, движок в виде .dll, и он спокойно может работать на С# даже без конвертации данных, типа, .NET среда же и там и там. 

Думаю, нужно много чего переделывать. Сейчас у меня карта это просто массив byte. Как в срезе карты из minecraft. Хочу сделать карту массивом объектов, которые задаются точками вершин, чтобы всякие круглые штучки делать, и чтобы raycasting был точнее. Ещё я ваще не понимаю, как добиться всего, что есть в арене: а там есть объекты разной высоты, перемещение по вертикали (КАК???) и куча красоты, типа, вот к чему я стремлюсь, но не знаю, как это сделать: 

01-reflect.png

 

 

изометрия - это отсутствие перспективы. Но да, если игра с видом сверху под углом, то изометрия - способ из 2д сделать 2.5д. 

Нажмите, чтобы раскрыть...

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

Kujivunia

Пользователь

Регистрация: 10.01.2015

Сообщения: 5528

Рейтинг: 1004

Kujivunia

Регистрация: 10.01.2015

Сообщения: 5528

Рейтинг: 1004

DaniCh сказал(а):

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

Нажмите, чтобы раскрыть...

Дело в том, что паскалем я пишу с школы, и он имеет в себе всю мощь шарпа, а шарпом я писал пару раз в жизни. А ещё IDE паскаля работает мгновенно, а VS весит дофига и лагает даже на мощном компе и имеет миллиард кнопок, в которых лень разбираться. Но в перспективе я бы вообще на котлине хотел всё писать. + у паскаля лёгкие учебные графические библиотеки, чтобы можно было легко и быстро посмотреть результат, а в других языках нужно будет мучиться с подключением графических библиотек....

 

насчёт сведения олдскул: это супер современный паскаль, там от старого паскаля почти ничего нет) Поэтому в этом плане олдскулы не сведёт 

DaniCh

Пользователь

Регистрация: 16.09.2011

Сообщения: 8790

Рейтинг: 2535

DaniCh

Регистрация: 16.09.2011

Сообщения: 8790

Рейтинг: 2535

Kujivunia сказал(а):

Дело в том, что паскалем я пишу с школы, и он имеет в себе всю мощь шарпа, а шарпом я писал пару раз в жизни. А ещё IDE паскаля работает мгновенно, а VS весит дофига и лагает даже на мощном компе и имеет миллиард кнопок, в которых лень разбираться. Но в перспективе я бы вообще на котлине хотел всё писать. + у паскаля лёгкие учебные графические библиотеки, чтобы можно было легко и быстро посмотреть результат, а в других языках нужно будет мучиться с подключением графических библиотек....

 

насчёт сведения олдскул: это супер современный паскаль, там от старого паскаля почти ничего нет) Поэтому в этом плане олдскулы не сведёт 

Нажмите, чтобы раскрыть...

Эхх...Вот где ты был в теме где какой-то чело спросил зачем учат Паскаль в школе, мол это атавизм и не питон...Короче я там пояснял и отхватил дизлукасов ))

 

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

Admiral Chihuahua

Пользователь

Регистрация: 14.04.2016

Сообщения: 10657

Рейтинг: 4644

Admiral Chihuahua

Регистрация: 14.04.2016

Сообщения: 10657

Рейтинг: 4644

img

Главное запустить донатшоп и боевой пропуск. Бета готова

Galaxy_Enot

Пользователь

Регистрация: 07.09.2016

Сообщения: 3459

Рейтинг: 2238

Galaxy_Enot

Регистрация: 07.09.2016

Сообщения: 3459

Рейтинг: 2238

Reach Beach сказал(а):

Таблицу лидеров введи и можешь в открытый доступ запускать

Нажмите, чтобы раскрыть...

и ачивы - сразу будет топ 5 продаж в стиме (нынче всем ачивы и лидерборд нужен)

Kujivunia

Пользователь

Регистрация: 10.01.2015

Сообщения: 5528

Рейтинг: 1004

Kujivunia

Регистрация: 10.01.2015

Сообщения: 5528

Рейтинг: 1004

Galaxy_Enot сказал(а):

и ачивы - сразу будет топ 5 продаж в стиме (нынче всем ачивы и лидерборд нужен)

Нажмите, чтобы раскрыть...

Ну в стим закинуть - деньги нужно платить, много... 

KastomKnuckles

Пользователь

Регистрация: 05.07.2014

Сообщения: 10618

Рейтинг: 3931

KastomKnuckles

Регистрация: 05.07.2014

Сообщения: 10618

Рейтинг: 3931

DaniCh сказал(а):

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

Нажмите, чтобы раскрыть...

Вот только почему-то челам плевать на всякие однобокости движков, ибо они и так хавают всяких Отсасинов (ещё и добавки просят)

Kujivunia

Пользователь

Регистрация: 10.01.2015

Сообщения: 5528

Рейтинг: 1004

Kujivunia

Регистрация: 10.01.2015

Сообщения: 5528

Рейтинг: 1004

DaniCh сказал(а):

поднимай тему по мере наполнения инфой.

Нажмите, чтобы раскрыть...

Что ж. Я не знаю, почему эта штука работала... 

  • У меня полностью не работает дальность отрисовки, что очень странно -- ведь должно быть наоборот: это без неё ничего не должно работать. Сижу в недоумении.
  • Функция, возвращающая направление луча, на самом деле возвращала нечто невразумительное. Починил, и всё заработало прекрасно. Но как оно работало до этого, если учесть, что именно от неё всё и зависит? Она вызывалась сотни и тысячи раз за кадр для самых разных углов
  • Эффект рыбьего глаза. Совершенно лютый. Как починить - не знаю. Если что, это прямая стена в квадратной комнате. FoV=120, но с меньшим - не лучше. 

    5BpnlTsmw3w.jpg
  • Если приглядеться, то можно заметить, что стены состоят будто бы из множества разной ширины пластинок. Вообще, так не должно быть. Но я нашёл причину. Она была довольно очевидной. К сожалению, с текущим форматом карты и багом из первого пункта игра с большей чёткостью выдаёт примерно 1 кадр в 5 секунд на моём, весьма не слабом ПК. qoBOYeVXTzM.jpg
  • Формат карты и способ RayCasting'а придётся переделывать, если я хочу красивую последовательницу девяностых, а не психоделичное пластинчатое нечто.

Berglol

Пользователь

Регистрация: 20.09.2013

Сообщения: 934

Рейтинг: 1736

Berglol

Регистрация: 20.09.2013

Сообщения: 934

Рейтинг: 1736

Касаемо графической составляющей:

0.2 фпс? Каким образом происходит рендеринг? Какого размера карта? И где вообще код, без него не разобраться.

Если рендерить то, о чем ты расписал, при помощи OpenGL - можно вообще запушить всё в видеопамять и рисовать всю карту одним (!) вызовом OpenGL-функции (даже с текстурами. если понадобится), да еще и расположенные далеко от камеры объекты и объекты, перекрытые другими - отсеятся на опред. этапе графического пайплайна, плюс доступ к программированию шейдеров откроет широкие возможности работы с графическими эффектами, освещением и тенями.

ПС это всё на деле гораздо проще, чем кажется

Вот, например, я как-то баловался

Спойлер

 

На gtx560 было ~3к фпс (если убрать рендер вообще - фпс оставалось +-столько же), т.е. затратами времени на отрисовку вообще можно пренебречь

 

Касаемо игровой логики:

Один психопат(в хорошем смысле) сделал это в консольном приложении, можно что-то подсмотреть

Kujivunia

Пользователь

Регистрация: 10.01.2015

Сообщения: 5528

Рейтинг: 1004

Kujivunia

Регистрация: 10.01.2015

Сообщения: 5528

Рейтинг: 1004

Berglol сказал(а):

Касаемо графической составляющей:

0.2 фпс? Каким образом происходит рендеринг? Какого размера карта? И где вообще код, без него не разобраться.

Если рендерить то, о чем ты расписал, при помощи OpenGL - можно вообще запушить всё в видеопамять и рисовать всю карту одним (!) вызовом OpenGL-функции (даже с текстурами. если понадобится), да еще и расположенные далеко от камеры объекты и объекты, перекрытые другими - отсеятся на опред. этапе графического пайплайна, плюс доступ к программированию шейдеров откроет широкие возможности работы с графическими эффектами, освещением и тенями.

ПС это всё на деле гораздо проще, чем кажется

Вот, например, я как-то баловался

 

На gtx560 было ~3к фпс (если убрать рендер вообще - фпс оставалось +-столько же), т.е. затратами времени на отрисовку вообще можно пренебречь

 

Касаемо игровой логики:

Один психопат(в хорошем смысле) сделал это в консольном приложении, можно что-то подсмотреть

Нажмите, чтобы раскрыть...

Он не один. У меня, кстати, тоже всё началось с консоли.

DHrquJqfqfU.jpg2SLh-65jLrA.jpg

И, вообще говоря, функция пре-рендера просто возвращает высоту всех столбиков, якие треба отрисовать. А уж как будет идти отрисовка - через OpenGL ли, через консоль ли - не важно. 

Именно поэтому текущий способ отрисовки - не финальный, а тестовый. 

Говоря о ФПС, я использую RayCasting. Из камеры итерационно испускаю луч, на каждой итерации прибавляя к нему небольшое число, до тех пор, пока луч не упрётся в конец обзора или не-нулевой блок карты. Почти как RayTracing, но RayCasting. Именно он сжирает львиную долю всех ресурсов. Если выключить рисование вообще - то можно получить... 8.6 квс, тогда как с отрисовкой приложение выдаёт 5.6 квс. Именно RayCasting сжирает львиную долю ресурсов из-за кривой реализации.

К слову, чел с отрисовкой в консоли, судя по коду, использует тот же способ: 

Цитата:

   while (!bHitWall && fDistanceToWall < fDepth)

Нажмите, чтобы раскрыть...

Это его цикл испускания луча. 

Нетрудно посчитать, что количество расчётов зависит ровно от трёх параметров: ширина отрисовки в столбиках, шаг луча, дистанция обзора. Причём максимальная потребляемость это width*(distance/step). В моём случае это 1770*(64/0.1)<=1132800 проверок на столкновение. Если бы дистанция обзора работала, то проверок почти всегда было бы гораздо меньше, чем посчитано выше. Но оно не работает.  

Именно поэтому я хочу перейти на карту, состоящую из массива объектов, якие состоят из массива точек-вершин. 

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

А формула нахождения точки пересечения двух прямых, в общем то, известна, пусть я её пока не очень понимаю =(

 

А, да, мой говнокод: https://gitlab.com/Roman.Svetlov/kujivengine/-/tree/master

Осторожно, опасно для слабых духом эстетов. 

Kujivunia

Пользователь

Регистрация: 10.01.2015

Сообщения: 5528

Рейтинг: 1004

Kujivunia

Регистрация: 10.01.2015

Сообщения: 5528

Рейтинг: 1004

Рыбий глаз был побеждён путём деления высоты стенки на косинус угла между лучём до стенки и центром взгляда.  Было - стало:

unknown.pngunknown.png

Правда, вблизи стенку, кхм-кхм, косолюбит (от слова косинус). 

unknown.png

И причина, по которой это случается. 1 и 2 - це дистанции, на которых проходит очередная проверка столкновения луча

unknown.png

Lambda-chan

Пользователь

Регистрация: 26.07.2012

Сообщения: 4615

Рейтинг: 8642

Lambda-chan

Регистрация: 26.07.2012

Сообщения: 4615

Рейтинг: 8642

Какие учебные материалы использовал по графике?

Kujivunia

Пользователь

Регистрация: 10.01.2015

Сообщения: 5528

Рейтинг: 1004

Kujivunia

Регистрация: 10.01.2015

Сообщения: 5528

Рейтинг: 1004

Mooneater сказал(а):

Какие учебные материалы использовал по графике?

Нажмите, чтобы раскрыть...

Прям учебных материалов - не использовал, но читал пару рассказов про RayCasting с отрисовкой в консоли. 

А именно: http://ilinblog.ru/article.php?id_article=49

 

BUTTERFLY_PUDGE_NAGIBATOR_666

Пользователь

Регистрация: 21.02.2020

Сообщения: 949

Рейтинг: 435

Нарушения: 155

BUTTERFLY_PUDGE_NAGIBATOR_666

Регистрация: 21.02.2020

Сообщения: 949

Рейтинг: 435

Нарушения: 155

Да реальное 3д написать проще чем эту залупу

Kujivunia

Пользователь

Регистрация: 10.01.2015

Сообщения: 5528

Рейтинг: 1004

Kujivunia

Регистрация: 10.01.2015

Сообщения: 5528

Рейтинг: 1004

>Полтора дня ищу, почему не работает дальность отрисовки

>Перелопатил весь "движок"

>в клиенте игры нахожу строчку lob := pr.PreRender(Map, cam, width, 64);

>Исправляю на lob := pr.PreRender(Map, cam, width, distance);

>Оно работает, но ФПС почему-то не увеличился... 

BUTTERFLY_PUDGE_NAGIBATOR_666

Пользователь

Регистрация: 21.02.2020

Сообщения: 949

Рейтинг: 435

Нарушения: 155

BUTTERFLY_PUDGE_NAGIBATOR_666

Регистрация: 21.02.2020

Сообщения: 949

Рейтинг: 435

Нарушения: 155

Kujivunia сказал(а):

Именно поэтому первые игры были "этой залупой", а не "простыми 3д"? 

 

>Полтора дня ищу, почему не работает дальность отрисовки

>Перелопатил весь "движок"

>в клиенте игры нахожу строчку lob := pr.PreRender(Map, cam, width, 64);

>Исправляю на lob := pr.PreRender(Map, cam, width, distance);

>Оно работает, но ФПС почему-то не увеличился... 

Нажмите, чтобы раскрыть...

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

Kujivunia

Пользователь

Регистрация: 10.01.2015

Сообщения: 5528

Рейтинг: 1004

Kujivunia

Регистрация: 10.01.2015

Сообщения: 5528

Рейтинг: 1004

BUTTERFLY_PUDGE_NAGIBATOR_666 сказал(а):

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

Нажмите, чтобы раскрыть...

  1. По distance/step. Конкретно в моём случае это 64/0,1=640. 

  2. Не на пиксель, а на столбец. Это же псевдо-трёхмерность. 
  3. GPU использовать должен не алгоритм raycasting, а отрисовщик. 
  4. Есть лёгкий способ поднять производительность в сотни раз, но я пока люблюсь с генерацией пещер.