tduk, Разве что кто-то, у кого есть архив, зальет его. Мой ПК радостно умер пару недель назад (если точнее, умер его хард) вместе со всеми данными. Только исходники движка успел стащить. Доступ к копии архива будет только через три недели.
Небольшое обновление. Новый движок потихоньку получает функционал, которого (лично мне) жутко не хватало в старых версиях. Например, контекстное меню было реализовано уже достаточно давно.
Меню используется, в принципе, везде
Хотя главное предназначение контекстного меню - это работа в инвентаре.
И к тому же, буквально вот сегодня реализовал алгоритм поиска пути. С ним пришлось повозиться, конечно. Начал я работать над ним еще два дня назад, пытаясь применить алгоритм А (кому интересно - Wikipedia). Однако он требует наличия сетки, которую можно анализировать. В моем случае создание сетки 256х256 нодов (чего, в принципе, будет маловато) занимало несколько секунд, а значит создавать её на лету невозможно. Хранить в памяти сетку для всей карты тоже не вариант, т.к. она занимала бы пару сотен мегабайт только в виде двухмерного логического массива. Поэтому пришлось думать над другим алгоритмом. Цель моего алгоритма - быть максимально быстрым, работать без сетки, по возможности пытаясь найти короткий путь. Хотя это не было приоритетом. Решение получилось достаточно простое и элегантное. Чтобы найти путь из точки А в точку Б, в точке А создается некий объект, который я быстро прозвал итератором. Далее алгоритм пытается двигать этот объект в направлении точки Б по прямой. Если через определенное расстояние препятствий не найдено, данная точка записывается и движение юнита уже можно начинать. Далее алгоритм начинает работать с последней точкой, вновь пытаясь двигать её в направлении точки Б. Если на пути появится какое-либо препятствие, происходит возврат к последней удачной точке и попытка движения повторяется под измененным углом. Такой алгоритм удовлетворяет поставленным требованиям и выдает вполне неплохой результат. Пример работы под катом.
Каждая зеленая точка на линии - это очередь приказов юнита. Точки под деревьями указывают на их физический размер, а здоровенная клякса - это, собственно, персонаж.
Добавлено (12 февраля 2015, 22:48) --------------------------------------------- Время очередного вброса информации. Если кто-то помнит старые версии, то одной из самых графических фич были тени. Мне они тоже весьма нравились. Именно поэтому поначалу они перекочевали в новую версию без изменений. Впрочем, можно вспомнить, что эти тени были совсем не идеальны. Из-за своей простоты они не могли учитывать положение других теней, а следовательно, накладывались друг на друга. И в реальной жизни они работают не так. Решение проблемы пришло, как ни странно, достаточно давно. С появлением у меня доступа к шейдерам, появилась и иная реализация системы теней. Посложнее, съедающая больше производительности, но даже с учетом этого производительность движка выше, чем раньше. Без лишних слов, сравнение двух технологий под катом.
Старый вариант
Новый вариант
Бонусом, новая технология позволяет учитывать уровень освещенности, что дает возможность сделать немного более адекватные ночные тени. Но это только для особо интересующихся. Теперь что касается деталей реализации. Если вам интересно - дайте знать, распишу все подробно. А если нет, то не вижу смысла тратить место на странице. До связи.
Сообщение отредактировал Kos94ok - Четверг, 12 Февраля 2015, 22:52
Ну ладно, я обещал подробности, значит будут подробности.
Шаг 1. Порядок рендера В моем случае движок является истинно двухмерным. Следовательно, буфера глубины там нет. Индикатором "глубины" объекта является его координата по вертикальной оси. Правильное расположение объектов при отрисовке является ключом к адекватным теням. Если порядок будет нарушен, объект может стоять на тени другого объекта, а не быть в его тени. Небольшая правка кода поможет продемонстрировать нужный нам порядок.
Важный момент. Подобная сортировка должна накладываться на все объекты игрового мира, независимо от того, отбрасывают ли они тени сами. На картинке можно было заметить, что теней там нет. Это не ошибка, это подготовка к третьему шагу.
Шаг 2. Рендер теней Что собой представляет тень объекта сама по себе? Она является текстурой объекта, выкрашенной в черный полупрозрачный цвет, повернутая под определенным углом и вытянутая по вертикальной оси. Все именно так просто. И старая технология заканчивалась здесь. Новая же идет немного дальше.
Шаг 3. Буфер и маска При рендере нам необходимо сделать два дупликата нашего буфера отрисовки. То есть при отрисовке юнитов мы делаем две копии - одна содержит только сами объекты, без теней, а вторая содержит "полный" вариант. И перед тем, как кто-то начал задавать вопросы о необходимости первой копии, я просто вставлю вторую картинку.
Все тени на маске являются абсолютно черными. Таким образом мы избавляемся от эффекта наложения одной тени на другую. Сколько бы теней не падало в одну точку, она всегда будет иметь один и тот же цвет - абсолютно черный. После этого шага у нас есть две картинки. Ни одна из них еще не пригодна для использования в качестве финального изображения, но финальный шаг решает проблему.
Шаг 4. Пост-обработка Собственно, в этом шаге мы совершаем очень простой трюк. Обе текстуры отправляются на пост-обработку в простенький фрагментарный шейдер, задача которого - сравнить буфер и маску, а затем наложить тень на текстуру буфера. Если цвет пикселя на обеих текстурах не идентичен, значит, в этой точке лежит тень, а следовательно, нужно наложить затемнение на буфер. После чего продолжаем работу со следующим пикселем. Код шейдера выглядит достаточно просто... если убрать из него работу с освещением и прочие эффекты. После работы шейдера смотрим на результат.
Что и требовалось получить.
В следующий раз могу рассказать про систему освещения и её связь с тенями (и вбросить несколько ламповых ночных скриншотов), либо же поговорить про интерфейс, его элементы и новую систему крафта. Выбор за вами
Добавлено (17 февраля 2015, 22:20) --------------------------------------------- Видимо, никого ничего не интересует опять. Хорошо. Тогда никаких вам ламповых скринов.
Тем не менее, кто-то заказывал обновление ссылки на v0.05. У меня, наконец, появился доступ к архиву. Ссылка прилагается.
Сообщение отредактировал Kos94ok - Пятница, 13 Февраля 2015, 17:39
Ordan, Должен ходить, конечно, но даже если это и баг, ничем особо помочь не могу. Попробуй переключить язык, и (типичный мануал-стайл) убедись, что нажимаешь на W, A, S и D.
Сообщение отредактировал Kos94ok - Среда, 18 Февраля 2015, 19:48
Kos94ok, как я и думал, прикол в том, что язык по умолчанию должен стоять инглиш, если по умолчанию Русский то ходить не будет.
Добавлено (11 марта 2015, 03:46) --------------------------------------------- Kos94ok, где обещанный пост про систему освещения? Даже не представляю как сделать столь крутое освещение как у тебя...
Цитата недели: Из-за леса, из-за гор, кишки, месиво, хардкор. (Берсерк ТВ-2)
Видимо, никого ничего не интересует опять. Хорошо. Тогда никаких вам ламповых скринов.
Все, шанс пропущен )
На самом деле, по техническим причинам я не мог работать последний месяц, так что прогресса пока никакого. Больше апдейтов в ближайшем будущем...
Добавлено (05 мая 2015, 12:52) --------------------------------------------- Я все еще жив, похоже.
Да, последние пару месяцев я был в инактиве, но теперь, наконец, вернулся к работе. И сразу же добавлю, что прогресс по движку есть. Генерация, загрузка и сохранение мира спланированы, реализованы и протестированы как для одиночной, так и для сетевой игры. Это дает возможность работать с достаточно большими (в теории неограниченными) картами, повышает среднюю частоту кадров (меньше объектов в памяти -> лучше производительность) и позволяет игрокам одновременно находиться в разных углах карты без необходимости загружать её всю. Словом, все достаточно хорошо по этой части ) Кстати, различные настройки генератора позволяют рисовать как большие и открытые локации, так и относительно коридорные. Мир собирается из предварительно созданных кусков, которые могут быть сгенерированы автоматически или сделаны вручную.
Сообщение отредактировал Kos94ok - Вторник, 05 Мая 2015, 12:54
Эргалон, То ведь старые скрины. Текстура земли одна, а куски содержат только объекты типа деревьев и прочего. Сейчас один кусок имеет размер 500х500 (пикселей). На скрине ниже видно около десяти кусков. И я без понятия, где их границы )
Я помню этот проект , когда его начали только делать Стреляй редко, да метко. Штыком коли крепко. Пуля обмишулится, штык не обмишулится: пуля - дура, штык - молодец.
stalker_zona, Я слишком многих людей повстречал, чтобы помнить всех, извини.
Добавлено (10 мая 2015, 16:40) --------------------------------------------- Небольшой вопрос. Есть ли желающие посмотреть на исходный код движка или даже поучаствовать в разработке? Или же стоит демонстрировать только результат, как я и делал все это время?
Сообщение отредактировал Kos94ok - Четверг, 07 Мая 2015, 18:39
Kos94ok, Исходный код лучше показывать тем, кто в этом действительно нуждается. Лучше демонстрируй результат, в конечном итоге доделаешь игру и в нее будут играть) Кубариум Rise of the dark lords
Kos94ok, яб не отказался бы посмотреть исходный код, мб че посоветовал бы, да и для себя уверен много нового узнаю. Цитата недели: Из-за леса, из-за гор, кишки, месиво, хардкор. (Берсерк ТВ-2)
Небольшое обновление. В последнее время я работал над несколько иным режимом игры, чтобы было что-нибудь, удобное для тестирования основных функций движка. Хоть и этот режим очень примитивен, он достаточно скоро будет готов для демонстрации. Есть желающие пострелять по красным кругам, которые хотят вас сожрать, одновременно с этим собирая куски чьего-то тела, разбросанного по ночной тайге? )
Добавлено (12 июня 2015, 14:15) --------------------------------------------- Обзавелся новой модной консолькой. Зачем? Она круче выглядит, ей удобнее пользоваться, чем стандартной виндовой, а еще она не требует блокирующего потока для ввода текста.
А, ну да, еще вывод текста в консоль стал в несколько тысяч раз быстрее, но это мелочь, я понимаю. )
Сообщение отредактировал Kos94ok - Пятница, 12 Июня 2015, 14:20