Рубрика «raymarching»
Рендеринг трёхмерных фрактальных множеств: от губки Менгера до Мандельбокса, часть 2
2025-10-14 в 12:09, admin, рубрики: platform v, raymarching, компьютерная графика, математика, Сбертех, фракталыТрехмерный движок внутри запроса SQL
2019-01-11 в 8:21, admin, рубрики: 3d, 3d-движок, phong, postgresql, ray marching, raymarching, sql, sqlite, аппроксимация, аппроксимация квадратного корня, вавилонский метод, затенение по фонгу, квадратный корень, любителей читать теги, магическая константа, метод герона, ненормальное программирование, погрешность, поздравляю с первой пятницей, рекурсивные запросы, трассировка лучей, трехмерный движокНесколько лет назад на форуме SQL.ru решили провести сравнение реализаций трассировщиков лучей на разных языках программирования. К сожалению, моя заявка не может участвовать т.к. она не выводит надпись «PIXAR», поэтому публикую ее здесь.
Для чистоты эксперимента я использовал SQLite без расширений. Оказалось, что там нет даже функции SQRT.
WITH RECURSIVE numbers AS (SELECT 0 AS n UNION ALL SELECT n+1 FROM numbers WHERE n<89),
pixels AS (SELECT rows.n as row, cols.n as col FROM numbers as rows CROSS JOIN numbers as cols WHERE rows.n > 4 AND rows.n < 38 AND cols.n > 9 AND cols.n < 89),
rawRays AS (SELECT row, col, -0.9049 + col * 0.0065 + row * 0.0057 as x, -0.1487 + row * -0.0171 as y, 0.6713 + col * 0.0045 + row * -0.0081 as z FROM pixels),
norms AS (SELECT row, col, x, y, z, (1 + x * x + y * y + z * z) / 2 as n FROM rawRays),
rays AS (SELECT row, col, x / n AS x, y / n AS y, z / n AS z FROM norms),
iters AS (SELECT row, col, 0 as it, 0 as v FROM rays UNION ALL SELECT rays.row, rays.col, it + 1 AS it, v + MAX(ABS(0.7+v*x) - 0.3, ABS(0.7+v*y) - 0.3, ABS(-1.1+v*z) - 0.3, -((0.7+v*x) * (0.7+v*x) + (0.7+v*y) * (0.7+v*y) + (-1.1+v*z) * (-1.1+v*z)) * 1.78 + 0.28) AS v FROM iters JOIN rays ON rays.row = iters.row AND rays.col = iters.col WHERE it < 15),
lastIters AS (SELECT it0.row, it0.col, it0.v AS v0, it1.v AS v1, it2.v AS v2 FROM iters as it0 JOIN iters AS it1 ON it0.col = it1.col AND it0.row = it1.row JOIN iters AS it2 ON it0.col = it2.col AND it0.row = it2.row WHERE it0.it = 15 AND it1.it = 14 AND it2.it = 13),
res AS (SELECT col, (v0 - v1) / (v1 - v2) as v FROM lastIters)
SELECT group_concat(substr('$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/|()1{}[]?-_+~<>i!lI;:,"^. ', round(1 + max(0, min(66, v * 67))), 1) || CASE WHEN col=88 THEN X'0A' ELSE '' END, '') FROM res;
:++++I
_________________________"
------/jucYJLQ0OZmwwwwwwwmmZO0QCUXcnj----------
???????:<}/nzJQOwqdbkhao***####**o LUcx|[<;????????????????
]]]]]]]]][[[ !{xu; o#MW&8%BB@@@@@ -ct[l ]]]]]]]]]]]??-
U[[[[[[[}}}}}}}}} ;1X] $$$$$$$$$$ cx[" [[[[[[[[]]]??
UUJJJCCCLLL{{{{{{{{{{ :|QZzffB$$$$$$ |Qu? {{{{{{}}}[[]]??-
YUUJJJCCCLLLQQ000OOO111111111 ,l!!; 111111111111{{}}[[]]??-
YUUJJJCCCLLLQQQ00OOOZZZmmmwww(((((((((((((((((((()))))))))))))11{{ i]??-
YYUUUJJCCCLLL ?fuv| ZZZmmmwwwqqqpppd||||||||||||||||||((())11{ i++i;??--
YYYUUUJJJ i Cmmwwwqqqppppdddbbbbk///////||(())11 }czfYuf{_--
XYYUUU Wwwwqqqpppddddbbbbkkkk/||(())) |j :zr)--
XXYYY; $$wqqqqpppddddbbbbk/|||(()) ^X Jcf-
XXXY $$$$xwqqqppppddddbbb/||(()) v LX-_
zXX! $$$$$$$nqqqqppppdddbb||(()) q mQX-
zzX> $$$$$$$$$$$$qqqqppppddd|(()) k dmL-_
zzl $$$$$$$$$$$$$$wqqqqppppd((() o W*kqOJ__
czz? $$$$$$$$$$$$$$$$$ wqqqqpp|(() O $$BadmQ__
ccc!1x $$$$$$$$ wwqqqq(() {$$$$$$$Babw0___
vcc<)xXQm W%@$$$$$$ mwwwwq()) %$$$$$@%W#adwQ___
vvcc>1rzCZqkoM&B$$ bmmwww)) )o$$$$B&MokpZL-__+
uvvvcc]tuUQmpkoM Zmmmm)1 J- &MohdmQU-__++
uuvvvcc{jvUQmp ZZZm)11 J: kpmQUc-__;
nuuuvvvcc}fuYL nOOZZ11 /| .0CXu}-_
nuuvvvccc-)jv !00OOO11{ ;/zvzvxt1--
vvvcccz+{ }QQ000O1{{ !~+~>?-
ccczz:<] : LQQQQ00{{}}[ ]??
zzzzXX ";I;" JCCCLLLLQQQ{}}[[]]]?
zzXXXYYYUUUUJJJCCCCLLL{}}[[]]]
XXYYYYUUUJJJJCCCC}}[[]]
YYYUUUUJJJJC}[[]
YUUUUJJ[[
UU
Под катом построчный разбор запроса. Как обычно, достаточно знания основ SQL и школьной математики.
Читать полностью »
Расшифровка трассировщика лучей размером с открытку
2018-12-28 в 5:10, admin, рубрики: path tracing, raymarching, raytracing, ненормальное программирование, обратная разработка, Работа с 3D-графикой, реверс-инжиниринг, рендеринг графики, трассировка пути
«Он снова это сделал!», — вот, что первое пришло мне в голову, когда я посмотрел на оборотную сторону флаера Pixar [1], полностью заполненную кодом. Скопление конструкций и выражений была подписана в правом нижнем углу не кем иным, как Эндрю Кенслером. Для тех, кто его не знает, скажу: Эндрю — это программист, придумавший в 2009 году 1337-байтный трассировщик лучей размером с визитку.
На этот раз Эндрю придумал нечто более объёмное, но с гораздо более интересным визуальным результатом. Так как я закончил писать свои Game Engine Black Books про Wolf3D и DOOM, у меня появилось время на изучение внутренностей его загадочного кода. И почти сразу меня буквально очаровали обнаруженные в нём техники. Они сильно отличались от предыдущей работы Эндрю, основанной на «стандартном» трассировщике лучей. Мне было интересно узнать о ray marching, функциях конструктивной объемной геометрии, рендеринге Монте-Карло/трассировкой пути, а также множестве других трюков, которые он использовал, чтобы ужать код в такой небольшой кусок бумаги.

Трехмерный движок на формулах Excel для чайников
2018-12-10 в 16:03, admin, рубрики: CGI (графика), Excel, raymarching, shadertoy, ненормальное программирование, Работа с 3D-графикой
В этой статье я расскажу, как мне удалось портировать алгоритм рендера трехмерных сцен на формулы Excel (без макросов).
Для тех, кто не знаком с компьютерной графикой, я постарался как можно проще и подробнее описать все шаги. В принципе, для понимания формул должно быть достаточно знания школьного курса математики (+умение умножать трехмерную матрицу на вектор).
Также я сделал небольшое веб-приложение, где можно потренироваться в создании формул для произвольных фигур и сгенерировать свой файл Excel.
Осторожно: 19 картинок и 3 анимации под катом.Читать полностью »
Создание 1k/4k intro для Linux, часть 4
2013-10-21 в 5:47, admin, рубрики: demoscene, distance fields, glsl, OpenGL, raymarching, sizecoding, Анимация и 3D графика, Демосцена, ненормальное программирование, метки: demoscene, distance fields, glsl, OpenGL, raymarching, sizecoding, демосцена Доброго всего, мои избыточно терпеливые друзья!
Как очень немногие из вас помнят, во второй части мы остановились на том, что получили прямоугольник на весь экран в сколько-то там сотен байт, и теперь вот уже полтора года стоим перед проблемой заполнения пустоты в наших кодах и сердцах творчеством.
Что же всё-таки можно нарисовать с помощью всего двух треугольников? Квадрат? Фрактал? Полёт сквозь мегатонной мощности взрыв в центре города? Есть ли предел безумию, где заканчивается реальность и начинается явь? Как правильно ухаживать за лучами, чем их кормить и обо что отражать вы узнаете во внезапном продолжении цикла статей про демомейкинг!
Создание 1k/4k intro для Linux, часть 2
2012-05-14 в 8:13, admin, рубрики: demoscene, distance fields, glsl, intro, OpenGL, raymarching, sdl, sizecoding, Демосцена, линукс, ненормальное программирование, метки: demoscene, distance fields, glsl, intro, OpenGL, raymarching, sdl, sizecoding, демосцена, линукс Не прошло и полгода! Как вы можете, поднапрягшись, вспомнить, в прошлый раз мы остановились на унынии и обещании нырнуть в ассемблер.
Ну что же, пацан сказал — пацан сделал. Из этого аляповатого нагромождения букв вы узнаете, как можно инициализировать OpenGL-контекст в GNU/Linux в какие-то 450 байт, высвободив ещё больше места для разворачивания таланта.
Под катом вы узнаете, как в один килобайт нарисовать что-нибудь такое:

Заинтересованные пристёгиваются и вдавливают педаль в пол, а глаз — в экран.
Читать полностью »


