Дневник разработки №36
Привет читатели нашего дневника! Всех с наступающим Новым Годом!
Давно не писал я дневников, на то были свои причины. Напомню что рабочий сезон у меня заканчивается в конце октября/начале ноября и к проекту я должен был вернуться в это время.
Но была еще одна причина, почему к проекту я приступил лишь в начале декабря. После моего долгого внутреннего сопротивления я все же взялся за изучение Unreal Engine 4. В свою очередь к изучению UE4 меня подтолкнуло отсутствие подвижек по дизайн-документу у нашего геймдизайнера. За два месяца ковыряния UE4 я понял, что это отличный инструмент для создания игр... Но все же он не для стратегий, точнее не для стратегий с такими огромными картами как у нас.
От использования Blueprints я получил только удовольствие, тем более когда воочию можно увидеть и окинуть взглядом всю схему:
Летом, пока шел рабочий сезон, заниматься проектом практически не было времени. Но тут я прикупил себе обновку для компьютера - видеокарту RTX 2080 и решил протестировать проект на ней. Проект запускался но работал не корректно, после долгих поисков причины я понял что проблема в шейдере:
На форумах никто не мог мне помочь, было много советов но все были мимо. В итоге после штудирования документации по OpenGL я пришел к выводу что моя ошибка была в особенном поведении OpenGL 4.5, а точнее ошибка была в Non-uniform flow control
https://www.khronos.org/opengl/wiki/Sampler_(GLSL)#Non-uniform_flow_control
После её исправления все заработало. Еще, после форумных переписок, ребята натолкнули меня на хорошие мысли и я немного оптимизировал шейдер, за что им огромное спасибо.
Следующим этапом была переделка алгоритма поиска стартовых мест для игроков, мне он еще пока не нравится, но работает лучше предыдущего, времени на писк уходит очень много. Это вторая задача по затратам времени, после задачи расчета нормалей. Бывает даже так, что поиск стартовых мест происходит дольше просчета нормалей...
Придется переписывать еще раз.
После того как я закончил работу с UE4, я планировал взяться за написание диздока. Я размышлял в каком направление мне двигаться и с чего начать, перечитывал ранее написанный концепт-документ. В один из таких дней, под подобные размышления я вспомнил о том, как мне не давал покоя написанный алгоритм генерации гор. Напомню как выглядели горы ранее:
Мимолетной была эта мысль, но она меня зацепила, и этот день я провел с этой мыслью в голове.
На следующий день я решил запрограммировать этот момент:
Горы получились не плохими, но не намного лучше чем были. Но я сделал их, используя совершенно другой подход, в котором оставалось место для маневра. Два дня я экспериментировал и в процессе таких экспериментов понял что мне мешает получить искомые формы, но для этого придется немного изменить способ генерации перехода одного типа поверхности в другой, т. е. переход воды в сушу и переход суши в горы. Еще пол дня у меня ушло на переписку кода, но к вечеру у меня получился интересный результат:
Вроде как не плохо получилось.
И тут я понял, что подобный подход можно применить и к рекам. Дизайн-документ отодвинулся на второй план. За пару дней я переписал реки, их изгибы теперь выглядят более естественно:
И теперь помимо того что реки строились более эффективно, в процессе написания алгоритма генерации, я не раз поглядывал на алгоритм, который строил отображение рек в 3D пространстве. Странным образом я их отображал, буквально за несколько часов я переписал все на алгоритм базировавшийся на построении кривых Безье. Кстати, на скриншоте выше, реки построенные на кривых Безье.
Новый подход к генерации и рек и гор позволял мне более свободно работать с ними, и в голову пришло еще пару идей. Я наметил план и даже знал как его реализовать. Но, тут впал в ступор и целую неделю не мог сформулировать и воплотить задуманное в коде. Ходил по офису кругами, буквально бился головой об стену и ругал себя что не могу сделать такую простую вещь. Неделя прошла в муках, не смогу передать вам какая пустота была у меня в голове. И вот за четыре дня до нового года я наконец родил свою мысль:
Реки могут рассекать горы (реалистично ли?).
Теперь реки могут выходить с гор.
И самое крутое - теперь реки имеют разную ширину! Есть судоходные реки и не судоходные. При впадении одной реки в другую последняя меняет свою ширину. Ширина реки в свою очередь теперь зависит от длинны. Ширина реки увеличивается постепенно, от истока к устью.
Остается запрограммировать красивый исток и устье и реки будут готовы.
Наконец меня отпустило, та мимолетная мысль воплощена в жизнь, можно писать дизайн-документ дальше.
Теперь дневники будут выходить чаще. До новых встреч!
Смотрите также:
Комментарии
Ура! Рад снова видеть ваши посты на сайте!)
Идеи с реками прекрасны и очень круто реализованы!
Реки могут рассекать горы (реалистично ли?)
Да, но редко)
При сходе рек с горы даешь водопады)
Ох, спасибо.
Водопады.... мысль такая возникала, но есть проблема с разным уровнем воды. Тут нужно много думать :)
Zemlaynin, ну вот на скриншоте со спуском реки с горы есть перепад воды, можно просто эту точку отловить и вкрячивать модельку водопада
alexprey, нет там перепада уровня, это обман зрения. Вот как раз, когда я увидел подобное, у меня и возникла мысль про водопады.
CollectableItemData.cs
[CreateMenuItem(fileName = "newItem", menuName = "Data/Items/Collectable", order = 51]