Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование игр [Форум / Инфо]

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

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

Читать | Комментарии [62]
20 мар. 2018

Детали плавающей точки FordPerfect
Детали плавающей точки
Цель статьи - дать читателю представление о работе с числами с плавающей точкой в программировании. Предполагается дать базовый объём информации и предоставить уровень понимания, достаточный для самостоятельного проведения оценок в задачах, возникающих на практике.

Читать | Комментарии [16]
4 мая 2017

Frustum Culling _Wizard_
Стоимость OpenGL команд. _Wizard_
Rectilinear Texture Warping Mephisto std
Behavior Trees в Unreal Engine 4 std::cin
Universal Scene Description (USD) wat
Universal Scene Description (USD)
Universal Scene Description (USD) — файловый формат описания трехмерной сцены, разработанный компанией Pixar.

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

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

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

Вуду-программирование Epsilon
NetWars Engine (NWE) Бабер
Blend4Web B4W_dev
Экспорт геометрии коллизии с материалом из 3DS Max в формат XML. Aviator777
В предыдущей статье http://www.gamedev.ru/code/tip/Collision_material мы разобрали как написать простой скрипт, с помощью которого можно создать костюмный материал, но мы не разобрали, как его использовать. В данной статье мы разберём как создать скрипт для экспорта из 3DS MAX геометрии коллизии с наложенным материалом.

Читать
6 дек. 2017

Создание собственного материала для геометрии коллизии с помощью MAX Script Aviator777
3D Studio Max: Перезагружаемый плагин RmzVoid
^ Как в Xcode превратить Command Line Tool в Cocoa Application. Sergio
Microsoft анонсировала DirectX Raytracing (DXR) wat
На проходящей в Сан-Франциско конференции разработчиков игр (GDC) компания Microsoft анонсировала поддержку в DirectX 12 технологии DirectX Raytracing (DXR). Новый программный интерфейс позволяет производить просчет рейтрейсинга при помощи поддержки этой технологии в железе.

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

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

Подробнее…

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

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

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

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

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

Sony расширяет программу PSM Dev Program на 12 стран, включая Россию Skyblade

PSM Logo | Sony расширяет программу PSM Dev Program на 12 стран, включая Россию

Как сообщается на портале Playstation Mobile Developer Portal, 29 мая 2014 года Sony Computer Entertainment Inc. расширила программу PSM Dev Program на 12 стран, включая Россию, а PlayStation Store для PSM будет запущен в 4 новых странах 22 июня 2014 года.

Участие в этой программе даёт доступ к PSM Publisher License, которая необходима для разработки приложений при помощи PSM SDK и Unity for PSM, а также к возможности публиковать эти приложения в PS Store для PSM.

Всего на данный момент программа PSM Dev Program действует на территории 32 стран, а контент для PS Store для PSM в ближайшем будущем будет доступен пользователям 22 стран. При этом PS Store для PSM в данный момент не доступен российским пользователям.

Ссылка | Комментарии [18]
30 мая 2014

Анонс Unity 5 Daemon19
18 марта Unity Technologies анонсировали новую версию популярного движка Unity. Кратко, что обещают:
  • Новая physically-based система материалов,
  • Real-Time Global Illumintaion,
  • Audio Mixer — новый инструмент, позволяющий работать со звуком не выходя из Unity,
  • Редактор 64bit,
  • Апгрейд PhysX до 3.3,
  • Physics 2D Effectors,
  • Поддержка WebGL — добро пожаловать в браузер без unity player,
  • Многопоточные задачи,
  • Интеграция SpeedTree,
  • Еще больше Physics2D API,
  • И многое другое.

Unity 5 | Анонс Unity 5

+ Рекламное видео с особенностями нововведений в Unity 5

Подробная информация: http://unity3d.com/5

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

Программирование игр — создание компьютерной программы (программного обеспечения) с помощью языков программирования. В программирование игры, или создание игрового движка, входит программирование геймплея, создание 3D или 2D графики (при помощи OpenGL или DirectX, которые можно скачать бесплатно), поддержка физики и звукового сопровождения, обеспечение взаимодействия пользователя с игрой и с другими пользователями сетевой или онлайн игры, написание утилит и экспорта из пакетов моделирования, таких как 3DS MAX и Maya. Наиболее популярные среды для программирования игр: MS Visual Studio и Delphi.

Форум

[WinAPI] Как приатачить процесс из основного десктопа к виртуальному?19 авг. 201821:20Клапауций
Создаю виртуальный десктор:
hNew = CreateDesktop(TEXT(NAMEDESKTOP), NULL, NULL, 1, GENERIC_ALL,  NULL );
...
подключаю:
SetThreadDesktop(hNew);
SwitchDesktop   (hNew);

А тут надо достать процессы из основного рабочего стола на ввод и вывод.

Кто-нибудь знает как или где можно реально найти инфу по этой теме?

Обогнать memcpy?19 авг. 201814:13v1c
Как-то захотелось обогнать memcpy на больших копированиях, сделать свой велосипед.
Идея такая: работаем только в x64, с выровненной для SSE памятью, только на больших размерах (vertex buffer/texture). Т. е. не проверяем выравнивание, не делаем джампы для разных размеров (64-128 kb). В общем случае хочется достичь memory bandwidth в таком сценарии:
void *data = MapViewOfFile(...);
void *buffer = stagingBuffer->lock(...);
myFastCopy(buffer, data, size);
stagingBuffer->unlock();
UnmapViewOfFile(...);
Для копирования блоками по 256 байт я использовал 16 SSE регистров и интринсики _mm_stream_load_si128/_mm_stream_si128, которые позволяют не забивать кэш при копировании.
К сожалению, dumb цикл из таких инструкций не позволил обогнать стандартную memcpy() - в каких-то случаях время почти одинаковое (чуть больше), в каких-то существенно больше. Либо компилятор генерирует неоптимальный код, либо нужны ещё танцы с бубном вокруг регистров. В конце я попробовал ещё одну простую идею - разбиваем буфер на N блоков, каждый блок копируется с своём отдельном потоке. По идее это должно было дать преимущество, т. к. все стандартные функции C - однопоточные. Был ещё вариант что мы можем просто упираться в bandwidth, но мои тесты показали, что упор идёт именно в SSE, и многопоточное копирование быстрее. Zero memory существенно быстрее.

Просьба потестить на своих машинах этот код:
https://gamedev.ru/files/?id=133977

Для Windows: запускаем x64 Native Tools Command Prompt for VS 20XX, переходим в директорию с файлами:
build
perfTest

Для Linux:
make
./perfTest

Мои результаты на FX-8320:

Run std::memcpy() performance test.
Elapsed time: 568.888ms.

Run magma::copyMemory() performance test.
Elapsed time: 474.182ms.
Memory copy Ok

Run std::memset() performance test.
Elapsed time: 623.447ms.

Run magma::zeroMemory() performance test.
Elapsed time: 294.375ms.
Memory zero Ok

Правка: 19 авг. 2018 14:16

[Unity] Как группировать ресурсы? [Решено]19 авг. 201813:18smartxp
Если в папку Scripts помещать все скрипты, в папку Materials все материалы, то потом возникает проблема с переносом объектов. Например, перенес префаб юнита в другой проект и нужно искать по всем папкам необходимые для него ресурсы.
UE4: настройки графики19 авг. 201811:34dmitrykozyr
У меня в игре нет текстур и теней, поэтому уменьшил все настройки до минимума.
При этом качество картинки вообще не изменилось, а производительность резко увеличилась.
Но в билде почему-то все-равно подтормаживает. Оно отдельно настраивается для билда и для движка?

Изображение

Правка: 19 авг. 2018 11:35

как в OpenGL рисовать поверх всего , что есть на сцене ?19 авг. 20187:34werasaimon
Как мне без всяких текстур , и.т.д . в OpenGL нарисовать хотя бы линии , по верх всех объектов на сцене ?
Короче у меня есть GizmoManipulator( Move , Scale , Roatate ) , и его компоненты должны рисоваться поверх всего что есть на сцене .
каким самым простым способом в OpenGL это можно сделать ? может glDepthBuffer!
Расположение vptr в объекте18 авг. 201816:58gammaker
Делаю контейнер для хранения полиморфных объектов. Так как объекты разных производных типов имеют разную длину, я создаю их через размещающий new в некотором заранее выделенном блоке памяти друг за другом и сохраняю смещение каждого объекта. При удалении контейнера у всех объектов автоматически вызывается виртуальный деструктор. Но некоторые объекты пользователь может захотеть удалить вручную. Нужно вызвать его деструктор и пометить его как удалённый, чтобы его деструктор не вызвался второй раз.
Не хотелось бы занимать дополнительную память для хранения того, какие объекты были удалены, поэтому я думаю воспользоваться тем, что у каждого полиморфного объекта в начале есть vptr - указатель на таблицу виртуальных функций, который, очевидно, ненулевой. После вызова деструктора объекта удобно помечать его удалённым, записывая в самые первые sizeof(void*) его байт нули.
Понятно, что стандарт не говорит о том, что виртуальные функции должны быть реализованы именно таким образом. Вопрос в том, есть ли такие компиляторы (среди тех, который поддерживают стандартный не урезанный C++ хотя бы на уровне C++11), которые реализуют виртуальные функции как-то по-другому? Например, где нет vptr или он почему-то находится не в начале объекта, что приведёт к тому, что на месте начала объекта окажется какое-нибудь поле, которое может принимать нулевые значения и таким образом поломает мне всю проверку? И если да, то можно ли как-то проверить этот факт во время компиляции, чтобы для этих компиляторов выбрать альтернативную реализацию?
Сыпется картинка в шейдере с картой нормалей18 авг. 20183:42AfterAll14
Такая вот хрень вылазит при использовании карты нормалей в directx 9:

Изображение

Карта нормалей разумеется чистая и ровная.
Виновник этого безобразия - функция воссоздания тангенциального пространства cotangent_frame в пиксельном шейдере (она нужна чтобы получить матрицу для пересчета нормалей из карты нормалей в мировые координаты):

float3x3 cotangent_frame(float3 N, float3 p, float2 uv)
{
    // get edge vectors of the pixel triangle
    float3 dp1 = ddx( p );
    float3 dp2 = ddy( p );
    float2 duv1 = ddx( uv );
    float2 duv2 = ddy( uv );
 
    // solve the linear system
    float3 dp2perp = cross( dp2, N );
    float3 dp1perp = cross( N, dp1 );
    float3 T = dp2perp * duv1.x + dp1perp * duv2.x;
    float3 B = dp2perp * duv1.y + dp1perp * duv2.y;
 
    // construct a scale-invariant frame 
    float invmax = rsqrt( max( dot(T,T), dot(B,B) ) );
    return float3x3( -T * invmax, -B * invmax, N );
}

Без этой функции правильные нормали я не смогу получить. А при ее использовании картинка сыпется. Как будто вырубается какая-то интерполяция из-за сложности функции. Подскажите кто сталкивался или знает что с этим можно сделать. Может есть какая то опция/настройка чтобы оно ее по-человечески обсчитывало.

[WinAPI] как правильно менять размер дочерних окон, при ресайзе родителя ?18 авг. 20181:14Panur
В голову приходят два варианта.

Первый:

    тупо привязаться к размерам родительского окна.

Второй:

    самому задать конкретные размеры дочерних окон: типо ( int W = 100, int H = 200 ).

    при изменении размеров родителя - вычислять Коэффициент, на который изменились размеры: образно - ( New WindowRECT / Old WindowRECT ).

    затем, при каждом ресайзе родителя - умножать коэффициент на размеры детей.

    Но! при таком варианте, Коэффициент - это дробное число ( float ), и дочерние окна - ресайзятся с ошибкой в размерах: больше ресайзов = больше ошибка.

    (int) W * (float) K = ХРЕНЬ

p.s.

как я понимаю, первый вариант хоть и простой ( и не глючный ) - но это говнокод.

Настройка цен в google play17 авг. 201818:43urbem.angeli
Всем привет! Ребят, кто добавлял контент для продажи в goole play стоимостью меньше 1 доллара. Проблема в том, что если я указываю стоимоть товара в месной валюте 14 грн ~ 0.5$, то его пересчет стоимости для других стран выполняется неправильно. Например для США стоимость составляет 0.99$. Если я указываю больше доллара, то расчет идет правильно. Можно и вручную для каждой страны указать цену, однако расчитывать 4 цены для 61 страны - это безумство. Как вы настраивали цены?

Изображение

Масштабирование модели и нормали16 авг. 201819:31eDmk
Все привет!
Как учесть изменение нормали если модель масштабируется через матрицу?
Ведь центры треугольников в данном случае смещаются, а значит нормаль надо пересчитывать?
Или LightDir пересчитывать каждый раз?

В OpenGL в шейдере LightDir для каждого пиксела считается, а в моем случае (софт) один раз для всей модели.
Получается, что если использовать матрицу масштаба, то нормали посчитанные для 100% размера модели не подходят.
Выходит такая шняга:
Нормали при масштабе | Анонс Unity 5

Правка: 16 авг. 2018 19:45

2001—2018 © GameDev.ru — Разработка игр