
\documentclass[a4paper, final]{article}
\usepackage[14pt]{extsizes} % для того чтобы задать нестандартный 14-ый размер шрифта
\usepackage[T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[russian]{babel}
\usepackage{ragged2e}
\usepackage{algorithmic}
\usepackage{amsmath}
\usepackage{multicol}
\usepackage{nccmath}
\usepackage{tikz}
\usepackage{wrapfig}
\usepackage{caption}
\usepackage{tabularx}
\usepackage{array}
\usepackage[left=25mm, top=20mm, right=20mm, bottom=20mm, footskip=10mm]{geometry}
\usepackage{ragged2e} %для растягивания по ширине
\usepackage{setspace} %для межстрочного интервала
\usepackage{moreverb} %для работы с листингами
\usepackage{indentfirst} % для абзацного отступа
\usepackage{moreverb} %для печати в листинге исходного кода программ
\renewcommand\verbatimtabsize{4\relax}
\renewcommand\listingoffset{0.2em}
\renewcommand{\arraystretch}{1.4} % изменяю высоту строки в таблице
\usepackage[font=small, singlelinecheck=false, justification=raggedleft, format=plain, labelsep=period]{caption} %для настройки заголовка таблицы
%\usepackage[dvips]{graphicx} % Для вставки графических изображений
%\usepackage{color} %% это для отображения цвета в коде
%\usepackage{xcolor} % цвета
\usepackage{listingsutf8}
\usepackage{hyperref}% для гиперссылок
\usepackage{enumitem} %для перечислений
\usepackage{pdflscape} %для pdf
\usepackage{pdfpages} %для pdf

\definecolor{apricot}{HTML}{FFF0DA}
\definecolor{mygreen}{rgb}{0,0.6,0}
\definecolor{string}{HTML}{B40000} % цвет строк в коде
\definecolor{comment}{HTML}{008000} % цвет комментариев в коде
\definecolor{keyword}{HTML}{1A00FF} % цвет ключевых слов в коде
\definecolor{morecomment}{HTML}{8000FF} % цвет include и других элементов в коде
\definecolor{captiontext}{HTML}{FFFFFF} % цвет текста заголовка в коде
\definecolor{captionbk}{HTML}{999999} % цвет фона заголовка в коде
\definecolor{bk}{HTML}{FFFFFF} % цвет фона в коде
\definecolor{frame}{HTML}{999999} % цвет рамки в коде
\definecolor{brackets}{HTML}{B40000} % цвет скобок в коде

\setlist[enumerate,itemize]{leftmargin=1.2cm}

\hypersetup{colorlinks,
	pdftitle={Отчет},
	pdfauthor={Your name},
	allcolors=[RGB]{010 090 200}}
% подгружаемые языки — подробнее в документации listings
\lstloadlanguages{bash}
% включаем кириллицу и добавляем кое−какие опции
%\lstset{language =[LaTeX] TeX, % выбираем язык по умолчанию
	%extendedchars=true , % включаем не латиницу
	%escapechar = | , % |«выпадаем» в LATEX|
	%frame=tb , % рамка сверху и снизу
	%commentstyle=\itshape , % шрифт для комментариев
	%stringstyle =\bfseries} % шрифт для строк

\textheight=24cm % высота текста
\textwidth=16cm % ширина текста
\oddsidemargin=0pt % отступ от левого края
\topmargin=-1.5cm % отступ от верхнего края
\parindent=24pt % абзацный отступ
\parskip=0pt % интервал между абзацами
\tolerance=2000 % терпимость к "жидким" строкам
\flushbottom % выравнивание высоты страниц

\addto\captionsrussian{\def\refname{\hspace{1.15cm} Список литературы}}

\begin{document} % начало документа
	
	\lstset{
		language=Python, % Язык кода по умолчанию
		morekeywords={*,...}, % если хотите добавить ключевые слова, то добавляйте
		% Цвета
		keywordstyle=\color{keyword}\ttfamily\bfseries,
		%stringstyle=\color{string}\ttfamily,
		stringstyle=\ttfamily\color{red!50!brown},
		commentstyle=\color{comment}\ttfamily,
		morecomment=[l][\color{morecomment}]{\#},
		% Настройки отображения
		breaklines=true, % Перенос длинных строк
		basicstyle=\ttfamily\footnotesize, % Шрифт для отображения кода
		backgroundcolor=\color{bk}, % Цвет фона кода
		frame=lrb,xleftmargin=\fboxsep,xrightmargin=-\fboxsep, % Рамка, подогнанная к заголовку
		rulecolor=\color{frame}, % Цвет рамки
		tabsize=3, % Размер табуляции в пробелах
		% Настройка отображения номеров строк. Если не нужно, то удалите весь блок
		numbers=left, % Слева отображаются номера строк
		stepnumber=1, % Каждую строку нумеровать
		numbersep=5pt, % Отступ от кода
		numberstyle=\small\color{black}, % Стиль написания номеров строк
		% Для отображения русского языка
		extendedchars=true,
		literate={Ö}{ {\"O} }1
		{~}{ {\textasciitilde} }1
		{а}{ {\selectfont\char224} }1
		{б}{ {\selectfont\char225} }1
		{в}{ {\selectfont\char226} }1
		{г}{ {\selectfont\char227} }1
		{д}{ {\selectfont\char228} }1
		{е}{ {\selectfont\char229} }1
		{ё}{ {\"e} }1
		{ж}{ {\selectfont\char230} }1
		{з}{ {\selectfont\char231} }1
		{и}{ {\selectfont\char232} }1
		{й}{ {\selectfont\char233} }1
		{к}{ {\selectfont\char234} }1
		{л}{ {\selectfont\char235} }1
		{м}{ {\selectfont\char236} }1
		{н}{ {\selectfont\char237} }1
		{о}{ {\selectfont\char238} }1
		{п}{ {\selectfont\char239} }1
		{р}{ {\selectfont\char240} }1
		{с}{ {\selectfont\char241} }1
		{т}{ {\selectfont\char242} }1
		{у}{ {\selectfont\char243} }1
		{ф}{ {\selectfont\char244} }1
		{х}{ {\selectfont\char245} }1
		{ц}{ {\selectfont\char246} }1
		{ч}{ {\selectfont\char247} }1
		{ш}{ {\selectfont\char248} }1
		{щ}{ {\selectfont\char249} }1
		{ъ}{ {\selectfont\char250} }1
		{ы}{ {\selectfont\char251} }1
		{ь}{ {\selectfont\char252} }1
		{э}{ {\selectfont\char253} }1
		{ю}{ {\selectfont\char254} }1
		{я}{ {\selectfont\char255} }1
		{А}{ {\selectfont\char192} }1
		{Б}{ {\selectfont\char193} }1
		{В}{ {\selectfont\char194} }1
		{Г}{ {\selectfont\char195} }1
		{Д}{ {\selectfont\char196} }1
		{Е}{ {\selectfont\char197} }1
		{Ё}{ {\"E} }1
		{Ж}{ {\selectfont\char198} }1
		{З}{ {\selectfont\char199} }1
		{И}{ {\selectfont\char200} }1
		{Й}{ {\selectfont\char201} }1
		{К}{ {\selectfont\char202} }1
		{Л}{ {\selectfont\char203} }1
		{М}{ {\selectfont\char204} }1
		{Н}{ {\selectfont\char205} }1
		{О}{ {\selectfont\char206} }1
		{П}{ {\selectfont\char207} }1
		{Р}{ {\selectfont\char208} }1
		{С}{ {\selectfont\char209} }1
		{Т}{ {\selectfont\char210} }1
		{У}{ {\selectfont\char211} }1
		{Ф}{ {\selectfont\char212} }1
		{Х}{ {\selectfont\char213} }1
		{Ц}{ {\selectfont\char214} }1
		{Ч}{ {\selectfont\char215} }1
		{Ш}{ {\selectfont\char216} }1
		{Щ}{ {\selectfont\char217} }1
		{Ъ}{ {\selectfont\char218} }1
		{Ы}{ {\selectfont\char219} }1
		{Ь}{ {\selectfont\char220} }1
		{Э}{ {\selectfont\char221} }1
		{Ю}{ {\selectfont\char222} }1
		{Я}{ {\selectfont\char223} }1
		{\{}{ { {\color{brackets}\{} } }1 % Цвет скобок {
			{\} }{ { {\color{brackets}\} } } }1 % Цвет скобок }
	}
	
	
	% НАЧАЛО ТИТУЛЬНОГО ЛИСТА
	\thispagestyle{empty}
	\begin{center}
		\normalsize{МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ \\ ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО \\ ОБРАЗОВАНИЯ\\ «Санкт-Петербургский политехнический университет Петра Великого»}
		\normalsize{Институт компьютерных наук и кибербезопасности}\\[10pt]
		\normalsize{Высшая школа технологий искусственного интеллекта}\\[10pt]
		\normalsize{Направление: 02.03.01 Математика и компьютерные науки}\\
		\hfill \break
		\hfill \break
		\hfill \break
		\hfill \break
		\hfill \break
		\hfill \break
		\normalsize{Отчет о выполнении лабораторной работы №4 по дисциплине}\\[3pt]
		\normalsize{«Алгоритмические основы компьютерной графики»}\\[16pt]
	\end{center}
	\hfill \break
	\hfill \break
	\hfill \break
	\hfill \break
	\begin{tabular}{lcrl}	
		\!\!\!Студент, & \hspace{2cm} & & \\
		\!\!\!группы 5130201/20101 & \hspace{2.13cm} & \underline{\hspace{3cm}} &Тищенко А. А. \\\\
		\!\!\!Преподаватель & \hspace{2cm}  & \underline{\hspace{3cm}} & Курочкин М. А. \\\\
		&&\hspace{5cm}
		
	\end{tabular} 	
	\begin{flushright}
		<<\underline{\hspace{1cm}}>>\underline{\hspace{2.5cm}} 2025 г.
	\end{flushright}
	\hfill \break  
	\hfill \break
	\begin{center} \small{Санкт-Петербург, 2025} \end{center}
	\newpage %Содержание% выключаем отображение номера для этой страницы
	
	% КОНЕЦ ТИТУЛЬНОГО ЛИСТА
	
	\newpage
	
	\tableofcontents
	
	\newpage
	\section*{Введение} 
	\addcontentsline{toc}{section}{Введение} 
	
	Графические движки представляют собой специализированное программное обеспечение, предназначенное для обработки и отображения трёхмерных данных в интерактивных приложениях. Они выступают базовой платформой для широкого круга цифровых продуктов — от видеоигр и симуляторов до мультимедийных проектов и систем виртуальной (VR) и дополненной (AR) реальности. Обеспечивая разработчиков обширным набором средств для построения детализированных трёхмерных сцен, создания визуальных эффектов и разработки удобных интерфейсов, графические движки существенно упрощают и ускоряют процесс производства. 
	
	Хотя чаще всего графические движки ассоциируются с игровой индустрией, их возможности применяются во множестве других областей. Среди основных направлений можно выделить: 
	
	\begin{itemize} 
		\item \textbf{Профессиональные симуляторы}: используются при создании учебных комплексов для медицины, промышленности и транспорта, позволяя безопасно воспроизводить потенциально опасные или сложные ситуации. 
		\item \textbf{Архитектурная визуализация и проектирование}: позволяют разрабатывать виртуальные 3D-модели зданий и интерьеров, демонстрировать проекты до их реализации и проводить интерактивные экскурсии. 
		\item \textbf{Образовательные решения}: применяются для создания виртуальных лабораторий, учебных симуляций и иммерсивных образовательных сред, а также для наглядного воспроизведения исторических или научных процессов. 
		\item \textbf{Кинематограф и цифровое искусство}: активно используются при создании анимационных картин, визуальных эффектов и интерактивных медиаформатов. 
		\item \textbf{Научная визуализация}: дают возможность представлять в удобной форме сложные данные, моделировать физические, химические и биологические явления, а также анализировать большие массивы информации. 
	\end{itemize} 
	
	Современные графические движки — это комплексные программные системы, сочетающие в себе технологии рендеринга, симуляции физических процессов, алгоритмы искусственного интеллекта и другие достижения компьютерных наук. Постоянное совершенствование этих решений делает виртуальные среды всё более реалистичными, динамичными и применимыми в различных сферах деятельности. 
	
	\vspace{1cm}
	\newpage
	\section{Постановка задачи}
	
	{\bf Целью} данной работы является освоение принципов работы с графическим движком UNIGINE и закрепление практических навыков по созданию трёхмерных сцен.  
	
	{\bf Задачи:}  
	\begin{itemize}
		\item Изучить функциональные возможности 3D-движка UNIGINE и его инструментарий для работы с объектами и сценами;
		\item Выполнить импорт моделей, подготовленных в рамках лабораторной работы №1;
		\item Построить полноценную сцену с использованием загруженных объектов. 
	\end{itemize} 
\newpage
	\section{Описание сценариев физического моделирования}
	
	\subsection{Сценарий 1: Падение и взаимодействие твёрдых тел}
	
	В первом сценарии рассматриваются основные законы динамики при свободном падении и последующем взаимодействии нескольких объектов, различающихся массой, формой и физическими параметрами.  
	
	\begin{itemize}
		\item \textbf{Участвующие объекты}:
		\begin{itemize}
			\item Сломанная линейка
			\item Игральная фишка
			\item Пластиковый зажим для хлеба
		\end{itemize}
		Каждый из объектов представлен в количестве 2-ух штук.
		\item \textbf{Масса объектов}:
		\begin{itemize}
			\item Линейка: 0,02 кг
			\item Игральная фишка: 0,05 кг
			\item Зажим для хлеба: 0,01 кг
		\end{itemize}
		
		\item \textbf{Начальные условия}:
		\begin{itemize}
			\item Исходное положение над поверхностью:
			\begin{itemize}
				\item Линейка №1: 1,55 м
				\item Линейка №2: 1,52 м
				\item Фишка №1: 1,50 м
				\item Фишка №2: 1,49 м
				\item Зажим №1: 1,51 м
				\item Зажим №2: 1,41 м
			\end{itemize}
			\item Начальная ориентация:
			\begin{itemize}
				\item Линейка: наклонена под углом 45° к поверхности, расположена плоской стороной к наблюдателю, нижний конец направлен вниз. \item Вторая линейка повернута под углом 40° к поверхности, отдалена на 5 см левее от первой линейки.
				\item Фишка: повернута на 150° относительно вертикали, расположена ребром вправо.
				\item Вторая фишка расположена зеркально первой, на расстоянии 7 см слева от нее.
				\item Зажим: расположен под углом –45° относительно нормали к поверхности, с лёгким поворотом по часовой стрелке.
				\item Второй зажим находится на 10 см ниже первого. Расположение зеркальное.
			\end{itemize}
		\end{itemize}
		
		\item \textbf{Физические параметры среды и объектов}:
		\begin{itemize}
			\item Ускорение свободного падения: стандартное значение $g = 9,81\,\text{м/с}^2$.
			\item Коэффициенты трения:
			\begin{itemize}
				\item Линейка: 0,5
				\item Фишка: 0,7
				\item Зажим: 0,4
			\end{itemize}
			\item Коэффициенты упругости при столкновениях: 
			\begin{itemize}
				\item Линейка: 0,7
				\item Фишка: 0,5
				\item Зажим: 0,3
			\end{itemize}
		\end{itemize}
		
		\item \textbf{Наблюдаемая динамика движения}:
		\begin{itemize}
 \item Линейка: падает под углом, при касании поверхности сначала ударяется концом, затем заваливается и совершает несколько переворотов, пока не остановится.
\item Фишка: падает устойчиво, слегка подпрыгивает после удара и катится по поверхности, постепенно замедляясь.
\item Зажим: нестабильно вращается в воздухе, при падении меняет ориентацию и быстро приходит в состояние покоя.
		\end{itemize}
	\end{itemize}
	
	\subsection{Сценарий 2: Поведение объектов в водной среде}
	
	Вторая часть эксперимента посвящена моделированию гидродинамических процессов при погружении объектов в жидкость с учётом выталкивающей силы и сопротивления среды.
	
	\begin{itemize}
		\item \textbf{Характеристики водной среды}:
		\begin{itemize}
			\item Объём жидкости: ограниченный резервуар с поверхностью воды на высоте 1 м и твёрдым дном.
			\item Визуальные эффекты: реалистичное преломление света, подводные тени и небольшие возмущения поверхности.
			\item Плотность воды: $1000 \,\text{кг}/\text{м}^3$.
		\end{itemize}
		
		\item \textbf{Начальные условия}:
		\begin{itemize}
			\item Все объекты из сценария 1 располагаются над поверхностью воды в тех же позициях и с теми же углами ориентации.
		\end{itemize}
		
		\item \textbf{Поведение объектов в воде}:
		\begin{itemize}
 \item Линейка: входит в воду узким концом, тонет, затем постепенно погружается, переворачиваясь и слегка колеблясь.
\item Фишка: входит в воду почти вертикально, медленно тонет, слегка вращаясь. После полного погружения оседает в горизонтальном положении на дне.
\item Зажим: медленно погружается на дно, не испытывая переворотов.
		\end{itemize}
		
		\item \textbf{Физические эффекты, учитываемые в симуляции}:
		\begin{itemize}
			\item Выталкивающая сила: действие архимедовой силы, определяющей плавучесть объектов.
			\item Сопротивление жидкости: замедление движения объектов при погружении.
			\item Дополнительные визуальные эффекты: генерация турбулентности и волнений при взаимодействии объектов с водой.
		\end{itemize}
	\end{itemize}
	

	\newpage
	\section{Обзор среды разработки Unigine}
	
	Unigine — это мощный инструментарий для создания интерактивных 3D-проектов, широко применяемый в сфере разработки видеоигр, систем виртуальной реальности, специализированных визуализаций и разнообразных 3D-тренажеров, охватывающих такие области, как образование, медицина, военная подготовка и транспорт.
	
	Данная среда разработки функционирует на операционных системах Microsoft Windows и GNU/Linux, что обеспечивает гибкость для пользователей. Поддержка графических интерфейсов программирования (API), таких как DirectX и OpenGL, гарантирует совместимость с современными стандартами рендеринга. Unigine также обладает собственным объектно-ориентированным скриптовым языком — UnigineScript, синтаксически схожим с C++, что облегчает процесс создания и адаптации игровой или прикладной логики.
	
	Платформа Unigine предоставляет обширные возможности для интеграции передовых визуальных эффектов, включая окклюзию окружающего пространства (Screen Space Ambient Occlusion - SSAO) и расчет глобального освещения в реальном времени, способствуя достижению высокой степени фотореалистичности. Встроенный модуль физической симуляции позволяет моделировать столкновения, динамику твердых тел, процедурное разрушение объектов, поведение текстильных материалов, плавучесть, а также управлять силовыми полями и даже осуществлять реверс времени.
	
	Unigine также предлагает средства для формирования обширных ландшафтов и комплексных систем растительности, что особенно ценно при разработке симуляторов и виртуальных миров с открытой структурой.
	
	Ключевым преимуществом является интуитивно понятный редактор виртуального пространства, который значительно упрощает процесс конструирования и модификации сцен. Этот визуальный инструмент позволяет оперативно настраивать параметры окружения, ускоряя итерации в разработке и создании прототипов.
	
	\newpage
	\section{Архитектура проекта в UNIGINE}
	
	Создание приложений в UNIGINE осуществляется в рамках проекта, который объединяет исходный код, графические и звуковые ресурсы, а также метаданные разрабатываемого продукта. Каждый проект может содержать одну или несколько детализированных 3D-сцен, именуемых мирами. Управление этими проектами осуществляется посредством UNIGINE SDK Browser, предоставляющего централизованный интерфейс для навигации по ресурсам и контроля над ними.
	
	\subsection{Координатная система}
	
	Трехмерное пространство виртуальной среды описывается декартовой системой координат, ориентированной согласно правилу правой руки: оси X и Y определяют горизонтальную плоскость, а ось Z указывает вертикально вверх.
	
	При экспорте 3D-моделей и анимации из внешних графических редакторов ось Y интерпретируется как вектор, указывающий направление движения. Положительные углы вращения соответствуют повороту вектора против часовой стрелки в данной координатной системе, что согласуется с правилом буравчика (или правой руки). Этот подход обеспечивает унифицированный и бесшовный процесс обмена данными между различными инструментами моделирования и движком.
	
	\subsection{Мир}
	
	В рамках мира UNIGINE формируется виртуальная трехмерная сцена, служащая полотном для визуализации и интерактивных процессов. Эта сцена насыщена различными компонентами, именуемыми узлами или нодами, такими как 3D-модели, источники света, камеры и прочие элементы. Узлы размещаются в определенных локациях внутри сцены, формируя ее визуальную композицию.
	
	Структура сцены в UNIGINE организована как иерархическое дерево узлов, известное как граф сцены. Это подразумевает, что каждый узел может включать дочерние узлы, создавая сложные взаимосвязи между объектами. Например, узел, представляющий транспортное средство, может содержать дочерние узлы для его колес, двигателя и других составляющих.
	
	Каждый мир сохраняется в формате XML-файла с расширением `.world`. Этот файл содержит исчерпывающую информацию о мире, включая размещение и конфигурацию всех узлов, а также глобальные настройки, такие как параметры рендеринга и физического взаимодействия, применимые ко всей сцене.
	
	При инициализации нового проекта в UNIGINE через SDK Browser автоматически генерируется стартовый мир с идентичным названием. Этот мир можно модифицировать, а также создавать дополнительные миры для проекта с использованием UnigineEditor, что позволяет разработчикам параллельно работать над несколькими сценами, оптимизируя процесс разработки и тестирования.
	
	\subsection{Узел}
	
	В UNIGINE все элементы, добавляемые в виртуальную сцену, называются узлами или нодами. Узлы подразделяются на различные типы, определяющие их внешний вид и функциональность. Движок предоставляет обширный набор встроенных типов узлов, охватывающий широкий спектр объектов и эффектов, удовлетворяющий большинство стандартных потребностей. Помимо этого, предусмотрена возможность создания пользовательских узлов. Функциональность любого узла может быть расширена путем добавления к нему компонентов, что позволяет прикреплять дополнительные свойства и поведенческие характеристики.
	
	Каждый узел обладает матрицей преобразования, которая определяет его пространственное положение, ориентацию и размер в виртуальном мире, обеспечивая полный контроль над локализацией и вращением элементов. Некоторые узлы имеют визуальное представление, например, 3D-модели, декали (элементы декора) и различные эффекты. Другие узлы, такие как источники освещения или контроллеры игрового процесса, могут быть невидимыми, но тем не менее являются неотъемлемой частью виртуальной среды.
	
	Параметры каждого узла сохраняются в файле `.world`, однако их также можно вынести в отдельный XML-файл с расширением `.node`. Это целесообразно, когда требуется создать множество идентичных узлов, ссылаясь на них из основного файла `.world` посредством специальных узлов типа "Node References", которые служат для создания множественных экземпляров одного и того же элемента.
	
	\subsection{Объект}
	
	Одним из наиболее значимых типов узлов является объект. Объекты представляют собой виртуальные аналоги сущностей из реального мира: это могут быть предметы (люди, деревья, транспортные средства и т.д.), элементы окружающей среды (небо, рельеф, водные поверхности) и многое другое. Объекты характеризуются одной или несколькими поверхностями, определяющими их визуальный облик. Они могут обладать коллизионной формой, определяющей занимаемый объем в 3D-пространстве, и физическим телом, участвующим в симуляции физических взаимодействий.
	
	\subsection{Меш}
	
	Меш (полигональная сетка) составляет фундаментальную геометрическую основу любого объекта в трехмерной сцене. Он представляет собой совокупность многоугольников, которые формируют очертания и внешний вид объекта.
	
	Каждая полигональная сетка может включать одну или несколько поверхностей, определяющих визуальные характеристики объекта. Поверхности состоят из многоугольников; максимальное количество многоугольников на одной поверхности зависит от типа меша. Например, статические и скелетные меши способны содержать до 2 147 483 647 многоугольников на поверхность, тогда как динамические меши ограничены 65 535 многоугольниками на поверхность.
	
	Меш поддерживает наличие двух UV-каналов, используемых для наложения текстур на поверхность объекта. Эти каналы обеспечивают точное позиционирование текстурных карт на геометрии меша. Кроме того, меш позволяет хранить информацию о цвете каждой вершины, что дает возможность создавать разнообразные визуальные эффекты и тонко настраивать цветовую палитру объектов.
	
	В UNIGINE анимация объектов реализуется различными способами. Это включает в себя использование обтекаемых сеток (skinning), которые применяют скелетные деформации через "кости" для анимации, морф-цели (morph targets) для создания ключевых кадров деформации, а также динамические сетки, управляемые программно. Анимационные данные мешей сохраняются в собственных форматах UNIGINE с расширениями `.mesh` (для статических и скелетных мешей, включающих анимацию) и `.anim` (для внешних анимационных последовательностей).
	
	\subsection{Поверхность и материал}
	
	Поверхность — это именованный, непересекающийся подраздел геометрии объекта (то есть его полигональной сетки). Каждая поверхность может иметь свой уникальный материал или набор свойств, что позволяет индивидуально настраивать внешний вид и поведение каждой части объекта. Поверхности могут быть активированы или деактивированы независимо друг от друга.
	
	Поверхности также могут быть организованы иерархически в рамках общей сетки объекта. Эта структура может быть использована, например, для управления уровнем детализации (LOD) объекта, позволяя переключаться между различными версиями объекта с разным количеством полигонов и детализацией поверхностей в зависимости от расстояния до наблюдателя или других факторов.
	
	В UNIGINE материал представляет собой совокупность правил, определяющих визуальные характеристики поверхности объекта. Эти правила охватывают как поведение поверхности при взаимодействии с источниками освещения, так и параметры отражения, прозрачности и прочие атрибуты.
	
	Материал базируется на нескольких ключевых компонентах:
	
	\begin{itemize}
		\item \textbf{Шейдеры}: Программные модули, которые диктуют процесс рендеринга материала. В UNIGINE используются вершинные, фрагментные и геометрические шейдеры, которые оперируют данными на уровне пикселей и вершин, а также манипулируют геометрией объекта.
		\item \textbf{Текстуры}: Графические изображения, которые могут быть применены к материалу. Эти текстуры передаются шейдерам для определения детального визуального облика поверхности.
	\end{itemize}
	
	\newpage
	\section{Симуляция физических явлений в Unigine}
	
	В Unigine физическая симуляция занимает центральное место, предоставляя разработчикам обширный арсенал инструментов для создания реалистичных взаимодействий объектов в виртуальной среде. Движок включает в себя интегрированный модуль физического моделирования, позволяющий воспроизводить разнообразные физические явления. Ниже представлены основные аспекты физической симуляции, поддерживаемые Unigine:
	
	\begin{itemize}
		\item \textbf{Обработка столкновений}: Unigine способен обнаруживать и корректно обрабатывать соударения между объектами. Это критически важно для имитации правдоподобных взаимодействий, таких как удары, падения и другие виды контактов.
		\item \textbf{Динамика твердых тел}: Платформа поддерживает полноценное моделирование физики твердых тел, что позволяет объектам вести себя достоверно при взаимодействии друг с другом и под действием внешних сил. Это включает учет таких свойств, как масса, инерция и коэффициенты трения.
		\item \textbf{Процедурное разрушение}: Unigine предоставляет возможность динамического разрушения объектов, что полезно для реализации эффектов взрывов, обрушений конструкций и других динамичных сценариев. 
		\item \textbf{Моделирование текстильных материалов}: Движок поддерживает имитацию поведения текстильных материалов, что позволяет создавать убедительные эффекты для тканей, одежды и прочих гибких поверхностей.
		\item \textbf{Плавучесть объектов}: Unigine включает функционал для симуляции плавучести объектов, что находит применение при создании водных сред и интерактивных взаимодействий с жидкостями.
		\item \textbf{Поля сил}: Система поддерживает создание и управление полями сил, позволяя моделировать такие воздействия, как гравитационные поля, ветровые потоки и другие силовые эффекты на объекты.
		\item \textbf{Реверс времени}: Unigine обеспечивает возможность воспроизведения событий в обратном порядке, что может быть использовано для реализации эффектов замедления, приостановки и обратного хода времени.
	\end{itemize}
	
	Физическое поведение объектов в UNIGINE формируется на основе концепций тел и их коллизионных форм, что позволяет точно имитировать различные физические свойства и взаимодействия. Для придания объекту физических свойств необходимо назначить ему соответствующее тело.
	
	Тело (Body) — это ключевой компонент объекта, отвечающий за его физическое поведение. В UNIGINE доступны несколько типов тел:
	
	\begin{itemize}
		\item \textbf{Жесткое тело (Rigid Body)}: Моделирует нерушимое, твердое поведение объекта. Взаимодействует с другими жесткими телами и внешними физическими силами.
		\item \textbf{Тряпичная кукла (RagDoll)}: Представляет собой деформируемый объект, гибко реагирующий на внешние воздействия. Используется для имитации мягких тканей или анатомических моделей.
		\item \textbf{Разрушаемое тело (Fracture)}: Позволяет объекту распадаться на фрагменты под действием силы или при столкновении. Примером может служить симуляция разрушаемых зданий или объектов.
		\item \textbf{Шнур (Rope)}: Гибкий объект, предназначенный для создания веревок, цепей или других подвижных элементов.
		\item \textbf{Ткань (Cloth)}: Позволяет создавать объекты, деформирующиеся под воздействием сил, имитируя текстильные материалы.
		\item \textbf{Вода (Water)}: Специализированное тело, имитирующее поведение жидкости, включая течение, взаимодействие с объектами и плавучесть.
		\item \textbf{Траектория (Path)}: Позволяет объекту следовать по заранее определенному пути, что полезно для анимации движения.
	\end{itemize}
	
	Форма объекта определяет его коллизионную геометрию, то есть то, как объект будет взаимодействовать с окружающими элементами и физическими силами. UNIGINE поддерживает следующие геометрические примитивы для коллизионных форм: сфера (sphere), капсула (capsule), цилиндр (cylinder), куб (box), выпуклая оболочка (convex hull).
	
	Каждая коллизионная форма может быть ассоциирована с физическим телом объекта, определяя его взаимодействия со средой. Это обеспечивает высокую точность в моделировании физического поведения объектов.
	\newpage
	
	\section{Имплементация сцены}
	\subsection{Подготовка и создание виртуального мира}
	Для начала работы с движком UNIGINE нужно установить несколько ключевых программ: UNIGINE SDK и UNIGINE SDK Browser. В работе над данной лабораторной работой использовались версии SDK 2.19.1.2 и SDK Browser 2.0.27. Все необходимые для работы модули доступны для загрузки с официального веб-сайта: \url{https://unigine.com/get-unigine/}.
	
	После завершения установки и успешной авторизации в системе следует создать новый проект. В процессе создания проекта возможно указать требуемые API, интегрированную среду разработки (IDE), параметры точности, версию SDK и тип версии. Для создания обоих сцен были выбраны одинаковые параметры, представленные на \hyperref[pic1]{рисунке 1}.
	
	\begin{figure}[h!]
		\centering{
			\includegraphics[width=70mm]{Pic1.png}
			\caption{\centering{{Конфигурация создаваемого объекта}}}
		}
		\label{pic1}
	\end{figure}\par
	
	По завершении создания проекта открываем  редактор, нажимая на кнопку \texttt{Open Editor}, в панеле снизу у созданного мира. После нажатия кнопки откроется виртуальный мир, чей внешний вид представлен на \hyperref[pic2]{рисунке 2}.
	\begin{figure}[h!]
		\centering{
			\includegraphics[width=140mm]{Pic2.png}
			\caption{\centering{{Интерфейс редактора с инициализированным миром}}}
		}
		\label{pic2}
	\end{figure}\par
	
	\newpage
	
	\subsection{Подготовка и импорт 3D-моделей}
	
	В ходе выполнения лабораторной работы №1 в Blender 3D были созданы реалистические модели трех объектов: игральной фишки, зажима для хлеба и обломанной линейки.
	
	Для того, чтобы перенести эти объекты в Unigine, включая их текстурные карты нужно экспортировать их из Blender. Для этого нужно выполнить следующие действия:
	\begin{enumerate}
		\item  Откройте меню "File".
		\item   Выберите пункт "Export".
		\item   Укажите формат FBX (.fbx) для сохранения модели.
	\end{enumerate}
	Общий процесс представлен на \hyperref[pic3]{рисунке 3.}\par
Важным моментом является сохранение реальных пропорций экспортируемой модели. В случае обнаружения различий требуется изменить масштаб объекта и зафиксировать изменения через последовательность команд \texttt{Object $\rightarrow$ Apply $\rightarrow$ All Transformations}. После этого параметр масштаба устанавливается равным 1, что обеспечивает корректность дальнейшей работы с моделью.

	\begin{figure}[h!]
		\centering{
			\includegraphics[width=100mm]{Pic3.png}
			\caption{\centering{{Процедура экспорта модели из Blender}}}
		}
		\label{pic3}
	\end{figure}\par
	
	
	Для импорта всех подготовленных моделей в Unigine выполните следующие шаги:
	\begin{enumerate}
		\item  В окне Asset Browser создайте отдельные директории для каждого импортируемого объекта.
		\item Откройте соответствующую директорию.
		\item  Кликните правой кнопкой мыши (ПКМ) и выберите опцию "Импортировать".
		\item Настройте параметры импорта согласно представленному изображению.
	\end{enumerate}
	\begin{figure}[h!]
		\centering{
			\includegraphics[width=100mm]{Pic4.png}
			\caption{\centering{{Конфигурация импорта модели в Unigine}}}
		}
		\label{pic4}
	\end{figure}\par
	
	
	Для размещения моделей непосредственно в рабочей области сцены необходимо нажать левую кнопку мыши (ЛКМ) на файле формата .fbx в Asset Browser и перетащить его на визуальное представление мира. Визуализация импортированной модели представлена на \hyperref[pic5]{рисунке 5}.
	\begin{figure}[h!]
		\centering{
			\includegraphics[width=100mm]{Pic5.png}
			\caption{\centering{{Конфигурация импорта модели в Unigine}}}
		}
		\label{pic5}
	\end{figure}\par
	Заметим, что зажим состоит из трех объектов. Для того чтобы это исправить, экспортируем модель в UNIGINE Mesh Object. Для этого в графе \texttt{World Nodes} нажать на вкладку модели и перейти по всплывающему меню: \texttt{Export to} $\rightarrow$ \texttt{Unigine mesh file (.mesh)}. Процесс выбора представлен на \hyperref[pic6]{рисунке 6}\par
	
		\begin{figure}[h!]
		\centering{
						\includegraphics[width=100mm]{Pic6.png}
			\caption{\centering{{Процесс экспорта модели}}}
		}
		\label{pic6}
	\end{figure}\par

	После этого экспортированную модель увидим в графе \texttt{Assets Browser}, что представлено на \hyperref[pic7]{рисунке 7}
			\begin{figure}[h!]
		\centering{
			\includegraphics[width=100mm]{Pic7.png}
			\caption{\centering{{Результат экспорта модели}}}
		}
		\label{pic7}
	\end{figure}\par
	При перетаскивании объекта на сцену увидим, что модель переносится без наложенных текстур. Для того, чтобы придать модели исходный вид нужно открыть папку с материалами, выбрать материал и перенести на ту часть объекта, которая должна быть окрашена в тот цвет который нам нужен. Процесс наложения материалов на объект представлен на \hyperref[pic8]{рисунке 8}.

	\begin{figure}[h!]
		\centering{
			\includegraphics[width=100mm]{Pic8.png}
			\caption{\centering{{Процесс наложения текстур на модель}}}
		}
		\label{pic8}
	\end{figure}\par
	\newpage
	\subsection{Настройка физических свойств моделей}
	
	Для обеспечения реалистичного взаимодействия объектов друг с другом и с окружающей средой требуется конфигурирование их физических атрибутов. Для этого выполните следующие действия:
	\begin{enumerate}
		\item Выделите целевой объект, используя левую кнопку мыши (ЛКМ).
		\item  Перейдите на вкладку "Parameters" (Параметры).
		\item  В разделе "Node" (Узел) выберите опцию "Dynamic" (Динамический), как показано на \hyperref[pic9]{рисунке 9}.
	\end{enumerate}
	\begin{figure}[h!]
		\centering{
			\includegraphics[width=90mm]{Pic9.png}
			\caption{\centering{{Активация динамических свойств объекта}}}
		}
		\label{pic9}
	\end{figure}\par
	
	После этого нужно переключиться в вкладку \texttt{Physics} вкладки \texttt{Parameters}
	Для наших моделей также следует выбрать тип "Rigid body" (Твёрдое тело) и убрать отметку с опции "Shape-based" (На основе формы). С помощью этого можно будет задать параметры вручную:
	\begin{enumerate}
		\item  Для игральной фишки используйте параметры, представленные на \hyperref[pic10]{рисунке 10}.
		\item  Для зажима для хлеба примените конфигурацию, показанную на \hyperref[pic11]{рисунке 11.}
		\item  Для обломанной линейки задайте параметры согласно \hyperref[pic12]{рисунку 12.}
	\end{enumerate}
	Эти параметры включают в себя значения массы и инерции по всем осям, что необходимо для корректного моделирования вращения и отскока объектов при столкновении с поверхностями и другими сущностями. Некоторые параметры остались без изменений, соответствуя значениям по умолчанию.
	\begin{figure}[h!]
		\begin{multicols}{2}
			\hfill
			\centering{\includegraphics[width=60mm]{pic10.png}}
			\caption{\centering{Параметры физического тела для игральной фишки}} 
			\label{pic10}
			\hfill
		\includegraphics[width=68mm]{pic11.png}
			\hfill
			\caption{\centering{Параметры физического тела для зажима для хлеба}}
			\label{pic11}
		\end{multicols}
	\end{figure}
	
	\begin{figure}[h!]
		\centering{
			\includegraphics[width=80mm]{Pic12.png}
			\caption{\centering{{Параметры физического тела для обломанной линейки}}}
		}
		\label{pic12}
	\end{figure}\par
	
	
	Далее для всех интерактивных объектов выберите опцию "Autogenerated" \ для определения их коллизионной формы. Ввиду сложной геометрии данных объектов, программное обеспечение автоматически подберет наиболее подходящую аппроксимирующую форму. Например, после выбора "Autogenerated" для обломанной линейки была автоматически назначена форма "Convex" (Выпуклая оболочка), как продемонстрировано на \hyperref[pic13]{рисунке 13}. Аналогичную процедуру выбора формы столкновения необходимо выполнить и для остальных моделей.
	
	\begin{figure}[h!]
		\centering{
		\includegraphics[width=80mm]{Pic13.png}
			\caption{\centering{{Автоматический выбор формы столкновения для обломанной линейки}}}
		}
		\label{pic13}
	\end{figure}\par
	
	\newpage
	\subsection{Пространственное размещение моделей}
	
	На следующем этапе необходимо позиционировать объекты в виртуальном пространстве согласно разработанной структуре сцены. Для этого перейдите на вкладку Parameters->Node и задайте следующие пространственные параметры:
	\begin{figure}[h!]
	\begin{multicols}{2}
		\hfill
		\centering{\includegraphics[width=60mm]{pic14.png}}
		\caption{\centering{Позиция первой обломанной линейки}} 
		\label{pic14}
		\hfill
		\includegraphics[width=68mm]{pic15.png}
		\hfill
		\caption{\centering{Позиция второй обломанной линейки}}
		\label{pic15}
	\end{multicols}
\end{figure}

	\begin{figure}[h!]
	\begin{multicols}{2}
		\hfill
		\centering{\includegraphics[width=60mm]{pic16.png}}
		\caption{\centering{Позиция первой игральной фишки}} 
		\label{pic16}
		\hfill
		\includegraphics[width=68mm]{pic17.png}
		\hfill
		\caption{\centering{Позиция второй игральной фишки}}
		\label{pic17}
	\end{multicols}
\end{figure}
	\begin{figure}[h!]
	\begin{multicols}{2}
		\hfill
		\centering{\includegraphics[width=60mm]{pic18.png}}
		\caption{\centering{Позиция первого зажима для хлеба}} 
		\label{pic18}
		\hfill
		\includegraphics[width=68mm]{pic19.png}
		\hfill
		\caption{\centering{Позиция второго зажима для хлеба}}
		\label{pic19}
	\end{multicols}
\end{figure}

	
	
	\subsection{Активация физической симуляции}
	
	Для активации физического поведения и взаимодействия объектов в сцене необходимо нажать центральную кнопку, расположенную в правом верхнем углу интерфейса редактора (\hyperref[pic20]{рисунок 20}).
	\begin{figure}[h!]
		\centering{
			\includegraphics[width=80mm]{Pic20.png}
			\caption{\centering{{Кнопка запуска физической симуляции}}}
		}
		\label{pic20}
	\end{figure}\par
	
	
	
	\subsection{Конфигурация окружения}
	\subsubsection{Создание базовой поверхности}
Чтобы наглядно отобразить физические характеристики моделей, необходимо подготовить подходящее окружение. В первой сцене используется неподвижная плоскость, позволяющая продемонстрировать взаимодействие объектов с твёрдой поверхностью. Во второй сцене создаётся водный объём, который показывает различия в поведении предметов при всплытии и погружении в зависимости от их массы и плотности материала.

	
	Для создания твердой поверхности выполните следующие действия:
	\begin{enumerate}
		\item Откройте меню "Create" (Создать).
		\item Выберите пункт "Primitive" (Примитив).
		\item Определите тип примитива как "Box" (Куб), как показано на рисунке 21.
		\item  Кликните левой кнопкой мыши в произвольном месте сцены для размещения объекта.
		
	\end{enumerate}
	\begin{figure}[h!]
		\centering{
			\includegraphics[width=100mm]{Pic21.png}
			\caption{\centering{{Процесс создания поверхности сцены}}}
		}
		\label{pic21}
	\end{figure}\par
	
	
Когда все модели и сама плоскость были преобразованы в динамические объекты, необходимо перейти во вкладку \texttt{Parameters} и открыть раздел \texttt{Physics}. Далее требуется задать характеристики поверхности, на которую будут падать элементы сцены. Для этого выполняются следующие действия:
\begin{enumerate}
	\item В параметре типа тела выбрать \texttt{Rigid body} (Твёрдое тело).
	\item Включить опцию \texttt{Immovable} (Неподвижный).
	\item Остальные параметры оставить без изменений, как показано на \hyperref[pic22]{рисунке 22}. Это позволит поверхности оставаться статичной, сохраняя при этом возможность корректного взаимодействия с динамическими объектами.
	\item В качестве формы коллизии задать \texttt{Box} (Куб), что отражено на \hyperref[pic23]{рисунке 23}.
\end{enumerate}

	\begin{figure}[h!]
		\centering{
			\includegraphics[width=70mm]{Pic22.png}
			\caption{\centering{{Выбор типа физического тела для поверхности}}}
		}
		\label{pic22}
	\end{figure}\par
	\begin{figure}[h!]
		\centering{
			\includegraphics[width=90mm]{Pic23.png}
			\caption{\centering{{Назначение формы столкновения для поверхности}}}
		}
		\label{pic23}
	\end{figure}\par
	
\subsubsection{Параметры водной среды}
Во второй сцене требуется задать физические свойства воды. Для этого выполните следующие шаги:
\begin{enumerate}
	\item Откройте меню \texttt{Create -> Water -> Physical Water}.
	\item Настройте параметры согласно схеме на \hyperref[pic21]{рисунке 21}.
\end{enumerate}

\textbf{Physical Water} представляет собой кубическую область, внутри которой рассчитываются эффекты взаимодействия объектов с жидкостью. Обычно этот элемент используется вместе с узлами типа "Water" — добавление компонента позволяет явно определить участок сцены, где будут действовать законы гидродинамики.  

Ниже приведены основные параметры настройки:
\begin{itemize}

\item \textbf{Physical Mask}  
\par Маска \texttt{Physical Water} должна совпадать с маской физических объектов. Если значения различаются, область не будет оказывать влияние на модель.

\item\textbf{Size}  
\par Задает размеры области \texttt{Physical Water} по осям X, Y и Z (в единицах движка).

\item\textbf{Velocity}  
\par Определяет скорость течения воды внутри выделенной зоны по каждой оси.

\item\textbf{Density}  
\par Отвечает за плотность воды, которая влияет на поведение объектов:
\par - Увеличение значения повышает силу Архимеда и способствует всплытию.  
\par - Уменьшение плотности приводит к более глубокому погружению тел.  

\item\textbf{Linear Damping}  
\par Контролирует замедление поступательного движения в воде:  
\par - Чем выше параметр, тем быстрее уменьшается скорость перемещения.  

\item\textbf{Angular Damping}  
\par Отвечает за снижение угловой скорости вращения:  
\par - Большие значения обеспечивают более быстрое затухание вращения.  

\begin{figure}[h!]
	\centering{
				\includegraphics[width=90mm]{Pic24.png}
		\caption{\centering{{Настройка параметров водной среды}}}
	}
	\label{pic21}
\end{figure}\par
\end{itemize}
	\newpage
	\section{Итоги проделанной работы}
	По итогам работы были сгенерированы две видеозаписи, демонстрирующие реализованные сцены.
	\subsection{Анализ первой сцены}
	Кадры из первой сцены представлены на рис. 22-25. На них видно, что все объекты под действием гравитации совершили падение на поверхность и после этого стабилизировались.
	
	\begin{figure}[h!]
		\centering{
			\includegraphics[width=90mm]{Pic25.png}
			\caption{\centering{Визуализация первой сцены}}	
		}
		
		\label{ris1}
	\end{figure}
	
	\begin{figure}[h!]
		\centering{
			\includegraphics[width=90mm]{Pic26.png}
			\caption{\centering{Визуализация первой сцены (продолжение)}}	
		}
		
		\label{ris1}
	\end{figure}
	
	\begin{figure}[h!]
		\centering{
			\includegraphics[width=90mm]{Pic27.png}
			\caption{\centering{Визуализация первой сцены (продолжение)}}	
		}
		
		\label{ris1}
	\end{figure}
	
	\begin{figure}[h!]
		\centering{
		\includegraphics[width=90mm]{Pic28.png}
			\caption{\centering{Визуализация первой сцены (продолжение)}}	
		}
		
		\label{ris1}
	\end{figure}
	
	\newpage
	\subsection{Анализ второй сцены}
	Кадры из второй сцены представлены на рис. 26-29. В этой сцене, помимо гравитационного воздействия, на объекты также влияла выталкивающая сила Архимеда. В результате, игральная фишка и обломанная линейка, обладающие большей плотностью, относительно быстро опустились на дно, в то время как зажим для хлеба, имеющий меньшую плотность, тонет медленнее всех.
	
	\begin{figure}[h!]
		\centering{
		\includegraphics[width=90mm]{Pic29.png}
			\caption{\centering{Визуализация второй сцены }}	
		}
		
		\label{ris1}
	\end{figure}
	
	\begin{figure}[h!]
		\centering{
		\includegraphics[width=90mm]{Pic30.png}
			\caption{\centering{Визуализация второй сцены (продолжение)}}	
		}
		
		\label{ris1}
	\end{figure}
	
	\begin{figure}[h!]
		\centering{
			\includegraphics[width=90mm]{Pic31.png}
			\caption{\centering{Визуализация второй сцены (продолжение)}}	
		}
		
		\label{ris1}
	\end{figure}
	
	\begin{figure}[h!]
		\centering{
			\includegraphics[width=90mm]{Pic32.png}
			\caption{\centering{Визуализация второй сцены (продолжение)}}	
		}
		
		\label{ris1}
	\end{figure}
	\newpage
	\hfill
	\newpage
	\hfill
	\newpage
	\section*{Заключение} {\addcontentsline {toc}{section}{Заключение}}
	В процессе выполнения лабораторной работы было проведено детальное знакомство с основными возможностями графического движка UNIGINE и изучены базовые этапы его использования.  
	
	На подготовительном этапе в виртуальную сцену были добавлены три объекта, созданные в Blender 3D: пластиковый зажим для хлеба, игральная фишка и линейка. Для корректного воспроизведения физических процессов моделям были назначены свойства жёстких тел (Rigid Body), определены подходящие формы коллизий и вручную заданы значения массы.  
	
	В рамках эксперимента были построены две демонстрационные сцены:
	\begin{enumerate}
		\item Падение объектов с разными физическими параметрами на твёрдую поверхность.
		\item Симуляция поведения тел различной плотности в жидкой среде.
	\end{enumerate}
	
	Для отображения и расчёта гидродинамических эффектов применялись следующие элементы:
	\begin{itemize}
		\item визуализация поверхности воды,
		\item физический компонент воды с регулируемыми параметрами потока,
		\item статическая плоскость, выполняющая роль основания в первой сцене.
	\end{itemize}
	
	\newpage
	{\addcontentsline {toc}{section}{Список литературы}}
	
	\begin{thebibliography}{}
		\bibitem{lit1} UNIGINE documentation: \url{https://developer.unigine.com/en/docs/latest/} (дата обращения: 25.08.2025)
		
	\end{thebibliography}
\end{document}
