Войти

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

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

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

Статьи

Имитация раскачивания дерева под воздействием ветра
Имитация раскачивания дерева под воздействием ветра
Статья демонстрирует простой метод имитации воздействия ветра на дерево (куст), реализованный на вертексном шейдере.

Читать | Комментарии [19]
9 окт. 2020

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

Читать | Комментарии [25]
3 июня 2020

Гидродинамика Шрёдингера на пальцах
Предрасчёт рейкаста для эффективного рендеринга травы и меха
На пути к эффективному алгоритму Global Illumination, часть 1
Синхронизации в Vulkan

Термины

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

Читать
5 июня 2018

Verge3D
Verge3D
Verge3D - трёхмерный движок для веба, использующий технологию WebGL. Основан на Three.js, от которого отличается наличием реалистичных материалов, визуальным редактором логики Puzzles, средой создания приложений и более тесной интеграцией с программами моделирования Blender и 3ds Max. 14 декабря 2017 года в рамках проекта был запущен облачный сервис Verge3D Network для публикации и распространения 3D-приложений.

Читать | Комментарии [19]
8 дек. 2017

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

Подсказки

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

Читать
10 мая 2020

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

Новости

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

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

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

Ray Tracing Gem. Доступно бесплатно!
Опубликована 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]
4 мар. 2019

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

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

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

Подробнее…

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

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

P.S. Не забудьте включить полноэкранный режим просмотра.
Ссылка на доклад: http://www.goo.gl/6DoH7R

2048_tournament_postmortem | О дизайне игровых подсистем в 2048 Tournament

Ссылка
27 янв. 2015

Форум

C# как залогировать исключение без pdb файлов, а потом расшифровать с pdb?2 авг. 20216:47gamedeveloper01
.NET 5.0.
Суть проблемы такая:

В релизе файлы pdb я удаляю, исключения при этом по прежнему содержат "описание исключения" и  "call-stack с названиями функций", но теряется: "название файла сурса" и "номер строки" в нём.

Понятное дело для этой инфы нужен pdb файл, и он у меня есть, но в релиз я его пихать не собираюсь. Мне необходимо как то получить "нерасшифрованную инфу о точках колстека" в момент ловли исключения (например оффсеты в бинарнике или что то типа того), а потом расшифровать их каким то образом имея на руках pdb файл.

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

Сейчас без pdb файла у меня:

System.Exception: TEST
   at ConsoleApp2.TestClass.Funx1()
   at ConsoleApp2.Program.Main(String[] args)


Моё представление как примерно должна выглядеть строка исключения без pdb файла:

System.Exception: TEST
   at ConsoleApp2.TestClass.Funx1() in A1351QXQYWY1616790190FFAFADSAGA
   at ConsoleApp2.Program.Main(String[] args) in FFHJGHKHGGADGAJQWETGJ1241526

Как мне такого добиться? И как потом расшифровать эту строку, имея на руках pdb файл.

И получить в итоге на стороне разработчика:

System.Exception: TEST
   at ConsoleApp2.TestClass.Funx1() in D:\Projects\ConsoleApp2\ConsoleApp2\Program.cs:line 12
   at ConsoleApp2.Program.Main(String[] args) in D:\Projects\ConsoleApp2\ConsoleApp2\Program.cs:line 27

Не смог ничего найти по этому вопросу, есть знатоки?

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

PS2: пока что нашел решение использовать "dotnet-dump collect —type Mini", но для этого нужно дополнительно устанавливать dotnet-dump, что автоматически делает этот способ бесполезным для публичных прог, но в принципе приемлемым для утилит разработчиков, а мне по сути только это и надо. Поэтому делаю как бы сразу простой вывод - да нафиг это всё надо, просто буду кидать pdb файл в утилиту для разрабов, благо в C# pdb маленькие.

Правка: 8:06

Сегмент данных на ассемблере переписать(заскриптовать) на Си. Реально ли?1 авг. 20214:06Gradius
Есть сегмент данных, написанный на ассемблере.

Там располагаются байты с метками на данные, которые используются компилятором С/C++ как внешние переменные или массивы.

Изображение

Некоторые данные вычисляются при ассемблировании, тоесть не постоянные - плавают при линковке:

Изображение

С точки зрения С/C++ они сейчас объявлены как внешние - массивы и переменные:

extern "C" int _STACKLOW;
extern "C" char polypoints[];


Вопрос собственно такой:  как объявить эту байду на Си, чтобы сохранилось взаимное расположение данных и их тип (с точки зрения С++) ?

Автоматизация процеса(скрипты) возможна?

P.S. Данная байда - от дизассемблированной игры.

Правка: 4:07

VXGI30 июля 202118:53Target
Ребят, может кто-нибудь объяснить на русском языке, как вообще просчитывается освещение вокселями. Знаю что трассировка конусом там и тд. Но чето не совсем понимаю для чего именно конусом, у нас же сцена вокселизированная. Типа из центра каждого вокселя под определенным углом трассируется лучи света в определенном порядке и правиле? В общем, по этой теме я нубяра полный. Мб статейка или имплементация с объяснением имеется где-нибудь, хочется разобраться и попробовать самому написать.
point P в OSL29 июля 202121:55Target
Ребят, всем привет. Слушайте, такое дело, не могу понять из описания что это за точка по дефолту в OpenShadingLanguage, а потому и не могу её в ShaderLab заполучить, ибо не знаю что за зверь такой хранится в P. А описание точки такое: "точка P - Положение затененной точки. В шейдере смещения
изменение этой переменной смещает поверхность" Подумал, что это мировая позиция, попробовал взять мировую позицию пикселя, однако увы, работает некорректно. Подсобите, пожалуйста, нубяре ответом)
+ Показать
Нужна помощь с волнами от падения объектов29 июля 202118:03Alerr
Привет всем!
Случилась большая беда. Нужно сделать волны брызги и все, что требуется чтобы падение обьекта в воду выглядело реалистично.
В игре с видом от 1-го лица есть резервуары с водой и игрок может кидать в них обьекты. Сам может прыгнуть в резервуар. Обьекты могут падать в резервуары с разной силой. А еще игрок может водить обьектами по поверхности как хочет. Думаю понятно как должны выглядеть волны.

Вообще, в воду будет падать 2 типа объектов: кубы и шары. Но для упрощения шары не буду рассматривать. Пусть с водой взаимодействуют только кубы.
В чем проблема: у меня нет опыта работы с волнами/брызгами. Нет даже представления о том как оптимальнее и лучше сделать волны. Брызги можно сделать системой частиц. Можно еще меш с текстурой брызгов как-то сделать и с брызгами вроде еще можно справиться. Но а как быть с волнами? Как делают волны?

Здесть видео примера того как должны выглядеть волны. А здесь картинки с примерами волн:

+ Показать
+ Показать

Использовать готовый ассет не могу так как у меня своя вода (стилизованная). Да и не знаю, подойдет он или нет. Может из него можно использовать какой-то код, хотя не знаю.
Ребят, посоветуйте как лучше сделать волны.

Правка: 18:14

Альтернативные формулы затухания для поинт-лайтов29 июля 202112:16MikeNew
Сделал поинт-лайты по уроку OpenGL. Получается как-то так:

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


Для затухания используется формула

float attenuation = 1.0 / (light.constant + light.linear * distance + 
light.quadratic * (distance * distance));

Мне нужно чтобы поинт-лайт имел радиус освещения, к примеру, ровно 4 метра, чтобы за этим радиусом света не было вообще. Если пытаться это сделать по формуле выше, то свет получается слишком тусклым, нужные константы constant, linear, quadratic подобрать не получается, либо радиус света слишком велик, либо свет слишком тусклый.
Посоветуйте альтернативных формул затухания пожалуйста.

Правка: 12:17

Разработка игры как хобби, нужны советы29 июля 20218:07NWsFF
Добра всем,
Есть задумка в качестве хобби делать игру, опыт программирования есть на языках уровня Java, с# (с++ уже не смогу). В геймдеве опыт отсутствует.
Прошу вас дать краткие напутствия, так сказать базовые глобальные архитектурные решения в разработке игры , по ее краткому описанию.

Экономическая/градостроительная стратегия/конструктор (по типу факторио)
Игра скорее всего 2D, наверно пиксельная.
2 режима: глобальная карта, карта местности
Глобальная генерируется динамически в виде острова/архипелага - структура сотовая
Местная карта - тоже динамическая, но более упрощенная в зависимости от типа соты глобальной карты (По сути как это все сделано в rimworld с картами, только у меня игровой процесс так же завязать на деятельностях по строительству и на глобальной карте)

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

Основные вопросы на данный момент:
1. Движок игры, склоняюсь к unity 2D (не знаю, планирую изучать);
2. Алгоритмы/библиотеки (возможно платные) по генерации ландшафта островов / архипелагов - тут очень важно чтобы они были реалистичными (сам я уже экспериментировал с Шумом Перлина для генерации) результат не очень или сильно гористая или плоская, генерация карт местности проще там по сути простой квадрат с тайлами ландшафта)
3. Архитектурный вопрос, есть какие то шаблоны, предопределенные модели для таких игр, практики (книги).

Спасибо, если кто наставит на путь и даст свои советы новичку.

Оптимизация проверки столкновений объектов в 2D29 июля 20213:48HPW-Dev
В игре много пуль и противников с полигональными хитбоксами. Уже добавлена оптимизация, где просчитываются столкновения только близких по дистанции объектов. Ещё добавлю упрощение хитбоксов до кругов, типа круг покрывает все хитбоксы и проверяется только он, а когда круги столкнулись, проверяются подробно полигоны. Как ещё можно ускорить просчёт столкновений? Какие разбиения пространства я могу использовать? В игре всё движется каждый апдейт, ничего не стоит на месте и нужно проверять столкновения всех со всеми
Как работает восстановление состояния игры из файла сохранения, и что такое файл сохранения?27 июля 202122:08zakhardelov
Всем привет, у меня очень большой вопрос, так как я не понимаю как сохраняется состояние игры, и тем более, как восстановить это состоянии при инициализации. Не имеет значения какой язык я использую, давайте использовать псевдокод.

Для того, чтобы разобраться с вопросом решил создать простой проект. Есть несколько сундуков (я так буду называть любой ящик, в который можно что-то положить), и одновременно на экран можно вывести содержимое только одного сундука. Экземпляры сундуков хранятся в массиве, один из сундуков является "Текущим".

На экран выводится:
1) Название сундука,
2) Описание сундука,
3) Предметы, которые в нём лежат,
4) Предметы в инвентаре игрока,
4) Кнопки "ПРЕДЫДУЩИЙ", "СЛЕДУЮЩИЙ", "ГЛАВНОЕ МЕНЮ"

Нажатие на предмет в сундуке перемещает его в инвентарь, нажатие на предмет в инвентаре перемещает предмет в сундук.

Нажатие на кнопку "ПРЕДЫДУЩИЙ" открывает предыдущий сундук в массиве, а нажатие на кнопку "СЛЕДУЮЩИЙ" выведет на экран следующий сундук.

Кнопка "ГЛАВНОЕ МЕНЮ" откроет меню со следующими кнопками: "ЗАГРУЗИТЬ", "СОХРАНИТЬ", "НОВАЯ ИГРА", ну может быть будет кнопка "ВЕРНУТЬСЯ", чтобы закрыть главное меню.

Я не могу понять, как должно происходить сохранение игры. Как сохраняется информация о размещённых объектах? Допустим нажимаем на кнопку "СОХРАНИТЬ", тогда происходит событие сохранения, все сундуки подписаны на это событие, и попытаются сохранить себя. Но что это значит? Не будет же объект сохраняться как последовательность байт, со своими полями и методами. Как я понимаю каждый сундук попытается сохранить своё состояние, а именно набор объектов. Но как? Просто побитно запишет объекты? Или создастся некий файл с описанием атрибутов, которые потом нужно восстановить?

Так же не понимаю как происходит инициализация каждого сундука. Допустим мы начали новую игру, сначала создаётся последовательно 3 пустых (без объектов) экземпляра сундуков, потом некий сборщик наполняет их объектами?

Представим сундук:
СТАРЫЙ СУНДУК, а нём 3 объекта: "Кирпич", "Нож" и "Бутылка", каждый из этих объектов экземпляр своего класса, который наследуется от класса Item. Как бы выглядел файл сохранения, и как сборщик по нему бы заново их разместил бы в сундуке?

Приведу пример кирпича:

class Brick : Item
{
  title = "Кирпич";
  name = "item_brick_01";
  description = "Старый немытый кирпич";
  icon = sprite_brick_01;
  weight = 3.00;
  endurance = 100.0;

  //Куча методов
}

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

Например, когда в Skyrim сохраняемся во время драки, в файл сохранения попадают классы все бойцов, существ, и прочего? Скорее всего сохраняется некоторая информация, по которой происходит сборка при загрузке.

Наколхозил диаграмму, может понятней станет о чём я говорю. diagram | О дизайне игровых подсистем в 2048 Tournament
Может у кого есть исходник крайне простой игры с реализацией сохранения/загрузки на c/c++?

В C/C++ про дефолту типы знаковые или беззнаковые?26 июля 202115:58Gradius
Столкнулся сегодня с тем, что в Watcom C по умолчанию типы беззнаковые.


Вот такой пример:

char p=-8;
if(p==-8)Printf("Yea");
else Printf("No!");

выдаст в Watcom C "No!". 
В то время как в mingw выдаёт: "Yea"

Согласно стандарту K&R  по дефолту какие типы знаковые или нет? 
Кто нарушил стандарт - Watcom или mingw?

Букмекерские конторы по материалам http://winline.ru. , Вычислительная гидродинамика , joycasino мобильная версия https://joycasino2019.site/