Это видео недоступно.
Сожалеем об этом.
Как сделать 3D Игру на Python с Нуля [ Часть #2 Оптимизация ]
HTML-код
- Опубликовано: 1 июн 2020
- Второй урок по созданию с нуля простой псевдо 3d игры на основе Ray casting принципов, используя Python и Pygame.
В этом уроке узнаем, как значительно ускорить движок игры и еще сделаем парочку интересный вещей.
Для ускорения игры, в данном уроке предлагаю использовать свою интерпретацию DDA алгоритма (алгоритм растеризации отрезка)
Код:
github.com/StanislavPetrovV/R...
#standalonecoder
С оптимизацией небольшая проблема, когда ты подходишь к стене в притык, то фпс понижается. Я конечно не супер прогер, но попробуй собрать кучу пискелей в один большой при приближении.
здесь достаточно определить минимальное расстояние до стены, ближе которого нельзя подходить, у нас пока не внедрен алгоритм, запрещающий проход через стены
@@StandaloneCoder ок, будем надеятся и идти в будущее 👍
как временное решение, замени в файле ray_casting.py сточку, где вычисляем proj_height на:
proj_height = min(PROJ_COEFF / depth, HEIGHT)
@@StandaloneCoder а у меня норм когда к стене подхожу
у меня наоборот фпс взлетает до 300
Спасибо тебе! Единственный, кто нормально и чётко объяснил, как делать рэйкаст! Ждём тутора по текстурам)
Ни хрена се четко, да там хуй знает что еще может бить, а он тебе за 10 минут объяснил ЧЕТКО рейкастинг.
@@user-lm9qr8hr1e А что тут сложного? Банальная геометрия 9 класса, лол
@@blockedchannel7032 да только я 9 класс закончил лет 13 назад, и не повторял ее столько же, остальные 2 класса я прогуливал
АГООООННЬ!!! Создавать игру очень интересно, но тут столько формул, что голова просто взрывается)))))
Ты молодец, но кто-то как обычно лайк зажал.
Вау, это потрясающе, спасибо тебе за то что ты делаешь! Я очень рад, что нашел твой канал
спасибо большое за хорошие обьяснения и демонстрации, делай так по чаще)
Спасибо за видео и за весь плей-лист!))))))
ООООООООООчень редко пишу комменты! но!!! это поразительно!!!! однозначно "палец вверх" и подписка!!!!!
270 - 290 FPS!!! Вы - гений в моих глазах.
Огонь! Вы молодец!
Круто! Ещё для 3D с Python есть библа Panda3D. Было бы круто если у тебя появился урок по этой библе.
я погнал на продолжение сюда))) Респект=) Мужыык)
Продолжай) Это топ!)
Ты как всегда крут!!!
Супер!!!! Лайк Тебе !!!! И подписка !!!
Видимо для тех кто не хочет учится, все не так просто как он показывает, но я не против, видео зачет👍
не зря подписался
Ваши видео прекрасны. Пожалуйста дайте мне совет с вершины ваших знаний.
Мне нужно в этот проект вписать несколько важных аспектов.
1) Полоску жизни для главного героя.
2) Получение урона он врагов ( Нигде нет об этом информации)
3) Счётчик убитых врагов.
КРУТЯК, спасибо огромное!!!
Если честно, я в седьмом классе. Создал свою игрушку по твоему тутору - одноклассники в ах*е! Спасибо большое!
крутое продвижение по игре, добавь новых спрайтов типо врагов или просто нпс, что бы можно было что-то поделать)
привет! конечно это все очень увлекательно и интересно)) но хотелось бы увидеть урок по созданию не буквенной карты а карту каторую можно сгенерировать...
Крутой канал
Я подписался
Респект👍
круто! продолжай
Ты чертов гений!)
видосы просто имба, очень многое взял у тебя, например перенял брать отдельный файл с настройками, останется только выучить джейсон и сохранять настройки через него(если правильно понял). Но мне правда хочетсч знать, как ты сделал такой подсвет синтаксиса в пэйчарме? как плагин звать, давно ищу но не могу найти.
Бомба!)
У сюка код стал меньше, да настолько быстрее, кажется я не зря подписался:)
ща ещё код настолько быстрый что не догонишь
Вставки с видео и картинками зашли)
6:48 топ 1 жестких пранков
Обалдеть ты умный ! Видео просто топ! Я хоть и попадал в топ20 математиков на всеросе но я считаю что ты гений разработки игр и прикладной математики !!!! Хотим еще видео! Твои рассказы о играх - супер
Меня позабавил тот факт, что после оптимизации фпс начал падать не далеко от стен, а в близи от них. А еще понял, как один неверный символ (> вместо
у меня на днях случился казус, когда я мис комком поставил запятую и складывал float с tuple и потом сутки не понимал почему программа не запускается ибо складывал я переменные совершенно в отличном модуле от того в котором поставил запятую, а дебаг показывал именно на тот в котором складывал)))
Отлично
awesome!!
ОГОНЬ!!!
А, так ты во второй части карту сделал)))
Доброго времени суток. У меня из-за меньшего разрешения экрана пришлось установить значение высоты на 640 (вместо 800) и поэтому мини-карта отображается не полностью (не видно нижней части). Не подскажете, как это можно исправить?
Все круто. Плиз сделай еще видос про 3d на python. 10 раз уже смотрел тот видос про 3д и ничего не понял.
x = (FOV / z) * x
y = (FOV / z) * y
вот формулы как найти на экране точку из 2D пространства. Думаю этого для создания 3D хватит.
Чувак проблема - у меня pycharm считает что init и quit имеют ошибки. Что делать?
Я кстати не могу ходить, вроде все правильно , а моя проекция стоит на месте
Четко
А если высоту поменял из за разрешения экрана какие настройки еще надо поменять чтобы корректно отобразилась карта?
HEIGHT = 600
Давай продолжение с текстурами!!!
Гений
Здравствуйте, беретесь ли Вы за какие либо проекты на пайтоне?
Очень здорово,только после переписывания метода ray_casting сначала не запускалось,т.к. depth не принимал равным нулю, потом взяв условие depth != 0 все запустилось,но fps стал 580
привет, такая проблема: когда не водишь мышкой по экрану фпс больше 30 не бывает, а если водишь, то персонаж летает на огромной скорости, помоги пожалуйста((
Я не думал,что на пайтоне можно делать 3Д игры.На какой видос не зайду,везде говорят,что пайтон не подходит для таких проектов.Спасибо,что показал то,что пайтон умеет ещё больше,чем я ожидал)
Для прототипа вполне себе можно, а вот для реализаци я бы взял бы что-то другое. Хоят в целом если всех все устраивает (python - инструмент) то зачем что-то менять?
@@VadimSuharnikov а создавать масштабные 3Д проекты на пайтоне очень сложно или невозможно?:)
@@captaingames12 Что в твоем понимание масштабные :)
@@captaingames12 Тут палка о двух канцах. Ты можешь взять производительный язык и погрузиться в чудесный мир достаточно низкоуровнего программировани, не факт что что-то дельное получишь. А можешь взять Python/JS какие-нибудь и не факт что слокнешься с проблемами проивзодительности сразу, но у тебя будет хоть какой-то готовый рабочий результат.
@@VadimSuharnikov допустим что-то на подобии майнкрафта)
кто поставит дизлайк - у того произойдет отвал жопы) игра похожа на слиток золота в форме говна. Каждый пиксель и строчка кода покрыта мудростью. Автору спасибо. Необходимо еще больше этого невообразимого контента)
у меня получается после оптимизации то что поменялось движение(в смысле когда нажимаю w то он идет назад и т.д.)
Похоже на The Elder Scrolls 1 Arena
ПРосто топ
I will write this in English because my writing skills in Russian are not very good.
This videos series is amazing! I have been looking for some relatively easy way of making a small game to play with my kids!
I was wondering if you can make a multiplayer game with ray tracing...
👍👍👍👍👍👍👍👍👍👍👍
Помоги пж Traceback (most recent call last):
File "D:/Programming/Python/3d game/main.py", line 26, in
drawing.mini_map(player)
File "D:\Programming\Python\3d game\drawing.py", line 25, in mini_map
self.sc_map.fill(BLACK)
AttributeError: 'Drawing' object has no attribute 'sc_map'
Process finished with exit code 1
Люди либо автор. Помогите пожалуйста разобраться у меня версия python 3.4.0 подойдёт или нет а то у меня не скачюется
damn so good
хорошо, то что ты сделал оптимизацию, а то я до 4ггц разогнался
Го продолжение, создание уровней
5:42 Как он это сделал?! Магия не иначе, или после выделения сочетание клавиш Ctrl + /
Очень круто.
Но вот что произошло: видимо, я где-то совершил ошибку в реализации алгоритма нахождения стен, поэтому получился интересный результат: github.com/FasePlay/RayCastingPythonBug
Вышло красиво, но, всё-таки, придётся искать ошибку
AttributeError: 'Drawing' object has no attribute 'world' что делать?
Игру можно оптимизировать если рисовать все эти линии не в классе а за классом для этого нужен какой-то плагин который я не помню как называется
🗽
Спасибо! Я пишу игру на C# и не совсем понимаю как работает новый алгоритм ray casting(не понимаю что означает TILE). Если кто-то объяснит, буду благодарен.
TILE - сторона блока в 2Д проекции
Не такой мощный комп но fps бьет от 350 - 371 это ошибка?
У меня у одного проблема, что нужно постоянно шевелить мышью? Если этого не делать, FPS падает до 25, игра лагает, персонаж двигается рывками. Но если же постоянно юлозить мышью по игровому экрану, всё как на видео 100-200 FPS, помогите пожалуйста в чём дело?(((
Разобрался, проблема была в неправильном отступе основного цикла... я идиот(
всё супер но у меня игрок проходит сквозь стены это норм? а ещё изза того что у меня огромный фпс то игрок разгоняется до скорости света
У меня проблема в том то-что я работаю по приложению Atom, для python. А в этой программе я просто не могу запустить игру
Посоветуйте литературу в этом направлении питона, спасибо большое заранее. Лайк комментарий, если тоже интересно
3:45 что это за программа подскажите пожалуйста!
Нашел странный баг. При количестве лучей выше 400 у программы появляется графический пробел в рейкастинге. С чем это связано? Хочу 1000 лучей :(
Вот говорят некоторые дураки что программисту необязательно знать математику. Но мы-то знаем что это не так! Особенно после первой части.
Это ты дурак. Зачем, к примеру, frontend developer знать математику и геометрию?
@@user-ze7wo4et9v Для того чтобы считать свои финансы)
@@name1584 даже в вебе?))
@@neaf1sss, двигать кнопочки - не программирование. А вот в бэкенде, где уже реально программирование, без математики не обойтись)
@@user-ze7wo4et9v, ты и впрямь считаешь, что двигать кнопочки и подбирать цвет фона - программирование?)
Хотя, я бы посмотрел как ты это делаешь без базовых знаний геометрии 😂
Что за горячие клавиши используются здесь скажите пж 5:41?
10 месяцев прошло...
Но не поздно чем никогда, сочетание клавиш Ctrl + / после выделения строк
Можете напомнить что значит текущий угол
Помогите пж, кто может!!! У меня почему-то стены вырисовываются с небольшим пропуском от правого края экрана(я делаю полноэкрангую игру). Кто знает как исправит напишите пжжж!!!
Сделал фитчу, которая подстраивает колличество лучей под производительность. Если движок рисует кадр за 1 \ FPS, то num_rays добавляю - и картинка становится четче. Если не успевает - отнимает num_rays, и картинка становится калькуляторнее.
Вообще мог извернуться и считать множители на управление, ну что-бы за кадр успевал проходить, поворачивать быстрее, если не успевает, но почему-то решил ухудшать графику.
Мне нравится такая идея. Это довольно оригинальный подход!
что делать если стена стала наоборот вогнутой
Я заметил, если увеличить ширину экрана игры, то стена будет отображаться не до конца экрана, не поможешь решить эту проблему пожалуйста?)
выбирай ширину кратную количеству лучам. Если лучей 300, то бери ширину 1500,1800 и т.д.
@@StandaloneCoder Спасибо большое!!
Что за трек играл ?
Долго соображал почему в цикле ray вычисляется синус и косинус текущего угла, в твоем варианте выглядит вот так:
def ray_casting(sc, player_pos, player_angle):
cur_angle = player_angle - HALF_FOV
xo, yo = player_pos
for ray in range(NUM_RAYS):
sin_a = math.sin(cur_angle)
cos_a = math.cos(cur_angle)
for depth in range(MAX_DEPTH):
x = xo + depth * cos_a
y = yo + depth * sin_a
pygame.draw.line(sc, DARKGRAY, player_pos, (x, y), 1)
if (x // TILE * TILE, y // TILE * TILE) in world_map:
break
cur_angle += DELTA_ANGLE
Перенес блок вычисления синуса и косинуса в цикл depth и ничего не изменилось, но код стал понятнее:
def ray_casting(sc, player_pos, player_angle):
cur_angle = player_angle - HALF_FOV
xo, yo = player_pos
for ray in range(NUM_RAYS):
for depth in range(MAX_DEPTH):
sin_a = math.sin(cur_angle)
cos_a = math.cos(cur_angle)
x = xo + depth * cos_a
y = yo + depth * sin_a
pygame.draw.line(sc, DARKGRAY, player_pos, (x, y), 1)
if (x // TILE * TILE, y // TILE * TILE) in world_map:
break
cur_angle += DELTA_ANGLE
так ухудшили производительность только, вместо одно раза вычисления sin и cos - вы увеличили ненужные расчеты одного и того же значения (до в MAX_DEPTH раз). Сделайте карту с большим пространством и тогда увидите снижение производительности в вашем варианте
@@StandaloneCoder согласен со своей ошибкой.
Слушай, как исправить ходьбу сквозь стены?
в следующих уроках там добавим хитбокс для игрока
У меня справа кусок экрана не видит ничего, помогите pliz ;(
а можно вопрос: как исправить ситуацию если границы некоторых стен пропадают?
в следующем уроке посмотри может исправят или в исходный код второй части
Добавь прыжок и ускорение вместо выхода из игры на esc сделай меню , и добавь главное меню и меню выбора уровней в №3 части, и добавь в игру оружие и мультиплэйер в №4 части
фега чо захотел)
если заплатишь может сделает
До того как ты показал как увеличит производительность у меня фпс был однозначным а после стало трехзначным
Сколько тебе лет?
Озвучка - "сдавайтесь человеки"
у меня после оптимизации случился баг. я почему-то могу идти сквозь стены.
FPS 71-75 с алгоритмом попиксельного поиска пересечений. FPS 243-303 с алгоритмом Брезенхема.
drawing.background()
^^^^^^^
NameError: name 'drawing' is not defined. Did you mean: 'Drawing'?
и как это решить оно не видит drawing и заменяет на Drawing и всё равно ошибка...
Короче ты забыл написать drawing= Drawing(sc)
Какой ты используеш Python 3.8.5 или 3.7.3
3.7.3
Самое странное что все жалуются на просадку фпс у стены,а у меня наоборот программа просто рвется от количества фпс рядом с стенами
Я не особо знаю питон, но нельзя использовать видеокарту для прорисовки?
Нет
@@cosmonavt2376 я это понял уже полгода назад)
Я поставил num_rays на 300 и ничего не поменялось
Уже нашел ответ в Вашем следующем видео,извините
depth_h = (y - yo) / sin_a
вот тут ошибка деления на ноль, иногда
в таком случае добавьте после вычисления sin_a и cos_a эти строчки:
sin_a = sin_a if sin_a else 0.000001
cos_a = cos_a if cos_a else 0.000001
А если у меня угол будет 0.001 или 89.9999 то при нахождении гипотенузы ее длина уйдет почти в бесконечность , и тогда я выйду за рамки массива
3:15 Нифига низкий!!!! У меня 111 fps было!
Вапролджэ))))🤪