Трехмерный стратежный долгострой (уже не знаю какой пост по счету)

С момента публикации последнего поста прошло полгода.
Чем занимался — непонятно.
Наверное, у всех такое бывает, что-то делаешь-делаешь, а оглянешься назад — результата нет.
Попробую вспомнить, что делал.

1. Заменил kd-дерево на bsp-дерево.
Вообще, kd-дерево, представляет собой частный случай bsp-дерева, но разбиение пространства производится только вдоль осей координат.
Для моей геометрии это почти всегда отлично работает, а процедура построения заметно упрощается. Но вот как-то стукнуло мне в голову попробовать сделать кривые поверхности (бублики там, арки всякие) и кд-дерево «село в лужу».
Поэтому решил не извращаться, а сделать нормальное БСП.
Потом оказалось, что если использовать «каноническое» БСП (разбиение по плоскостям полигонов), то получается слишком много распилов и скорость рендера падает.

Пришлось шаманить.
В итоге окончательная процедура выбора плоскости разбиения выглядит так (для текущего набора вершин и полигонов):
1. Для каждой вершины проверяем три плоскости вдоль осей (как обычное кд-дерево).
2. Для каждого полигона проверяем его плоскость.
3. Через каждое ребро каждого полигона проверяем две плоскости (две точки ребра + нормаль одной из точек). Вот тут, наверное, непонятно. В общем, для «бубликов» проверяем радиальные плоскости.
4. Из всех этих плоскостей выбираем наилучшую, по формуле Math.abs(pos-neg)+div*128, где pos и neg — количество полигонов с каждой стороны плоскости, а div — количество разрезанных полигонов. Чем меньше полученное значение, тем лучше.

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

А «кривые» поверхности я потом выбросил, не очень хорошо смотрелись :)

2. Долго ковырял отрисовку треугольников для динамики.
Изначально, у меня использовалась «стандартная» процедура рисования. Считаем дельты, интерполируем по ребрам и т.д.
Потом я прочитал вот эту статью: www.devmaster.net/codespotlight/show.php?id=17
Ну и загорелся, конечно, применить данный метод на практике.

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

Тут надо сделать небольшое отступление.

У меня на треугольнике интерполируется 8 значений (Z, RGB, UV-обычные и UV-glow). Получается на каждое ребро треугольника надо тащить эти 8 значений и dx ребра, да еще и делить все это на каждой горизонтальной полоске.
Медленно.

В вышеописанной статье предлагается другой алгоритм (точнее, не предлагается, но подразумевается). Для каждого значения считаем «градиенты» и для каждого пиксела на экране можно использовать формулу вида value = addv + x*dvx + y*dvy, которая, при этом, хорошо оптимизируется (до одного сложения на пиксель).

НО! эти градиенты неточные, или наоборот, слишком точные.

Проблема заключается в интерполировании освещения. Иногда, очень редко, особенно когда смотришь на очень узкий полигон, освещение на краю становится отрицательным (например, -0.000001) и, в результате, в темной области экрана вдруг появляются ослепительно белые пиксели. Проверять каждый пиксель на отрицательные значения освещения медленно и поэтому это БОЛЬШАЯ проблема.

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

3. Тени.
Про тени я уже писал, но после ковыряния с рендерилкой треугольников попробовал еще раз сделать стенсильные тени и еще раз их выбросил.
В принципе, можно было бы добить их за счет оптимизации других частей рендера, но источников света у меня много (сейчас уже примерно 5 на модельку) и жертвовать половиной производительности не хочется.
Поэтому остались фейковые проекционные тени «сверху».

4. Glow.
Сделал для моделек glow-карты. Glow «нестандартный», блура нет.
Изначально сделал с блуром, наверное, неделю оптимизировал и так и сяк, но потом выбросил.
Фактически сейчас это просто аддитивная текстура, которая накладывается без учета освещения. На производительность практически не влияет, зато у алиенов светятся глазки в темноте :)

5. Сама игра.
— Замоделил, запек, рассчитал, заскриптовал все уровни, кроме туториала.
— Закончил все модельки со всеми анимациями. От кнопок и бочек, до алиенов и маринов.
— Сделал движущиеся и падающие платформы.
— Написал весь AI.
— Стреляющие пацаны получились особо дерзкими, прячутся за углами и, вообще, не дают себя в обиду.
— «Умная» камера, игровая логика и т.д. практически готовы
— Доделал системы частиц. Взрывы, пар, кровиЩЩа…

6. Всякое.
Куча оптимизаций, связанных с рендерингом, куллингом и анимациями.
Тут надо долго и скучно рассказывать.

Еще делал «крутую» воду и не менее «крутой» объемный туман.

За основу для воды взял вот эту статью: freespace.virgin.net/hugo.elias/graphics/x_water.htm
Только круги ходили по плоскости воды и использовались для искажения «подводного» изображения. Круто, конечно, но очень уж медленно и слишком много шумов :(

Туман делался по этой статье: algolist.manual.ru/graphics/effect/fog.php
Опять же, получилось медленно и я не придумал как его использовать на уровнях.

Все выбросил.

7. Собственно, самое главное :)
Начал рисовать GUI.
Вспомнил старкрафт2, посмотрел пару скриншотов, попытался сделать нечто подобное.
Оказалось, это офигеть как трудно, рисовать всякое такое.
Вот на эту картинку у меня ушло 3 или 4 дня.
А мне таких картинок надо несколько экранов.

Поэтому просьба, если кто умеет рисовать, посмотрите эту тему:
flashgamedev.ru/viewtopic.php?f=17&t=3525
  • +17

Комментарии (68)

0
Клёво!
0
это все софтварный рендер на флеше?
+3
Ну да, если 8 месяцев ковырять рендер — можно добиться неплохих результатов :)
0
респект, не каждый девелопер сможет такое написать :)
0
Жду не дождусь когда смогу поиграть в эту игру.
Очень круто и интересно.
Жаль в этот раз нет демки.
0
Раз демо нет, можешь хоть скормишь нам 10 секундный ролик? :)
0
www.flashgamelicense.com/view_game.php?from=dev&game_id=18294
Вот тут можно посмотреть свежую демку.
Правда, надо стукнуть мне PM, чтобы я зафоловил.
Как-то уже боязно на megaswf выкладывать :)
0
Да, забыл.
Даю доступ только имеющим аккаунт здесь.
У кого нет — сорри.
0
Если можно, то мне пожалуйста, www.flashgamelicense.com/view_account.php?username=Disco+Fish
0
Добавил. Должно быть доступно.
Home — конец хода, кнопка не работает.
0
ничего не понял из кучи слов и математических объяснений, но очень хочется посмотреть что вышло) так что если можно, www.flashgamelicense.com/view_account.php?username=nonamez
0
реквестирую доступ :))
www.flashgamelicense.com/view_account.php?username=dmsovetoff
0
и меня плиз:
www.flashgamelicense.com/view_account.php?username=frees
0
Ваабще не понимаю зачем 3D во флэше, но дико интересно посмотреть
0
www.flashgamelicense.com/view_account.php?username=Rigo

Спасибо.
0
+1 Хочется посмотреть
www.flashgamelicense.com/view_account.php?username=adzh
0
www.flashgamelicense.com/view_account.php?username=Kishi
и мне и мне,
когда то фанател от инкубейшена
0
О, даже пощупать можно будет, спасибо :)

www.flashgamelicense.com/manage_account.php?username=Midnight
0
+1
www.flashgamelicense.com/view_account.php?username=jarofed
0
www.flashgamelicense.com/manage_account.php?username=imnotagoblin
0
привет, люблю смотреть на твои достижения!
оч. хочу посмотреть www.flashgamelicense.com/view_account.php?username=alex-orleanski
0
Можно и мне доступ?
www.flashgamelicense.com/manage_account.php?username=Gaml
0
Дай посмотреть плиз :)

www.flashgamelicense.com/view_account.php?username=zakhej
0
Наверное, у всех такое бывает, что-то делаешь-делаешь, а оглянешься назад — результата нет.
ооо, это прям мой случай D:

Тоже хотелось бы глянуть свежак)
0
www.flashgamelicense.com/view_account.php?username=z3lf
0
Я думал ты умер. Ан нет:)
0
:D
+1
Все очень здорово!
Правда такими темпами разработки, еще через пол годика можно будет смело начинать все переписывать на Molehill :) Не затягивай! Мы все очень ждем релиз, и твоего перехода на Molehill с этой игрой не переживем :P
0
Так вот и пытаюсь ускориться.
Специально сделал пост, чтобы пропиарить тему на форуме :)
0
Все круто, очень круто.
Только мне вот кажется, гуй как в СК2 тут слабо подходит. Вы вспомните как выглядит СК2 — «обезжиренный попкорн». Куча неоновых ламп, все чистенько, ржавчины либо нет, либо очень мало. Там даже пустыня выглядит чисто. А у вас текстуры такие, что имхо больше подходит ченить из Вархамера.
+1
… или fallout.

А вообще, я считаю интерфейс вышел вполне удачным. 3 дня это конечно многовато, но туда наверное было включено время на подбор стиля. Если стиль и шрифты уже подобраны, то все остальные элементы должны рисоваться быстрее.
0
Если в таком же стиле, имея на руках PSD можно за день все окошки нарисовать.
+1
Ну когда уже, когда? :)
0
А игрушка кстати здоровская будет. Правда мне все кажется мелким, и все хотелось приблизить...) Провалившийся мост — жоzко.
0
Круто. Страшно подумать что ты сделаешь с молехилом))))
0
Кто еще поигрался — отпишите хоть пару слов.
Иначе создается впечатление, что все ожидали крайзис3, а получилось УГ :)
0
кризис делали на флеше? я всегда знал.
0
Я так и не дождался загрузки :( долго ждал, белый экран и все… там прелоадер есть?
0
Нет прелоадера.
11 метров и потом секунд 30-40 считает всякое.
Демка сырая, потому сначала и не выложил.
0
Офигенно! Более всего удивило, что на моем тормознутом рабочем компе тормозов не заметилось. А тут даже простейшие флешки тормозят.

Не совсем понял, что делать. Поперемещал роботов по игровому полю. Клацнул END TURN но ничего не произошло…

Выглядит все красиво. И интерфейс в тему.
0
Я там выше писал:
Home — конец хода, кнопка не работает.
:)
0
Аналогично: походил маринами (почему все медики?), ткнул енд турн и ничего
0
О вот сейчас на кнопку нажал) еле заметил эту руку над ней
0
Яху я замочи первого монстра)
Вылезла на секунду ошибка
RangeError: Error #1506: Указан недопустимый диапазон.
at ryz::HxSoftRender2/RenderZeroLine()
at ryz.engine3d.render::TRender/DrawZeroLine()
at ryz.gamelogic2.level.moveNet::TMoveNet/Render()
at ryz.gamelogic2.level::TLevel/ZeroLevelRender()
at ryz.gamelogic2::TGSLevel/Step()
at ryz.gamelogic2::TGame/Step()
at softRender2/onFrame()

Но это просто нереально круто!!!
0
Home — конец хода.
Ошибку буду править, спасибо.
0
http://www.flashgamelicense.com/view_account.php?username=darkvam

Если позволите троллю оценить. Пока не забанили.
+1
Спасибо. Пострелял, побегал — всё очень круто и супер быстро 40-50 фпс. Ты гений.)

Чего ооочень не хватает на мой взгляд — полностью свободной карты — например при нажатии на колёсико мыши (кпонку колёсика). А то постоянно ощущение неудобности обзора. А, ну и на скролл желательно повесить флаги — для плавности.
0
*камеры.
0
Если сделать свободную карту — при определенных углах обзора будет жутко муарить. Можно нажать F1 и посмотреть.

Чтобы от этого избавиться — надо переписывать, добавлять мипы, лоды и т.д. Уже сил нет :)
Скролл — потом, когда с гуи определюсь.
0
Муарит — жутко дёргает камеру. Я думал муар это чтото типа блюра:) Один маленький косяк — при наведении на перса нужно будет немножко сдвинуть тултип — мышка закрывает. Но я думаю это ты и сам знаешь. По геймплею пока конечно сложно понять — что и как, но скажу сразу — интерфейс зачотный и очень удобный — я сразу разобрался. Не вздумай никаму ничего заказывать — сделаешь сам в 100500 раз лучше.

Есть вопрос касательно движка — я незнаю как точно это называется, но во многих играх используется. Сильно ли накладно будет налепить большие текстуры для разнообразия той же воды например? Тоесть, смешиваение обычных текстур и сверху в 4-8 раз большая текстура какая-нибудь интересная.
0

Муарит — текстура идет «кругами». Когда текстура далеко — на ней слишком сильные искажения. Надо уменьшать разрешение текстуры и динамически выбирать нужную.

Про тултип я пока еще не уверен. Может вообще уберу, поэтому он тестовый.

Про воду не понял. Есть примеры какие-нибудь?
Скрины или просто названия игр.
0
Странно — у меня камера дёргалась как бешеная

Сложно было найти пример, где это явно видно. Ну вот тут можно разглядеть:

Нижняя серая глаткая текстура — посмотри внимательней — имеет множество оттенков-пятен. Это делается наложением бОльшей текстуры.
0
Ясно, понял.
Ну, с водой можно такое попробовать.
0
Не должно дергать камеру.
Нажал один раз F1 — переключил в свободный режим и елозишь себе мышкой.
Сейчас проверил — все работает.
0
Да, видно я удерживал:) Я — дерево)
0
Все можельки — интересный и красивые, особенно это касается врагов и собственно маринов. Анимации отличные, мне сразу же понравилась та хрень — стреляющая как гаубица или мартира:)
0
У меня по краям флешки рамка из артефактов, так и должно быть?
И еще так и не понял почему больших, зеленых и с клешнями нельзя мочить.
0
Рамки не будет, все никак руки не дойдут подогнать клиппинг.
Опять же потому что не определился с интерфейсом.

Крабов можно валить только в спину.
По этому поводу будет отдельный уровень — «Убить краба» :)
0
24fps на моем нетбуке. Отлично! (:
0
Посмотрел. Круто смотрится. Не тормозит в т.ч. на celeron 1.9 2006 года, где тормозит все.
А по игре надо с камерой надо что-то делать…
0
Что с камерой не так?
0
1) Мало видно очень
2) Неинтуитивно контролируется
В итоге ощущение, что на шее гиря и поэтому головой сложно вертеть.

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

Для второго как вариант: вращение камеры мышкой с зажатой кнопкой, движение при поднесении курсора к краям экрана.
+4
Поскольку «встречают по одёжке», будем сейчас говорить об этом.
1. Своеобразная прозрачность слишком своеобразна, выделил круглую область воды.
2. По краям создаётся рамка в 10px, накоторой остаются артефакты (куски предыдущего рендера).


3. Не знаю как остальным, но мне приятнее смотреть на всё это с близкого расстояния, даже не смотря на разрешение текстур и детализацию моделей. Привёл в пример картинку монстров с двух ракурсов.
4. Когда вставил вырезанную из дальнего ракурса платформу с монстрами, понял, что не так она и плоха сама по себе. Вывод: убрать нахрен воду, которая всё портит. Пихни лаву, сделай её плоскостью, без «прозрачности», сделай под неё своеобразное освещение окружающего мира, запеки его в тексуры.
5. Красными точками отметил какие текстуры сильно раздражают.
Заметка: на этой картинке потом увидел искажение текстуры пола между большим монстром и маленьким слева.



В придачу к пункту 3:
Слева картинка с подвинутой камерой, справа картинка со стационарной камерой, увеличенная вдвое.
Издалека общая картина выгладит именно так, как куб справа, к сожалению.


На счёт камеры: на сколько я понял, она может передвигаться только по каким-то своим квадратам (рывками), это немного раздражает вкупе с тем, что нельзя зажать вместе клавиши «вправо» и «вверх» чтобы она шла по диагонали, а потом отпустить одну, чтобы она продолжила идти в одном направлении с той же скоростью.
Впечательние: камера «неказистая».
Надо бы убрать ожидание между нажатием кнопки и движением камеры, кроме того двигать её независимо по осям (A,D — горизонталь; W,S — вертикаль)
так же можно ограничить степень свободы поворота (относительно полной), но дать возможность игроку хоть как-то её поворачивать.

PS: Мы, люди знающие, как это сложно, восхощаемся от одного вида и понимания проделанной тобой работы, ты действительно хорош, но игроки этого не знают и будут смотреть только с точки зрения «нравится/нет», потому я бы на твоём месте показал работу кому-то «не в теме» и послушал бы его. У меня была такая ситуация с тем, что я сейчас делаю, знакомые говорили «интересно, но что тут особенного», а знакомые разработчики одобряли проделанную работу.

PPS: надеюсь, чем-нибудь помог :)
0
Вода мне нравится, но пролезающие пикселы в прозрачности — бесят. Я тоже увидел, но демал — это своеобразие движка и исправление дастся кровью:)

Мне тоже приятно играть с камерой вблизи, поэтому ещё такой совет насчёт камеры, чтобы избежать лишних для игрока — WASD & Arrows для управления камерой.
Я как любитель игр серии Command & Conquer заметил отличную камеру в одной из последних игр(приводил скриншот игры выше). Вращение камеры — лево право свободно при нажатии колёсика мыши. А при прокрутке колёсика меняется высота и угл обзора, т.е. чем выше — тем больше угол обзора. Этот вариант мне кажется просто мега удобным.
Но всё это — просто раздумья. Наверное это всё жутко сложно реализовать в настоящий момент.

А модели слишком крутые чтобы их прятать удалённой камерой:)

(идея с лавой хороша, но я бы и воду оставил для разнообразия)
0
Зелёная текстура, на мой взгляд, просто сильно детализирована. Уменьшить разрешение?(сказал как нуб ^__^)
+2
Осторожна, внизу многа букав

Так как игру не играл могу сказать только по графике. Цветное освещение вижу хорошо пошло, хотя имхо надо подшаманить так чтобы играть на контрастах. Сейчас освещение как то замылено. Еще глаз не цепляет детали потому что всё в деталях. Спрайты (пара треугольников или квад если у тебя двиг держит + прозрачность) реально реализовать? У тебя частицы на чем? Точками? Вобщем если спрайты есть — я бы не удержался и на твоём месте набодяжил всякие провода, мусор в углах, какие нибудь бумажки. Буквально по пять — шесть спрайтов в кадре. Зато блин детальки. Детальки решают. Не знаю где у тебя происходит битва. Меня квейк этим и убивал что там не было деталей, бегаешь по безликим одинаковым корридорам всегда. По любому двиг позволяет держать разные текстуры для разных левелов (хотя бы так). Например первый левел — вот это болото (про него отдельно), на стенах некоторых ящики с распределительными щитами или какой нибудь подобной хренью, в углах провода кусками и мусор. Потом например поднимаешься выше по зданию (опять же я понятия не имею о чем у тебя игра) там уже что то типа жилых отсеков. Кароче это сильно разнообразит игру в купе со спрайтами и грамотным цветным освещением.

Теперь про то что имеем. Во-первых чё мешает заполнять нулями рамку эту с муаром? Если мешает — выдвинь битмап и уменьши разрешение флешки. Я конечно не знаю как и куда ты рисуешь пиксели (ты вроде и не рассказывал) но вроде и так и этак можно сделать то что я написал для устранения проблемы (предложение такое). Дальше идем. Вода. Как правильно заметил MidnightOne в топку её если она жрёт ресурсы. Анимированная лава решит вопрос. К тому же получишь контрастные границы дорожек (они будут залиты светом от лавы). Откуда там лава? А откуда там пришельцы? Сай фай же. (еще вариант зеленая радиоактивная жижа, только тогда вообще всё сольется в единый зеленый комок трешевых ужастиков) Тень от монстров — я на картинке вижу очень чёткую тень, хотя от стен отходит мягкая. Надо либо там менять либо здесь. Если стенсил не пошёл, значит мягкая везде. Вот такие предложения по тому что вижу.

С момента публикации последнего поста прошло полгода.
Чем занимался — непонятно.
Наверное, у всех такое бывает, что-то делаешь-делаешь, а оглянешься назад — результата нет.

Пол года/год/больше это для флеш игростроя пипец я сам на себе опробовал уже. Игроки всё равно не оценят. Главное геймплей, если торкает то даже недельная разработка будет круче чем навороченный супер енджин. Тут вот многие предлагают тебе не брать художника (художники сделали из того же UE3 конфетку, чисто визуально для потребителя, хотя без опытных рук движок выглядел бы довольно обычно) и пр. Имхо это не правильный подход для такой разработки (код ядра занимает черт знает сколько времени). Тебе как человеку которому нравится копать двиг стоило взять художника и левел-дизайнера/гейм-дизайнера. Вроде был уже такой разговор. Но ты стремишься всё одолеть самостоятельно, а потом спрашиваешь как так пол года прошло. Так может и год пройти и десять, при этом хз что в конце получится. Вот сам ответь что мешало тебе взять этих людей и ускориться в несколько раз? Щас уже бесполезно, потому что если и брать художника то имхо на полный цикл, чтобы он изначально подобрал стиль гамму и всё что можно. Если брать левел/гейм дизайнера то тоже не на тюнинг юнитов в конце разработки. Да собсно ты и сам всё понимаешь, мне просто интересно по каким причинам ты всё делал сам.

П.С.: никакого негатива в словах сверху нет и не надо его там искать. Труд титанический, всё здорово, но имхо командные работы такого высокого уровня приводят к куда более выдающимся результатам и будет печально если вдруг этот проект останется не замеченным игроками по причинам не имеющим отношения к движку (геймплей/графика)(основные такие вещи для игр)(я не сомневаюсь что автор крут во всех этих делах и без помощи так что это не наезд). Имхо опять же, предложение, взять выпустить то что есть ничего не меняя назвать это допустим «инкубатор часть первая» и взяться за тулзы. Написать тулзы, пригласить команду. Написать быстро на готовом софте сиквел (месяца за три максимум) до выхода молехила. С большим числом уровней (геймдиз/левелдизайнер в помощь), с красивой графикой (художник/моделер). А сам будешь тюнить тулзы и наверное заниматься ИИ.

П.П.С.: Если у кого появятся вопросы ко мне конкретно давайте сразу пару вещей определю. К предыдущему проекту (пол года его бодал) брал геймдиза без опыта — не срослось (не оценил он свои силы, нагрузку, время). Предлагал художнику работу — опять не срослось. В итоге пол года бросался из кода в дизайн из дизайна в художку. Лично мой вывод — не тру. Совсем не тру. Работы много, часто получается так что тупо нет каких то графических ресурсов чтобы писать код или тупо нет кода чтобы писать дизайн. В итоге когда всё собирается вместе оказывается что здесь можно было сделать иначе, а там какую то вещь совсем убрать и вот такой тяни-толкай на протяжении всего цикла. Причем по личным ощущениям — жесть, а игрок или другой разработчик жести особо не замечает и не должен. Как итог — завышенная оценка собственной игры, хотя ничего суперского и близко нет. Или еще чего похуже. Кароче не для мухобоек надо делегировать задачи. У меня не получилось, поэтому сюда и пишу мысли о том что такой долгострой (обсуждаемый здесь) следовало снабдить командой, чтоп точно выстрелил. Готов вступить в полемику с любителями работать единолично над большими проектами.

П.П.П.С.: Почему столько уточнений что это не негатив, потому что в последнее время на блогах любят потроллить на разные темы. Давайте не будем.
0
Накопилось много комментариев, спасибо за интерес к проекту.
Попозже напишу пост с ответами сразу всем.
Расскажу, почему всё именно так и т.д.
0
www.flashgamelicense.com/view_account.php?username=shotylo
Твои предыдущие демки были очень высокого качества.
Игру делай на свой вкус, он у тебя просто восхитителен.
Буду рад взглянуть хоть одним глазком.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.