Какая минимум битность вычислительного устройства должна быть для рендеринга 3d моделей?
подскажите какая минимум битность вычислительного устройства должна быть для рендеринга 3d моделей. Просто я хочу попробовать отрендерить 3d модель на ардуино nano, понимаю что на это уйдет несколько дней или месяцев, и множество костылей для преобразования расчетов, но подскажите насколько это реально и в какую сторону с математикой копать.
Ответы (2 шт):
У тебя не хватит оперативной памяти для вычислений.
Возможность реализации машины Тьюринга на конкретном языке программирования можно грубо описать как перечень требований, которым этот язык должен для этого удовлетворять: Конечность (нет бесконечных символьных множеств и пр.). Фиксированное описание (формальность). Всегда достаточный объём доступной памяти — в идеале здесь имеется в виду неограниченная память, однако физические рамки не позволяют сделать память ЭВМ бесконечной, поэтому она просто должна быть "always big enough". Неограниченность времени выполнения — любая программа в должна иметь возможность работать до тех пор, пока не завершится. Возможность функциональной композиции (вызов одной функции из другой, рекурсия). Наличие циклов while с прерыванием или эквивалентных им конструкций. Возможность останавливать выполнение (halt) или каким-то образом подавать сигнал о результатах выполнения. Представление множества натуральных чисел, понятие нуля и следующего числа. Возможны другие подобные системы. Поддержка входных и выходных данных (I/O), причём без формальных ограничений в объёме. Очевидно, что если любая программа, написанная на каком-то языке программирования, принимает на вход не более фиксированного n бит данных и возвращает не более n бит, этот язык не может быть Тьюринг-полным.
Собственно, такой проект уже есть, так что остальное - лирическое отступление с пояснениями:
Строго говоря, рендеринг - это получение значания вычислимой функции. Поэтому, любой тьюринг-полный драндулет любой разрядности с этим справится - не в разрядности дело. AVR умеет эмулировать вычисления с плавающей точкой, например, а вот тут вообще запустили на AVR эмулятор ARM, в котором запустили linux и bash (Что? Да!). Правда там можно придраться, что автор использует внешнюю RAM и SD-карту.
И даже ограничение на память можно обойти, если готовое изображение отдавать через последовательный порт, а исходные данные закачивать через него же.
Так что фактически, это вопрос времени, упорства и желания. А в качестве теории и кусков кода рекомендую вот это, просто потому что я там соавтор - там не про рейтрейсинг, а про классическую отрисовку треугольниками с текстурами, так что это как раз повод поработать над вариантом реализации этого на ардуине, раз рейтрейс уже есть.
Также в качестве веселых картинок рекомендую посмотреть демосцену на AVR. Там и анимация в реальном времени, и музыка.
Дополнительно. К контроллеру можно приколхозить обычную писюковую видеокарту (раритентную разумеется, под шину ISA). Тогда у вас будет достаточно видеопамяти под результат и заодно устройство отображения.
Процесс рендеринга с текстурами существенно отличается, например, компиляции ядра линукса, потому что его можно производить попиксельно, следовательно, на выход нужен один байт. Так что если хранить входную модель и текстуру на SD карте, ну или сильно постараться и упихать ее во флеш, пожав все что только можно - можно отрендерить и с текстурами и с примитивным светом.
Вот как раз скриншот из видео:

Вверху видно время - 293 секунды на отрисовку 320x240 в 16 цветах. Очень достойный результат на мой взгляд.