Материал из Скретч Вики
![]() |
Внимание! Данная статья является переводом английской версии статьи. На англ. Вики присутствуют примеры проектов, использующие каждый из методов. Список проектов также включает в себя проекты, рассказывающие о реализации того или иного метода в Скретч. На Русской Вики публикование пользовательского контента запрещена, к тому же все проекты английские.
Редакторы могут помочь в переносе руководств из проектов в статью, и когда все руководсвта будут перенесены, код статьи будет перенесён на 3D-проекты. |
![]() |
Этот раздел или статья не предназначена для новичка! Она содержит сложную информацию. |
Трёхмерное пространство или 3D — пространство с тремя измерениями: длина (x), ширина (y) и высота (z)[1]. Скретч не предоставляет инструментов для отображения, создания или управления 3D-графикой, но он предоставляет блоки для перемещения 2D (x, y) спрайтов, изменения их размеров, рисования пером, математических функций, списков и многого другого. Многие (если не все) 3D-методы можно воссоздать с помощью блоков Скретч.
Создание иллюзий 3D в Скретч может быть большой проблемой, требующей продвинутых алгоритмов или 3D-программ. Существуют и более простые методы, позволяющие начать взаимодействовать с 3D в Скретче.
3D-методы, используемые в Скретч
Существует множество проектов Скретч, в которых для отображения 3D-графики используется один или несколько следующих методов. Обычно их можно разделить на две группы: основанные на лучах и прочие.
Прочие
Растеризация
Растеризация — очень популярный метод за пределами Скретч, который используется почти во всех 3D-играх. Он включает в себя разделение 3D-сцены на несколько полигонов и использование различных матриц преобразования для преобразования каждого полигона на экране. Затем он будет перебирать каждый пиксель на экране, чтобы найти, какой многоугольник представляет пиксель, и соответственно раскрасить его. Скретч не может выполнять расчеты для каждого пикселя на экране достаточно быстро, поэтому этот метод обычно не используется в Скретч.
Алгоритм художника
Алгоритм художника - это метод разделения 3D-сцены на несколько полигонов и их заполнения в порядке от самого дальнего к ближайшему, а не использование метода попиксельного сканирования, который используется в растеризации. Этот способ быстрее, чем растеризация, поскольку требует значительно меньше вычислений, и по этой причине он используется во многих проектах Скретч.
3D-проекция
3D-проекцию в Скретч можно сделать с помощью следующего кода:
определить перейти в (x :: custom-arg) (y :: custom-arg) (z :: custom-arg) (rc_x :: custom-arg) (rc_y :: custom-arg) (rc_z :: custom-arg) (r_x :: custom-arg) (r_y :: custom-arg) (r_z :: custom-arg) (cam_x :: custom-arg) (cam_y :: custom-arg) (cam_z :: custom-arg) (fs :: custom-arg) перейти в x: ((((((((x :: custom-arg) - (rc_x :: custom-arg)) * ([cos v] of (r_y :: custom-arg))) - (((z :: custom-arg) - (rc_z :: custom-arg)) * ([sin v] of (r_y :: custom-arg)))) * ([cos v] of (r_z :: custom-arg))) - (((((y :: custom-arg) - (rc_y :: custom-arg)) * ([cos v] of (r_x :: custom-arg))) - (((((x :: custom-arg) - (rc_x :: custom-arg)) * ([sin v] of (r_y :: custom-arg))) + (((z :: custom-arg) - (rc_z :: custom-arg)) * ([cos v] of (r_y :: custom-arg)))) * ([sin v] of (r_x :: custom-arg)))) * ([sin v] of (r_z :: custom-arg)))) - (cam_x :: custom-arg)) * ((fs :: custom-arg) / ((fs :: custom-arg) + (((((y :: custom-arg) - (rc_y :: custom-arg)) * ([sin v] of (r_x :: custom-arg))) + (((((x :: custom-arg) - (rc_x :: custom-arg)) * ([sin v] of (r_y :: custom-arg))) + (((z :: custom-arg) - (rc_z :: custom-arg)) * ([cos v] of (r_y :: custom-arg)))) * ([cos v] of (r_x :: custom-arg)))) - (cam_z :: custom-arg))))) y: ((((((((x :: custom-arg) - (rc_x :: custom-arg)) * ([cos v] of (r_y :: custom-arg))) - (((z :: custom-arg) - (rc_z :: custom-arg)) * ([sin v] of (r_y :: custom-arg)))) * ([sin v] of (r_z :: custom-arg))) + (((((y :: custom-arg) - (rc_y :: custom-arg)) * ([cos v] of (r_x :: custom-arg))) - (((((x :: custom-arg) - (rc_x :: custom-arg)) * ([sin v] of (r_y :: custom-arg))) + (((z :: custom-arg) - (rc_z :: custom-arg)) * ([cos v] of (r_y :: custom-arg)))) * ([sin v] of (r_x :: custom-arg)))) * ([cos v] of (r_z :: custom-arg)))) - (cam_y :: custom-arg)) * ((fs :: custom-arg) / ((fs :: custom-arg) + (((((y :: custom-arg) - (rc_y :: custom-arg)) * ([sin v] of (r_x :: custom-arg))) + (((((x :: custom-arg) - (rc_x :: custom-arg)) * ([sin v] of (r_y :: custom-arg))) + (((z :: custom-arg) - (rc_z :: custom-arg)) * ([cos v] of (r_y :: custom-arg)))) * ([cos v] of (r_x :: custom-arg)))) - (cam_z :: custom-arg)))))
3D-проекция — это любой метод отображения трехмерных точек на двумерной плоскости.
Трехмерная проекция позволяет проектам определять положение спрайта по осям x, y, z, а затем размещать его на экране. Этот метод использовался для рисования 3D-объектов с помощью списков и блоков пера.
Размер спрайтов можно изменять в зависимости от расстояния до камеры/зрителя. Этот метод может работать очень быстро в Скретч, что делает его более подходящим для игр.
Между спроецированными точками также можно провести линии для создания каркасных 3D-визуализаций.
Обычно, используется перспектива, но есть и более простые проекции, такие как ортогональные проекции. Это можно построить с помощью тригонометрии и формулы перспективы или же с помощью кватернионов.
Экспорт из 3D-программ
Создание 3D-объекта в программе 3D-графики с последующим сохранением его в виде файла Wavefront (.obj). Линии и вершины берутся из объектного файла и импортируются в 2 списка.
Для каждой пары чисел в списке линий будут использоваться соответствующие переменные X, Y и Z, и будет проведена линия с использованием 3D-проекции.
Камера вращается в зависимости от x и y мыши.
Предварительно визуализированная графика
Изображения, созданные с помощью 3D-программ, таких как Blender или Google SketchUp, импортируются как костюмы в спрайт. Костюмы, изображающие объект под разными углами, быстро меняются, чтобы создать впечатление, что объект вращается.
Нарезной 3D-метод
Это второй по простоте метод в Скретч. Он работает путем укладки или штамповки 2D-спрайтов, начиная снизу вверх, слегка смещая вверх для каждого слоя. Этот набор рисунков можно поворачивать, чтобы вращать 3D-объект. Помимо изменения Y, чтобы сделать это изображение, X спрайта также можно изменить и получить эффект «переворота» вместо вращающегося.
Невращающийся метод
Это самый простой метод в Скретч. Он работает с использованием размера для положения z и не вращается. У него есть иллюзия, из-за которой спрайты выглядят так, будто они вращаются, но это не так. Когда спрайт касается одной стороны, он переходит на другую сторону (не касаясь ее), а если спрайт касается другой стороны, он переходит на первую сторону (опять же, не касаясь ее).
Основанные на лучах
Трассировка пути
Трассировка пути — это подмножество трассировки лучей, которое создает пути света на основе физических свойств материалов, пересекаемых лучами, и вычисляет окончательный результат для каждого пикселя с помощью уравнения рендеринга. Эти пути генерируются случайным образом из-за того, что интеграл в уравнении рендеринга не имеет явного решения и должен решаться методом Монте-Карло. Использование случайности является причиной помех при трассировке пути. Количество путей равно количеству сэмплов, а увеличение сэмплов уменьшает помехи в изображении и приближает его к истинному результату. Использование случайности также позволяет использовать такие эффекты, как глубина резкости и сглаживание. На практике трассировка также имеют глобальное освещение, которое представляет собой непрямое отражение света. Трассировка пути медленнее, чем трассировка лучей, но более реалистична. Этот метод также используется для рендеринга CGI и 3D-анимационных фильмов.
Трассировка лучей
В компьютерной графике трассировка лучей — это метод создания изображения путем отслеживания пути света через пиксели в плоскости изображения и имитации эффектов его встречи с виртуальными объектами. Обратите внимание, что этот термин также используется для описания высоких графических возможностей и/или интенсивной графики. Хотя обычно это происходит в реальном времени на языках более низкого уровня и может быть в реальном времени на Скретч, оно все же может быть очень медленным. Однако он может воссоздавать естественные эффекты, такие как отражение, затенение и тени. Эта сложная техника обычно используется в демосцене, фильмах и телешоу с использованием компьютерных изображений (CGI).
Марширование лучей
Марширование лучей — это метод, аналогичный методу трассировки лучей, но вместо перехода к объектам с помощью математических вычислений он перемещает луч вперед, пока он не пересечется с объектом. Этот метод медленнее, чем трассировка пути, из-за времени, которое требуется лучу, чтобы достичь своей цели. Иногда его также называют объемной трассировки лучей. Базовый алгоритм марширования лучей сначала оценивает ближайшее расстояние, перемещает луч на это расстояние и повторяет процесс снова и снова, пока луч не пересечется с объектом. В то время как трассировка лучей использует математику, чтобы заставить луч телепортироваться к объекту, реймаршинг использует математику, чтобы перемещать луч до тех пор, пока он не столкнется с объектом.
Фотонное картирование
Фотонное картирование — это метод, основанный на лучах, который обычно используется в сочетании с другим методом, основанным на лучах. Он работает, направляя лучи от источника света (фотонов) в сцену, которые используются для создания подповерхностного рассеяния и каустики.
Распределение лучей
Распределение лучей можно рассматривать как сокращенную и значительно быструю версию алгоритма трассировки лучей.
Этот метод ранее использовался в 3D-играх, чтобы получить быструю производительность в реальном времени от медленных компьютеров. Этот метод медленнее, чем трассировка лучей, потому что он перемещает луч на фиксированное расстояние до пересечения с объектом, что делает его крайне неэффективным.
Проекты, использующие этот метод, работают быстрее, потому что им нужно отправлять лучи только в 2 измерениях и не рендерить каждый пиксель экрана.
Реализация
Некоторые пользователи хотят, чтобы в Скретче был встроен 3D-редактор. Команда Скретч отклонила это предложение, заявив, что оно запутает новичков в Скретч[2]. Некоторые пользователи возражают, говоря, что можно дать доступ к нему только Скретчерами[3], или предлагая, создать два редактора[4], но предложение остается отклоненным.
3.5D проекты
Людям удалось создать 3,5D каркасные проекты, обычно это тессеракты, разновидность 4-мерного куба. Однако невозможно спроецировать настоящий 4D-объект на 2D-экран, поэтому 3,5D-проекты на самом деле являются 3D-проектами.
2.5D проекты
2.5D-проекты — это проекты, в которых используется 2D-графика в 3D-среде. Они менее медленные и их легче создавать, чем 3D-проекты. Методы включают в себя клонирование, штамповку и поиск с помощью мыши. Этот термин также применяется к проектам, в которых используются 3D-модели, но они используются в 2D-стиле.[5]
2.5D обычно используется в видеоиграх, как правила из-за простоты реализации.
Источники
- ↑ вп:Трёхмерное пространство
- ↑ тема:4789 (англ.)
- ↑ тема:27400 (англ.)
- ↑ тема:39806 (англ.)
- ↑ вп:Псевдотрёхмерность