В этой статье нет каких-то революционных открытий, есть только некоторые наблюдения о зеркалах, не совсем очевидные для людей, никогда не создававших эти объекты в играх.

Зеркала в Sims 4 по-настоящему работают! Для этого игре нужно ещё раз рендерить комнату для каждого зеркала в сцене. Разумеется, это затратный процесс.

Хорошая оптимизация: издалека зеркало не отражает ничего! На нём просто находится статическая текстура, пока мы не приблизим камеру. Тогда статическая текстура пропадает, заменяясь настоящим отражением.

И нет, бесконечные зеркала в игре невозможны:

На самом деле, я хотел показать следующее видео, где можно наблюдать эффективное усечение во «вселенной зеркала».

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

Мне нравится эффективность работы усечения. Все персонажи и объекты быстро усекаются, даже экран ноутбука! Я знаю, в этом нет ничего особенного, но мне нравится наблюдать за такими штуками.

Технические подробности

Чуть подробнее расскажу о технической стороне процесса рендеринга зеркал:

Как уже говорилось, игра для каждого зеркала рендерит комнату повторно. Ниже представлено то, что я смог выяснить при помощи своего инструмента профилирования. После рендеринга буфера глубин (а также карты теней) сцена рендерится обычным образом, а затем одно за другим идут зеркала.

Первый блок (923) — это ещё одно зеркало, которое находится поблизости, но вне камеры.

Чтобы разобраться, какое зеркало должно отражать какую комнату, игра, похоже, использует стенсил-буферы (по сути, это чёрно-белые маски). В моём захвате с тремя зеркалами я обнаружил три стенсил-буфера:

Ссылка на стенсил начинается с 2, потому что когда я захватывал три видимых в сцене зеркала, рядом находилось ещё одно зеркало.

Я не могу сказать с уверенностью, как конкретно это работает в Sims 4, но предположу, что очень похоже на систему, показанную в туториале Unity:

  1. Рендерим каждую поверхность зеркала в отдельный стенсил-буфер (или в один и тот же, но с разными ID?).

  2. Собираем все видимые геометрии для каждого зеркала по отдельности, чтобы рендерить их, но только там, где это допускает стенсил-маска соответствующего зеркала.

Источник: Unity Stencil Buffer

Бонус

Дополнительное наблюдение №1

В Sims 4 можно прятать внутренние стены, чтобы лучше видеть, что происходит в доме, но зеркала всё равно рендерят их и игнорируют этот режим отображения без стен:

Дополнительное наблюдение №2

Если понаблюдать за симом, принимающим душ, можно увидеть, что эффект пикселизации и частицы воды от самого душа тоже отражаются в зеркале:

Если посмотреть на ту же сцену с моим «глитчем», то можно заметить нечто любопытное: сим пикселизирован только внутри поверхности зеркала, то же самое относится к частицам (воды/пара душа). Предположу, что они тоже ограничены упомянутой выше стенсил-маской.

Дополнительное наблюдение №3

Я не смог воссоздать этот забавный глитч (видео выложено десять лет назад). Предположу, что это была оптимизация системы анимации, которую теперь, вероятно, исправили. Но мне всё равно хотелось показать это видео, оно очень забавное:

Бонусный пример

Марина реализовала в своей игре зеркало и поделилась в моём Discord интересным анализом.

Источник

«Для игрока это камера + render target, target которого — единственный четырёхугольник со скриптом, следующий за иг��оком по горизонтальной оси. Также у зеркала есть стенсил-маска, поэтому четырёхугольник появляется, когда он перед ней».

Источник

Как и в Sims, мы видим в зеркале стену, которой с нашей точки обзора нет (иначе бы она закрывала камеру). Как это сделано?

«Окружение — это простая текстура на самом объекте зеркала!»

: 

Комментарии (1)


  1. GospodinKolhoznik
    15.11.2025 10:09

    Хорошая оптимизация: издалека зеркало не отражает ничего! На нём просто находится статическая текстура, пока мы не приблизим камеру. Тогда статическая текстура пропадает, заменяясь настоящим отражением.

    Можно грабить корованы... И эльфу раз лесные то сделать так что там густой лес... А движок можно поставить так что вдали деревья картинкой, когда подходиш они преобразовываются в 3-хмерные деревья.