На самом деле это намного сложнее. Свет и материал поверхности взаимодействуют по формуле, называемой двунаправленной функцией распределения отражательной способности (BRDF, для краткости), 4-мерной функцией, входными данными которой являются направление света и направление угла обзора (оба относительно нормали к поверхности, т.е. единичный вектор, перпендикулярный поверхности), и выход которого представляет собой отношение исходящего излучения в направлении взгляда к входящему излучению в направлении света.
Нет простого способа объяснить это в этом коротком месте. Возможно, вы могли бы просмотреть статью Википедии, а также ссылки на нее или даже взломать открыть приличный учебник по компьютерной графике?
Но достаточно сказать, что для многих BRDF это сродни «умножению» в том смысле, что идеально отражающая Ламбертовская чисто красная поверхность, освещенная идеально синим светом, должна выглядеть черной.
Есть несколько усложняющих факторов: Никакой реальный свет, кроме лазера, не излучает чистый основной цвет с другими компонентами, равными 0,0. (Избегайте этого, если вы хотите получить реалистичное изображение.) Никакая реальная поверхность не отражает все на одной длине волны, а остальные компоненты цвета равны 0,0. (Избегайте этого, если вы хотите получить реалистичное изображение.) На самом деле ни один материал не является полностью ламбертовским (чисто диффузным) — обычно есть некоторый зеркальный компонент, который имеет тенденцию отражать свет на поверхности, прежде чем они попадут на какой-либо нижележащий пигмент, и, следовательно, это часть отраженного света будет выглядеть как цвет света, а не поверхности. Если это не металл, в этом случае «цвет» металла влияет на отражение. Вздох. Как я уже сказал, это сложно, и вам нужно на самом деле читать по физике (а также 40 лет исследований компьютерной графики, в ходе которых все эти проблемы были решены задолго до того, как вы задумались об этой проблеме).
Дополнительный ответ («что происходит с неосвещенной точкой»): действительно неосвещенные точки должны быть черными. Но вы наверняка знали это, как и тот факт, что в любой реальной ситуации нет точки, которая не освещается (а также может быть сфотографирована). Более интересная формулировка вопроса звучит так: мои рендереры учитывают только прямые пути света от источников, а не все непрямые пути (от объекта к объекту), которые освещают более темные углы, так как же мне предотвратить это от того, чтобы стать черным? Дешевый ответ — добавить «рассеивающий» свет, который просто отбрасывает постоянное количество света повсюду. Это то, что люди делали в течение долгого времени, и это выглядело довольно фальшиво, как вы можете себе представить. Лучшим подходом является использование различных методов «глобального освещения». Поищи это. Но определенно не стоит просто «освещать его вдвое меньше», если только вы не стремитесь к очень стилистическому (в отличие от реалистичного) внешнему виду.
person
Larry Gritz
schedule
11.11.2010