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

Альтернативные формулы затухания для поинт-лайтов

Страницы: 1 2 Следующая »
#0
(Правка: 12:17) 12:16, 29 июля 2021

Сделал поинт-лайты по уроку OpenGL. Получается как-то так:

Запустить видео по клику - Как делать игрыЗапустить видео по клику - Как делать игры


Для затухания используется формула

float attenuation = 1.0 / (light.constant + light.linear * distance + 
light.quadratic * (distance * distance));

Мне нужно чтобы поинт-лайт имел радиус освещения, к примеру, ровно 4 метра, чтобы за этим радиусом света не было вообще. Если пытаться это сделать по формуле выше, то свет получается слишком тусклым, нужные константы constant, linear, quadratic подобрать не получается, либо радиус света слишком велик, либо свет слишком тусклый.
Посоветуйте альтернативных формул затухания пожалуйста.


#1
12:25, 29 июля 2021

MikeNew
Inverse square falloff

#2
19:23, 29 июля 2021

Сделай линейно:

float radius = 4;
if (distance < radius)
  diffuse = (radius - distance) / radius;
else
  diffuse = 0;

#3
19:27, 29 июля 2021

MikeNew
> либо радиус света слишком велик, либо свет слишком тусклый.
А выводишь ты в sRGB текстуру или просто в RGB?

#4
20:16, 29 июля 2021

Через min или clamp

#5
23:44, 29 июля 2021

если реалистичность не критична, то можно попробовать что-то вроде:

float atten = 1 - min(1, distanceToLight / light.radius);
atten = pow(atten, 3 - atten);
голимый фейк и тупой до предела, но более менее мягкий спад даст по заданному радиусу.

#6
14:36, 30 июля 2021

MikeNew
> Мне нужно чтобы поинт-лайт имел радиус освещения, к примеру, ровно 4 метра,
> чтобы за этим радиусом света не было вообще

что значит тебе нужно? ты по физике делаешь или по своему желанию?

#7
5:55, 31 июля 2021

по физике скорость света 3000млнкилометров всекунду.

#8
7:29, 31 июля 2021

ИПавлов
> по физике скорость света 3000млнкилометров всекунду.
Дальность вижимости обычноменее километра, поэтому до 300млн фпс можно не учитывать)

#9
12:15, 31 июля 2021
поэтому до 300млн фпс можно не учитывать)

Что значит не учитывать !
Энуендо хочет же по физике делать ! :)
#10
13:06, 31 июля 2021

ronniko
> Что значит не учитывать !
А как ты будешь это учитывать? У тебя за один кадр свет пройдет от любого источника до любой видимой точки сцены, даже если 100 раз отразится.
Так то и физику надо интегрировать с самым малым шагом (была же новость, что есть минимально возможный промежуток времени).

#11
13:25, 31 июля 2021

Сделай дир-лайт и тени (хотяб PCF или PCSS) и будет всё выглядеть иначе. А щас у тебя кеквэ какой-то... И придираешься к поинтам.

#12
(Правка: 13:54) 13:51, 31 июля 2021

MrShoor
> А выводишь ты в sRGB текстуру или просто в RGB?
Вот благодаря этому твоему комменту нашел у себя баг - очень темные цвета были неправильные когда я вручную делал гамма-коррекцию в финальном фрагментом шейдере.
Перевел все в SRGB на уровне настроек Вулкана, чтобы все абсолютно делалось автоматом (свапчайн в SRGB) - очень темные цвета стали правильными. Раньше этой проблемы не видел поскольку очень темных областей не было.
marggob
> голимый фейк и тупой до предела, но более менее мягкий спад даст по заданному
> радиусу.
Неплохо выглядящий, кстати. Не найди я самую малость лучше (по моему субъективному мнению) - им бы и воспользовался.
innuendo
> что значит тебе нужно? ты по физике делаешь или по своему желанию?
Я не Матрицу делаю, чтобы все было строго по физике. Пусть будет немного не по физике, зато я больше поинт-лайтов и омни-теней накидаю. Ты же столько в геймдеве варился, сам же знаешь что весь геймдев больше чем наполовину из фейков состоит, из соображений оптимизации.
Mikle
> Сделай линейно:
Само по себе это выглядело не очень, но когда я смешал это с оригиналом из уроков OpenGL (сделал как второй коэфициент), то получил вполне удовлетворивший меня результат:

Запустить видео по клику - Как делать игрыЗапустить видео по клику - Как делать игры
#13
13:58, 31 июля 2021

lookid
> Сделай дир-лайт и тени (хотяб PCF или PCSS)
Что имеется в виду под дир-лайт? Типа свет от Луны?
До мягкий теней еще руки не дошли, на очереди.

#14
(Правка: 14:38) 14:20, 31 июля 2021

Можно так (кусок фрагментного шейдера):

+ Показать

Вместо Cos можно поставить Exp или табличные значения по кривой или иной функции.
Exp ближе всего к реальному распространению света в воздухе.

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