Как работает свет и типы теней
Что такое Свет?
Если мы хотим научиться воспроизводить свет, мы должны знать, как свет работает в реальном мире.
Дело в том, что это слишком сложно. Если мы попытаемся воспроизвести его в точности, это займет слишком много времени, поэтому общий подход состоит в том, чтобы искать способ получить достаточно хороший результат, анализируя различные эффекты, формирующие освещение, разлагая их на части и комбинируя их, чтобы получить достаточно хороший результат.
В этой статье я постараюсь обобщить эти эффекты и немного изучить их, чтобы мы поняли, как они работают, и улучшили способы рендеринга. Я также постараюсь не усложнять и рассказать о том, как мы подходим к освещению в нереалистичном CGI, CGI в реальном времени и иллюстрациях, чтобы каждый мог что-то почерпнуть из этого.
Давайте рассмотрим свет как серию лучей (это не так, но это достаточно близко для того, что нам нужно). Источники света испускают лучи, которые рассеиваются по миру. Когда эти лучи достигают наших глаз, мы видим свет, отражающийся от объектов. Исходя из этого поведения, мы можем определить эмиссию (свет излучается источником света), отражение (свет отражается от объектов), передачу (свет проходит через объект) и поглощение (свет поглощается объектом, нагреваясь).
Эмиссия (Emission)
Свет излучается из источника света, когда этот источник находится в состоянии высокой энергии и излучает свет, чтобы перейти в состояние более низкой энергии.
В большинстве случаев излучение происходит при накаливании: мы заряжаем вещество электрической энергией, и оно выделяет энергию в виде света, но существуют и другие источники (излучение черного тела, флуоресценция, фосфоресценция, ускорение частиц, радиоактивный распад, лазеры, огонь и т.д.).
Визуально источники света очень похожи, и обычно они меняют только интенсивность и цвет, а не то, как они взаимодействуют с веществом.
Отражение (Reflection)
Свет может отражаться от объекта, давая нам отраженный свет. Мы разделяем отраженный свет на 2 различных типа отражения:
- Диффузное отражение: луч света может слегка проникать через поверхность объекта, взаимодействуя с его молекулами и отражаясь в случайном направлении. Поскольку свет интенсивно взаимодействует с объектом, некоторая его часть поглощается, и отраженный свет становится цветным. Большинство отражений в материале работает именно так.
- Зеркальное отражение: свет может отражаться под определенным углом и направляться к наблюдателю, создавая зеркальное отражение. Поскольку свет взаимодействует с объектом очень кратковременно, зеркальные отражения обычно сохраняют цвет источника света, игнорируя цвет объекта.
Пропускание (Transmission)
Если луч света может проходить через объект, мы получаем некоторые эффекты, такие как:
- Прозрачность (Transparency): луч света проходит через объект, и его направление не изменяется. Это то, что происходит в реальной жизни с большинством газов.
- Пропускание света (Translucency): поскольку свет может перемещаться с различными скоростями в зависимости от среды, через которую он проходит, когда он проходит через различные среды с разными свойствами, он кажется изгибающимся. Это происходит в реальной жизни с водой, стеклом и т. д.
Относительная скорость, с которой свет перемещается через материал, называется показателем преломления этого материала. Преломление также может вызывать другие эффекты, такие как радуги, каустики или призмы.
- Рассеивание внутреннего света (Subsurface Scattering): прозрачный объект может получать свет, который интенсивно взаимодействует с объектом (приобретая цвет) и отражается из него, придавая объекту вид излучения, особенно на тонких поверхностях, где свету более вероятно проникать через объект.
Поглощение
Свет - это энергия, и когда он попадает на объект, его энергия может быть поглощена объектом, что приводит к его нагреву. Фактически, объекты могут поглощать не только видимый свет, но и другие виды невидимого света (ультрафиолетовый, инфракрасный и т. д.). Поглощенный свет невидим и не влияет на наши изображения.
Прямое и непрямое освещение
Когда мы рассматриваем только первичное отражение света, мы учитываем только прямое освещение: свет, отражающийся от объекта и направленный прямо в камеру. Однако свет отражается повсюду (и отражается еще больше, если учесть, что он не является частицей) и множество раз.
Поэтому мы также должны включить дополнительный свет в наши сцены, который заполняет очень темные части теней и представляет собой эти дополнительные лучи света, отражающиеся повсюду. Этот дополнительный свет называется косвенным освещением, окружающим освещением или глобальной освещённостью.
Косвенное освещение является очень слабым: если одно отражение обычно составляет 18% исходной интенсивности света, то два отражения будут составлять всего 3,24% исходной интенсивности света. Тем не менее, оно очень заметно, потому что даже небольшое количество света на полностью тёмной поверхности сразу бросается в глаза.
Корректная реализация косвенного освещения довольно сложна, поскольку нам нужно учитывать всю сцену, как свет отражается между объектами, как добавляется цвет к каждому объекту и т. д. Некоторые из наиболее распространенных подходов включают в себя:
- Рассчитайте его точно, отслеживая, как свет должен отражаться от сцены, и объедините его с прямым освещением. Этот процесс, очевидно, является наиболее точным, но он очень медленный в компьютерной графике, и его очень трудно правильно изобразить на иллюстрации:
- Добавить заполнитель/окружающий цвет: вместо того, чтобы оставлять затененные части нашей сцены полностью темными, мы используем базовый цвет, который заполняет их (обычно цвет неба или цвет самого большого источника света), чтобы представить, как окружающий свет заполняет эти темные области своим отраженным косвенным светом.
- Используйте базовый цвет каждого объекта: это часто используется в иллюстрации. Вместо того, чтобы начинать с черного холста и добавлять свет от каждого источника, мы обычно начинаем с базовых цветов и добавляем на них тени. Таким образом, затененные области будут сохранять некоторый цвет, который освещение светом косвенного освещения осветило, позволяя нам видеть базовый цвет поверхностей.
Если мы начинаем с базового цвета и затем затемняем его для затененных областей, сохраняя восприятие базового цвета, мы воссоздаем косвенный свет, достигающий этих затенённых областей.
Предупреждение: некоторые люди также называют базовый цвет объекта цветом альбедо или диффузным цветом. Технически, диффузный цвет должен включать в себя тени (свет+тень), а цвет альбедо должен быть плоским цветом (без света или теней), но эти термины часто используются без различия.
- Добавить заполняющий свет: в компьютерной графике мы можем добавить заполняющий свет (иногда он совпадает с окружающим цветом), который освещает все объекты со всех углов.
Аналогичным подходом является захват окружающей среды в виде изображения 360º и использование его в качестве заполняющего света для заполнения теней цветом окружающей среды. Например, мы можем использовать SkyLight в Unreal Engine для захвата сцены и использования его для заполнения темных областей, имитируя косвенное освещение в реальном времени.
Итак, как мы можем сформировать образ, используя то, что мы обсудили до сих пор?
Начиная с полной темноты, мы добавляем источники света в наше окружение и рассчитываем прямое освещение: свет исходит из источников света, отражается от окружения и попадает в камеру. Как мы видели, есть диффузное и зеркальное отражение:
Это хорошо, но в реальной жизни свет отражается более одного раза - нам нужно включить эти дополнительные отражения (косвенный свет) в нашу сцену:
И помимо отражений, свет также может проходить через объекты (преломление):
Когда мы соединяем всё вместе, мы получаем наш рендер:
Итак, то, что нам нужно для представления света - это сумма прямого освещения (диффузного и зеркального), пропускания и непрямого освещения. Мы также можем добавить некоторые дополнительные эффекты, такие как каустика, расцветка, размытие движения и т.д., но это основные части, которые мы должны иметь в виду.
В зависимости от медиа, мы подходим к этому по-разному:
- В CGI без реального времени мы бросаем лучи от источников света в сцену (трассировка лучей), отслеживаем, как они отражаются, и складываем их вместе для создания изображения.
- В CGI реального времени мы создаем временные изображения сцены с необходимой нам информацией (цвет, шероховатость, глубина и т.д.) и используем оптимизированные математические формулы, которые рассчитывают цвет каждого пикселя, используя параметры сцены и эти временные изображения.
- В иллюстрации мы обычно начинаем с диффузного цвета, потому что он обычно является самым важным компонентом, добавляем тени (так мы получаем прямые диффузные отражения и основу для косвенного освещения), поверх всего добавляем зеркальные отражения и, наконец, настраиваем всё, пока не получим желаемый результат.
Свет должен куда-то попасть
Когда свет попадает на объект, падающий свет либо отражается, либо передается (проходит через объект), либо поглощается; при этом он сохраняется: падающий свет равен сумме отраженного, переданного и поглощенного света. В реальной жизни существуют и другие процессы, которые могут влиять на свет, но для рендеринга они незначительны.
Поскольку поглощение невидимо, мы можем уменьшить количество света, отражённого от объекта, и считать, что остальное поглощено. Однако мы не можем увеличить его, потому что в этом случае мы будем генерировать свет из ничего. Это актуально, поскольку старые модели освещения в CGI не соблюдали этот закон, и мы могли иметь объекты, отражающие больше света, чем должны.
Отражение в деталях
Когда свет взаимодействует с непрозрачным объектом, часть его поглощается объектом (который в результате нагревается), а остальная часть отражается. Когда отражённый свет попадает в камеру или в наши глаза, мы видим объект.
Процент света, который отражается от материала, называется альбедо, и он сильно варьируется между различными материалами.
Если бы у нас был материал с альбедо 100, он бы отражал весь свет. Он был бы не только идеальным зеркалом, но и очень холодным, поскольку солнечный свет просто не нагревал бы его напрямую.
Обычно самое высокое альбедо наблюдается на новом чистом снегу - около 80. Основное следствие из этого заключается в том, что мы должны избегать использования чистого белого цвета в качестве цвета, поскольку поверхность со 100%-ной чистотой белого цвета должна была бы активно излучать свет, а не просто отражать его. Конечно, есть и другие факторы, которые необходимо учитывать (баланс белого, экспозиция, адаптация глаз), но в качестве общего эмпирического правила следует избегать использования чисто белого и чисто черного цветов.
Существует два основных типа отражения света: зеркальное и диффузное отражение. Сумма этих отражений дает нам альбедо.
Неметаллические материалы (диэлектрики) отражают от 2 до 5% света (в среднем 4%) зеркально и более широкий спектр света: 0,5-75% диффузно (в среднем 14%). Сумма отраженного света (зеркальный + рассеянный) составляет величину альбедо (в среднем 18%). Остальное поглощается материалом в виде тепла.
Металлы странные, они отражают 50-99% света спекулярно и не имеют диффузного отражения.
Диффузные отражения в деталях
Как мы видели, при диффузном отражении луч света может слегка проникать в поверхность объекта, взаимодействуя с ней, и выпускаться обратно в случайном направлении.
Диффузные отражения передают цвет объекта.
При диффузном отражении свет проникает во внешние слои объекта, объект поглощает часть света (в результате чего нагревается) и выпускает свет во всех направлениях, который теперь окрашен, поскольку частично поглощён объектом.
Диффузное отражение отбрасывает свет во всех направлениях, везде.
Это означает, что определенная точка объекта будет иметь одинаковую интенсивность света независимо от того, откуда мы на нее смотрим.
Точка объекта, которая находится ближе всего к свету, будет иметь наибольшую яркость, а менее освещённые точки будут тёмными. Это очень важное отличие от зеркального отражения, где угол обзора имеет значение.
Шероховатость поверхности не имеет значения для диффузных отражений.
Поскольку при диффузном отражении свет рассеивается повсюду, шероховатость поверхности не имеет значения для диффузного отражения: мы можем отполировать красную поверхность и сделать ее более гладкой, но она всегда будет красной.
Зеркальные отражения в деталях
На мой взгляд, зеркальные отражения легче понять, потому что именно они приходят нам в голову, когда мы думаем об отражении.
Свет отражается от объекта под симметричным углом и направляется к зрителю, создавая зеркальное отражение, как мяч, брошенный в стену.
Зеркальные отражения сохраняют цвет света.
Поскольку свет взаимодействует с объектом очень короткое время, зеркальные отражения сохраняют цвет источника света, игнорируя цвет объекта. Это белый блик, который мы видим на гладкой пластиковой поверхности: неважно, какого цвета пластик, это отражение всегда имеет цвет света (обычно белый), потому что это цвет источника света, и зеркальный блик не изменяет его.
Зеркальные блики (Specular highlights)
В зеркальном отражении отражается вся окружающая среда, но источники света являются намного ярче окружающей среды, поэтому часто мы замечаем только эти источники света в виде зеркального отражения. Эти отраженные источники света обычно называются зеркальными бликами (specular highlights).
Зеркальные отражения зависят от вида.
Этот вид отражения зависит от угла зрения зрителя: мы видим только тот свет, который перпендикулярен поверхности, на которую мы смотрим. Если мы изменим угол обзора, блик будет "перемещаться (относительно объекта)". Интенсивность отражения будет тем больше, чем более параллелен угол обзора к поверхности.
Зеркальные отражения выглядят по-разному в зависимости от шероховатости поверхности.
Если поверхность идеально гладкая, отражённый свет будет очень похож на исходный (как зеркало), а если шероховатая, отражённое изображение будет размытым. Вместо того чтобы моделировать микроскопические детали для представления этих поверхностей, компьютерные шейдеры обычно имеют способ моделирования этих деталей, обычно это значение шероховатости или гладкости, которое мы можем регулировать с помощью значения или текстуры.
Обратите внимание, что все шары всегда красные: цвет объекта зависит от диффузного отражения, которое не зависит от шероховатости поверхности (сколько бы мы ни полировали красный шар, он все равно остаётся красным). Шероховатость поверхности влияет только на зеркальное отражение.
Спекулярный блик на гладкой поверхности выглядит ярче, чем спекулярный блик на шероховатой поверхности, потому что шероховатая поверхность рассеивает свет повсюду, а гладкая поверхность направляет его к зрителю. Количество отраженного света одинаково, просто шероховатая поверхность рассеивает его, делая блик больше и тусклее.
Эффект Френеля
Теперь представим, что у нас есть камень и бассейн, наполненный водой. Давайте бросим камень прямо в воду, просто позволив ему упасть с большой высоты. Отскочит ли он?
Конечно, нет. Он просто пройдет сквозь воду и упадет на морское дно. Но что если мы бросим его под углом? Под углом 45º камень, скорее всего, все равно упадёт вниз, но под очень малым углом камень отскочит (skipping stones). При некоторых углах, когда направление движения камня почти горизонтально, камень скорее отскочит, чем пройдёт сквозь поверхность.
То же самое происходит и со светом, когда речь идёт о зеркальных отскоках.
Если мы бросим луч света перпендикулярно поверхности, он скорее всего будет поглощён поверхностью, чем отскочит. Однако если мы бросим луч почти параллельно поверхности, он с большей вероятностью отразится и создаст зеркальный отблеск.
Этот эффект называется эффектом Френеля, и он означает, что при взгляде под экстремальным углом поверхности становятся более зеркальными. В связи с этим зеркальность рассчитывается при перпендикулярном угле обзора, называемом f0, а не при любом угле.
Одним из самых ярких примеров этого является вода: когда мы смотрим на поверхность воды прямо вниз, она прозрачна, и мы можем видеть то, что находится внутри воды; а когда мы смотрим на неё горизонтально (глядя на море у горизонта), то спекулярные отскоки гораздо более вероятны, и вода отражает свет как зеркало.
На этом изображении мы видим воду сквозь воду, когда смотрим на близлежащие камни, но дальние зоны выглядят более отражающими, потому что вода обладает эффектом Френеля: она гораздо более зеркальна, если смотреть на нее под параллельным углом, и менее зеркальна, если смотреть под перпендикулярным углом.
Металлы
Металлические объекты странные. Металлы очень, очень плотные. Настолько плотные, что в реальном мире практически невозможно сделать металл прозрачным (золотые листья могут быть шириной в сотню атомов и все равно оставаться непрозрачными).
Когда свет попадает на поверхность металла, большая его часть отскакивает: в то время как большинство материалов имеют много диффузных отражений и несколько зеркальных отражений, металлы имеют много зеркальных отражений и ни одного диффузного отражения. Свет просто не может проникнуть внутрь металлической поверхности, чтобы взаимодействовать с атомами металла, частично поглотиться и выйти наружу в виде диффузного отражения. Вместо этого он просто отскакивает. В металлическом объекте около 50-99,8% света отражается зеркально, а остальное поглощается.
Какого цвета зеркало? Трудно сказать, потому что зеркала сделаны из металлов, и они отражают большую часть света зеркально.
Некоторые металлы также могут добавлять немного цвета к отраженному свету, создавая впечатление, что они имеют цвет (золото, медь и т.д.), но в действительности они просто изменяют цвет отраженного света: зеркальные блики сохраняют цвет света в неметаллических поверхностях, но могут быть изменены в металлических поверхностях.
В случае металлических поверхностей, поскольку большая часть их поверхности отражает окружающую среду, их внешний вид может сильно меняться в зависимости от окружающей среды и угла обзора. В результате их трудно нарисовать, а если бы мы хотели правильно отобразить их в 3D, нам пришлось бы "рендерить заново" всю сцену.
Обычное решение - сделать эти металлические детали очень грубыми, чтобы сделать отражение довольно размытым и избежать различимых деталей, которые могут не вписаться в любое окружение.
Пропускание (Transmission)
Когда луч света достигает объекта, он может пройти сквозь него. Этот процесс имеет множество названий. Я решил использовать термин "передача", который используется в трассировке лучей в CGI.
Следует помнить, что свет должен быть сохранен: если прозрачный объект имеет отражения или он цветной, свет должен быть более тусклым, когда он проходит через него. Например, когда поверхность намокает, она может иметь более сильное спекулярное отражение из-за воды, находящейся на ней. Свет, который отражается зеркально, не достигает объекта и не способствует диффузному отражению, в результате чего объект выглядит темнее.
Пропускание может принимать различные формы.
Прозрачность (Translucency)
Когда свет проходит через различные среды с разными свойствами, кажется, что он изгибается. Именно это происходит в реальной жизни с водой, стеклом и т.д.
Свет может двигаться с разной скоростью в зависимости от среды, через которую он проходит. Возможно, вы помните, что скорость света равна 299 792 458 м/с, но она измеряется в вакууме. При прохождении через среду он может двигаться медленнее (это не 100% правда, но давайте пропустим теорию относительности) в зависимости от коэффициента преломления этой среды.
В некоторых средах свет проходит быстрее или медленнее, чем в воздухе, и это может привести к тому, что падающие лучи света будут изгибаться при прохождении через среду в явлении, называемом преломлением.
Сильно сжатый воздух плотнее обычного, и свет проходит через него медленнее. Именно поэтому взрывы могут создавать визуальные ударные волны: воздух здесь гораздо плотнее, и мы получаем эффект преломления между обычным и сильно сжатым воздухом.
Полностью прозрачный объект невидим, однако его все равно можно воспринимать, потому что он изгибает свет, изменяя вид объектов за ним.
Преломление может вызывать и другие эффекты, такие как радуга, призмы, радужные переливы и т.д.
Прозрачность (Transparency)
Луч света проходит сквозь объект, и его направление остается неизменным. Именно это происходит в реальной жизни с большинством газов. Визуально полностью прозрачный объект невидим. Однако частично прозрачный объект можно увидеть.
Частично прозрачный объект будет окрашивать объекты позади него своим диффузным цветом. Этот тип пропускания в основном используется как дешевый способ получения прозрачности в CGI: в реальной жизни почти все объекты имеют показатель преломления, отличный от 1 (воздух), и будут в той или иной степени искривлять свет.
Подповерхностное рассеяние (Subsurface Scattering)
Подповерхностное рассеяние - это смесь диффузного отражения и прозрачности: свет может проникнуть сквозь объект, начать отражаться внутри объекта с диффузными отражениями и выйти с другой стороны объекта, особенно на тонких поверхностях, где вероятность прохождения света сквозь объект выше.
Подповерхностное рассеяние окрашено, его цвет представляет собой смесь между диффузным цветом объекта (из-за диффузно рассеянных лучей света) и цветом света (из-за лучей света, проходящих через объект). Это может заставить поверхности выглядеть излучающими, если смотреть на них с затененной стороны, и иногда это имитируется с помощью излучающих материалов.
Комбинирование источников света (Combining Light Sources)
Что если у нас есть разные источники света? Как они складываются?
Если мы сделаем фотографию с 4 различными включенными источниками света и 4 фотографии (или рендера) с каждым отдельным включенным источником света, а остальные выключены, можем ли мы просто сложить отдельные фотографии, чтобы получить тот же результат?
Да.
Если мы сравним сгенерированное изображение с изображением, на котором включены все источники света, мы увидим, что они практически одинаковы. Это означает, что мы можем работать над каждым источником света отдельно и добавлять их; источники света можно добавлять линейно.
Ну, вроде того. Хотя свет от разных источников света можно добавлять, имейте в виду, что наши глаза настраиваются на количество света, которое мы видим, и после определённого порога наши глаза перенастраиваются подобно тому, как мы перестаём воспринимать сильный запах через некоторое время, чтобы сосредоточиться на других запахах (также может вмешаться гамма-коррекция и другие эффекты).
Это ещё одна причина, по которой следует избегать 100% белого цвета: наши глаза адаптируются, чтобы не потерять информацию, которую мы не можем увидеть из-за переполнения световых рецепторов.
Тени (Shadows)
В CGI мы обычно начинаем с чёрного цвета для всей сцены и начинаем добавлять свет. Однако при рисовании мы обычно начинаем с рассеянного цвета и добавляем как свет, так и тени.
Тень - это отсутствие света. В зависимости от внешнего вида тени можно разделить на три группы:
- Тени формы - тени, возникающие на поверхности предметов просто потому, что они меньше подвержены воздействию света. Тени формы возникают из-за отсутствия рассеянного отражения: те части объекта, которые освещены светом, отражают его, а те, которые менее освещены (обращены в сторону от света) - нет, и они выглядят темнее. Эти тени обычно плавные и тонкие и дают нам много информации об объеме объекта.
- Литые тени - тени, создаваемые, когда объект или часть объекта оказывается между источником света и другим объектом. В отличие от теней формы, которые влияют только на один и тот же объект, отбрасываемые тени могут влиять на соседние объекты, закрывая их от источника света. Эти тени обычно более жёсткие и менее тонкие, чем тени формы, и они дают нам информацию о расположении объектов в нашей сцене.
- Ambient Occlusion: когда объект приближается к другому, свет с меньшей вероятностью попадает в пространство между объектами, и это пространство выглядит более тёмным. Мы можем имитировать этот эффект, затемняя эти зоны, обычно в средах реального времени, как дешевый способ имитации света, отражающегося от сцены, что является очень дорогим эффектом.
В действительности Ambient Occlusion - это смесь отбрасываемых и форменных теней, но мы разделяем их, чтобы иметь больше творческого контроля над нашими сценами.
Подобно тому, как несколько источников света можно объединить вместе, тени от нескольких источников света могут накладываться друг на друга и становиться темнее.
Однако один источник света не может создавать перекрывающиеся тени (ошибка, которую мы иногда допускаем при рисовании света). Каждый источник света генерирует свой собственный набор теней. Тень от формы и отбрасываемая тень, образованные одним и тем же светом, не накладываются друг на друга, а совмещаются.
Тени не всегда тёмные.
Свет отражается повсюду (благодаря непрямому освещению). Часть этого света, вероятно, попадет на затененные участки и отразится от них, позволяя нам увидеть цвет участков в тени.
Яркость затенённых участков зависит от количества непрямого света в нашей сцене: в пустыне есть только один источник света и нет зданий, деревьев или других объектов, которые могут отражать свет и наполнять тени цветом: у нас очень мало непрямого освещения (у нас всегда будет немного), и тени выглядят тёмными и имеют очень мало цвета.
Тень этой девушки очень темная, потому что есть только один источник света (солнце) и нет поверхностей, где солнечный свет может отразиться, чтобы заполнить ее.
С другой стороны, в пасмурный (облачный) день облака отражают свет повсюду, тени заполняются отраженным светом, и мы даже можем дойти до того, что тени исчезнут.
У этой женщины почти нет тени: здания, облака и дождь отражают свет повсюду.
Когда у нас есть отдельные источники света, отбрасывающие тени, эти тени могут накладываться друг на друга. В реальной жизни у нас в основном один источник света (солнце), поэтому несколько перекрывающихся теней от нескольких источников света выглядят неестественно, и мы обычно стараемся избегать их или смягчать эти тени.
Чтобы избежать этого эффекта, специалисты по освещению используют более крупные источники света, формирующие более мягкие тени (например, окна или большие светильники), или применяют отражатели, рассеивающие свет во всех направлениях.
Тени могут иметь гладкие или жесткие края.
Литые тени могут иметь разную степень гладкости границ. Раньше я думал, что это зависит от расстояния между тенью и объектом, отбрасывающим тень, но я немного ошибался.
В случае направленного света, например, солнца, все лучи света параллельны (солнце находится так далеко от Земли, что когда лучи света достигают нас, они почти параллельны). Это создает жесткие тени:
Однако, когда источник света находится ближе к объекту, тени выглядят более плавными.
Когда мы приближаемся к объекту, лучи света подходят к нему под разными углами, сглаживая тени. Чем дальше от источника света, тем более сглаженными будут тени, потому что лучи света по краям прошли большее расстояние и, поскольку они идут под разными углами, они сильнее расходятся.
Для сравнения, лучи света от солнца почти полностью параллельны, но имеют небольшой разброс в 1-1,5º, поэтому мы должны видеть мягкие тени от прямого солнечного света, особенно на больших расстояниях от объекта, отбрасывающего тень. Увеличение размера источника света также смягчает тени.
Можно подумать, что если лучи солнечного света в основном параллельны, то окно будет пропускать свет в комнату также в виде параллельных лучей. Однако необходимо учитывать косвенный свет, проходящий через окно со всех сторон, а также дифракцию.
Заключение
Итак, в этом руководстве мы рассмотрели основные световые эффекты, о которых следует помнить при рендеринге сцены: излучение, прямые и косвенные отражения света (как зеркальные, так и рассеянные), передача и поглощение.
Мы также рассмотрели некоторые сопутствующие эффекты, такие как металлические объекты, преломление, объединение нескольких источников света и тени.
Теперь, когда мы представляем себе различные части, необходимые для рендеринга сцены, я хотел бы подробнее рассмотреть, как мы подходим к этим различным частям с точки зрения нереального времени (используя трассировку лучей), реального времени (используя растеризацию) и иллюстративного подхода (рассмотрев основные техники затенения, используемые в иллюстрации).
Перевод с англоязычного сайта, Tutorial: How Light Works & Types of Shadows