Наукові ілюстрації в pov-ray
Версія для друку
Графіки і діаграми давно стали звичними атрибутами наукової літератури. Однак ними наукова ілюстрація далеко не обмежується. Нерідко об'єкт досліджень настільки складний (протягом рідини, рух системи твердих тіл), що важливо побачити весь процес відбуваються в ньому змін цілком, інакше просто неясно який графік слід будувати. Тут на допомогу вченим приходять кошти тривимірної візуалізації. Про один з таких засобів і піде наша розповідь.
Звичайна кухня. Ні, це не фотографія, а зображення. створене в програмі POV-Ray методом трасування променів. Уявіть, що екран вашого комп'ютера - це вікно, за яким щось відбувається. Це «щось» називається сценою. Колір кожного пікселя на екрані - це колір променя, який виходить з ока, проходить через цей піксель і стикається зі сценою. Луч може просто повернутися назад, а може відбитися від дзеркальної поверхні або переломити, проходячи, наприклад, з повітря в скло. Щоб дізнатися колір, в який забарвиться піксель, потрібно запустити через нього промінь і простежити шлях цього променя по сцені. Звідси пішла назва алгоритму: ray-tracing - трасування променів.
POV-Ray або, повністю - The Persistence of Vision Ray-Tracer - використовує зворотний трасування променів для створення тривимірних фотореалістичних зображень. Сцена в POV-Ray описується на SDL (Scene Description Language) - интерпретируемом мові програмування с подібним синтаксисом. При допомогою SDL користувач задає положення камери, джерел світла, розміщення об'єктів і їх властивості, атмосферні ефекти і т. П.
Застосування POV-Ray для наукової ілюстрації - лише мала частина серед можливих напрямків використання цієї програми. І навіть з цієї дещицею ми в статті встигнемо лише познайомимося. Що ж, приступимо ...
Вектори і система координат. POV-Ray працює з числами і векторами. Вектором називається точка в просторі, що задається як
Система координат, прийнята в POV-Ray за замовчуванням, виглядає так:
Вісь Z спрямована всередину монітора.
Щоб отримати зображення, нам знадобиться об'єкт для зйомки, освітлення, і камера. Ось з неї і почнемо.
Камера. «Фотографію» сцени неможливо створити без камери (camera). Точка, в якій розташована камера, задається параметром location, а параметр look_at визначає точку, куди вона спрямована. Як приклад, помістимо камеру в точку <0,0,-10> і направимо її в початок відліку. Записується це так:
Джерело світла. Розмістимо позаду і праворуч від камери джерело світла light_source:
вектор <10,20,-20> визначає положення джерела світла, а вектор color - його колір
За замовчуванням, джерело світла невидимий - це просто крапка, що світиться, але його можна зробити видимим, а також прив'язати до будь-якого об'єкту, як вбудованому, так і створеного користувачем.
Прості об'єкти. POV-Ray має велику бібліотеку готових об'єктів. Ось, наприклад, як задається сфера:
Перший вектор визначає положення центра сфери, а наступне за ним число - її радіус. Наша сфера розташована на початку координат і її радіус дорівнює 2.
Вставка готових об'єктів POV-Ray за допомогою меню Insert (POV-Ray для Windows).
За замовчуванням, сфера забарвлюється в чорний колір. Пігмент (барвник), що задає колір об'єкта, визначається в блоці pigment:
Колір пігменту задається так само як колір джерела світла. У нашому випадку сфера буде пофарбована в білий колір.
Збираючи всі фрагменти разом, отримаємо:
<-1, 0, -1>. <1, 2, 1>
translate
Тут вводяться два нові об'єкти - бокс box і площину plane. y - це вектор нормалі до поверхні і дорівнює він <0,1,0>.
Ключовий момент тут - рядок translate
Тепер поставимо число кадрів. Номери першого і останнього кадрів задаються параметрами Initial_Frame і Final_Frame. Initial_Frame за замовчуванням дорівнює 1, і міняти його ми не збираємося, а Final_Frame задамо рівним 20. Це робиться в командному рядку за допомогою опції + KFF так: + KFF20.
Щоб не писати кожен раз настройки в командному рядку, помістимо їх в окремий текстовий файл - my.ini. Налаштування можна записувати точно так же, як в командному рядку, або в більш Новомосковскбельном вигляді. У нашому прикладі INI-файл має вигляд:
Тепер командний рядок буде виглядати так:
povray + iімя_файла my.ini
Ось що у нас вийшло в результаті:
Цикл while. Припустимо, нам потрібно виконувати анімацію аж до заданого моменту часу. Тоді нам стане в нагоді цикл з умовою:
Він буде виконуватися до тих пір, поки залишається істинним логічне умова, що стоїть в дужках.
Давайте намалюємо бокс, помістимо на його вершину куля, зіштовхнемо його і намалюємо що з цього вийде:
#declare py = py + vy * dt-0.5 * dt * dt;
#declare vy = vy-g * dt;
#declare time = time + clock_delta;
Координати кулі задаються змінними px, py, а його швидкість - vx, vy. g - прискорення вільного падіння. Якщо це вам ні про що не говорить, то просто прийміть формули на віру і зосередьтеся на малюванні.
Тут в циклі змінюється «призначене для користувача» час time, збільшуючись на кожному кроці на clock_delta. Я назвав цей час так, тому що його станом користувач може управляти по своєму бажанню, тоді як для clock можна задавати тільки діапазон зміни. На кожному кроці циклу малюється все більше і більше куль, до тих пір поки час малювання не закінчиться (т. Е. Досягне значення Final_Clock).
Щоб не малювати «слід» з куль, досить винести команду sphere за межі циклу і помістити її після #end.
Зверніть увагу на те, що сцена освітлена відразу трьома джерелами світла. Перше джерело дає нам звичайне освітлення. Навіщо тоді потрібні два інших? А ось навіщо. Друге джерело висвітлює сцену зверху і дозволяє отримати «доріжку» з тіней куль в горизонтальній площині. Третій - світить збоку і дає тіні куль на вертикальній стінці боксу. Тепер ми можемо побачити, що уздовж координати X куля рухається рівномірно, а вздовж Y - прискорюється. Стане в нагоді як наочний приклад на уроці фізики, чи не так?
Зауважимо, що POV-Ray - не найкращий засіб для моделювання руху, він все-таки тільки «Рисователь». Зазвичай, рух моделюється за допомогою якогось з мов програмування (наприклад, С), результати зберігаються у вигляді команд POV-Ray, а вже той малює як рухалося тіло. Але, як бачимо, якщо потрібно, то просте моделювання можна виконати і в самому POV-Ray.
Вихідна точка для пошуку подальшої інформації по POV-Ray - офіційні керівництво і колекція посилань.
Велика колекція готових об'єктів знаходиться на сайті POVWorld.org.
На сторінці Пола Бурка знаходяться приклади використання POV-Ray для ілюстрації наукових робіт, наприклад, для візуалізації скалярних полів.
Малюнки химерних математичних об'єктів, зокрема двох-і тривимірних фракталів, а також результати моделювання різних фізичних процесів показані на сайті Пола Ніландера.
В роботі Пола Лютуса «Adventures in Ray Tracing». крім введення в POV-Ray, як додати нове з його допомогою стереозображень.
Ось тепер все. Успіхів!
Тож дивний матеріал. не зовсім зрозуміло, до чого тут наукова візуалізація. Програм тривимірної графіки досить багато. Причому на вскидку, описана далеко не найсильніша. Bryce, наприклад, підтримує все перераховане і анімацію в тому числі.
Нерідко об'єкт досліджень настільки складний (протягом рідини, рух системи твердих тіл), що важливо побачити весь процес відбуваються в ньому змін цілком, інакше просто неясно який графік слід будувати.
Зауважимо, що POV-Ray - не найкращий засіб для моделювання руху, він все-таки тільки «Рисователь». Зазвичай, рух моделюється за допомогою якогось з мов програмування (наприклад, С), результати зберігаються у вигляді команд POV-Ray, а вже той малює як рухалося тіло. Але, як бачимо, якщо потрібно, то просте моделювання можна виконати і в самому POV-Ray.
Тобто, через ж. Тоді до чого тут дивна фабула на початку статті. Знову хрень якась.
"Наукова візуалізація" в заголовку обмежує предмет статті. 3d-графіка використовується в науковій візуалізації, але не всі її кошти там потрібні. Відповідно, в статті розглядається лише малий шматочок 3d-графіки.
Інструмент для моделювання дозволяє розрахувати стан системи, наприклад, координати і швидкості точок рідини в заданий момент часу. Інструмент для малювання зображує частки рідини в цей момент. POV-Ray - для малювання. Що неясного?
Щодо "сили" пакетів 3d-графіки погоджуся тільки якщо ви приведете об'єктивні критерії, за якими порівнюється ця сила, і результати порівнянь.
І будь ласка, подивіться в словнику значення слова "фабула", щоб іншим разом вжити його до місця.