ECS 1 903 Опубликовано: 18 марта, 2017 (изменено) Команда для установки: pastebin run LcurLpLE Инсталлер загрузит массу необходимых библиотек, а само приложение имеет название "3DTest.lua", загружаясь в текущую директорию. Немного истории: Сидели мы зимними вечерами с товарищами, кодили всякую чушь - и пришла в голову мысля о потенциальной возможности рендера реалистичной 3д-графики на всем нам известном моде. Попотели пару недель, и в итоге получилось вот это. Прежде всего нами была написала библиотека для рендеринга статичных сцен с поддержкой перспективной коррекции, динамического освещения, текстурирования и z-буферизации кадра. Пришлось вспоминать школьный курс векторной математики и немного гуглить, но в целом ничего сложного тут нет. По сути у нас получился упрощенный OpenGL, оптимизированный для работы на низкопроизводительных машинах. Далее мы написали сам игровой движок с громким названием PolyCatEngine, позволяющий создавать произвольные меши любых форм с индивидуальными координатыми системами и свойствами материалов, реализующий виртуальную камеру и триангулярный рейкастинг. Под самый конец мы реализовали воксельную структуру а-ля Minecraft, симулирующую кубический мир с возможностью установки и удаления "блоков". В качестве финального штриха мы добавили приятный пользовательский интерфейс для взаимодействия с возможностями движка, работающий на ООП-стилизованной библиотеке GUI. Сама отрисовка графики реализована на нашей уже выложенной на форуме библиотеке тройной буферизации. Вот несколько примеров визуальных возможностей движка: Как результат мы имеем довольно приятную картинку и сносную производительность на мощных серверах (около 7 реальных FPS в зависимости от конкретной машины). Программа требует всего лишь 1.5 МБ оперативной памяти, однако рекомендуется запускать ее на серверных стойках с 4 планками памяти уровня 3.5 для получения максимального комфорта и увеличения максимального количества объектов сцены. Все сырцы доступны на GitHub, прикладываю основные ссылки для интересующихся: Библиотека DoubleBuffering Библиотека OpenComputersGL Библиотека PolyCatEngine Библиотека Vector Библиотека Matrix Библиотека GUI Библиотека Windows Сама программа Возможности программы: С помощью клавиатуры осуществляется навигация камеры, с помощью мыши устанавливаются и удаляются блоки в мире. В правой части экрана вы можете выбрать различные опции рендера - к примеру, включив полигональную сетку или подсветку вершин. Также вы можете выбрать цвет текущего устанавливаемого блока: Имеется возможность добавления неограниченного количества источников освещения, каждый из которых имеет индивидуальные параметры дистанции шейдинга и яркости: В качестве приятного бонуса имеется возможность мониторинга расхода оперативной памяти и изменения цвета фона сцены. В левой части экрана отображается отладочная информация и описание горячих клавиш программы: Напоследок добавлю, что результирующая производительность сильно зависит от пинга и мощности сервера/домашнего ПК игрока, так что шокирующих результатов от этого ждать все же не стоит. Как бы то ни было, желаю вам приятного пользования. Изменено 18 марта, 2017 пользователем ECS 15 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Laine_prikol 48 Опубликовано: 18 марта, 2017 Эпично, конечно опенкомутерс не предназначен для таких вещей Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ECS Автор темы 1 903 Опубликовано: 18 марта, 2017 Эпично, конечно опенкомутерс не предназначен для таких вещей Сложно сказать наверняка, для чего он предназначен. Имхо, если софтина пашет с достаточной производительностью, не вызывая нервного тика - то она вполне пригодна для мода. Хотя тут, конечно, можно довольно долго философствовать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Quant 442 Опубликовано: 18 марта, 2017 3D на "микроконтроллерах" - это круто. Можно отказаться от проектора и использовать обычный монитор. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 154 Опубликовано: 18 марта, 2017 3D на "микроконтроллерах" - это круто. Можно отказаться от проектора и использовать обычный монитор.Разве микроконтроллеры умеют работать с периферией? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
1Ridav 1 049 Опубликовано: 18 марта, 2017 Реализация порадовала, мне нравится! Шейдерные скрипты поддерживаются? Имею в виду векторные и пиксельные шейдеры Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Doob 2 749 Опубликовано: 19 марта, 2017 (изменено) Если загружать мир и необходимые параметры, разбивать кадр на несколько частей и рендерить на нескольких компах, тогда не так сильно будет влиять ограничение процессоров и разрешение можно сделать больше, хотя бордюры у мониторов будут все портить. Но как по-мне, эффективней рендерить на реальном сервере, подавая готовую картинку опенкомпам через интернет карту. Таким образом, опенкомп будет освобожден от уймы вычислений и занят только отрисовкой. Чтобы повысить интерактивность можно снизить пинг - производить вычисления на той же машине, на которой работает MC сервер. Изменено 19 марта, 2017 пользователем Doob Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ECS Автор темы 1 903 Опубликовано: 19 марта, 2017 Реализация порадовала, мне нравится! Шейдерные скрипты поддерживаются? Имею в виду векторные и пиксельные шейдеры Не-а, увы. Вершинные шейдеры можно без проблем запилить, на производительности не сильно скажется. С пиксельными уже беда, даже не смотря на то, что в плане оптимизаций тут вылизано все, вплоть до каждой мат. операции. Если загружать мир и необходимые параметры, разбивать кадр на несколько частей и рендерить на нескольких компах, тогда не так сильно будет влиять ограничение процессоров и разрешение можно сделать больше, хотя бордюры у мониторов будут все портить. Но как по-мне, эффективней рендерить на реальном сервере, подавая готовую картинку опенкомпам через интернет карту. Таким образом, опенкомп будет освобожден от уймы вычислений и занят только отрисовкой. Чтобы повысить интерактивность можно снизить пинг - производить вычисления на той же машине, на которой работает MC сервер. Пробовал, и не я один. Объединение компов в расчетный кластер невозможно по той лишь причине, что низкая скорость обмена данными между компами не компенсируется увеличенной производительностью. Как вариант - можно использовать постоянное TCP-соединение для пересылки информации на внешний сервер и наоборот, это будет значительно быстрее. Аналогичная ситуация с низкой скоростью передачи возникает через обработку информации на внешнем сервере. Кроме того, не забываем, что основная нагрузка не в скорости расчета местных ЦП, а в сильно ограниченных ресурсах GPU. Частично их компенсирует тройная буферизация, но все же магии тут ждать не стоит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах