Полезное освещение одноцветного трехмерного объекта в WPF Viewport3D - PullRequest
2 голосов
/ 03 октября 2010

У меня есть 3D-модель дома, где крыша невидима, чтобы можно было увидеть комнаты (как здесь )

Но (на данный момент) у меня нет текстур, и каждая поверхность имеет одинаковый цвет, например,

var myMaterial = new DiffuseMaterial (new SolidColorBrush(myColor))

Если я просматриваю его в WPF Viewport3D, я хочу иметь возможность различать поверхности. например, я хочу увидеть, когда закончится пол и начнется стена.

Это должно быть возможно при освещении объекта. Я уже попробовал:

Окружающий свет не работает, потому что все поверхности будут выглядеть одинаково окрашенными:

myViewport3D.Children.Add(new ModelVisual3D(){Content = new AmbientLight(Colors.White)})

И если я использую направленный свет и прикрепляю его положение к движущейся камере, некоторые нормали поверхности иногда почти перпендикулярны камере / свету и поэтому почти черные, что выглядит еще более неестественно.

Итак, как же можно отличить поверхности одноцветного 3D-объекта в WPF Viewport3D?


Редактируется после того, как пользователь "jdv" написал свой комментарий

Ответы [ 2 ]

3 голосов
/ 03 октября 2010

Лично я нахожу, что это может быть достигнуто "лучшим" комбинацией двух источников света.

  1. Тусклый (может быть, 30% освещенный) свет. Это всегда показывает все поверхности.
  2. Направленный свет, примерно на 80% белого, который следует за камерой, но выключен на 30 градусов или около того. Я нахожу, что свет «через левое плечо фотоаппарата» - это то, чего часто ожидают люди.

Кроме того, если ваши нормали поверхности не всегда будут правильными, вы можете использовать третий источник света - другой направленный источник света, указывающий направление, противоположное первому. Это осветит задние грани поверхностей, если у вас неуместные нормали.

2 голосов
/ 03 октября 2010

Поскольку вы можете использовать 2 источника света, я бы попробовал использовать тусклый свет, чтобы он работал как фоновый свет, и несколько более сильный направленный свет, чтобы придать контраст поверхностям.

Я не эксперт по 3d, но подумайте об этом следующим образом:

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

...