15. Трассировка лучей: от формул к 3D-сцене | Компьютерная графика 2026
Алексей Малов (лекции по программированию)
0:00 / 0:00
15. Трассировка лучей: от формул к 3D-сцене | Компьютерная графика 2026
304 просмотра · 3 недели назад
Алексей Малов (лекции по программированию)
6,3 тыс. подписчиков
304 просмотра · 3 недели назад
Курс "Компьютерная графика", специальность 09.03.04 "Программная инженерия", 3 курс. Про подготовку программистов в Институте iSpring здесь: https://ispring.institute/software-en...
Во второй части лекции продолжаем разбираться с визуализацией 3D-сцен при помощи трассировки лучей — от простых пересечений до освещения, теней и работы с полигональными сетками.
Начнём с реализации трассировки непосредственно во фрагментном шейдере: построим лучи для каждого пикселя, найдём пересечение с плоскостью и посмотрим, как с помощью преобразования направления луча реализовать движение и свободное вращение камеры.
Затем подробно разберём математику пересечения луча с различными объектами:
сферой;
плоскостью;
цилиндром и коническим цилиндром;
трансформированными объектами;
треугольниками и полигональными сетками.
На примере сферы пошагово выведем квадратное уравнение для поиска точек пересечения, научимся вычислять нормаль и увидим, как эти формулы превращаются в код на C++ и GLSL.
Отдельно рассмотрим важный приём трассировки лучей: вместо усложнения формул для перемещённых, повёрнутых и масштабированных объектов будем переводить сам луч в локальную систему координат объекта.
Для треугольных сеток разберём поиск пересечения луча с треугольником, барицентрические координаты и интерполяцию атрибутов вершин — нормалей, цветов и текстурных координат.
В завершение перейдём к формированию изображения: рассмотрим прямое освещение, diffuse и specular составляющие, вторичные лучи, отражения и построение теней.
В лекции также используются практические примеры на GLSL и Shadertoy, позволяющие увидеть, как математические формулы превращаются в работающий трассировщик лучей прямо во фрагментном шейдере.
Во второй части:
трассировка лучей во фрагментном шейдере;
пересечение луча с плоскостью и сферой;
отражения и зеркальные поверхности;
цилиндры и конические поверхности;
трансформации объектов;
пересечение с треугольниками;
барицентрические координаты;
полигональные сетки;
расчёт освещения;
построение теней;
примеры на C++, GLSL и Shadertoy.
Лекция будет полезна тем, кто изучает компьютерную графику, OpenGL/GLSL, шейдеры и устройство алгоритмов Ray Tracing.
Полезные ссылки
Слайды и задачи по этому курсу: https://github.com/alexey-malov/cg-co...
Мой Telegram для связи с подписчиками: https://t.me/vivid_coding
Поддержать меня на Boosty: https://boosty.to/vivid-bw
Тайм-коды:
0:00 — Эффект полёта камеры между плоскостями (упрощённый вариант)
8:43 — 3D вращение камеры между двумя плоскостями
14:40 — Пересечение луча со сферой
27:25 — Зеркальные сферы на GLSL
38:45 — Пересечение луча с коническим цилиндром
47:28 — Эффект "полёт камеры в 3D туннеле"
54:23 — Пересечение луча с произвольно трансформированным объектом
55:17 — Пересечение луча с полигональными сетками
1:11:52 — Расчёт освещения
В заставке использована композиция "Папа может в Си" музыкального коллектива "Научно-технический рэп" (https://vk.com/nii_rap)
Во вступительной заставке используется шейдер "Enter The Matrix" https://www.shadertoy.com/view/cl3XRX (автор kishimisu).