3D ілюзія 2D текстури планети


10

Кілька років тому я почув техніку, яка дає користувачеві ілюзію обертової планети, використовуючи 2D текстуру. Враховуючи, що користувач не може змінити свою позицію чи вікно перегляду.

Як називається ця техніка?

Відповіді:


25

Добре, я думаю, у мене зараз є представник. Зміст попередньої публікації із вбудованими зображеннями. Це ефект обертової планети, який ви шукаєте? Його просто прокручується 2D-зображення, яке проглядається через напівпрозору "дірку" в зорі поля.

Я зібрав швидкий маленький анімований подарунок про те, як виглядатиме ефект. Зрозуміло, що це могло бути анімоване набагато плавніше - я змістив поверхню планети на 4 пікселі в кожному кадрі. Він також не встановлений для обгортання зображення, тому в кінці циклу є глюк.

планета http://www.perludus.com/orbit.gif

Я все це робив у Photoshop, але концепція повинна працювати в середовищі 2D-рендерінгу, що дозволяє робити альфа-прозорість і т. Д. Ось серія скріншотів, що показують процес ...

  1. Створіть порожній фон зірки і виріжте в ньому круглий отвір.
    alt текст
  2. Знайдіть затінену сферу сірого для вашої планети, як ця
    alt текст
  3. Ось наші зірки з отвором і затіненою сферою зверху, напівпрозорою
    alt текст
  4. Зробіть синє коло розміром з отвором і надайте йому зовнішнє синє сяйво. Також встановіть, щоб він був напівпрозорим. Ось як це виглядає із затіненою сферою
    alt текст
  5. Тепер знайдіть текстуру поверхні планети. Я виявив, що це просто гугла "текстура поверхні планети"
    alt текст
  6. Розмістіть текстуру планети під зображенням зірки з напівпрозорим отвором у ній, щоб отримати такий вигляд
    alt текст

Щоб оживити поверхню вашої планети, просто перемістіть основу текстури поверхні планети. Вам потрібно буде розумно змінити текстуру, коли вона досягне краю, щоб отримати плавне і нескінченне обертання.

Сподіваємось, це допомагає і є ефектом, який ви шукали!

PS Бачив цю статтю про художників із досить новим способом створення текстур планети - змусив мене задуматися над цією відповіддю :) http://www.behance.net/gallery/Pan-Planets/9557465


нп Генрік. Як тільки я побачив твій пост, я хотів би сказати: "Надіюсь, я знаю, що це хлопець" Я не впевнений на 100%, але думаю, що саме так було зроблено ефект обертової планети в оригінальному телешоу Star Trek.
Тім Холт

Це була чудова відповідь, дає мені уявлення про ігровий проект, який у мене є. Наступного разу, коли я завантажую Starcraft 2 хворий, я повинен побачити, чи так це зроблено =)
Брайан Харрінгтон

Фантастична відповідь, чудові скріншоти!
Помилка 454

Твій образ загинув. Ви думаєте, що ви могли це виправити?
Міфічний

3

Я збираюся вгадати, що ви маєте на увазі, і просто викиньте ідею там, але це, безумовно, не буде «знаменитим» способом це зробити.

все в 2D

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

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

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

тепер ви анімуєте текстурні матриці текстур землі та хмари, щоб змусити їх рухатися. змусити їх рухатися в різних напрямках і швидкостях, і, здається, він обертається. все залежить від того, наскільки безшовно ви зробили свої фактури.


2

Я думаю, що ця стаття описує техніку. (Це російською мовою, тому я публікую перекладене посилання.)

https://translate.googleusercontent.com/translate_c?depth=1&hl=en&rurl=translate.google.com&sl=auto&sp=nmt4&tl=en&u=https://habrahabr.ru/post/248381/&usg=ALkJrhgViuYdAi-Vav3cyhxvydkaBKh6EQ

Я реалізував це тут. http://github.com/meric/renderplanet

В основному ви робите зображення, що кодує ортографічну проекцію ( http://mathworld.wolfram.com/OrthographicProjection.html ) і обмотуєте навколо себе свою планету та хмарну текстуру за допомогою шейдера. Зсуньте текстуру планети відповідно до dt, щоб вона оберталася. Використовуйте підготовлене напівпрозоре зображення для атмосферного кільця та тіні або генеруйте його, намалювавши напівпрозорі дуги та експериментуючи з тінню для тіні.

Ось зображення:

ортографічний

Для кожного пікселя в колі Red + Green/255нормалізується X координата текстури планети / хмари для пошуку і Blue + Alpha/255нормалізується координата Y.

Ось результат:

зразок

Текстури планети та хмари повинні бути в прямокутній проекції.


1

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

Основне питання полягає в тому, що вам потрібно нанести рівну текстуру на поверхню кулі, яку ви отримуєте безкоштовно за допомогою 3D-рендерінгу. Коли планета обертається, видимі ділянки поверхні планети оживляють нелінійним способом (екваторіальні частини текстури рухаються швидше, ніж полюси). Тому я думаю, що або вам доведеться перекручувати зображення під час їх відображення на диску, або ви робите так, як запропонував VirtualVoid, і у вас є просто кілька зображень, які ви змінюєте з часом.

Це було б жахливо реалізовувати, але якщо ви в змозі візуалізувати текстуру, піксель за пікселем, то ви в основному можете зробити обчислення растерізації для кожного рядка сфери окремо. Припустимо, що текстура вашої поверхні поверхні вирівняна, так що на екваторі зображено 512 пікселів. Припустимо також, що ваш видимий диск шириною 256 пікселів. Тепер подумайте про кожен рядок виведеного диска як про розсувне вікно на текстурі поверхні. На екваторі вікно становить 50% від ширини текстури, і ви просто копіюєте кожен 256px на еквівалентний піксель на диску. Наступний рядок вниз на диску буде трохи менше 256 пікселів, але через спотворену карту поверхні все ще є 256 пікселів вхідних даних про поверхневу карту. Тоді ви підпробовуєте вхідні дані карти вхідної поверхні та видаєте отриманий піксель. Для легкої математики, нехай s припустимо, що 1/3 шляху між екватором та полюсом шириною 128 пікселів у вихідному диску. Таким чином, кожен з цих 128 пікселів буде в середньому 2 сусідніх пікселів. Коли ви спускаєтесь до полюса, ви б усереднювали всі 256 пікселів лише в декілька вихідних пікселів.

Ви також можете зробити це іншим способом, а лінії в текстурі джерела мають різну довжину. Отже, хоча рядок, що містить вихідні дані, має в ній 512 пікселів, лінія 1/3 шляху вниз має лише 256 пікселів, а лінія внизу має лише кілька пікселів. Але кожен рядок подвоюється ширині диска за еквівалентною координатою y. Таку текстуру було б абсолютно жахливо створити, хоча. І, мабуть, страждатимуть від жахливих проблем.

В обох цих випадках ваша анімація просто збільшує початковий піксель x у текстурі вводу та загортає до початку лінії текстури введення.

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

Я не вірю, що я чув про якісь рішення цієї (досить розпливчастої) проблеми як конкретної методики з назвою.


0

Спрайт. Це звучить як те, що ви описуєте, - це двовимірний спрайт у 3D-ігровому двигуні, щоб зробити його дешево (Nintendo64 робив це повсюдно, як і багато ранніх двигунів 3d).

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

http://en.wikipedia.org/wiki/Sprite_(computer_graphics )


0

Це може бути просто проста анімація, використовуючи одну текстуру з декількома кадрами.

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