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

Path tracer (3 стр)

Страницы: 1 2 3 4 5 6 Следующая »
#30
22:37, 27 апр. 2019

IBets
> Как ты поборолся с полосами?
> Чувствую косяк с градиентом
Очень похоже, что при расчёте градиента у тебя дельта не равна размеру вокселя.


#31
23:46, 27 апр. 2019

Alexander K
Ну я считаю так.
delta = distance(BoundingBoxMin, BoundingBoxMax) / max(dimX, dimY, dimZ)

#32
(Правка: 1:06) 0:32, 28 апр. 2019

Suslik
А чего два сэмплера не завести? Один по интеполированным данным, второй точечный. Точечным через центральную разницу получить нормали и проитерполировать их.
Вот сравнение расчета нормалей с разными сэмплерами. С помощью центральной разности и последующей интерполяции

Точечный

+ Показать

Фильтрация
+ Показать

#33
5:38, 28 апр. 2019

IBets
> Ну я считаю так.
> delta = distance(BoundingBoxMin, BoundingBoxMax) / max(dimX, dimY, dimZ)
если ты хочешь, чтобы eps был равен размеру вокселя, то надо так:

vec3 eps = (aabbMax - aabbMin) / vec3(sizex, sizey, sizez);
#34
5:40, 28 апр. 2019

IBets
> А чего два сэмплера не завести? Один по интеполированным данным, второй
> точечный. Точечным через центральную разницу получить нормали и
> проитерполировать их.
ты с ума сошёл, взятие объёмной функции — самая дорогая операция во всём шейдере, алгоритм пишется так, чтобы минимизировать это количество. а ты предлагаешь нормали вручную интерполировать.

#35
8:43, 28 апр. 2019

Suslik
Ну делаем размен. Либо скорость либо объем данных

#36
(Правка: 10:49) 9:55, 28 апр. 2019

Suslik
Вот еще TransferFunction попробуй на тех данных. Specular в 0.04 выставил

+ Показать
#37
10:12, 28 апр. 2019

IBets
> Вот еще TransferFunction попробуй на тех данных. Specular в 0.04 выставил
круто, спасибо. я сейчас занят прикручиванием нормального microfacet pbr BRDF'а, как раз хотел попросить у тебя transfer function'ы погонять.

#38
(Правка: 10:49) 10:45, 28 апр. 2019

Suslik
Вот попробуй пока без Important Sampling-а
Вот по этому туториалу https://habr.com/ru/post/326852/

+ Показать
#39
10:54, 28 апр. 2019

IBets
нет уж, спасибо, я лучше сам все формулы аккуратно выведу.

#40
(Правка: 20:30) 20:29, 28 апр. 2019

моя реализация:
Изображение
Изображение

всё равно немного напортачил с нормализацией при преломлении через microsurface distribution, поэтому высокий roughness немного неправильно считается .__.

#41
(Правка: 23:32) 22:58, 28 апр. 2019

Suslik
Как запилить important sampling? А именно как объединить specular и diffuse.

#42
3:47, 29 апр. 2019

IBets
> Как запилить important sampling? А именно как объединить specular и diffuse.
это ж самый интересный вопрос. в том пейпере от самсунга предлагается стохастическая модель, в которой луч рандомно либо отражается от поверхности по закону BRDF, либо рассеивается в объёме. я считаю их подход идеологически неверным, так как в нём слишком много свободных констант. в моём подходе свободных констант вообще нет.

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

далее вне зависимости от того, преломился луч или отразился, я также считаю его рассеивание по стандартной модели, где он рассиеивается с экспоненциально увеличивающейся вероятностью в случайном направлении.

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

#43
(Правка: 15:33) 15:33, 29 апр. 2019

Suslik
Начал проверять и выяснилось что спекуляру плохо. По краям видно что плохо похоже френелю. Или так должно быть?
uniform sampling
591,4698-11442 | Path tracer
importance sampling
671,1006-3195 | Path tracer

#44
16:30, 29 апр. 2019

IBets
на таком высоком glossiness вообще importance sampling должен всегда выдавать угол падения, равный углу отражения и вес = 1, это очень легко отладить и проверить. проблемы начинаются на низком glossiness (высоком roughness), когда в дело вступают веса при importance выборках. я не берусь сказать, где у тебя баг, но оба варианта, разумеется, должны сходиться к одному и тому же.

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