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

mix colors? (3 стр)

Страницы: 1 2 3 4 Следующая »
#30
5:13, 18 мая 2019

IBets
> Вопрос про числовой ряд (7) из пэйпера у Unreal. Почему так можно разложить?
потому что [cht]\sum_{i=1}^{N}a_i \sum_{j=1}^{N}b_j=\sum_{k=1}^{N}a_k b_k + \sum_{i \neq j}a_i b_j[/cht], то есть они пренебрегают членом с i != j. это может быть достаточно сильным допущением в некоторых случаях (например, glossy отражения при наблюдении поверхности под малым углом).

#31
(Правка: 7:33) 7:21, 18 мая 2019

Suslik
Немножно оффтоп. Поскольку я последнее время работаю исключительно в VR, и в дизайне у меня куча стеклянной посуды (ну сюжет такой - лаборатория алхимика), то пришлось реализовывать всякое химическое стекло. Что интересно - формулы френселя в 3D работают довольно хреново. Поначалу я шел строго по теории, но что-то было не то.... На скриншотах - зашибись, а в реальности (в очках) - как-то не так... Отражения по краям явно не хватало. После долгих экспериментов пришел к такой формуле (может тут что-то лишнее, но лень уже было вылизывать):

if (solid == 0) // if transparent
{
  float3 eye_dir = normalize(vsOut.Pos - m_Pos);
  float3 v_reflect = reflect(eye_dir, Normal.xyz);

  float D = abs(dot(normalize(m_Pos.xyz - vsOut.Pos.xyz), Normal.xyz));

  TexCol.xyz *= lerp(1.0, 0.5 + D * 0.5, TexCol.a);

  float F = clamp(1.0 - D, 0, 1);
  TexCol.a += F*F*F*F;

  float4 P = Panoram.SampleLevel(Linear, v_reflect, 4); // это кубемап

  float R = smoothstep(0.6, 0.8, P.b)*D*D;
  TexCol.xyz += P*R*0.5;

  TexCol.a += R*0.3;
  TexCol.xyz *= (1.5 - 0.5*smoothstep(0.0, 0.3, D));

  float d = 1.0 - D;
  TexCol.xyz = lerp(TexCol.xyz, P.xyz, d*d);

  d = (1.0-smoothstep(0.0, 0.5, D));
  TexCol.a += d;
}
Никоим боком не претендую на что-то оригинальное, но этот вариант стеклянной посуды выглядит именно как СТЕКЛЯННАЯ ПОСУДА. Очень натурально. Я еще сделал что-то вроде драгоценностей (там отражение и преломление), но это уже чистая эвристика.
Резюме - восприятие игры света в 2D и 3D очень сильно различается. Почему - х.з.
#32
8:23, 18 мая 2019

san
> TexCol.a += F*F*F*F;

таки Fresnel pow 4

#33
(Правка: 9:03) 8:45, 18 мая 2019

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

вот так выглядит очень брутфорсный рендер с френелем из учебника физики, дисперсией и бесконечными внутренними переотражениями:
Изображение
вот так выглядят случайные референсы из интернетов:

+ Показать

innuendo
> таки Fresnel pow 4
это аппроксимация. точная формула — через коэффициенты преломления.

#34
8:57, 18 мая 2019

Suslik
> точная формула — через коэффициенты преломления.

я, конечно, про это впервые слышу :)

#35
11:11, 18 мая 2019

Suslik
Да уж жестковатое допущение. Я и спросил поэтому

#36
16:05, 18 мая 2019

Suslik
> обычно если реальная физика работает довольно хреново, это лишь обозначает, что кто-то её криво реализовал.

Там нечего "криво реализовывать" - формулы достаточно просты и однозначны. Дело в том, что экран компьютера и особенно экран хедсета VR сильно отличается от реального (физического) мира. Что бы глаз воспринимал эту картинку более естественно, приходится отходить от математически правильных физических законов и что-то утрировать, а что-то убирать.
Еще раз - я не покушаюсь на формулы Френеля, я просто говорю, что для лучшей ИМИТАЦИИ реального мира на устройствах с ограниченным разрешением и динамическим диапазоном приходится идти на отступления от реальной физики.

#37
17:03, 18 мая 2019

san
Интересно, что там не так с pbr в vr? Я пока кроме более сильной яркости в темных местах ничего не замечал. Есть демка, чтобы увидеть оптимизированное и неоптимизированное стекло для htc vive?

#38
17:32, 18 мая 2019

BingoBongo
У меня рифт, до портирования на вайв мне где-то полгода - аппликация в середине цикла разработки. А на 2D скриншотах ничего не понять.

#39
(Правка: 18:11) 18:09, 18 мая 2019

san
> Дело в том, что экран компьютера и особенно экран хедсета VR сильно отличается
> от реального (физического) мира. Что бы глаз воспринимал эту картинку более
> естественно, приходится отходить от математически правильных физических законов
> и что-то утрировать, а что-то убирать.
брехня. чтобы глаз воспринимал картинку более естественно, существуют нелинейные цветовые пространства вроде srgb, на которых должен быть построен любой рендер. а не волшебный подгон какими-то левыми костылями.

> Там нечего "криво реализовывать" - формулы достаточно просты и однозначны.
если бы у меня было лишнее свободное время, я мог бы поспорить, что ты где-то накосил. но у меня его нет, поэтому можешь оставаться при своём мнении.

#40
18:44, 18 мая 2019

san
> Что бы глаз воспринимал эту картинку более естественно, приходится отходить от
> математически правильных физических законов и что-то утрировать, а что-то
> убирать.
Если вывести стерео видео/фото то тоже выглядит неестественно?

#41
(Правка: 19:24) 19:11, 18 мая 2019

Suslik
> брехня. чтобы глаз воспринимал картинку более естественно, существуют нелинейные цветовые пространства вроде srgb, на которых должен быть построен любой рендер
Я на твоем месте не бросался бы резкими заявлениями без практического опыта в том, о чем ты судишь. Я говорю не о цветах, с этим как раз все нормально, а об особенностях ЧЕЛОВЕЧЕСКОГО восприятия мира в 3D хедсете. Из-за довольно слабого разрешения мир становится заметно пикселизированным. Другой вариант - заблуренным. При движении головы из-за неизбежного алиасинга возникает мерцание. С этим можно бороться (у меня например используется суперсемплинг 2x2 в добавок к MSAA), но до конца это не устранить. Все получается намного хуже если предмет прозрачный. Функции Френеля (с некоторым приближением) дают переход от отражения к рефракции как пятая степень от угла зрения. В случае низкого разрешения это приводит к тому, что рефракция включается на самом краю сферических предметов и крайне нестабильна. Другими словами при малейшем движении головы предмет начинает мерцать на гранях со страшной силой. То же самое с отражением - отраженные предметы начинают шевелиться на один пиксель (при центральном поле зрения всего в 600х600 пикселей это хорошо заметно) и мерцать. Ограничение на разрешение кубемапа еще сильнее усугубляет эту картину. Короче на поведение стекла это никак не похоже. Потому приходится искать какой-то компромис между физической природой и восприятием этой физики в реальном (современном) VR мире. Наверно когда разрешение хедсетов поднимется до 4K на глаз, можно будет эти ухищрения забыть, но пока увы...

Андрей5000
> Если вывести стерео видео/фото то тоже выглядит неестественно?
Не пробовал, если честно - просто времени нет. Я вижу то, что на контрольном экране - там все выглядит совсем не так как в шлеме. В шлеме предметы живые, на картинке - какие-то сушеные.

#42
19:32, 18 мая 2019

san
> Наверно когда разрешение хедсетов поднимется до 4K на глаз, можно будет эти
> ухищрения забыть, но пока увы...
Ну, в 2019 никто не запрещает отрендерить в 4к и сделать downscale. Вопрос в fps )

#43
19:49, 18 мая 2019

BingoBongo
> Ну, в 2019 никто не запрещает отрендерить в 4к и сделать downscale. Вопрос в fps )
Ты можешь отрендерить хоть в 8К но выводится то это все в экран 1080x1200 и то из него ты видишь только центральную часть.
Разумеется после суперсемплинга картинка будет лучше, но пикселизация все равно останется. Ну и про фпс конечно нельзя забывать. Я на своей карте могу потянуть суперсемплинг 4х4, R9 nano на пределе тянет только 2х2, но не факт что у всех юзеров будут карты не слабее. Потому приходится рассчитывать на худший случай и тестировать без суперсемплинга. Сейчас у меня вроде получилось найти компромис - стекло смотрится довольно пристойно во всех режимах. Но с суперсемплингом конечно лучше.

#44
0:19, 19 мая 2019

san
Для VR не редка практика рендерить в размере 1.4х. После 2х разница уже едва заметна. Ну, дело твое.

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