Я тут немножко перепрошил рендер и добавил полезную штукенцию - исчезание энтитей на дистанции. Прям как в сорсе, да

Результатом очень доволен - вот первая локация: открытая местность, моделей тьма. Я, конечно, встал прям у стенки, но тем не менее. 155 тысяч еполи. Там лежит всякий мусор, стоят машины, охранник полигональный в будке сидит. Тут никуда не денешься - все надо рисовать.
Ну а теперь следующий скрин - 46 тысяч еполи. Более чем в 3 раза срезалось. Прибавка к фпс не сильно большая, но для этой сцены по-моему довольно существенно. Тут я не показал, но там у меня еще есть вывод статистики - так вот конкретно здесь скрылось 125 энтитей, что по-моему дофига.
Тестил парочку других карт, в каких-то местах прибавляется 60-80 фпс.
До этого момента я уж было отчаялся, но пока фпс держался выше сотни я не паниковал. Но он подбирался все ближе и ближе… И тут дернуло залезть и пошерудить в коде. Теперь я могу не только расслабиться, но и более того - заставить ту локацию на заднем фоне еще большим кол-вом моделей.
Итак, как все это работает: у абсолютно каждой энтити (брашевые, модели, спрайты…) теперь есть поле fadedistance (если не задано, то скрываться вообще не будет). А там можно делать по вкусу в зависимости от локации. В коридорах 1000 задать, в более-менее открытой местности 2000-2500. Какой-нибудь мусор или мелкие модели можно скрывать вообще на меньшем расстоянии. А которые задают общую картину - не скрывать вообще (на скрине выше - ЛЭП, горы и подобное). Можно это дело задать даже монстрам, но этого я лично делать вряд ли буду - а то сами понимаете, чем это чревато.
Проверка на дистанцию идет перед передачей энтити на отрисовку - то есть отсечется еще на раннем этапе. Изначально я сделал немного неправильно и проверка шла уже после передачи в список отрисовки. Терялась буквально тройка фпс, но все же.
Энтити исчезают плавно - как только превысится заданная дистанция отрисовки, энтитя перейдет в прозрачный режим (если она солидная) и от ее текущего render amount начнут отниматься юниты. Соответственно, полностью непрозрачная энтитя исчезнет на дистанции fadedistance + 255.
А еще мне удалось сделать проверку на FOV - поэтому при зуме арбалетом все будет на своих местах.
К сожалению, не обошлось и без проблем. Самая главная проблема - энтити не будет видно в мониторах/порталах - в случае, если у нее задана дистанция и игрок далеко. Дело в том, что дистанция считается исключительно между энтитей и взглядом игрока (trigger_camera, к счастью, считается взглядом игрока - поэтому с ней проблем никаких). Я пару дней пытался побороть эту пакость, но энтити рендерились иногда с артефактами, когда виден активный монитор. Решил все-таки отказаться. К сожалению знаний мне все еще сильно не хватает (тут разобрался бы Бог Ксаша, но его тут нет и вообще он занят своим новым движком). Обойти, конечно, просто - не скрывать никаких энтитей там, куда смотрит монитор - так я и поступлю. Мониторы и порталы сами по себе - и так дорогое удовольствие, поэтому они редко смотрят на какие-то загруженные сцены. Да и вообще у меня их мало. Конечно, хотелось бы сделать по-нормальному.
Вторая - ну это кому-то проблема, кому-то нет. Сам факт исчезания энтитей. 100% не обойдется без моментов, когда игрок увидит сгущающуюся из воздуха вдалеке модель бочки. Лично я против этого ничего не имею, тем более если это позволяет поднять фпс и сделать локацию более детальной, когда игрок в ней окажется. Зачем рисовать что-то вдали, если оно там никому не нужно в данный момент и не существенно (стекла, мусор, бочки, трубы на стенах...). Движок ведь устроен так, что может заглядывать и за угол - а кто знает, сколько там моделей валяется? Ну вы поняли.
Раз уж дочитали до сюда, то вот хорошая новость - разработка идет хорошо, до конца первой главы осталось буквально полторы карты. И карты эти уже, считай, сделаны. В 2016 году.

Теперь осталось их насытить деталями, перетекстурить, переосмыслить кой-чего, записать диалоги, придумать заметки... Это не так много, как кажется, т.к. план всего в голове уже имеется. По времени геймплея первая глава, думаю, выйдет примерно на час.