Как нарисовать трехмерный мир с линиями, больше похоже на эскиз или мультфильм

9

Подумайте о том, чтобы сделать рисунок чернилами, без затенения и со всеми линиями, имеющими одинаковый вес - как вы видите в комиксе с полосками, как Дилберт. Это представляет активный 3-мерный мир, но у объектов нет текстур, но вы также не видите тесселяционные треугольники.

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

Я опытный программист, но плохо знаком с 3D программированием. Я не могу придумать игру, которая выглядит так - это было сделано? И как бы это сделать? На ум приходят две проблемы - найти существенные грани и нарисовать их. Нужен ли ему «движок», закодированный из матриц, основанный на строках, а не обычный трехмерный движок?

унылое болото
источник
Я просто хочу предупредить вас, что люди плохо воспринимают 3D на 2D-экране как есть, поэтому устранение затенения, которое является очень важной частью для понимания глубины сцены, может не сработать в игре, основанной на 3D Геймплей
Джефф
Существует одна игра, которая соответствует описанному вами стилю - Okami, выпущенная для PS2 несколько лет назад. En.wikipedia.org/wiki/%C5%8Ckami
Эран Гальперин,
1
Хорошо, я думал сделать это сам. Я думаю, что вы хотели бы использовать какое-то затенение cel , а не только линии.
mpnk121

Ответы:

11

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

Вероятно, первым был Jet Set Radio (выпущенный на западе как «Jet Grind Radio»). Только через месяц или два была выпущена игра, для которой я разработал похожую технику рендеринга: Looney Tunes: Space Race . (В Space Race мы постарались сохранить одинаковую толщину линий, в то время как Jet Set Radio сделала неровную ширину линии большой частью своего визуального стиля).

Обе эти игры работали одинаково; для каждого объекта, который будет выделен, нарисуйте объект дважды. Во-первых, визуализируйте его с обратным ходом, применяя толчок вершины (то есть перемещайте каждую вершину на некоторое расстояние вдоль ее вектора нормали), и любым цветом, который вы хотите, чтобы «линии» казались. Затем нарисуйте снова, без вершинного толчка и с нормальным обратным ходом. Эта пара операций дает вам цветной силуэт, обрамляющий объект, и это все, что использовали эти первые две игры. В «Космической гонке» я поддерживал иллюзию постоянной ширины линии, выдвигая вершины на разное расстояние в зависимости от того, как далеко объект был от камеры. В Jet Set Radio этого не произошло (что привело к увеличению или уменьшению линий по мере того, как объекты перемещались ближе или дальше от камеры)

У NVidia и ATI есть несколько демонстраций других способов достижения этого эффекта, в основном вращающихся вокруг пиксельных шейдеров, ищущих нормали, которые перпендикулярны вектору от камеры к пикселю для каждого пикселя, но все они требуют сеток очень высокого разрешения и создают противоречивые ширина линий на практике. Я не знаю, используют ли какие-либо игры такой подход; Я не думаю, что видел что-то похожее на образцы этих компаний.

Я также укажу вам на Dragon's Lair 3D , единственную известную мне игру, которая, кажется, действительно делает это правильно; взятие точечного произведения камеры на многоугольник и нормали многоугольника для каждого многоугольника в модели, чтобы увидеть, направлен ли каждый многоугольник к камере или от нее, и затем проверка всех пар связанных многоугольников; если какая-либо пара полигонов имеет общий край, а один многоугольник обращен к камере, а другой - нет, то он рисует тонкую линию постоянной ширины вдоль этого края в пространстве экрана. (Я не мог заставить эту работу работать достаточно быстро в Dreamcast for Space Race, иначе я бы использовал ее. Сегодня на современных компьютерах это именно тот способ, которым я пытался бы сделать этот эффект, даже если он и был »

«Логово Дракона 3D» - это также единственная игра, о которой я знаю, которая на самом деле рисует линии между областями разного цвета или с разрывами, нормальными по вершинам, даже если там нет силуэта, который можно было бы найти. Я подозреваю, что у них был собственный инструмент, который позволял их художникам назначать края многоугольника, чтобы всегда получать линию.

Okami , о котором упоминали некоторые другие люди, похоже, использует метод двойного рендеринга вершинного толчка, похожий на Jet Set Radio и Space Race, но также использует текстуры, которые были построены с использованием стиля кисти. (Холмы на расстоянии, например, рисуются как мазки кистью в текстуру, которая рисуется как стандартный четырехугольник). Оками прекрасна, но я не думаю, что это действительно касается технологии, о которой вы спрашиваете; конечно, он использует более старый подход для своего эффекта.

Теперь, в вашем случае, вы просите об этом без цветовой заливки, просто рисуя мир только линиями. Это легко сделать; просто нарисуйте все многоугольники без освещения и в одном постоянном цвете, который соответствует цвету фона. Любой из этих подходов должен работать с использованием этого подхода, не меняя игровой движок вообще. На самом деле важно нарисовать эти полигоны «того же цвета, что и фон», так как они не дадут краям фона просвечивать объекты переднего плана, что может очень быстро запутать.

Тревор Пауэлл
источник
+1 блестящий ответ, включающий и теорию, и интересные примеры
Maik Semder
Отличный ответ, спасибо, что уделили нам время.
унылое болото