Войти

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

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

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

Статьи

Recursive Tile-based architecture
Recursive Tile-based architecture

Данная статья вводит понятие Recursive Tile-Based Architecture (RTBA), расширяющее возможности традиционной tile-based архитектуры. Предложенный подход позволяет работать с аппаратно-ускоренным тайловым растеризатором в терминах когерентного рейтрейсинга, каждый тайл рассматривается, как средство обработки пучка лучей.

Читать | Комментарии [116]
8 янв 2022

Имитация раскачивания дерева под воздействием ветра
Имитация раскачивания дерева под воздействием ветра

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

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

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

Термины

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

Новости

Вышла книга 3D Graphics Rendering Cookbook

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

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

Развитие рендера в 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

Форум

Оптимизация. Как еще улучшить внутренние циклы? Масштабирование CSR-спрайтов24 сен 202221:05ArtProg

  Есть такой код:

+ Показать

  Делает масштабирование непрозрачных пикселей CSR-спрайта, но не суть. Вопрос в том, можно ли еще как-то оптимизировать внутренние циклы? Например, избавиться от взятия целых частей или еще какие-то трюки?

Правка: 23:59

Проблема с внутриигровой системой наведения на цель23 сен 20220:37Xardkort

Трехмерное пространство.
Цель статична.
В расчетах учтены: своя угловая скорость * тензор инерции и орбитальная угловая скорость вокруг цели.
Стрелок совершает маневры по перпендикулярному к цели кругу.
Аим работает идеально но стоит добавить простое упреждение (позиция Цели + (Скорость Цели - Моя Скорость) * (Расстояние до цели / Скорость снаряда) погрешность наведения меняется с 5-20 см, до 10-15 м.
Упреждение с любыми другими маневрами работает нормально.
Вопрос:
Что нужно добавить в расчеты чтобы круговые маневры перпендикулярно к цели не приводили к потере точности?
Или может я уже учел все что нужно и проблема в чем-то другом?

GeForce RTX 400021 сен 202211:42g-cont

Nvida анонсировала новое поколение видеокарт:
https://dtf.ru/hard/1363704-videokarty-geforce-rtx-4000-dlss-3-0-… ntacii-nvidia

Что-то я понять не могу, этот DLSS 3.0 теперь будет при помощи нейросети генерировать какую-то отсебятину?
Видеокарта перестаёт быть устройством для рендинга полигонов и начинает жить своей собственной жизнью?
И такой вопрос - в современной архитектуре, получается больше нет ни вертексных, ни пиксельных конвейеров, там теперь только унифицированные ядра CUDA?

Не рисует ortho рисунок в текстуру20 сен 202215:04v7

Я проверял структуру text на обычном фреймбуфере и текст отображается. Хочу рисовать в текстуру, но в текстуру рисуется только цвет glClear. Несколько дней бьюсь над проблемой и не пойму в чем она. вот код framebuffer.

#include <GLES3/gl3.h>
#include <stdint.h>
#include <wchar.h>
#include <stdlib.h>
#include <stdio.h>
#include "text.h"

static uint32_t render_buffer;
static uint32_t ids;
static uint32_t w = 128;
static uint32_t h = 128;
static uint32_t texture_map;
static uint32_t texture_depth;
GLuint depthrenderbuffer;

void init_framebuffer ()
{
  //int ret = glCheckFramebufferStatus (GL_FRAMEBUFFER);

  //printf ("error: %d\n", glGetError ());
  
  glGenFramebuffers (1, &ids);

  glBindFramebuffer (GL_FRAMEBUFFER, ids);

  glGenTextures (1, &texture_map);

  glBindTexture (GL_TEXTURE_2D, texture_map);

  glTexImage2D (GL_TEXTURE_2D, 0, GL_RGB, w, h, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
  glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
  glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);


  glFramebufferTexture2D (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture_map, 0);
  glBindTexture (GL_TEXTURE_2D, 0);

  glGenRenderbuffers(1, &depthrenderbuffer);
  glBindRenderbuffer(GL_RENDERBUFFER, depthrenderbuffer);

  glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24, w, h);
  glBindRenderbuffer (GL_RENDERBUFFER, 0);
  glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthrenderbuffer);

  int ret = glCheckFramebufferStatus (GL_FRAMEBUFFER);
}

uint8_t *framebuffer_render_tile_day (int day_num, uint32_t *_w, uint32_t *_h)
{
  *_w = w;
  *_h = h;
  uint8_t *buffer = malloc (w * h * 4);
  glViewport (0, 0, w, h);

  glBindFramebuffer (GL_FRAMEBUFFER, ids);
  int ret = glCheckFramebufferStatus (GL_FRAMEBUFFER);

  glClearColor (1.f, 1.f, 1.f, 1.f);
  glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

  wchar_t day[3];
  day[2] = 0;

  swprintf (day, 3, L"%d", day_num);

  struct text *text = text_build (day, 48);

  text_render (text, 0.0f, 10.0f, 10.f, 1.f, 0.f, 0.f);

  glReadPixels (0, 0, w, h, GL_RGBA, GL_UNSIGNED_BYTE, buffer);

  glBindFramebuffer (GL_FRAMEBUFFER, 0);
  glViewport (0, 0, 1024, 600);

  return buffer;
}

Текст рисуется в ortho проекции. 128 на 128.

C чего начать писать свой движок ? И как его проектировать19 сен 202219:33IGamedevStudio

Для того что бы повысить скиллы, понять технологии. В основном интересует графика.Плюсы тоже надо подтянуть.
Думаю начать с directx11, потому что вроде он самый лёгкий и доступный из относительно современных.
Вероятно OGL тоже, хоть он вроде уже труп, но с него многие начинали.
Платформа PC.
Вчера посмотрел текстовый туториал и пролистал Фрэнка Луну.Но чёт не вижу смысла делать что то своё основываясь на чужом.
Нужна структура движка и какая то система сущностей.
Как получить суперспособность проектирования ?

Насколько выгодно пустить логику игры в отдельном потоке?17 сен 20227:27mingw


Доброго времени года!

Сабж.

У меня проект с фиксированной частотой логики в 30 ФПС. Рендер - в свободном плавании интерполируется через tween. И вот пришла мысль пустить логику в отдельный поток... будет ли выигрыш при таких раскладах или не заморачиваться?

Quadtree mesh и корректный frustum culling15 сен 202213:28Kripto289

В большинстве проектов используется frustum culling на основе бесконечных plane.
Это выливается в следующую проблему (особенно при использовании quad mesh)
Изображение
То есть если объект достаточно большой, то будет ложное положительное срабатывание.
В случае использования quad tree mesh с огромной площадью (например 10 километров), отбраковка просто не работает, потому что почти все квадраты имеют ложное срабатывание и не отбрасываются.

Собственно вопрос, почему об этой проблеме нигде нет информации? По всем гайдам quad tree mesh пробежался и нигде подобного не видел. Кто как с этим борется или просто никто не замечал?
Усложнять код отсечения не сильно хочется, да и не смог найти нормальный код пересечения frustum planes VS AABB, везде какие-то усложнения с полярными координатами, OOBB преобразованиями и т.д.

Правка: 21:20

Удобный редактор/дизайнер шейдеров анимированных частиц?14 сен 202223:38romanshuvalov

Есть такой? Чтоб не вслепую GLSL код писать, а чуть менее вслепую, с предпросмотром результата?

Звукореж, саунд-дизайнер, композитор вступлю в команду или проект14 сен 202211:04danny.rimshot11

Всем привет, я - саунд-продюсер из Москвы. Озвучу ваш проект, также напишу к нему музыку. Мои работы по саунд-дизайну на ютуб канале:
https://www.youtube.com/playlist?list=PLFaO2Z1sLk7JwMlXLu5ek-q-H-nHwB1ky

Тут немного музыки отдельно:
https://soundcloud.com/danny-soroka

Есть возможность записи дикторов/актеров. Сейчас изучаю интерактивное аудио в Unity чтобы поучавствовать с точки зрения звука в каком то более сложном проекте,  делать там имплементацию звучков и их настройку. Так что проектам на Unity

Пишите лучше в телеграм или вацап +79998569280

[C++] Проверить наличие глобальной переменной13 сен 202220:16gammaker

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

Я попытался набросать такой детектор:

#define META_CHECK_IF_GLOBALLY_DECLARED_VAR(id) \
  namespace z_D {struct id##_DeclaredType {}; int id(id##_DeclaredType);} \
  template<typename T> concept z_D_##id##Declared = requires {id(T());}; \
  namespace MetaGloballyDeclaredVar {\
    namespace Exists {constexpr bool id = !z_D_##id##Declared<z_D::id##_DeclaredType>;} \
    namespace GetPtr {template<typename T> T* id() {return &::id;};} \
  }

Пример использования:

int declaredVar = 5;
META_CHECK_IF_GLOBALLY_DECLARED_VAR(declaredVar)
META_CHECK_IF_GLOBALLY_DECLARED_VAR(notDeclaredVar)
static_assert(MetaGloballyDeclaredVar::Exists::declaredVar);
static_assert(!MetaGloballyDeclaredVar::Exists::notDeclaredVar);

#include "third_party_file.h"

META_CHECK_IF_GLOBALLY_DECLARED_VAR(third_party_var)

// Должна вернуть third_party_var, если она объявлена в third_party_file.h.
// Иначе должна вернуть 0.
int getValOrZero()
{
  int* ptr = MetaGloballyDeclaredVar::GetPtr::third_party_var<int>();
  return ptr? *ptr: 0;
}

Exists уже отрабатывает как надо. А GetPtr надо реализовать, чтобы не было ошибки компиляции, когда переменная не определена. Возможно ли это реализовать?
Можно использовать C++20 фичи, но только те, которые можно заставить работать на GCC 8.

Правка: 20:20

Купить выкидные ножи по ссылке: nozheman.club/vykidnyye-nozhi/ в интеренет-магазине Ножеман . , Ищешь спортивные ставки на айфон? Попробуй это приложение