Войти
Life Engine

Life Engine - multirender 3D graphics and game engine written in C# and SlimDX


СтатьиФорумИнфо

Life Engine - NextGen C++ multirender 3D graphics and game engine

Статьи

Конкурс компьютерных игр в жанре Horror Shooter-Contest x2
Апокалиптический конкурс Космических 3D FPS Шутеров [coming 2012]
Правила конкурса RPG

Блог

GPU Path Tracing

В качестве расширения своего никем не виданного движка начал пилить трассировщик пути. Снова. Но на этот раз на GPU (CPU в прошлый раз весьма разочаровал :) ).

Пока продвижений мало, т.к. почти не занимался GPGPU, посему пока смог сваять что-то очень простое:
Изображение

UPD: добавил трассировку треугольников )

Изображение

Ссылка
19 мая 2013

Попытка заменить HD марицу ноутбука на FullHD: Hp Pavilion DV6

Всё началось с того, как у меня что-то произошло с матрицей. То ли отклеились шлейфы инвертора то ли внутри самой матрицы произошло расслоение, однако она меня стала часто раздражать тем, что изображение застывало и расплывалось и пока снизу на матрицу не надавить (и поджать чем-нибудь) она не работала.

Ноутбук 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 защёлкивающихся друг в друга металлических половинок и отогнув небольшие крепления на этих половинках легко смог разобрать коннекторы.

Вот коннектор со стороны видяхи
p10j_small | Попытка заменить HD марицу ноутбука на FullHD: Hp Pavilion DV6
А вот это коннектор со стороны матрицы
Изображение


Как можно заметить в шлейфах "не хватает" довольно много проводов (не припаяны вообще). И именно их надо добавить. Одноканальные LVDS шлейфы используют 4 пары проводов для передачи данных о пикселях, FullHD же требует бОльшей пропускной способности, для которого делаются двухканальные шлейфы, в которых для передачи данных о пикселях используется 8 витых пар проводов.  Насколько я понимаю -  все более-менее современные мобильные видяхи поддерживают двухканальный режим передачи данных и его можно вполне просто использовать.  Для этого допаяем недостающие 4 пары проводов!

Важно! Пары проводов реально должны быть парами, т.е. их надо качественно скрутить вместе! При помощи радиоуправляемого вертолёта и незамысловатых операций я сделал витые пары:
Изображение

Допускать спаек на проводах не стоит, т.е. провода должны быть качественными и цельными, максимально тонкими и желательно не в лаке а в какой-нибудь полимерной изоляции или ещё в чём т.к. там, где провод переходит из от основного корпуса в корпус дисплея есть подвижное место, со временем лак может потрескаться и провода замкнутся. Это фейл конечно же.

итак, скручиваем 4 пары, лудим краешки проводов (1 мм достаточно) и готовимся паять, что куда припаивать - на картинках ниже:
1 | Попытка заменить HD марицу ноутбука на FullHD: Hp Pavilion DV6

2 | Попытка заменить HD марицу ноутбука на FullHD: Hp Pavilion DV6

Эпизод 3. Восстание машины

Итак, провода припаяны, шлейф вроде как готов! Проложил шлейф по ноутбуку обратно, собрал всё, запустил - О ДА!  FullHD С первого раза завёлся! Белые колонки пикселей пропали, изображение стало гладким и клёвым, но радовался я не долго. По мере продвижения загрузки ОС изображение на дисплее менялось и тут я заметил, что на некоторых градиентах пиксели..шумят!!! Шумели они всё на тех же столбцах (которые ранее были белыми). Очевидно, что шумят вновь добавленные пары. LVDS использует низкие напряжения для передачи данных и даже небольшие наводки могут подгадить картинку, сдвинув уровни в проводах незначительно в абсолютных значениях, но значительно в относительных.

Пришлось разобрать крышку дисплея снова (  Что делать - это итак понятно, необходимо заэкранировать новые пары проводов. Для этого я использовал простую фольгу от только что доеденной шоколадки )  Обмотал ей провода по всей длине (каждая пара отдельно) и зафиксировал их скотчем на крышке ноута чтобы они не болтались.

Запустил компьютер и... о чудо! Картинка великолепна! ^______________^

Изображение

Собсно, FullHD на HP Pavilion dv6 6179er

Ссылка | Комментарии [57]
7 апр 2013

Программирование под ARM для STM32

Времени на возню с железками очень мало в последнее время, что весьма огорчает, но оно есть и я его использую )  Т.к. с 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

Приобрёл Raspberry Pi и STM32VLDISCOVERY, новые исследования, новые возможности ^^

На днях приобрёл себе 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

SoftGL: Water

Ещё небольшой апдейт софтрендера - пофиксил баги рендера в текстуру, пофиксил баги в шейдерах, написал простой рендер  "океана".  Пока тут ничего  интересного - просто текстура отражений рисуется и  натягивается на плоскость.  Чуть позже сделаю геометрические волны ну и волны по текстурам нормалей конечно )  Вообще планирую сделать нормальную презентабельную демку с океаном (отражения, преломления и т.п. фичи).

Пока вот такой скрин.  ФПС дико мелкий, но внутри рендер вообще не оптимизированный, много брутфорсом сделано и всё без SSE ) 

upd:
добавил поддержку ввода и в Windows. Написал класс камеры и контроллер свободного перемещения по сцене. Можно полетать теперь вокруг ландшафта, добавил семплинг текстуры отражений с учётом нормалей воды. Всё дико кривое и адски тормознутое пока, ну и ладно )

NewWater4 | SoftGL: Water

Ещё небольшой апдейт софтрендера - пофиксил баги рендера в текстуру, пофиксил баги в шейдерах, написал простой рендер

Ссылка | Комментарии [28]
5 ноя 2012

Softrender: рефакторинг

Если приглядеться, то на прошлом скрине ландшафта можно увидеть суровые баги - дырки в геометрии.  : \

Пофиксил их, пофиксил ещё другие, вернул альфа блендинг, правда теперь у меня опять код снова неоптимизированный и без SSE ) Но это временно. Зато полностью рабочий ^^

Изображение


upd:

Вернул шейдеры, пока ничего с ними не делал - лень )  По-позже выложу демку.  Пока просто отрендерил ландшафт с директ лайтом.
Изображение

upd2:
Добавил ClipPlane-ы. Сначала хотел просто в шейдере клипать и не выделываться, но подумав понял, что не прокатит ) Точнее прокатит, но будет медленней работать, т.к. тест будет для каждого пикселя, а сейчас плейнами режется геометрия )

Изображение

Ссылка
31 окт 2012

Software renderer 3D - дада, мой очередной )

Посидел немного над софтрендером и таки привёл его в юзабельный вид )

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 пока никакущий.

Изображение

Изображение
LifeEngine material editor

Запустить видео по клику - Как делать игрыЗапустить видео по клику - Как делать игры


Пилю потихоньку редактор материалов у себя в движке. Хоть и уверенно, но, блин, адски медленно :D  Буквально по несколько строк в день. Собсно вот такая кака пока получается.

На GUI слишком жестоко не плеваться, я его весь сам пилил, он ещё  жутко кривой и некрасивый. Потом доделаю (с)

Ссылка | Комментарии [37]
17 мая 2012