Программирование игр

Игровой движок, 3D графика, сеть, физика, логика, уеб

НовостиСтатьиПодсказкиТерминыFAQФорумИнфо

Статьи

8 ноя 2022

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

Читать | Комментарии [39]

7 ноя 2022

Coroutine (сопрограмма, корутина) — функция, выполнение которой можно явно прерываться методами языка программирования. В отличие от прерывания выполнения потока (thread), который реализован в ОС и происходит неявно и в любой момент. Здесь я разбираю в чем преимущество корутин и какие корутины добавлены в C++20.

Читать | Комментарии [58]

Recursive Tile-based architecture
Имитация раскачивания дерева под воздействием ветра
Освещение с использованием фотометрического профиля
Гидродинамика Шрёдингера на пальцах

Термины

2 дек 2023

Godot Game Engine

Godot (читается как «Годо», от фр. Godot) — кроссплатформенный игровой движок и редактор для 2D и 3D игр, с открытым исходным кодом под лицензией MIT. Изначально был разработан в 2007 году Хуаном Линиецки и Ариэлем Манзур. Core движка разрабатывается на C++.

Читать | Комментарии [15]

5 июня 2018

Universal Scene Description (USD)

Universal Scene Description (USD) — файловый формат описания трехмерной сцены, разработанный компанией Pixar.

Читать

Verge3D
Вуду-программирование
Blend4Web

Подсказки

10 мая 2020

MAX Script: Разделение 3D модели на элементы по группам нормаль векторов.

Здесь представлен скрипт 3D Studio MAX, при помощи которого можно разделить 3D модели на элементы по группам нормалей, также смотрите «MAX Script: Разделение 3D модели на элементы по группам сглаживания».

Читать

Delphi: Точный таймер (Win API)
^ Матрица LookAt
Инверсия матрицы 4x4

Новости

6 фев 2022

Вышла книга 3D Graphics Rendering Cookbook: A comprehensive guide to exploring rendering algorithms in modern OpenGL and Vulkan авторов Sergey Kosarevsky (_NetSurfer_) и Viktor Latypov (Vinil)

Ссылка | Комментарии [50]

8 апр 2020

Выложили мой доклад с exilecon. В нём я рассказываю о нескольких необычных техниках рендеринга, разработанных для Path of Exile. Доклад на английском языке. Есть русские субтитры.

Запустить видео по клику - Как делать игрыЗапустить видео по клику - Как делать игры

Ссылка | Комментарии [69]

4 мар 2019

Опубликована PDF-книга «Ray Tracing Gem. High-quality and real-time rendering with DXR and other APIs» на 600+ страниц, подготовленная NVIDIA и разными специалистами из области рейтрейсинга. Можно скачать отсюда:
https://link.springer.com/book/10.1007/978-1-4842-4427-2

Ссылка | Комментарии [7]

20 мар 2018

На проходящей в Сан-Франциско конференции разработчиков игр (GDC) компания Microsoft анонсировала поддержку в DirectX 12 технологии DirectX Raytracing (DXR). Новый программный интерфейс позволяет производить просчет рейтрейсинга при помощи поддержки этой технологии в железе.

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

SEED-screenshot | Microsoft анонсировала DirectX Raytracing (DXR)

Ссылка | Комментарии [504]

Форум

5 фев 2025

Пытался найти инфу, у них вроде нету регистрового или стекового вм, а что-то свое, кто шарит поясните пж

4 фев 2025

💬 Привет!
Меня зовут Артём, и это мой первый пост в блоге. Я решил начать это путешествие, чтобы делиться тем, что для меня важно: процессом роста, преодолением трудностей и поиском себя в новом окружении.
https://t.me/artem_way/12

Я всегда верил, что ошибки — это нормально. Более того, именно через них мы растем. Мне хочется показать, что не страшно пробовать что-то новое, падать и вставать снова. Этот блог — мой личный челендж. Я хочу не просто рассказывать о своей жизни и работе, но и мотивировать себя не бояться встречаться с трудностями.

💡 О чем здесь будет?
Мой блог — это смесь. Немного из мира программирования, немного из жизни. Я буду делиться полезными привычками, книгами, которые помогли мне, и говорить о том, что стоит за IT — вдохновение, мотивация и моменты сомнений, которые нас всех сопровождают.
Еще я хочу поддержать тех, кто, как и я, оказался в чужой стране. Мы часто чувствуем себя потерянными, но я верю, что дружелюбное сообщество способно вернуть уверенность и дать силы двигаться дальше.

🎮 Моя мечта:
Когда-нибудь мое имя появится в титрах ААА-игры. Это тот самый "побег за строчкой", который движет мной вперед. Я хочу делиться этим путем: от простых проектов до больших целей, которые кажутся невозможными.

🙌 Зачем мне это все?
Честно, я в новой стране без друзей и привычного окружения. Мне хочется общаться, вдохновляться и вдохновлять других. Я надеюсь, что этот блог станет местом, где мы сможем обсуждать интересные темы, дискутировать и поддерживать друг друга.

Буду рад вашим комментариям, идеям и просто вашему присутствию. Давайте вместе создавать что-то крутое!

2 фев 2025

Филворд или Венгерский кроссорд - это разновидность кроссворда,
где необходимо найти все слова на поле NxN.

1 | Microsoft анонсировала DirectX Raytracing (DXR)

2 | Microsoft анонсировала DirectX Raytracing (DXR)

Интересуют размеры: 3х3, 4х4, 5х5

Подскажите алгоритм

2 фев 2025

Все мы любим нейросети. Но большинство является пользователями нейросетей, а не их программистами.  Ещё меньше людей лезли "под капот" нейросетей и ковыряли их матрицы, чтобы понять "суть всех глубин" и фундамент :)

Собственно нейросеть типа GAN.  Состоит из генератора и дискриминатора.  В процессе обучения генератор пытается построить изображение, похожее на оригинал - из входного вектора.  А дискриминатор натаскивается на различение оригинального изображения от сгенерированного генератором. 

И тут мне непонятна одна вещь:  в качестве входных данных (вектора-матрицы) генератор использует рэндом.  Нафига???  Почему нельзя в качестве входного параметра для генератора использовать определённые данные входного вектора из обучающих наборов?  Ну тоесть - хочу использовать GAN как синтезатор.  Цель - построить такой декодер-синтезатор, который мог бы додумывать расширенную спектрограмму аудио-сигнала из входной "маленькой" спектрограммы.

Проще говоря, мне нужен "спектральный улучшайзер", обученный на моих данных.  На вход я подаю МЕЛ-спектрограмму из 20 полос.  А на выходе я хочу видеть МЕЛ-спектрограмму из 80 полос (которая звучит более естественнее, чем 20-полосная).  Обучающий набор:  входные 20- и выходные 80- полосные бины МЕЛ-спектрограмм, нормализованные [-1,1] или [0,1].

Собственно вопросы:

1) GAN тут точно подходит? Я ничего не перепутал?

2) Какие нейросети подойдут для этой задачи?

Составить обучающий набор - не проблема. Накачал кучу голосовых баз на русском языке.

LPCNet смотрел и даже собрал.  Работает очень медленно декодировщик.  У меня процессор не поддерживает AVX/AVX2.

Входные данные:
in | Microsoft анонсировала DirectX Raytracing (DXR)

Выходные данные:
out | Microsoft анонсировала DirectX Raytracing (DXR)

29 янв 2025

Пишу велосипедный 2d "движок".

Есть иерархия классов от интерфейса Draweble с виртуальным методом draw.
Draweble -> Object2d -> Object2d_ -> ...

Код:

+ Показать

Хотелось бы выиграть в оптимизации путем копирования объектов с одинаковыми данными в vbo и ebo, тем самым повторно не инициализировать их и
не пересылать данные на видеокарту.

Вопрос 1. Есть ли вообще в этом смысл для 2d объектов? Нужно ли добавить фабрики для условных правильных многоугольников которые будут штамповать объекты с уже готовыми vbo/vao/ebo?

Вопрос 2. Как лучше всего реализовать это копирование с точки зрения цппшного ООП? Добавить в Object2d_ copy()(или переопределить конструктор копирования) и поле is_copy и проверять его в деструкторе?  Это понятно, но надо переопределять copy() в каждом классе. Нет ли способа определить такое поведение в Object2d_?

Вопрос 3. В целом адекватны ли моя иерархия и код?

27 янв 2025

Всем привет!

Не буду представляться, т.к стеснительный))

Опишу задачу:

Стоит задача создать Telegram mini app, со следующим функционалом:

Стартовая страница
Через ТГ логин
1) Регистрация (с заполнением формы и передачи данных в mysql 5) на timeweb
2) Вход (по user id подтягиваем то, что отправили ранее в ДБ)


Далее попадаем на 2-ую страницу с виджетами, которые отображают:
1) Последнее видео на ютубе
2) Последнее видео на VKvideo
3) Последний пост в ТГ канале
заполнить информацией.

ниже расположено меню из 4х кнопок
1) магазин (различные продукты)
2) Развертка страниц с баннерами услуг (при клике на которую по api передаются в amocrm), можно реализовать через вебхук, где создается новая форма и к сущности будет добавляться указание на услугу+данные из лк авторизованного пользователя.
3) О компании
4) Мы в социальных сетях

Вообщем-то и всё.

Написал знаю мало, более подробно можно обсудить уже с иполнителями.
Насколько я знаю, для реализации это необходимо:
1) Работа с БД mysql5
2) Работа с библиоткеами Питона (ТГ бот)
3) Библиотеки Мини апп
и далеее

и надо адаптировать запуск всего этого не только в миньке, но и по ссылке с сайта)
Что бы это запускалось и через бразуер (в миньке как адаптация для мобилки)
Полная версия сайта будет наполнена немного большим для СЕО.

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

Написать мне в ТГ можно - @Michael_WhiteRabbit
Очень много сообщений, не всегда могу увидеть, лента турбулентная, если прям Вы именно то, кого я ищу - найдись!)

22 янв 2025

Приветствую всех!

В общем-то формат obj вроде довольно простой и уже много раз обсуждавшийся, но...

Есть два вопроса.

В моих случаях файл obj может быть двух типов.
Тип 1

# comment
mtllib <имя файла с материалами>.mtl
o <object_name>
v 0.074919 0.000000 -0.491512
...
vt 0.113550 0.000000 
...
vn 0.168605 0.000000 -0.475087
...
usemtl <материал 1>
f 2/1/1 4/2/1 3/3/1
..
usemtl <материал 2>
f 7/4/2 5/5/2 6/6/2
...
usemtl <материал N>
f 7/4/2 5/5/2 6/6/2
...

В этом случае формируем для каждой части со своим материалом свой vao
(с тремя vbo).  В цикле от 0 до N-1 выводим эти N частей, переключаясь:
glBindVertexArray(obj->vao[part]);

Тип 2

mtllib <имя файла с материалами>.mtl
o  <object_name_1>
g  <object_name_1>
v 0.08650934 0.37876752 -0.07471959
...
vt 0.25000000 1.00000000
...
vn -0.37411056 -0.92066462 0.11143584
s 1
usemtl <материал 1>
f 1/1/1 2/2/2 3/3/3
s 2
f 2/7/7 1/6/6 4/4/4
f 1/6/6 5/5/5 4/4/4
s 3
f 6/8/8 7/9/9 4/11/11
f 7/9/9 2/10/10 4/11/11
s 4
f 7/12/12 6/13/13 3/14/14
s 5
f 3/17/17 6/16/16 4/15/15
s 6
f 3/20/20 4/19/19 5/18/18
s 7
f 3/23/23 5/22/22 8/21/21
s 8
f 1/26/26 8/25/25 5/24/24
s 9
f 3/29/29 8/28/28 1/27/27
s 10
f 2/30/30 7/31/31 3/32/32
...
o  <object_name_2>
g  <object_name_2>
v 0.01237990 0.14437500 0.00435934
...
vt 1.00000000 0.38524590
...
vn 0.94225726 -0.04540766 0.33179723
...
s 1
usemtl <материал 2>
f 11/35/35 10/34/34 9/33/33
s 2
f 9/36/36 12/37/37 11/38/38
s 3
f 9/39/39 13/40/40 12/41/41
s 4
f 13/44/44 14/43/43 12/42/42
s 5
f 10/47/47 14/46/46 13/45/45
s 6
f 14/50/50 11/49/49 12/48/48
s 7
f 13/51/51 9/52/52 10/53/53
s 8
f 10/56/56 11/55/55 14/54/54
...
o  <object_name_N>
g  <object_name_N>
v 0.016464990 0.575700 0.63435934
...

Здесь надо формировать свой vao (с тремя vbo) для каждого o-объекта.
Верно?
Это первый вопрос.

Второй вопрос, что делать с этими s-ками?
Как использовать?
Описания которые находил оч. скудные, не понятно как из этих s-ок извлекать полезную информацию.

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

21 янв 2025

Как добавить след к 2D-проджектайлу? Я пробовал CascadeParticleSystem, но она работает только в том случае, если у объекта есть Mesh (в моем случае это только флипбук). Niagara это единственный способ сделать это?

20 янв 2025

Всем привет
Недавно столкнулся с небольшой проблемой с графикой в unreal engine 5
в интернете не слишком нашёл нужной инфы
сейчас мне легче написать здесь)
При выставленных параметрах качества medium или же epic, картинка игры выглядит не так удолетворяюще.
то есть, подвисаний или низкого фпс не наблюдается, но сама картина выглядит шакальной, особенно на дальнем расстоянии
и это лучше наблюдается если есть расстительность
но даже в пустом проекте, простых форм обектов, есть ощущение жестокий пиксельзации.
мой пк сам достаточно хороший, но мне так же нужно, чтобы игра выглядела нормально на другом железе
Вот скрины
https://gamedev.ru/files/images/?id=181303
https://gamedev.ru/files/images/?id=181304
https://gamedev.ru/files/images/?id=181305
Если кто то знает, какие параметры можно применить, буду рад
спасибо.

19 янв 2025

Помогите пожалуйста

Я скомпилировал pygame игру через pygbag, теперь хочу выложить игру на площадку yandex games и для этого нужно подключить yandex sdk, сюда по инструкции нужно добавить код подключаюший sdk в index.html, но всегда выходят ошибки в консоли