Войти
ПрограммированиеФорумГрафика

Volume Rendering (15 стр)

Страницы: 111 12 13 14 15 16 Следующая »
#210
1:23, 1 дек. 2012

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

норм, норм... периодичность убита до неразличимой практически...

#211
5:31, 1 дек. 2012

Suslik
> это, очевидно, плавно изменяющаяся transfer function

Функция хэвисайда, говорят, имеет разрыв

#212
10:07, 1 дек. 2012

- можно взять разрывную функцию хевисайда
- а можно взять непрерывную функцию?
- конечно, можно, достаточно заменить функцию хевисайда на любую непрерывную
- но ведь функция хевисайда имеет рызрыв
  *suslik knocked out*

#213
15:06, 1 дек. 2012

Suslik
> - можно взять разрывную функцию хевисайда
> - а можно взять непрерывную функцию?
> - конечно, можно, достаточно заменить функцию хевисайда на любую непрерывную
> - но ведь функция хевисайда имеет рызрыв
> *suslik knocked out*

Ну если можно взять любую непрерывную - какой смысл в хевисайде  ?

#214
15:45, 1 дек. 2012

такой, что изоповерхность, которая соответствует heavyside transfer function иногда более наглядна, чем непрерывное распределение плотности?

#215
16:05, 1 дек. 2012

Suslik
> иногда более наглядна, чем непрерывное распределение плотности?

В чём это выражается ?  Картинки для сравнения желательны 

#216
13:03, 8 фев. 2013

Еще раз хотел бы поднять эту тему. Наконец то появилось время вновь заняться Volume рендерингом. Первое что хотелось бы сделать это по нормальному посчитать нормали. Сейчас они считаются как градиент перепада прозрачности по методу который описал Suslik в начальных постах:

vec3 normal = vec3(texture3D(VolumeTexture, P - vec3(stepsize, 0, 0)).a - texture3D(VolumeTexture, P + vec3(stepsize, 0, 0)).a, 
   texture3D(VolumeTexture, P - vec3(0, stepsize, 0)).a - texture3D(VolumeTexture, P + vec3(0, stepsize, 0)).a, 
   texture3D(VolumeTexture, P - vec3(0, 0, stepsize)).a - texture3D(VolumeTexture, P + vec3(0, 0, stepsize)).a);

Перечитывая тему я наткнулся на совет по использованию нормалей Собеля. Но к сожалению из-за не очень хорошей базы по математике я из разговора и ссылок уважаемых гуру ничего не понял. Может кто-нибудь помочь и на пальцах объяснить суть подсчета нормалей Собеля для объема. Заранее очень благодарен.

#217
13:06, 8 фев. 2013

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

#218
13:12, 8 фев. 2013

Suslik сейчас у меня есть некий запас по производительности так что если эти нормали просадят ее не более чем процентов на 15-20, то не страшно. Кстати а в твоем супер-мега рендере как нормали считаются? Если это не секрет конечно )

#219
13:14, 8 фев. 2013

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

#220
13:16, 8 фев. 2013

pascal.ilya
> Насчет производительности заметил что ее больше убивает векторное умножение
> двух векторов при расчете освещения нежели выборка из текстуры.

Дай угодаю, NVIDIA ? :)

#221
13:18, 8 фев. 2013

innuendo
Она самая - GTX 480. А есть какие нибудь хитрые методы оптимизации?

#222
13:19, 8 фев. 2013

pascal.ilya
> Насчет производительности заметил что ее больше убивает векторное умножение двух векторов при расчете освещения нежели выборка из текстуры.
думаю, ты что-то делаешь не так, потому что выборка из текстуры - куда более дорогая операция, чем несколько умножений. у меня конечно-разностная аппроксимация градиента откушивает добрые 50% от общей производительности. условно.

где ж тебе кстати векторное произведение в освещении-то понадобилось?

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

#223
13:36, 8 фев. 2013

Suslik
Ну мне бы для начала неплохо было бы понять как вообще улучшить нормали, пусть даже они и будут хранится в отдельной текстуре. К сожалению мне фразы типа "конечно-разностная аппроксимация" мало что говорят. Насколько я понял надо взять как бы куб 3х3х3 в котором записаны определенные числа, затем последовательно пройтись по всем значениям куба в котором записаны данные, так что элемент данных стал центральным для этого куба 3х3х3. Далее нормаль считается по какой то хитрой формуле относительно получившегося куба и это значение пишется в новую 3D текстуру. Я правильно понимаю? Соответственно встает вопрос по какой формуле считается нормаль и какими числами заполнять куб 3х3х3.

Правка: И если использовать еще одну 3D текстуру ведь получается что производительность даже возрастет? Ведь надо будет сделать всего лишь 2 выборки? Одну из текстуры данных, а одну из текстуры нормалей.

#224
13:54, 8 фев. 2013

pascal.ilya
> Правка: И если использовать еще одну 3D текстуру ведь получается что
> производительность даже возрастет? Ведь надо будет сделать всего лишь 2
> выборки? Одну из текстуры данных, а одну из текстуры нормалей.
производительность возрастёт, но добавятся своеобразные артефакты интерполяции по этой текстуре. попробуй.

что такое конечно-разностная аппроксимация. представь у тебя задана некоторая плотность p(x, y, z). тебе нужно получить нормаль. пусть нормаль - это градиент этой функции. точное значение градиента нам не известно, так как не известен точный вид функции p(x, y, z), но мы этот градиент в каждой точке можем примерно посчитать, посчитав значение в нескольких точках, близких к ней. приближение точного значения градиента некоторой формулой, зависящей от значений функций в определённых соседних точках - это и есть конечно-разностная аппроксимация. то, как расположены дополнительные точки(то есть какие брать дополнительные текстурные выборки) называется шаблоном конечно-разностной аппроксимации. вот тот шаблон, что использовал я - шеститочечный, так как нужно сделать шесть выборок, чтобы аппроксимировать трёхмерный градиент. шаблон собеля - 27 точечный. очевидно, полученная аппроксимация градиента будет лучше совпадать с его реальным значением, но это более чем в 4 раза больше выборок.

Страницы: 111 12 13 14 15 16 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.