xtreme3d - это 3d-движок для популярного ...xtreme3d - это 3d-движок...

208
Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как известно, GM ориентирован на создание 2D-игр, и предоставляет лишь базовые функции 3D-графики, не очень подходящие для серьезного использования. К счастью, GM поддерживает подключение сторонних DLL-библиотек, которые значительно расширяют его возможности: Xtreme3D - и есть такая библиотека. С ее помощью вы можете рендерить в окне GM трехмерную графику любой сложности. Xtreme3D поддерживает многие современные технологии рендеринга (такие, как шейдеры и кадровые буферы), позволяет создавать игры с качественной графикой и на сегодняшний день является единственным активно разрабатываемым 3D- движком для классического Game Maker. В помощь начинающему было составлено данное руководство, содержащее материалы по теории и практике использования Xtreme3D: пошаговые уроки с примерами кода, список всех функций движка с подробными разъяснениями, глоссарий терминов компьютерной графики и многое другое. Мы надеемся, что с ним знакомство с Xtreme3D станет более легким, интересным и увлекательным. Авторы руководства: Gecko - главный редактор и составитель, автор статей и уроков; Rutraple (aka Hacker) - технический редактор и корректор. Отдельное спасибо Xception, Bami и всем остальным, кто так или иначе любезно предоставил информацию, вошедшую в руководство. Не забудьте посетить наш сайт: http://xtreme3d.narod.ru . Там вы найдете множество примеров Xtreme3D, игры, написанные с использованием движка, полезные утилиты, коллекцию актуальных и исторических DLL- библиотек для Game Maker и многое другое. За поддержкой обращайтесь на наш форум: http://offtop.ru/xtreme3d Свежие исходники Xtreme3D вы всегда найдете в репозитории проекта на GitHub: https://github.com/xtreme3d/xtreme3d . Удачи!

Upload: others

Post on 27-Jun-2020

37 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

Xtreme3D-это3D-движокдляпопулярногоконструктораигрGameMaker8. Как известно, GM ориентирован на создание 2D-игр, и предоставляетлишьбазовыефункции3D-графики, не оченьподходящиедля серьезногоиспользования. К счастью, GM поддерживает подключение стороннихDLL-библиотек, которые значительно расширяют его возможности:Xtreme3D-иестьтакаябиблиотека.СеепомощьювыможетерендеритьвокнеGMтрехмернуюграфикулюбойсложности.Xtreme3Dподдерживаетмногие современные технологии рендеринга (такие, как шейдеры икадровыебуферы),позволяетсоздаватьигрыскачественнойграфикойинасегодняшний день является единственным активно разрабатываемым 3D-движкомдляклассическогоGameMaker.

Впомощьначинающемубылосоставленоданноеруководство,содержащеематериалы по теории и практике использования Xtreme3D: пошаговыеуроки с примерами кода, список всех функций движка с подробнымиразъяснениями, глоссарий терминов компьютерной графики и многоедругое. Мы надеемся, что с ним знакомство с Xtreme3D станет болеелегким,интереснымиувлекательным.

Авторыруководства:

Gecko-главныйредакторисоставитель,авторстатейиуроков;Rutraple(akaHacker)-техническийредакторикорректор.

Отдельное спасибоXception,Bami и всем остальным, кто так или иначелюбезнопредоставилинформацию,вошедшуювруководство.

Не забудьте посетить наш сайт: http://xtreme3d.narod.ru. Там вы найдетемножество примеров Xtreme3D, игры, написанные с использованиемдвижка, полезные утилиты, коллекцию актуальных и исторических DLL-библиотекдляGameMakerимногоедругое.

Заподдержкойобращайтесьнанашфорум:http://offtop.ru/xtreme3d

СвежиеисходникиXtreme3DвывсегданайдетеврепозиториипроектанаGitHub:https://github.com/xtreme3d/xtreme3d.

Удачи!

Page 2: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

ИсторияXtreme3DXtreme3D0.x-2.x(2003-2006)

ИсторияXtreme3Dначаласьв2003году.ДвижокбылнаписаннаDelphiсиспользованием библиотеки GLScene (де-факто стандартного 3D-движкадля Object Pascal) немецким программистом под ником Xception. Ксожалению,намнеизвестноегонастоящееимя.

ПерваястабильнаяверсияXtreme3D(0.9)былавыпущенав2003году.Еевозможности были довольно скромными: поддерживались толькоанимированные модели MD2 и MD3, статичные 3DS, MS3D и OBJ,встроенныепримитивы,спрайты,двумерныйитрехмерныйтекст,lensflare,частицыинебесныйкупол.APIдвижканапоминалстильGML-функций.

Основной целью проекта было создание движка для трехмерной RPGнаподобиеDungeonMaster.И,хотяавтордвижкаизначальнонепланировалдальнейшее развитие Xtreme3D, в более поздних версиях функционалдвижкабыстроперероспотребностиконкретногожанра.

Так,вверсии1.7(2004г.)появиласьдинамическаявода.Однакокудаболеесерьезнымпрорывомсталаверсия2.0(2006г.):тотальныйпересмотрAPI,поддержкавидов,библиотекматериаловикартосвещения,динамическийcubemapping, поддержка новых форматов моделей, рендеринг в текстуру,загрузкаресурсовизсжатогоархива,аппаратныешейдеры(bumpmapping,cel shading), мультитекстурирование, octree и quadtree, поддержкаDDS, атакже, что особенно важно, интегрированный физический движок OpenDynamicsEngine(ODE).

ПоследнийрелизотXception(2.0.2.0),помимомногочисленныхбагфиксов,содержал два важных нововведения: отрисовщик ландшафта и движокпроверки столкновений DCE. Функциональность движка была на уровнекоммерческихигр1997-2003годов-Xtreme3D2.0позволялсоздаватьчто-то похожее в плане графики на Quake 2-3, Half-Life, GTA 3, The ElderScrolls:Morrowindит.д.-все,чтоотноситсяк"дошейдерной"эпохе.

Page 3: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

К сожалению, Xception, в итоге, забросил свою разработку - движокраспространялсябезисходников,ипоэтомудолгоевремянеразвивался,атехнологии,междутем,нестоялинаместе...

Xtreme3D3.0(25.08.16)

С2009годаврусскоязычномсообществеXtreme3Dпостоянновиталаидеявоссоздать движок с нуля, исправить баги и добавить недостающуюфункциональность - учитывая, что Xtreme3D является весьма тонкойоберткойнадGLScene,этазадачаказаласьнесложнойичистотехнической.Однако возникли непредвиденные проблемы, и дело затянулось. В итоге,проект,начавшийсяв2009годуипережившийдолгийпериодстагнацииинескольковспышекактивности,былзавершенлишьв2016-м.ТакпоявилсяXtreme3D3.0.

ЭтаверсияXtreme3D,какиоригинал,написананаDelphiсиспользованиемпопулярной библиотеки GLScene - фактически, движок можно назватьпочтиполнымврапперомGLSceneдляGameMaker.ВосновеXtreme3D3.0лежитмодифицированнаяирасширеннаяGLScene1.0.0.0714.

ВоткраткийсписокнововведенийXtreme3D3.0:

-ПоддержкашейдеровнаязыкеGLSL(1.1или1.2)-Динамическиетени,реализованныеметодомshadowmapping- Экранный антиалиасинг 2x и 4x. Имеется поддержка технологиисглаживанияNVIDIAQuincunx-Быстрыйвнеэкранныйрендерингсиспользованиемp-буферов-Поддержкапрокси-объектов-ПоддержкаформатовмоделейLOD(LODka3D)иB3D(Blitz3D)-ПоддержкатеговдлямоделейMD3-Смешиваниескелетныханимаций-Загрузкаматериаловизскриптов-Встроенныйшейдерсмешиваниятекстур(TexCombine)-Встроенныйшейдер,реализующийбазовоеосвещениепоФонгу(Phong)-ПроцедурныетекстурынаосновешумаПерлина-Поддержкалинейныхволндлядинамическойводы- Новые типы геометрических примитивов (усеченная пирамида,додекаэдр,икосаэдр,чайник)- Улучшенный эффект взрыва для мешей (в частности, теперь есть

Page 4: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

возможностьвернутьмешвисходноесостояние)-Рендерингсеток(Grid)-Отладочныйрендерингобъектов-манекенов(Dummycube)-Множествоновыхфункцийдлякамеры(Camera)- Возможность копировать матрицы трансформации (локальные иабсолютные)отодногообъектадругому.Такжеможнокопироватьобъектамматрицыкостейизмоделисоскелетнойанимациейи задаватьлокальнуюматрицу объекта вручную, что позволяет реализовать любуюматематическуюмодельдвиженияивращенияобъектов,непривязываяськугламЭйлера-Возможностьприкладыватьимпульсы(мгновенныеизмененияскорости)к динамическим объектам в DCE. Также в DCE появилась поддержкаландшафта- Улучшенная физикаODE. В отличие от старой реализации в Xtreme3D2.0, теперь вODE в полноймере поддерживаются Freeform-объекты (какдля статических, так и для динамических тел), а также ландшафт.Крометого, появилась возможность задавать позиции геометриям при ихсоздании, что позволяет создавать составные тела - такие, например, какстолсножками- Функции для создания скриншотов и сохранения текстур из памяти вфайлыBMP-Функциячтениятекстовыхфайлов.

Xtreme3D3.1(30.09.16)

Осенью 2016 года вышло первое обновление новой ветки Xtreme3D -версия3.1.Вотсписоксамыхважныхизмененийвней:

-УлучшенныйAPIдляобъектовFreeform-появиласьвозможностьручнойсборкиFreeformизвершиниполигонов,функциитрансформациимешей,атакжесохранениеFreeformвфайл-Поддержкановыхфайловыхформатов:CSMиLMTS(которыхнебылов3.0),X,ASE,DXS-ПоддержкаRagdollвODE- Объект Movement, который позволяет задавать объектам траекториидвижения- Улучшенный BumpShader - появилась поддержка теневых карт иавтоматическогогенерированияпространствакасательных-УлучшенныйPhongShader-появиласьподдержкатекстур

Page 5: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

- Объект HUDShape - 2D-фигура (поддерживаются прямоугольник,окружность,отрезокимеш)-УлучшенныйAPIдляспрайтов-появиласьподдержкатекстурныхатласов(т.е., использованияфрагмента текстуры для отрисовки спрайта), а такжеотрисовкииззаданнойточкивместоцентра-Поддержкаальфа-каналадляPNG-Функциидляопрашиванияразмеровтекстуры.

Xtreme3D3.2(21.10.16)

- Поддержка FBO, быстрых внеэкранных буферов, с помощью которыхможно реализовать многопроходный рендеринг и различные сложныеэффектыпостобработки-Новый,совместимыйсшейдерамимеханизммультитекстурированиядляматериалов.Теперьматериалымогутиметьдо8текстур,иGLSL-шейдерымогутавтоматическиихприниматьвкачествепараметров- Функция ViewerRenderObject для рендеринга отдельных объектов ииерархий-ФункцияMaterialLoadTexture-ИсправленбагвфункцииObjectSetParent.

Xtreme3D3.3(26.11.16)

- Новые функции для Freeform, позволяющие читать и модифицироватьгеометриюмодели(координатывершин,нормали,индексыит.д.)-Поддержказамещающихматериалов(OverrideMaterial)длявидовиFBO.Позволяет задать единый материал, с которым должны рендеритьсяобъекты,игнорируясвоисобственныематериалы- Поддержка цветовых буферов разных форматов для FBO (включая 32-битныесплавающейзапятой)-ФункцияFBORenderObjectEx-ПоддержкарендерингатенейShadowMapвзаданныйпользователемFBOвместовнутреннегобуфера- Функции ViewerGetSize, ViewerGetPosition, а такжеViewerIsOpenGLExtensionSupported.

Xtreme3D3.4(30.12.16)

-ДобавленаподдержкаTTF-шрифтовивыводалюбыхсимволовЮникода

Page 6: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

черезкодировкуUTF-8- Добавлены функции ObjectHash (хэш-таблица для хранения любыхобъектовXtreme3D)-ИзмененAPIфункцииFBORenderObjectEx-появилисьновыепараметры,позволяющие выборочно очищать цветовой буфер и буфер глубины, атакжекопироватьсодержимоеFBOвосновнойкадровыйбуфер- Поддержка передачи в параметр шейдера GLSL видовой и обратнойвидовой матриц, а также особого параметра, позволяющего шейдеруузнать,естьлитекстуравзаданномтекстурномблоке- В целях ускорения загрузки ресурсов объекты Freeform теперь негенерируют октарные деревья и векторы касательных и бинормалей призагрузке. Это должно быть сделано вручную, если нужно, функциямиFreeformGenTangentsиFreeformBuildOctree- Исправлен баг в функции MaterialCubeMapLoadImage. Также в GLSLтеперь задействуется бесшовное кубическое проецирование дляпроизвольных мип-уровней кубической текстуры, если поддерживаетсярасширениеGL_ARB_seamless_cube_map.

Xtreme3D3.5(04.02.17)

-ДобавленобъектClipPlane-плоскостьотсечения- Улучшены шейдеры PhongShader и BumpShader: добавлена поддержкаисточников света типа lsSpot, тумана, прозрачности и рендеринга безосвещения (еслиосвещениеотключеновнастройкахвида).Прозрачностьзадается через альфа-канал диффузной текстуры - либо, альтернативно,через значение альфа диффузной компоненты материала (только дляPhongShader)- Добавлены новые функции для материалов: MaterialCullFrontFaces,MaterialSetZWrite- Добавлены новые функции ODE, позволяющие вручную задаватьскорость,позициюиповоротдинамическимтелам.

Xtreme3D3.6(17.12.17)

Один из самых крупных релизов в ветке 3.x - разработка этой версиидлиласьболееполугода.

- Добавлена поддержка кодировки Windows для TTF-шрифтов, а такжепользовательских8-битныхкодировок

Page 7: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

- Добавлены новые функции для материалов:MaterialSetTextureExFromLibrary,MaterialGetNameFromLibrary- Добавлены новые функции для Freeform: функцииFreeformSetMaterialLibraries, FreeformMeshFaceGroupSetLightmapIndex,FreeformMeshFaceGroupGetLightmapIndex-Добавленыспециализированныепрокси-объектыдляактеров(ActorProxy)- Возвращены функции ActorMoveBone и ActorRotateBone, добавленафункцияActorMeshSetVisible-ВозвращенафункцияObjectInFrustrum-Возвращеныфункциимыши,добавленафункциячтениясклавиатуры-Добавленыфункциидлясозданияокониуправленияими-ДобавленыфункциидлясозданияцветаизRGB-компонентов-Добавленыэкспериментальныефункциидлясохранениясценывфайличтенияизнего-ПрисозданиишейдераGLSLтеперьневыводитсясообщениеобошибке,еслиошибокнет.- В шейдерах PhongShader и BumpShader исправлен баг с неправильнымрасчетомбликов.

Page 8: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

Урок1ОсновыXtreme3D.ТеорияУровень:начинающийВерсияXtreme3D:3.0.xАвторурока:Gecko

Итак,чтожетакоеXtreme3D?Впервуюочередь,этосцена.Сцена,накоторойиграют"актеры"-объекты.Объект - основное понятие в среде Xtreme3D. Это не то же самое, чтообъект Game Maker. Объекты Xtreme3D создаются и управляютсяисключительно в программном коде. Трехмерные модели, примитивы,спецэффекты,небонадальнемплане,картинкиитекстнаэкране-всеэтообъекты. Объекты любого типа управляются, в большинстве случаев,однимиитемижесредствами.

Одно из таких средств - иерархия. Любой объект может иметь одного инескольких подчиненных ему объектов - "потомков". При этом сам онстановитсяих"родителем"(далеебезкавычек).Потомки,всвоюочередь,могут иметь собственных потомков, и так далее. По этому принципу истроится вся сцена. Какие в этом преимущества? Например, еслиотключитькакой-нибудьобъект(онприэтомстанетневидимымнаэкране),то все его потомки (и, соответственно, потомки потомков) по умолчаниютакжебудутотключены.Приэтом,можновключитьлюбогоизпотомков,иэто не скажется на родителе. Это "унаследование" - самое очевидное изособенностейиерархии.Ноэтолишьвершинаайсберга.Потомкиобъектамогутнаследоватьнетолькоегосостояние,ноиряддругиххарактеристик.К примеру, объект становится привязанным к своему родителю - кудародитель, туда и потомок. Сам потомок может двигаться на любыерасстояния, но лишь относительно местоположения своего родителя.Чтобылегчепонять,представьтесебепароход:пассажирымогутсвободноперемещатьсяпопалубеилистоятьнаместе,новсеони,посути,движутсявместессамимпароходом.

Такимобразом,мыпостепенноподошликперемещениям.Вкомпьютерной

Page 9: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

графике любые перемещения, вращения и масштабирования объединеныпод общим термином "трансформация". Трансформация в Xtreme3Dосуществляетсяпо трем взаимноперпендикулярнымкоординатнымосям:X,YиZ.ОсьXнаправленавправо,осьY-вверх,аосьZ-"вглубину".Этасистема координат называется декартовой прямоугольной, по именифранцузского математика Рене Декарта. Местоположение любой точки всистемекоординатзадаетсятремяеепроекцияминаоси.Например,точки(-1,0,-1), (-1,0,1), (1,0,1) и (1,0,-1) образуют квадрат 2х2, лежащий наплоскости XY. Таким образом, любой объект Xtreme3D имеет трикоординаты, описывающие точку его положения в пространстве. Обычноэтаточкасовпадаетссобственнымцентромобъекта.Положениеобъектавпространстве может быть передано относительно абсолютного началакоординат сцены (0,0,0) илиже относительно координат своего родителя,если таковой имеется. Во втором случае идет речь о так называемыхлокальных координатах объекта, в которых точка (0,0,0) потомка всегдасоответствуетточкеположенияродителя.

Перемещение объекта осуществляется при помощи вектора. Вектор - этоотрезок, направленный от точки (0,0,0), в локальных или абсолютныхкоординатах,влюбуюдругуюпроизвольнуюточкувтехжекоординатахиописывается координатами этой точки. Объект можно произвольнопереместитьналюбоерасстояниевсторону,вкоторуюуказываетзаданныйвектор. Например, вектор (0,10,0) перемещает объект на десять единицвверх.Но, поскольку не всегда удобно вручную вычислять вектор для нужногонаправления движения, используются углы Эйлера (названы по имениЛеонарда Эйлера, швейцарского ученого). Они задают углы поворотаобъекта вокруг его локальных осей X,Y и Z. За нулевой угол беретсяперпендикулярнаяось.ПоворотвокругосиXназываетсяPitch,вокругосиY - Turn, вокруг оси Z - Roll. Нетрудно догадаться, что, например, угол(90,0,0)наклоняетобъектназадна90градусов.Полученная в результате этих поворотов трансформация задаетнаправление объекта (Direction), которое также описывается единичнымвектором. Единичный вектор отличается от обычного тем, что его длинаравна единице (для вектора, описывающего направление, длина не имеетзначения). Например, вектор направления (0,1,0) соответствует углу(90,0,0).Таким образом, мы получаем еще одну характеристику объекта - егонаправление.

Page 10: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

Перемещениеобъектавегонаправленииосуществляетсяпутемумножениявекторанаправлениянарасстояниеперемещения:

(0,0,1)*10=(0,0,10)(1,-1,1)*10=(10,-10,10)

И в результате мы получаем новые координаты объекта (относительнопредыдущих).

Помимо вектора Direction, у объекта есть также автоматическивычисляемые векторы Up и Left, указывающие, соответственно, вверх иналево относительно направления. Эти три взаимно перпендикулярныхвектораобразуютновуюсистемукоординат(Left=X,Up=Y,Direction=Z), которую наследуют все потомки рассматриваемого объекта. Дляпотомка она становится локальной и все его трансформации задаются вней. Получается следующее: если мы создадим объекту потомка ипереместим его на некоторое расстояние в сторону, то при поворотеродителя потомок будет вращаться вокруг него, как Земля вращаетсявокругСолнца!Этоневероятнополезноесвойствоиерархии.Каквывскореубедитесь,оноиспользуетсявXtreme3Dбуквальнонакаждомшагу.

Осталасьтретьятрансформация-масштабирование.Оноизменяетразмеробъекта по трем осям (ширину, высоту, длину). Масштабировать можноотносительно текущего значения масштаба или абсолютно (чтобы задатьконкретный размер в абсолютных единицах). Масштабируется также исистемакоординат,наследуемаяпотомкамиобъекта.Тоесть,потомокбудетнетолькоуменьшен,ноиприближенкродителю,какбудтомыуменьшаемцелую систему объектов. Строго говоря, родитель+потомки - это и естьсистема объектов. Ее можно рассматривать как один большой объект,состоящийизотдельныхлогическисгруппированныхэлементов.

Таким образом, все объекты нашей сцены существуют по определеннымматематическим закономерностям. Если вы уяснили эти закономерности,изучитьXtreme3Dбудетпрощепростого.

Page 11: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

Урок2СозданиепростойсценыУровень:начинающийВерсияXtreme3D:3.0.xАвторурока:Gecko

Передтем,какначатьпрактическиезанятия,позвольтекое-чторазъяснить.Xtreme3D - этобиблиотекадинамическойкомпоновки (DLL).АDLL -нечтоиное,какскомпилированныйнаборинструкций,написанныхнакаком-либоязыкепрограммирования,сцельюихиспользованияпрограммаминалюбом другом языке, поддерживающим DLL. Xtreme3D, например,написан на Delphi, и в нем содержится около 580 таких инструкций.Назовем из для простоты функциями. При помощи интерфейса GameMaker мы можем создать скрипты, каждый из которых будет вызыватьопределеннуюфункциюизбиблиотеки.Послеэтогоможнобудетвызыватьфункции через код GML по названиям скриптов. Вот типичный примерфункцииXtreme3D:ObjectSetMaterial(object,'material').Некоторыефункциивозвращают различные числовые и строковые значения. Например, присоздании объекта возвращается его идентификатор (id), которыйнеобходимозаписатьвпеременнуюдлядальнейшейработысобъектом.

Следующий важный момент: константы. Многие функции используют вкачествеаргументовчисловыекоды,иневсегдалегкозапомнить,какойкоднужендлядостижениянужногоэффектаиливключениянужногорежима.Поэтомуможновместокодоввводитьсоответствующиеназванияконстант(список констант и их числовых значений можно увидеть вGlobal GameSettings, вкладка Constants). По негласной традиции константы Xtreme3Dвыглядят так: tmmCubeMapReflection. Строчные буквы в начале (tmm)обозначаютсвойство,ккоторомуотноситсяконстанта.ВданномслучаеэтоTextureMappingMode, а функция, задающая его -MaterialSetTextureMappingMode('material',tmm), где вместо tmmподставляетсянужнаяtmm-константа.Помните, что константы являются частью Game Maker/GML и к самойXtreme3D.dllониотношениянеимеют.

Page 12: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

Для начала работы вам понадобится файл *.gm6 (или *.gmk для GameMaker7),сготовымнаборомфункцийиконстантXtreme3D.Такойфайлвыможете взять из официального дистрибутива движка. Для подготовки кработе достаточно удалить из него все объекты. Назовем его условноproject.gm6.Скопируйтееговотдельнуюпапкуидобавьтетудажефайлыxtreme3d.dllиode.dll.

Откройтеproject.gm6.СоздайтеновыйобъектGameMakerиназовитеегоo_engine.ДобавьтесобытиеCreateиперетащитедействиеExecuteapieceofcodeсовкладкиControl.ЕсливыужеработалисGML,проблемнебудет.Если нет, настоятельно рекомендуем оставить пока Xtreme3D и изучитьязыкнавстроеннойграфикеGameMaker.

Следующийкодзагружаетфункцииизбиблиотекиxtreme3d.dllвпамятьизапускаетработудвижка:

dll_init('xtreme3d.dll');EngineCreate();

Идемдальше:

view=ViewerCreate(window_handle,0,0,640,480);ViewerSetLighting(view,1);

Для того, чтобы наблюдать что-либо в окне с игрой, понадобится Вид(Viewer).Вид-этопрямоугольник,вкоторомпроисходитотрисовкасценыXtreme3D. Все, что за пределами этого прямоугольника, "принадлежит"встроеннойграфикеGameMaker.МысоздалиВидразрешением640х480,под размер окна, так что графики Game Maker и вовсе не будет видно.ПозициянашегоВиданаэкране-(0,0).Посуществу,этокоординаталевоговерхнегоуглаВида,относительнолевоговерхнегоуглаокна.ТакжевфункциюViewerCreateпередаетсяwindow_handle(),функцияGML,возвращающая идентификатор главного окна игры. Таким образом, Видбудет"привязан"кокнуигрыGameMaker,чтонаминужно.Какнистранно,Вид-этотожеобъект,поэтомуприсозданиимызаносимего идентификатор в переменную, в нашем случае - view. Мы можемиспользовать идентификатор Вида для изменения его свойств. В данныймомент нас интересует только одно - использование освещения

Page 13: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

(ViewerSetLighting). Если выключить освещение (0), все объекты будутвыглядеть плоскими и необъемными. Поэтому мы его включаем (1).Правда,длятого,чтобыосвещениеработало,надоещесоздатьисточникисвета:

light=LightCreate(lsOmni,0);ObjectSetPosition(light,0,18,0);

Функция LightCreate создает источник света и возвращает егоидентификатор,таккаксвет -этотожеобъект.ВXtreme3Dестьтритипаисточников света - точечный (константа lsOmni), направленный (lsSpot) ипараллельный (lsParallel). Точечный излучает свет равномерно во всехнаправлениях(как,например,лампочка),направленныйсветитвпределахконуса (как фонарик), параллельный испускает параллельные лучи внаправленииоднойоси(имитациясолнечногосвета).Мыможемназначитьисточникусветародителя,но,посколькуникакихсценическихобъектовунас пока нет, подставляем вместо родителя 0. Создав точечный источниксвета,можноуточнитьегоположениевпространстве-точка(0,18,0).

Мывсеещеничегонеувидим,посколькусветунечегоосвещать.Создадимкакой-нибудь простейший видимый объект. Но перед этим необходимосоздатькорневыеобъектынашейсцены:

global.back=DummycubeCreate(0);global.scene=DummycubeCreate(0);global.front=DummycubeCreate(0);

Функция DummycubeCreate создает Манекен (Dummycube) и возвращаетегоидентификатор.Объект,носящийэтозабавноеназвание,играетважнуюроль в формировании иерархии. Манекен невидим, это как бы объект-призрак. Но, в то же время, он обладает всеми обычными свойствамиобъектов, которыемырассмотрели впредыдущей главе - координатамивпространстве, векторами Direction, Up, Left и т.д. Его можно свободноперемещать,вращатьимасштабировать.Манекенможетиметьродителяипотомков.ВданномслучаемысоздалитрикорневыхМанекена.Корневых- потому что выше их в иерархии ничего не будет. Все остальныесценическиеобъектыбудутпотомкамиэтихтрехМанекенов:global.back-родительдляобъектовназаднемплане(небо,фонит.д.)global.scene-родительдляобъектовнасценическомплане(всетрехмерные

Page 14: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

объекты)global.front-родительдляобъектовнаэкране(спрайты,текстит.д.)Важно соблюсти именно этот порядок создания Манекенов - сначалазадний план, потом сцена, потом экран. Это необходимо для того, чтобыдвижок мог отрисовать объекты в нужном порядке. Этот порядокназывается сортировкой: все объекты отрисовываются в том порядке, вкоторомбылисозданы,онисамиилиихродители.

Создадимпервыйобъектсценическогоплана-плоскость:

plane=PlaneCreate(0,64,64,8,8,global.scene);ObjectPitch(plane,90);

Плоскость - один из примитивов, простых геометрических тел, которыегенерируются движком. Функция PlaneCreate создает плоскость ивозвращаетееидентификатор.Рассмотримееаргументы:0 - определяет, нужно ли представить плоскость одним квадратом(сокращенно - квадом), или разбить на несколько; нам для красивогоосвещениянужнонесколько,поэтомууказываем0;64,64-размерплоскости;8,8-количествоквадов.Вобщейсложностиплоскостьбудетразбитана8*8=64квадов;global.scene-родитель.Созданная нами плоскость по умолчанию вертикальна, поэтому надо ееповернуть на 90 градусов по оси X. Если помните, поворот по оси XназываетсяPitch,поэтомунамнужнафункцияObjectPitch.

Мы все еще ничего не увидим, так как не создали Камеру. Камера - этотоже объект, невидимый, как и Манекен. Используется для проекциитрехмерной сцены на плоскость экрана, а точнее - на плоскость Вида.Проекция осуществляется из точки положения Камеры в направлениивектора Direction Камеры. Проще говоря, куда смотрит Камера, то мы ивидим,какивреальнойжизни.

camPos=DummycubeCreate(global.scene);ObjectSetPosition(camPos,0,10,0);camera=CameraCreate(camPos);ViewerSetCamera(view,camera);

Page 15: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

Передсозданиемкамерымысоздалидлянееродителя-ещеодинМанекен.Это сделанодля того, чтобысамакамерамогла свободновращаться, а еедвижениеконтролировалосьчерезэтотМанекен.ФункцияViewerSetCameraуказываетВиду,какуюКамеруиспользоватьдляпередачиизображения.

Каквидите,покавседостаточнопросто.Осталосьтолькопоследнее:

set_automatic_draw(0);

Этой функцией мы отключаем автоматическую отрисовку графики GameMaker - все равно Вид ее полностью перекроет, нет смысла тратитьресурсысистемынаееобработку.

Сценумысоздали,осталосьзаставитьееработать.ДобавьтесобытиеStepивнемдобавьтеследующийкод:

ifkeyboard_check(vk_left)ObjectTurn(camPos,-2);ifkeyboard_check(vk_right)ObjectTurn(camPos,2);ifkeyboard_check(vk_up)ObjectMove(camPos,-1);ifkeyboard_check(vk_down)ObjectMove(camPos,1);

Теперь,когдапользовательнажметклавишу,скажем,"Вверх",Камерабудетдвигаться вперед (соответственно и для клавиши "Назад"). Для поворотаКамеры используются клавиши "Влево" и "Вправо". ПоворотосуществляетсяпоосиY(Turn),поэтомуиспользуетсяфункцияObjectTurn.Заметьте, что для трансформации мы используем не саму Камеру, а ееродителя.БлагодаряэтомумыпотомсможемвращатьКамеруприпомощимыши.

Update(1.0/room_speed);ViewerRender(view);

Эти две функции надо обязательно вызвать, иначе движок будет"парализован".Updateобновляетсостояниеобъектовсцены,ViewerRenderсовершает отрисовку указанного Вида. В функцию Update необходимопередатьшагвременидляобновленияанимации.Онизмеряетсявсекундахиможетбытьравенвременимеждудвумякадрамирендеринга.ОбычновGameMakerэтовремяограничиваетсявнастройкахкомнаты-задаетсятак

Page 16: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

называемая "скорость комнаты", максимальная кадровая частота,измеряемая в кадрах в секунду.Обычно ее устанавливают равой 60 - этозначение соответствует частоте обновления монитора. Мы можемвычислить временной промежуток между кадрами, поделив единицу (1секунду)наэтозначение.

Это все! Теперь можно поместить наш объект o_engine в комнате изапускать.

Поздравляю,высоздалисвоюпервуюрабочуюпрограммуXtreme3D!Вотееполныйисходныйкод:

ВсобытииCreate:

dll_init();EngineCreate(window_handle());view=ViewerCreate(0,0,640,480);ViewerSetLighting(view,1);light=LightCreate(lsOmni,0);ObjectSetPosition(light,0,18,0);global.back=DummycubeCreate(0);global.scene=DummycubeCreate(0);global.front=DummycubeCreate(0);plane=PlaneCreate(0,64,64,8,8,global.scene);ObjectPitch(plane,90);camPos=DummycubeCreate(global.scene);ObjectSetPosition(camPos,0,10,0);

Page 17: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

camera=CameraCreate(camPos);ViewerSetCamera(view,camera);set_automatic_draw(0);

ВсобытииStep:

ifkeyboard_check(vk_left)ObjectTurn(camPos,-2);ifkeyboard_check(vk_right)ObjectTurn(camPos,2);ifkeyboard_check(vk_up)ObjectMove(camPos,-1);ifkeyboard_check(vk_down)ObjectMove(camPos,1);Update();ViewerRender(view);

Page 18: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

Урок3ИерархияобъектовУровень:начинающийВерсияXtreme3D:3.0.xАвторурока:Gecko

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

Представьтесебе,кпримеру,такуюситуацию:необходимосмоделироватьпростейшую звездную систему - солнце и вращающуюся вокруг неепланету. Вокруг планеты, в свою очередь, вращается спутник. Дляпростоты будем пока мыслить в двумерном пространстве. Как можнопоступить?

ПустьSun - солнце,Planet -планета,Moon - спутник.Укаждогообъектаестьдвекоординаты-XиY,атакжеуголвращениявокругсвоейоси-A.Тогда(впсевдокоде)

Sun.X=0Sun.Y=0Planet.X=Sun.X+cos(Sun.A)*10Planet.Y=Sun.Y+sin(Sun.A)*10

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

Page 19: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

Moon.X=Planet.X+cos(Planet.A)*2Moon.Y=Planet.Y+sin(Planet.A)*2

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

Planet.Parent=SunMoon.Parent=Planet

Иобновлятькоординатыобъектоводинаковойдлявсехформулой:

Object.X=Object.Parent.X+cos(Object.Parent.A)*2Object.Y=Object.Parent.Y+sin(Object.Parent.A)*2

Такиреализуетсяпростейшаяиерархия.

С двумерной графикой все относительно просто. Но как быть стрехмерной? В трехмерной графике вдобавок к синусам и косинусамиспользуютсявекторыиматрицы.Операцииснимидовольноресурсоемкии чрезвычайно сложны для осмысления новичком. К тому же, слишкомчасто осуществлять такие операции на уровне GML нерационально: дляхранения массивов под матрицы потребуется больше памяти, аматематические операции с ними снизят FPS. Но не все так ужасно.Xtreme3D берет на себя все ресурсоемкие вычисления, исполняя их науровне машинного кода, поэтому ее иерархия будет работать гораздобыстрееиточнее,чемнаписаннаявручнуюнаGML.

ПрииспользованиивстроеннойиерархииXtreme3Dвсяработасводитсякуказанию родителей для объектов. Весь фокус в том, что потомокнаследует координатную систему родителя. Например, координатыродителя(X,Y,Z)становятсякоординатамицентра,относительнокотороговедется отсчет собственных координат его потомка (X+x, Y+y, Z+z).Потомок, в свою очередь, передает собственные координаты своимпотомкам, и так далее. Собственные координаты объекта называютсялокальными.

Page 20: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

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

Длясозданиясистемыссолнцемипланетамивнашемслучаедостаточнонаписатьчто-товродеэтого:

sun=SphereCreate(4,24,24,global.scene);ObjectSetPosition(sun,0,0,0);planet=SphereCreate(1,24,24,sun);ObjectSetPosition(planet,0,0,10);moon=SphereCreate(0.5,24,24,planet);ObjectSetPosition(moon,0,0,2);

Функция SphereCreate создает сферу. Необходимо указать ее радиус, атакжеколичествомеридианипараллелей.Унашегосолнцарадиусравен4,упланеты—1,успутника—0.5.Меридианыипараллели(slices,stacks)делят сферу на квадраты, количество которых задает качество внешнеговидасферы.Обычнодостаточноуказать24меридианаи24параллели.ТеперьможновсобытииStepповорачиватьсолнцеипланету:

ObjectTurn(sun,2);ObjectTurn(planet,6);

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

Page 21: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

Урок4КамераотпервоголицаУровень:начинающийВерсияXtreme3D:3.0.xАвторурока:Gecko

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

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

camPos=DummycubeCreate(global.scene);ObjectSetPosition(camPos,0,2,0);camera=CameraCreate(camPos);ViewerSetCamera(view1,camera);

Деловтом,чтокамерадолжнадвигатьсятольковплоскостиXZ-инымисловами, не должна "летать" по воздуху. Мы будем поворачивать объектcamPosпоосиY,когдапользовательсместитмышьпогоризонтали-такимобразом,можнобудетуправлятьнаправлениемдвижения.СмещениемышиповертикаливызоветлокальныйповоротобъектаcameraпоосиX-такимобразом, пользователь сможет смотреть вверх и вниз, но это никак неповлияет на направление движения, ведь camera наследует движение отcamPos.

Объявимтакжеследующиепеременные:

centerX=display_get_width()/2;centerY=display_get_height()/2;

Это координаты центра экрана. Мы будем считывать смещение мыши

Page 22: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

относительноэтойточки,азатемвозвращатьвнеекурсор.

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

display_mouse_set(centerX,centerY);

Теперь переходим к событию Step. Следующий код вычисляет смещениекурсора мыши относительно центра экрана и поворачивает camPos иcameraнасоответствующиеуглы,deltaXиdeltaY:

deltaX=(centerX-display_mouse_get_x())/3;deltaY=(centerY-display_mouse_get_y())/3;ObjectRotate(camera,deltaY,0,0);ObjectRotate(camPos,0,-deltaX,0);display_mouse_set(centerX,centerY);

Осталосьреализоватьдвижение.МыбудемиспользоватьстандартнуюдляигротпервоголицараскладкуWASD:

dt=1.0/room_speed;ifkeyboard_check(ord('W'))ObjectMove(camPos,-10*dt);ifkeyboard_check(ord('A'))ObjectStrafe(camPos,10*dt);ifkeyboard_check(ord('D'))ObjectStrafe(camPos,-10*dt);ifkeyboard_check(ord('S'))ObjectMove(camPos,10*dt);

Смысл умножения на dt в следующем. Если двигать объекты сфиксированной скоростью, их фактическая скорость движения будетпривязана к кадровой частоте приложения. То есть, например, если мыдвигаемобъектна10единицзакадр,скоростьпричастотев60FPSбудетравняться 10 * 60 = 600 единицам в секунду. При частоте 120 FPS,соответственно-10*120=1200.Витоге,объектбудетдвигатьсябыстрееилимедленнее, в зависимости от FPS.Это совсем не то, что нам нужно,поэтому нужно задавать скорость в других величинах, не привязанных ккадру.Например-вединицахвсекунду.Следовательно,кадроваяскоростьбудет равна V / FPS, где V - скорость.Мы просто выясняем, на сколькообъект должен переместиться за один кадр, если в секунду онперемещается на V единиц. Таким образом, объект будет двигаться справильнойскоростьюприлюбойкадровойчастоте.

Page 23: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

Чтобы не загромождать код делениями (деление, как известно,относительномедленнаяоперация),мывместоэтогоумножаемскоростьна1 / FPS - это значение можно рассчитать только один раз. Оно такженазываетсяшагомвремени(именноэтотшагвремениследуетпередаватьвфункциюUpdate,очемговорилосьнауроке2).ВGameMaker8кадроваячастота(FPS)обычнофиксированаизадаетсявнастройкахкомнаты(Roomspeed).Ееможновыставитьравной60или120.

Page 24: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

Урок5БиблиотекаматериаловУровень:начинающийВерсияXtreme3D:3.0.xАвторурока:Gecko

Одна из самых замечательных особенностей Xtreme3D— использованиебиблиотекиматериалов.Материал-этонаборпараметров,определяющихвнешнийвидобъекта.В этотнабор входят значенияцвета, прозрачности,текстуры, типа смешивания и т.д. Понятие материала в Xtreme3D кудаболее фундаментально, чем во многих других движках. Очень часто подматериалом понимается текстура, но в Xtreme3D материал может и неиметь текстуры. В других случаях система материалов бываетнепродуманнойилинеполной,чегонельзясказатьоXtreme3D.

Материалсоздаетсяодинразиможетбытьпримененклюбомуколичествуобъектов, поддерживающихматериалы.Изменение параметров материалакоснетсявсехобъектов,использующихэтотматериал.Такойпринципдаетощутимые выгоды (экономия памяти, объема кода, времени и трудапрограммиста),хотяможетвызватьиопределенныенеудобства(например,если необходимо, чтобы изменения параметров материала коснулисьтолько одного конкретного объекта). Материал в Xtreme3D имеетуникальноеимя,покоторомуосуществляетсяизменениепараметров.Имязадаетсястроковымзначением,например"mGround".

Библиотекой материалов (Material Library) называется специальнаяконструкция, содержащая список материалов. Библиотека может бытьактивной или неактивной. В первом случае в нее можно добавлятьматериалы,настраиватьихиприменятькобъектам.Вовторомслучаеэтоневозможно.Поскольку разные библиотекимогут содержатьматериалы содинаковыми именами, нельзя сделать активными две или болеебиблиотекиодновременно.

Смысл в использовании нескольких библиотек материалов заключается в

Page 25: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

возможности определять для них индивидуальные пути к текстурам. Этипути учитываются при загрузке моделей, использующих внешние файлытекстур.Поумолчаниюбиблиотеки ищут текстуры в рабочей директорииигры. Разумеется, хранить их там—не самая лучшаяидея.Несомненно,лучше распределить их по отдельнымпапкам.Например, если у вас естьтрипапкистремяразнымимоделямиуровней,томожнобудетсоздатьдлякаждой из них свою библиотеку материалов и назначить им пути ктекстурам,соответствующиеискомымпапкам.

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

Сначаласоздаетсяиактивируетсябиблиотекаматериалов:

matlib=MaterialLibraryCreate();MaterialLibraryActivate(matlib);

Теперьможносоздаватьсамиматериалы:

MaterialCreate('mTexture','texture.jpg');

Этафункция одновременно создаетматериалиприсваивает ему текстуруиз файла. Xtreme3D поддерживает форматы BMP, JPG, PNG, TGA, DDS.Рекомендуетсяиспользоватьтекстурысостороной,равной128,256,512ипрочим степеням двойки. Текстура не обязательно должна бытьквадратной.

Вы можете создать материал без текстуры, просто оставив строку именифайлапустой:

MaterialCreate('mColor','');

В этом случае можно задать цвет материала. Проще всего это сделатьфункцией

Page 26: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

MaterialSetDiffuseColor('mColor',c_red,1);

ЦветвыможетепередатьвстроеннымиконстантамиGML(с_red,c_yellow,c_greenидр.),функциямиmake_color_rgb(r,g,b)илиmake_color_hsv(h,s,v)дляцветовыхмоделейRGBиHSV,соответственно,атакжевобратномшестнадцатиричномформате,например,$0000FFозначаеткрасный.

Кроме цвета, функция MaterialSetDiffuseColor задает значениепрозрачности—альфа—лежащеевпромежуткеот0до1.Альфавнашемслучаеравно1(полнаянепрозрачность).

Строгоговоря,MaterialSetDiffuseColor задает толькоодинизкомпонентовцветаматериала,авсегоихчетыре-Ambient,Diffuse,SpecularиEmission.Такое разделение связано с тем, что участки поверхности с различнымуровнем освещенности могут иметь разный цвет. Ambient задает общийоттенок материала, не зависящий от освещения (цвет теневой стороны),Diffuse-цветосвещеннойстороны,Specular-цветблика,Emission—цветимитации самосвечения. Более того, сами источники освещения такжеимеютсобственныекомпонентыAmbient,Diffuse и Specular, и это делаетцветобъектовещеболеесложнымимногообразным.

Вы можете отключить для материала освещение (и, заодно, влияниетумана,окоторомпойдетречьчутьпозже):

MaterialSetOptions('mColor',1,0);

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

Применитьсозданныйматериалкобъектуоченьпросто:

ObjectSetMaterial(object,'mTexture');

Кстати,вернемсякматериалустекстурой.Сэтойтекстуройможнотворитьудивительные вещи! Например, изменение режима проецирования насферическийсделаетматериалпохожимнаотражениенаметалле:

MaterialSetTextureMappingMode('mTexture',tmmSphere);

Page 27: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

А чтобы многократно повторить текстуру на поверхности объекта,меняетсяеемасштаб:

MaterialSetTextureScale('mTexture',10,10);

Приэтомтекстураповторитсядесятьраз.

В качестве самостоятельной работы попробуйте создать и наложитьматериалы на планеты из предыдущего урока про иерархию. В качестветекстурможноиспользоватьреальныекартыповерхностиЗемлииЛуны.АСолнцеможнооставитьбезтекстурыисделатьпростожелтым.Вспомнитетакже, как создается источник освещения и сделайте его дочерним дляСолнца, чтобы оно излучало свет (в этом случае стоит отключитьосвещениедляегоматериала).

Page 28: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

Урок6ПримитивыУровень:начинающийВерсияXtreme3D:3.0.xАвторурока:Gecko

Примитивамиобычноназываютлибопростейшиеобъекты,которыеможетнарисоватьGPU (точка, отрезок, треугольник), либо геометрические тела,встроенные в графический движок. В Xtreme3D используется второезначениеэтоготермина.Ктелам-примитивамотносятсяплоскость(plane),куб(cube),сфера(sphere),цилиндр(cylinder),конус(cone),полыйцилиндр(annulus),тор(torus),диск(disk),усеченнаяпирамида(frustrum),додекаэдр(dodecahedron), икосаэдр (icosahedron) и чайник Юта (teapot). Напредыдущих уроках мы уже создавали некоторые из них. Давайтепознакомимсяспримитивамипоближе.

Plane. Прямоугольная плоскость. В Xtreme3D плоскость может бытьпредставлена однимпрямоугольником (квадом), либо разбита на сетку изквадов.Второйвариантболеепредпочтителен,есливысоздаетебольшуюплоскость-землю, так как в этом случае получается более качественноевершинное освещение (впрочем, при использовании попиксельногоосвещения детализация плоскости особого значения, как правило, неимеет). Обратите внимание, что количество квадов влияет на повторениетекстуры на плоскости (один квад - один тайл текстуры). ПлоскостьсоздаетсяфункциейPlaneCreate.

Cube.Куб.Строгоговоря,этонеобязательнокуб,алюбойпрямоугольныйпараллелепипед.СоздаетсяфункциейCubeCreate.

Sphere.Сфера.СоздаетсяфункциейSphereCreate.

Cylinder.Цилиндр.СоздаетсяфункциейCylinderCreate.

Cone.Конус.СоздаетсяфункциейConeCreate.

Page 29: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

Annulus.Полыйцилиндр(кольцо).СоздаетсяфункциейAnnulusCreate.

Torus.Тор(тело,напоминающеебублик).СоздаетсяфункциейTorusCreate.

Disk.Диск.СоздаетсяфункциейDiskCreate.

Frustum.Усеченнаяпирамида.СоздаетсяфункциейFrustrumCreate.

Dodecahedron.Додекаэдр-многогранник,составленныйиз12правильныхпятиугольников.СоздаетсяфункциейDodecahedronCreate.

Icosahedron. Икосаэдр - многогранник, составленный из 20равностороннихтреугольников.СоздаетсяфункциейIcosahedronCreate.

Teapot. Чайник Юта. Вы можете почитать подробнее об этой модели вглоссарии.СоздаетсяфункциейTeapotCreate.

Page 30: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

Урок7ЗагрузкамоделиизфайлаУровень:начинающийВерсияXtreme3D:3.0.xАвторурока:Gecko

Примитивы-это,конечно,хорошо,нодлясозданияполноценнойигрыихявно недостаточно. Самое любимое занятие каждого, кто начинаетзнакомитьсяс3D-движками,-несомненно,загрузкавдвижоксобственныхмоделей,подготовленныхвстороннемредакторе.Xtreme3Dподдерживаетзагрузкумоделейформатов3DS(3DStudio),OBJ(Maya),LWO(Lightwave),BSP(Quake),MS3D(Milkshape),B3D(Blitz3D),LOD(LODka3D)имногихдругих.Статичная (то есть, неанимированная) модель в Xtreme3D загружается вспециальныйобъект-Freeform:

model=FreeformCreate('model.3ds',matlib,matlib,global.scene);

Второй и третий параметры этой функции отвечают за библиотекиматериалов, которые следует использовать, соответственно, для обычныхтекстур и карт освещения модели. Хорошим тоном является созданиеотдельной библиотеки материалов для каждого объекта Freeform, чтобыгарантированно избежать конфликта имен материалов. В данном случаедляпростотыиспользуетсяоднаитажебиблиотека.Если файл с моделью включает информацию о текстурах, Xtreme3Dпопытаетсяавтоматическизагрузитьих.Вопростольков том, гдеименнодвижокбудетискатьэтитекстуры.Поумолчанию-врабочейдиректорииигры. Но хранить их там - не лучшая идея. Гораздо удобнее поместитьтекстурывкакую-либопапку,наример,textures.Тогданампридетсяуказатьактивнойбиблиотекематериалов,чтотекстурыследуетискатьименнотам:

MaterialLibrarySetTexturePaths(matlib,'textures');

Материалыбудутзагруженывбиблиотекуподтемиименами,какиебыли

Page 31: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

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

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

car=DummycubeCreate(global.scene);FreeformToFreeforms(model,car);

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

ObjectDestroy(model);

Чтобы управлять созданными объектами, нам нужно получить ихидентификаторы. Это можно сделать функциейObjectGetChild. Для этогоне лишним будет знать, сколько всего мешей было в исходной модели.Допустим,чтопять-четыреколесаикузов:

car_body=ObjectGetChild(map,0);car_wheel1=ObjectGetChild(map,1);car_wheel2=ObjectGetChild(map,2);car_wheel3=ObjectGetChild(map,3);car_wheel4=ObjectGetChild(map,4);

Помните,чтоотсчетведетсяснуля,поэтомупервыйпотомок-нулевой.Таким образом, мы получили новую иерархию, по структуре полностьюидентичнуюсисходноймоделью.Вытеперьможетевращатьколеса:

Page 32: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

ObjectPitch(car_wheel1,3);ObjectPitch(car_wheel2,3);ObjectPitch(car_wheel3,3);ObjectPitch(car_wheel4,3);

ВместоObjectPitchможноиспользоватьObjectRoll-взависимостиоттого,куда"смотрит"кузовавтомобиля:вдольосиZилиX.

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

Page 33: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

Урок8ВершиннаяанимацияУровень:начинающийВерсияXtreme3D:3.0.xАвторурока:Gecko

Объект Freeform предназначен, в основном, для неодушевленныхпредметов. Обычно это элементы декорации, транспортные средства,различные интерактивные объекты и т.д. Если мы хотим заселить нашвиртуальный мир живыми существами, нам не обойтись без объектовActor. Название говорит само за себя: актер - это живой персонаж. ВXtreme3D Актеры представляют собой анимированные модели. Аанимация, как известно, бывает двух типов - вертексная и скелетная. Наэтомурокемырассмотримвертекснуюанимацию.Вертексная (или вершинная) анимация характерна тем, что дляформирования анимационной последовательности движок перемещаеткаждую вершинумодели от одной позиции к другой.Этот тип анимациивпервыебылпримененвQuake,истехпорформатымоделейсерииQuake(MD2, MD3) стали своего рода стандартом во всех популяных движках.Xtreme3DпредоставляетполнуюподдержкуMD2иMD3.Разницамеждуними заключается в том, что MD2 хранит всю модель целиком в одномфайле, аMD3 - в трех (отдельно голова, туловище и ноги).При помощиспециальных матриц туловище синхронизируется с ногами, а голова - стуловищем. Это было сделано для того, чтобы анимировать туловище иноги по отдельности. Например, во время стрельбы персонаж может какбежать,такиидтимедленно,атоипростостоятьнаместе.

На этом уроке мы рассмотрим вертексную анимацию с форматом MD2.АктеризмоделиMD2создаетсятак:

actor=ActorCreate('model.md2',matlib,matlib,global.scene);

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

Page 34: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

осей трактуется по-разному. Обычно "меняются местами" оси Y и Z.Вершинымоделизаписанытак,чтоеевекторUpнаправленвдольосиZ(вDirectX-приложениях это означает "вверх"), и, поскольку за направление"вверх" в Xtreme3D отвечает ось Y, а не Z, получается, что модельповернута на -90 градусов по оси X. Мы можем исправить этонедоразумениенесколькимиспособами.Самыйпростой-простоповернутьееобратно:

ObjectPitch(actor,90);

Но в некоторых случаях этого недостаточно. Поворачивая модель, мытакже поворачиваем ее локальную систему координат. Это значит, что еевекторDirection теперь указывает вдоль осиY, а не Z, как должно быть.Если мы теперь переместим модель при помощи ObjectMove, онасдвинется вверх, а не вперед. Можно, конечно, вместо ObjectMoveиспользоватьObjectStrafe,ноэтосделаетпрограммуменееаккуратной,даизапутаться так недолго. Гораздо лучше сначала поместить Актера впотомки Манекену, а уже потом поворачивать. И, соответственно, дляперемещенияиспользоватьМанекен,анеАктера.Кодбудетследующий:

player=DummycubeCreate(global.scene);actor=ActorCreate('model.md2',matlib,matlib,player);ObjectPitch(actor,90);

Формат MD2 предусматривает разделение всех кадров анимации наотдельные группы. Это сделано для того, чтобы отделить, скажем,анимацию бега от анимации прыжка. По умолчанию Xtreme3Dвоспроизводит все кадры один за другим, не обращая внимания на эторазделение. Но мы можем в любое время переключиться на желаемуюанимацию:

ActorSwitchToAnimation(actor,1,false);

И тогда будет воспроизводиться только группа кадров под номером 1.Третий параметр этой функции отвечает за плавность смены анимации:еслиустановитьеговtrue,топереключениебудетпостепенным.Примернотожесамоеделаетфункция,указывающаядиапазонкадровдлявоспроизведения:

Page 35: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

ActorSetAnimationRange(actor,10,20);

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

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

ActorSetAnimationMode(actor,aam);

Вместоaamподставляетсяоднаизследующихконстант:

aamNone-анимацияневоспроизводится;aamPlayOnce-анимациявоспроизводитсяодинразиостанавливаетсяпридостиженииконечногокадра.Этотрежиминогданазывают"oneshot";aamLoop-анимацияповторяетсяциклически(поумолчанию);aamBounceForward - анимация повторяется циклически вперед доконечного кадра, затем в обратную сторону до начального кадра, затемопятьвпередитакдалее.Этотрежиминогданазывают"пинг-понг".aamBounceBackward-тожесамое,новобратнуюсторону;aamLoopBackward-анимацияповторяетсяциклическивобратнуюсторону.

Наконец, существует также возможность отключить линейнуюинтерполяциюмеждукадрами:

ActorSetFrameInterpolation(actor,false);

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

Page 36: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

анимацииможнохранитьразныевариантыповреждений.

Page 37: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

Урок9ОсновыскелетнойанимацииУровень:начинающийВерсияXtreme3D:3.0.xАвторурока:Gecko

Поройвозможностейвертекснойанимацииоказываетсянедостаточно.Этокасается, в основном, игр жанра action. Например, вы можете захотеть"дать" своему герою в руки оружие или "надеть" на него броню. Прииспользовании вершинной анимации это невозможно (за редкимиисключениями). Кроме того, вершинная анимация может потребоватьслишкоммногопамятидляхранениякадров.Поэтому,есливыиспользуетемодели с большим количеством полигонов, разумнее будет выбратьскелетнуюанимацию.Вместо того чтобы хранить ключевые кадры (как в случае вертекснойанимации) для каждой позы персонажа, использование скелетнойанимации подразумевает наличие одной модели в нейтральной позе ибольшогонабораматриц,которыетрансформируютразличныечастиэтоймодели. Эти матрицы условно называют костями. К каждой костипривязана группа вершин. Одна вершина может "принадлежать"несколькимкостямсразу,сразнойстепеньювлияния,чтоделаетанимациюболееестественной(этосвойствокостейназываетсяразвесовкой).Впервые эта технология использовалась в игре Half-Life, и Xtreme3Dподдерживает формат моделейHalf-Life - SMD.В качестве альтернативыSMD,поддерживаетсятакжеформатмоделейDoomIII-MD5.

ДлязагрузкимоделейсоскелетнойанимациейиспользуетсятотжеобъектActor.Вамненужноничегодополнительноуказывать,Xtreme3Dспособенсамостоятельнораспознатьтипмоделиинастроитьсянасоответствующийтипанимации:

actor=ActorCreate('model.smd',matlib,matlib,global.scene);

Особенность формата SMD заключается в том, что анимация модели

Page 38: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

хранится в отдельном файле, который также имеет расширение *.smd.Такихфайловможетбытьнесколько.Теоретически,такойметодпозволяетиспользоватьодниитежефайлыанимациидляразныхмоделей(еслиониимеютодинаковыйскелет).ПослесозданияАктераследуетдобавитьэтифайлы:

ActorAddObject(actor,'animation1.smd');ActorAddObject(actor,'animation2.smd');ActorAddObject(actor,'animation3.smd');

При добавлении очередного smd-файла, к анимации Актера добавляетсяновая группа кадров, которой присваивается порядковый номер. Отсчетведетсяс1.Тоесть,еслимытеперьпереключимсянагруппу2:

ActorSwitchToAnimation(actor,2,false);

...тобудетпроигранаанимация,загруженнаяизфайлаanimation2.smd.

Кскелетнойанимацииприменимывсефункции,которыемырассмотрелинапредыдущемуроке.

Page 39: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

Урок10КамераоттретьеголицаУровень:среднийВерсияXtreme3D:3.0.xАвторурока:Gecko

Многие игры используют вид от третьего лица, где камера показываетперсонажа"соспины"-это,например,многиеигрыжанровActionиRPG,3D-платформерытипаSpyroилиCrashBandicoot,спортивныесимуляторыит.д.Приэтом,какправило,камеранеявляетсяжесткозафиксированнойна определенном расстоянии от персонажа - она обычно перемещаетсяплавно, с некоторым запаздыванием, что добавляет реализма икинематографичности.

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

КодвсобытииCreate:

camera=CameraCreate(global.scene);CameraSetViewDepth(camera,800);CameraSetFocal(camera,80);ViewerSetCamera(view1,camera);

actor=CubeCreate(1,1,1,global.scene);

target=DummycubeCreate(actor);ObjectSetPosition(target,0,1,-4);CameraSetTargetObject(camera,actor);

КодвсобытииStep:

Page 40: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

ifkeyboard_check(vk_up)ObjectMove(actor,10*dt);ifkeyboard_check(vk_down)ObjectMove(actor,-10*dt);ifkeyboard_check(vk_left)ObjectTurn(actor,-200*dt);ifkeyboard_check(vk_right)ObjectTurn(actor,200*dt);

cx=ObjectGetAbsolutePosition(camera,0);cy=ObjectGetAbsolutePosition(camera,1);cz=ObjectGetAbsolutePosition(camera,2);tx=ObjectGetAbsolutePosition(target,0);ty=ObjectGetAbsolutePosition(target,1);tz=ObjectGetAbsolutePosition(target,2);dx=tx-cx;dy=ty-cy;dz=tz-cz;ObjectTranslate(camera,dx*0.05,dy*0.05,dz*0.05);

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

Page 41: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

Урок11ПроверкастолкновенийУровень:среднийВерсияXtreme3D:3.0.xАвторурока:Gecko

В играх очень часто требуется определить факт столкновения двухобъектов. Ими могут быть, к примеру, персонаж и платформа, снаряд ицель и т.д. На обнаружении столкновений основана логика шутеров,платформеров,симуляторов,ролевыхигринекоторыхстратегий.Приэтомдалеко не всегда требуется обнаружить точное пересечение двухполигональных мешей - достаточно протестировать на пересечение ихограничивающиесферы(BoundingSphere)илипараллелепипеды(BoundingBox).Xtreme3Dвключаетудобныеинструменты,позволяющиевамсделатьэто.

Функции проверки столкновений в Xtreme3D начинаются на"ObjectCheck..." и оперируют ограничивающими сферами ипараллелепипедами объектов, которые вычисляются движкомавтоматически,в зависимостиотобъема,которыйзанимаетихгеометрия.Ограничивающиепараллелепипеды(которыевэтихфункцияхназываютсяCube) выровнены по локальным координатным осям объекта - то есть,могут вращаться вместе с ним. Такие параллелепипеды часто называютOrientedBoundingBox,илисокращенноOBB.Функциивозвращаютистину(1),еслиобнаруженопересечение,иложь(0)впротивномслучае.

Xtreme3D включает следующие функции проверки столкновений:ObjectCheckSphereVsSphere, ObjectCheckSphereVsCube,ObjectCheckCubeVsCube,ObjectCheckCubeVsFace,ObjectCheckFaceVsFace.Последние две из них оперируют объектами типа Freeform -соответственно, позволяют обнаружить пересечение ограничивающегопараллелепипеда одного объекта с полигональной моделью другого, атакже пересечение двух моделей. Эта проверка довольно медленная,поэтому рекомендуем оптимизировать ее использование - например,

Page 42: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

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

ifObjectCheckSphereVsSphere(obj1,obj2){ifObjectCheckFaceVsFace(obj1,obj2){//делаемчто-то}}

Этифункцииполезны,когданужновыполнитьдискретнуюпроверку - тоесть, когда можно допустить, что объекты движутся с небольшимискоростями. Если скорости высокие, и объект за один шаг игровоговремени пролетает расстояние, превышающее размер другого объекта,дискретная проверка может запросто не сработать. Универсальногорешения этой проблемы до сих пор нет, но существуют различныеупрощенные методы. Самый простой - метод "бросания лучей" (RayCasting). В Xtreme3D есть достаточно эффективная реализация этогометода.ИзцентраобъектавыпускаетсялучвнаправленииDirectionэтогообъекта. Затемна пересечение с этим лучомпроверяется целевой объект,одинилинесколько.Такимобразом,можносымитироватьдвижениепули(придопущении,чтоонадвижетсясбесконечнойскоростью)-мгновеннообнаружить точку, в которую она попадет. Также при помощи "бросаниялучей"можноопределить высоту землиподперсонажем,чтонеобходимодля реализации прыжков. Кроме того, данный метод незаменим дляпостроения логики взаимодействия персонажа с интерактивнымиобъектамиитриггерами-представьте,например,шутер,RPGиликвестотпервоголица,гдеигрокможетподбиратьпредметыинажиматьнарычаги,кликая по ним мышью. Для этого можно оценить расстояние междуигрокомиобъектом,азатемприменить"бросаниелучей":

ifObjectGetDistance(player,item)<=1.0{ifObjectRaycast(player,item){hit_x=ObjectGetCollisionPosition(0);hit_y=ObjectGetCollisionPosition(1);hit_z=ObjectGetCollisionPosition(2);

Page 43: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

}}

Чтосамоеприятное,"бросаниелучей"вXtreme3Dполностьюсовместимос объектами Freeform и выдает корректные результаты при любойтрансформацииобъектов.

Page 44: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

Урок122D-графикаУровень:среднийВерсияXtreme3D:3.0.xАвторурока:Gecko

Xtreme3D позволяет рисовать не только трехмерные объекты, но идвумерные - экранный текст и экранные спрайты. Экранный текстотображается поверх отрендеренной картинки и применяется дляпредставления некоей текстовой информации в игре: количество жизнейилипатронов,различныхсообщений,отладочныхданныхипр.Экранныеспрайты - это просто двумерные картинки, которые можно использоватьдляотображенияэлементовинтерфейса-прицел,иконки,шкалаэнергииит.д.Такжесихпомощьюможносделатьигровоеменюсфоном-этоболеепредпочтительно, чем создавать меню через встроенную графику GameMaker,таккаквэтомслучаевыможетерисоватьменюповерх3D-сцены,чтовыглядиточеньстильно.

Объекты текста используют специальные шрифтовые объекты, хранящиеизображения текстовых символов - букв, цифр и знаков препинания. Этиизображенияможнозадатьдвумяспособами:сгенерироватьизсистемныхвекторных шрифтов Windows или загрузить из файла. Второе болеепредпочтительно, таккаквыможетенарисоватьв графическомредакторешрифтлюбогоцветаисложности,слюбымисимволамииналюбомязыке,в то время как поддержка системных шрифтов сильно ограничена(поддерживается только латиница). Но у векторных шрифтов есть однонеоспоримое преимущество - масштабируемость без потери качества: тоесть, можно из одного и того же системного шрифта сгенерироватьсимволыразногоразмера.

Код для создания шрифта и экранного текста выглядит следующимобразом:

font=WindowsBitmapfontCreate('Arial',14,32,95);

Page 45: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

text=HUDTextCreate(font,'Hello,World!',global.front);

Обратите внимание, что мы указываем корневой объект global.front вкачестверодителяобъектуtext-этогарантирует,чтотекстбудетотрисованпослетрехмернойсцены.

Созданныйтекстможновидоизменять-задатьемуцветипрозрачность,атакжепозициюиповорот:

HUDTextSetColor(text,c_red,0.5);ObjectSetPosition(text,100,100,0);HUDTextSetRotation(text,30.0);

У шрифтов типа WindowsBitmapfont есть серьезный недостаток: онподдерживает только кодировку ANSI. Это означает, что в одномприложении нельзя использовать символы нескольких разных алфавитов.Для решения этой проблемы в Xtreme3D была добавлена поддержкабиблиотеки FreeType и кодировки UTF-8, которая позволяет выводитьлюбые символы без ограничений. При помощи FreeType вы можетезагружать TTF-шрифты из файлов, что очень удобно - вам не придетсяволноваться по поводу того, установлен ли нужный шрифт в системепользователя:всенужныешрифтымогутпоставлятьсявместесигрой.

Создание шрифта и экранного текста при помощи FreeType выглядитследующимобразом:

font=TTFontCreate('data/font.ttf',14);text=HUDTextCreate(font,'Hello,World!',global.front);

Текстовая строка, которую вы передаете в функцию HUDTextCreate,должна быть закодирована в UTF-8. К сожалению, Game Maker 8 неподдерживает UTF-8 во встроенном редакторе кода, поэтому текст,содержащийсимволынациональныхалфавитов,следуетлибозагружатьизфайла функцией TextRead, либо конвертировать функциейTextConvertANSIToUTF8.Для использования функции TTFontCreate поместите в папку с игройбиблиотекуfreetype.dll(ищитееевSDK).

Page 46: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

Урок13ТенивреальномвремениУровень:среднийВерсияXtreme3D:3.0.xАвторурока:Gecko

Xtreme3D поддерживает несколько способов рендерить тени. Во-первых,тени (и освещение в целом) могут быть предрассчитаны и "запечены" втекстуру-такаятехниканазываетсякартойосвещения(Lightmapping).Онапозволяет получить очень красивый и реалистичный результат, нополучившиеся тени будут статичными. Соответственно, эта техникаприменима только к неподвижным объектам - например, к интерьерам иархитектуре.Ктомуже,далеконевсеформаты3D-моделейподдерживаюткартыосвещения,иневовсех3D-редакторахихможносоздавать.

Во-вторых, существует объект теневой плоскости (shadow plane). Он вовсем похож на обычный примитив плоскости, за исключением того, чтодругие объекты могут отбрасывать на него тени. Результат получаетсяоченькрасивый,но,ксожалению,плоскиетениприменимыдалеконевовсех ситуациях.Например, от нихмало толку, если вашигровой уровеньсостоитизплатформнаразнойвысоте,либовнемвообщенетидеальныхплоскостей(например,вслучаеиспользованияреалистичноголандшафта).Есть, однако, целый ряд жанров, где использование shadow plane вполнеоправдано - это, к примеру, разнообразные спортивные симуляторы(футбол, легкая атлетика, мини-гольф, боулинг, бильярд и т.д.), плоскиелабиринтники,атакженекоторыелогическиеиказуальныеигры.

Такжеимеютсядветехникиотрисовкиобъемныхтеней-shadowvolumeиshadowmapping.Первая заключается в создании объекта, определяющегообъем,внутрикотороготочкинаходятсявтени.Данныйметоддаеточеньточныетениналюбомрасстоянии,ноработаетдостаточномедленно.Кудаболееперспективнойвыглядитноваятехника,появившаясявXtreme3D3.0- теневые карты (shadow mapping). С их помощью можно очень быстрорендерить мягкие тени - но, правда, на ограниченном расстоянии от

Page 47: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

камеры.

Рассмотримсначалатеневуюплоскость.Создатьееоченьпросто:

shadowTarget=DummycubeCreate(global.scene);shadowPlane=ShadowplaneCreate(20,20,10,10,shadowTarget,light,c_black,0.5,global.scene);

Теперьостаетсятолькодобавитьтеобъекты,которыедолжныотбрасыватьтень,впотомкикshadowTarget.

Работатьсshadowvolumeненамногосложнее:

sv=ShadowvolumeCreate(global.scene);ShadowvolumeAddLight(sv,light);

Добавьте те объекты, на которые должна падать тень, в потомки к sv. Теобъекты,которыедолжныотбрасыватьтень,добавляютсятак:

ShadowvolumeAddOccluder(sv,obj);

Page 48: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

Урок14СозданиенебаУровень:среднийВерсияXtreme3D:3.0.xАвторурока:Gecko

Во многих играх важной составляющей графики и геймплея являетсяплавная смена дня и ночи (например, в RPG и играх в стиле GTA). ВXtreme3D такую функциональность обеспечивает объект Skydome, что вдословном переводе означает "небесный купол", "небосвод". Этосферическаяформа,окружающаясценуименяющаяцветвзависимостиотвремени суток. На куполе в буквальном смысле "подвешены" солнце извезды.Солнцеплавноходитпонебу:когдаоноопускаетсякгоризонту,мынаблюдаемзакат.Апотомнеботемнеетинаступаетночь.Звездымерцают,как настоящие. Единственный минус - нет облаков. Их придется делатьсамостоятельно.Это,вероятно,былодопущенодлятого,чтобынелишатьразработчика возможности сделать, например, авиасимулятор: чтобыможнобылокакопуститьсядосамойземли,такиподнятьсякоблакамивидетьихсблизкогорасстояния.

Цветнебав skydomeсоставлениз трехкомпонентов:Deep,Haze,NightиSky.Deep-цветтакназываемогонадира-точки,противоположнойзениту;онарасположена у нас подногами.Обычно в реальнойжизнинадир увидетьневозможно, земля мешает :) Но цвет этой точки важен, так как онопределяет, с каким оттенком смешивается цвет неба по мере ухода залиниюгоризонта.Haze-цветлиниигоризонта.Обычносоответствуетцветутумана.Sky - цвет зенита. В этот цвет окрашен весь небесный купол до линиигоризонта.Night - цвет ночи. Когда солнце уходит за горизонт, этим цветомпостепеннозаполняютсявсекомпонентынеба,кромеDeep.Чащевсегоэточерныйилитемно-синий,хотямогутбытьидругиеварианты.

Page 49: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

Нижеприведенкод,которыйсоздаетнебо:

sky=SkydomeCreate(24,48,global.back);SkydomeSetOptions(sky,true,true);ObjectRotate(sky,90,0,0);SkydomeSetNightColor(sky,make_color_rgb(0,0,180));angle=0;SkydomeSetSunElevation(sky,angle);SkydomeAddRandomStars(sky,50,c_white);

Чтобысолнцедвигалосьпонебу,нужнокаждыйшагвременименятьугол,накоторомононаходитсяпоотношениюк горизонту.Уголв90 градусовсоответствуетзениту,-90-надиру.

SkydomeSetSunElevation(sky,angle);angle=angle+1.0*dt;

Можно также создать реалистичное звездное небо с привычными намсозвездиями,хотяэтонетакпросто,какможетпоказаться.Дляэтоговамнужно понимать астрономические координаты. В Xtreme3D положениезвезды на небе задается во второй экваториальной системе координат,которая включает две величины - прямое восхождение (right ascension) исклонение(declination).Приэтомобевеличинызадаютсявградусах,хотявастрономиипрямоевосхождениетрадиционноизмеряетсявчасах,минутахисекундах(1угловойчасравен360/24=15градусам).Чтобыупроститьперевод этих единиц в градусы, в Xtreme3D SDK есть скриптRightAscension(hours, minutes, seconds). Также имеется скриптDeclination(degrees, minutes, seconds), при помощи которого можнополучить единое вещественное значение из градусов, угловых минут иугловыхсекунд.

ВотпримерсозданиявсемизвестногоКовша-семиглавныхзвездБольшойМедведицы(координатыявзялизВикипедии):

SkydomeAddStar(sky,RightAscension(11, 3, 44),Declination(61, 45, 0), 1.79,c_white);//ДубхеSkydomeAddStar(sky,RightAscension(11,1,50),Declination(56,22,57),2.37,

Page 50: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

c_white);//МеракSkydomeAddStar(sky, RightAscension(11, 53, 50), Declination(53, 41, 41),2.44,c_white);//ФекдаSkydomeAddStar(sky, RightAscension(12, 15, 25), Declination(57, 01, 57),3.31,c_white);//МегрецSkydomeAddStar(sky,RightAscension(12,54,0),Declination(55,57,35),1.77,c_white);//АлиотSkydomeAddStar(sky, RightAscension(13, 23, 55), Declination(54, 55, 31),2.27,c_white);//МицарSkydomeAddStar(sky, RightAscension(13, 47, 32), Declination(49, 18, 48),1.86,c_white);//Алькаид

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

Page 51: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

Урок15СозданиеландшафтаУровень:среднийВерсияXtreme3D:3.0.xАвторурока:Gecko

Ландшафт (Terrain) является важной составляющей игр многих жанров,моделирующих ситуации реального мира - это гонки, стратегии, многиешутеры и различные игры с открытым миром. Обычно ландшафт немоделируется вручную, а генерируется из так называемой карты высот -изображения,гдетемныеучасткиозначаютпонижениевысоты,асветлые-повышение. Генерирование ландшафта может происходить как впрограмме 3D-моделирования, так и в самой игре - в последнем случаеесть возможность оптимизировать рендеринг ландшафта, динамическиизменяя его детализацию в зависимости от удаленности от камеры(динамический LOD). В Xtreme3D также имеется поддержка такойтехнологии.Чтобыотрисоватьландшафт,сначаланеобходимозагрузитькартувысот,втерминологии Xtreme3D - HDS (Height Data Source, источник данных овысоте):

hds=BmpHDSCreate('heightmap.bmp');BmpHDSSetInfiniteWarp(hds,0);

ФункциейBmpHDSSetInfiniteWarpможносделатькартувысотбесконечнозацикленнойвовсечетырестороны-оченьудобно,есливыхотитесделатьбезграничныймир.

Теперьсоздаемландшафт-объектTerrain:

terrain=TerrainCreate(global.scene);TerrainSetHeightData(terrain,hds);TerrainSetTileSize(terrain,32);TerrainSetTilesPerTexture(terrain,8);

Page 52: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

TerrainSetQualityDistance(terrain,100);TerrainSetQualityStyle(terrain,hrsFullGeometry);TerrainSetMaxCLodTriangles(terrain,10000);TerrainSetCLodPrecision(terrain,50);TerrainSetOcclusionFrameSkip(terrain,0);TerrainSetOcclusionTesselate(terrain,totTesselateIfVisible);

Если запустить игру на данном этапе, то ландшафт, скорее всего, будетслишкомвысокимиповернутымна90градусов.Этонетрудноисправить,установивжелаемыймасштабпоосиZиповернувобъектпоосиX:

ObjectSetScale(terrain,1,1,0.1);ObjectRotate(terrain,90,0,0);

Отдельного слова заслуживает наложение текстуры на ландшафт. Этоможно сделать разными способами, я же предлагаю следующий: перваятекстураматериала(диффузная)будетнатянутанавесьландшафт,авторая(текстура детализации) будет многократно повторяться с необходимыммасштабом,накладываясьнапервуюврежимеmodulate (тоесть,изменяяяркость предыдущей). Таким образом, возникнет иллюзия того, чтоландшафтиспользуетогромнуюдетализированнуютекстуру.

MaterialCreate('mTerrain','terrain-diffuse.jpg');MaterialSetOptions('mTerrain',false,true);MaterialCreate('detmap','terrain-detail.jpg');MaterialSetTextureScale('detmap',100,100);MaterialSetSecondTexture('mTerrain','detmap');ObjectSetMaterial(terrain,'mTerrain');

Обратите внимание, что мы отключаем освещение для материалаландшафта - дело в том, что динамический LOD не позволяет задаватьнормалидлявершин(посколькунаборывершинпостоянноменяются),чтонеобходимо для корректного освещения полигонов. Поэтому дляландшафта следует использовать статическое освещение - картуосвещенности,объединеннуюсдиффузнойтекстурой.

Осталась еще одна задача: перемещение персонажа по ландшафту. Этонетрудно сделать при помощи специально предусмотренной функции -TerrainGetHeightAtObjectPosition,котораявозвращаетвысотуземливточке,

Page 53: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

совпадающейсабсолютнойпозициейобъекта:

ObjectSetPositionY(camPos, TerrainGetHeightAtObjectPosition(terrain,camPos)+1);

Page 54: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

Урок16СозданиеводыУровень:среднийВерсияXtreme3D:3.0.xАвторурока:Gecko

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

Вода вXtreme3D представляет собой плоскую поверхность, разбитую наопределенное количество квадратов, на которых возникаютконцентрические волновые возмущения - получается эффект "дождя".Такжеподдерживаютсялинейныеволны,каквокеане-онипараллельны,вычисляются по синусоиде и равномерно движутся по всей поверхностиводы.Сама по себе вода - всего лишь геометрия и никакими свойствамижидкости, кроме волн, не обладает. Поэтому все остальные эффекты,усиливающиевпечатлениеотводы(отражение,брызги,физикуплавающихобъектовит.д.)вампридетсяписатьсамостоятельно.

Кодсозданияводывыглядитследующимобразом:

water=WaterCreate(global.scene);WaterSetResolution(water,128);WaterSetRainTimeInterval(water,1000);WaterSetRainForce(water,1000);WaterSetViscosity(water,0.95);WaterSetElastic(water,10);ObjectSetPosition(water,0,2.5,0);ObjectSetScale(water,1000,1000,1000);

ОбъектWaterимеетнескольковажныхсвойств:

Page 55: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

Resolution(разрешение)Числополигоновпосторонесетки.Геометрияводыстроитсяизквадратовв сетке, поэтому общее число полигонов равно R2, где R - значениеResolution.Ясно,что,чемвышеэтозначение,темвышекачествоводы,и,соответственно,нижескоростьееработы.Значениепоумолчанию:64.

Raintimeinterval(временнойинтервалдождя)Эффект "дождя", когда поверхность анимируется, создавая в случайныхместах сетки волновые возмущения. Данная опция задает длину паузы вмиллисекундахмеждудвумявозмущениями.Значениепоумолчанию:500.Максимальноезначение:1000000.Минимальноезначение:0(нетдождя).

RainForce(силадождя)Интенсивностьвозмущений;чемменьшеэтозначение,тембыстрееволны"затухают". Значение по умолчанию: 5000. Максимальное значение:1000000.Минимальноезначение:0.

Viscosity(вязкость)Амплитуда возмущений; фактически, максимальная высота волн: чемменьшеэтозначение,темгелеобразнеежидкость.Значениепоумолчанию:0.99.Максимальноезначение:1.Минимальноезначение:0.

Elastic(эластичность)Скорость распространения возмущений. В реальном мире это свойствозависит от плотности вещества (например, у ртути плотность гораздовыше,чемуводы,поэтомуволныраспространяютсябыстрее).Значениепоумолчанию:10.

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

MaterialCreate('mMask','watermask.bmp');WaterSetMask(water,'mMask');

Page 56: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

Урок17СистемычастицУровень:среднийВерсияXtreme3D:3.0.xАвторурока:Gecko

Частицы (particles) - это маленькие, простые по форме движущиесяобъекты, множеством которых моделируются различные сложныединамические субстанции, например, огонь, дым, фейерверк и т.д. Вкачестве частиц в игровых движках обычно используются биллборды -направленныевсторонукамерыпрямоугольникистекстурой.ВXtreme3Dесть две разные системы частиц - FireFX и ThorFX. FireFX - системачастиц, моделирующая огонь (хотя с ее помощью можно воссоздавать иразличные другие эффекты). ThorFX предназначена для моделированиямолнийиразногородаэлектрическихразрядов.

Виграхобычноиспользуетсямногооднотипныхсистемчастиц.Кпримеру,в подземелье на стенах могут висеть факелы, и на каждом будет горетьогонь, сделанный при помощи частиц. В данном случае проще будет несоздавать отдельную систему для каждого факела, а просто нарисоватьодну и туже систему несколько раз в разных позициях. Специально длятакой ситуации предусмотрен менеджер FireFX. Менеджер - это что-товроде "сервера", на котором выполняются все вычисления, связанные сэффектом. А отдельные системы FireFX - это "клиенты", использующиенастройки указанного для нихменеджера.Вы просто создаетеменеджер,настраиваете его как вам угодно, а затем добавляете любое количествосистем в любых нужных вам местах сцены. Изменения, внесенные внастройки менеджера, автоматически коснутся всех подчиненных емусистем.

СначаласоздаемменеджерFireFX:

firefx=FireFXManagerCreate();FireFXSetParticleSize(firefx,0.3);

Page 57: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

FireFXSetRadius(firefx,0.1);FireFXSetBurst(firefx,2.0);FireFXSetDensity(firefx,1);FireFXSetLife(firefx,1);FireFXSetColor(firefx,c_yellow,1.0,c_red,0.0);

Теперьдобавляемэффектогнялюбымобъектамвлюбомколичестве:

fireobj1=DummycubeCreate(global.scene1);ObjectSetPosition(fireobj1,-2,0,0);FireFXCreate(firefx,fireobj1);

fireobj2=DummycubeCreate(global.scene1);ObjectSetPosition(fireobj2,2,0,0);FireFXCreate(firefx,fireobj2);

Page 58: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

Урок18ШейдерыУровень:опытныйВерсияXtreme3D:3.0.xАвторурока:Gecko

Однойиз самыхинтересныхособенностейXtreme3Dявляетсяподдержкашейдеров.Понятие "шейдер" здесь имеет болееширокое значение, чем вдругих движках. Обычно этим термином обозначают программы дляграфического процессора, которые выполняются для каждой вершинымодели, либо для каждого пикселя модели на экране. Такие шейдеры вXtreme3Dтожеесть(см.следующийурок),новобщемсмыслешейдеромназывается спецэффект, модифицирующий или заменяющий собойматериал, к которому он прикреплен. Некоторые такие спецэффектыработаютинастарыхвидеокартах,которыенеподдерживаютшейдерныепрограммы,анекоторыеоснованынавстроенныхвдвижокпрограммах.

Припомощишейдеровможноналожитьнаобъектнесколькоматериалов,отрисовать контуры объекта, сделать объект рельефным или придать ему"эффект комикса". Рассмотреть все возможности встроенных шейдеровXtreme3Dврамкаходногоуроканевозможно,поэтомумыостановимсянаодном-шейдеререльефа(BumpShader).

Эффектрельефностисильноповышаетреализммоделей-ониспользуетсявиграхужеболее10летизаэтигодысталде-фактостандартом.Обычнорельефность достигается путем использования метода normal mapping(проецирование нормалей). На этом методе основан и Bump Shader вXtreme3D. Суть normal mapping в том, что нормаль задается для каждойточки поверхности (в отличие от обычного вершинного освещения, гденормализадаютсядлякаждойвершины,а затемпростоинтерполируютсяпо поверхности полигона). Это делается при помощи карты нормалей(normal map) - специальной текстуры, в которой цвета пикселейсопоставленысвектораминормалей(RGB=XYZ).Картунормалейможносгенерировать из карты высот или из высокополигональной геометрии

Page 59: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

путем трассировки лучей - такая функция есть практически во всехпрофессиональныхпакетах3D-моделирования.

Чтобы карта нормалей была инвариантна относительно вращения ипереноса модели (то есть, оставалась неизменной при этихтрансформациях), ее задают в особом пространстве, называемомпространством касательных (tangent space). В этом пространствекоординатнаяосьZсоответствуетперпендикулярукповерхности,аосиXи Y, соответственно, взаимно перпендикулярным касательным кповерхности. Освещение также рассчитывается в пространствекасательных-направлениесветатрансформируетсявэтопространствоприпомощиспециальнойматрицы,которуюназываютTBNпопервымбуквамеекомпонентов-Tangent,Binormal,Normal(тангент,бинормаль,нормаль).Нормаль здесь - обычная нормаль вершины, а тангент и бинормаль -векторы,перпендикулярныенормалииперпендикулярныедругдругу.Этивекторы вычисляет Xtreme3D. В настоящее время они поддерживаютсятолькодляобъектовтипаFreeform.

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

Сначаласоздадимматериалыснеобходимымитекстурами:MaterialCreate('mBumpDiffuse','diffuse.png');MaterialCreate('mBumpNormal','normal.png');

Теперьсоздадимшейдеррельефаипередадимемутекстуры:

bump=BumpShaderCreate();BumpShaderSetDiffuseTexture(bump,'mBumpDiffuse');BumpShaderSetNormalTexture(bump,'mBumpNormal');BumpShaderSetMaxLights(bump,3);

Функция BumpShaderSetMaxLights задает количество источников света,которые должен учитывать шейдер. Напомним, что Xtreme3Dподдерживает до 8 источников света - то же относится и к шейдерурельефа.

Page 60: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

Теперьможносоздатьматериалиприкрепитькнемунашшейдер:

MaterialCreate('mBump','');MaterialSetAmbientColor('mBump',c_black,1);MaterialSetDiffuseColor('mBump',c_white,1);MaterialSetSpecularColor('mBump',c_ltgray,1);MaterialSetShininess('mBump',32);MaterialSetShader('mBump',bump);

Page 61: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

Урок19ОсновыGLSLУровень:опытныйВерсияXtreme3D:3.0.xАвторурока:Gecko

GLSL (OpenGL Shading Language) - это высокоуровневый язык описанияшейдеров. С его помощью вы можете запрограммировать графическийконвейер-инымисловами,управлятьрендерингомобъектовнавершинномипиксельномуровне.ЗаобработкувершинотвечаетвершиннаяпрограммаGLSL,заобработкупикселей-фрагментная.Работа с GLSL подразумевает знание принципов растеризации играфического конвейера OpenGL, а также линейной алгебры. Посколькусам Xtreme3D не требует этих знаний, использование GLSL может бытьвесьма трудной задачей для начинающего, поэтому рекомендуемпредварительно почитать книги или руководства по данной теме. ОченьполезнымбудетзнакомствоспринципамиработывOpenGL,атакжехотябыбазовоезнаниеC/C++.

Page 62: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

ТипыданныхGLSL

GLSLявляетсястроготипизированнымязыком-любаяпеременнаявнемимеетопределенныйтип.Языкподдерживаетследующиеосновныетипы:

bool-логическоезначениеint-целоечислосознакомuint-беззнаковоецелоечислоfloat-числосплавающейзапятойодинарнойточностиdouble-числосплавающейзапятойдвойнойточностиbvec2,bvec3,bvec4-векторлогическихзначений(размерности2,3и4)ivec2,ivec3,ivec4-векторцелыхчиселuvec2,uvec3,uvec4-векторбеззнаковыхцелыхчиселvec2,vec3,vec4-векторчиселсплавающейзапятойdvecn2, dvecn3, dvecn4 - вектор чисел с плавающей запятой двойнойточностиmat2,mat3,mat4-матрица2x2,3x3,4x4sampler2D-текстураsampler2DCube-кубическаятекстураsampler2DShadow-теневаятекстураvoid - ключевое слово, обозначающее отсутствие типа (для функций безвозвращаемогорезультата).

Page 63: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

Вершинныйшейдер

Вершинная программа принимает координаты вершин и их атрибуты(такиекакнормалиитангенты)и,какправило,переводитихизобъектногопространства в пространство отсечения, в мировое или в видовоепространство.

-Объектное пространство (object space) - это локальное пространствообъекта. Центром координатной системы в нем является центр объекта -вершинымоделизаданыотносительноэтогоцентра.-Мировоепространство(worldspace)-другоеназваниедляабсолютногопространства.Центромкоординатнойсистемывнемявляетсяточка (0,0,0). Совокупная трансформация объекта (перенос, поворот имасштабирование) переводит вершины из локального в мировоепространство.Этатрансформацияобычнохранитсяипередаетсявшейдерввидематрицы4x4-такназываемоймодельнойматрицы(modelmatrix).-Видовое пространство (eye space) - пространство, в котором центромкоординатной системы является позиция камеры. Перевод вершин измирового в видовое пространство осуществляется при помощи обратнойматрицыпреобразованиякамеры-такназываемойвидовойматрицы(viewmatrix).ВOpenGL,какправило,модельнаяматрицаивидоваясовмещеныводну-модельно-видовую(modelviewmatrix).-Пространствоотсечения(clipspace)-пространство,вкотороевершиныпереводятсяматрицейпроекции(projectionmatrix).Необходимо отметить, что вершины в GLSL хранятся в так называемыходнородных координатах (homogeneous coordinates) - то есть, имеютдополнительную четвертую координату W. Такими координатами можновыражать бесконечно удаленные точки, когда W равна нулю. ОбычныеточкиимеютWравную1.Вершинывпространствеотсеченияявляютсяглавнымрезультатомработывершинного шейдера. Простейший вершинный шейдер, выполняющийтолько перевод вершин из объектного пространства в пространствоотсечения,выглядитследующимобразом:

voidmain()

Page 64: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

{gl_Position=gl_ModelViewProjectionMatrix*gl_Vertex;}

gl_Vertex-входныекоординатывершиныgl_Position-выходныекоординатывершиныgl_ModelViewProjectionMatrix - встроенная матрица 4х4, комбинациямодельно-видовойипроекционнойматрицOpenGL.Для данной операции, кстати, в GLSL имеется встроенная функцияftransform:

gl_Position=ftransform();

Вершинному шейдеру также доступны другие атрибуты вершины -нормаль, цвет и текстурные координаты: gl_Normal, gl_Color,gl_MultiTexCoordN (где N - номер от 0 до 7). Обычно эти атрибутыинтерполируются между тремя вершинами треугольника, а затемпоступают вофрагментныйшейдер.Чтобы передать какое-либо значениена интерполяцию, используются промежуточные varying-переменные.Например,таквыглядитшейдер,передающийнаинтерполяциюнормали:

varyingvec3normal;

voidmain(){normal=gl_NormalMatrix*gl_Normal;gl_Position=ftransform();}

Обратите внимание, что мы переводим нормаль вершины из объектногопространстваввидовоеприпомощиспециальнойвстроеннойматрицы3x3gl_NormalMatrix. Это необходимо для того, чтобы оптимальным образомрассчитывать освещение в пиксельном шейдере - это делается именно ввидовом пространстве: тот факт, что камера находится в точке (0,0,0),значительно облегчает вычисления, связанные с бликовой компонентойосвещенности.Спередачейтекстурныхкоординатшейдербудетвыглядетьтак:

varyingvec3normal;

Page 65: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

voidmain(){normal=gl_NormalMatrix*gl_Normal;gl_TexCoord[0]=gl_MultiTexCoord0;gl_Position=ftransform();}

gl_TexCoord - это встроенная varying-переменная, массив, через которыйвыможетепередаватьлюбыеданные,нетолькотекстурныекоординаты.

Page 66: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

Фрагментныйшейдер

Фрагментная программа принимает интерполированные varying-переменные(атакжеразличныепараметрысостоянияOpenGL)ивыводитв качестве результата цвет пикселя. Она выполняется для каждоговидимого на экране пикселя объекта. Обратите внимание, что проверкавидимости (Z-test) для пикселя осуществляется видеокартой до того, какбудетвыполненафрагментнаяпрограмма-еслипиксельотбрасываетсякакневидимый,топрограмманевыполняется.Простейший фрагментный шейдер, закрашивающий объект сплошнымцветом,выглядиттак:

voidmain(){gl_FragColor=vec4(1.0,0.0,0.0,1.0);}

gl_FragColor-выходнойцветпикселя.В данном случае vec4(1.0, 0.0, 0.0, 1.0) обозначает красный цвет спрозрачностью1.0(полнаянепрозрачность).

Page 67: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

Использование шейдеров вXtreme3D

СоздаватьшейдерыGLSLиподключатьихкматериаламоченьпросто:

vp=TextRead('my_vertex_shader.glsl');fp=TextRead('my_fragment_shader.glsl');shader=GLSLShaderCreate(vp,fp);MaterialSetShader('myMaterial',shader);

Page 68: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

ОсвещениенаGLSL

Чтобы реализовать простейшее освещение по формуле Ламберта, намнужны координаты точки поверхности, нормаль в этой точке, а такжекоординатыисточникасвета.Такимобразом,нампонадобятся,поменьшеймере,двеvarying-переменные-нормальиинтерполированныекоординатывершины.Вершинныйшейдер:

varyingvec3normal;varyingvec3position;

voidmain(){normal=gl_NormalMatrix*gl_Normal;position=(gl_ModelViewMatrix*gl_Vertex).xyz;gl_Position=ftransform();}gl_ModelViewMatrix - это встроенная матрица 4x4, модельно-видоваяматрицаOpenGL.Онапереводиткоординатыизобъектногопространстваввидовое, в котороммы будем вычислять освещение.Поскольку результатэтогоперевода-однородныйвекторvec4,мыотбрасываемкоординатуWиберемтольковекторXYZ.Фрагментныйшейдер:

varyingvec3normal;varyingvec3position;

voidmain(){vec3N=normalize(normal);vec3L=normalize(gl_LightSource[0].position.xyz-position);floatdiffuse=clamp(dot(N,L),0.0,1.0);vec4color=gl_FrontMaterial.diffuse*diffuse;color.a=1.0;

Page 69: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

gl_FragColor=color;}

Обратите внимание, что при передаче во фрагментыйщейдер единичныевекторы (такие, как нормаль) после интерполяции нужно обязательнонормировать - видеокарта не делает это за вас. Для этого в GLSL естьфункцияnormalize.Доступ к координатам источника света осуществляется при помощиатрибута position встроенного объекта gl_LightSource (массив из 8элементов, по числу источников света OpenGL). Эти координаты вофрагментном шейдере уже автоматически переведены в видовоепространство, что очень удобно - не нужно делать это вручную.Но есливам, по тем или иным причинам, нужно вычислять освещение в другомпространстве - например, в пространстве касательных - то не забудьтесоответствующим образом трансформировать их. Эти координаты такжеоднородные: точечный источник света, как правило, имеет координатуWравную1,направленный-равную0.Операцияdot(N,L)-этоиестьрасчетосвещенностипоформулеЛамберта:освещенность в точке определяется плотностью света, а она линейнозависит от косинуса угла падения света. Косинус угла между двумяединичнымивекторамиравенихскалярномупроизведению(dotproduct).Поскольку результат этой операции - скаляр (float), для передачи вgl_FragColorнужнопомножитьэтозначениенакакой-нибудьцвет.Лучшевсего использовать диффузный цвет материала - gl_FrontMaterial.diffuse:таким образом, вы можете контролировать цвет объекта вне шейдера,функциейMaterialSetDiffuseColor.

Page 70: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

Текстуры

Во фрагментном шейдере можно читать цвет из текстур - для этогоиспользуетсяфункцияtexture2D:

uniformsampler2DdiffuseTexture;

voidmain(){vec4texColor=texture2D(diffuseTexture,gl_TexCoord[0].xy);gl_FragColor=texColor;}

Текстуры объявляются как uniform-объекты - то есть, неизменяемыепараметры,которыепередаютсяшейдеруосновнойпрограммой.Этомогутбытьнетолькотекстуры,ноивообщелюбыетипыданных.Передачатекстурывшейдерделаетсяследующимобразом:

param=GLSLShaderCreateParameter(shader,'diffuseTexture');GLSLShaderSetParameterTexture(param,'myMaterial',0);

ВфункциюGLSLShaderCreateParameterпередаетсяимяuniform-объекта.Вфункцию GLSLShaderSetParameterTexture передается имя материала, изкоторого нужно прочитать текстуру, а также текстурный блок, черезкоторый нужно передавать текстуру. Стандарт OpenGL гаранирует 8доступных текстурных блоков (0-7) - у современных видеокарт ихможетбыть и больше (до 16 и даже 32), но для лучшей совместимостирекомендуется не использовать больше 8. В одном шейдере нельзяпередаватьдверазныетекстурычерезодинитотжетекстурныйблок-тоесть, если вы передаете несколько текстур в разные uniform-параметры,используйтедлянихразныеблоки.

Page 71: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

ОверсияхGLSL

Xtreme3DбазируетсянаOpenGL1.xинекоторыхфункцияхизOpenGL2.х,которые подключаются через расширения ARB. Таким образом, движокподдерживает GLSL версий 1.1 и 1.2 - более поздние версии языкаопределеныужеврамкахспецификацииOpenGL3.0.По умолчанию используется GLSL 1.1. Чтобы переключиться на 1.2,используйтедирективупрепроцессора(напервойстрокешейдера):

#version120

Версия 1.2 отличается встроенной поддержкой транспонирования матриц(функцияtranspose),неквадратныхматриц,атакжемассивов.

Page 72: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

ОтредакцииВкомпьютернойграфикеисторическисложиласьобширнаяспецифическаятерминология - это и названия алгоритмов, и обозначения стандартов, иразного рода аббревиатуры, в которых довольно сложно разобраться тем,кто только начал знакомиться с 3D-графикой. Составленный намиглоссарий призван просветить начинающих в данной области, а такжепредоставить необходимую информацию по математическому аппарату итехнологиям,используемымвXtreme3Dидругиханалогичныхдвижках.

Page 73: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

EngineEngine|Двигатель,движок

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

Игровойдвижок -универсальныйилиспециализированныйпрограммныйкомплекс, предназначенный для разработки компьютерной игры. Какправило, содержит готовый набор компонентов для моделированияигровых ситуаций, средства вывода графики и звука, а такжевзаимодействияспользователемчерезустройстваввода.Графический движок (двумерный, трехмерный или гибридный) - одна изключевых частей игрового движка, отвечающая за вывод графики. Внастоящее время графические движки обычно создаются на основесистемныхграфическихAPI(DirectX,OpenGLидр.).

См.такжеPhysicsEngine.

Page 74: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

EnvironmentMappingEnvironmentMapping|Проецированиекартыокружения

Одна из форм IBL - способ наложения текстуры, имитирующий эффектзеркальногоотражениянаповерхности.Врезультатеиспользованиякартыокружения на рендеринг отражений затрачивается гораздо меньшевремени,чемприиспользовании"честной"трассировкилучей.Environment Mapping предполагает использование одной или несколькихтекстур с предрассчитанными или сфотографированными отражениями.Проецирование этих текстур на поверхность модели происходит путемособых преобразований текстурных координат. Существует несколькометодовпроецированиякартокружения:Sphere Mapping (сферическое проецирование) - в качестве картыокружения используется единственная текстура, формирующаяповерхность воображаемой полусферы, окружающей объект со сторонызрителя. Это самый простой и эффективный метод, но не реалистичный,таккакслюбогоракурсазрительвидитодноитожеотражение.ДанныйметодтакженазываютMirrorBall("зеркальныйшар").CubeMapping (кубическое проецирование) - в качестве карт откруженияиспользуются шесть проекций, формирующих шесть сторонвоображаемого куба, окружающего объект. В результате этого создаетсяэффект полного отражения с любой точки поверхности. Исходныеизображения получают путем предварительного или динамическогорендеринга. Данный метод позволяет получить наиболее реалистичныйрезультатценойвысокихзатратвидеопамяти.Equirectangular Mapping (равнопромежуточное проецирование) - методпроецирования,используемыйвкартографии.Вкачествекартыокруженияиспользуется единственная текстура, покрывающая воображаемую сферувокруг объекта. Позволяет получить реалистичный результат приминимальных затратах видеопамяти (артефакты проецированияпроявляютсяу"полюсов",нообычноонинеоченьзаметны).Врендерингереального времени данный метод получил распространение только сприходом шейдеров, так как на фиксированном конвейере он неподдерживался.Dual-ParaboloidMapping (проецирование двойного параболоида) - один

Page 75: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

из самых современных методов. Отображает верхнюю и нижнююполусферыокружениявдветекстуры.Данныйметодпрактическинеимеетартефактов (если не считать незначительную погрешность вдоль"экватора") и является оптимальным компромиссом между расходомвидеопамятиикачествомрезультата.

См.такжеReflectionMapping.

Page 76: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

ERPErrorReductionParameter|Коэффициентисправленияошибки

Коэффициент, отвечающий за восстановление нарушившихся связей вфизическом движке (обычно в ODE), и показывающий, на какую частьсолвер попытается исправить нарушившуюся связь. Так, например, приERP = 1 солвер попытается за одну итерацию восстановить связь в"нормальное" положение (свести друг к другу два конца разошедшегосясочленения,иливытолкнутьцеликомпарувзаимопроникшихтел).См.такжеPhysicsEngine,ODE.

Page 77: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

FillrateFillrate|Cкоростьзаполнения

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

Page 78: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

FocalLengthFocalLength|Фокусноерасстояние

Расстояние в миллиметрах от центра объектива до изображения,являющегося частью субъекта (предположительно являющегосябесконечным расстоянием перед объективом). Фокусные объективыкороткого радиуса действия необходимы для формированияширокоугольныхизображений,втовремякакдальнеефокусноерасстояниеприменяетсядлясъемокспомощьютелеобъектива.

Page 79: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

FogFog|Туман

Эффект постепенного закрашивания модели сплошным цветом (обычноцветом фона) в зависимости от глубины. Туман придает сценереалистичность,атакжепозволяетскрытьненужнуюгеометрию.

Page 80: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

ForwardKinematicsForwardKinematics|Прямаякинематика

Движениесистемыкостейвскелетнойанимациивпрямомнаправленииотродительскогообъектакпорожденному.Например,поворотторсавызываетповоротголовы,ноголоваможетповорачиватьсяинезависимоотторса.См.такжеInverseKinematics,SkeletalAnimation.

Page 81: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

FOVFieldofView|Полезрения

Угол (горизонтальный или вертикальный), который охватывает проекциятрехмернойсцены.Вбуферкадрапопадаеттольконекотораяобластьсцены-мысмотримнанеечерезусеченнуюпирамидувидимости(viewfrustrum),угол между двумя противоположными гранями которой и образует полезрения.Вбольшинстведвумерныхигрнельзяговоритьобуглезрения-оннулевой,апирамидаявляетсяпрямоугольнойтрубой.FOVсерьезновлияетнаперспективу:прибольшихзначенияхполязрения(больше90)видимыйразмеробъектовбыстроуменьшаетсяприудалении.При маленьких значениях, наоборот, видимый размер объектов слабозависит от расстояния (и совсем не зависит в случае ортографическогопроецирования, то есть в отсутствии перспективы - когда поле зрениеравнонулю).Для понимания этого термина можно провести аналогию с фокуснымрасстоянием фотоаппарата, которое напрямую воздействует на его полезрения.В реальной жизни горизонтальный угол зрения человека составляетпримерно140градусов.

Page 82: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

FPSFramesPerSecond|Числокадроввсекунду

Количество кадров в секунду, которые отрисовывает игра. Чем это числобольше,темплавнеебудетвыглядетьанимациявигре.FPSявляетсяважнейшимпоказателемдляоцениванияпроизводительностиграфических приложений, а также графических систем (видеокарта +драйвер). Однако это возможно только при выключенной вертикальнойсинхронизации (VSync). При включенной вертикальной синхронизацииколичество FPS не может быть больше частоты вертикальной разверткимонитора (обычно 60 Гц), поэтому тестирование со включеннойвертикальнойсинхранизациейвсегданекорректно.

См.такжеVSync,Fillrate.

FirstPersonShooter|Шутеротпервоголица

Популярный игровой жанр, разновидность action, в котором игрокнаблюдает сцену "из глаз" персонажа игры. В FPS распространенапреимущественно батальная тематика, схватки с монстрами икосмическими пришельцами. Классические примеры: игры серий Doom,Quake,Half-Life.

Page 83: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

FrameBufferFrameBuffer|Буферкадра

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

Page 84: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

FrameworkFramework|Фреймворк

Каркас программной системы (или подсистемы). Может включатьвспомогательные программы, библиотеки кода, язык сценариев и другоеПО,облегчающееразработкуиобъединениеразныхкомпонентовбольшогопрограммного проекта. Обычно объединение происходит за счетиспользованияединогоAPI.

Page 85: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

FrontBufferFrontBuffer|Первичныйбуфер

Первичныйбуфер.Областьпамяти,изкоторойпроисходитвыводкадранаэкран. Рендеринг производится во вторичном буфере (back buffer), послечегобуфераменяютсяместами.См.такжеBuffer,BackBuffer,DoubleBuffering.

Page 86: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

FrustumCullingFrustumCulling|Отборпопирамидевидимости

Метод отбора невидимой геометрии, применяемый для большихполигональных объектов (например, ландшафтные или интерьерныесцены). Отрисовываются только те объекты, которые полностью иличастичнонаходятсявнутриусеченнойпирамидывидимости(viewfrustum).Все,чтонаходитсявнепирамиды,находитсяивнеэкрана.

Page 87: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

GeometryGeometry|Геометрия

Набор контрольных точек, определяющих форму объекта. Например, кубопределяетсявосемьюточками.

Page 88: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

GlobalCoordinatesGlobalCoordinates|Глобальныекоординаты

Координатная система, которая определяет положение объекта впространствеотносительноабсолютногоначалакоординат.

Page 89: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

GLSceneGLScene

БесплатнаяоткрытаяграфическаябиблиотеканабазеOpenGLдляDelphiиLazarus, изначально разработанная в 1999 годуМайкомЛишке. С версии0.5 развитие GLScene было продолжено Эриком Гранжем, а с 2006 годабиблиотека поддерживается целым сообществом программистов, в томчислероссийских.GLScene непрерывно развивается, адаптируясь под современныетехнологии 3D графики. Помимо графических классов и компонентов,библиотекапредоставляетсредствадляработысозвуком,вводом-выводом,игровойлогикойифизикой.Высокоуровневая структураGLScene позволяет новичкам создавать игры,не зная ни одной OpenGL-команды, не представляя, как перемножаютсяматрицы и как пишутся шейдеры. В то же время, профессионаламоткрываютсявсевозможностидляиспользованиячистогоOpenGL,гдеэтонеобходимо, модифицирования исходных кодов под себя и созданияпрофессиональныхприложений.На основе модифицированного исходного кода GLScene построенXtreme3D.Официальныйсайт:http://www.glscene.org.

См.такжеEngine,OpenGL.

Page 90: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

GPUGraphicsProcessingUnit|Графическийпроцессор

Процессор, предназначенный для графического рендеринга. Отцентрального процессора (CPU) отличается особой параллельнойархитектурой, позволяющей решать некоторые задачи существеннобыстрее.Условиетолькоодно-взадачедолженнаблюдатьсяпараллелизм.ТерминGPUбылпопуляризированкомпаниейNVIDIA,котораяв1999годувыпустила GeForce 256 и назвала его "первым GPU в истории", хотяаппаратная растеризация и соответствующие процессоры появилисьзначительно раньше. Так, первые аркадные игровые автоматы саппаратным T&L; появились в 1993 году (Sega Model 2 и Namco MagicEdge Hornet Simulator). На потребительских компьютерных системахпервые графические процессоры появились на Sega Saturn, PlayStation иNintendo 64 (1994-1996).Наперсональныхкомпьютерах однойиз первыхвыделенныхграфическихплатсподдержкой3D-рендерингабылS3ViRGE(1995), а затем лидером рынка стала компания 3dfx Interactive,выпускавшаяс1996по2000годывидеоускорительVoodooGraphics.С2000года рынокGPU поделен междуNVIDIA, ATI (ныне поглощенаAMD) иIntel.GPUпредназначендляобработкибольшихмассивоводнотипныхданных,таких как точки, векторы и пиксели. Изначально типы данных, которыемогли обрабатываться GPU (и сами алгоритмы обработки) были жесткозаданы, но современные графические процессоры полностьюпрограммируемы - это означает, что программист может передавать импроизвольные данные и выполнять любые алгоритмы. Это привело квведению термина GPGPU - General Purpose GPU (GPU общегоназначения).

Page 91: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

HDRHighDynamicRange|Широкийдинамическийдиапазон

Описаниецветареальнымифизическимивеличинами.

ПривычноймодельюописанияизображенияявляетсяRGB,когдавсецветапредставленыввидесуммыосновныхцветов:красного,зеленогоисинего,сразнойинтенсивностьюввидевозможныхцелочисленныхзначенийот0до255длякаждого,закодированныхвосемьюбитаминацвет.Отношениемаксимальнойинтенсивностикминимальной,доступнойдляотображенияконкретной моделью или устройством, называется динамическимдиапазоном. Так, динамический диапазон модели RGB составляет 256:1или100:1cd/m2(двапорядка).ЭтамодельописанияцветаиинтенсивностиобщепринятоназываетсяLowDynamicRange(LDR).

Возможных значений LDR для всех случаев явно недостаточно, человекспособен видеть гораздо больший диапазон, особенно при малойинтенсивностисвета,амодельRGBслишкомограниченавтакихслучаях(даиприбольшихинтенсивностяхтоже).Динамическийдиапазонзрениячеловека от 10-6 до 108 cd/m2, то есть 100000000000000:1 (14 порядков).Одновременновесьдиапазонмывидетьнеможем,нодиапазон,видимыйглазом в каждый момент времени, примерно равен 10000:1 (4 порядка).Зрение приспосабливается к значениям из другой части диапазонаосвещенности постепенно, при помощи так называемой адаптации,которуюлегкоописатьситуациейсвыключениемсветавкомнатевтемноевремя суток - сначала глаза видят очень мало, но со временемадаптируютсякизменившимсяусловиямосвещенияивидятуженамногобольше. То же самое случается и при обратной смене темной среды насветлую.

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

Page 92: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

изображение затемненного помещения с окном на яркую улицу всолнечный день. С RGB моделью можно получить или нормальноеотображение того, что находится за окном, или только того, что внутрипомещения. Значения больше 100 cd/m 2 в LDR вообще обрезаются, этоявляется причиной тому, что в 3D-рендеринге трудно правильноотображатьяркиеисточникисвета,направленныепрямовкамеру.

Самиустройстваотображенияданныхпокачтосерьезноулучшитьнельзя,ноотказотLDRприрасчетахимеетсмысл.Можноиспользоватьреальныефизические величины интенсивности и цвета (или линейнопропорциональные),анамониторвыводитьмаксимумтого,чтоонсможет.СутьпредставленияHDRвиспользованиизначенийинтенсивностиицветав реальных физических величинах или линейно пропорциональных и втом, чтобыиспользовать не целые числа, а числа с плавающей запятой сбольшой точностью (например, 16или32бита).Это сниметограничениямоделиRGB,адинамическийдиапазонизображениясерьезноувеличится.Затем любое HDR изображение можно вывести на любом средствеотображения (том же RGB мониторе), с максимально возможнымкачествомдлянегоприпомощиспециальныхалгоритмовtonemapping.

HDR рендеринг позволяет изменять экспозицию уже после того, как мыотрендерили изображение, дает возможность имитировать эффектадаптации человеческого зрения (перемещение из ярких открытыхпространств в темные помещения и наоборот), позволяет выполнятьфизически правильное освещение, а также является унифицированнымрешением для применения эффектов постобработки (glare, flares, bloom,motionblur).Алгоритмыобработкиизображения,цветокоррекцию, гамма-коррекцию, motion blur, bloom и другие методы постобработкикачественнейвыполнятьвHDRпредставлении.

В приложениях 3D рендеринга реального времени (играх, в основном)HDR рендеринг начали использовать относительно недавно, ведь этотребует вычислений и поддержки render target в форматах с плавающейточкой, которые впервые стали доступны только на видеочипах споддержкой DirectX 9. Обычный путь HDR рендеринга в играх таков:рендеринг сцены в буфер формата с плавающей точкой, постобработкаизображения в расширенном цветовом диапазоне (изменение контраста ияркости, цветового баланса, эффекты glare и motion blur, lens flare иподобные), применение tonemappingдля выводаитоговойHDRкартинки

Page 93: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

на LDR-экран. Иногда используются карты среды (environment maps) вHDRформатах,длястатическихотраженийнаобъектах,весьмаинтересныприменения HDR в имитации динамических преломлений и отражений,для этого также могут использоваться динамические карты в форматах сплавающей точкой. К этому можно добавить еще лайтмапы (light maps),заранее рассчитанные и сохраненные в HDR формате. Многое изперечисленногосделано,например,вHalf-Life2:LostCoast.

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

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

Page 94: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

HiddenSurfaceRemovalHiddenSurfaceRemoval|Удалениескрытыхповерхностей

Методопределениявидимыхдлянаблюдателяповерхностей.Позволяетнеотображатьневидимыеизданнойточкиповерхностиобъекта.

Page 95: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

HierarchyHierarchy|Иерархия

Система взаимоотношений между объектами, в которой одни объекты("потомки") подчинены другим ("родителям"). Ряд параметров потомков,например, движение, вращение и масштабирование, зависят от ихродителя. В то же время прямое изменение параметров потомков несказываетсянасостоянииродителя.

Page 96: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

HUDHead-UpDisplay

Часть GUI, которая отображает самую важную информацию на экране впроцессеигры.Например,панелиуровняжизни,очков,боеприпаса,мини-карту и прочее. Информация может отображаться как в цифровом(символами),такиваналоговомвиде(шкала).

Page 97: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

InterpolationInterpolation|Интерполяция

Математический способ восстановления отсутствующей (промежуточной)информациипоимеющемусянаборуизвестныхзначений.Простейшийвидинтерполяции -линейная: еслиимеютсядва значенияAиB, тодиапазонпромежуточныхзначениймеждунимиполучаетсяпоформулеA*(1-t)+B* t, где t - числоот0до1.Линейноинтерполироватьможноне тольковещественные числа, но и векторы. Результатом линейной интерполяциидвухцветовявляетсялинейныйградиент.

Page 98: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

InverseKinematicsInverseKinematics|Инверснаякинематика

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

Page 99: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

KeyframingKeyframing|Созданиеключевыхкадров

Процессанимированиязначениявовремени.Каждаяключеваяточка-этозначение параметра в определенном кадре. Значения между ключевымикадрами вычисляются путем интерполяции. Создавать ключевые кадрыможно практически для всех параметров, которые определяютсячисловымизначениями.

Page 100: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

LensflareLensflare|Бликиналинзах

Световой эффект, возникающий при рассеивании и преломлении света всистемелинз,есливполезрениякамерыпопадаетяркосветящийсяобъект.Такой эффектчастоимитируется в компьютерныхиграхот третьеголицадляприданияграфикекинематографичности.

Page 101: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

LightSourceLightSource|Источникосвещения

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

Обычновыделяюттриосновныхтипаисточниковосвещения:PointLight(точечныйсвет)-источниксвета,которыйсветитодинаковововсехнаправленияхизоднойточки(например,лампочкавкомнате).Такжевстречаетсяобозначениеomni(omnidirectional)light.Spot Light (направленный свет) - источник света, светящий не во всехнаправлениях, а в пределах некоего конуса. Освещаются только объекты,попадающиевэтотконус.Простойпример-фонарик.ParallelLight(параллельныйсвет)-имитируетудаленныеисточникисвета,например, солнце. Свет излучается в направлении только одной оси, изисточника,находящегосянабесконечнобольшомрасстоянииотзрителя,авсе световые лучи являются параллельными. Синонимы термина: distantlight,directionallight.

Точечные и направленные источники света обладают параметрами,влияющими на освещение, например, затухание (attenuation). Этотпараметр влияет на убывание интенсивности света с расстоянием. Вквадратное уравнение, определяющее интенсивность света, входят трипараметра, называемые постоянной, линейной и квадратичнойсоставляющими (constant, linear, quadratic). По умолчанию имприсваиваютсязначения1,0и0соответственно—интенсивностьсветаоттакогоисточниканеубываетсрасстоянием.Уравнениевыглядитследующимобразом:

Page 102: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

гдеа—величиназатухания;с—постояннаясоставляющая;l—линейнаясоставляющая; d— расстояние от источника света, a q— квадратичнаясоставляющая.

Page 103: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

LightmapLightmap|Картаосвещенности

Устаревший, но до сихпорприменяющийся ввиду своейпростотыметодстатического освещения поверхностей. Принцип следующий: на базовуютекстурунакладываютещеодну - картуосвещенности, светлыеи темныеместакоторойизменяютинтенсивностьосвещениябазовой,смешиваясьврежимеmodulate.Дляналожениякартосвещенностимодель,какправило,снабжаетсядополнительнымнаборомтекстурныхкоординат.Данныйметодприменимтолькодлястатическихмоделейинеподвижныхисточниковсвета.

Page 104: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

LineBufferLineBuffer|Линейныйбуфер

Буфер памяти, используемый для хранения одной линиивидеоизображения.Еслигоризонтальноеразрешениедисплеяустановленоравным 640 и для кодирования цвета используется схема RGB, толинейныйбуфербудетиметьразмер640х3байт.Линейныйбуферобычноиспользуетсявалгоритмахфильтров.

Page 105: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

LODLevelOfDetail|Степеньдетализации

Метод оптимизации рендеринга в графических движках, основанный наснижении детализации моделей по мере их отдаления от камеры.Различают дискретный LOD, предусматривающий хранение несколькихвариантовмоделивпамятиипереключениемеждуними,идинамический(илинепрерывный),основанныйнатесселяциимешейвреальномвремени.Динамический LOD, как правило, используется для рендерингаландшафтов.

Page 106: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

Low-PolyModellingLowPolygonalModelling|Низкополигональноемоделирование

Процесссозданияупрощенныхтрехмерныхмоделейснизкимколичествомполигонов.Такиемоделиобычноиспользуютсявкомпьютерныхиграх,гденеобходимо максимально сократить время, затрачиваемое натрансформациюирендерингполигональныхпримитивов.Изначальновсемоделив3D-играхбылинизкополигональными.

Page 107: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

MapMap|Карта

Отсканированное или нарисованное растровое изображение, задающее теилииные свойстваповерхности в каждой его точке - например, цветилинормаль. Карты также называют текстурами, хотя текстурой корректнееназывать изображение, хранящееся в видеопамяти. Для рендерингамоделейиспользуютцветовые(диффузные)карты,картынормалей,картыосвещенности, карты высот, бликовые карты, карты окружения, картысамосвечения и т.д. В современном физически обоснованном рендерингетакже применяются карты металличности и шероховатости. Процессналожениякартынаповерхностьмодели(которыйсводитсякотображениюпространственных координат в текстурные) называется маппингом илипроецированием.См.такжеTexture.

Page 108: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

MaterialMaterial|Материал

Совокупность параметров поверхности, определяющих внешний видобъекта.Этипараметрыобычновключаютцветовыекомпоненты,значениепрозрачности, одну или несколько диффузных текстур, карту нормалей,карту освещенности и т.д. Следует помнить о том, что в игровых 3D-движках понятие "материал" относится к поверхности, а не к объемуобъекта,посколькурастеризацииподлежиттолькоповерхность.

Page 109: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

MatrixMatrix|Матрица

Двумерная таблица.Матрицыобозначаются какNxM, гдеN - количествострок таблицы, M - количество столбцов. В линейной алгебре обычноиспользуютсяквадратныематрицы(укоторыхколичествостолбцовистрокодинаково). В 3D-графике квадратные матрицы используются длялинейных преобразований векторов и точек из одного пространства вдругое.Матрицы можно перемножать, инвертировать (вычислять обратныематрицы), а также транспонировать - то есть, менять местами столбцы истроки (строкастановитсястолбцоминаоборот).Особыйвидквадратнойматрицы-единичная.Уединичнойматрицывсеэлементы,кромеглавнойдиагонали, равны нулю, а главная диагональ (от левого верхнего угла кправому нижнему) содержит единицы. Единичная матрица равна своейобратной и транспонированной матрицам. Умножение матрицы наединичнуюдастврезультатеточнотакуюжематрицу.Умножениематриц осуществляетсяпо столбцами строкам - для каждогоэлемента результирующей матрицы соответствующая этому элементустрокаоднойматрицыскалярноумножаетсянасоответствующийстолбецдругой. Умножение матриц некоммутативно - то есть, для матриц A и BпроизведениеA*BнеобязательноравноB*A.Такжеможноперемножитьматрицуивектор, еслиприэтомсоблюдаетсяопределенное соответствие их размерностей. Есть два вида такогоумножения - левое и правое. Левое умножает матрицу NxM на вектор-столбецразмерностиM,иврезультатеполучаетсявекторразмерностиN.Правое умножает вектор-строку размерности N на матрицу NxM, и врезультате получается вектор размерностиM. Вектор-строка - это векторразмерностиN, записанныйввидематрицы1xN,вектор-столбец - векторразмерности M, записанный в виде матрицыMx1. В остальном правилаумножения такие же, как и для матриц - строка на столбец. Правоеумножение соответствует левому с транспонированной матрицей (инаоборот), и это свойство часто используется в компьютерныхвычисленияхдляразличныхоптимизаций.

Page 110: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

См.такжеTransformation,Vector.

Page 111: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

MeshMesh,PolygonalMesh|Полигональнаясетка

Конечные списки вершин, ребер и граней называются полигональнойсеткой,еслиеекомпонентыудовлетворяютследующимусловиям:-Каждаявершинадолжнаиметьхотябыодноребро-Каждоеребродолжноиметьхотябыоднугрань-Еслидвегранипересекаются,вершинаилиребро,которыеполучилисьврезультатепересечения,должныбытькомпонентамиполигональнойсетки.Если все грани в сетке - треугольники, объект называется треугольнойсеткой(trianglemeshилисокращенноtrimesh).

Page 112: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

MetaballModellingMetaballModelling

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

Page 113: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

MipmappingMipmapping|Мипмаппинг

По-латинскиmip(multuminparvum)означает"многоеводном".Предрасчитанный оптимизированный набор изображений, связанных соднойтекстуройипредназначенныйдляувеличенияскоростирендерингаиулучшениякачестваизображения.Каждоеследующееизображениевнаборевдвоеменьшепредыдущго.Т.е.самое первое имеет размер равный размеру текстуры, второе вдвоеменьший,третье-вчетвероит.д.доразмера1х1тексель.Смыслпредрасчитанного набора состоит в том, что при текстурированиибудет выбиратся изображение с наиболее подходящим размером.Например,прирендерингеудаленныхповерхностейилиповерхностейподмаленьким углом по отношению к камере предпочтительнее выбратьтекстуруменьшегоразмерадляустраненияэффектаалиасинга.

Page 114: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

ModelModel|Модель

Одинизспособоворганизацииобъектоввсцене.Модельможетсодержатьнетолькоинформациюогеометрии,нотакжеифункциональныекривые,тендерыимножестводругих свойств, которыеопределяютвключенныевнееэлементы.Этоттерминтакжеможноотнестикобъектамиперсонажам.

Page 115: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

MotionBlurMotionBlur|Размытиепридвижении

Эффектсмазанности("шевеленка"),возникающийприфото-икиносъемкеиз-за движения объектов в кадре в течение времени экспозиции кадра. Втрехмерной анимации виртуальная камера имеет бесконечно малуювыдержку, поэтому смазывание, подобное получаемому камерой ичеловеческим глазом при взгляде на быстро движущиеся объекты,отсутствует - его обычно имитируют искусственно с помощьюнаправленногоразмытия(directionalblur).

Размытиепридвижениииспользуетсяпочтивовсех гоночныхиграх (длясозданияэффектаскоростнойезды),спортивныхсимуляторах(длябыстродвижущихся объектов, вроде мяча или шайбы), а также файтингах(быстрые движения холодного оружия, рук и ног). Иногда размытие придвижении используется в играх от первого лица при быстром поворотекамеры-дляприданиякартинкекинематографичности.

Page 116: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

MotionCaptureMotionCapture|Захватдвижений

Технология синхронизации движений живого актера и виртуальногоперсонажавреальномвременисиспользованиемспециальногоаппаратно-программного комплекса. Используется для записи сложных движений(например, спортивных) для последующего использования в трехмернойанимацииикомпьютерныхиграх.

Page 117: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

MultitexturingMultitexturing|Мультитекстурирование

Процессналожениядвухиболеетекстурнаобъект.

Page 118: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

NormalNormal|Нормаль

Векторная величина, определяющая направление, перпендикулярноеповерхности. Нормаль к треугольнику определяется в виде векторногопроизведения двух ребер треугольника. В программировании графикинормальможетбытьзаданакакдлякаждоготреугольника,описывающегонекую поверхность, так и для каждой вершины в зависимости оттребуемогорезультата.Длинанормалиравна1.Приведениедлинывекторакединицессохранениемегонаправленияназываетсянормализацией.

Page 119: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

NormalMapNormalMap|Картанормалей

Карта, задающая вектор нормали в каждой точке поверхности.Используется для генерации поверхностей, bumpmapping'а и прочихалгоритмов. Карта нормалей обычно представлена текстурой, в которойданные записаны так, что значения RGB переводятся в XYZ, где Zуказываетперпендикулярныйповерхностивектор.

Page 120: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

NURBSNon-UniformRationalB-Spline|НеоднородныйрациональныйB-сплайн

Общийспособзаданияпараметрическихкривыхиповерхностей.

Page 121: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

OBBOriented Bounding Box | Ориентированный ограничивающийпараллелепипед

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

См.такжеAABB,CollisionDetection.

Page 122: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

ObjectObject|Объект

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

Page 123: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

OcclusionOcclusion

Перекрытиевтрехмерномпространствеодногообъектадругим.

Page 124: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

OctreeOctree|Деревооктантов

Структура данных, представляющая евклидово пространство в видеоктарного дерева, в котором каждый элемент является AABB. При этомкаждый куб делится тремя плоскостями на 8 (обычно взаимно равных)кубов. Octree обычно применяются для разбиения больших открытыхнеплоских пространств. Заметим, что под "плоскими" простраствамипонимаются пространства, в которых перемещение камеры ограниченопреимущественно некоторой плоскостью: примером может служитьавтосимулятор.Для"плоских"пространствбольшеподходитquadtree.Как и многие другие методы разбиения, octree применяется дляоптимизацииобнаружениястолкновенийиfrustumculling.

Page 125: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

ODEOpenDynamicsEngine

Бесплатная открытая библиотека промышленного качества длямоделирования физики твердых тел. Подходит для симуляциитранспортных средств, существ с ногами и движущихся объектов. ODEбыстрая, гибкая и надежная, имеет встроенную систему определениястолкновений.ODEразрабатываетсяфизикомРасселомСмитомсовместноскомандойдобровольцев.

Page 126: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

OpenGLOpenGraphicsLibrary

Графическая библиотека утвержденного индустриального стандарта,разработанная в 1992 году девятью ведущими IT-фирмами: DigitalEquipment, Evans & Sutherland, Hewlett-Packard, IBM, Intel, Intergraph,Silicon Graphics Corp, Sun Microsystems и Microsoft. В основе стандарталежит билиотека IRIS GL, разработанная Silicon Graphics. БиблиотекаOpenGL достаточно проста в использовании и обучении, обладает оченьширокимспектромвозможностей.Вотнекоторыеизеедостоинств:Стабильность-OpenGLустоявшийсястандарт.Всеизменения,вносимыевнего, анонсируются загодя и реализуются так, чтобы уже существующееПОнесбоилонановыхкартах.Надежность - Все приложения, использующие OpenGL, гарантируютодинаковый визуальный результат, независимо от оборудования иоперационнойсистемы.Портируемость -Приложения, использующиеOpenGL, могут запускатьсянаразличныхархитектурахиподразличнымиоперационнымисистемами(OpenGLобеспечиваетпереносимостьнауровнеисходныхкодов).Главная особенность OpenGL - его клиент-серверная архитектура, чтотеоретически позволяет поместить клиент (приложение, использующиеOpenGL)исервер(исполнительнуючастьOpenGL)наразныемашины.OpenGL развивается с помощью механизма "расширений" - специальныхмодификацийбазовойверсииAPI,которыедобавляютновыевозможностии/или расширяют старые. Когда накапливается солидный багаж такихизменений (расширений), консорциум OpenGL выпускает спецификациюновойверсииOpenGL.Наданныймоментпоследняяверсияспецификации-4.0.

Page 127: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

ParallaxMappingParallaxMapping

Mетод достижения видимости рельефа на поверхности. Представляетсобой улучшенный Normal mapping. Улучшение заключается в том, чтокарта нормалей не только влияет на освещенность поверхности, но и насмещение текстурных координат. То есть, рельеф становитсяпсевдообъемнымипо-разномувыглядитсразныхуглов.См.такжеNormalMap,BumpMapping,DisplacementMapping.

Page 128: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

ParticleSystemParticleSystem|Системачастиц

Система анимации, состоящая из большого количества очень маленькихобъектов, поведение которых определено математически. Система частицобычно состоит из эмиттера (который может быть точкой, поверхностьюили объемом, и может испускать частицы направлено или во всехнаправлениях) и ряда областей, которые определяют поведение частиц(аттракторы,дефлекторы,чейнджерыидестройеры).Каждаячастицаимеетконечнуюпродолжительностьжизни,иможетобладатьсвоимиатрибутами(цвет, радиус, прозрачность), которые изменяются в течение этойпродолжительности жизни. Частицы обычно используются длямоделированияогня,дымаидругихэффектов.

Page 129: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

PhysicsEnginePhysicsEngine|Физическийдвижок

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

Page 130: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

PipelinePipeline|Конвейер

Пошаговый метод рендеринга 3D-графики (растеризации). Свое названиеполучилиз-затого,чтовыходныеданныекаждогошага(стадии)являютсявходнымидляследующего.

1.Трансформация.Этастадияначинаетвершинныйконвейер,гдеединицейобработки является вершина (точка в аффинном пространстве). Наборвершин, формирующих трехмерный объект, переводится из модельногопространства в мировое, а затем - в видовое, где началом координатявляетсяпозициякамеры(этидвапреобразованияобычносовмещаютсяводно). Полученные вершины переводятся перспективной матрицей впространство отсечения. В программируемом конвейере стадиятрансформациипроизводитсяввершинномшейдере.2. Отсечение. Невидимые вершины (выходящие за пределы пирамидывидимости)отбрасываютсяинепередаютсядальше.3. Нормализация. Из пространства отсечения вершины переводятся внормализованные координаты устройства (NDC) - то есть, фактически, вдвумерные координаты на экранной плоскости + координата Z,обозначающаяглубинуотносительноэкраннойплоскости.4. Растеризация.Полученныйнабор точек используется для растеризацииполигонов (обычно треугольников) по заданным правилам построенияребер. В программируемом конвейере эти правила могут быть заданы вгеометрическомшейдере.Такженаэтойстадиипроисходитинтерполяциявершинных атрибутов (цвет, нормаль, текстурные координаты и пр.) поповерхностиполигона.Производитсяперспективнаякоррекциятекстурныхкоординат. С этого момента начинается пиксельный конвейер - данныеобрабатываютсяпопиксельно.5.Вычислениецвета.Впрограммируемомконвейеререзультирующийцветпикселя вычисляется во фрагментном шейдере. На этом этаперассчитываются попиксельное освещение, текстурирование, рельеф,отражение, тени, прозрачность и другие эффекты. В качестве входныхданных используются интерполированные вершинные атрибуты, а такжетекстуры.

Page 131: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

6.Проверкаглубины.Передтем,какзаписатьпиксельвбуферкадра,можетбыть произведена проверка глубины (depth test). Координата Z пикселясравниваетсяссоответствующейглубинойвZ-буфере.Еслионаменьше,топиксельдолженбытьотрисован,еслинет-топроигнорирован.7. Смешивание. Полученный цвет пикселя может по заданным правиламсмешиваться с уже присутствующим цветом в буфере кадра. Итоговоезначениезаписываетсявбуфер.

Следует также учесть, что свой конвейер есть и у второго пораспространенностиметода3D-рендеринга-трассировкилучей.Онболеепростой и интуитивный и оперирует, главным образом, лучами. Наборывершиниспользуются толькодляопределенияходалуча, буфера глубинынет, а перспективное проецирование осуществляется путем расчетастартового направления лучей для каждого пикселя изображения.Итоговыйцветпикселярассчитываетсясхожимсфрагментнымшейдеромобразом.

Page 132: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

PixelPictureElement|Пиксель

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

Page 133: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

PolygonPolygon|Полигон

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

Page 134: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

PostProcessingPostProcessing|Пост-обработка

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

Page 135: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

PrimitiveGeometricPrimitive|Геометрическийпримитив

Точка,отрезокилимногоугольник.

Page 136: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

ProceduralTextureProceduralTexture|Процедурнаятекстура

Текстура, описываемая математическими формулами. Такие текстуры незанимаютввидеопамятиместа,онисоздаютсяпиксельнымшейдером"налету", каждый их элемент (тексель) получается в результате исполнениясоответствующих команд шейдера. Наиболее часто встречающиесяпроцедурныетекстуры:разныевидышума(например,fractalnoise),дерево,вода, лава, дым, мрамор, огонь и т.п., то есть, те, которые сравнительнопростоописатьматематически.К сожалению, процедурные текстуры не получили пока должногоприменениявиграх.

Page 137: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

ProjectionProjection|Проекция

Отображение трехмерного пространства на плоскость путем построенияпроецирующихлиний.Вкомпьютернойграфикераспространенытривидапроекции:Orthographic (ортогональная) - местоположение зрителя бесконечноудалено от сцены, поэтому все линии вдоль одинаковых осей являютсяпараллельными.Кортографическойпроекцииотноситсяизометрия.Parallel (параллельная) - разновидность ортогональной проекции,параллельная координатным осям. К параллельной проекции можноотнестивидыFront(Видспереди),Тор(Видсверху)иRight(Видсправа).Perspective (перспективная) - параллельные линии визуально сходятся воднойточке.Перспектива-самыйизвестныйтиппроекциии,какправило,используемыйнаиболеечасто.

Page 138: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

ProjectionMatrixProjectionMatrix|Матрицапроекции

Матрица размером 4x4, использующаяся для преобразования примитивовизвидовогопространствавпространствоотсечения.

Page 139: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

QuadQuadrilateral|Квад

Пространственныйчетырехугольник(втомчислеисоставленныйиздвухтреугольников).

Page 140: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

QuadtreeQuadtree|Деревоквадрантов

Структура данных, представляющая евклидово пространство в видеквадратичного дерева, в котором каждый элемент является AABB. Приэтом каждый квадрат делится на 4 (обычно взаимно равных) квадратов.Quadtree обычно применяются для разбиения больших плоскихпространств, в которых перемещение камеры ограниченопреимущественно некоторой плоскостью: примером может служитьавтосимулятор.Как и многие другие методы разбиения, Quadtree применяется дляоптимизацииобнаружениястолкновенийиfrustumculling.

Page 141: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

RagdollRagdoll|Тряпичнаякукла

Метод, используемый для создания физической модели поведениячеловеческоготела.Вбольшинствеслучаевтряпичнаякуклаприменяетсявместесоскелетнойанимацией, так как принцип их работы во многом схож. И в скелетнойанимации,ивтряпичнойкуклеприменяетсяособаяиерархия"костей"дляанимированиявершинмодели.Однако,вотличиеотскелетнойанимации,вершиныперемещаютсянепозаранеезаданнымправилам,аосновываясьнафизическоймодели твердого тела.Например одна кость всего скелетатряпичной куклы может быть представлена треугольной сеткой (либопараллелепипедомилиLOD'омвцеляхускорениявычислений),азатемвсевершиныпередвигаютсятакже,какивскелетнойанимации.

Page 142: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

RasterizationRasterization|Растеризация

Методрендеринга,прикоторомрастровоеизображениеполучаетсяпутемпоиска пикселей, принадлежащих заданному примитиву. Растеризуются,как правило, отрезки и многоугольники (обычно треугольники). Вобобщенном смысле растеризация - это процесс перевода векторныхданныхврастровоеизображение.Растеризация на сегодняшний день является самым распространеннымметодомрендеринга 3D-графикиввиду своейпростотыи эффективности.Растеризация легко распараллеливается, поэтому для рендеринга вреальном времени были созданы специальные выделенныемногоядерныепроцессоры, называющиеся графическими (GPU), которые способнырастеризироватьмиллионытреугольниковвсекунду.Именнорастеризациялежитвосновепрактическивсехсовременных3D-игр.

См.такжеGPU,Pipeline,Primitive,Rendering.

Page 143: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

RaycastingRaycasting|Бросаниелучей

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

Page 144: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

RayTracingRayTracing|Трассировкалучей

Методрендеринга,прикоторомрастровоеизображениеполучаетсяпутемотслеживания хода лучей и их пересечений с трехмерными объектами.Трассировка лучей во многом аналогична тому, как получаетсяфотографическое изображение в реальном мире, и позволяет получатьизображения, приближенные по достоверности к фотографиям (порой донеотличимости).Алгоритмтрассировкивыглядитследующимобразом:длякаждогопикселяизображения из позиции камеры выпускается луч, который затемпроверяетсянапересечениесобъектамисцены.Исходяизточкиинормалипересечения, а также из характеристик поверхности и набора известныхисточниковсвета,вычисляетсяцветповерхностивданнойточке,которыйиприсваиваетсяпикселю.Алгоритм естественным образомподдерживает перспективнуюпроекцию(лучи расходятся по мере отдаления от камеры), отбор по глубине(учитывается только ближайшее к экранной плоскости пересечение) ипостроение теней (для проверки, попадает ли точка в тень, строится ещеодин луч по направлению к источнику света - если он пересекаетповерхность до того, как достигнет источника, то точка затеняется).Введениемдополнительныхлучейтрассировкарасширяетсядоподдержкимягких теней, отражений, преломлений, непрямого освещения и другихоптическихфеноменовреальногомира.Недостатком трассировки лучей, который пока мешает полноценноиспользовать метод для рендеринга в реальном времени, являетсяогромный объем покадровых вычислений. В последние годы появиласьвозможность распараллеливать трассировку при помощи GPU общегоназначения - это позволяет надеяться на изменение ситуации в будущем.Ужесейчасвозможностисовременныхвидеокартпозволяюторганизоватьгибридный рендеринг - растеризацию с элементами трассировки длянекоторыхсложныхэффектоввродеотражений.

См.такжеRendering.

Page 145: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

Real-TimeReal-Time|Режимреальноговремени

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

Page 146: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

ReflectionMappingReflectionMapping|Проецированиекартыотражения

См.EnvironmentMapping.

Page 147: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

RenderingRendering|Рендеринг,визуализация

Процесс формирования плоского изображения на основе математическихмоделей. Чаще всего этим термином обозначают 3D-визуализацию -построение изображений виртуальных трехмерных объектов и сцен.Программа, осуществляющая рендеринг, называется движком рендерингаилирендер-движком(renderingengine).Рендеринг может осуществляться как в реальном времени (то есть,рендеринганимацииснемедленнымвыводомполученногокадранаэкрани достаточно высокой частотой смены кадров - 30 кадров в секунду ивыше), так и в оффлайн-режиме (то есть, без жестких ограничений навремя вывода кадра).Естественно, что для достижения высокой скоростирендеринга приходится жертвовать объемами вычислений и использоватьупрощенный математический аппарат, поэтому движки оффлайн-рендеринга выдают гораздо более качественные и реалистичныеизображения. Рендеринг в реальном времени - основа всех современныхигр, оффлайн-рендеринг же используется в кино и мультипликации,дизайне,рекламе,промышленнойинаучнойсфере.Существует два основных метода 3D-рендеринга - растеризация итрассировка лучей. Растеризация чаще используется в рендерингереального времени, трассировка - в оффлайн-рендеринге, хотя нередки иисключения: например, существуют популярные оффлайн-движкирендеринга, использующие растеризацию. Также встречаются гибридныедвижкирендеринга,сочетающиевсеберастеризациюитрассировкулучей.

См.такжеRasterization,RayTracing.

Page 148: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

ResolutionResolution|Разрешение

Количествопикселейнаединицудлиныилиплощади.

Page 149: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

RGBRed,Green,Blue

Система цветообразования, в которой конечный цвет получается за счетсмешения с различной интенсивностью трех основных цветов: красного(Red), зеленого (Green) и синего (Blue). Самое известное устройство,котороеиспользуетсистемуRGB,этоцветноймонитор.

Page 150: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

ROAMRealtime Optimally-Adapting Meshes | Оптимальная адаптацияполигональнойсеткивреальномвремени

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

Page 151: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

SceneScene|Сцена

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

Page 152: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

SeamlessSeamless|Бесшовный

Этот термин применяется для обозначения типа текстуры. Текстураизготавливается таким образом, чтобы к любой ее стороне можно былосостыковать еще одну такую же без явно видимых швов стыковки.Достигаетсяэтотэффекттемчтопротивоположныестороныизображенияимеютодинаковыйрисунок.Бесшовныетекстурыприменяютсявосновномдляландшафтов,атакжедляотекстуриваниякрупныхстатичныхобьектов(строения,дороги,воднаяповерхностьит.д.)Иногда используется анимированная бесшовная текстура, состоящая изнескольких последовательно отображаемых кадров - как правило дляимитациижидкостейилидвижущихсяобьектов-воднаяповерхность,лава,облакаит.д.

Page 153: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

ShaderShader|Шейдер

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

В настоящее время шейдеры делятся на четыре типа: вершинные,геометрические,фрагментные(пиксельные)ивычислительные.

Вершинныешейдеры(VertexShader)Вершинный шейдер оперирует данными, сопоставленными с вершинамимногогранников. К таким данным, в частности, относятся координатывершинывпространстве,текстурныекоординаты,тангенс-вектор,векторынормали и бинормали. Вершинный шейдер может быть использован длявидовогоиперспективногопреобразованиявершин,генерациитекстурныхкоординат,простейшегорасчетаосвещенияит.д.

Геометрическиешейдеры(GeometryShader)Геометрическийшейдер,вотличиеотвершинного,способенобработатьнетолькооднувершину,ноицелыйпримитив.Этоможетбытьотрезок(двевершины) и треугольник (три вершины), а при наличии информации осмежных вершинах (adjacency) может быть обработано дошести вершиндлятреугольногопримитива.Крометогогеометрическийшейдерспособенгенерировать примитивы "на лету", не задействуя при этом центральныйпроцессор.

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

Page 154: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

последней стадии графического конвейера для формирования пикселяизображения.

Вычислительныешейдеры(ComputeShader)Полностью универсальный шейдер, при помощи которого можноосуществлятьпроизвольныевычислениянаGPU,несвязанныенапрямуюсрастеризацией полигонов. Вычислительным шейдерам доступны длячтения и записи данные в видеопамяти, которые затем могут бытьиспользованывпроцессерендеринга.

СуществуеттриосновныегруппыязыковпрограммированиядляGPU.К первой группе относятся языки, используемые при рендерингеизображений и анимации в таких областях, как кино, телевидение,промышленныйдизайниархитектурныевизуализации:

RenderManShadingLanguage(RSL)-разработанииспользуетсястудиейPixar.Являетсяфактическимстандартомвпрофессиональномрендеринге.

OpenShadingLanguage(OSL) -разработанSonyPicturesImageworksдлярендер-движкаArnold,однакоподдерживаетсяивомногихдругихрендер-движках. Ориентирован на рендеринг с использованием трассировкилучей, предназначен для описания BSDF - двулучевых функцийповерхностногорассеивания.

Gelato - разработан компанией nVidia. Представляет собой гибриднуюсистемурендерингаизображенийианимации,использующуюдлярасчетовцентральные процессоры и аппаратные возможности профессиональныхвидеокартсерииQuadroFX.

Vector Expressions (VEX) - разработан Side Effects Software как частьпакетаHoudini.ЯвляетсяаналогомRenderMan.

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

НизкоуровневыйшейдерныйязыкOpenGL(ARB)-посинтаксисусхожс ассемблером. Доступен в виде расширений ARB_vertex_program,

Page 155: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

ARB_fragment_program. Является утвержденным промышленнымстандартом.

OpenGLShadingLanguage (GLSL) - высокоуровневыйшейдерный языкOpenGL. Основан на синтаксисе ANSI C. Большинство возможностей Cсохранено; к нимдобавленывекторныеиматричные типыданных, частоприменяющиеся при работе с трехмерной графикой. В контексте GLSLшейдеромназываетсянезависимокомпилируемая единица,написаннаянаэтомязыке.Программойназываетсянабороткомпилированныхшейдеров,связанныхвместе.Изначально GLSL 1.10 был доступен в виде набора расширенийGL_ARB_shading_language_100, GL_ARB_shader_objects. Начиная сOpenGL2.0,сталчастьюстандарта.С релизом OpenGL 3.3, GLSL меняет нумерацию версий. Теперь номерверсииGLSLсоответствуетверсииOpenGL.

С for graphics (Cg) - высокоуровневыйшейдерный язык, разработанныйкомпаниейnVidiaсовместносMicrosoft (аналогичныйязыкотMicrosoft -HLSL, является частью DirectX 9 и 10). Работает как с OpenGL, так и сDirectX,поддерживаетразличныепрограммныеиаппаратныеплатформы.ОснованнаC,используетсхожиетипыданных.Поддерживаютсяфункциии структуры. Включает своеобразную оптимизацию в виде упакованныхмассивов (packed arrays) — объявления «float a[4]» и «float4 a» в нёмсоответствуют разным типам. Второе объявление и есть упакованныймассив,операциискоторымвыполняютсябыстрее,чемсобычным.ВнастоящеевремяCgужепрактическинеиспользуется,будучиполностьювытесненнымHLSLиGLSL.

Низкоуровневый шейдерный язык DirectX (DirectX ASM) - посинтаксису схож с ассемблером. Существует несколько версий,различающихсяпонаборукоманд,атакжепотребуемомуоборудованию.

HighLevelShaderLanguage(HLSL)-высокоуровневыйшейдерныйязыкDirectX (поддерживается также игровыми консолями Xbox и Xbox 360).Является надстройкой над DirectX ASM. По синтаксису сходен с C,позволяетиспользоватьструктурыифункции.

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

Page 156: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

используют многоядерные CPU и GPGPU для ускорения обработкибольшихмассивовданных.

Sh - высокоуровневый язык программирования GPU, входит вподмножествоязыкаС++.ИзначальнобылразработангруппойRapidMind(которая впоследствии стала частью Intel), в настоящее времяраспространяетсяполицензииGNULGPLиподдерживаетсясообществом.

ComputeUnifiedDeviceArchitecture(CUDA)-технология,разработаннаякомпаниейNVIDIAдляпараллельныхвычисленийнавидеокартахGeForce(8 и старше), Quadro и Tesla. CUDA использует специализированныйвариантязыкаCснабороминструкцийдляGPU.

OpenCL (Open Computing Language) - кроссплатформенный аналогCUDA,независимыйотоборудованиявычислительныйAPIссобственнымC-подобным языком программирования. Спецификация OpenCLразрабатывается консорциумом Kronos Group параллельно с OpenGL -существуетвозможностьвзаимодействиямеждуэтмидвумяAPI.

BrookGPU - проектСтэнфордского университета.Изначально возник какязыкдляпрограммированияпотоковыхархитектур.ПредставляетсобойC-подобный язык, в который добавлен тип данных - массив специальноговида ("поток" в терминологии языка). В 2004 году появилась егореализациядляграфическихпроцессоров.

Page 157: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

ShadingComponentsShadingComponents|Компонентыосвещения

Свет точки поверхности рассчитывается как сумма компонентов ambient,diffuse и specular от всех источников света в сцене (в идеале от всех,зачастую многими пренебрегают). Влияние на это значение каждогоисточникасветазависитотрасстояниямеждуисточникомсветаиточкойнаповерхности.Равномерная составляющая освещения (ambient) - аппроксимацияглобального освещения, "начальное" освещение для каждой точки сцены,прикоторомвсеточкиосвещаютсяодинаковоиосвещенностьне зависитотдругихфакторов.Диффузная составляющая освещения (diffuse) зависит от положенияисточника освещения и от нормали поверхности. Эта составляющаяосвещения разная для каждой вершины объекта, что придает им объем.Светуженезаполняетповерхностьодинаковымоттенком.Бликовая составляющая освещения (specular) проявляется в бликахотражения лучей света от поверхности. Для ее расчета, помимо вектораположения источника света и нормали, используются еще два вектора:векторнаправлениявзглядаивекторотражения.Бликовуюсоставляющуювпервые предложил Фонг. Эти блики существенно увеличиваютреалистичность изображения, ведь редкие реальные поверхности неотражают свет, поэтому specular составляющая очень важна, особенно вдвижении,потомучтопобликамсразувидноизменениеположениякамерыили самого объекта. В дальнейшем исследователи придумали иныеспособы вычисления этой составляющей, более сложные (Блинн, Кук-Торранс, Вард), учитывающие распределение энергии света, егопоглощениематериаламиирассеиванияввидедиффузнойсоставляющей.

Page 158: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

ShadingmodelShadingmodel|Модельосвещения

Методвычисленияосвещенностиполигонов.Вграфикереальноговременинаибольшеераспространениеполучилитримоделиосвещения:-Плоское(flat)-ПоГуро(Gouraud)-ПоФонгу(Phong)При плоском освещении полигоны как бы выделяются (это связано свычислением одного и того же цвета для каждого пикселя на грани),поэтомуприприменениизакраскиполигонбудетказатьсясплошным.Модели Гуро иФонга дают плавные градации светотени. Вмодели Гуроосвещениевычисляетсяповершинно,вмоделиФонга-попиксельно.Существует также множество других моделей освещения, которые впоследние годы получили широкое распространение в 3D-играх иоффлайн-рендеринге: Блинн-Фонг, Кук-Торранс, Вард, Торранс-Спарроу,Лафортюнидр.Многиеизнихявляютсядовольноточнымприближениемк реальной физике света. В терминологии оптики наиболее близкое кмодели освещения понятие - BRDF (двулучевая функция отражательнойспособности).

Page 159: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

ShadowMapShadowMap|Теневаякарта

Один из методов построения теней, заключающийся в использовании Z-буферадляопределенияпопиксельно,находитсялизаданнаяточкавтени.Восновеметодатеневыхкартлежитидеяотом,чтоосвещенныеточки -это те точки, которые "видны" источнику света. "Видимость" в данномслучае означает, что данная точка успешно проходит тест глубины прирендеринге из положения источника света - то есть, не перекрываетсядругими объектами. Следовательно, все точки, которые "невидимы" изположенияисточникасвета,находятсявтени.Метод работает в два прохода: сначала осуществляется рендеринг изположения источника света - значения глубины записываются вспециальныйбуфер.Затемделаетсяобычныйрендеринг,вовремякоторогополученный буфер используется для проверки, попадает ли тот или инойпиксельвтень(этапроверкаосуществляетсявофрагментномшейдере).Обычно теневые карты используются с направленным источником света(таким, как солнце) - соответственно, для рендеринга буфера глубиныиспользуется ортогональная проекция. Однако метод совместим и сточечными источниками света - для этого вместо одного буфера глубиныосуществляется рендеринг кубической карты (6 буферов глубины посторонамкуба,окружающегоисточниксвета)сперспективнойпроекцией.При большом количестве источников света эта техника сильно повышаетнагрузкунаGPU,поэтомунапрактикетениобычнорендерятсятолькодлянескольких самых важных источников света, в зависимости от характераизображаемойсцены.Теневые карты очень эффективны - они работают намного быстрее, чемshadow volume. Но они имеют и недостаток - сильный алиасинг: инымисловами, если не использовать гигантский буфер глубины, то тениполучаютсясильнопикселизированные.Этотартефактобычноустраняютфильтрацией(размытием)выборкиизбуфераглубиныядром3х3или5x5-в результате чего получаются мягкие тени без пикселизации. ДанноерасширениеметодатеневыхкартполучилоназваниеPCF(PercentageCloserFiltering).Классическиетеневыекартыимеютограниченнуюплощадьпокрытия.То

Page 160: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

есть, невозможно сделать так, чтобы все видимые объекты сценыотбрасывали качественную тень - при увеличении размера проекцииуменьшается детализация и, соответственно, повышается алиасинг. Приуменьшении, соответственно, удаленные объекты выпадают из "полязрения"источникасветаинеотбрасываюттениСамаяпопулярнаятехника,решающая эту проблему - каскадные теневые карты (Cascaded ShadowMaps,CSM).Она заключается в рендеринге нескольких теневых буфероввместоодного,сразнымиразмерамипроекции-ониназываютсятеневымикаскадами. Обычно используется 3-4 каскада. Затем во фрагментномшейдеренужныйбуфервыбираетсявзависимостиоткоординаттекущегопикселя - обычно выборки интерполируют между соседними каскадами,чтобыполучитьплавныепереходы.Врезультатетеневаякартаохватываетпрактическивсювидимуюсцену:получаютсякачественныетенивблизиоткамеры и пикселизированные - вдалеке. Пикселизация далеких тенейпрактически не заметна зрителю - он видит лишь, что далекие объектытожеотбрасываюттени,иэтогодостаточно.Основная сложность метода CSM заключается в эффективномрасположении каскадов относительно пирамиды видимости. Самоепростоерешение-выровнятьихпоцентрувточкеположениякамеры,новэтом случае эффективная площадь каскадов будет составлять лишь околотретиихреальнойплощади,посколькувкаждыймоментвременизрительвидит не весь каскад, а только его часть, соответствующуюгоризонтальному углу зрения камеры. В современных реализациях CSMпозициииразмерыпроекцийкаскадовобычноподбираюттак,чтобыониполностью попадали внутрь пирамиды видимости и покрывали ее какможноболееплотно.Существуеттакжепопулярноерасширениеметодатеневыхкарт-VarianceShadowMap(VSM).Внембуферглубиныхранитдвазначениядлякаждогопикселя - собственно глубину и ее квадрат, при этом используется буферзначенийсплавающейзапятой.Дляполучениявыборкииз такогобуфераиспользуетсянеравенствоЧебышева.Преимуществометодазаключаетсявтом, что VSM-буфер можно предварительно отфильтровать один раз, изатем использовать для дальнейшего рендеринга без PCF, значительноповышая тем самым производительность. Однако VSM привносит своиартефакты, самый серьезный из которых - так называемый light-bleeding,когдавзонезатененияпоявляютсясветлыепятна.Естьнесколькоспособовисправленияданнойпроблемы,ноонилиботребуютбольшепамяти,либоделаюттенинетакимимягкими,какхотелосьбы.

Page 161: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

См.такжеShadowVolume,Z-Buffer.

Page 162: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

ShadowPlaneShadowPlane|Теневаяплоскость

Метод построения теней, проецирующий геометрию на плоскость припомощи специальной матрицы преобразования. Проекция затемотрисовывается сплошным цветом, по необходимости отсекаясь пограницамплоскостиприпомощитрафаретногобуфера.Это самый простой и быстрый способ рендеринга теней, но не самыйуниверсальный-онприменимтольковотдельныхслучаях,когдаобъектыимеютограниченнуюобластьперемещенияинеотбрасываюттенидругнадруга.

Page 163: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

ShadowVolumeShadowVolume|Теневойобъем

Один из методов построения теней, заключающийся в создании объекта,определяющего объем, внутри которого точки находятся в тени. Врезультате получаются точные, максимально детализированные тени налюбом расстоянии от камеры. Данный метод построения теней требуетбольшой скорости отрисовки и очень "тяжел" для высокополигональныхмоделей.Ктомуже,несуществуетэффективногоспособарендеритьтакимобразом В настоящее время уже практически не используется, будучивытесненнымметодомтеневыхкарт(ShadowMap).

См.такжеShadowMap.

Page 164: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

SkeletalAnimationSkeletalAnimation|Скелетнаяанимация

Впервые эта технология использовалась в игреHalf-Life и в дальнейшемполучилабольшоераспространениевкомпьютерныхиграх.Вместо того чтобы хранить ключевые кадры (как в случае вертекснойанимации) для каждой позы персонажа, использование скелетнойанимации подразумевает наличие одной модели в нейтральной позе ибольшогонабораматриц,которыетрансформируютразличныечастиэтоймодели.Этиматрицыусловноназываюткостями.В сравнении с более простой, вертексной анимацией, скелетная имеетследующиепреимущества:-Уменьшениеколичествахранимыхданныхдляанимации,таккакненадохранитьвсевариантыгеометриидлякаждогокадраанимации,достаточнохранитьлишьположениякостейскелета.Этостановитсяболееактуальнымвсвязисувеличениемколичестваполигоноввмоделях.- Возможность использования одного набора данных анимации дляразличныхмоделей.- Такжеможно управлять костями напрямую, что позволяет реализоватьинверснуюкинематикуитехнологиюragdoll.- Позволяет более гибко смешивать различные анимации иинтерполировать кадры, что в результате дает более плавную иреалистичнуюанимацию.- На анимирование требуется меньше вычислительных ресурсовпроцессораиоперативнойпамяти.-Наскелетеможноконструироватьсоставныемеши.Например,наскелетможно"повесить"одновременноителоперсонажа,иегоодежду,оружиеиразличные предметы, а потом все это менять в динамике. К недостаткамможно отнести то, что с помощью скелетной анимации нельзя сделатькачественнуюанимациюгибкихматериалов,такихкактканииливолосы,атакженевозможность сложногоморфинга геометрии объектов (например,превращениясферывкуб),нодлятакихцелейможнокакразиспользоватьвертекснуюанимацию.

Page 165: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

SnappingSnapping

Автоматическоеточноевыравниваниеобъектапокакой-либоконтрольнойструктуре:попрямойиликривойлинии,посеткеит.д.

Page 166: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

SpriteSprite|Спрайт

Двумерноеизображениечего-либовтрехмернойсценеилинаэкране.

Page 167: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

TeapotTheUtahTeapot|ЧайникЮта

Чайник Юта, или чайник Ньюэлла — компьютерная модель, ставшаяодним из эталонных объектов в сообществе трёхмерной компьютернойграфики. Это простая, округлая, сплошная и частично вогнутаяматематическаямодельобычногозаварногочайника.

Модель чайника была создана в 1975 году исследователем в областикомпьютерной графики Мартином Ньюэллом, участником программыизысканий в компьютерной графике в Университете Юты. Ньюэллнуждался для своей работы в умеренно простой математической моделизнакомогообъекта.ЕгоженаСандраНьюэллпредложиласмоделироватьихчайный сервиз, так как в этот момент они пили чай. Мартин взялмиллиметровку и карандаш и зарисовал весь сервиз на глаз, затем,вернувшисьвлабораторию,онвручнуюввёлконтрольныеточкиБезьенатрубкепамятиTektronix.Хотявместесознаменитымчайникомбылиоцифрованычашка,блюдцеичайная ложка, один лишь чайник добился повсеместного использования.Считается,чтотакжебылсмоделированмолочник,ноданныеонёмбылиутеряны.

Модель чайника состоит из 32 порций бикубической поверхности Безье,координаты опорных точек которых и являются исходным описаниеммодели.Точкиобразуютмассивиз306элементов,пронумерованныхс1по306.Основнойобъёмчайника(корпус)образованиз12порций,ручка—изследующих четырёх, следующие четыре порции формируют носик,крышкачайникапроработанаточнеевсего—нанеёушловосемьпорцийбикубической поверхности Безье. А оставшиеся четыре образуютдонышко.Эти данные широко распространены среди специалистов по трёхмернойкомпьютернойграфикеиширокоиспользуютсядлядемонстрацииработыиприпроверкеалгоритмов.

Page 168: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

TesselationTesselation|Тесселяция

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

Page 169: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

TexelTexel|Тексель

Аббревиатураотдвухслов:TextureиElement-"текстура"и"элемент",т.е.элементтекстуры.

Page 170: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

TextureTexture|Текстура

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

Page 171: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

TextureFilteringTextureFiltering|Фильтрациятекстур

Один из важнейших методов повышения качества изображения. Бываетнесколькихвидов:1. Точечная выборка - скорее, не вид фильтрации, а его отсутствие.Текстуравыглядитразбитойнаквадратики–несамоеприятноезрелище.2. Билинейная фильтрация – используется для подавления эффектаквадратиков.Цветачетырёхсоседнихпикселейусредняются,затемдваизтекущего блока и два из соседнего и так далее. Квадраты исчезают, нокартинкаразмывается.3.Трилинейнаяфильтрация–призванаповыситьчёткостьизображения,исгладитьпереходымеждуmip-уровнями,работаянаихграницах.4. Анизотропная фильтрация – устраняет эффект размытости, вызванныйбилинейнойфильтрацией,возвращаеттекстуречёткость.Требуетбольшихвычислительныхзатрат,ноэффекточеньзаметен.Наилучший эффект достигается путём одновременной работы всех трёхвидовфильтрации.

Page 172: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

TechniqueTechnique|Техника

Вкомпьютернойграфикеподтермином"техника"обычноимеетсяввиду"техника рендеринга" - устоявшийся программный способ имитациисредствами компьютерной графики тех или иных физических илиоптических феноменов реального мира. Техника обычно являетсярасширениемодногоиздвухосновныхметодоврендеринга-растеризацииили трассировки лучей. Иногда сами эти методы рендеринга такженазываюттехниками.Популярныетехникирендерингавключаютпостроениетеней,отраженийипреломлений, прямое и непрямое освещение, затенение окружения(ambient occlusion), имитацию рельефа на поверхностях (bump mapping),эффектарасфокусированности(depthoffield)исмазанности(motionblur)идр.Иногдаврендер-движкахпод"техникой"подразумеваетсясерияопераций,осуществляемых над графическими данными для получения итоговогоизображения - построение буферов, препроцессинг, сведение ипостпроцессинг. Для соблюдения баланса между качеством ипроизводительностью,атакжедлядостижениясовместимостисширокимассортиментом системных конфигураций, движок может поддерживатьразные наборы таких операций. Например, двумя распространеннымитехниками в этом смысле являются прямой рендер (direct render) иотложенный рендер (deferred render), которые имеют принципиальныеразличиявреализациирасчетаосвещения.

Page 173: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

TilingTiling|Тайлинг,замощение

Многократноеповторениетекстурынаповерхностиобъекта.

Page 174: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

TransformationTransformation|Преобразование

Линейнаяоперациянадгеометрией(обычнонаборомвершин).Под преобразованием в графических движках обычно подразумеваетсяаффинноепреобразование-тоесть,преобразование,сохраняющеепрямыелинии прямыми, а плоские поверхности - плоскими. К такимпреобразованиям относят сдвиг, поворот, масштабирование, смещение изеркальное отображение, а также их комбинацию в любом порядке.Но кпреобразованиям также относится, например, перспективная проекция,котораянеявляетсяаффиннымпреобразованием.Для представления аффинных преобразований используют, как правило,матрицы 4x4, где левая верхняя подматрица задает вращение и масштаб,правый столбец - смещение, а нижняя строка всегда равна [0, 0, 0, 1].Перемножение двух матриц преобразования дает матрицу, в которой этидва преобразования скомбинированы (в том порядке, в какомпроизводилось умножение). В игровых графических движках обычноиспользуют следующий порядок перемножений: перенос * вращение *масштабирование. Получившаяся в результате матрица (ее еще называютмодельной)передаетсяграфическомуконвейеру.Такжеаффиннуюматрицуможноинвертировать,тоесть,вычислятьееобратнуюматрицу-онабудетпредставлятьобратноепреобразование,котороеоченьчастоиспользуетсявкомпьютернойграфике.Благодарянекоторымсвойствамаффинныхматриц,ихможноинвертироватьоченьэффективно.Говорят, что модельная матрица переводит вершины из модельногопространства (где координаты вершин заданы относительно центрамодели) в мировое пространство (где координаты заданы относительноабсолютного центра сцены). Этот процесс является первой стадиейграфического конвейера и выполняется вершинным процессоромвидеокарты. При использовании шейдеров программист имеетвозможность по-своему запрограммировать эту стадию в вершинномшейдере. Помимо матриц, аффинные преобразования также возможны сиспользованием кватернионов и дуальных кватернионов. Кватернионыиспользуются для хранения вращения (в том числе накапливаемого),дуальные кватернионы - для одновременного хранения вращения и

Page 175: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

переноса.Основныепреимуществакватернионов-вычислительнаяэффективностьиэкономия памяти (4 числа вместо 16 у матриц) и возможностьинтерполяции.Кватернионыширокоприменяются в скелетной анимации,кинематике и физике, но в графический конвейер они обычно непередаются-всепреобразованиядляэтогопереводятсявматрицы.

См.такжеMatrix,Vector.

Page 176: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

TreeTree|Дерево

Связный графбезциклов.Дерево с n вершинамивсегдаимеетn-1 ребер.Между любыми двумя вершинами дерева существует единственныймаршрут.Поэтомудеревоиногдаопределяетсякакминимальныйсвязныйграф.Вершинадерева,котораясоединенаребромтолькосоднойвершиной,называетсялистом.Ориентированное дерево - это граф с выделенной вершиной (корнем), вкотороммеждукорнемилюбойвершинойсуществуетединственныйпуть.Деревья используются в различных математических моделях: в теорииформальных систем, при описании и проектировании иерархическихструктур (в частности, в информационных системах, включая базыданных),взадачахпланированияит.д.

Page 177: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

TriangleStrip/FanTriangleStrip/Fan

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

Page 178: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

TriangulationTriangulation|Триангуляция

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

Page 179: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

TweeningTweening|Твининг

Процессинтерполяцииключевыхкадровввертекснойанимации.Твинингпредполагает, что для данной модели порядок вершин в разных кадраходинитотже.

Page 180: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

UVCoordinatesUVCoordinates|Текстурныекоординаты

В тех случаях, когда на модель накладывается изображение (текстура), кописанию вершины добавляются текстурные координаты. Обозначаютсяони,какправило,паройUиV.КоординатаUзадаетвизображениипиксельпогоризонтали,координатаV-повертикали.Значение(0,0)соответствуетлевомуверхнемууглутекстуры,значение(1,1)-правомунижнему.

Page 181: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

VectorVector|Вектор

Элемент линейного пространства. Описывается одним или несколькимичислами (вектор из одного числа является скаляром). В компьютернойграфике обычно используются векторы из 2, 3 и 4 чисел. Вектор имеетдлину, которая вычисляется по теореме Пифагора (квадратный корень изсуммы квадратов всех элементов вектора). К векторам применимы всеосновные арифметические операции (сложение, вычитание, умножение,деление). Раздел математики, изучающий операции над векторами,называется векторной алгеброй (она, в свою очередь, является частнымслучаемболееобщегонаправления-линейнойалгебры).Припомощивектораможноописатькакточкувевклидовомпространстве,так и направление, соответствующее "взгляду" в эту точку из началакоординат.Направлениеобычнозадаетсянормированным,илиединичнымвектором (т.е., вектором с длиной, равной 1). Любой ненулевой векторможнонормировать,разделивпокомпонентнонаегодлину.Направлениенеэквивалентно повороту - чтобы получить полноценный поворот,используются тривзаимноперпендикулярныхвектора,формирующие такназываемый базис. Базис является составной частью аффинной матрицыпреобразования.Аффинныепреобразованияосуществляютсянадпространствомаффинныхвекторов. Аффинный вектор - это вектор из 4 чисел, обозначаемый какXYZW, где XYZ - обычный евклидовый вектор, а дополнительнаякоординатаW позволяет выразить бесконечно удаленную точку (когдаWравна0).ОбычныеточкиимеютWравную1.

См.такжеMatrix,Transformation.

Page 182: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

VertexVertex|Вершина

Традиционно в компьютерной графике под вершиной понимается точкадвухмерного либо трехмерного пространства. Совокупность трех вершинобразует треугольник - наиболее распространенный примитив,используемый для построения плоскостных либо пространственныхобъектов. Каждая вершина описывается определенным наборомпараметров, как то: координаты в пространстве, нормаль, тангент,битангент, цвет, текстурные координаты и и т.д. Из этих атрибутовобязательными являются только координаты в пространстве, остальныеопциональны.Приотрисовкетреугольника,заданноговершинами,каждаяиз них проецируется на экранную плоскость. Далее происходитинтерполяцияразличныхпараметров(преобразованногоположения,цвета,текстурныхкоординатит.д.), результатыкотороймысобственноивидимнаэкране.

Page 183: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

VertexAnimationVertex Animation (Per-vertex Animation, Morph Target Animation) |Вершинная(вертексная)анимация

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

Page 184: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

VoxelVolumePixel|Воксель

Объемная точка. Фактически является кубом в пространстве; выводимаявоксельнаяповерхностьстроитсяизтакихкубов.

Page 185: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

VSyncVerticalSynchronization|Вертикальнаясинхронизация

Опциональный параметр поведения драйвера видеокарты. Включённаявертикальная синхронизация означает, что после отрисовки очередногокадра, во время переключения буферов, драйвер будет ждать началаочередного обратного хода луча монитора, и только потом переключитэкранныебуферы.Картинка на мониторах с электронно-лучевой трубкой отрисовываетсялучомизэлектронов,которыйпоследовательноотрисовываетстрокислеванаправо, потом возвращается в начало очередной строки (задержкагоризонтальнойсинхронизации),затемотрисовываетследующуюстрокуит.п. После того, как луч попал в правый нижний угол экрана, онвозвращается в левый верхний угол (время, за которое он возвращается,называетсязадержкойвертикальнойсинхронизации).Зачемнужнавертикальнаясинхронизация?Деловтом,чтовремязадержкивертикальнойсинхронизацииобратногоходалучаявляетсяидеальнымдляпереключения экранных буферов. Если переключить буферы в любоедругоевремя,точастьизображениянаэкранебудетпринадлежатьстаромукадру, а часть - новому.Из-за этогопоявятся артефактымежду кадрами -может стать заметным неприятное дрожание, и даже при высоких FPSанимациявизуальнонебудетвыглядетьплавной.Однако, так как при вертикальной синхронизации делается задержка, тоFPS неизбежно будет меньше, чем на аналогичной сцене, но свыключенным VSync. Это иногда неприемлемо, например, вразнообразныхграфическихтестах.

Page 186: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

WeightingWeighting|Развесовка

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

Page 187: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

WireframeWireframe

Каркасноеотображениеповерхноститрехмерногообъекта.

Page 188: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

Z-BufferZ-Buffer|Z-буфер

Часть графической памяти, в которой хранятся расстояния от точки впространстве до экранной плоскости (значения Z). Z-buffer определяет,какая из многих перекрывающихся точек наиболее близка к плоскостинаблюдения. Так же, как большее число битов на пиксель для цвета вбуфере кадра соответствует большему количеству цветов, доступных всистеме изображения, так и количество бит на пиксель в Z-буфересоответствуетбольшемучислуэлементов.Обычно,Z-буферимеетнеменее16битнапиксельдляпредставленияглубиныцвета.НекоторыереализацииZ-буфераиспользуютдляхранениянецелочисленноезначениеглубины,азначениесплавающейзапятойот0до1.

Page 189: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

Z-BufferingZ-Buffering|Z-буферизация

Процесс удаления скрытых поверхностей, использующий значенияглубины,хранящиесявZ-буфере.Передотображениемновогокадра,буферочищается, и в величины Z устанавливаются максимально большиезначения. При рендеринге объекта устанавливаются значения Z длякаждого пикселя: чем ближе расположен пиксель, тем меньше значениевеличиныZ.Длякаждогоновогопиксела значение глубинысравниваетсясозначением,хранящимсявбуфере,ипиксельзаписываетсявкадр,толькоесливеличинаглубиныменьшесохраненногозначения.

Page 190: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

Z-SortingZ-Sorting|Z-сортировка

Процесс удаления невидимых поверхностей с помощью сортировкимногоугольников в порядке "снизу вверх" перед рендерингом. Такимобразом, при рендеринге верхние поверхности обрабатываютсяпоследними. Результаты рендеринга получаются верными, только еслиобъекты не близки и не пересекаются. Преимуществом этого методаявляется отсутствие необходимости хранения значений глубины.Недостатком является высокая загрузка процессора и ограничение напересекающиесяобъекты.

Page 191: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

САПРСистемаавтоматизированногопроектирования

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

Page 192: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

Лицензионное соглашение:Xtreme3DXtreme3D,Copyright©2016-2017,ТимурГафаров.GLScene,Copyright©2000-2016,GLSTeam.Всеправазащищены.

Библиотека Xtreme3D и необходимый для ее компиляциимодифицированный код GLScene (далее "Проект Xtreme3D")распространяются по лицензии Mozilla Public License (MPL) 1.1. Выможете получить копию полного текста этой лицензии по адресуhttps://www.mozilla.org/MPL.Эта лицензия предоставляет вам право свободно и безводмездноиспользовать Проект Xtreme3D как в некоммерческих, так и вкоммерческихцелях,атакжекопироватьимодифицироватьегоисходныйкодприсоблюденииследующихусловий:- При использовании исходного кода Проекта Xtreme3D в закрытомпроприетарном продукте, в документации к продукту следует поместитьуведомление об использовании Xtreme3D со ссылкой на сайт проекта:http://xtreme3d.narod.ru;- В случае модификации исходного кода Проекта Xtreme3D,модифицированныеисходныефайлыдолжныбытьдоступныпоусловиямлицензииMozillaPublicLicense1.1.Использование оригинальной (немодифицированной) Xtreme3D в формескомпилированной библиотеки DLL (xtreme3d.dll) для динамическогосвязывания с другими программами не влечет за собой необходимостьвыполнятьвышеназванныеусловия.

ПРОЕКТ XTREME3D РАСПРОСТРАНЯЕТСЯ ПО ПРИНЦИПУ "КАКЕСТЬ", БЕЗ КАКИХ БЫ ТО НИ БЫЛО ЯВНЫХ И/ИЛИПОДРАЗУМЕВАЕМЫХ ГАРАНТИЙ ТОВАРНОЙ ЦЕННОСТИ ИЛИПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ. ПРАВООБЛАДАТЕЛИНЕ НЕСУТ ОТВЕТСТВЕННОСТИ ЗА ЛЮБЫЕ ПОСЛЕДСТВИЯ,ВЫЗВАННЫЕ ИСПОЛЬЗОВАНИЕМ ДАННОГО ПРОГРАММНОГООБЕСПЕЧЕНИЯ.

Page 193: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

Проект Xtreme3D включает модифицированный код проекта GLScene(http://glscene.sourceforge.net), который также доступен по лицензииMPL.Проект также включает код сторонних библиотек, на которые нераспространяетсялицензияMPL:-SimpleDictionary(https://github.com/martinusso/simple-dictionary)-HashLibraryотCiaranMcCreesh-ДекодерфайловформатаLOD(http://lodka3d.narod.ru)- Модифицированная привязка FreeType от проекта Anti-Grain Geometry(http://www.antigrain.com)-CrystalLUA(https://github.com/d-mozulyov/CrystalLUA)Информацию о правообладателях и условия распространения кода этихпроектоввыможетенайтивсоответствующихисходныхфайлах.

Xtreme3D,Copyright©2016-2017,TimurGafarov.GLScene,Copyright©2000-2016,GLSTeam.Allrightsreserved

"Xtreme3DProject" refers toXtreme3D library andmodifiedGLScene that itdependson.Xtreme3DProject isdistributedunderMozillaPublicLicence (MPL)1.1.Youcan obtain a full text of this license at https://www.mozilla.org/MPL. Thislicensegrantsyouaright tofreelyuseXtreme3DProjectbothinfreewareandcommercialproducts,andtocopyandmodifyitssourcecode,at thefollowingconditions:- In case of using Xtreme3D source code in a closed-source product, anacknowledgementmustbeprovidedthattheproductusesXtreme3Dwithalinktohttp://xtreme3d.narod.ru;-ModificationsmadetoXtreme3DProjectmustbereleasedunderMPLaswell.These requirements are only applied toXtreme3DProject source code. If youare using the original (unmodified) Xtreme3D in the form of a compileddynamic library (xtreme3d.dll) for linking with an application, you are notrequiredtofulfillconditionsabove.

THEXTREME3DPROJECTISPROVIDED`ASIS'WITHOUTWARRANTYOFANYKIND,EITHEREXPRESSORIMPLIED,INCLUDING,BUTNOT

Page 194: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

LIMITED TO, WARRANTIES OF MERCHANTABILITY AND FITNESSFOR A PARTICULAR PURPOSE. IN NO EVENT WILL ANY OF THEAUTHORSORCOPYRIGHTHOLDERSBELIABLEFORANYDAMAGESCAUSEDBYTHEUSEORTHEINABILITYTOUSEOFTHEXTREME3DPROJECT.

Xtreme3D Project includes modified code of GLScene(http://glscene.sourceforge.net) which is also available underMPL. Xtreme3Dalsoincludessomethird-partysourcecodefilesthatusedifferentlicenses:-SimpleDictionary(https://github.com/martinusso/simple-dictionary)-CiaranMcCreesh'sHashLibrary-LODfiledecoder(http://lodka3d.narod.ru)- Modified FreeType binding from Anti-Grain Geometry project(http://www.antigrain.com).-CrystalLUA(https://github.com/d-mozulyov/CrystalLUA)Suchfileshaveanexplicitcopyrightandlicensingnoticesattachedtothem.

Page 195: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

Лицензионноесоглашение:ODEOpenDynamicsEngine(ODE)Copyright©2001-2010,РасселЛ.СмитВсеправазащищены.

РаспространениеииспользованиепрограммногообеспеченияODE (далее"программноеобеспечение")ввидеисходногокодаи/иливдвоичномвидеразрешеноприсоблюденииследующихусловий:- Распространение программного обеспечения в виде исходного кодадолжносодержатьтекстданнойлицензии.- Распространение программного обеспечения в двоичном виде должносодержать текст данной лицензии в документации и/или другихматериалах,поставляемыхприраспространении.- Имена правообладателя и его волонтеров (далее "правообладатель") немогут быть использованы для рекламы продуктов и/или услуг безсоответствующегописьменногоразрешения.

НАСТОЯЩЕЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ РАСПРОСТРАНЯЕТСЯПРАВООБЛАДАТЕЛЕМПОПРИНЦИПУ"КАКЕСТЬ",БЕЗКАКИХБЫТО НИ БЫЛО ЯВНЫХ И/ИЛИ ПОДРАЗУМЕВАЕМЫХ ГАРАНТИЙТОВАРНОЙЦЕННОСТИИЛИПРИГОДНОСТИДЛЯОПРЕДЕЛЕННОЙЦЕЛИ. ПРАВООБЛАДАТЕЛЬ НЕ НЕСЕТ ОТВЕТСТВЕННОСТИ ЗАЛЮБЫЕ ПОСЛЕДСТВИЯ, ПРЯМОЙ ИЛИ КОСВЕННЫЙ УЩЕРБ,ВЫЗВАННЫЕ ДАННЫМ ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ,ВКЛЮЧАЯ, БЕЗ ОГРАНИЧЕНИЙ, УБЫТКИ ОТ УТРАТЫ ПРИБЫЛИ,ПРЕРЫВАНИЕ БИЗНЕСА, ПОТЕРЮ ДЕЛОВОЙ ИНФОРМАЦИИ ИЛИИНОЙФИНАНСОВЫЙУРОН).

OpenDynamicsEngine(ODE)Copyright©2001-2010,RussellL.Smith.Allrightsreserved.

Redistributionanduseinsourceandbinaryforms,withorwithoutmodification,

Page 196: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

arepermittedprovidedthatthefollowingconditionsaremet:-Redistributionsofsourcecodemustretaintheabovecopyrightnotice,thislistofconditionsandthefollowingdisclaimer.-Redistributionsinbinaryformmustreproducetheabovecopyrightnotice,thislistofconditionsandthefollowingdisclaimerinthedocumentationand/orothermaterialsprovidedwiththedistribution.-NeitherthenamesofODE'scopyrightownernorthenamesofitscontributorsmaybeusedtoendorseorpromoteproductsderivedfromthissoftwarewithoutspecificpriorwrittenpermission.

THIS SOFTWARE IS PROVIDEDBYTHECOPYRIGHTHOLDERSANDCONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIEDWARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIEDWARRANTIES OF MERCHANTABILITY AND FITNESS FOR APARTICULARPURPOSEAREDISCLAIMED.INNOEVENTSHALLTHECOPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANYDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, ORCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,PROCUREMENTOFSUBSTITUTEGOODSORSERVICES;LOSSOFUSE,DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVERCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER INCONTRACT,STRICTLIABILITY,ORTORT (INCLUDINGNEGLIGENCEOR OTHERWISE) ARISING IN ANYWAY OUT OF THE USE OF THISSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCHDAMAGE.

Page 197: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

Лицензионное соглашение:FreeTypeTheFreeTypeProjectCopyright©1996-2002,2006,ДэвидТернер,РобертВильгельм,ВернерЛемберг.Всеправазащищены.

Вступление

Проект FreeType распространяется в нескольких архивных пакетах;некоторые из них могут содержать, вдобавок к шрифтовому движкуFreeType, различные инструменты и код, на которых он основан, либоотносящиесякПроектуFreeType.Настоящаялицензияотноситсяко всемфайламвэтихпакетахираспространяется,такимобразом,нашрифтовойдвижокFreeType,тестовыепрограммы,документациюиmake-файлы.НастоящаялицензиябыласоставленапообразцулицензийBSD,ArtisticиIJG(IndependentJPEGGroup),каждаяизкоторыходобряетиспользованиелицензируемого свободногопрограммного обеспечения в коммерческихибесплатных программных продуктах. Как следствие, ее основныеположениязаключаютсявследующем:

- Мы не гарантируем, что данное программное обеспечение работает(распространение по принципу "как есть"). Тем не менее, мызаинтересованывлюбыхотчетахобошибках.- Вы можете использовать данное программное обеспечение в любыхцелях, частично или полностью, без денежных отчислений в пользуправообладателей.- Вы не можете присваивать себе авторство данного программногообеспечения. Если вы используете его, частично или полностью, смодификациямиилибез,выдолжныпредоставитьуведомлениегде-нибудьв документации к вашей программе о том, что вы использовали кодПроектаFreeType.

Мыразрешаемиодобряемвключениеданногопрограммногообеспечения,

Page 198: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

с модификациями или без, в состав коммерческих продуктов. Мы непредоставляемникакихгарантийнакод,относящийсякПроектуFreeType,и отказываемся от любой ответственности за последствия использованияэтогокода.Наконец, многие люди спрашивают нас о предпочитаемой формеуведомления об авторстве, соответствующей требованиям настоящейлицензии.Мырекомендуемиспользоватьследующийтекст:

Данное программное обеспечение содержит код FreeType. Copyright ©(год)ПроектFreeType(www.freetype.org).Всеправазащищены.

Прим.:(год)следуетзаменитьнагодвыпускаверсииFreeType,которуювыиспользуете.

0.Определения

В настоящей лицензии термины "пакет", "Проект FreeType" и "архивFreeType" относятся к набору файлов, распространяемомуправообладателями (Дэвид Тернер, Роберт Вильгельм, Вернер Лемберг),будьтоальфа-,бета-илифинальныйрелиз.Под термином "вы" подразумевается получатель лицензии (лицензиат),лицо или организация, использующая FreeType, где "использование"обозначает компиляцию исходного кода FreeType, а также связываниепрограмм с библиотекой FreeType посредством компоновки. Программа,содержащаяисходныйкодFreeTypeилисвязаннаясFreeTypeпосредствомкомпоновки,обозначаетсякак"программа,использующаяFreeType".Настоящая лицензия распространяется на все файлы Проекта FreeType,включаявесьисходныйкод,двоичныефайлыидокументацию,еслиявнонеуказаноиное.Есливынеуверенывтом,распространяетсялинастоящаялицензиянатотилиинойфайлПроектаFreeType,свяжитесьснами.Правообладателями Проекта Freetype являются Дэвид Тернер, РобертВильгельмиВернерЛемберг.Всеправа,заисключениемуказанныхниже,защищены.

1.Отсутствиегарантии

ПРОЕКТFREETYPEРАСПРОСТРАНЯЕТСЯПРАВООБЛАДАТЕЛЕМПОПРИНЦИПУ "КАК ЕСТЬ", БЕЗ КАКИХ БЫ ТО НИ БЫЛО ЯВНЫХ И/ИЛИПОДРАЗУМЕВАЕМЫХГАРАНТИЙТОВАРНОЙЦЕННОСТИИЛИ

Page 199: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ. ПРАВООБЛАДАТЕЛЬНЕ НЕСЕТ ОТВЕТСТВЕННОСТИ ЗА ЛЮБЫЕ ПОСЛЕДСТВИЯ,ВЫЗВАННЫЕ ИСПОЛЬЗОВАНИЕМ ДАННОГО ПРОГРАММНОГООБЕСПЕЧЕНИЯ.

2.Распространение

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

-РаспространениеоригинальногоилимодифицированногоисходногокодаFreeTypeдолжносопровождатьсянеизмененнымтекстомданнойлицензии.Любые дополнения, удаления и изменения в исходном коде FreeTypeдолжны быть описаны в прилагающейся документации. Уведомление обавторских правах должно присутствовать во всех копиях исходного кодаFreeType.- Распространение FreeType в двоичном виде должно содержатьуведомление о том, что продукт включает FreeType. Мы одобряемупоминание URL-адреса веб-сайта Проекта FreeType, но это не являетсяобязательнымтребованием.

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

3.Рекламирование

ИменаавторовПроектаFreetype,равнокакиегоконтрибьюторов,немогутбыть использованы в целях коммерческой рекламы без их письменногоразрешения.Мы рекомендуем (но не требуем) использовать одну из следующихфраз,чтобыссылатьсянаданноепрограммноеобеспечениевдокументацииилирекламных материалах: "Проект FreeType", "Движок FreeType",

Page 200: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

"БиблиотекаFreeType"или"ДистрибутивFreeType".

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

4.Контактнаяинформация

Существуютдваспискарассылок,связанныхсFreeType:- [email protected]. Посвящена общему использованию FreeType, атакже нововведениям в библиотеку и дистрибутив. Если вам нужнатехническая поддержка, и вы не нашли помощь в документации, задайтевопросвэтомспискерассылок.- [email protected]. Посвящена разработке FreeType,обсуждению ошибок, портированию движка на другие платформы,вопросамдизайна,лицензионнымвопросамит.д.СайтПроектаFreeTypeнаходитсяпоадресуhttp://www.freetype.org.

TheFreeTypeProjectCopyright © 1996-2002, 2006, David Turner, Robert Wilhelm, WernerLemberg.Allrightsreserved.

Introduction

TheFreeTypeProject isdistributed in severalarchivepackages; someof themmay contain, in addition to the FreeType font engine, various tools andcontributionswhichrelyon,orrelateto,theFreeTypeProject.This license applies to all files found in suchpackages, andwhich do not fallunder their own explicit license. The license affects thus the FreeType fontengine,thetestprograms,documentationandmakefiles,attheveryleast.This license was inspired by the BSD, Artistic, and IJG (Independent JPEGGroup) licenses, which all encourage inclusion and use of free software in

Page 201: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

commercialandfreewareproductsalike.Asaconsequence, itsmainpointsarethat:

-Wedon'tpromisethat thissoftwareworks.However,wewillbeinterestedinanykindofbugreports.(`asis'distribution)-Youcanusethissoftwareforwhateveryouwant,inpartsorfullform,withouthavingtopayus.(`royalty-free'usage)-Youmaynotpretendthatyouwrotethissoftware.Ifyouuseit,oronlypartsofit,inaprogram,youmustacknowledgesomewhereinyourdocumentation thatyouhaveusedtheFreeTypecode.(`credits')

We specifically permit and encourage the inclusion of this software, with orwithout modifications, in commercial products. We disclaim all warrantiescoveringTheFreeTypeProjectandassumenoliabilityrelatedtoTheFreeTypeProject.Finally,manypeopleaskedusforapreferredformforacredit/disclaimertouseincompliancewiththislicense.Wethusencourageyoutousethefollowingtext:

Portions of this software are copyright © (year) The FreeType Project(www.freetype.org).Allrightsreserved.

Pleasereplace(year)withthevaluefromtheFreeTypeversionyouactuallyuse.

0.Definitions

Throughoutthislicense,theterms`package',`FreeTypeProject',and`FreeTypearchive' refer to the set of files originally distributed by the authors (DavidTurner,RobertWilhelm,andWernerLemberg)asthe`FreeTypeProject',betheynamedasalpha,betaorfinalrelease.`You'referstothelicensee,orpersonusingtheproject,where`using'isagenerictermincludingcompilingtheproject'ssourcecodeaswellaslinkingittoforma`program' or `executable'.This program is referred to as `a program using theFreeTypeengine'.This license applies to all files distributed in the original FreeType Project,includingallsourcecode,binariesanddocumentation,unlessotherwisestatedinthefileinitsoriginal,unmodifiedformasdistributedintheoriginalarchive.Ifyou are unsurewhether or not a particular file is covered by this license, youmustcontactustoverifythis.The FreeType Project is copyright (C) 1996-2000 by David Turner, Robert

Page 202: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

Wilhelm,andWernerLemberg.Allrightsreservedexceptasspecifiedbelow.

1.NoWarranty

THEFREETYPEPROJECTISPROVIDED`ASIS'WITHOUTWARRANTYOFANYKIND,EITHEREXPRESSORIMPLIED,INCLUDING,BUTNOTLIMITED TO, WARRANTIES OF MERCHANTABILITY AND FITNESSFOR A PARTICULAR PURPOSE. IN NO EVENT WILL ANY OF THEAUTHORSORCOPYRIGHTHOLDERSBELIABLEFORANYDAMAGESCAUSEDBYTHEUSEORTHEINABILITYTOUSE,OFTHEFREETYPEPROJECT.

2.Redistribution

Thislicensegrantsaworldwide,royalty-free,perpetualandirrevocablerightandlicensetouse,execute,perform,compile,display,copy,createderivativeworksof, distribute and sublicense the FreeType Project (in both source and objectcode forms) and derivative works thereof for any purpose; and to authorizeothers to exercise some or all of the rights granted herein, subject to thefollowingconditions:

- Redistribution of source code must retain this license file (`FTL.TXT')unaltered;anyadditions,deletionsorchangestotheoriginalfilesmustbeclearlyindicated in accompanying documentation. The copyright notices of theunaltered,originalfilesmustbepreservedinallcopiesofsourcefiles.- Redistribution in binary formmust provide a disclaimer that states that thesoftwareisbasedinpartof theworkof theFreeTypeTeam,inthedistributiondocumentation.WealsoencourageyoutoputanURLtotheFreeTypewebpageinyourdocumentation,thoughthisisn'tmandatory.

TheseconditionsapplytoanysoftwarederivedfromorbasedontheFreeTypeProject, not just the unmodified files. If you use our work, you mustacknowledgeus.However,nofeeneedbepaidtous.

3.Advertising

NeithertheFreeTypeauthorsandcontributorsnoryoushallusethenameoftheother for commercial, advertising, or promotional purposes without specificpriorwrittenpermission.

Page 203: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

We suggest, but do not require, that you use one or more of the followingphrasestorefertothissoftwareinyourdocumentationoradvertisingmaterials:`FreeType Project', `FreeType Engine', `FreeType library', or `FreeTypeDistribution'.Asyouhavenotsignedthislicense,youarenotrequiredtoacceptit.However,astheFreeTypeProjectiscopyrightedmaterial,onlythislicense,oranotheronecontractedwiththeauthors,grantsyoutherighttouse,distribute,andmodifyit.Therefore, by using, distributing, or modifying the FreeType Project, youindicatethatyouunderstandandacceptallthetermsofthislicense.

4.Contacts

TherearetwomailinglistsrelatedtoFreeType:-freetype@nongnu.org.DiscussesgeneraluseandapplicationsofFreeType,aswell as future andwanted additions to the library and distribution. If you arelookingforsupport,startinthislistifyouhaven'tfoundanythingtohelpyouinthedocumentation.- [email protected]. Discusses bugs, as well as engine internals,designissues,specificlicenses,porting,etc.Ourhomepagecanbefoundathttp://www.freetype.org.

Page 204: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

Ссылки

Page 205: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

Xtreme3D:http://xtreme3d.narod.ru - русскоязычный сайт Xtreme3Dhttp://offtop.ru/xtreme3d-сопутствующийфорумhttps://github.com/xtreme3d-организацияXtreme3DнаGitHub

Page 206: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

GLScene:http://glscene.sourceforge.net-официальныйсайтGLScene

Page 207: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

OpenGL:http://www.opengl.org-официальныйсайтOpenGLhttp://pmg.org.ru/nehe-русскийпереводуроковпоOpenGLотзнаменитогоNeonHelium(NeHe)

Page 208: Xtreme3D - это 3D-движок для популярного ...Xtreme3D - это 3D-движок для популярного конструктора игр Game Maker 8. Как

Иеще...Редакциявыражаетблагодарностьследующимресурсам:

http://www.gamedev.ruhttp://gcup.ru