Game Programming Patterns / Паттерны программирования в играх: 1.2. Flyweight

← →
Английский оригинал Перевод на русский

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

Поднимается туман, открывая взору старый величественный лес.

Qeruim 01.05.14 в 10:45

2

Древние болиголовы, неподдающиеся счету, стоят перед вами в виде соборной оранжереи.

Qeruim 01.05.14 в 10:47

1

Древние болиголовы бесчисленным числом возвышаются над вами, образуя собор из зелени.

IngaJolly 07.05.14 в 19:20

2

Солнечные лучи золотыми стержнями пронизывают туман сквозь витражный навес из листьев.

Mingun 01.05.14 в 11:19

0

Витражный навес из листьев преломляет солнечный свет, превращая его в золотые лучи тумана.

IngaJolly 08.05.14 в 16:29

1

Между гигантскими стволами, вы можете увидеть огромный лес простирающийся в даль.

Qeruim 01.05.14 в 10:55

0

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

IngaJolly 08.05.14 в 16:31

0

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

Mingun 01.05.14 в 11:27

0

О подобном другом мире мы мечтаем, будучи разработчиками игр, и такие сцены часто возможны благодаря паттерну со скромнейшим названием "Приспособленец" (Flyweight).

IngaJolly 08.05.14 в 16:36

0

Лес за деревьями

Mingun 01.05.14 в 11:27

0

Лес вместо деревьев

IngaJolly 08.05.14 в 16:38

0

Засадим деревьями лес.

Deo 22.08.14 в 08:57

0

Я могу описать разросшийся лес всего парой предложений, но его реализация в реалтаймовой игре - совсем другая история.

undefiened 30.04.14 в 17:56

0

Я могу описать разросшийся лес парой предложений, но его реализация в игре реального времени — совсем другая история.

Mingun 01.05.14 в 11:31

1

Я могу описать густой лес всего несколькими предложениями, но фактическая реализация его в игре в режиме реального времени - совсем другая история.

IngaJolly 08.05.14 в 16:42

0

В то время, как вы видите на своем мониторе лес разнообразных деревьев, все, что видит программист - миллионы полигонов, разгребаемые видеокартой 60 раз в секунду.

undefiened 30.04.14 в 17:59

0

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

Mingun 01.05.14 в 11:36

0

Когда экран заполняет целый лес отдельных деревьев, всё, что видит программист графики - это миллионы полигонов, которые ему как-то нужно передавать видеокарте каждую шестидесятую часть секунды.

IngaJolly 08.05.14 в 16:45

0

Речь идет о сотнях деревьев, каждое из которых детализировано с помощью сотней полигонов.

undefiened 30.04.14 в 18:02

0

Речь идёт о тысячах деревьев, подробная геометрия каждого из которых состоит из тысяч полигонов.

Mingun 01.05.14 в 11:37

0

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

IngaJolly 08.05.14 в 16:45

0

Даже если у вас достаточно памяти для описания такого леса, чтобы его можно было отрисовать, данные должны пробиться по шине от центрального процессора на видеокарту.

Mingun 01.05.14 в 11:40

0

Даже если у вас достаточно памяти для описания этого леса, чтобы визуализировать его, этим данным придется проделать путь по шине от центрального процессора к видеокарте.

IngaJolly 08.05.14 в 16:48

0

Каждое дерево имеет кучу связанных с ним данных:

Mingun 01.05.14 в 11:40

1

Сетка из полигонов, которые определяют форму ствола, ветвей и зелени.

Mingun 01.05.14 в 11:41

1

Текстуры для коры и листьев.

Mingun 01.05.14 в 11:41

1

Его местоположение в ориентация в лесу.

Mingun 01.05.14 в 11:41

0

Его положение и ориентация в лесу.

IngaJolly 08.05.14 в 16:50

0

Параметры тонкой настройки, вроде размера и оттенка, чтобы каждое дерево выглядело уникальным.

Mingun 01.05.14 в 11:42

1

Если вы обрисуете это всё в коде, вы получите что-то вроде этого:

Mingun 01.05.14 в 11:43

0

Если придется написать быстрый код, то получится что-то вроде этого:

IngaJolly 08.05.14 в 16:51

0

class Tree

Mingun 01.05.14 в 11:43

1

{

Mingun 01.05.14 в 11:43

1

private:

Mingun 01.05.14 в 11:43

1

Mesh mesh_;

Mingun 01.05.14 в 11:43

1

Texture bark_;

Mingun 01.05.14 в 11:43

1

Texture leaves_;

Mingun 01.05.14 в 11:43

1

Vector position_;

Mingun 01.05.14 в 11:43

1

double height_;

Mingun 01.05.14 в 11:43

1

double thickness_;

Mingun 01.05.14 в 11:43

1

Color barkTint_;

Mingun 01.05.14 в 11:43

1

Color leafTint_;

Mingun 01.05.14 в 11:43

1

};

Mingun 01.05.14 в 11:43

1

Это довольно много данных, особенно велики сетка и текстуры.

Mingun 01.05.14 в 11:44

0

Тут много данных, особенно для сетки и текстур.

IngaJolly 08.05.14 в 16:52

0

Целый лес из таких объектов будет слишком тяжёлым, чтобы просто отправить его на видеокарту в одном кадре.

Mingun 01.05.14 в 11:45

0

Целый лес объектов - это слишком много, чтобы передать видеокарте за один кадр.

IngaJolly 08.05.14 в 16:54

0

Загрузить видеокарту целым лесом этих объектов в одном кадре - это слишком.

Deo 22.08.14 в 14:12

0

К счастью, есть проверенный временем приём для обработки такой ситуации.

Mingun 01.05.14 в 11:47

2

Ключевое наблюдение состоит в том, что хотя в лесу могут быть тысячи деревьев, в основном они все выглядят одинаково.

Mingun 01.05.14 в 11:48

0

Ключевое наблюдение состоит в том, что хотя в лесу могут быть тысячи деревьев, в основном они все выглядят одинаково.

IngaJolly 08.05.14 в 16:55

0

Скорее всего они все используют одну сетку и текстуры.

Mingun 01.05.14 в 11:48

0

Скорее всего, все они используют одну и ту же сетку и текстуры.

IngaJolly 08.05.14 в 16:55

0

Это означает, что большинство полей в этих объектах одни и те же для всех экземпляров.

Mingun 01.05.14 в 11:49

0

А значит большинство полей будут общими для всех экземпляров этих объектов.

Deo 22.08.14 в 14:14

0

Это значит, что большинство полей в объектах будут одинаковы во всех экземплярах.

IngaJolly 24.08.14 в 18:11

0

Вы должны быть сумасшедшим или иметь миллиардный бюджет для индивидуального моделирования каждого дерева в лесу.

Mingun 01.05.14 в 11:53

0

Вы должны быть сумасшедшим или миллиардером с соответствующим бюджетом для художников, чтобы индивидуально моделировать каждое дерево в целом лесу.

IngaJolly 08.05.14 в 16:57

1

Нужно быть чокнутым или миллиардером, чтобы спонсировать художникам моделирование каждого отдельного дерева в лесу.

Deo 22.08.14 в 14:16

0

Обратите внимание, что материал в маленьких прямоугольниках один и тот же для каждого дерева.

Mingun 01.05.14 в 11:54

0

Обратите внимание, что написанное в маленьких прямоугольниках одинаково для каждого дерева.

IngaJolly 08.05.14 в 17:00

0

Мы можем смоделировать это явно разделив объект на две части.

Mingun 01.05.14 в 11:56

0

Мы можем смоделировать это явно, разбив объект наполовину.

IngaJolly 08.05.14 в 17:01

0

Сперва мы вытащим все общие для деревьев данные и переместим их в отдельный класс:

Mingun 01.05.14 в 11:56

0

Сперва возьмем данные, общие для всех деревьев, и переместим их в отдельный класс:

IngaJolly 24.08.14 в 18:13

0

class TreeModel

Mingun 01.05.14 в 11:56

1

{

Mingun 01.05.14 в 11:57

1

private:

Mingun 01.05.14 в 11:57

1

Mesh mesh_;

Mingun 01.05.14 в 11:57

1

Texture bark_;

Mingun 01.05.14 в 11:57

1

Texture leaves_;

Mingun 01.05.14 в 11:57

1

};

Mingun 01.05.14 в 11:57

1

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

Mingun 01.05.14 в 11:58

0

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

IngaJolly 08.05.14 в 17:03

0

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

Deo 22.08.14 в 14:34

0

Далее, каждый экземпляр дерева в мире обзаведётся ссылкой на эту общую для всех модель TreeModel.

Mingun 01.05.14 в 11:59

0

Затем каждый экземпляр дерева получает ссылку на общий класс TreeModel.

IngaJolly 08.05.14 в 17:05

0

Что остаётся в классе Tree, так это состояние, которое индивидуально для каждого экземпляра:

Mingun 01.05.14 в 12:00

1

Что остается в классе Tree - состояние, уникальное для каждого экземпляра:

IngaJolly 24.08.14 в 18:16

0

class Tree

Mingun 01.05.14 в 11:57

1

{

Mingun 01.05.14 в 11:57

1
Минутку...

Следующая страница →