2014-12-16 4 views
8

Просматривайте освещение на Scenekit, и пока я могу применить узел освещения, чтобы зажечь что-то, что я ищу, чтобы осветить объект.iOS SceneKit Neon Glow

В качестве примера представьте себе неонное свечение или лампочку, которая проливает свет на другие объекты.

Любые идеи, как достичь этого?

Большое спасибо.

+0

Вы говорите о том, что есть яркий материал, даже когда нет источников света, или вы говорите об рендеринге «ореола» вокруг яркого объекта? –

+0

Либо это подойдет, но эффект, который я ищу, вероятно, будет комбинацией того и другого. Если вы представляете себе такой же эффект, как свет, установленный на поверхности. Когда он включается, он будет проливать свет на другие объекты вокруг него. –

+0

В прошлом я использовал gimp для 2D-изображений, увеличил размер яркого элемента и размыл. Эффект вроде [этого] (http://www.ghuj.com/special-effects/fun-with-light-bulb.html) –

ответ

13

Как @ DavidRönnqvist намекает на комментарии, существует несколько способов заставить объект казаться сияющим. Вы можете сделать это вместе или индивидуально - вам, вероятно, нужно будет настроить, как вы их объединяете, чтобы получить необходимый эффект.

  1. Для объекта, который испускает свет, вы, вероятно, не хотите затенения от других источников света в сцене. Работа с каналом emission вашего материала, чтобы дать объекту цвет или текстуру, которая переопределяет затенение от других источников света. (Если вы используете текстуру, яркие детали будут светиться, как видно из примера из документации, описанной выше).

  2. Возможно, вам захочется, чтобы другие элементы вашей сцены были освещены светящимся объектом. Свойство материала emission просто удерживает объект от затемнения при освещении/затенении, оно не делает его источником света. Чтобы получить источник света, вам нужно добавить не менее одного SCNLight к дереву узлов, содержащему ваш объект.

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

  3. Если вы хотите иметь светящийся ореол вокруг источника света, все будет немного Сильнее. Это объемное освещение, и это не то, что SceneKit может сделать для вас из коробки. Но есть несколько способов, которыми вы могли бы это подделать:

    • Для точки, похожей на лампочку, может быть достаточно двусмысленный рекламный щит с сияющей текстурой. (См. Комментарий @ MatthewBaker.)
    • Для большего света, как неоновый знак, вы можете попробовать несколько рекламных щитов, расположенных вдоль его длины. Хороший способ реализовать это может быть с SCNParticleSystem, так как это может порождать частицы по всей поверхности геометрии.
    • Другим хорошим вариантом для огней со сложными формами может быть shader modifiers. Шейдер GLSL может имитировать объемное освещение, варьируя альфа на основе угла между представлением и нормальными векторами поверхности.
    • Если свечение должно появляться на поверхности очень близко к свету - например, сплошной знак прямо за неоновой лампой - вы можете подделать ее, выпекая свечение в текстуру и используя эту текстуру на указанной поверхности. (Опять же, emission на помощь.)
    • Прикрепите фильтры основного изображения к узлу, содержащему свет (или дубликат его геометрии), чтобы вы могли скрасить, развернуть и размыть визуализированное изображение.
    • Используйте techniques, чтобы сделать многопроходный рендеринг с некоторыми причудливыми трюками GLSL, чтобы создать ореол, как указано в ответе @ Мустаха.
+0

Звучит как пара хороших вариантов. Я посмотрю настройки эмиссии и посмотрю, что я могу сделать. Я буду отмечать как ответ, как только проверю его и опубликую свой окончательный результат. –

4

EDIT: Woops, я, возможно, misunderstod вопрос ... ответ Rickster является более приспособленным к вашим потребностям.

Glowy 3D - мой домен!

Есть несколько способов, которыми вы можете сделать объект свечения в Scenekit.

Самый простой способ - установить его в GLSL, используя SCNTechnique. Вам понадобится несколько проходов, чтобы сделать подсветку, затем размыть ее последовательно X и Y (быстрее, чем сразу). Об этом есть замечательная статья на GPU Gems. Однако это довольно тяжело, если вы злоупотребляете этим, и я не совсем уверен, можете ли вы настроить освещение только в SCNTechnique.

Второй способ - использование фильтров CI. Просто добавьте Gaussian Blur и составьте его сверху. Вам могут потребоваться дополнительные эффекты для выбора/повышения яркости элементов. Если вы ищете свечение вокруг объекта this question, это также может вам помочь.

Третий способ заключается в подделке свечения с помощью рекламных щитов. Создайте трафарет в фотошопе или своем 3D-программном обеспечении, положите его на плоскость, которая всегда смотрит на камеру. Измените режим смешивания на Screen, и вы получите очень недорогое свечение!

Наконец, для вашего светового сияющего эффекта вы можете захотеть взглянуть на боги. Их довольно легко настроить с помощью GLSL, так что SCNTechnique должен сделать трюк. Вот об этом article.

+0

Хех, я хотел бы обратиться к фильтрам и методам в своем первоначальном ответе, но я начал терять его из-за написания так много ... понял, что это хорошее место, чтобы остановиться. :) – rickster

+1

Кстати, вы действительно можете ограничить передачу изображения SCNTechnique конкретным узлам - см. 'IncludeCategoryMask' /' excludeCategoryMask' в словаре определения техники. – rickster

+1

Я говорил о том, чтобы ограничить канал, а не узел, поскольку свечение должно применяться только к эмиссионному каналу, а не к цвету, отражениям и т. Д. Но спасибо за головы! – Moustach