LINUX.ORG.RU

Используются ли для освещения kd-деревья

 , , ,


0

2

Привет!

Есть набор «достаточно плотно» расположенных шаров с прозрачностью. Чтобы их осветить нужно использовать kd-деревья или что-то другое? Как это делается?


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

Вполне может быть, что используются. Я бы взял какой-нибудь простенький ray-tracer и посмотрел на уравнения. Как они изменятся в случае многих шаров?

dave ★★★★★ ()

Чтобы их осветить нужно использовать kd-деревья или что-то другое? Как это делается?

Зависит от кучи факторов. Конкретно про kd деревья не подскажу, но с освещением, тенями и отражениями всё трудно. Реалистичные требуют трассировки лучей, что медленно, а чтобы было быстро изгаляются с разными методами в зависимости от того, насколько реалистичной должна быть картинка. И тут во многих играх не сколько реалистичность преследуется, сколько чтобы было красиво и в некоторых случаях предсказуемо. Тебе как надо быстро или медленно?

peregrine ★★★★★ ()
Последнее исправление: peregrine (всего исправлений: 1)
Ответ на: комментарий от peregrine

K-d деревья позволяют нарезать пространство по точкам, Octree - порезать на регионы с небольшим количеством содержимого. И то и то используют в графическом пайплайне, иногда используют что-то одно и не знают вообще про другое. Тут зависит от степени упоротости или прокаченности писателей. Ищи алгоритмы и смотри как их проще оптимизировать.

slapin ★★★★★ ()
Ответ на: комментарий от peregrine

В играх часто просто запекают освещение в текстуры. А насколько медленно его обсчитывать уже не важно. А освещение реального времени использует очень маленькое количество источников, иначе начинает томозить и выдавать артефакты.

slapin ★★★★★ ()

для какого конкретно освещения????

1. шейдеры bumpmapping для «ускорения» https://www.shadertoy.com/view/lsBSzD (тут нет ни 1 отражения)

2. «круглые 2д градиенты» вместо источников света(которые проецируются на плоскость с расчетом на расстояние до источника света) https://www.shadertoy.com/view/Xtf3zn (тут нет ни 1 источника света, каждый градиент на каждой плоскости «фейковые освещения и отражения» контролируется отдельно)

3.фрембуферы и пререндеринг для «ускорения отражений», в играх банальные cube-map генерируются на все отражения (это в любом движке есть)

по твоему вопросу

Есть набор «достаточно плотно» расположенных шаров с прозрачностью. Чтобы их осветить нужно использовать kd-деревья или что-то другое? Как это делается?

это raytracing, он примитивный если разробраться, примеры
https://www.shadertoy.com/view/lds3z8 если «шары» на одинаковом удалении то достаточно рассчитывать 1 шар, чтоб построить любое количество отражений/преломлений
https://www.shadertoy.com/view/MsXyz8 преломления с изменением фигуры «шаров»
https://www.shadertoy.com/view/MsXcWr когда фигуры не на одинаковом расстоянии все становиться сложнее и медленнее
https://www.shadertoy.com/view/4s3fDH еще отражения с прозрачностью

естественно подход с «raytracing» не используется в «играх» или 3д-редакторах(работающих в реальном времени)

вобщем какая задача у тебя стоит, так будет и сделано
или кучей перерендеренных cube-map-ов и глаз просто не отличит «ложную картинку»
или настоящим raytracing
под задачу пишут

missxu ()
Ответ на: комментарий от missxu

Спасибо, за развёрнутый ответ! Очень интересно!

Полностью постановка задачи звучит так.

Дан структурный буфер частиц в размере от 2 до 1024 элементов. Каждый партикл имеет радиус больше 0, и непрозрачность от 0 до 1 (1 - полностью непрозрачный). Расстояния между партиклами сопоставимы с их радиусами. Направление на солнце задано нормализованным вектором sunDir. Напишите на hlsl оптимальный по быстродействию compute шейдер (Shading Model 5) с расчетом самозатенения частиц, результат вычислений записать в sbShadows. Выходное значение: 0 - частица полностью в тени, 1 - полностью освещена. sbShadows имеет такое же количество элементов что и sbParticles, индексы совпадают.

Т.е. частицы поглощают свет как конечные объекты, а излучают как отдельные пиксели(?). В таком случае также стоит применять рейтейсинг?

dann ()
Ответ на: комментарий от dann

Т.е. частицы поглощают свет как конечные объекты, а излучают как отдельные пиксели(?). В таком случае также стоит применять рейтейсинг?

у тебя совсем другая задача, если я правильно понял

Дан структурный буфер частиц в размере от 2 до 1024 элементов.

это циклом for(...){} 1024 раза рисуется каждая частица, а не все сразу

Направление на солнце задано нормализованным вектором sunDir. Напишите на hlsl оптимальный по быстродействию compute шейдер (Shading Model 5) с расчетом самозатенения частиц, результат вычислений записать в sbShadows.

это одна строка линейной логики из 3-го класса школы

видимо ты первый раз столкнулся с шейдерами раз не понял насколько это примитивная задача

и это не имеет никакого отношения к «деревям» или «raytracing»

missxu ()
Ответ на: комментарий от dann

А по коду это тоже тривиально? Можно кусочек псевдокода? Хоть понять, что брать, и что с ним делать.

сделать задание/работу за тебя? это платно

псевдокод- возвращаешь vec4 цвет(vec3(длинна(источник_света-позиция_частицы)),переданная_прозрачность);

ничем больше помочь не могу, решение таких задач тривиально, и приходит с пониманием «программирования шейдеров»

missxu ()