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

Посчитать среднее геометрическое всех пикселей текстуры на GPU

Страницы: 1 2 3 Следующая »
#0
21:48, 31 авг. 2015

Как? Есть ли какой-то простой способ?
P.S.: нужно для HDR...


#1
21:52, 31 авг. 2015

Laynos
DX SDK June 2010

#2
21:55, 31 авг. 2015

Я так понимаю, тебе надо среднее значение цвета? Чисто на GPU не просчитаешь.  Разве что такой изврат - можно последовательнио рендерить во все более мелкую текстуру и довести ее размер до одной точки.
Но проще все же отрендерить в маленькую текстуру, скажем 32х32, вернуть ее и потом посчитать на CPU.

#3
22:03, 31 авг. 2015

san
тобишь сначала отрендерить всё в "полноценную, большую текстуру", потом в маленькую 32х32?
И насколько дорого читать текстуру с GPU на CPU?

#4
22:15, 31 авг. 2015

Наложить ее на квад , квад сделать размером один пиксель , отрендерить, не?

#5
22:19, 31 авг. 2015

Polyflow3d
Я просто не совсем понимаю что происходит в подобном случае. Почему идёт усреднение?
Если большую текстуру отрендерить в 1х1 текстуру, то это будет среднее арифметическое цветов большой текстуры?

#6
22:32, 31 авг. 2015

Laynos
Вместо гаданий и левых советов лучше бы прислушался к #1.
Разве что ближайший почти верный совет дал san в первой части, почему-то назвав его "извратом".

#7
23:33, 31 авг. 2015

А насколько важно посчитать именно геометрическое?
В принципе можно посчитать арифметическое от всей картинки (через мип), плюс геометрическое и арифметичекое - от ее версии 32х32(например).
Посмотреть насколько различаются вторые значения и скорректировать первое.

#8
23:39, 31 авг. 2015

А в чём вообще смысл здесь геометрического среднего?

При геометрическом среднем у нас один чёрный пиксель гарантирует ответ 0.
Мне неочевидна полезность этого свойства.

#9
23:46, 31 авг. 2015

Laynos
>тобишь сначала отрендерить всё в "полноценную, большую текстуру"
Я так понял, что большая текстура у тебя уже есть.  Если судить по первому посту: "... всех пикселей ТЕКСТУРЫ"

> И насколько дорого читать текстуру с GPU на CPU?
Все зависит от размера текстуры. Меленькую текстуру читает достаточно быстро.

>Если большую текстуру отрендерить в 1х1 текстуру, то это будет среднее арифметическое цветов большой текстуры?

Нет. Это будет пиксель с координатами (0.5,0.5) с некоторым усреднением от соседних. Что бы сделать реальное усреднение, надо последовательно рендерить в текстуры убывающего размера (желательно не кратные 2).

b]Blew_zc[/b]
> почему-то назвав его "извратом".
Поскольку это выглядит как вопрос при поступлении на работу - "а как это сделать ТОЛЬКО на GPU"? Ну я сказал КАК. В реальной жизни не думаю что кто-то так будет поступать, ибо выглядит это явно искусственно. Проще совместить GPU и CPU.

#10
23:58, 31 авг. 2015

Polyflow3d
> Наложить ее на квад , квад сделать размером один пиксель , отрендерить, не?
Нет.

Laynos
> P.S.: нужно для HDR...
На любом железе в 2-4 прохода сжимают до текстуры в 1x1, а как достать результат, уже другой вопрос.

#11
0:44, 1 сен. 2015

FordPerfect
> А в чём вообще смысл здесь геометрического среднего?
>
> При геометрическом среднем у нас один чёрный пиксель гарантирует ответ 0.
> Мне неочевидна полезность этого свойства.

Почему геометрическое? Потому что геометрическое среднее «тяготеет» к более высоким значениям, а значит будут выбираться более яркие пиксели (что нам и нужно, так как нас интересуют имеющиеся на картинке источники света).

http://habrahabr.ru/post/165669/

san
Рендер "крупной текстуры" в малую сводится к
color = texture2D(image, uv); ?

san
> Нет. Это будет пиксель с координатами (0.5,0.5) с некоторым усреднением от
> соседних. Что бы сделать реальное усреднение, надо последовательно рендерить в
> текстуры убывающего размера (желательно не кратные 2).
Тобишь, если рендерить в 2-3 прохода до текстуры 32х32 и потом на CPU считать среднее, то это будет не совсем честно?
Как бы ты поступил, если была бы текстурка width x height (например, 1920х1080)? Речь идёт о реалтаймовом приложении, разумеется

#12
0:48, 1 сен. 2015

Laynos
> Тобишь, если рендерить в 2-3 прохода до текстуры 32х32 и потом на CPU считать
> среднее, то это будет не совсем честно?
Почему 32? Надо сразу до 1x1, потом на cpu считать этот пиксель, либо compute shaders.

#13
1:48, 1 сен. 2015

считай как [cht]ln(\frac{1}{N}\sum_{n}^{} {e}^{{x}_{n}})[/cht]

#14
5:00, 1 сен. 2015

На вычислительных шейдерах по идее можно же.

Страницы: 1 2 3 Следующая »
ПрограммированиеФорумГрафика

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