Какая функция (или набор разных ф-ий) изменения «мощности» цвета света при распространении луча?
Не могу понять, какая реалистичная, или вообще хоть какая-нибудь функция уменьшения "чего-то там" луча.
Есть луч лазера, допустим задан Красным цветом, он распространяется, отражается, как будет манятся цвет луча(вообще в какую сторону он меняется, в белую или черную), как будет смешиваться с цветом поверхности?
Допустим есть некий параметр мощности, веса, или может есть какой-то показатель из физики. По идее надо просто блендить цвет, через Lerp(colorObject, colorRay, force) допустим, может есть другие варианты;
Вот как будет менятся этот показатель по мере удаления от источника и отражении.
При отражении источник цвета меняется на точку отражения.
Какие параметры еще должны учитываться. Типа там наверное материал обхъекта, какой-то показатель есть, но а какая будет общая функция.
Типа допустим, я хочу провести луч на 100 ед. так что бы на расстоянии 100 луч невидим уже. И вот он прошел 100 ед, 10 раз отразившись по ходу.
Еще функция так реализована, что имеется только начальное значение "длины луча". И итератор может вернуть расстояние до объекта и сам объект. То есть допустим начальное расстояние зададим как мощность, и на каждой итерации некоторого алгоритма оно должно уменьшаться на функцию от расстояния до объекта. Возможно сам подход неверен.
Типа допустим такой выход
1 объект. dist 20 force 80
2 объект. dist 20 force 60
3 объект. dist 40 force 20
4 объект. dist 19 force 1
Для правильного вопроса надо знать половину ответа
У реального материала есть спектры пропускания, поглощения и отражения, показывающие, соответственно, какое количество света проходит сквозь материал, поглощается материалом и отражается от него в зависимости от длины волны. Кроме этого есть диффузное и зеркальное отражения, субповерхностное рассеивание. Может добавляться ещё спектр излучения и/или переизлучения.
Если вы посветите красным лазером на зелёный непрозрачный материал, то бОльшая часть света или весь он будет поглощён, отражения почти не будет. На красном материале напротив, отразится почти весь свет.
При полностью зеркальном отражении луча будет классическая формула "угол падения равен углу отражения". При диффузном часть света будет рассеяна во всех направлениях. Если добавляется субповерхностное рассеивание, то чёткий кружок от лазера увеличится, станет диском с размытым краем.
Собственно, откройте редактор материалов какого-либо 3D-моделлера и посмотрите, сколько там задаётся параметров.
Если посветить красным лазером на зеленый материал, то далеко не факт что он почти весь поглотиться. Все зависит от спектра поглащения вещества. Например, зеленые изумруды достаточно хорошо пропускают в красной области. На этом основан один из способов их идентификации. См. фильтр Челси.
U235U235, Я специально указал, что материал непрозрачный. Значит его цвет обусловлен исключительно отражением в зелёном диапазоне, остальные цвета, в том числе и красный, поглощаются.
Для прозрачных материалов надо учитывать спектр пропускания. У того же изумруда всё зависит от примесей. Некоторые образцы уральских изумрудов могут хорошо пропускать красный света (650 нм), а некоторые практически непрозрачны в этом диапазоне (рис. 8).
Rsa97, в данном случае большой разницы нет, спектр пропускания или отражения. Обычно (но не всегда, коллоидное окрашивание - исключение) они сходны по пикам. Если вы тонко измельчите изумруд, сделаете из него пигмент, то пикам отражения будут соответствовать пики пропускания.
Возьмите спектры отражения пигментов, там далеко не всегда только один пик.
Для желтых (лимонных) пигментов часто характерно только поглащение в сине-фиолетовой области, а все остальные длины волн отражаются/пропускаются.
Это называется яркость света. Цвет лазера особо не меняется. Наверно, можно считать, что яркость уменьшается очень медленно линейно из-за рассеивания воздухом. Для не лазерных источников света яркость убывает квадратично от расстояния.
то есть правильно ли так, допустим я задаю начальное значение яркости, а далее его уменьшаю на квадрат расстояния * pi . И у места отражения, будет этот показатель как L=L-L/(r*r*3.14) плюс какой-то штраф за рассеивание цвета допустим 30%.
SergeySerge11, Не надо считать отражение новым источником света, надо помнить пройденное до отражение расстояние и считать сумму до отражения и после.
Формула для яркости будет P/(l*l+0.001). 0.001 чтобы деления на 0 случайно не было. P - параметр источника света, l - длина пути луча. Можно не считать штраф на рассеивание, ибо он будет незаметен на фотне вот этого.
Wataru, не работает как ожидаю, По этой формуле, интенсивность в разы падает уже при малейшем шаге.
Тогда как я ожидаю более менее плавное по градиенту изменение цвета. Мне же нужен финальный параметр для блендинга. А он сразу же в 2 раза падает на расстоянии 1.4, тогда как ожидаю под 100%.
Я просто не понимаю, где взять параметр, который я засуну в функцию Lepr(color1,color2,f)
По этой формуле, интенсивность в разы падает уже при малейшем шаге.
Нужно различать то, что принято называть spot light и omni light. Первое - это прожектор, свет направлен в одну сторону. Второе - это солнце (свет распространяется по всем направлениям). Лазер - частный случай прожектора. Формула, по которой вы сейчас считаете годится для солнца. И да, если вы подлетите к Солнцу вдвое ближе, чем находитесь сейчас, то действительно света (и тепла) будет в 4 раза больше, вы уже натурально поджаритесь, не потребуется даже подлетать совсем близко. И если вы полетите вдаль от Солнца, то уже на Марсе света (и тепла) будет намного меньше (в разы), так что формула даёт правильный результат. Но идеальный луч лазера распространяется бесконечно далеко без рассеяния, следовательно и не ослабевает вообще, на любом расстоянии. Реальный лазер - это чуть-чуть "прожектор", т.е. луч его рассеивается очень узким конусом. Допустим, на пути луча такого лазера-прожектора оказался объектив и вы хотите знать, сколько света попало в объектик. Это зависит не только от угла конуса, не только от расстояния, но и от площади объектива. Пока объектив относительно близко от источника, весь конус попадает в площадь объектива, значит весь излучённый свет попадёт в объектив, без потерь (считаем, что можем пренебречь рассеянием на молекулах газа или другой среды, через которую идёт луч). Когда объектив достаточно далеко, уже попадает только часть конуса. Т.е. для модели spot light есть некое критическое расстояние, до которого весь свет прожектора попадает на собирающую его поверхность, а дальше ослабевает опять же обратно квадрату расстояния.
Теперь посмотрим с точки зрения закона сохранения энергии. Источник излучил сколько-то энергии в виде излучения. Части этой энергии могут быть:
- поглощены (энергия переходит в другую форму);
- отражены поверхностью (меняется только направление излучения);
- рассеяны (можно считать частным случаем отражения, когда каждый квант отражается в случайном направлении (в определённых пределах)).
Яркость лазера должна меняться с дальностью экспоненциально — яркость = A·e{Bx}: чем больше фотонов, тем больше рассеивается, дифур y’=−ky.
Не забывайте, что sRGB сам нелинейный и состоит из линейного и степенного участка, но в целом неплохо приближается функцией y^2,2.