krre |
Отправлено: 25 Августа, 2016 - 12:19:46 ID
|
компьютерный мультипликатор
Сообщений всего: 2151
Дата рег-ции: Дек. 2008
Репутация: 28
|
Оказывается, я неправильно понимал работу алгоритма рейкастинга, потратил две недели, чтоб реализовать так, как он мне представлялся, и в итоге это закончилось провалом. Наконец, до меня дошло, что не нужны никакие матрицы и преобразования луча, потому что эта система работает совсем не так, как в OpenGL, а намного проще. И перспективные искажения получаются естественным путём, так же, как у нас в глазу, за счёт схождения лучей в одной точке. Нормализация координат объектов к единичному кубу тоже не нужна. Это просто капец, сколько всего не нужно, я в глубоком офигении с тех пор, как это понял.
Ну, и в результате откровения родился вот такой рейкастовый рендер куба. Даже FPS получился всего в 3 раза меньше нормы. Правда, ещё нет освещения, и когда я его добавлю, FPS просядет ещё больше. Что ж, будем посмотреть, насколько глубоко. |
|
|
krre |
Отправлено: 26 Августа, 2016 - 16:47:49 ID
|
компьютерный мультипликатор
Сообщений всего: 2151
Дата рег-ции: Дек. 2008
Репутация: 28
|
Gagarin Daily News
Занялся аппаратной поддержкой рендеринга вокселей. Официально видеокарты это не умеют, они натасканы на полигоны, но я их научу. Будет, конечно, кривовато, через заднее месте, но зато какой-никакой, а прирост производительности. Все это будет сделано GLSL шейдерами в OpenGL. Точнее, только фрагментным шейдером. Вершинный не пригодится, поскольку вершин практически нет.
Если взять разрешение окна, которое у меня устанавливается по умолчанию, 800х480, то это будет 384000 пикселей. Сейчас цвет всех этих пикселей считается в цикле на процессоре одним потоком, и это очень медленно. На видеокарте все они будут посчитаны за раз. Ну, может не совсем за раз, но по где-то 1000 штук параллельно. Согласитесь, ускорение в 1000 раз - это существенно. Проблема только в том, что отлаживать такую программу проблематично. Во-первых, она находится в памяти видеокарты, и её нельзя трассировать пошагово, а во-вторых, не будешь же проверять все 384000 версии какой-то переменной одновременно. Так что головняк ещё тот.
В общем, я уже начал это дело, но впереди выходные, а выходные - дело серьёзное, надо отвлечься от программирования и отдохнуть мозгом, поглядеть, что новенького на Ютубе. После чего затусовать очередную страшилку на форум в разделе апокалипсиса. |
|
|
krre |
Отправлено: 27 Августа, 2016 - 06:57:38 ID
|
компьютерный мультипликатор
Сообщений всего: 2151
Дата рег-ции: Дек. 2008
Репутация: 28
|
У меня обычно творческий бум в рабочие дни, а в выходные расслабуха. Но раз ты настаиваешь, то сегодня в 6 утра я уже посидел немного и добавил в игру ещё одну фичу.
Итак, решил сделать в игре два типа рендеринга - один на CPU, другой на GPU. То есть процессорный без ускорения и графический с ускорением. Переключается режим при запуске программы параметром командной строки -cpu или -gpu соответственно. По умолчанию стоит GPU, он же более быстрый и поэтому предпочтительный.
Делаю я всё это затем, что написать сходу рендеринг шейдерами на GPU едва ли получится. Без возможности отладки ничего не выйдет. Так что придётся писать сперва на обычном C++, добиваться, чтоб рендерер работал, а потом стараться один к одному, насколько это возможно, переносить код во фрагментный шейдер на языке GLSL. Заодно будет прикольно сравнивать, насколько ускорился рендеринг.
Чтоб не путать рендереры, сделал индикацию в DebugHUD. GPU рендерер пока что никакой. Всё, что он делает, - это рисует зелёный цвет, если координата x < 250, и белый, если больше. Так я, по крайней мере, твёрдо убеждён, что шейдер различает координаты x и y. |
|
|
krre |
Отправлено: 27 Августа, 2016 - 09:08:11 ID
|
компьютерный мультипликатор
Сообщений всего: 2151
Дата рег-ции: Дек. 2008
Репутация: 28
|
Ну, не карт, а процессоров. Не в двое больше, а скорее сколько же. Если делать сразу для GPU, то это долго, потому что там тяжело отлаживать программу. Написал что-то не правильно, запускаешь - чёрный экран. Почему - фиг его знает. Сидишь наугад код меняешь. Трудоёмкость, условно говоря, 10 единиц. Когда пишешь для CPU, то отлаживать легко, получается быстрее. Трудоёмкость 5 единиц. Получается 5 единиц, чтоб написать код для CPU, потом ещё 5 или даже меньше, что перевести это на GPU. Получается в сумме те же 10 или меньше. Как-то так, если кто-то что-то понял, кроме меня. |
|
|
krre |
Отправлено: 02 Сентября, 2016 - 08:01:11 ID
|
компьютерный мультипликатор
Сообщений всего: 2151
Дата рег-ции: Дек. 2008
Репутация: 28
|
Читаю документацию по OpenGL. Игра - штука сложная, требует серьёзной теоретической подготовки, поэтому развивается волнообразно. Попрограммировал - поразбирался в теории, потом снова программирование и снова теория. Сейчас передо мной встала задача - запихать массив кубов в память видеокарты. И не просто так запихать, а чтоб их прямо там можно было изменять в процессе анимации. Есть куча способов отправить данные в видеокарту, и у каждого есть свои особенности. Нужно выбрать самый подходящий для моего случая, а для этого нужно тщательно разобраться во всех вариантах.
Отвечая на твой вопрос, скажу: я не обещал, что в игре будет что-то кроме кубов, но несколько кубов точно будет. |
|
|
krre |
Отправлено: 02 Сентября, 2016 - 13:30:52 ID
|
компьютерный мультипликатор
Сообщений всего: 2151
Дата рег-ции: Дек. 2008
Репутация: 28
|
Случилось печальное. Я выбрал самый лучший способ обмена данными с видеокартой, но он доступен не везде, для этого нужна поддержка OpenGL 4.3. У меня дома она доступна, а на работе нет, там только 3.3. Называется эта фича Shader Storage Buffer Object. Однако я обнаружил, что если подключить расширение GL_ARB_shader_storage_buffer_object, то фича включается, но нет гарантии, что подключится на других машинах.
Расширения OpenGL - это такие новые фичи, которые ещё не вошли в официальную версию, но доступны на некоторых видеокартах в качестве тестирования, либо просто производитель видеокарты добавил её у себя в драйвере для конкурентных преимуществ. Иногда они становятся стандартными в новых версиях OpenGL, иногда нет. Чтобы мне знать, на что рассчитывать, я вывел в Debug HUD всю необходимую по аппаратуре информацию, включая поддержку расширений GL_ARB_shader_storage_buffer_object и GL_ARB_compute_shader. Если у моих тестеров окажется, что поддержка этих двух расширений включена, значит, игру ожидает светлое будущее. Иначе игру всё равно ждёт светлое будущее, но кто-то из тестеров не сможет тестировать игру, потому что она у него не запустится.
Вот так выглядит сейчас полная информация. Куб нарочно занял весь экран, чтоб текст было лучше видно. Позже я сделаю новый тестовый дистрибутив игры и выложу для скачивания. |
|
|
krre |
Отправлено: 02 Сентября, 2016 - 19:25:50 ID
|
компьютерный мультипликатор
Сообщений всего: 2151
Дата рег-ции: Дек. 2008
Репутация: 28
|
Сделал снэпшот и закачал на Гугл-диск. Ищите у себя по адресу:
Gagarin\Bin\Snapshots\0.1.0\Gagarin-0.1.0-20160902-1915.7z
Что надо сделать? Скачать, распаковать, запустить, нажать F5, чтобы появился отладочный текст, как у меня на скриншоте выше. Затем нажать F12, чтобы сделать свой скриншот, найти его в папке Screenshot с игрой и показать мне. Можно прямо тут на форуме. Затем можно полазить вокруг куба и поглядеть fps, не просядет ли. Но сперва надо отойти немного назад, чтоб куб не закрывал весь экран. Я потом погляжу, какие у вас характеристики железа и буду по ним ориентироваться. А проще говоря, я увижу, что у вас оборудование и драйвера удовлетворяют минимальным требованиям, и буду спокоен. |
|
|
krre |
Отправлено: 03 Сентября, 2016 - 06:46:19 ID
|
компьютерный мультипликатор
Сообщений всего: 2151
Дата рег-ции: Дек. 2008
Репутация: 28
|
Ооооооо, батенька, как у вас всё запущено. Видеокарта NVIDIA, и нет поддержки расширений? Что-то я не понял юмора. А что с драйверами вообще? Они родные для видеокарты, и когда обновлялись в последний раз? Странно, что версия драйвера не показывается, как у меня в третьей строке - 368.39.
Мышь в игровом режиме не должна быть видна, иначе как поворачивать пространство. ESC надо нажать, тогда появится меню и мышь, можно будет легко закрыть окно. |
|
|
|