Подумайте о том, чтобы сделать рисунок чернилами, без затенения и со всеми линиями, имеющими одинаковый вес - как вы видите в комиксе с полосками, как Дилберт. Это представляет активный 3-мерный мир, но у объектов нет текстур, но вы также не видите тесселяционные треугольники.
Для примера рассмотрим рисование поверхности Луны. Линии, которые вы можете нарисовать, будут проходить вдоль верхнего края холмов, вплоть до того места, где они встречаются с общим уровнем поверхности. За теми, что вы делаете то же самое для больших холмов, вдалеке и за тем, что было видно на горизонте. Для кратеров вы можете нарисовать ближний круг для внешнего края и частично замаскированный круг для нижнего края. Валуны будут иметь линию по краю и вдоль основных видимых краев. У астронавтов будет линия вдоль их внешнего края, и вдоль главных особенностей их скафандра.
Я опытный программист, но плохо знаком с 3D программированием. Я не могу придумать игру, которая выглядит так - это было сделано? И как бы это сделать? На ум приходят две проблемы - найти существенные грани и нарисовать их. Нужен ли ему «движок», закодированный из матриц, основанный на строках, а не обычный трехмерный движок?
Ответы:
По сути, речь идет о поиске новых возможностей, и существует множество игр, которые делают это различными способами.
Вероятно, первым был 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, но также использует текстуры, которые были построены с использованием стиля кисти. (Холмы на расстоянии, например, рисуются как мазки кистью в текстуру, которая рисуется как стандартный четырехугольник). Оками прекрасна, но я не думаю, что это действительно касается технологии, о которой вы спрашиваете; конечно, он использует более старый подход для своего эффекта.
Теперь, в вашем случае, вы просите об этом без цветовой заливки, просто рисуя мир только линиями. Это легко сделать; просто нарисуйте все многоугольники без освещения и в одном постоянном цвете, который соответствует цвету фона. Любой из этих подходов должен работать с использованием этого подхода, не меняя игровой движок вообще. На самом деле важно нарисовать эти полигоны «того же цвета, что и фон», так как они не дадут краям фона просвечивать объекты переднего плана, что может очень быстро запутать.
источник
То, о чем вы говорите, это нефотореалистичный рендеринг (он же NPR). В 3D-игре реального времени это делается с использованием фрагментных / пиксельных шейдеров.
Прокрутите здесь, чтобы увидеть несколько примеров: http://developer.download.nvidia.com/shaderlibrary/webpages/shader_library.html
источник