Як намалювати 3D-світ за допомогою ліній, більше схожий на ескізний малюнок чи мультфільм


9

Подумайте про те, щоб зробити малюнок чорнилом, не зафарбовуючи, і всі лінії мають однакову вагу - такі, як ви бачите в комічному смузі, як Ділберт. Це являє собою активний тривимірний світ, але об'єкти не мають текстур, але ви також не бачите тесельованих трикутників.

Для прикладу розглянемо малювання поверхні Місяця. Лінії, які ви могли б намалювати, були б уздовж верхнього краю пагорбів, аж до місця, де вони відповідають загальному рівню поверхні. За тими, що ви зробили би те саме для великих пагорбів, вдалину, і позаду того, що було видно за обрієм. Для кратерів можна намалювати близьке коло для зовнішнього краю та частково замасковане коло для нижнього краю. Валуни мали б лінію по краю і вздовж основних видимих ​​країв. Астронавти мають лінію по зовнішньому краю та уздовж основних особливостей свого космічного костюма.

Я досвідчений програміст, але новий у програмі 3D. Я не можу подумати про гру, схожу на це - це було зроблено? І як би це зробити? Приходять в голову дві проблеми - знаходження значних країв та його малювання. Чи потрібен буде "кодований" двигун з матриць вгору на основі ліній, а не звичайний 3D-двигун?


Я просто хочу попередити вас, що люди не дуже добре сприймають 3D на 2D екрані, як є, тому знімати затінення, що є дуже важливою частиною для розуміння глибини сцени, може не працювати добре в грі, що спирається на 3D геймплей
Джефф

Є одна гра, яка відповідає стилю, який ви описуєте - Okami, випущений для PS2 через кілька років en.wikipedia.org/wiki/%C5%8Ckami
Еран Гальперін

1
Приємно, я думав над цим займатися сам. Думаю, ви хочете використовувати хоч якесь затінення челя, а не лише лінії.
mpnk121

Відповіді:


11

По суті, те, про що ви говорите, - це пошук речей, і існує ряд ігор, які роблять це різними способами.

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

Обидві ці ігри працювали однаково; для кожного окресленого об'єкта намалюйте об'єкт двічі. По-перше, візуалізуйте її із зворотним зворотним зв'язком із застосованим натисканням вершини (тобто перемістіть кожну вершину на деяку відстань уздовж її звичайного вектора), і в будь-якому кольорі ви хочете, щоб вони виглядали 'рядками'. Потім малюйте ще раз, без вершинного поштовху та з нормальною зворотною обробкою. Ця пара операцій дає вам кольоровий обрис силуету навколо об'єкта, і це все, що використовували ці перші дві ігри. У космічній гонці я підтримував ілюзію постійної ширини лінії, натискаючи вершини на різну відстань, виходячи з того, наскільки далеко об’єкт знаходився від камери. У радіо Jet Set вони цього не зробили (це призвело до того, що лінії стали більшими чи меншими, оскільки об’єкти рухалися ближче чи далі від камери)

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

Я також вкажу на Lair 3D Dragon - це єдина гра, про яку я знаю, яка, здається, справді робить це належним чином; взяття крапкового добутку від камери до багатокутника та норми полігону для кожного багатокутника в моделі, щоб побачити, чи кожний багатокутник звернена до камери або від неї, а потім перевірка всіх пар підключених багатокутників; якщо будь-яка пара багатокутників ділиться ребром, і один багатокутник стикається з камерою, а один багатокутник ні, то він намалює тонку лінію постійної ширини уздовж цього краю в просторі екрану. (Я не міг зробити цю роботу досить швидко на Dreamcast для космічної гонки, або я б її використав. Сьогодні на сучасних комп’ютерах це абсолютно так, як я б намагався досягти цього ефекту, навіть якщо це "

Lair 3D Dragon - це також єдина гра, про яку я знаю, яка насправді малює лінії між областями різного кольору або при нормальних вершинах розривів, навіть якщо там не знайдеться край силуету. Я підозрюю, що у них був користувальницький інструмент, який дозволяв їхнім художникам призначати ребра полігону завжди отримувати лінію.

Окамі , про який вже згадували деякі інші люди, схоже, використовує подвійний підхід на вершину та натискання, подібний до радіо Jet Set і космічної гонки, але також використовує текстури, побудовані за допомогою художнього стилю з матовим малюнком. (Пагорби на відстані, наприклад, малюються як мазки пензлем у текстуру, яка намальована як стандартний квадратик). Окамі прекрасний, але я не думаю, що це дійсно стосується технологій, про які ви питаєте; Звичайно, для його ефекту використовується старший підхід.

Тепер у вашому випадку ви просите зробити це без заливки кольором, просто намалюйте світ лише лініями. Це легко зробити; просто намалюйте всі багатокутники без освітлення, і в одному постійному кольорі, який відповідає кольорові фону. Будь-який із цих підходів повинен працювати, використовуючи цей підхід, не змінюючи свого ігрового двигуна. Важливо насправді намалювати ті полігони "того ж кольору, що і фон", оскільки вони не дозволять фоновим краям відображатись через об'єкти переднього плану, які дуже швидко можуть заплутатися.


+1 блискуча відповідь, що включає обидва, теорію та цікаві приклади
Maik Semder

Дивовижна відповідь, дякую, що ви написали його час.
веселе болото

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.