|
|
|
Канал Игры Мечты: «Алгоритмические вопросы.» |
|
|
Jurec 348 EGP
Рейтинг канала: 4(76) Репутация: 102 Сообщения: 1441 Заблокирован Откуда: Seattle Зарегистрирован: 25.02.2006 |
|
Сорри, деформация. Все цвета это три компонента от 0 до 1. Дробные.
Умножение и сложение для цвета определены именно так как ты считаешь бессмысленным.
Сложение цвета:
R = clamp(R1 + R2, 0.0, 1.0)
G = clamp(G1 + G2, 0.0, 1.0)
B = clamp(B1 + B2, 0.0, 1.0)
Где цвет итоговый(R, G, B)
Умножение цвета:
R = R1 * R2
G = G1 * G2
B = B1 * B2
Где цвет итоговый(R, G, B)
Теперь подставь это в мои первоначальные формулы.
добавлено спустя 3 минуты:
Если бы мне нужно была помощь с этой заморочкой, я бы про ней спросил. А мне с ней помощь не нужна совсем
ОК, расстояние от точки до источника света не учитываем
_________________ MOV topka, C++
Последний раз редактировалось: Jurec (19:13 04-09-2014), всего редактировалось 1 раз |
|
|
Shirson 1605 EGP
Рейтинг канала: 7(626) Репутация: 219 Сообщения: 16511 Откуда: 79°W 44°N Зарегистрирован: 29.01.2002 |
|
Minx : |
Shirson : |
Нет никаких других вопросов, кроме как заданные в топикстарте - есть RGB-точка, на неё светит RGB-источник(и) света, как вычислить RGB-результат. Интересует только это.
|
Пациент: "Я понимаю Ширсона."
Доктор (роняя очки на стол): "Оп-паньки..."
(;
|
Но ведь всё предельно просто и ясно изложено! Но ведь нахер нет никаких расстояний, динамик рэнджей и прочей ереси! Ну почему народ постоянно шатает отвечать не на мой вопрос, а на свой ответ?!?!
И ты меня действительно понял, кстати, причём полностью
Shirson : |
Нет никаких других вопросов, кроме как заданные в топикстарте...
Не нужно заморачиваться дистанциями...
|
Guest : |
и удалённость от источника ещё наверное надо - а значит...
|
_________________ У меня бисера не доxеpа.
Последний раз редактировалось: Shirson (19:46 04-09-2014), всего редактировалось 3 раз(а) |
|
|
Guest 2075 EGP
Рейтинг канала: 5(167) Репутация: 376 Сообщения: 27975 Откуда: Моск. Зарегистрирован: 12.10.2004 |
|
Ну не хочете - как хочете
добавлено спустя 1 минуту:
А шо вы там про бинарные операции?..
_________________ Трещит земля как пустой орех
Как щепка трещит броня
Последний раз редактировалось: Guest (19:42 04-09-2014), всего редактировалось 1 раз |
|
|
Shirson 1605 EGP
Рейтинг канала: 7(626) Репутация: 219 Сообщения: 16511 Откуда: 79°W 44°N Зарегистрирован: 29.01.2002 |
|
Jurec : |
Сорри, деформация. Все цвета это три компонента от 0 до 1. Дробные.
|
Теперь понятно.
Цитата: |
Сложение цвета:
R = clamp(R1 + R2, 0.0, 1.0)
|
Как работает clamp?
добавлено спустя 8 минут:
Если вот так:
Код: |
Pseudocode (clamping):
function clamp(x, min, max):
if (x < min) then
x = min;
else if (x > max) then
x = max;
return x;
end clamp |
то по мне, это будет несколько странно выглядеть.
Хотя надо попробовать.
_________________ У меня бисера не доxеpа.
Последний раз редактировалось: Shirson (19:59 04-09-2014), всего редактировалось 2 раз(а) |
|
|
Jurec 348 EGP
Рейтинг канала: 4(76) Репутация: 102 Сообщения: 1441 Заблокирован Откуда: Seattle Зарегистрирован: 25.02.2006 |
|
Да, ты привел точное определение clamp'a
Shirson : |
то по мне, это будет несколько странно выглядеть.
Хотя надо попробовать.
|
Ну так делают в большинстве случаев, чтоб не сказать что "во всех".
Эта операция заложена в самом GPU (инструкции ADD_SAT, MUL_SAT)
Как ты понимаешь clamp отрежет значения больше 1.0. Которые как раз и являются "засветом". Если нужно сделать "засвет" - надо делать иначе немного. Но это вроде другая история. Или нет?
_________________ MOV topka, C++
Последний раз редактировалось: Jurec (21:15 04-09-2014), всего редактировалось 3 раз(а) |
|
|
Shirson 1605 EGP
Рейтинг канала: 7(626) Репутация: 219 Сообщения: 16511 Откуда: 79°W 44°N Зарегистрирован: 29.01.2002 |
|
Я это всё понимаю, я просто не очень уверен, что пять источников 0.2 должны светить как 10.
Проверю эксперементально.
С засветками у меня немного другое. У меня это планируется как одна из важных (очень) частей геймплея, но посмотрим по месту, как это реализовывать и обсчитывать, когда уже будет готовая и работоспособная модель освещения.
_________________ У меня бисера не доxеpа. |
|
|
Guest 2075 EGP
Рейтинг канала: 5(167) Репутация: 376 Сообщения: 27975 Откуда: Моск. Зарегистрирован: 12.10.2004 |
|
Shirson : |
я просто не очень уверен, что пять источников 0.2 должны светить как 10.
|
Они и не должны, они должны как 1.0
Если они совпадают по цвету, разумеется.
_________________ Трещит земля как пустой орех
Как щепка трещит броня
Последний раз редактировалось: Guest (22:33 04-09-2014), всего редактировалось 1 раз |
|
|
Jurec 348 EGP
Рейтинг канала: 4(76) Репутация: 102 Сообщения: 1441 Заблокирован Откуда: Seattle Зарегистрирован: 25.02.2006 |
|
Ты всмысле что 5*0.2 == 1.0 и 10*0.2 == 1.0?
Ну да, это засвет получается.
_________________ MOV topka, C++ |
|
|
Shirson 1605 EGP
Рейтинг канала: 7(626) Репутация: 219 Сообщения: 16511 Откуда: 79°W 44°N Зарегистрирован: 29.01.2002 |
|
Именно что.
Похожий нестык с 1,1,1 + 5 х 1,0,0. Результирующий свет будет девственно бел.
_________________ У меня бисера не доxеpа.
Последний раз редактировалось: Shirson (22:51 04-09-2014), всего редактировалось 1 раз |
|
|
Jurec 348 EGP
Рейтинг канала: 4(76) Репутация: 102 Сообщения: 1441 Заблокирован Откуда: Seattle Зарегистрирован: 25.02.2006 |
|
Если цвет точки = (1,1,1) и цвет источника света = (1,0,0) Результат будет:
(1, 1, 1) * (1, 0, 0) = (1*1, 1*0, 1*0) = (1, 0, 0)
Не вижу проблемы.
_________________ MOV topka, C++ |
|
|
Shirson 1605 EGP
Рейтинг канала: 7(626) Репутация: 219 Сообщения: 16511 Откуда: 79°W 44°N Зарегистрирован: 29.01.2002 |
|
Цитата: |
Результирующий свет будет девственно бел.
|
Речь про сложение источников.
_________________ У меня бисера не доxеpа.
Последний раз редактировалось: Shirson (22:59 04-09-2014), всего редактировалось 3 раз(а) |
|
|
Jurec 348 EGP
Рейтинг канала: 4(76) Репутация: 102 Сообщения: 1441 Заблокирован Откуда: Seattle Зарегистрирован: 25.02.2006 |
|
В твоей задаче источник света (1,1,1) не имеет затухания по расстоянию.
Это уберсверхновая звезда. Не надо так
добавлено спустя 11 минут:
Я так ненавязчиво говорю что затухание света - must have для любого источника света. Ну кроме направленного (у которого нет позиции, а есть только вектор)
_________________ MOV topka, C++
Последний раз редактировалось: Jurec (23:10 04-09-2014), всего редактировалось 1 раз |
|
|
Guest 2075 EGP
Рейтинг канала: 5(167) Репутация: 376 Сообщения: 27975 Откуда: Моск. Зарегистрирован: 12.10.2004 |
|
Shirson : |
Похожий нестык с 1,1,1 + 5 х 1,0,0. Результирующий свет будет девственно бел.
|
Будет или должен быть? Давай от результата, а то вообще (1,1,1) получается (1,1,1) при абсолютно любом освещении, кроме отрицательного (ну, если освещать такую точку лампой (-1,0,0) - мы получим красивую голубую точку).
мля яневнимателен
_________________ Трещит земля как пустой орех
Как щепка трещит броня
Последний раз редактировалось: Guest (23:16 04-09-2014), всего редактировалось 1 раз |
|
|
Minx 985 EGP
Рейтинг канала: 6(329) Репутация: 135 Сообщения: 10533 Откуда: Gomel, Belarus Зарегистрирован: 19.11.2005 |
|
Jurec : |
В твоей задаче источник света (1,1,1) не имеет затухания по расстоянию.
Это уберсверхновая звезда. Не надо так
|
Свет с расстоянием не убывает, а рассеивается.
Например если платформер, а источник за много млн км, т.е. свет сверху параллельные лучи, то свет не затухает, а тени прямо вниз.
_________________ μηδείς αγεωμέτρητος εισίτω |
|
|
Olorin 70 EGP
Рейтинг канала: 1(6) Репутация: 12 Сообщения: 97 Откуда: Хьёрвард Зарегистрирован: 27.02.2006 |
|
Guest : |
Olorin : |
resultColor = pointColor * Max(lightsColor.Select(c => c / 255.0).Sum(), 1.0) // для каждой компоненты
|
А единичка зачем? Этак у тебя получается, что при отсутствии освещения или слабом освещении точка имеет полностью свой цвет, то есть самосветима.
|
Min конечно же!
_________________ Мы на многое не отваживаемся не потому что оно трудно; оно трудно именно потому, что мы на него не отваживаемся.
Сенека Старший |
|
|
Guest 2075 EGP
Рейтинг канала: 5(167) Репутация: 376 Сообщения: 27975 Откуда: Моск. Зарегистрирован: 12.10.2004 |
|
Shirson : |
Похожий нестык с 1,1,1 + 5 х 1,0,0. Результирующий свет будет девственно бел.
|
Ну смотри - если ты работаешь в ограниченном пространстве [0.0, 1.0] - то да, ты уже пересветил первым источником всё, и любые действия, кроме вычитания, никакого эффекта нести уже не могут в принципе. Потому что не вычислимы отсекаются ограничением пространства (clamp(0.0, 1.0)).
Можно пойти другим путём:
Vector( (1.0, 1.0, 1.0) + 5 х (1.0, 0.0, 0.0) ).Normalize();
Тогда ты и цветовой взнос сохранишь (6 частей красного, по одной части синего и зелёного = очень красная (и относительно белого тёмная) лампа цвета (1, 0.16, 0.16)), и в потолок упрёшься.
Но выглядеть, особенно на экстремальных случаях, будет ну очень странно.
добавлено спустя 5 минут:
В сторону усложнения ещё можно отдельно считать цвет и интенсивность, тогда с 1,1,1 + 5 х 1,0,0. будет цвет нормализованный как выше, а интенсивность будет нормализатром, т.е. 6. Но как это отображать на точку - вообще хз. То есть в чём будет разница между светами (1, 0.2, 0.2) интенсивностью 6 и интенсивностью 3.
добавлено спустя 4 минуты:
Ой, не, нормализовать тупо нельзя, это же к единице приводит даже если изначально длина меньше 1.
Тогда... Нормализовать, если любая компонента цвета стала больше 1.0?.. Какая-то кривая компрессия получается.
Что нужно получать при пересвете цветных источников?
_________________ Трещит земля как пустой орех
Как щепка трещит броня
Последний раз редактировалось: Guest (23:34 04-09-2014), всего редактировалось 5 раз(а) |
|
|
Olorin 70 EGP
Рейтинг канала: 1(6) Репутация: 12 Сообщения: 97 Откуда: Хьёрвард Зарегистрирован: 27.02.2006 |
|
Guest : |
В сторону усложнения ещё можно отдельно считать цвет и интенсивность, тогда с 1,1,1 + 5 х 1,0,0. будет цвет нормализованный как выше, а интенсивность будет нормализатром, т.е. 6. Но как это отображать на точку - вообще хз. То есть в чём будет разница между светами (1, 0.2, 0.2) интенсивностью 6 и интенсивностью 3.
добавлено спустя 4 минуты:
Ой, не, нормализовать тупо нельзя, это же к единице приводит даже если изначально длина меньше 1.
Тогда... Нормализовать, если любая компонента цвета стала больше 1.0?.. Какая-то кривая компрессия получается.
|
Угу. Отдельные точки нельзя. Можно попробовать весь растр нормализовать: тут и пересвет - яркие места будут нужного цвета, а остальное затемнится, вроде эффекта ослепления от яркого света.
PS Где-то я читал, что эту проблему грамотной расстановкой источников на уровне левел-дизайна решают обычно. В динамичных же сценах никто не оттенки яркости внимания не обращает, т.к. оно относительно быстро из виду пропадает.
_________________ Мы на многое не отваживаемся не потому что оно трудно; оно трудно именно потому, что мы на него не отваживаемся.
Сенека Старший
Последний раз редактировалось: Olorin (23:44 04-09-2014), всего редактировалось 3 раз(а) |
|
|
Guest 2075 EGP
Рейтинг канала: 5(167) Репутация: 376 Сообщения: 27975 Откуда: Моск. Зарегистрирован: 12.10.2004 |
|
Olorin : |
Можно попробовать весь растр нормализовать
|
Весь нельзя, это тупо Tone Mapping из HDR в LDR, а нам это не надо
_________________ Трещит земля как пустой орех
Как щепка трещит броня |
|
|
Olorin 70 EGP
Рейтинг канала: 1(6) Репутация: 12 Сообщения: 97 Откуда: Хьёрвард Зарегистрирован: 27.02.2006 |
|
Guest : |
Olorin : |
Можно попробовать весь растр нормализовать
|
Весь нельзя, это тупо Tone Mapping из HDR в LDR, а нам это не надо
|
Дык если разрешать получаться интенсивностям за пределами LDR, то в любом случае придется это делать.
_________________ Мы на многое не отваживаемся не потому что оно трудно; оно трудно именно потому, что мы на него не отваживаемся.
Сенека Старший |
|
|
Jurec 348 EGP
Рейтинг канала: 4(76) Репутация: 102 Сообщения: 1441 Заблокирован Откуда: Seattle Зарегистрирован: 25.02.2006 |
|
Minx : |
Свет с расстоянием не убывает, а рассеивается.
Например если платформер, а источник за много млн км, т.е. свет сверху параллельные лучи, то свет не затухает, а тени прямо вниз.
|
Если источник за много км - это directed light (направленный источник - я раньше писал). Что сейчас у Shirson'а и имеется.
Я же говорю о point light'ах у которых свет затухает/убывает/рассеивается.
Ибо в одной сцене иметь несколько directed light'ов.. ну мало смысла тут.
Guest : |
Vector( (1.0, 1.0, 1.0) + 5 х (1.0, 0.0, 0.0) ).Normalize();
Тогда ты и цветовой взнос сохранишь (6 частей красного, по одной части синего и зелёного = очень красная (и относительно белого тёмная) лампа цвета (1, 0.16, 0.16)), и в потолок упрёшься.
Но выглядеть, особенно на экстремальных случаях, будет ну очень странно.
|
Ты пытаешься придумать заново tone mapping с его exposure. Типа когда глаз смотрит в темноте - он привыкает постепенно - из (0, 0, 0) появляются какие-то значения типа (0.01, 0.002, 0.03) -- которые ты уже можешь разобрать.
То же самое с засветами и яркими комнатами.
Еще добавляют скорость адаптации (имитация глаза) и вот тоже вот так меняют цвет.
Разве нет?
добавлено спустя 1 минуту:
Guest : |
Весь нельзя, это тупо Tone Mapping из HDR в LDR
|
Весь НАДО, потому что тогда ты затушишь одни источники света, а другие не тронешь. Итого получится очень некорректная картинка
_________________ MOV topka, C++
Последний раз редактировалось: Jurec (00:51 05-09-2014), всего редактировалось 2 раз(а) |
|
|
|
|
|
Канал Игры Мечты: «Алгоритмические вопросы.» |
|