Войти

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

Игровой движок, 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. Доклад на английском языке. Есть русские субтитры.

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

Ссылка | Комментарии [67]
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

Форум

Bullet Physics, фильтрация контактов16 янв. 202118:06DEN 3D
Приветствую.

Допустим, есть два тела, созданные средствами Bullet, и они в данный момент времени касаются друг друга, контачат, причём в нескольких местах - одна точка контакта внизу, другая сверху сбоку. То есть, точки контактов имеют разные нормали и позиции.

Вопрос - можно ли перехватить контакты заранее, до их применения (типа как PreSolve в Box2D) и отменить именно боковой контакт?

Не замутить ли нам анонимный TCP?16 янв. 202111:11Barbar1an
в общем давно напрягал тисипи своей неанонимностью , приходится городить  всякие торы и прокси чтобы не палиться,
а всё изза роутинга который обязан раскрывать айпи чтобы вернуть ответ

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

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

и нагнать ажиотаж так чтобы производители были вынуждены его поддерживать

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

зато теперь чтото заблокировать на уровне IP будет нереал

Правка: 11:14

gdi рамка вокруг экрана16 янв. 202110:16SmoothBoy
Я при помощи GDI SetPixel() занимаюсь софтварным рендерингом, и заметил что у меня рамка черного цвета вокруг экрана, например для наглядности я растянул окно и с права на скрине видно рамка вокруг экрана. Как ее убрать?

https://ibb.co/QDm0xtj

Вот мой код работы GDI в программе:

bool CMeshManager::BuildBackBuffer( ULONG Width, ULONG Height )
{
    HDC hDC = ::GetDC( hWnd );

    if ( !hdcBackBuffer ) hdcBackBuffer = ::CreateCompatibleDC( hDC );
    
  if ( hbmBackBuffer ) 
    {
        ::SelectObject( hdcBackBuffer, hbmSelectOut );
        ::DeleteObject( hbmBackBuffer );
        hbmBackBuffer = NULL;
        hbmSelectOut   = NULL;

    }

    hbmBackBuffer = CreateCompatibleBitmap( hDC, Width, Height );    
    if ( !hbmBackBuffer ) return false;

  hbmSelectOut = (HBITMAP)::SelectObject( hdcBackBuffer, hbmBackBuffer );

    ::ReleaseDC( hWnd, hDC );
    ::SetBkMode( hdcBackBuffer, TRANSPARENT );

    return true;
}

void CMeshManager::ClearBackBuffer( ULONG Color )
{
    LOGBRUSH logBrush;
    HBRUSH   hBrush = NULL, hOldBrush = NULL;
    
    logBrush.lbStyle = BS_SOLID;
    logBrush.lbColor = RGB(255, 255, 255) ;
    
    hBrush = ::CreateBrushIndirect( &logBrush );
    if (!hBrush) return;

    hOldBrush = (HBRUSH)::SelectObject( hdcBackBuffer, hBrush );
  
    Rectangle( hdcBackBuffer, nViewX, nViewY, nViewWidth, nViewHeight );
    
    ::SelectObject( hdcBackBuffer, hOldBrush );
    ::DeleteObject( hBrush );
}

void CMeshManager::PresentBackBuffer( )
{    
    HDC hDC = ::GetDC(hWnd);

  ::BitBlt( hDC, nViewX, nViewY, nViewWidth, nViewHeight, hdcBackBuffer,
              nViewX, nViewY, SRCCOPY );

    ::ReleaseDC( hWnd, hDC );
}
Оптимален ли Unreal Engine для небольшой 3д игры для ПК15 янв. 202122:08Finder_D
Привет форумчанам!
Собираюсь в одиночку попробовать сделать не слишком сложную трехмерную песочницу, похожую на Grow Home или Slime Rancher.
Подходит ли для этого Unreal Engine? Я поверхностно знаком с Unity, но по имеющемуся знаниям мне кажется, что многие решения которые надо либо искать(покупать) ассетами в Unity, у Unreal уже есть из коробки. Например, те же LODы. Поэтому мне кажется, что гораздо быстрее сделать это на unreal, правда,но он позиционируются как сверхтехнологичный движок для AAA. Вот интересно, каким из этих движком я сильнее намучуюсь и в каком движке разработка будет быстрее).
П.С. Не хочу разводить этот древний холивар Unreal vs Unity, просто хочу знать что лучше подойдет для текущей задачи.

Правка: 22:15

С чего начать изучения программирования игр в 2021 году15 янв. 202120:32unlimeted
Привет всем! Понимаю что вопрос уже поднимался многократно, но хочется более свежей информации. Так вот, подскажите пожалуйста, с чего начать изучения программирования графики, какая математика нужна, какие методы и т.д. буду рад всем советам. Я программирую на языках С/С++  интересуюсь сейчас, DirectX 12 и Vulkan SDK, тоже буду рад выслушать мнения, может материалы посоветуйте. Всем заранее огромное спасибо!
Генерация первичных лучей для трассировки15 янв. 202113:42max64rus
Доброго времени суток форумчане.
Как правильно генерировать первичные лучи для трассировки.
В решениях, которые находятся на просторах интернета, первичные лучи проходят через начало координат и середину каждого пикселя экранной плоскости. При таком подходе сохраняется расстояние между точками пересечения лучей с экранной плоскостью, но при этом углы между парами лучей получаются разные (ближе к центру расстояние до плоскости меньше, соответственно угол между лучами больше, к краю наоборот). Вопрос в следующем — является ли данное поведение частью проекции, таким образом это норма, либо это упрощение вычислений и для точности нужно генерировать лучи с равномерным угловым смещением относительно друг друга?
Непонятка со сферической системой координат14 янв. 202122:33max64rus
Приветствую форумчане. Появилась надобность сделать маленький классик с переводом координат из декартовых в сферические и обратно. Вопрос достаточно несложный, формулами пестрит весь интернет, формулы простые и понятные. При тестировании данного класса появился логический вопрос, на который я не смог найти ответа.
Вопрос в следующем:
Допустим я хочу получить вектор, направленный под углом 45 градусов ко всем осям в положительной четверти. Для этого достаточно нормализовать вектор с координатами (1, 1, 1). Получаем единичный вектор (0.58, 0.58, 0.58). Теперь пытаемся получить тот же единичный вектор через сферические координаты, для этого в расчетах используем радиус=1, широту и долготу=45 градусов. В итоге получаем единичный вектор (0.5, 0.5, 0.7). Естественно первым делом я перепроверил все формулы вдоль и поперёк, во вторых я подставил свои значения в онлайн конвертере сферических координат и получил теже результаты, в третьих я прогнал у себя в голове ещё раз логику перевода из сферических координат в декартовы. В итоге я так и не понял почему так получается. Естественно все углы я использовал в радианах.
Godot: объект видимый в редакторе, но невидимый в игре14 янв. 202118:57Robotex
Как сделать такой объект?

У меня есть несколько типов spawn-позиций: bonusSpawn, playerSpawn, enemySpawn. Это просто Position2D с дочерним спрайтом-иконкой, обозначающей тип.

Самое простое, что приходит в голову это просто сделать ему visible = false в функции _ready или просто удалить чайлд.

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

CircleCI сборка под Android14 янв. 202118:01IROV..
Добрый день!

Решил движок Mengine настроить CI под сборку Android Studio

вот файл настройки CircleCI: config.yml

вот результат работы: сылка

а вот и ошибка которая мешает мне собрать

ninja: error: '/home/circleci/project/gradle/libraries/OpenAL32/build/intermediates/cmake/Debug/obj/armeabi-v7a/libopenal.so', needed by '/home/circleci/project/gradle/app/build/intermediates/cmake/debug/obj/armeabi-v7a/libSDLApplication.so', missing and no known rule to make it

хотя библиотека собирается, но в папку с lowercase 'debug'

[65/65] Linking CXX shared library /home/circleci/project/gradle/libraries/OpenAL32/build/intermediates/cmake/debug/obj/armeabi-v7a/libopenal.so

настройка сборки для openal: OpenAL32/build.gradle

подключаю уже в основном app/build.gradle

но я не нашел место где я влияю на этот lowercase или uppercase 'debug'

**сейчас закомиченно тестовое не правильное указание CMake - debug с маленькой. (ревертну вечером)

Может кто то встречал такое или есть идеи как починить?

Спасибо.

Правка: 18:02

На github когда-то находил переписанные функции типа D3DXVec3TransformCoord.14 янв. 202114:57ronniko
Подскажите где на гитхабе найти их.

Были функции типа такие.

void Matrix4x4::Transform( Vector3 &oPoint )
{
    float fX = oPoint.GetX();
    float fY = oPoint.GetY();
    float fZ = oPoint.GetZ();

    oPoint.SetX( fX * this->matrix[0][0] + fY * this->matrix[0][1] + fZ * this->matrix[0][2] + this->matrix[0][3]);
    oPoint.SetY( fX * this->matrix[1][0] + fY * this->matrix[1][1] + fZ * this->matrix[1][2] + this->matrix[1][3]);
    oPoint.SetZ( fX * this->matrix[2][0] + fY * this->matrix[2][1] + fZ * this->matrix[2][2] + this->matrix[2][3]);
}

Правка: 15:09

Букмекерские конторы по материалам http://winline.ru. , Вычислительная гидродинамика , Скачать конвертер NEF файлов в JPG