Video oldindan ko‘rish uchun mavjud emas
Telegram'da ko‘rish
Про коллизию и дальность прорисовки инстанс рендера. Для прорисовки каждый объект попадает в чанк небольшого размера. В каждом чанке есть список мэшей, которые будут отрисованы с одинаковым материалом. Помимо обычного материала, есть прозрачный, который используется когда чанк сменяется с видимого на невидимый.
Это необходимо для того, чтобы в первую очередь мы имели возможность прятать слишком далекие объекты, во вторую очередь, чтобы не рисовать объекты когда на них игрок не смотрит. Так как камера имеет свой собственный конусообразный фильтр, то что вне его видимости будет пропускаться.
Коллизия реализована с применением паттерна ObjectPool, хотя мне нравится перевод бассейн объектов. Для большей части объектов необходим коллайдер примитивной формы, мы заранее спавним тысячи GameObject’ов с разным типом компонентов коллизии.
Когда инстанс объекта попадает в рендер, то мы берем из басейна свободный коллайдер и располагаем его в нужной позиции и с нужным размером. В случае если свободного объекта нету, то создаем новый, но это неприятный сценарий, поэтому количество объектов в басейне на этапе инициализации желательно угадать как можно точнее.
Когда объект пропадает из зоны видимости мы сбрасываем его параметры и отключаем. Таким образом мы практически лишаемся необходимости лишний раз вызывать Instantiate и Destroy методы, которые как многие знают выделяют много памяти и работают медленно.
Сейчас разбираюсь почему AmbientOcclusion постэффект не накладывается на прозрачные материалы, его вызов происходит сразу после отрисовки непрозрачных объектов. На дальней дистанции этот артефакт не будет сильно заметен, особенно если прятать его за туман к примеру, но хотелось бы более элегантного решения. Возможно наш технический художник поможет исправить этот недостаток.
Это необходимо для того, чтобы в первую очередь мы имели возможность прятать слишком далекие объекты, во вторую очередь, чтобы не рисовать объекты когда на них игрок не смотрит. Так как камера имеет свой собственный конусообразный фильтр, то что вне его видимости будет пропускаться.
Коллизия реализована с применением паттерна ObjectPool, хотя мне нравится перевод бассейн объектов. Для большей части объектов необходим коллайдер примитивной формы, мы заранее спавним тысячи GameObject’ов с разным типом компонентов коллизии.
Когда инстанс объекта попадает в рендер, то мы берем из басейна свободный коллайдер и располагаем его в нужной позиции и с нужным размером. В случае если свободного объекта нету, то создаем новый, но это неприятный сценарий, поэтому количество объектов в басейне на этапе инициализации желательно угадать как можно точнее.
Когда объект пропадает из зоны видимости мы сбрасываем его параметры и отключаем. Таким образом мы практически лишаемся необходимости лишний раз вызывать Instantiate и Destroy методы, которые как многие знают выделяют много памяти и работают медленно.
Сейчас разбираюсь почему AmbientOcclusion постэффект не накладывается на прозрачные материалы, его вызов происходит сразу после отрисовки непрозрачных объектов. На дальней дистанции этот артефакт не будет сильно заметен, особенно если прятать его за туман к примеру, но хотелось бы более элегантного решения. Возможно наш технический художник поможет исправить этот недостаток.