Открытие первое.
Игра изначально должна была быть 16-битной, идти под операционной системой Windows 3.0/3.1/3.11. То, что Вы можете увидеть на картинках, это не 2D, кстати, а таки 3D. В качестве API используется, разумеется, не DirectX, а его прямой предок - WinG...
Обзор устройства графики проекта "Jefferson". Гибридная система (Hybrid System).
Дисклеймер: Обзор скорее всего содержит неточности в описании базового цикла рендеринга. Сверяйтесь с оригиналом в случае необходимости.
Для подтверждения или опровержения вышеописанного я решила изучить описание устройства графики игры в диздоках. В коллекции есть документ с названием файла Ch10-Graphics.pdf. Само название документа: Chapter 10 - Graphics, DRAFT 1 Jefferson Technical Design. Его автор: Eric Bowman. Он в титрах The Sims значится как программист. Дата создания: 28 октября 1997.
Тут стало не понятно, что за "Jefferson". Возможно, что это кодовое название The Sims на определенном этапе разработки игры.
Но вот что описывается в документе под названием JeffersonGameDescription.pdf:
This description is based on Lorraine's working draft in support of the July 1997 Focus Group. I've put in some changes of my own. We can mark this up if we want to continue working on it. To some degree, this description follows and summarizes a "spectrum" of game elements we've expanded on here.
Game Description
Jefferson is a "family simulator" in which you are in charge of the creation, maintenance, and happiness of one to six people in your own, specially designed household. You can live vicariously through a dream family in your dream house, or simulate your own family in a model of your own house, and see what excitement your fantasy life holds in store.
Гугл-перевод на русский:
Это описание основано на рабочем проекте Лоррейн в поддержку Фокус-группы в июле 1997 года. Я внес некоторые собственные изменения. Мы можем отметить это, если хотим продолжить работу над ним. В некоторой степени это описание повторяет и обобщает "спектр" игровых элементов, которые мы расширили здесь.
Описание игры:
Jefferson - это "симулятор семьи", в котором вы отвечаете за создание, содержание и счастье от одного до шести человек в вашем собственном, специально созданном доме. Вы можете жить опосредованно через семью своей мечты в доме своей мечты или смоделировать свою собственную семью в модели своего дома и увидеть, какие волнения таит в себе ваша фантастическая жизнь.
Возможно, проект был назван в честь Томаса Джефферсона, 3-его президента США.
На каждой странице этого документа есть путь: file:///Users/a2deh/Downloads/SimsStuff/SimsDocuments/gamedesc.htm, который намекает на то, что проект Jefferson очень сильно связан с The Sims.
В документе Ch10-Graphics.pdf написано насчёт Direct X для проекта Jefferson:
DirectX
The game will require DirectX 5, or (TBD) DirectX 6 (due to ship in Q298).
Если посмотреть по другим играм которые были в разработке в 1997-1998 годах, например Deus Ex, который тоже вышел в 2000 году, то если бы например он бы вышел в 1998 году, когда у него был совершенно другой сюжет и он назывался Shooter - Majestic Revelations, то он бы тоже использовал 5 DirectX:
Technology
Engine: 3D 6-degrees of freedom.
Characters: Real time 3D models.
Creatures: Real time 3D models.
Surroundings: Real time 3D models, sprites.
Structures: Real time 3D. 7
Vehicles: Real time-3D models.
Interface: 2D graphics.
Operating System: Windows 95
Processor: Pentium 133
Memory: 16 Megs
Format: 4X CD-ROM Drive, 2 CDs
Hard Drive Space: 50/100/200 Megs
Video: DirectX 5; 8- and 16-bit color (hardware only); All DirectX-supported resolutions; 3DFX, etc.
Audio: DirectX 5
Multiplayer Support: DirectX 5 (Direct Connect, Modem, Network, Internet)
Источник дизайн-документ Shooter: Majestic Revelations.
Ссылки на оригинал дизайн-документа и его перевода на русский есть в описании под этим видео (автор видео его сам и перевел):
То есть, если бы The Sims вышел в 1997-1998 годах, то он бы использовал 5 DirectX. А какое другое API для прорисовки графики использовать в это время?
Но вернёмся к Ch10-Graphics.pdf (дизайн документам The Sims и Jefferson).
Вот что описано про разрешение экрана:
10.1.3 Video Resolution
The game will run at 640x480 pixels resolution, in “hicolor” mode (16 bits per pixel.)
TBD: The game will run also at 800x600 pixels resolution, if the hardware can support our requirements.
Цели для графической подсистемы Jefferson:
1. Рендеринг ландшафта, спрайтов с z-буфером и полигонов в «смешанном режиме» со скоростью 20 FPS или больше.
2. Эффекты рендеринга, которые масштабируются в соответствии с предоставленными возможностями компьютера пользователя.
3. Различные схемы рендеринга для разных аппаратных конфигураций по мере необходимости ("софтварный" рендеринг, 3Dfx и т. д.).
4. Динамическое освещение полигонов и спрайтов с z-буферизацией (буферизацией глубины).
Разработчикам надо было определить или чтобы было определено:
1. Кол-во кадров в секунду (FPS). (Но выше это определено. Может быть, забыли убрать это TBD.)
2. Целевая платформа. Минимальная платформа (Скорее всего определить конфигурацию "железа" для минимальной платформы. Минимальные системные требования. Такое определялось в разделе Technology в диздоке Shooter: Majestic Revelations).
Гибридная система (Hybrid System)
Jefferson смешивает полигоны и спрайты для формирования трехмерного, изображённого без соблюдения какого вида перспективы, состоящего из плиток (тайлов) мира.
2D-графика состоит в основном из спрайтов с z-буферами, рендеринг который был сделан предварительно в 3D Studio Max. (Подробнее про такую технологию создания графики в этом видео с 8:24:
).
3D графика состоит из полигональных фигур (люди и, возможно, питомцы), на которые наложена текстура, смоделированные и анимированные в 3D Studio MAX.
Система координат (Coordinate Systems)
Графическая система использует как тайловые (плиточные), так и мировые координаты. В главе 2 дается обзор системы координат.
"Изометрический вид" ("Iso View")
Так называемый "изометрический вид" создается посредством неперспективной (диметрической (dimetric)) проекции из трехмерного вида координат на плоскость проекции, представляющую экран.
(Виды проекции:
Чтобы увидеть скрытый текст, войдите или зарегистрируйтесь.
Чтобы увидеть скрытый текст, войдите или зарегистрируйтесь.).
Это неперспективная проекция на плоскость просмотра, ориентированная так, чтобы угол просмотра составлял 30°.
Projection plane - Плоскость проекции.
Line-of-sight - Поле зрения.
30 deg - 30 градусов.
Ground - Земля.
Режимы DirectDraw (DirectDraw Modes)
Игра будет работать в полноэкранном эксклюзивном режиме.
И разработчикам нужно было определить, будет ли игра работать в оконном режиме. Если да, то только для отладки или в релизной версии тоже?
Direct3D Устройства (Direct3D Devices)
При отсутствии 3D-ускорителя игра будет работать с Direct3D ramp программным рендерером (Direct3D ramp software renderer) (устройство HEL (HEL device)). (Что такое Direct3D ramp software renderer? Что такое HEL device?)
Тут разработчикам надо было определить:
Будет ли в игре использоваться MMX программный рендерер (устройство HEL) на машине MMX. (Что такое MMX программный рендерер?)
Игра будет использовать 3D оборудование, если оно будет доступно (устройство HAL (Что такое устройство HAL?). Будем ли мы когда-нибудь использовать HEL, даже если HAL присутствует?
Можем ли мы получить значительно лучшую производительность в "софтваре", используя собственный программный растеризатор?
Буферы (Buffers)
При использовании программного рендеринга в полноэкранном режиме игра будет иметь:
2 буфера кадра на видеокарте.
"Композиция" буферов пикселей и z-буферов в системной памяти.
"Свежие" буферы пикселей и z-буферы в системной памяти.
System memory - системная память
Blit (Блит) - Битовый блит - это операция с данными, обычно используемая в компьютерной графике, в которой несколько растровых изображений объединяются в одно с использованием логической функции.
Refresh pixel and Z buffers - "Свежие" буферы пикселей и z-буферы в системной памяти.
Flip - кадр
Chain of 2 flipping buffers - цепочка из 2 буферов кадра
Базовый цикл рендеринга для полноэкранного режима без аппаратного ускорения 3D (см. рисунок выше):
1. Блит обновляет буферы в буферы композиции, чтобы "очистить" их.
2. После рендеринга спрайтов и полигонов, буфер пикселей композиции блит в бэкбуфер карты.
3. Кадр.
В оконном режиме не требуются буферы кадра на карте; шаг 2, описанный выше, будет заключаться в блиттинге из буфера композиции непосредственно на дисплей.
Очистка и обновление (Clearing and Updating)
Цикл рендеринга очищается и обновляется в соответствии с накопленным "уроном" в различных списках повреждений. В частности, существует 3 списка повреждений, один для повреждений буферов обновления (который добавляется, когда он см. рисунок ниже), и два для буферов композиции, для предыдущих и текущих повреждений.
Тут дальше отображается схема цикл рендеринга Jefferson, 10 октября 1997 (стр. 3).
Прокрутка (Scrolling)
При прокрутке используются списки повреждений для минимизации перерисовки. Если экран прокручивается только частично, буферы обновления прокручиваются на месте, z-буфер обновления восстанавливается на месте, и свежеоткрытые области прорисованы. Затем весь буфер обновления сливается в буфер композиции, и все динамические объекты перерисовываются.
Разработчикам надо было определить как сделать прокрутку быстрее. Использовать буферы обновления, которые несколько больше, чем буфера композиции, чтобы минимизировать кол-во обновления буфера, который должен обновляться в реальном времени во время прокрутки.
Окна и панели (Windows and Panes)
Jefferson использует одну точку обзора для 2D и 3D графики.
И разработчикам надо было определить нужно ли им использовать DDD viewpoint (DDD - это библиотека C++, которая тонко обертывает Direct3D. см. ниже по документу) для панели инструментов, когда они перейдут в полноэкранный режим.
Цвета (Colors)
Jefferson будет работать только в режиме hi-color (16 бит на пиксель). Он будет поддерживать форматы пикселей 555 и 565. (Тут, как я понимаю идёт речь про формат записи цвета пикселя, RGB555 и RGB565. RGB555 является 15-битным форматом цвета . RGB565 - 16 битным и этот цвет закодирован так: rrrrrggg:gggbbbbb - 5 бит красного (в старшем байте), 6 бит зелёного и 5 бит синего (в младшем байте). Таким образом, красная и синяя компонента имеют 32 возможных значения, а зелёная - 64.
Чтобы увидеть скрытый текст, войдите или зарегистрируйтесь.
Чтобы увидеть скрытый текст, войдите или зарегистрируйтесь.).
Разработчикам надо было определить нужно ли им поддерживать 655 и 556 RGB пиксельные форматы. (Соответственно 655 - это 6 бит красного цвета, 5 бит зелёного цвета и 5 бит синего цвета. А 556 - это 5 бит красного цвета, 5 бит зелёного цвета и 6 бит синего цвета).
Палитры для каждого спрайта (Per-Sprite Palettes).
В настоящее время существует единая 256-цветная основная палитра, разделяемая всеми спрайтами. Существует также единственная палитра "спрайт brite", создаваемая из основной палитры, которая используется для рисования выделенных спрайтов. Они будут заменены палитрами для каждого спрайта и совместным использованием палитр.
Каждый спрайт будет иметь GUID палитры. GUID будет преобразован в объект палитры через менеджер палитры. Обычно GUID палитры спрайта ссылается либо на стандартную палитру, либо на палитру внутри объекта, в который встроен спрайт. Обычно объект имеет одну палитру, которая используется всеми его спрайтами, хотя эта схема позволяет нам впоследствии проявить фантазию, если потребуется.
Палитра будет храниться в ресурсе в виде 256 24-битных значений RGB. Во время выполнения из 24-битных RGB-значений будет сгенерирована таблица поиска цветов (CLUT) из 256 записей, по 16 бит на каждую запись, чтобы соответствовать конкретной структуре пикселей видеокарты (555 или 565).
Объект палитры может содержать несколько палитр, в том числе:
* Стандартную палитру.
* Палитру "спрайт-брайт", используемая при выделении спрайта.
* Другие палитры по мере необходимости (ночь, различные степени затенения и т.д.).
Примечание: Палитры для каждого спрайта отличаются от палитр DirectDraw и используются только нашими программными блиттерами. (Что такое блит (Blit) смотреть выше).
В этом разделе разработчикам нужно было определить:
1. Эти палитры, вероятно, будут генерироваться динамически из стандартной палитры, хотя мы можем захотеть, чтобы
чтобы художник мог указать ее при необходимости. Таким образом, ресурсы палитры должны содержать список палитр и
схему идентификации для указания того, чем является каждая палитра (стандартная, sprite-brite, night и т.д.).
2. Как генерировать GUID и сколько бит достаточно. 32 бита, вероятно, более чем адекватно.
Совместное использование палитры (Palette Sharing)
Менеджер палитры облегчает совместное использование палитры. В частности, объекты спрайта с похожими цветовыми схемами могут совместно использовать одну из стандартных палитр. Чем больше палитр (стандартных, sprite-brite и т.д.),
тем важнее.
Нужно определить будет ли палитра отдельного спрайта изменяться на лету, в этом случае обмен по значению
не будет работать. Объект палитры, вероятно, будет иметь функцию-член Clone, чтобы можно было создать изменяемую копию, не затрагивая другие спрайты, которые разделяют палитру.
Цвета рельефа (Terrain Colors)
Тут разработчикам нужно было определить всё насчет местности.
Рельеф, вероятно, будет рисоваться либо в виде полигонов с помощью DDD, либо с помощью специального рендерера рельефа, оптимизированным для работы в неперспективном режиме и для работы с отвесами.
Текстуры (Textures)
Текстуры хранятся в виде 8-битных, палитровых BMP-файлов. Во время выполнения DDD текстуры динамически конвертируются в
"предпочитаемую битовую глубину", которая составляет 8 bpp (бит на пиксель), если не поддерживается 16 bpp (бит на пиксель). Если не поддерживается ни один из этих форматов, то используется формат текстуры чьи биты на пиксель ближе всего к глубине экрана.
Палитры текстур (Texture Palettes)
В настоящее время каждая текстура имеет свою собственную палитру. Это расточительно и может быть медленным на некоторых 3D-ускорителях.
Нужно определить схему совместного использования палитр между объектами текстур.
Какие пока можно сделать выводы?
Если бы The Sims вышел в 1997, то ему бы требовался Direct X 5 Возможно DirectX 6 если бы разработчики это определили и если бы The Sims вышел во втором квартале 1998 года. Цвет должен был быть 15 битным и 16 битным. Остальное хорошо описано в документе.