Life Engine - NextGen C++ multirender 3D graphics and game engine
Life Engine - NextGen C++ multirender 3D graphics and game engine
В качестве расширения своего никем не виданного движка начал пилить трассировщик пути. Снова. Но на этот раз на GPU (CPU в прошлый раз весьма разочаровал :) ).
Пока продвижений мало, т.к. почти не занимался GPGPU, посему пока смог сваять что-то очень простое:
UPD: добавил трассировку треугольников )
Ссылка
19 мая 2013
Всё началось с того, как у меня что-то произошло с матрицей. То ли отклеились шлейфы инвертора то ли внутри самой матрицы произошло расслоение, однако она меня стала часто раздражать тем, что изображение застывало и расплывалось и пока снизу на матрицу не надавить (и поджать чем-нибудь) она не работала.
Ноутбук HP Pavilion DV6 6179er. Исходная матрица: AU Optronix B156XW02 V2, разрешение 1366x768. Достала меня эта матрица совсем и решил я купить новую, благо магазин рядом и в наличие их разных много ) Однако немного подумав решил, что мне _мало_ такого разрешения, мало текста на экране помещается и вообще очень неудобно. И после этих мыслей решил брать FullHD матрицу раз уж всё равно взялся менять.
Погуглил, такие матрицы есть (FullHD, 15.6", разъём 40 pin, расположен слева). Пошёл в магазин и купил матрицу B156HW01 V5. И грянул фейл...
Подключил матрицу, запустил... завелась! Надо же. Вот только радовался не долго - изображение на матрице выводится через пиксель. Т.е. в строке идут по очереди: белый пиксель, пиксель картинки и т.п. Получилась картинка в вертикальную белую полоску >_<
img
Недолго погуглив на таком суровом дисплее узнал, что хоть разъёмы шлейфов и одинаковые, количество проводов идущих по шлейфу к его разъёму может варьироваться. Для HD дисплеев используются одноканальные LVDS шлейфы, однако их пропускноq способности не хватает для FullHD картинки. Для таких дисплеев нужны 2 канальные LVDS шлейфы. Я посмотрел распиновку кабеля - действительно, на HD идут 4 пары проводов, на FullHD идёт 8 пар! Потому у меня половина данных и не выводится на экране ))
Пока я этот вопрос и не решил, пишу с сурового дисплея. У меня сейчас 2 варианта: или я допаяю провода или найду FullHD шлейф, который найти для моего ноута оказалось адски сложно, собсно, я так его и не нашёл. Ни 1 похожего..... (
Продолжение следует...
Эпизод 2
Шлейф я не нашёл! И найти его шансы в общем не велики... Но.. не сидеть же с полосатым дисплеем! Что делать? Паять! ) И паяние начнёмс с разборки ноутбука:
Определить где тут шлейф матрицы не составляет труда, вот он вставлен в системную плату:
Недолго поковырявшись во внутренностях компа выдернул весь кабель, собсно вот он:
Это оказался на радость мне обычный жгут проводов, а не суровый непаябельный шлейф ^^ Коннекторы со стороны матрицы и видеокарты немного отличаются, однако разобрать их не составляет труда. Их корпус состоит из 2 защёлкивающихся друг в друга металлических половинок и отогнув небольшие крепления на этих половинках легко смог разобрать коннекторы.
Вот коннектор со стороны видяхи
А вот это коннектор со стороны матрицы
Как можно заметить в шлейфах "не хватает" довольно много проводов (не припаяны вообще). И именно их надо добавить. Одноканальные LVDS шлейфы используют 4 пары проводов для передачи данных о пикселях, FullHD же требует бОльшей пропускной способности, для которого делаются двухканальные шлейфы, в которых для передачи данных о пикселях используется 8 витых пар проводов. Насколько я понимаю - все более-менее современные мобильные видяхи поддерживают двухканальный режим передачи данных и его можно вполне просто использовать. Для этого допаяем недостающие 4 пары проводов!
Важно! Пары проводов реально должны быть парами, т.е. их надо качественно скрутить вместе! При помощи радиоуправляемого вертолёта и незамысловатых операций я сделал витые пары:
Допускать спаек на проводах не стоит, т.е. провода должны быть качественными и цельными, максимально тонкими и желательно не в лаке а в какой-нибудь полимерной изоляции или ещё в чём т.к. там, где провод переходит из от основного корпуса в корпус дисплея есть подвижное место, со временем лак может потрескаться и провода замкнутся. Это фейл конечно же.
итак, скручиваем 4 пары, лудим краешки проводов (1 мм достаточно) и готовимся паять, что куда припаивать - на картинках ниже:
Эпизод 3. Восстание машины
Итак, провода припаяны, шлейф вроде как готов! Проложил шлейф по ноутбуку обратно, собрал всё, запустил - О ДА! FullHD С первого раза завёлся! Белые колонки пикселей пропали, изображение стало гладким и клёвым, но радовался я не долго. По мере продвижения загрузки ОС изображение на дисплее менялось и тут я заметил, что на некоторых градиентах пиксели..шумят!!! Шумели они всё на тех же столбцах (которые ранее были белыми). Очевидно, что шумят вновь добавленные пары. LVDS использует низкие напряжения для передачи данных и даже небольшие наводки могут подгадить картинку, сдвинув уровни в проводах незначительно в абсолютных значениях, но значительно в относительных.
Пришлось разобрать крышку дисплея снова ( Что делать - это итак понятно, необходимо заэкранировать новые пары проводов. Для этого я использовал простую фольгу от только что доеденной шоколадки ) Обмотал ей провода по всей длине (каждая пара отдельно) и зафиксировал их скотчем на крышке ноута чтобы они не болтались.
Запустил компьютер и... о чудо! Картинка великолепна! ^______________^
Собсно, FullHD на HP Pavilion dv6 6179er
Ссылка | Комментарии [57]
7 апр 2013
Времени на возню с железками очень мало в последнее время, что весьма огорчает, но оно есть и я его использую ) Т.к. с ARM я вообще не работал, то стартонуть даже получилось не сразу, т.к. не имел даже понятия с чего стартовать :D
Начать я решил с поисков тулчейна для разработки. Компилеры разношёрстные конечно есть ) Но что выбрать и какой IDE?
Нашёл следующие IDE:
Keil, IAR, CooCox
Первые 2 оказались платными да и их интерфейс показался мне не очень дружелюбным. Зато CooCox приятно удивил! Основан он на Eclipse и заточен для разработки под ARM. В нём встроено ооочень удобное добавление в проект модулей библиотеки CMSIS! Нажал галочку - файлы добавились в проект! Инклудь и юзай - красотень же ) Там есть и модули инициализации камня и модули работы с переферией и т.п. плюшки, есть даже своя RTOS !!!
Первая компилляция проекта отвалилась с ошибкой, что gcc тулчейн не настроен! С IDE он само собой не идёт ) Поэтому его сначала надо поставить отдельно! http://www.coocox.org/CoIDE/Compiler_Settings.html
После чего конечно установить и выбрать в настройках компилера CooCox IDE. И теперь всё шикарно собралось! Залилось! И даже заработало ))
Но вот дебаггер не завёлся : \ При запуске процесса дебага появлялись 2 ошибки, одна из них говорила, что tasklist.exe не был найден и не может быть запущен. В PATH он действительно не виден, однако лежит он в C:\Windows\System32\ - достаточно добавить этот путь в PATH и всё заведётся )
Качество дебаггера я ещё не успел нормально проверить, но то, что он работает - это факт! ^^
В комментах к этому посту буду рассказывать о дальнейших ресёрчах, проведённых на моём борде STM32VLDISCOVERY. Первым делом я хочу подключить и прочитать/записать EEPROM память, вторым делом - найти дисплей от мобилы какой-нибудь и подключив к GPIO платы вывести картинку.
UPD: Удача с EEPROM )
Таки разобрался как работать с I2C на этом контроллере! Сделал чтение и запись - побайтово и постранично ) Немного правда ещё допилить надо но в общем всё клёво весьма!
Использовал 24C04WP микруху памяти на 512 байт (2 блока по 256 байт). Не сразу вдуплил как выбирать нужный блок памяти в ней, но таки всё получилось!! На очереди работа с дисплеем ^^ Надо с какой-нибудь мобилки бы его снять.
Ссылка | Комментарии [6]
13 дек 2012
На днях приобрёл себе 2 замечательных борда - Raspberry Pi и STM32VLDISCOVERY!
Raspberry Pi по-моему не нуждается в представлении : ) Купил для более извращённого оттачивания скиллов программирования дрова под линукс и для оттачивания скиллов собирания своих девайсов : )
Основные задачи для Raspberry Pi - освоить линукс моим движком, в частности OpenGL ES 2.0, а так же реализовать подобие 4-ногого робота (думаю насчёт двигателей пока), ещё, собсно, помочь мне дальше постигать черезжопно написание дров : )
Сразу после покупки передо мной стало несколько проблем - нечем запитать борд (питание через micro USB, 5.0V, 700mA) : \ У меня ни кабеля ни блока питания! Вторая проблема - отстутсвие дисплея у меня. Да, нету его! Потому что у меня ноутбук :D Без каких либо видео входов. Печаль ( Но разве это проблема? Я привык уже работать через консоль! Чтож, решил подключить консоль ) А куда??? Тут и её нет.
Посмотрел по распиновке платы - выведен ли наружу UART? И он действительно выведен! Ура! ) Rx, Tx, GND, больше, собсно, ничего и не надо ) Вот только у меня на ноуте нет COM порта :D Снова проблема. Хотяяя.. ну какая же это проблема? Нет? - Будет!
Взял конвертер FT232RL и сделал себе виртуальный COM-порт через USB, который теперь шикарно работает! На данный момент я смог загрузить Raspberry Pi, подключиться через свой COM порт и даже написать простую программу прям в консоли в nano :3
STM32VLDISCOVERY я взял ради изучения ARM архитектуры, точнее разработки под неё ) Именно на низком уровне, без ОС. Оказалось тут всё сложнее, чем AVR, но это всё равно не проблема, разберусь )
На борту у него 32 разрядный ARM контроллер STM32F100RB, Cortex™-M3, 24 MHz, 128 Kbytes of Flash, 8 Kbytes of SRAM.
Порадовало начилие прошивальщика и отладчика на борде и всё это через 1 mini USB порт.
В общем приобретением очень доволен, надеюсь выкроить для них время и сделать что-нибудь интересное )
Ссылка | Комментарии [32]
7 дек 2012
Ещё небольшой апдейт софтрендера - пофиксил баги рендера в текстуру, пофиксил баги в шейдерах, написал простой рендер "океана". Пока тут ничего интересного - просто текстура отражений рисуется и натягивается на плоскость. Чуть позже сделаю геометрические волны ну и волны по текстурам нормалей конечно ) Вообще планирую сделать нормальную презентабельную демку с океаном (отражения, преломления и т.п. фичи).
Пока вот такой скрин. ФПС дико мелкий, но внутри рендер вообще не оптимизированный, много брутфорсом сделано и всё без SSE )
upd:
добавил поддержку ввода и в Windows. Написал класс камеры и контроллер свободного перемещения по сцене. Можно полетать теперь вокруг ландшафта, добавил семплинг текстуры отражений с учётом нормалей воды. Всё дико кривое и адски тормознутое пока, ну и ладно )
Ещё небольшой апдейт софтрендера - пофиксил баги рендера в текстуру, пофиксил баги в шейдерах, написал простой рендер
Ссылка | Комментарии [28]
5 ноя 2012
Если приглядеться, то на прошлом скрине ландшафта можно увидеть суровые баги - дырки в геометрии. : \
Пофиксил их, пофиксил ещё другие, вернул альфа блендинг, правда теперь у меня опять код снова неоптимизированный и без SSE ) Но это временно. Зато полностью рабочий ^^
upd:
Вернул шейдеры, пока ничего с ними не делал - лень ) По-позже выложу демку. Пока просто отрендерил ландшафт с директ лайтом.
upd2:
Добавил ClipPlane-ы. Сначала хотел просто в шейдере клипать и не выделываться, но подумав понял, что не прокатит ) Точнее прокатит, но будет медленней работать, т.к. тест будет для каждого пикселя, а сейчас плейнами режется геометрия )
Ссылка
31 окт 2012
Посидел немного над софтрендером и таки привёл его в юзабельный вид )
0. НАКОНЕЦ-ТО руки дошли сделать frustum clipping! :) Теперь всё рендерится абсолютно корректно. Клиппинг производится в 4D clip space по 7 плоскостям.
1. Пофиксены различные баги
2. Проект перенесён в IDE QtCreator и портирован под линукс, в котором и идёт разработка.
3. Дописан класс окна под линукс и класс таймера.
4. Добавлена простая система ввода (2 класса)
5. Добавлена поддержка индексированной геометрии (собсно ради кеша и памяти)
6. Добавлен вершинный кеш в пайплайн растеризатора!Теперь если вершина лежит в кеше, то оттуда она и берётся и не трансформируется снова и снова ) Красота.
7. Добавлен альфа-тест и туман, введён FFP режим билда (когда шейдерные фичи блокируются и включаются FFP, ещё добавил Ambient освещение (включение, цвет).
8. Пофиксил семплинг текстур и прикрутил его в FFP режим.
Ну и перенёс разработку на Bitbucket.org ! Под Mercurial. Очень радует своей отличной работой, всё клёво. Репозиторий общедоступен, но я не оставлю здесь на него ссылку, т.к. там сейчас дичайший говнокод и смотреть его нет смысла, как и юзать, ибо там ещё и FPS пока никакущий.
Ссылка | Комментарии [4]
15 окт 2012
Пилю потихоньку редактор материалов у себя в движке. Хоть и уверенно, но, блин, адски медленно :D Буквально по несколько строк в день. Собсно вот такая кака пока получается.
На GUI слишком жестоко не плеваться, я его весь сам пилил, он ещё жутко кривой и некрасивый. Потом доделаю (с)
Ссылка | Комментарии [37]
17 мая 2012