# Имитаторы часть Х

Валерий Алексеевич Быков

18+

18+ Имитаторы. Часть Х.


Современные видеокарты считают трёхмерное изображение кодом, не будем обсуждать, как они это делают, но их 3Д модели состоят из полигонов и они полые внутри, а сами полигоны никак не пересекаются друг с другом. Причём видеокарта рассчитывает только вершины треугольного полигона, а это всего три точки в пространстве, всё остальное пустое. Для создания физики в компьютерных играх используют псевдофизику, не будем углубляться в подробности, чтобы никто не придирался к моим словам. Но, говоря простым языком, любая 3Д модель по сути полая, и крайне сложно построить взаимодействие одной модели с другой, и даже если это взаимодействие есть, оно осуществляется очень криво не эффективно и недостоверно. И хотя мы играем в игры, но очень часто коллайдеры моделей не повторяют всю модель целиком, а указывают лишь внешние габариты модели и всё. Если встаёт задача рассчитать трёхмерный объект, который внутри не полый, например, для авиации или инженерных задач в таких программах как солид, юниграфикс или ансис, то используется метод конечных элементов, суть которого очень примитивно состоит в том, что модель разбивается на много маленьких кубиков и это взаимодействие кубиков считается опять же кодом. Это очень не эффективно и разрезка детали может считаться несколько секунд, то есть, ни о каком расчёте такой физики в кадре при 60ФПС речи быть не может. Одна деформация детали считается мощностью всего процессора в течение нескольких секунд. Следовательно, полноценно объёмно порезать объект в бою современная видеокарта не сможет при всём желании, потому что одна операция разрезки одной модели может длиться несколько секунд. Когда в играх вы разрезаете мечом противника пополам, там обычно используется обман, вы бьёте противника мечом и одна три де модель заменяется на две, по заранее прописанному сценарию, фактического расчёта процедуры разрезки не происходит, потому что это слишком сложно. Однако очень хотелось бы получить подобные возможности, и это пригодилось бы не столько в играх, но и в военном деле, а также в сложных инженерных имитациях, которые сегодня выполняются на суперкомпьютерах и очень ограничены. Я имею ввиду имитацию разрушения крупной системы по методу конечных элементов, например чтобы достоверно сымитировать на компьютере аварию морского судна и возникающие нагрузки. Также современные компьютеры очень плохо и с трудом рассчитывают поведение сложных осязаемых трёхмерных систем, например расчёт движения электронов в атоме весьма непростая задача, если это не псевдо графика, а полноценная симуляция движения частиц, и иногда выполнить такую симуляцию можно только на супер компьютере, потратив на это много времени. А такие задачи нужны для очень разных целей, в том числе для расчёта на прочность кристаллической решётки, или математического моделирования поведения вещества в экстремальных условиях, которые дорого получить в лаборатории. А ещё хуже если результат неизвестен, и чтобы нащупать нужные условия надо провести много симуляций, подставляя разные параметры, пока не получишь нужное. Для современных компьютеров это трагедия. Ну, то есть мы видим, что современные компьютеры со своими расчётами не всесильны, и есть куда расти. На самом деле все чудеса современной три де графики и физики в компьютерных играх, это в основном псевдомеханизмы, обманным путём имитирующие изображение и физику, без фактической достоверной имитации, когда всё выглядит достоверно, а на самом деле компьютер схалтурил чтобы получить картинку более лёгким обманным путём, но пользователь всё равно не заметит и не оценит, ему главное чтобы игра работала. Однако когда компьютеры сталкиваются со сложными инженерными задачами, расчётами различных балок, и не дай бог таких балок несколько, а само устройство сложной формы, то это тяжело.


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

Следует уточнить, что современные компьютеры развиваются примерно с начала 1940ых годов, то есть уже 85лет, за это время было создано много этапов разработки этих устройств, много поколений, они усложнялись и дорабатывались шаг за шагом, современный компьютер не был разработан в один короткий этап. То есть полный цикл создания современных компьютеров был осуществлён примерно за 85 лет, и было выполнено много промежуточных этапов создания процессоров. И да самые первые процессоры были невероятно примитивными и кривыми по сравнению с современными. Однако даже первые компьютеры созданные в 1940ые годы уже иногда имели миллионы деталей, то есть были очень сложными, но всё равно кривыми. Видеокарты создавались на базе процессоров и оперативной памяти, и их создание от самых первых до современных также заняло около 40лет, то есть никто не создал видеокарты и готовый современный три де двигатель в один шаг. И глупо было бы надеяться, что можно создать современную видеокарту в один этап, не имея никаких предыдущих наработок, опыта, оборудования и готовых отработанных образцов. Это очень сложное устройство создание и разработка, которого заняла много лет и осуществлялась последовательно в много этапов шаг за шагом. Стоит ли говорить о том, что и процессор и видеокарта в современном виде были созданы бессмертным по имени Год, который был гением своего дела и позже в середине 1990ых был убит. Я говорю это к тому, что я не верю, что рядовые инженеры людей смогли бы выполнить эту задачу и создать процессор и видеокарту без него. Люди очень часто знают устройство, но не понимают его работы и не могут его улучшить, а создание процессора потребовало радикальных улучшений конструкции в много этапов, раз за разом, шаг за шагом.

Я подвожу вопрос к тому, что имитатор структурно ещё более сложное устройство, чем процессор или видеокарта, его создание требует сложных методов математики, трёхмерного мышления и глубокого понимания микроэлектроники и принципов её работы, которых сегодня нет ни у кого, и поэтому создание такого устройства будет непростой задачей. Создавать имитатор придётся с нуля, потому что ранее таких устройств просто не было, и придётся пройти весь путь от начала до конца также, как процессоры создавали с 1940ых годов, то есть не стоит надеяться, что имитатор созданный на первом же этапе будет эффективным устройством на уровне современной видеокарты. Создание имитатора непростая задача, работать над которой должны гениальные инженеры, и даже им вряд ли удастся создать его в короткие сроки, скорее всего первые устройства ещё долго будут кривыми и примитивными, подобно компьютерам 1950ых годов, сравнение самое точное. Причём я думаю, сейчас многим даже не понятны принципы создания такого устройства, потому что до сих пор существует только самый примитивный базовый вариант устройства в простейшем исполнении, а разработка более сложной версии требует большого количества мозгов. Поскольку придётся решать инженерные задачи, которые раньше никто не решал и придумывать новые гениальные инженерные решения, и я не уверен, что команда разработчиков готова к этому и обладает достаточной квалификацией. Существует миллион сложностей и нюансов, которые придётся решить и учесть, и только после этого устройство заработает. Простой пример, к 1955ому году над созданием компьютеров работали уже 15 лет, но едва ли компьютеры тех лет можно сравнить хотя бы с ИНТЕЛ4004 выпуска 1971ого года, что уж говорить про современные. Электронно-лучевую литографию изобрели в 1965ом году спустя 25лет после начала работ над компьютерами, осознаём да? Так вот имитатор никто никогда не создавал, а те люди, которым было поручено его разработать на самом деле гораздо тупее Года и даже тупее меня, и толком вообще не понимают что делать, и возможно даже не горят желанием делать эту хрень, потому что не понятно, как и зачем. Обидно, неприятно, но правда, принимаем к сведению и работаем дальше. При этом имитатор как устройство, в общем-то, сложнее бинарного процессора. Про то, что процессоры могут быть не бинарными, а, например, на тетра логике и сложнее, я вам рассказывал давно, но для меня весьма сомнительно, что были достигнуты успехи в области разработки реально работающих процессоров на тетра логике. Я просто к тому, что микроэлектронике Земли есть, куда качественно расти, и не только по пути замены материалов позволяющих увеличить скорость процессора, но и по пути сложности самих логических схем. И я не уверен, что сейчас мы способны расти, а надо. И вот тут встаёт вопрос о более умном и качественном потомстве, а вы уверены, что современные инженеры в принципе не способные создать ни тетра процессор, ни имитаторы, являются сверхквалифицированными специалистами, как они о себе думают? Вспоминаем мой код 3Д двигателя, что я презентовал недавно, и осознаём, что это лишь частный пример сложных программ и микроэлектроники, то, что мы имеем сегодня далеко не потолок, и это всё можно значительно усложнить и улучшить, был бы мозг. Просто немного обидной правды, необходимой чтобы всё же выполнить задачу, хотя бы когда-нибудь.

Тем не менее, развитие имитаторов необходимо и нам придётся начать их разработку с самого начала, как самые первые компьютеры 1940ых годов, потому что имитаторы никто и никогда раньше не создавал, и нет никаких наработок на создание этих устройств, никакого опыта и понимания как они должны быть устроены. Вы ранее сказали мне, что первые опытные устройства работают супер примитивно и едва строят кривые деревянные фигурки, которые с точки зрения практики просто НИКАК не могут эксплуатироваться. Но я хочу сказать, что именно так и должно быть, это нормальный результат, учитывая то, что вы начали с самого начала, а инженеры, которым поручили задачу это не Год и даже не я. То, что они не сделали сразу устройство, имеющее уровень совершенства аналогично современным топовым видеокартам и процессорам это абсолютно нормально, им пришлось начать с нуля, вступив на абсолютно неизвестное им болото. При этом признаю сразу, имитатор как технология в принципе сложнее чем 3Д видеокарта или процессор, требует более сложных алгоритмов, математики и понимания создания трёхмерных конструкций, то есть имитатор в принципе сложнее. Следовательно, и сделать его с первого захода вряд ли получится, и то, что первые образцы очень кривые это абсолютно нормально и ожидаемо. И очень может быть, что развитие этих устройств займёт много лет, подобно тому, как развивались компьютеры, но это не значит что такое работоспособное устройство в принципе невозможно. Тем более что по вашим данным кривая деревянная версия имитатора кой как уже работает, хотя при этом она абсолютно не функциональна.

Итак, начнём, в простейшем случае имитатор это 1000х1000х1000чипов, каждый из которых является пикселом. Чипы расположены трёхмерно, и если так очень примитивно, то если выключить все чипы, поставив в режим невидимости, скажем, позиция НОЛЬ, и включить один чип с заданными координатами с заданным цветом, то мы получим цветную точку, которая висит в трёхмерном пространстве и имеет систему координат. Допустим, наша задача построить кадр, скажем для видеокарты. Я думаю, несложно догадаться, что изображение двумерно, и в простейшем варианте должно проецироваться на некоторую камеру, которая имеет разрешение например тоже 1000х1000 точек, то есть такое плоское проецирование изображения в принципе позволяет нам что-то увидеть. Чтобы увидеть, мы используем принцип эхолота, когда луч посылается от картинки камеры, к противоположной стенке, в простейшем случае перпендикулярно, и мы видим пиксел. Когда луч напарывается на первый же непрозрачный пиксел, он просто проецирует его на картинку обратно. Если пиксел полупрозрачный, его цвет запоминается и луч летит дальше, таким образом, полупрозрачных слоёв будет множество, а в отличие от современной видеокарты они будут строиться правильно, на современных видеокартах есть большие проблемы с дистанцией между полупрозрачными слоями, и эту проблему не решили за много лет. Потому что на изначальном 3Д движке Года полупрозрачных слоёв не было, и господа инженеры/программисты добавляли их сами в 1990ые годы. Преимущество такой схемы перед видеокартой в том, что мы можем одинаково производительно спроецировать любое количество полупрозрачных слоёв, и абсолютно неважно, сколько слоёв изображения позади последнего пиксела, потому что в кадре видно только видимый слой. На современных видеокартах, если наложить много полигонов друг на друга в много слоёв, будет плохо, видеокарта скажет КРЯ.

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

Вы могли заметить, что попытка построить трёхмерную модель в кадре может быть очень тяжёлой, если включать каждый микрочип/пиксел извне, так как это делает обычная видеокарта, и для построения осязаемой, не полой модели, придётся включить извне миллионы пикселей, и это очень ресурсоёмкая задача, если выполнять её по идиотски и в лоб. Поэтому три де модели в имитаторе сохраняются также, как 2Д картинки-текстуры в моём 3Д двигателе. Вы могли заметить, что там используется принцип, когда модель строится из точки или нескольких точек. Модель записана следующим образом. Возьми точку Х У Зет, построй из неё луч длинной 10 пикселей, и спроецируй перпендикулярно лучу из каждого пиксела ещё по лучу в 10 пикселей, после чего мы получим 10х10пикселей, которые можно спроецировать ещё раз на 10 пикселей из каждого пиксела и будет внутри трёхмерной области кубики 10х10х10 пикселей, и можно задать ему цвет, и не только цвет, но и температуру, мехсвойства материала и многое другое. Код на проецирование выполняется внутри имитатора его микрочипами, он не управляется извне, извне посылается только изначальный код/программа построения всей модели из точки в начальный микрочип, дальше модель строится по программе, что позволяет имитатору самому и очень быстро строить объёмную не полую модель, и не важно, сколько много внутри неё точек, потому что каждый микрочип имитатора делает свою работу сам, без участия центрального процессора извне, ничего не нагружая и очень быстро. Аналогично строится любая другая три де модель любой формы, по программе можно закодировать что угодно. В аналоге 3Д макса для построения моделей также используются геометрические примитивы или готовые шаблонные команды на всякое. То есть в 3Д редакторе и фотошопе всё будет рисоваться точно также как сейчас, мучаться с кодом не придётся. Мы не можем просто запомнить все пиксели 3Д модели, потому что их слишком много, и это слишком большой объём информации, который будет очень тяжёл, и обрабатываться медленно. Мы строим начальную точку, и пишем код, как из этой начальной точки строятся все последующие пикселы, это не сложно, а работает быстро. Мы отдаёт команду на пиксел с координатами 15,15,15 и из этой точки происходит построение кубика, а сам процесс построения кубика осуществляется силами имитатора. Наш процессор кидает в микрочип имитатора лишь изначальную точку координат, и несколько простейших программ построения, что из чего растёт и в какую сторону, это может занять 500байт или 7кбайт, но не много, всё остальное построение выполняется силами имитатора. Таким образом, имитатор, не тратя мощность процессора компьютера, может построить объёмную не пустотелую модель, процессор тратит на построение модели очень мало ресурсов, даже если это крупная объёмная модель, состоящая из большого количества точек. При этом мы можем сразу задать цвет модели, и этот цвет даже может быть разным, и можно натянуть на кубик текстуру, меняя цвет пикселей, а если спроецировать этот кубик на кадр, мы получим трёхмерный кубик с текстурой. Однако такое проецирование не будет учитывать расстояние до объекта, так как лучи будут перпендикулярно параллельны и для три де построения это не совсем годится. (в случае если модель в дальнейшем надо будет разрезать пополам, то можно написать алгоритм запоминающий линию разрезки по крайним пикселам, что позволяет резать модель в кадре и формировать новые уже разрезанные три де модели в следующий кадр, что в обычной видеокарте невозможно)

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

Решение данной проблемы возникало у меня в моём 3Д двигателе, который вы все видели, в частности при нанесении полигона на 2Д холст, линия полигона заданной длины может быть кривая, а не под углом 90 градусов, и тоже вываливаются пикселы, а другие накладываются друг на друга. Всё дело в том, что для поворота трёхмерной сетки на произвольный угол относительно неподвижной 90градусной системы координат, длинна ячейки сетки, согласно простейшим законам тригонометрии должна составлять не более 0,7071 клетки, а лучше ещё чуть-чуть поменьше, чтобы не было артефактов. В случае с три де имитатором, чтобы решить ещё ряд проблем, которые возникнут в дальнейшем, я бы советовал взять 0,33. То есть каждый пиксел имитатора должен быть соединён с соседним пикселом не одним каналом связи, не одним проводком, а 9 проводами в формате 3х3. В этом случае вы сможете создать трёхмерную сетку заливки с разрешением 3000х3000х3000 точек, в то время как само количество микрочипов в имитаторе будет 1000х1000х1000 отображаемых залитых по итогу пикселей, такие сложности нужны для правильного и безглючного поворота любой фигуры на заданный угол. То есть, грубо говоря, каждая фигура и вся система три координат имеет сетку заливки 3000х3000х3000 а количество пикселей на имитаторе 1000х1000х1000, в этом случае проблем с поворотами не будет. Все пикселы что накладываются друг на друга, формируют один пиксел, и программа сама решит какой пиксел будет в зависимости от написанного кода. А заливка внутри фигуры будет строиться перпендикулярным проецированием любого пиксела внутрь фигуры до упора в другой пиксел. Такая система позволит повернуть кубик на любой угол внутри имитатора, и правильно залить его изнутри пикселами, силами самого имитатора. То есть вы сможете увидеть в кадре текстурированный кубик под любым углом.

Для того чтобы, расстояние до объекта увеличивалось, а всё не проецировалось одинаково, то есть, чтобы экспозиция была трёхмерна, и тот объект, который дальше казался меньше. Нужно сделать следующее, в простейшем случае это делается очень просто. Сама сцена должна быть не кубиком 1000х1000х1000 а иметь более сложную форму кадра, то есть, грубо говоря, камера находится в вершине усечённой пирамиды, разрешение камеры 600х600 пикселей, а противоположная стенка например 1200х1200 пикселей. То есть мы имеем систему, где удалённый объект в 2х2 раза меньше, чем тот, что близко, это и есть визуальная имитация расстояния. Однако при такой системе полноценное проецирование уже невозможно. Мы не можем спроецировать картинку 1200х1200 на 600х600, в самом простом идиотском и примитивном варианте, удалённые пикселы просто вываливаются, и это заложено в архитектуру самого устройства, то есть буквально мы видим дальнюю стенку в разрешении 600х600, а каждый второй пиксел не видим, то есть точнее один из 4х видим и остальное нет. Причём по мере приближения объекта к камере разрешение уменьшается, и количество вываливающихся пикселей уменьшается тоже. Это некачественное решение сжатия картинки используемое в пэйнт. В самом простом варианте можно сделать так. Но для того чтобы всё смотрелось лучше, есть чуть более сложный и качественный способ, каждый пиксел имеет цвет РГБА(255,255,255,255), это белый, или РГБА(255,0,0,255) красный, всё примитивно, когда надо объединить четыре пиксела в один, делим каждую цифру у каждого пиксела на четыре, складываем, округляем и получаем пиксел суммарного цвета, для более чёткого сложения пропорцию можно привязать к геометрии а не брать всегда одну четвёртую. Таким образом, мы с вами создали простой имитатор, в нём, расстояние изменяется от камеры, любой объект, который дальше от нас, будет выглядеть меньше. При этом мы видим проекцию. Мы можем построить любую три де модель кодом так, как я описал, и, используя координатную сетку, 3000х3000х3000 мы можем без проблем повернуть любую три де модель в каждом кадре на любой угол, с погрешностью заливки не более 1 пикселя, что для игрока визуально незаметно. (качество картинки зависит тупо от разрешения, которое на самом деле может быть куда больше чем 1000микрочипов в грани, и в принципе даже куда больше чем 8к и даже все 128к что современным видеокартам вообще невозможно никак) При этом, мы, заливая фигуру, указали материал фигуры, его температуру исчезновения, при которой материал исчезает или превращается в газ или жидкость, мы указали прочность, твёрдость и текучесть, мехсвойства материала прямо в кадре игры. Иными словами имитатор может рассчитывать течение жидкости. Также на основании объёмной модели, на имитаторе не сложно оценить любую модель как препятствие, то есть объект будет осязаемым. Всё шикарно, всё работает, и намного лучше, чем видеокарта. Дальше надо просто сделать и доработать устройство. Более точное инженерное решение уже требует от меня участия в проекте, и да, если бы я делал всё сам и своими руками, вы, вероятно, удивились бы какими методами и алгоритмами я решаю проблемы создания имитатора. Нет ничего невозможного. Это выполнимо. Да это куча сложных инженерных задач, и задач программирования, их надо решать, но они решаемы. И топовый имитатор лучше, чем видеокарта при построении три композиций. Если что непонятно, давайте обсудим. Не знаю насколько я или вы не в теме, но сделать это возможно. Если между нами нет понимания, выходите на связь.