У каждой планеты, в виде «из космоса», существует две стороны: «дневная» — освещенная светом Солнца, и противоположная — «ночная», на которую свет не попадает.

При моделировании сцены с планетой, не сложно добиться такого эффекта в освещении. Достаточно оставить в сцене только один источник света и расположить его с нужной стороны. Однако, полученный результат будет совсем не так хорош, как настоящие фотоснимки из космоса. Чтобы достичь большего сходства, на «ночную» сторону моделируемой планеты стоит положить соответствующую текстуру, с затемненной поверхностью и яркими огоньками — светом ночных мегаполисов.
Подготовим две текстуры: «дневную» и «ночную» — для каждой стороны планеты.


Создадим Землю:
- Создать сферу
- shift+a — Mesh — UV Sphere
- В Т-панели
- Transform
- Shading установить Smooth
- Transform
- Добавить модификатор Subdivision Surface
Создадим источник освещения — условное «Солнце»:
- Создать плоскость и направить ее плоской стороной к Земле:
- shift+a — Mesh — Plane
- Немного отодвинуть ее и увеличить
- g — x — 5 — ввод
- Координаты плоскости освещения после перемещения будут X = 5, Y = 0, Z = 0. Они понадобятся в дальнейшем, при настройке дерева нодов.
- s — 2 — ввод
- g — x — 5 — ввод
- Создать привязку:
- Выделить плоскость
- С зажатым shift выделить сферу
- ctrl+t — Track To Constrait
- Чтобы плоскость всегда смотрела на планету стороной а не ребром — развернуть ее
- Выделить плоскость
- Перейти в режим редактирования (tab)
- r — y — 90 — ввод
- Выйти из режима редактирования (tab)
- Создать для плоскости материал источника освещения
- В редакторе нодов Node Editor
- Создать новый материал для плоскости
- Заменить нод Diffuse на нод Emission
- Выделить нод Diffuse
- shift+s — Shaider — Emission
- Strength = 5
- В редакторе нодов Node Editor

Корректно наложим на планету подготовленные текстуры. Сделаем отдельную ветку нодов для «дневной» и «ночной» текстур:

Остается правильно соединить созданные ветки нодов по терминатору — линии, отделяющей освещенную сторону планеты от неосвещенной так, чтобы на освещенной части планеты использовалась «дневная» текстура, а на неосвещенной — «ночная».
К сожалению, в нодах Blender нет входного параметра, который давал бы значение освещенности в точке шейдера. Однако для решения задачи можно воспользоваться тем, что в любой точке сферической поверхности нашей планеты известен вектор нормали. Привлечем на помощь немного векторной математики и посмотрим на сферу в разрезе. Можно заметить, что угол между векторами нормалей к поверхности сферы (изображены синим цветом) и векторами падающего на поверхность света (изображен желтым цветом) равномерно меняется от 0 до 90 градусов как раз так, как меняется освещенность сферы-планеты.

Примем угол равный 0 градусов за полную освещенность. Тогда любое увеличение значения этого угла будет соответствовать падению освещенности поверхности в текущей точке. Осталось получить значение этого угла и использовать его, как фактор смешения «дневной» и «ночной» текстур планеты.
Для получения нужного угла у нас есть вектор нормли к поверхности планеты, но нет вектора падающего на поверхность света. Впрочем, зная положение самого источника света, можно получить и требуемый вектор. Имеются два вектора: из точки начала координат в точку расположения источника света (изображен красным цветом) и в точку расположения сферы-планеты (изображен зеленым цветом). Искомый вектор (желтого цвета) будет равен разнице этих двух векторов.

Перенесем полученный вектор в систему нодов.
- В редакторе нодов в материале Земли создать три нода значений — через них мы зададим положение источника света.
- shift+a — Input — Value
- shift+d — переместить
- shift+d — переместить
- Три нода Value скомбинировать в Vector
- shift+a — Converter — CombineXYZ
- Выходы нодов Value подать на входы нода CombineXYZ
- В значения нодов Value проставить три соответствующих координаты плоскости — источника освещения (п. 2.2.1.1).

- Добавить нод Object Info — через него мы получим положение сферы-планеты
- shift+a — Input — Object Info
Чтобы получить вектор падающего на поверхность сферы освещения, нужно из вектора положения «Солнца» вычесть вектор положения планеты.
- Добавить нод векторных операций:
- shift+a — Converter — Vector Math
- выбрать операцию вычитания: Subtract
- на верхний вход Vector (Vector Math) подать выход Vector (CombineXYZ)
- на нижний вход Vector (Vector Math) подать выход Location (Object Info)
- shift+a — Converter — Vector Math
- Полученный в результате вектор привести к нормализованному виду — сделать его длину равной 1.
- Добавить нод Vector Math
- shift+a — Converter — Vector Math
- выбрать операцию нормализации: Normalize
- на верхний вход Vector (Vector Math) подать выход Vector (Subtract)
- значения нижнего входа Vector (Vector Math) установить равным 1,1,1
- shift+a — Converter — Vector Math
- Добавить нод Vector Math

В результате получен нормализованный вектор освещения, падающего на поверхность сферы.
Теперь нужно получить угол между этим вектором и нормалями к поверхности сферы. В векторной математике скалярное произведение двух векторов — это число, характеризующее соотношение длин этих векторов и угла между ними. Вектора нормалей нормализованны изначально, а вычисленный вектор освещения мы нормализовали специально, следовательно длины всех векторов у нас равны 1, а значит соотношение их длин тоже будет равно 1. Скалярное произведение векторов в этом случае будет зависеть только от угла между векторами и равно косинусу этого самого угла. Косинус меняется от 0 до 1, что для системы нодов даже удобнее, чем угловые значения.
Получим характеристику нужного угла в дереве нодов:
- Добавить нод, который даст нам значение вектора нормали в текущей точке
- shift+a — Input — Geometry
- Добавить нод векторных операций
- shift+a — Converter — Vector Math
- выбрать операцию скалярного произведения (Dot Product)
- на верхний вход Vector (Dot Product) подать выход Vector (Normalize)
- на нижний вход Vector (Dot Product) подать выход Normal (Geometry)
- shift+a — Converter — Vector Math

В результате мы получили значение, характеризующее угол между нормалями поверхности планеты и падающим на ее поверхность светом. Используем это значение для смешивания двух подготовленных ранее текстур дня и ночи.
- Добавить нод смешивания шейдеров
- shift+a — Shaider — Mix Shaider
- выход Shaider (Mix Shaide) подать на вход Surface (Material Output)
- на верхний вход Shaider (Mix Shaider) подать выход BSDF (Diffuse) нода с «дневной» текстурой
- на нижний вход Shaider (Mix Shaider) подать выход BSDF (Diffuse) нода с «ночной» текстурой
- на вход Factor (Mix Shaider) подать выход Value (Dot Product)
- shift+a — Shaider — Mix Shaider
Теперь на освещенной стороне планеты показывается «дневная» текстура, а на неосвещенной — «ночная». Однако угол между нормалями и освещением, в зависимость от которого мы поставили смешение текстур, изменяется равномерно от самой яркой точки на поверхности до самой темной, из-за чего текстуры начинают смешиваться практически сразу, терминатор планеты получается слишком размытым, а на большей части «дневной» стороны планеты заметно, как проступает «ночная». Для корректировки введем в дерево нодов нод Color Ramp:
- Добавить нод Color Ramp
- shift+a — Converter — Color Ramp
- вставить его между выходом Vector (Dot Product) и входом Factor (Mix Shaider)
- сдвинуть правый (светлый) бегунок нода Color Ramp влево, подкорректировав границу светораздела.
Теперь на освещенной стороне остается четкая «дневная» текстура, на неосвещенной — «ночная», а на границе светораздела мы видим быстрый переход из одного состояния в другое.
Полное дерево нодов выглядит так:

Можно настраивать сцену и отправлять Землю на рендер.
Во время настройки сцены следует помнить, что при перемещении источника освещения планеты, в построенном для планеты дереве нодов нужно также ввести новые координаты источника света для того, чтобы разделение «дня» и «ночи» происходило правильно.
Текстуры дневной поверхности Земли и ночной поверхности Земли взяты с сайта nasa.gov только в образовательных целях.