Мой вариант алгоритма трассировки лучей. Предыстория.

Jun 22, 2017 14:37



Два года назад мы с сыном обсуждали сценарий компьютерной игры, которую интересно было бы написать. Я рассказывал ему, как игры устроены внутри, что такое очередь событий и как она работает, и мы даже написали небольшую клиент-серверную связку, чтобы попробовать, как всё это работает.




Я предложил сценарий игрового мира, "песочницы", с которой мог взаимодействовать игровой персонаж, и взялся реализовать алгоритмы функционирования некоторых объектов мира (трава, деревья, растут, качаются; камни, лежат; человечек, ходит прыгает), и механизм очереди событий, который должен рассчитывать жизнедеятельность всей этой песочницы.

Ну и как бы всё прекрасно, но хотелось уже как-то это всё увидеть. На тот момент существовал движок Unity, свободный для использования, и вышел движок Unreal Engine 4, так же свободный для некоммерческих продуктов. Однако для нашей простенькой задачи эти инструменты были явно чрезмерно сложны, и даже разбираться с OpenGL или Direct3D мне было очень лень.

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

Однако, а) сценарий игровой песочницы был очень уж интересен, б) разбираться с чужими графическими движками было по-прежнему неинтересно, в) у меня была давняя мечта реализовать графический движок на алгоритме обратной трассировки лучей, ray tracing.

И я решил, что вот, это подходящий повод реализовать ray tracing и пощупать, насколько это пригодная вещь для визуализации трёхмерного мира.

На картине выше - пример простого изображения, построенного с помощью моей реализации алгоритма. Это один из скриншотов тестовых сцен.

Ну и предполагаю выпустить продолжение истории, с картинками.

забавы, 3d, программирование, картинки

Previous post Next post
Up