forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Проекты C++ (http://forum.boolean.name/forumdisplay.php?f=56)
-   -   [TrueHorror] - разработка (http://forum.boolean.name/showthread.php?t=17293)

mr.DIMAS 29.10.2013 21:22

Ответ: [TrueHorror] - разработка
 
Цитата:

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

BSP - сложноват для начала. С деревьями работал последний раз года 4 назад. Octree делал - работало очень даже шустро

Насчет octree. Оправдано ли? Может производительней будет Quadtree?

Samodelkin 29.10.2013 21:56

Ответ: [TrueHorror] - разработка
 
Цитата:

Насчет octree. Оправдано ли? Может производительней будет Quadtree?
Quadtree для плоских ландшафтов. Как ты карту с многоэтажностью будет в quadtree обрабатывать?

mr.DIMAS 02.11.2013 01:24

Ответ: [TrueHorror] - разработка
 
Т.к. сюжета в игре еще нету, что если за основу игры взять объекты из SCP? Сделать что-то наподобие SCP: Containment Breach( который на B3D сделан :) ), только без рандомной генерации уровней( а может и с ней ).

http://scpfoundation.ru/scp-list - тут просто огромный список интересных объектов, просто мимо пройти не могу, затянуло.

Напишите свое мнение.

Samodelkin 02.11.2013 03:13

Ответ: [TrueHorror] - разработка
 
Так я думал ты решил тот сюжет про научного сотрудника юзать. Если нужны детали то могу чего-нибудь доработать.

Да у меня тоже была мысль про SCP. Только тут, имхо, нужно либо целиком игру посвящать SCP, либо делать только несколько отсылок к SCP, мешать SCP в одинаковых пропорциях с чем-то еще не стоит наверное, а то непонятно про что игра будет. Может быть SCP можно еще как источник интересных игровых механик рассматривать, брать их за основу, но потом доводить самостоятельно до оригинальной концепции.

Так что если SCP будет заметно в игре, то игрок сразу подумает "Ага, еще одна игра про SCP..." и в его голове сразу будут возникать ассоциации с SCP, и предложить ему какую-то другую игровую вселенную уже будет трудно, потому что он все будет воспринимать как часть вселенной SCP. :crazy:

Arton 02.11.2013 04:58

Ответ: [TrueHorror] - разработка
 
Цитата:

Сообщение от mr.DIMAS (Сообщение 269561)
Т.к. сюжета в игре еще нету, что если за основу игры взять объекты из SCP? Сделать что-то наподобие SCP: Containment Breach( который на B3D сделан :) ), только без рандомной генерации уровней( а может и с ней ).

http://scpfoundation.ru/scp-list - тут просто огромный список интересных объектов, просто мимо пройти не могу, затянуло.

Напишите свое мнение.

Как-то это не согласуется с тем что ты писал ранее:

Цитата:

Сообщение от mr.DIMAS (Сообщение 268087)
Игровое время - 2 часа максимум. Основной упор в геймплее нужно делать на реализм - без всякой мути, вроде потусторонних сил и прочей ереси.

SCP как-раз и является "ересью, мутью и потусторонними силами".


P. S. Я то только за, если ты возьмёшь какой нибудь SCP сюжет :)

Samodelkin 02.11.2013 16:57

Ответ: [TrueHorror] - разработка
 
Цитата:

Сообщение от Arton
P. S. Я то только за, если ты возьмёшь какой нибудь SCP сюжет

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

Эй, комьютерные игры это же часть искусства, их и так с бизнесом смешали и заюзанными шаблонами напичкали, а еще всякие scp их ниже плинтуса опустят, особенно при бездумном его копировании.
:SOS:

Arton 02.11.2013 22:45

Ответ: [TrueHorror] - разработка
 
Цитата:

Сообщение от Samodelkin (Сообщение 269574)
А мне вот хотелось бы поиграть во что-нибудь менее глупое.

Например что?
SCP как раз не глупое.

Цитата:

Эй, комьютерные игры это же часть искусства, их и так с бизнесом смешали и заюзанными шаблонами напичкали, а еще всякие scp их ниже плинтуса опустят, особенно при бездумном его копировании.
:SOS:
Причём тут бизнес, шаблоны?

Похоже ты на какие-то свои мысли писал...

mr.DIMAS 15.12.2013 18:00

Ответ: [TrueHorror] - разработка
 
Много воды утекло с прошлой версии.

В основном технические изменения.

А именно:
1) Переделал рендерер - появились соответствующие компоненты типа IVertexBuffer, ITexture и т.п. Таким образом рендерер под OpenGL написать будет просто.
2) Ускорил загрузку моделек - в т.ч. уровня. Ранее уровень размером в 1,2 мб грузился за 10 сек, сейчас за 1,2
3) Добавил врагов - пока только ближний бой.
4) Добавил меню - в нем минималистические настройки( настройки графики пока не работают )
5) В скрипты добавил работу с GUI.

Мне нужен код который считает тангенты и бинормали. Тогда смогу сделать бамп или параллакс. А пока просто диффузный свет.

Еще кидайте мне лог( лежит в data/logs ) и фпс.

Скачать

Arton 16.12.2013 03:44

Ответ: [TrueHorror] - разработка
 
Вложений: 1
Запустил. Увидел туннель, понравилось, ассоциации с Пенумброй. Решил сменить графику в меню - вылет.
Запустил по новой, нажал играть. Оказался на какой-то дороге в лесу, ночью. Первое что заметил нежелательное присутствие курсора =_="

Затем странный фонарь, когда проводишь внизу него курсором, издаётся щелчок как в меню по кнопкам. На том месте как раз интерфейс:


Огляделся по сторонам, везде было очень темно, ничего не видно. По правую руку, дорого вела в пещеру, в скале, перед которой, топтались двое подозрительных типов. Пошёл к ним. Один из них быстрым шагом двинулся мне на встречу. Как будто только и ждал когда пойду в их сторону, в его левой руке был нож.
Стало ясно чем это кончится. Особо не раздумывая я рванул вперёд, к пещере, надеясь спрятаться там. Обогнул первого человека, он махнул на меня ножом, но это было уже неважно. Пробежал мимо второго, забежал внутрь и обернулся что бы посмотреть. Один из мужчин топтался перед входом и по каким-то причинам не мог войти...
Любопытство вело меня дальше, в глубь скалы по туннелю. Я пошёл и встретил настоящий страх - перетянутые текстуры:


Перетянутые текстуры заканчивались непроглядной чернотой, я по инерции вбежал в неё, тьма окутала меня со всех сторон. Я замотал головой по сторонам, в надежде увидеть свет. Наконец я увидел три белых точки быстро уходящих вдаль:


"Вылетел с уровня" - подумал я и выключил игру.

FPS ~75
Вложение 19929

Samodelkin 16.12.2013 12:21

Ответ: [TrueHorror] - разработка
 
Цитата:

Мне нужен код который считает тангенты и бинормали.
D3DXComputeTangentFrameEx - считает тангенты и если нужно то бинормали и нормали.

Mr_F_ 16.12.2013 12:58

Ответ: [TrueHorror] - разработка
 
Цитата:

Мне нужен код который считает тангенты и бинормали
http://www.terathon.com/code/tangent.html
этот никогда не подводил

Samodelkin 16.12.2013 21:30

Ответ: [TrueHorror] - разработка
 
Затестил - нормально. Меню выглядит многообещающе. Игра короткая, там действительно при входе в тоннель проваливаешься вниз и всё. У меня враги смогли в тоннель забежать. Да на фонаре тоже звук как будто по кнопкам меню проводишь.

Как всегда тестил на медленном железе: в целом довольно шустро работает, но из-за того что скорость игры завязана на fps играть не удобно. С включённой синхронизацией постоянно скачки - то 60, то 30, то 20, с выключенной чуть удобней, но теперь нету верхнего предела и при входе в тоннель например при 200 fps все слишком быстро происходит. Так что fps 20-200 - вот такой разброс.

Лог на другой машине, но в нём все нормально - время загрузки scene.cxm 453ms, arrival.cxm 1635ms

mr.DIMAS 18.12.2013 23:30

Ответ: [TrueHorror] - разработка
 
Вложений: 2
Наконец-то разобрался с расчетом нормалей. Ранее нормаль вычислялась только для грани, а теперь для каждой вершины - спасибо Борескову за код :). Теперь можно тангенты и бинормали считать.

Скрины - до и после:

mr.DIMAS 22.12.2013 02:25

Ответ: [TrueHorror] - разработка
 
Вложений: 5
Бамп пока не добавил. Сейчас работаю над модельками и картой, попутно исправляя баги в движке.

На скринах можно заметить z fighting. Сразу вопрос как в ДХ 9 его убрать?

Скрины:

Mr_F_ 22.12.2013 11:30

Ответ: [TrueHorror] - разработка
 
Цитата:

На скринах можно заметить z fighting
на скринах вижу только зад негра. в каком месте зфайтинг?

Samodelkin 22.12.2013 18:28

Ответ: [TrueHorror] - разработка
 
Z файтинг убирается увеличением буфера глубины (или его точностью).
В D3DPRESENT_PARAMETERS ставишь AutoDepthStencilFormat в D3DFMT_D32 или D3DFMT_D24S8 или D3DFMT_D32F_LOCKABLE в зависимости от предпочтений. Обычно можно обойтись и 24 битным.

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

В любом случае во время моделирования старайся делать адекватные расстояния между параллельными плоскостями.

Ни на скринах с нормалями ни на скринах зфайтинга я ничего не могу понять - я вижу только ТЕМНОТУ!

tirarex 01.01.2014 12:05

Ответ: [TrueHorror] - разработка
 
fps 30-60
я смог залезть на фонарь и дальше гулять по горам ,далее вылетел за карту вот и все .

кстати , дебаг лога нет !


-- keep your fucking hands away from this code
-- your brain is too small for this
-- ну ты понял

порадовало :-D

mr.DIMAS 08.01.2014 01:40

Ответ: [TrueHorror] - разработка
 
К чему может привести подобный подход( я про return reinterpret_cast< int >( font );?

Код:

int CreateFont( int size, const char * name, int italic, int underlined )
{
  ID3DXFont * font;

  D3DXCreateFontA( g_device, -1, size, FW_BOLD, 0, italic, RUSSIAN_CHARSET, OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH, name, &font );

  return reinterpret_cast< int >( font );
}


Samodelkin 08.01.2014 02:52

Ответ: [TrueHorror] - разработка
 
Все зависит от тебя - если накосячишь то компилятор тебе не поможет. А так само значение переменной здесь меняться не будет. Но такая штука больше смахивает на костыль и это означает что у тебя проблемы с архитектурой движка.

Кстати эти шрифты (d3dxfont) ужасно медленные, если ими заполнить хотябы половину экрана то fps у меня на i7 и hd5870 падает ниже 10. Настройки качества шрифтов ничего особого не дают. Незнаю есть ли другие решения, я особо не искал, но у себя я в конце концов сделал через текстуры. Так что если ограничишься выводом fps и еще пару-тройку параметров то всё ок, а вот если будешь выводить страницы текста то лучше найти другое решение.

mr.DIMAS 08.01.2014 16:07

Ответ: [TrueHorror] - разработка
 
Я решил обособить движок в отдельную библиотеку. Классовый интерфейс мне не понравился - там куча проблем с ромбовидным наследованием и прочая муть. Поэтому к большинству объектов вне движка теперь можно обратиться с помощью хендлов( в данном случае int ) и функций работающих с ними. Вот и вся история.

Mr_F_ 08.01.2014 17:06

Ответ: [TrueHorror] - разработка
 
хендлы сами по себе тоже необязательно заморачивать, это могут быть просто номера объектов в массивах)

Samodelkin 08.01.2014 21:37

Ответ: [TrueHorror] - разработка
 
Более того их необязательно получать сразу. Опять же в качестве примера как я сделал у себя: для большинства объектов достаточно стандартной обработки, которая уже прописана жёстко в коде, например того класса контейнера который содежит эти объекты, а если всё таки потребуется особая работа с объектом то можно получить его локальный хендл/номер_в_массиве, таким образом избавляемся от большой кучи всяких глобальных указателей/хендлов, которые надо где-то хранить и кудато передавать. Кстати в том же d3d9 совсем не обязательно хранить указатели у себя в коде - их всегда можно получить локально через тот объект с которым работаешь. Например если в качестве аргумента в функцию дается IDirect3DTexture9 ты можешь внутри функции получить tex->GetDevice().

ЗЫ: вообще имхо чем большое хардкода (без потери функциональности) - тем лучше, проще и надежнее движок. Все манипуляции с движком лучше делать через скрипты/тулзы и прочие внешние инструменты.

mr.DIMAS 08.01.2014 22:23

Ответ: [TrueHorror] - разработка
 
Цитата:

Все манипуляции с движком лучше делать через скрипты/тулзы и прочие внешние инструменты.
Это добавляет оверхеда в виде функций связок( luaBind не предлагать ). Я решил обособить движок чтобы игру саму писать на си++, ибо со скриптами геморроя дофига.


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

Код:

if( Button( blablabla ) == blablabla )
{
    do_smth
}

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

и немного все прикинув, сделал у себя в двиге также.

Создается std::queue для каждого типа объектов( изображение( квад с текстурой ), текст ). Вызывая соотвествующую функцию ( Button, Image ) параметры объекта помещаются в соответствующую очередь, а затем после рендеринга основной геометрии выводятся на экран при общей матрице проекции и стейтах. После очередь очищается.

Правильно ли я уловил идею что используют в юнити?

Samodelkin 09.01.2014 00:54

Ответ: [TrueHorror] - разработка
 
Цитата:

Это добавляет оверхеда в виде функций связок( luaBind не предлагать ). Я решил обособить движок чтобы игру саму писать на си++, ибо со скриптами геморроя дофига.
Так может сразу на ассемблере? Уж лучше будет небольшой оверхед исполнения программы чем оверхед работы программиста/разработчика. Это очевидно что чем выше абстракция и чем эта абстракция нативнее по отношению к мыслительным процессам людей - тем лучше. Писать игру на с++ - потратишь столько же времени сколько и на создание движка и проблем будет не меньше. А потом это всё может оказаться неприспособленным к последующему проекту и всё придется делать сначала.

Думай в первую очередь о простоте кода, ты его для людей пишешь, а не для компьютеров. А для оптимизации выполнения будет достаточно критические участки грамотно написать - это меньше 5% кода наверняка.

pax 09.01.2014 00:58

Ответ: [TrueHorror] - разработка
 
Цитата:

Сообщение от mr.DIMAS (Сообщение 271748)
На скринах можно заметить z fighting. Сразу вопрос как в ДХ 9 его убрать?

везде он убирается чаще всего уменьшением разницы между near и far камеры. Не стоит ставить их к примеру 0.001 и 10000, лучше 0,01 и 1000 ну и меньше лучше. В некоторых случаях лучше использовать две камеры, одна для заднего плана, вторая для переднего (которая выполняет очистку только буфера глубины).

Samodelkin 09.01.2014 01:30

Ответ: [TrueHorror] - разработка
 
Цитата:

В некоторых случаях лучше использовать две камеры, одна для заднего плана, вторая для переднего (которая выполняет очистку только буфера глубины).
Не совсем понятно. Есть примеры использования?

pax 09.01.2014 07:22

Ответ: [TrueHorror] - разработка
 
Цитата:

Сообщение от Samodelkin (Сообщение 272298)
Не совсем понятно. Есть примеры использования?

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

SBJoker 09.01.2014 11:43

Ответ: [TrueHorror] - разработка
 
Цитата:

Сообщение от pax (Сообщение 272311)
К примеру в космосиме можно планеты рендерить отдельной камерой, а корабли своей, рассчитанной на близкое расстояние. В общем применимо когда задний план расположен далеко и выполнен не скайбоксом.

Интересно при этом было бы посмотреть на метод объединения таких рендеров без ошибок сортировок между планетами и кораблями.

Samodelkin 09.01.2014 12:17

Ответ: [TrueHorror] - разработка
 
Цитата:

Сообщение от SBJoker (Сообщение 272315)
Интересно при этом было бы посмотреть на метод объединения таких рендеров без ошибок сортировок между планетами и кораблями.

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

mr.DIMAS 09.01.2014 19:16

Ответ: [TrueHorror] - разработка
 
Цитата:

Сообщение от Samodelkin (Сообщение 272296)
Так может сразу на ассемблере? Уж лучше будет небольшой оверхед исполнения программы чем оверхед работы программиста/разработчика. Это очевидно что чем выше абстракция и чем эта абстракция нативнее по отношению к мыслительным процессам людей - тем лучше. Писать игру на с++ - потратишь столько же времени сколько и на создание движка и проблем будет не меньше. А потом это всё может оказаться неприспособленным к последующему проекту и всё придется делать сначала.

Думай в первую очередь о простоте кода, ты его для людей пишешь, а не для компьютеров. А для оптимизации выполнения будет достаточно критические участки грамотно написать - это меньше 5% кода наверняка.

Воу воу паринь палехчи.

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

По поводу опций компилятора. Нужно ли для движка выключить поддержку исключений( в движке не использую их )? Тут довольно хорошие доводы в пользу отключения .

Samodelkin 09.01.2014 22:51

Ответ: [TrueHorror] - разработка
 
Цитата:

По поводу опций компилятора. Нужно ли для движка выключить поддержку исключений( в движке не использую их )? Тут довольно хорошие доводы в пользу отключения .
2006 год? Сейчас уже С++11 и там хорошие исключения.

Цитата:

Дело в том что я уже попробовал писать игру на скриптах. Для этого я завернул все функции движка в луа-обертки, и получилось так что я пишу всю игру на луа. То есть в экзешнике запускается луа виртуальная машина и все выполняется на ней. Но блин, какой смысл писать на луа, когда то же можно написать на си? Гибкость изменения скриптов без перекомпиляции? Сейчас, когда движок отделен от игры, скорость компиляции+линковки игровой части 0,57 сек. Кароч приведи весомые аргументы использования скриптов в маленьком игровом проекте.
Первый движок я делал как по образу интерфейсов dxsdk так и opengl. Главные две ошибки были в том что:
1. Я пытался сделать универсальный движок.
2. Как следствие пытался сделать максимально гибкий API.

ИМХО, проблема заключалась в неправильном понимании движка. Я его считал еще одним уровнем абстракции и обобщения более низкоуровневого функционала. На самом деле движок должен выполнять более конкретные задачи. Сейчас я считаю что делать универсальный движок в корне неверное решение - для этих целей есть UDK, Unity3D и прочие решения. Лучше определиться с парой-тройкой игр (или одной большой игрой), которые собираешься делать и исходить из того что нужно для этой игры. Не пытаться делать что то еще "на всякий случай" - только то что необходимо. Как следствие отсюда можно легко обнаружить что весь предполагаемый гибкий функционал движка превращается в вполне понятный жесткий последовательный набор действий, для воспроизведения/рендера игровой медии. Таким образом никаких мега гибких API как в тех же библиотеках dxsdk вообще не нужно. Если правильно подобрать набор тулз для запланированных проектов, можно в целом обойтись только ими и минимальными возможностями скриптинга. Для более сложных случаев возможно потребуется написать библиотеку с игровыми кодами.

Для маленького игрового проекта движок не нужен вообще - используй функционал dx напрямую из игровых кодов.

mr.DIMAS 11.01.2014 01:16

Ответ: [TrueHorror] - разработка
 
Появился вопрос про правильную организацию рендеринга. Алгоритм описывать долго, поэтому код( unordered_map<IDirect3DTexture9*,vector<Mesh*>> g_meshes )

Код:

for( auto groupIterator = g_meshes.begin(); groupIterator != g_meshes.end(); ++groupIterator )
    {
      IDirect3DTexture9 * texture = groupIterator->first;
      auto & meshes = groupIterator->second;

      g_device->SetTexture( 0, texture );

      g_textureChanges++;

      for( auto meshIterator = meshes.begin(); meshIterator != meshes.end(); ++meshIterator )
      {
        Mesh * mesh = *meshIterator;
        SceneNode * node = mesh->parent;

        if( !IsMeshVisible( mesh )) // frustum cull
          continue;
        if( !node->visible )
          continue;
        if( node->parent )
          if( !node->parent->visible )
            continue;
        if( !mesh->ib )
          continue;
        if( !mesh->vb )
          continue;

        D3DXMATRIX world; GetD3DMatrixFromBulletTransform( node->globalTransform, world );
        g_device->SetTransform( D3DTS_WORLD, &world );
        g_lightShader->vsc->SetMatrix( g_device, g_lightShader->vWorld, &world );   
        g_device->SetStreamSource( 0, mesh->vb, 0, sizeof( Vertex ));
        g_device->SetIndices( mesh->ib ); 

        g_device->SetRenderState ( D3DRS_ALPHABLENDENABLE, FALSE );

        // draw mesh with each light
        for( size_t j = 0; j < g_lights.size(); j++ )
        {
          Light * light = g_lights.at( j );       

          SetLightShaderFor( light );         

          if( !LightIntersectsMesh( mesh, light ))
            continue;   

          g_device->DrawIndexedPrimitive( D3DPT_TRIANGLELIST, 0, 0, mesh->vertexCount, 0, mesh->faceCount );

          g_dips++;

          if( j == 0 )
          {
            g_device->SetRenderState ( D3DRS_ALPHABLENDENABLE, TRUE );
            g_device->SetRenderState ( D3DRS_SRCBLEND, D3DBLEND_ONE );
            g_device->SetRenderState ( D3DRS_DESTBLEND, D3DBLEND_ONE );
          }
        }     
      }

Немного про алгоритм всё таки напишу. При добавлении меша в рендерер, он помещается в соответствующую группу с определенной текстурой - таким образом можно избежать подобной отрисовки

Код:

g_device->SetTexture( 0, A );
g_device->DrawPrimitive( ... );
g_device->SetTexture( 0, B );
g_device->DrawPrimitive( ... );

То есть сортируем меши по текстуре.

Каждый меш отрисовываем всеми источниками света с аддитивным блендингом.

Есть какие либо замечания\поправки\баги в алгоритме?

Samodelkin 11.01.2014 02:40

Ответ: [TrueHorror] - разработка
 
Группировать по текстуре, шейдерам, эффектам это правильно. Но вот рисовать что-то более одного раза без особой на то причины - странно. Нельзя заранее определить какие источники света действуют на примитив и список с ними передать в пиксельный шейдер, который сразу сложит результат яркости для каждого пикселя? Еще посмотри deferred shading - необязательно сразу освещение целиком в screen space переводить, но кое что оттуда можно полезное взять, например методы локализации источников света.

mr.DIMAS 11.01.2014 13:49

Ответ: [TrueHorror] - разработка
 
Цитата:

Но вот рисовать что-то более одного раза без особой на то причины - странно.
Код:

if( !LightIntersectsMesh( mesh, light ))
            continue;

Определяет пересечение ограничивающей сферы у света и AABB у меша.
Цитата:

Нельзя заранее определить какие источники света действуют на примитив и список с ними передать в пиксельный шейдер, который сразу сложит результат яркости для каждого пикселя?
Тоесть ты предлагаешь написать шейдер который будет принимать N количество источников света, а а в данный момент времени будут использоваться M? У меня раньше такой шейдер был, но там в любом случае на объект действовало 6 источников даже если их не существовало.

Mr_F_ 11.01.2014 13:50

Ответ: [TrueHorror] - разработка
 
Цитата:

Нельзя заранее определить какие источники света действуют на примитив и список с ними передать в пиксельный шейдер, который сразу сложит результат яркости для каждого пикселя?
Можно, но зато с мультипасс подходом можно каждый пасс куллить стенсилом. Хотя при скорости арифметики нынешних видях, это не даст особо профита. Другое дело - если в радиусе лайта надо семплить тень с каким-нибудь тяжёлым PCFом, но тоже не факт что динамик бранчинг по радиусу тут будет чем-то хуже стенсила.

Samodelkin 11.01.2014 17:50

Ответ: [TrueHorror] - разработка
 
Цитата:

Тоесть ты предлагаешь написать шейдер который будет принимать N количество источников света, а а в данный момент времени будут использоваться M? У меня раньше такой шейдер был, но там в любом случае на объект действовало 6 источников даже если их не существовало.
Да, 4-6 источников достаточно. Если их меньше чем в шейдере то просто заполняй нулями яркость оставшихся, а в функции шейдера которая их считает просто сделай условие, если сила источника == 0, то он сразу отбрасывается.

Цитата:

Определяет пересечение ограничивающей сферы у света и AABB у меша.
Ну вот нормально, можешь в редакторе карты еще сделать доп. функцию которая проверяет на одновременное пересечение более 6 источников света, чтобы мэперочел более равномерно источники расставлял.

mr.DIMAS 11.01.2014 17:53

Ответ: [TrueHorror] - разработка
 
Цитата:

Сообщение от Samodelkin (Сообщение 272401)
Да, 4-6 источников достаточно. Если их меньше чем в шейдере то просто заполняй нулями яркость оставшихся, а в функции шейдера которая их считает просто сделай условие, если сила источника == 0, то он сразу отбрасывается.

Уже сделал. На тестовой сцене со старым шейдером и алгоритмом отрисовки было 350 дипов максимум. сейчас максимум 100. epic win

Samodelkin 11.01.2014 19:35

Ответ: [TrueHorror] - разработка
 
Цитата:

Сообщение от Mr_F_ (Сообщение 272389)
Можно, но зато с мультипасс подходом можно каждый пасс куллить стенсилом. Хотя при скорости арифметики нынешних видях, это не даст особо профита. Другое дело - если в радиусе лайта надо семплить тень с каким-нибудь тяжёлым PCFом, но тоже не факт что динамик бранчинг по радиусу тут будет чем-то хуже стенсила.

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

Mr_F_ 11.01.2014 19:42

Ответ: [TrueHorror] - разработка
 
Цитата:

Это имеется ввиду если делать тени от всех источников света
от некоторых

Цитата:

Просто обычно в сцене для динамической тени выбирается какой то один источник (ну или два: точечный и директ, как например фонарь и солнце)
в современных играх обычно больше уже, в районе ~4х поинтов с тенями - уже не удивительно.

mr.DIMAS 11.01.2014 23:38

Ответ: [TrueHorror] - разработка
 
Проверьте на производительность, ну и на баги.

Из возможностей пока что только перетаскивание да бросание предметов, левая и правая кнопки мыши соответственно.

Напишите здесь фпс при разном количестве дипов. Буду очень благодарен

http://rghost.ru/51575426

ARA 12.01.2014 00:27

Ответ: [TrueHorror] - разработка
 
Цитата:

Сообщение от mr.DIMAS (Сообщение 272415)
Проверьте на производительность, ну и на баги.

Из возможностей пока что только перетаскивание да бросание предметов, левая и правая кнопки мыши соответственно.

Напишите здесь фпс при разном количестве дипов. Буду очень благодарен

http://rghost.ru/51575426

Intel Atom
GeForce 9400M
~45 fps

Понравилась рука с монтировкой свисающая с потолка в шахте.
Интересный комичный и трешовый ход напрашивается: Чел заходит в шахту, в какой-то момент с потолка свешиватся рука мертвеца с монтировкой. Игрок откладывает пару кирпичей, вооружается монтировкой из руки и идёт дальше.

Samodelkin 12.01.2014 01:00

Ответ: [TrueHorror] - разработка
 
60 fps везде.

Win 8.1 x64
i7 930
hd5870

Еще радует доплер эффект шагов когда чел начинает ускоряться в свободном падении :-D

Ящики и бочки берутся и кидаются. Мешки 25кг поднять не может. В пещере ближняя плоскость отсечения ацки выглядит. Если ее поправишь то можно и точку хвата предметов сделать ближе, а то руки какие то длинные получаются.

Возможно попозже потестирую на ноуте - тогда смогу разный fps при разных dip'ах проверить.

Кстати openal уже не скачаешь с сайта creativelabs - только со сторонних источников, походу они забили на него. Я думаю его лучше комплектовать с игрой сразу. Или вообще без него делать.

mr.DIMAS 12.01.2014 01:05

Ответ: [TrueHorror] - разработка
 
На моем говнобуке с Intel GMA 3150 выдает 17 фпс при 20 дипах, и 12 при 52. Только недавно про него вспомнил :)

Samodelkin 12.01.2014 04:48

Ответ: [TrueHorror] - разработка
 
Win 7 x32
Dual Core 2.2 ГГц
NVIDIA G105M
1366x768 (предыдущий конфиг с hd5870 был в 1080р)

60 fps, когда dip'ов больше 20 то 30 fps.
Опять же нужно убрать синхронизацию чтобы выяснить какое конкретно значение между 30 и 60 показывать будет.

Вообще производительность на лицо, карта то вроде всё более детальная становится, а скорость уже вполне приемлемая, когда первый раз запускал там слайдшоу было меньше 10.

Для сравнения Dear Esther на этом ноуте нормально идет на максимуме.

tirarex 12.01.2014 17:20

Ответ: [TrueHorror] - разработка
 
vista x32
Dual Core 2.2 ГГц
ati mobility radeon hd 4650
1366x768

всегда и везде 60фпс иногда 61

mr.DIMAS 13.01.2014 12:52

Ответ: [TrueHorror] - разработка
 
Научил движок постэффектам.

Но сразу картинка стала мыльной как на пс3. Все из-за того что текстура создаваемая как рендертаргет создается кратной степени двойки. Как с этим бороться. Вообще какие подводные камни есть при рендеринге в текстуру.

Mr_F_ 13.01.2014 13:03

Ответ: [TrueHorror] - разработка
 
Цитата:

Все из-за того что текстура создаваемая как рендертаргет создается кратной степени двойки.
не надо так делать, надо создавать размером с экран по честному.
ещё, если юзаешь DX9, то при чтении экранной тексы в постэффекте, надо сдвигать текскоорды на полтекселя, иначе тоже будет мыло: http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx

mr.DIMAS 13.01.2014 13:11

Ответ: [TrueHorror] - разработка
 
Теперь создаю текстуру так

Код:

D3DXCreateTexture( g_device, g_width, g_height, 1, D3DUSAGE_RENDERTARGET, D3DFMT_X8R8G8B8, D3DPOOL_DEFAULT, &g_renderTexture );
g_width, g_height - разрешение

Квад так( спасибо за ссылку )
Код:

g_device->CreateVertexBuffer( 6 * sizeof( Vertex2D ), D3DUSAGE_WRITEONLY, D3DFVF_XYZ | D3DFVF_TEX1, D3DPOOL_DEFAULT, &g_quadVB, 0 );

  Vertex2D vertices[ ] = { Vertex2D( -0.5, -0.5, 0, 0, 0 ), Vertex2D( g_width - 0.5, 0 - 0.5, 0, 1, 0 ), Vertex2D ( 0 - 0.5, g_height - 0.5, 0, 0, 1 ),
                          Vertex2D( g_width - 0.5, 0 - 0.5, 0, 1, 0 ), Vertex2D( g_width - 0.5, g_height - 0.5, 0, 1, 1 ), Vertex2D ( 0 - 0.5, g_height - 0.5, 0, 0, 1 ) };
  void * data = 0;
  g_quadVB->Lock( 0, 0, &data, 0 );
  memcpy( data, vertices, sizeof( Vertex2D ) * 6 );
  g_quadVB->Unlock( );

Никакого мыла нет теперь.

А на сколько производительность падает при отрисовке сначала в текстуру, а затем квада с текстурой?

Mr_F_ 13.01.2014 13:49

Ответ: [TrueHorror] - разработка
 
Цитата:

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

mr.DIMAS 13.01.2014 18:32

Ответ: [TrueHorror] - разработка
 
Вложений: 6
Проверьте пожалуйста работу постэффектов. В особенности меня интересует работа на интеловской графике и нвидиа.
В самой игре теперь можно умереть. Урон наносится пока только объектами брошенными( мешок с 3 метров на бошку, бочка :-D ).
Так же есть недоинвентарь( на клавише Tab ).
Добавил звуки ударов для объектов.
Ну и как обычно пишите фпс.

http://rghost.ru/51617339

Samodelkin 13.01.2014 19:51

Ответ: [TrueHorror] - разработка
 
Все нормально работает.
60 fps на hd5870.
Физика стала лучше, хотя пока по прежнему все кажется надутым и невесомым.
Когда сдвигается изображение в пост эффекте, то кусок верхней части оказывается внизу. Если вверху было яркое небо, а внизу темная земля то яркая полоса особенно неприятно выглядит. Один из вариантов как это можно быстро поправить: сделать дополнительный пост эффект затемнения (покраснения если причиняется вред игроку) по радиусу, чтобы краев не было видно.
Проблема с буфером глубины по прежнему заметна, разве рекомендации выше не помогли? Тут вроде не такие уж большие расстояния.

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

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

mr.DIMAS 13.01.2014 20:35

Ответ: [TrueHorror] - разработка
 
Цитата:

Еще хотел спросить будут ли предусмотрены оптимизирующие ограничения на прорисовку карты чтобы теоретически можно было делать неограниченные локации, или будет определенный лимит по размеру?
Скорее всего будет ограничение по размеру. И по количеству источников света, до тех пор пока не сделаю octree или bsp для большой геометрии типа меша уровня, можно еще pvs добавить. но блин это сложные алгоритмы( сложные - потому что я с ними никогда не имел дела :-D).

Цитата:

У тебя кстати меши для коллизии берутся прямо из геометрии карты как есть, или предусматривается более упрощенный вариант?
Берутся прямо из геометрии карты. Буллет очень хорошо оптимизирован, поэтому на расчет физики уходит очень малая часть времени кадра.

mr.DIMAS 13.01.2014 23:49

Ответ: [TrueHorror] - разработка
 

Arton 14.01.2014 02:26

Ответ: [TrueHorror] - разработка
 
Цитата:

Сообщение от mr.DIMAS (Сообщение 272499)
Проверьте пожалуйста работу постэффектов. В особенности меня интересует работа на интеловской графике и нвидиа.
В самой игре теперь можно умереть. Урон наносится пока только объектами брошенными( мешок с 3 метров на бошку, бочка :-D ).
Так же есть недоинвентарь( на клавише Tab ).
Добавил звуки ударов для объектов.
Ну и как обычно пишите фпс.

http://rghost.ru/51617339

Всё работает.
Курсор опять не убран.
FPS 75
GF GTS 450 GDDR5 1Gb
Убил себя мешком по голове.
Физика не отлажена, коробки часто не могут остановится и заглючивают на одном месте, из-за этого раздражающий стучат.
Зашёл в туннель, увидел торчащую из стенки руку с ножом, собирался отложить кирпичей но передумал.
Свалился за карту.

Уровень сам полностью делала?

Цитата:

Сообщение от mr.DIMAS (Сообщение 272520)
...

Возможно люди увидели только скриншоты.
Я сам только со второго захода прочитал пост и разглядел ссылку :-)

Randomize 14.01.2014 14:54

Ответ: [TrueHorror] - разработка
 
Персонаж слишком высокий.
И да, курсор реально бесит.

В тоннеле есть что нибудь? Просто там темно, я попробовал бежать наобум но заплутал видать. Или фонарик может есть какой?
На будущее - пиши в readme управление.

mr.DIMAS 14.01.2014 15:23

Ответ: [TrueHorror] - разработка
 
Цитата:

Сообщение от Randomize (Сообщение 272540)
Персонаж слишком высокий.
И да, курсор реально бесит.

В тоннеле есть что нибудь? Просто там темно, я попробовал бежать наобум но заплутал видать. Или фонарик может есть какой?
На будущее - пиши в readme управление.

У меня уже готово еще 2 локации. Одна из них будет прогружаться когда в тоннель заходишь.

Я не включаю их в игру потому, что там уже начинается основное действие, а движок еще не отлажен. Поэтому пока только уровень "Прибытие" для тестов.

Про управление в readme - обязательно сделаю.

mr.DIMAS 10.02.2014 22:12

Ответ: [TrueHorror] - разработка
 
Вложений: 5
По-тихому пилю сюжетку - проследить за сюжетом можно по запискам найденным на уровнях. Уровня пока только 2 :( .

Геймплея пока от силы минут на 10-15.
Появилась наконец-таки хоррор атмосфера. Скримеры в наличии.

Скачать

Upd: Скрины

ABTOMAT 10.02.2014 22:53

Ответ: [TrueHorror] - разработка
 
Цитата:

Сообщение от mr.DIMAS (Сообщение 272520)

Посмотрел скрины. Всё такое тёмное, что пришлось выкручивать яркость на максимум, чтобы что-то разглядеть. Вообще не уважаю когда в играх темно и ничего не видно. Качать расхотелось.

Хотел правду — держи. Обидеть не хотел.

mr.DIMAS 10.02.2014 23:07

Ответ: [TrueHorror] - разработка
 
Цитата:

Посмотрел скрины.
Посмотрел старые скрины. Специально для графодрочеров обновил пост.

Цитата:

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

И вообще. Главный герой шарится по шахте с одной только зажигалкой. Етить о каком освещении можно говорить в заброшенной шахте?

Привыкли к скайриму и обле с его освещенными подземельями - вот и залупаетесь на темноту.

Также хочу напомнить, что жанр игры - хоррор - он обязывает делать все темным. Главная фишка не видеть что тебя ждет. Это и пугает в основном

tirarex 11.02.2014 14:12

Ответ: [TrueHorror] - разработка
 
Потрачено ?

Wegox 11.02.2014 17:49

Ответ: [TrueHorror] - разработка
 
Поиграл:) ну, в принципе неплохо...

Музыка и вообще все звуки очень громкие, ну зашкаливает аж...

Идея с бумажкой, которая преследует меня с начало игры, постоянно исчезая между полигонами:-D это очень круто!:super: прям "SCP" как тебе это удалось Я не знаю, но получилось круто.:ok:

Но Я её всё таки взорвал.:P

Надпись которая с верху, красная, спустить на середину экрана - сделать больше!
Я например не сразу понял, что это для меня написано...:-)

Частицы хавают FPS! сделай реже их что-ли.




Не, не хочу сказать что прям Игра! но факт, что, что-то похожее на игру тут, да Я уже вижу!:ok:

Arton 11.02.2014 21:02

Ответ: [TrueHorror] - разработка
 
Много раз недоумевал почему не могу пройти дальше, оказалось фича от разраба, невидимую стену не пройдёшь пока не прочитаешь, не сделаешь что-то. Не надо так!
Не понимал как брать предметы, жму ЛКМ + E и нифга, оказывается надо поднять предмет ЛКМ, а потом уже жать E.

Взорвал бетон, то ли сдох, то ли что, всё красное, выключил игру.

FPS 76 Полёт нормальный. Покачивание камеры лучше убрать, как то не очень.

Молодец! Так держать! :super:

P. S. Wegox, тебя на видео неслышно. Только как в хоррорах, на фоне демонический голос скрипит, на периферии слуха.

P. P. S. mr.DIMAS, держи урок по моделированию пещеры, довольна эффективный способ и ещё полезное. Для травы и пеньков используй вот это #589.

Nex 12.02.2014 12:48

Ответ: [TrueHorror] - разработка
 
Цитата:

Сообщение от Wegox (Сообщение 274157)

Этот еле слышимый голос похож на бурление живота у ГГ.

ABTOMAT 12.02.2014 15:30

Ответ: [TrueHorror] - разработка
 
Цитата:

Сообщение от mr.DIMAS (Сообщение 274128)
Посмотрел старые скрины. Специально для графодрочеров обновил пост.

Я где-то говорил, что меня беспокоит качество графики? Нет. Я вполне трезво понимаю, что один человек крузис не сделает (и сам такой же). Но можно избавить игрока от ненужных неудобств? Вроде и правда посветлее стало.

Цитата:

Сообщение от mr.DIMAS (Сообщение 274128)
И вообще. Главный герой шарится по шахте с одной только зажигалкой. Етить о каком освещении можно говорить в заброшенной шахте?

Привыкли к скайриму и обле с его освещенными подземельями - вот и залупаетесь на темноту.

А ещё много где:







А почему? Вот ведь правда: там источника света нигде нет, а свет откуда-то есть. Нереалистично блин! Зато рука не тянется к регулировке яркости экрана.

Почему в (почти) всех играх за всю игру персонажи ни разу не посрали? Потому что это не улучшает игру. Почему в шутерах можно перезарядить полупустой магазин и положить остаток, соответственно, в рюкзак, а потом при перезарядке в загашнике только целые магазины (если только патронов достаточно на целый)? Нужно же было патроны пальцами досовать до целого в тот, который вынули! Почему аптечки в играх "съедаются" мгновенно, да ещё и лечат переломы и разрывы тканей (где вообще без хирурга не обойтись) ? Потому что это всё дополнительные неудобства, которые взамен ничего интересного не предлагают. Реализм и нудятина — это разные вещи.

А да кстати ГГ с зажигалкой не боится взрыва метана?

Цитата:

Сообщение от mr.DIMAS (Сообщение 274128)
Также хочу напомнить, что жанр игры - хоррор - он обязывает делать все темным. Главная фишка не видеть что тебя ждет. Это и пугает в основном

А вот нифига. DeadSpace, например. Отличный хоррор, но там всегда светло (видно, куда идёшь). Как же так? Этого добились хорошей атмосферой, грамотно расположенными припасами, построением битвы.


Часовой пояс GMT +4, время: 06:42.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot