Перейти к содержимому

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).