Войти
ФлеймФорумПроЭкты

Я пишу несмещной пат-трейсер (10 стр)

Страницы: 16 7 8 9 10 11 Следующая »
#135
16:10, 21 янв. 2020

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


#136
16:27, 21 янв. 2020

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

#137
7:30, 22 янв. 2020

Потихоньку занимаюсь текстурированием.
Изображение
Изображение
Я понял как вычисляются текстурные координаты.
Изначальные данные выглядят вот так:

   Begin Polygon Texture=Trophy2 Flags=1073741824 Link=9
      Origin   +00090.509659,+00000.000004,-00256.000000
      Normal   -00000.707107,+00000.707107,+00000.000000
      TextureU -00000.707107,-00000.707107,+00000.000000
      TextureV +00000.000000,+00000.000000,-00001.000000
      Vertex   +00000.000000,-00090.509659,+00000.000000
      Vertex   +00000.000004,-00090.509659,+00256.000000
      Vertex   +00090.509659,+00000.000004,+00256.000000
      Vertex   +00090.509659,+00000.000000,+00000.000000
   End Polygon
Разумеется, каждый Vertex - это положение вершины в пространстве.
Я вычисляю нормаль отдельно для каждого треугольника, получается идентично Normal.
TextureU и TextureV - это два ковектора. Текстурные координаты в мировой точке Pt вычисляются как tu = dot(Pt, TextureU), tv = dot(Pt, TextureV). Довольно интересно.
...Вот только в голом виде текстура получается смещённой. Дополнительно, Origin определяется как точка с tu = tv = 0. Соответственно, в итоговом коде получается что-то вроде
float tu = dot(e.origin, scene[e.face].texu) - dot(scene[e.face].origin, scene[e.face].texu);
float tv = dot(e.origin, scene[e.face].texv) - dot(scene[e.face].origin, scene[e.face].texv);
Внимательный читатель так же обратит внимание на размеры - процитированный полигон простирается аж на 256 единиц в высоту. Что же тогда происходит с tv? Да, он пробегает от 256 до 512.
А всё потому, что текстуры в UE1 не перетягиваются на единичный квадрат. Вместо этого, полученные {tu, tv} идут сразу в координаты пикселя текстуры. Взятый в качестве примера Trophy2 - имеет размер 256*256, поэтому он как раз раскладывается один раз по высоте. Если бы вместо этого стоял, например, A_Vlight1_a размером 16*64:
Изображение
то в одном полигоне уместилось бы 4 копии текстуры по высоте, при том же самом размере тексела в мировом пространстве.

#138
7:37, 22 янв. 2020

Delfigamer
чтобы это выглядело нормально, тебе нужны нормальные текстуры с нормалмапами, глоссинессом итп. иначе и будет выглядеть как запечённое освещение в q2.

#139
8:27, 22 янв. 2020

Suslik
Я думаю, со встроенным GI получится всё-таки немного лучше, чем как в ку2.

#140
(Правка: 8:29) 8:28, 22 янв. 2020

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

#141
20:49, 23 янв. 2020

Покрутил несколько вариантов интерполяции.
Соседская:
Изображение
Билинейная:
Изображение
Бикубическая:
Изображение
Причём, сходу Википедия алгоритм давать не хочет, вместо этого закидывая читателя линейными системами с 16 неизвестными.
И только если внимательно вчитаться, можно посерединке статьи, мелким шрифтом, увидеть «но если уж вам так хочется готовый кернел, да ещё и с дефолтным параметром, так уж и быть, забирай свои грёбаные коэффициенты и вали отсюда, грязный казуал». Спасибо, вики, всегда знал, что не подведёшь.
Но бикубический интерполятор - это ж мейнстрим. Надо попробовать что-нибудь ещё.
Например, выкопать из Перспективного Два Де Вращателя ресэмплинг по Ланчозу:
Изображение
Хм... как-то не впечатляет.
Может, имеет смысл убрать нормализацию? Там просто веса у соседних кернелов не складываются в единицу, вот во Вращателе я и поделил сумму по свёртке на сумму весов.
Вот так будет чистая свёртка:
Изображение
Афигеть, те же квадраты, только стильные.
А что получится, если взять Ланчоза потолще - с кернелом не двойной ширины, а тройной?
Изображение
А если тройной Ланчоз без нормализации?
Изображение
Фу, перерегулировки! Вариант с тройным кернелом точно идёт на помойку.
Что там ещё осталось? О, точно, сплайн Катмулла-Рома.
...Который равнозначен бикубическому интерполятору, конечно же.

А в конечно итоге, сделаем вот что. Посмотрим в Суслика. Увидим "если сделаешь слишком фотореалистично, то упадёшь в зловещую долину". Поэтому выбираем самый очевидный вариант. Соседские квадратики.
Хотя, если бы целью было как раз избавиться от квадратиков, то тут лучше всего выглядит мейнстрим. Так уж и быть, мейнстрим победил.

#142
21:26, 23 янв. 2020

Delfigamer
Текстурки лучше потом взять попроще, без бампа аля Duke3D.
Например, как здесь:

+ Показать
#143
(Правка: 0:16) 0:15, 24 янв. 2020

Delfigamer
> Что там ещё осталось?
Подхачить UV координаты так, чтобы первая производная не ломалась (при линейной интерпояции), и оставить билинейную интерполяцию:
https://iquilezles.org/www/articles/texture/texture.htm

#144
0:32, 24 янв. 2020

MrShoor
> Подхачить UV координаты так, чтобы первая производная не ломалась (при линейной интерпояции), и оставить билинейную интерполяцию
Это испортит плавные градиенты :/

#145
1:19, 24 янв. 2020

Zegalur
> Текстурки лучше потом взять попроще, без бампа аля Duke3D.
Вообще, я хочу отрендерить именно конкретные карты из анрила.
Скорее всего, придётся перерисовывать текстуры во что-нибудь чистое и монотонное, приблизительно как в прототипах карт в UT4. Например и например.
А если текстуры будут собственноручные, то и за фильтрацию можно особо не беспокоиться - нарисовать всё сразу в фор кей ультра эйч ди, шлёпнуть бикубическую и пустить как есть.

MrShoor
> Подхачить UV координаты так, чтобы первая производная не ломалась (при линейной
> интерпояции), и оставить билинейную интерполяцию:

return lerp(a, b, w*w*(3 - 2*w));

Так это, там один фиг получается свёртка с полиномами, только кернел в два раза уже, и производная в центрах текселей всегда уходит в ноль - что, как уже заметили, ломает градиенты.
#146
1:34, 24 янв. 2020

Delfigamer
> что, как уже заметили, ломает градиенты.
Градиенты ломает, но посмотреть как оно будет выглядеть на твоих текстурах было бы интересно, не?

#147
1:44, 24 янв. 2020

Два тонмаппера.
Изображение
Слева - поэлементное экспоненциальное сжатие, {r,g,b} = Exp[1 - {R,G,B}].
Справа - цвет переводится в YCrCb, Y сжимается экспоненциально, Cr/Y и Cb/Y сохраняются. Считается как {r,g,b} = {R,G,B} * Exp[1 - Y[R,G,B]] / Y[R,G,B].
Вывод - всё говно. Надо освещать так, чтобы в одном кадре не было перепадов на 3 порядка.

#148
(Правка: 3:42) 3:41, 24 янв. 2020

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

#149
(Правка: 9:42) 9:38, 24 янв. 2020

14 spp
Изображение
Список для улучшений:
1. Настоящие материалы, с неламбертовым рассеянием;
2. Спекулярные вершины - зеркальные отражения и преломления, они в принципе между собой мало отличаются;
3. Разделение пространства - для коробки бессмыссленно, а вот в случае сцены выше вполне могло бы ускорить пересечения.
4. ГП, когда-нибудь, однажды, наверное.

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

Страницы: 16 7 8 9 10 11 Следующая »
ФлеймФорумПроЭкты