Перейти к основному содержимому

Камеры

Объект-камера решает, что видит посетитель и как он перемещается.

Режимы управления

РежимПосетитель…
noneне может двигать камеру — вы управляете ей сами
orbitперетаскиванием вращается вокруг цели, колесом приближает
flyсвободно летает клавишами и мышью
firstPersonоглядывается с места, где стоит; курсор захвачен
lockкурсор захвачен, но камера продолжает следовать за своим объектом
Для персонажа нужен lock

firstPerson отдаёт саму камеру управлению курсором, что отцепляет её от объекта — годится для зрителя, обходящего модель, и бесполезно для персонажа, потому что камера перестаёт следовать за телом.

lock захватывает курсор точно так же, но оставляет камеру прикреплённой, а движение мыши передаёт вашему скрипту. Вот это — игра от первого лица.

Настройки orbit

orbit стоит по умолчанию, потому что подходит для просмотра товаров, и настроек у него больше всего:

НастройкаЧто делает
targetточка, вокруг которой вращаемся
enableRotate · enablePan · enableZoomкакие жесты разрешены
minDistance · maxDistanceнасколько близко и далеко можно подойти
minPolarAngle · maxPolarAngleнасколько можно заходить сверху и снизу
enableDamping · dampingFactorнасколько движение продолжается по инерции
autoRotate · autoRotateSpeedмедленное вращение в простое

Ограничивать полярный угол стоит почти в любом просмотрщике товара: это не даёт людям уйти под пол и увидеть сцену снизу, что никаким освещением не выглядит намеренным.

Объектив

fov — поле зрения в градусах: 50 — естественное значение по умолчанию, меньше — теле и площе, больше — шире и драматичнее.

near и far ограничивают то, что рисуется. Объекты ближе near и дальше far отсекаются.

Огромное отношение far/near вызывает z-fighting

Близко расположенные поверхности начинают мерцать, когда буферу глубины не хватает точности. Если такое видите, поднимайте near прежде, чем опускать far: на точность near влияет гораздо сильнее.

Настройки fly

Режим fly движется по клавишам, и клавиши настраиваются — в том числе можно следовать одной из именованных раскладок проекта вместо прямого указания клавиш. Скорость и множитель ускорения (по умолчанию зажатый Shift) задают темп.

Дополнительные виды

Дополнительный вид рендерит второй проход с камеры поверх основного. Так делаются миникарта, зеркало заднего вида или монитор наблюдения.

Повесьте его на объект, у которого уже есть камера, и выберите, куда он идёт:

ЦельРендерит в
screenпрямоугольник канваса — позиция и размер в долях экрана
textureзакадровое изображение, которое потом может показать материал

Цель texture — самая интересная: отрендерьте вид камеры в текстуру, положите её на объект-экран в сцене — и получите работающий монитор, показывающий другую часть мира.

Дополнительные виды рисуются после основного прохода, в заданном вами порядке.

Каждый дополнительный вид — это ещё один полный рендер сцены

Два монитора означают, что сцена рисуется трижды. Они того стоят там, где важны, и их стоит выключать там, где нет.

Какая камера активна

Сцена рендерится через одну камеру за раз. Скрипт может спросить, какая, и переключить её:

ctx.camera.entity();
ctx.camera.setActive(securityCam);
ctx.camera.pose();

Источник правды — всегда transform камеры: пишите в него, чтобы её подвинуть. Учтите, что в orbit и firstPerson поворотом владеет управление, поэтому записанный вами поворот будет перезаписан; позиция уважается. См. API ctx.

А если камерой управляют игровые контролы, собственный режим управления этой камеры игнорируется — иначе они дрались бы каждый кадр.


Дальше: Ресурсы — модели, изображения и звуки.