Это называется квадва-деревья. Стандартная техника рендеринга, применяется во всех движках. Или почти во всех.
квадра-октри-деревья, как и бинарное разбиение пространства - отнюдь не сахар. Вы правы, это вполне стандартная техника, которая не решает многих проблем. Но в теме поста я делал немалый акцент на самой возможности существования более продуктивной техники рендеринга как альтернативе упомянутого.
С чего вдруг не эффективной? Дайте оценку и сравните с алгоритмом из сообщения .
Под понятием "эффективность" можно понимать очень широкий спектр конечного результата. В данной задаче за критерий эффективности следует понимать количество шагов для получения конкретного результата. А именно найти пересечение одного луча и миллион сфер за 30 тактов/шагов. То есть с помощью обычного перебора - где каждая проверка является шагом - это будет невозможно сделать. Мы проверим всего лишь 30 сфер из миллиона. В алгоритмах приведенных выше ситуация обстоит значительно лучше, но в критерий 30 шагов отнюдь не укладывается и, следовательно, вопрос эффективности можно уже опустить касательно данных алгоритмов.
если известны координаты сфер и координаты лучей (кстати, как они задаются?) то в чем может быть проблема?
Проблема в её сложности, не в качестве самого решения, а его эффективности, когда дело идёт о работе с очень большим массивом данных.
может это заменить на "Имеем миллион источников света и миллион сфер..." ?
Напомните, из чего состоит каждый источник света? Из лучей. Любой источник света испускает собой лучи. В задаче был дан источник света, испускающий один миллион лучей.
Для каждого луча можно определить свои варианты:
1. Луч не пересекается ни с одной из сфер.
2. Луч пересекается с какой-либо сферой.
3. Луч пересекается одновременно с двумя или большим количеством сфер.