Как сделать этот странный рельефный логотип Apple?

Я был на Pinterest и увидел это изображение. Это довольно новое для меня, и я не знаю, с чего начать? Как бы вы достигли этого в любой программе? Пожалуйста, помогите мне.

Странный логотип Apple.

Привет. Добро пожаловать в ГДСЭ. Что вы пробовали? Что не удалось? Нам нравится отвечать здесь на вопросы, но мы ожидаем от пользователей хоть каких-то усилий. GDSE не является учебным сайтом по запросу. Также обратите внимание, что логотип Apple является торговой маркой, и любое действие с ним является незаконным.
Извините, это моя беда. Если это так, то прошу удалить этот пост.
@user287001 user287001 при редактировании вы не должны добавлять в сообщение то, что автор не планировал.

Ответы (3)

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

Версия с горизонтальными линиями

Как сказала Илмари Каронен, это всего лишь карта смещения . Вы начинаете с трехмерной топографии h ( x , y ), а затем каждая точка ( x , y ) в результате должна использовать линию, начинающуюся с y 0 = yh ( x , y ).

С растровой графикой это можно отобразить сразу, но для получения четких векторных линий нам на самом деле нужно работать наоборот: каждая линия должна быть параметризована как

ж у 0 ( Икс ) знак равно у 0 + час ( Икс , ж у 0 ( Икс ))

Проблема в том, что это только неявное определяющее уравнение, потому что RHS содержит y = f y 0 ( x ). Это можно решить с помощью Ньютона-Рафсона, но есть более простой способ: просто построить линии, идущие слева направо, и в каждой точке идти вверх или вниз по мере необходимости, чтобы выполнить уравнение. Предполагая непрерывность, это всегда просто небольшое обновление, поэтому мы можем аппроксимировать h как константу.

Реализация на Хаскеле:

type ℝ = Double

horizContourLine ::
     ((ℝ,ℝ) -> ℝ) -- ^ The topography/height function
  -> (ℝ,ℝ)        -- ^ x-interval on which to render the path
  -> ℝ            -- ^ Step size / resolution along the path
  -> ℝ            -- ^ Base-level y-coordinate of the line
  -> [(ℝ,ℝ)]      -- ^ Trail line
horizContourLine h (x₀,xe) δx y₀ = go (x₀,y₀)
 where go (x,y) = (x,yTgt)
            : if x<xe then go (x+δx, yTgt) 
                      else []
        where yTgt = y₀ + h (x,y)

Затем с подходящим вводом изображения, например

пример ввода изображения

мы получаем контуры, как

результат для примера с грушей

Полный код: https://gist.github.com/leftaroundabout/8b7075d25adecdf16806ea5d7a7ea2aa

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

По сути, это просто карта смещения , примененная к набору линий.

Сложность заключается в том, что применение карты смещения к растровой текстуре приведет к растяжению и сжатию всей текстуры, включая линии и промежутки между ними. Чтобы получить эффект затенения на вашем примере изображения, вам нужно растянуть только промежутки, а не сами линии. Я вижу два (или, может быть, три) способа обойти это:

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

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

  3. Напишите свое собственное программное обеспечение, чтобы сделать одно из вышеперечисленного. Очевидно, что это требует некоторых навыков программирования, которые есть не у всех, но что касается задач графического программирования, это на самом деле не должно быть особенно сложным.

На самом деле я протестировал вариант 2, используя фильтр смещения в GIMP. К сожалению, у меня нет времени писать пошаговое руководство прямо сейчас (может быть, позже…), но в качестве тизера вот окончательный результат моего быстрого эксперимента:

Конечный результат

«Смещение», о котором говорила Илмари Каронен, и «эффект облегчения», о котором говорил Абдул Каюм, — это почти одно и то же.

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

Вы можете реализовать этот алгоритм вручную или использовать программное обеспечение, такое как карта смещения GIMP или JURA (используется Абдулом Каюмом).

введите описание изображения здесь