krre:Называется программа OctreeFarm. Окно в ней разделено на две части. В левой части - панелька управления, в правой - трёхмерное отображение октодерева. Или наоборот, ещё не решил.
А создание отдельного софта для работы над компонентами действительно упрощает и оптимизирует работа над игрой? Наверное да, но интересно из твоего личного опыта услышать. У многих контор есть внутренний софт подобного рода который потом, иногда, если на него есть спрос, выпускается. Редакторы карт, например.
Если контора делает игру на собственном движке, то одного движка обычно мало, нужно ещё куча вспомогательного софта. Если используется сторонний движок, то к нему все необходимые инструменты уже прилагаются. Крупные конторы традиционно всё своё делают, это даёт больший простор для оптимизаций и добавления новых фич. Готовые движки берутся чаще всего конторами из двух-трёх человек или если программист вообще один, делает игру для мобильных устройств, например.
Когда я работал в геймдеве, у нас все программы свои были, но написали их ещё до кризиса, когда контора процветала, и в ней работало много человек. Когда я туда попал, программистов было всего два, и оба они были заняты игрой, на вспомогательные инструменты времени не оставалось. Это в итоге вылилось в большую проблему. Движок изначально создавался для десктопных игр, а мы делали на нём игру для айпадов, то есть под мобильные девайсы. В общем, получился страх и ужас, десктопно выглядящая игра на планшете.
В моём текущем случае взять готовый движок и все прилагающиеся к нему инструменты не получится, так как у меня всё уникальное. Воксели ещё ни один доступный движок не поддерживает. К тому же, это не так интересно. Я пару лет вяло пытался (никому не говоря) запилить одну стратегическую игру на готовом движке LibGDX, но вдохновения было мало. Получалась ещё одна шаблонная игра, каких много. Сейчас, когда понимаешь, что создаёшь что-то новое, дело повеселей идёт.
krre:Получалась ещё одна шаблонная игра, каких много.
Но она таки получилась, демка какая-нибудь пылится в архивах?..
Спасибо за инсайдерский экскурс!
Коля Логан:Но она таки получилась, демка какая-нибудь пылится в архивах?
До демки не дошло. Нашёл вот какой-то древний скриншот двухлетней давности. Последний раз возился с этой игрой в марте. Там уже даже какой-то интерфейс был, индикаторы всякие, кнопки.
Результат двухдневных стараний - OctreeFarm, наконец, смог показать тестовое октодерево из игры. Камера пока не вращается, стоит в фиксированном месте, поэтому вид такой скучный.
Пришлось маленько подолбаться. В игре доступ к OpenGL осуществляется через мультимедийную прослойку SDL, а в OctreeFarm то же самое средствами фреймворка Qt, на котором делается графический интерфейс. Подходы разные, и не сразу удалось их согласовать. Уже думал вообще от OctreeFarm отказаться, а как-нибудь в самой игре октодеревья редактировать. В последний момент меня посетило озарение, я почитал документацию по Qt и нашёл причину, почему в неё не работало всё, как надо.
krre:До демки не дошло. Нашёл вот какой-то древний скриншот двухлетней давности. Последний раз возился с этой игрой в марте. Там уже даже какой-то интерфейс был, индикаторы всякие, кнопки.
Хорошо хоть скриншот нашелся...
krre:Результат двухдневных стараний - OctreeFarm, наконец, смог показать тестовое октодерево из игры. Камера пока не вращается, стоит в фиксированном месте, поэтому вид такой скучный.
Вид не скучный. Просто он в 2Д.
Уже в 3D.

Теперь работаю над тем, чтоб и зум камеры тоже был, а не только разворот.
krre:Уже в 3D. Теперь работаю над тем, чтоб и зум камеры тоже был, а не только разворот.
Мне нравится такая окраска - эстетично.
Ох, 3Д...
С менюшками и стандартными файловыми операциями я разделался быстро. Сохранение файла, открытие, создание нового - такое я делал уже сто раз, поэтому не пришлось долго лазить по интернетам и разбираться с проблемами. А потом пошли нестандартные фичи, и процесс снова замедлился.
На то, чтобы сделать выделение мышкой вокселей, у меня ушло два дня кропотливой работы. Да и то сделано было не до конца. Выделение в целом работает, но есть ещё много нюансов. Пока выделенный воксель выделяется жёлтым цветом. Что-то другое, типа какой-нибудь рамки сделать - это очень сложно, не сейчас. Выделенный воксель можно будет (позже) удалить, разделить, либо перекрасить в другой цвет. Кроме жёлтого, конечно. Но можно и в жёлтый, только тогда от выделения будет не отличить.
Чем дальше я влезаю во всё это, тем сложнее и медленнее становится. К счастью, меня никто не торопит.
Сделал мультивыделение нод в октодереве. Это когда нажимаешь и держишь Shift, потом кликаешь мышкой, и к старым выделениям добавляются новые. Если кликнуть на уже выделенной ноде, то выделение там снимется. Клик на пустом месте в стороне от октодерева снимет вообще все выделения сразу. Всё по фен-шую, короче, как в других структурных редакторах.
Теперь можно что-то делать с выделенными нодами. Возможных операций у меня пока на уме четыре: разделить ноду на 8 новых нод, объединить 8 нод в одну, удалить ноду, добавить ноду. Все эти операции требуют полной перестройки октодерева, а это очень сложная и нервная задача. Пойду накуплю валерьянки, в общем. Психику надо беречь.
Количество коммитов в репозитории с Гагариным перевалило за 1000, и это в некоторой степени юбилей. Причём, не только юбилей, но и рекорд. Даже в AprilBrush за несколько лет накопилось всего 868 коммитов, а в Гагарине за 5 месяцев и того больше. Давно я с таким энтузиазмом программы не писал.
Если смотреть по дням, то плотность коммитов выглядит вот так. Правда, это по всем моим репозиториям на GitHub, не только по Гагарину, но поскольку, начиная с мая, я коммитил только в Гагарина, то за последние пять месяцев статистика правдиво отражает степень работы над программой. На графике чем зеленее, тем больше коммитов было сделано в этот день. После середины мая не пропущен ни один день.
А это распределение коммитов по дням недели и часам. Ночью, как видно, я всегда сплю. Не работается мне ночью. Зато начиная с 5 утра и до 9 вечера начинается самая жара. Наличие дыры в 17 часов по будням вызвано тем, что с 17 до 18 я еду с работы домой, а в маршрутке особо не попрограммируешь.

Ещё я еду в маршрутке с 7 до 8 утра, но откуда-то в это время взялись несколько коммитов. Вероятно, это из тех дней, когда я на работу не ездил, а програмировал дома. Бывало такое, когда загрузка была слабая, разрешали дома посидеть.
Есть также и другие графики, все они в отрытом доступе, и можно поглядеть их на
странице репозитория.
Чтобы оттянуть неизбежное, связанное с редактированием октодерева, я взялся за что-нибудь полегче - изменение цвета нод в октодереве. Это "полегче" заняло у меня полдня, зато какой эффект! Патриотичность октодерева зашкаливает! Кстати, этот тот самый роковой случай, когда цвет выделения совпадает с цветом ноды, и ничего с этим не поделаешь.
Теперь в OctreeFarm на левой панели есть индикатор цвета, при нажатии на него вываливается диалог, который меняет цвет выбранной ноды (или нескольких при мультивыделении). Результат сохраняется в файл, и его можно потом загрузить назад. Undo в OctreeFarm не работает и вряд ли скоро будет, поэтому сохранение промежуточных результатов в файл - это единственный путь вернуться на шаг назад. А больше чем на шаг мы отступать не будем!
Простите мою некомпетентность... а что такое коммиты?
Коммит - это фиксация изменений в репозитории относительно предыдущих изменений. Обычно отмечается построчно. Например, Пушкин пишет поэму об Онегине и коммитит её в репозитории. В первый коммит он добавляет две строчки:
Мой папа самых честных правил,
Когда не в шутку заболел.
Потом Пушкин подумал и решил изменить вторую строчку:
Когда не в шутку занемог.
Относительно прошлого коммита изменилась одна строка, и Пушкин это изменение фиксирует в новом коммите. Потом он захотел поменять первую строчку:
Мой дядя самых честных правил,
И делает третий коммит. Если бы Пушкин сразу поменял обе строчки, то это пошло бы в один коммит, а так пришлось добавлять два раза. В одном коммите могут быть изменения в скольких угодно строках и скольки угодно файлах. Обычно перед коммитом программа показывает список всех изменений, в каких файлах какие строки изменились. Можно поменять хоть сто файлов, а потом только сделать коммит, но обычно стараются по возможности фиксировать как можно меньше изменений за раз.
Так работает система контроля версий, которую используют программисты. Это позволяет им вести историю изменений программы с самого начала, то есть я могу вернуть программу в любой день из прошлого, просто отмотав её по истории до нужного коммита. А чтобы в них легче было ориентироваться, к каждому коммиту программист пишет комментарий, что он там поменял. То есть получается этакая машина времени. Писатели сейчас тоже пытаются такие системы как-то использовать, но поскольку они больше под программистов заточены, то у них не сильно хорошо это получается.
krre:Писатели сейчас тоже пытаются такие системы как-то использовать, но поскольку они больше под программистов заточены, то у них не сильно хорошо это получается.
Да я и в монтаже нечто похожее применяю...

Как правило, любой фильм/любое видео проходит минимум одну-две черновые версии.
Продолжая старую добрую традицию оттягивания неизбежного, добавил на панель управления кнопку Shadeless, которая может находиться в двух состояниях - нажатом и отжатом. Когда кнопка нажата, отключается влияние источников света на октодерево, и все стороны становятся равномерно освещены с интенсивностью 1.0. Это полезно для более точной настройки цветов, особенно градиентов. Если включено затенение, то не виден собственный цвет вокселя, он становится темнее или светлее, и тогда нет смысла сравнивать его с соседним вокселем.
Придумал простую и гениальную идею, как упростить редактирование октодерева. Я решил хранить дерево не в виде линейного списка, а в древовидном формате JSON. Линейный формат хорош для быстрой отрисовки в видеокарте, а древовидный - для редактирования. Таким образом, самое трудное - это написать конвертер из JSON в линейный формат, а сама задача редактирования JSON-дерева тривиальная. Два дня я писал этот конвертер и когда закончил, достаточно быстро реализовал первую фичу по редактированию - удаление выделенных нод.
Удаляется всё отлично, но удалить можно только восемь нод, после чего ноды закончатся и октодерево исчезнет.

Чтоб оно не исчезло, надо сделать следующую фичу - подразбиение нод. Казалось бы, что тут делать, задача же редактирования JSON-дерева тривиальная. Так то оно так, да конвертер пока ещё кривой, подразбитые ноды не хавает. Придётся ещё помучиться.