Делаю на данный момент свою sanbox игру, мир в которой состоит из блоков, и на днях взялся за их оптимизацию. Попробовал стандартную LOD систему и она мне не понравилась, так-как нельзя настроить float определённое расстояние для прорисовки блоков. Скачивал пару LOD систем с посторонних ресурсов, и они тоже не соответствовали моим требованиям. И тогда пришлось написать собственный скрипт для LODа.
Собственно к чему это всё?
Я хотел бы спросить у знающих людей насколько эффективен мой скрипт и получить рекомендации по его улучшению с целью получить более качественную оптимизацию блоков в игре.
Вот сам скрипт с пояснениями:
Код
private var dis : float; // Дистанция между игроком и блоком static var lod1 : float = 10; // Расстояния для включения 1 лода static var lod2 : float = 20; // Расстояния для включения 2 лода static var lod3 : float = 30; // Расстояния для включения 3 лода static var lod4 : float = 40; // Расстояния для включения 4 лода
public var material : Material[]; // Материалы для лодов 32на 32 пикселя, 16, 8 и 4. private var player : GameObject;
function Start() { player = GameObject.Find("MainCamera"); //Поиск игрока }
function Update() {
dis = Vector3.Distance(transform.position, player.transform.position); // определение дистанции между игроком и блоком.
В общем лод изменяет материал куба на менее качественный когда расстояние до игрока увеличивается. Коллизия на расстоянии отключается. Когда блок совсем далеко, то renderer отключается и блок не видимый для игрока.
Кстати, я сгенерировал 8000 блоков со своей лод системой, и игра выдавала 60 фпс, со стандартный лодом 8000 блоков выдавали 30-35 фпс при меньшей дальности прорисовки. Помоги как можно ещё улучшить скрипт.
Вот скриншот лода 8000 кубов.
Сообщение отредактировал PasterLak - Вт, 01 Сен 2015, 12:47
Далее. Проверять луше не в Update, а в FixedUpdate, например. Или в корутине, которая автозапускается с нужным периодом (больщим чем кадр!), например раз в 0.1 секунды. _________ Если Вы делаете МайнКрафт, то никакие ЛОД не помогут.
ЗЫ: но вообще-то лод все же первое что должен делать - подменять меши на менее полигональные.
Да, полностью согласен, но тем не менее эффект от LOD присутствует. Я ради интереса провёл тест: Нагрузил сцену в 16.000 блоков, чтобы нагляднее сравнить и сделал два билда игры с LOD и без него.
В результате без LOD-а фпс составил в среднем 40, а с LOD-ом с того же ракурса и вовсе 60, чего собственно я и хотел добиться.