Добавлен prog,
опубликован
Меня интересовал мучил интересовал, что можно успеть накодить что-нибудь за обеденный перерыв? Надеюсь теперь и вас будет терзать любопытство, ведь ответа на этот вопрос здесь нет, а есть нечто другое.
Началась эта короткая история с того, что мне захотелось проверить в действии одну занятную идею на счет хранения, передачи и отображения двухмерной поверхности с произвольным пиксельным заполнением.
Не долго думая, идея была дополнена парой свободно распространяемых текстур, 3D движком JmonkeyEngine3.0 и воплощена в простейшую программу, в которой даже камера не двигается.
Если коротко, то формируется двухмерный массив байтов, запекается в текстуру с одним каналом и передается в шейдер вместе с текстурой-атласом, а на выходе мы получаем то, что получаем - текстуру, каждый пиксель которой выбирается с одной из текстур в атласе.
Для модификации состояния "на лету" используется ByteBuffer, на который и завязана промежуточная текстура. Реализованы два способа редактирования - более быстрый на малых операциях, позволяющий изменить состояние конкретного пикселя и более быстрый при массовом редактировании пикселей, позволяющий одной операцией обновить от одного пикселя, до целой строки пикселей.
В тестовом сценарии используется итоговая текстура 2048*2048 пикселя с разбиением на 256 элементов, при размерах окна 1024*768.
Об оптимизации и практическом применении этого добра еще предстоит подумать, но первое что приходит на ум - 2д-платформер с полной разрушаемостью рельефа до отдельного пикселя.
P.S. На самом деле, приведенные выше результаты были получены хоть и за соизмеримое время, но не в результате кодинга на обеденном перерыве и потому не считаются.
P.P.S. Сжатие скриншота в jpeg несколько приукрасило картинку - на практике никакой тени на границе земли и неба не наблюдается, но получилось неплохо, так что я обязательно возьму этот эффект на вооружение.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован prog
В связи с чем, выкладываю текущую версию в надежде что кто-то её все-же запустит и отчитается о правильности отображения текстур.Архив с текущей версией можно найти ниже в комментариях.Отредактирован prog
1 - это будет 2д платформер с видом сбоку.
2 - там будут деревья и по ним можно будет лазить.
3 - слабым взрывом и другими способами можно будет смести листву с дерева, оставив голый ствол с ветками.
4 - в обязательном порядке будет мультиплеер, но не факт что к срокам конкурса сандбоксов.
Все остальное может и будет меняться в совершенно неожиданных направлениях.
Отредактирован prog
Перед тем как уйти на работу немного доработал систему. Теперь вместо одноканальной текстуры используется трехканальная, что в три раза удорожает передачу данных об изменении состояния фрагмента карты на GPU, но позволяет передавать не только ID текстуры, а еще и два байта дополнительных данных. Эти два байта будут использованы для передачи смещения текстурных координат пикселя, что позволит размещать в любой точке карты любой фрагмент любой текстуры, а не строго по сетке, как это было до сих пор.
upd:
И так, обещанные скриншоты
зы. читал не всё, может это оно и есть)
Отредактирован prog
Кажется пора создавать отдельный проект - ведение этого подобия WIP-а в формате блога начинает вызывать у меня дискомфорт своим внешним видом.
Отредактирован prog
17.05.2014
О будущей оптимизации
После небольшой оптимизации удалось сократить потребление памяти и уменьшить задержку при генерации новых чанков.
Стресс-тест
Размышления о продвинутом чанк-менеджменте
18.05.2014
Размышления на тему рендеринга
Отредактирован prog