Версія LIRA-CAD 2025 базується на оновленому графічному движку, що дозволяє використовувати можливості обладнання як за стандартом OpenGL 1.1, так і за стандартом OpenGL 4.6. У тому числі, з використанням мови програмування шейдерів GLSL 4.6.
Це відкрило шлях не тільки до нового рівня продуктивності графічної підсистеми, вираженого в показнику fps (кадрів у секунду), але й до нових можливостей візуального представлення проектованих об'єктів.
Серед таких можливостей – ефект розсіяного затінення. Його також називають ефектом «похмурого неба» або ефектом «мокрих кутів». Суть його полягає в тому, що об'єкти реального світу, перебуваючи під рівномірним освітленням купола сірого неба, затіняють один одного, частково перекриваючи шлях хаотично та рівномірно спрямованим променям до поверхонь об'єктів. Від цього поверхні в кутах і тісних просторах виглядають темнішими, ніж на відкритому просторі, де вони експонуються світлом від усього небосхилу.
Особливу принадність цьому ефекту надає те, що для нього не потрібно якось спеціально налаштовувати джерело світла, задавати його координати та характеристики. Все виходить ніби «само», достатньо включити цей ефект, і сцена відразу візуально перетворюється, набуваючи об'єму. Тим не менше, знаючи допитливий характер наших користувачів, ми не змогли утриматися від спокуси і таки надали в програмі низку налаштувань, що дозволяють регулювати інтенсивність та характер даного ефекту.Ця нотатка адресована користувачам програми, які бажають не тільки знати всі налаштування програми, але й розуміти, що вони означають, на що впливають та яким чином працюють.
Ця нотатка адресована користувачам програми, які бажають не тільки знати всі налаштування програми, але й розуміти, що вони означають, на що впливають та яким чином працюють.
На рис.1 показаний типовий вид сцени з ефектом розсіяного затінення та підкреслені ключові опції у налаштуваннях візуалізації, які дозволили отримати цей ефект.
Вже саме собою розсіяне затінення дає непоганий візуальний ефект, добре виявляючи обсяг і форму зображених елементів моделі. Однак у комбінації з іншими ефектами, налаштувати які теж зовсім не складно, можна отримати ще виразнішу картинку. Наприклад, на рис.2 показано, як може виглядати зображення, якщо додатково використовувати тіні, що падають.
Безумовно, на якість картинки та характер прояву ефектів впливають налаштування, що виробляються у вікні Властивості для поточного активного виду. Зазвичай у вікні Властивості показані властивості виділених для редагування елементів моделі. Якщо скасувати виділення елементів (наприклад, по клавіші Esc), то у вікні Властивості демонструються властивості поточного активного виду. При цьому набір властивостей залежить від вибраних опцій візуалізації. Зокрема, якщо включена опція Тіні, що падають, то пропонуються для налаштування властивості М'якість тіней та Щільність тіні. Якщо увімкнено Розсіяне затінення, то можна налаштувати Радіус розсіяного затінення та Поріг розсіяного затінення. Тепер докладніше про перелічені тут властивості.
М'якість тіней – параметр може набувати значень від 0 до 3.
Глибина обробки і відповідно прояв ефекту напівтіні може регулюватися параметром Радіус напівтіні, що додатково з'являється. Радіус напівтіні визначає область, в межах якої торкаються текселі тіньової маски для виконання стохастичного згладжування. Значення від 7 до 15 текселів зазвичай працюють добре. Менше 7 звичайно не має сенсу. Більше 21 – тільки для отримання особливих художніх ефектів.
Параметр «м'якості» впливає як на тіні, що падають, так і на тіні від розсіяного затінення.
Щільність тіні – параметр, значення якого показує, наскільки темною повинна бути тінь. Робочий діапазон зазвичай від 0,2 до 0,7. Допустимі значення і більше 1.0 для спеціальних ефектів «чорної» тіні. Від'ємні значення забезпечують «зворотну» тінь, тобто підсвічування там, де зазвичай була б тінь.
Слід зазначити, що немає «правильних» чи «неправильних» значень. Все залежить від ефекту, який хочеться здобути. Автори програми навмисне намагалися нічим не обмежувати фантазію користувача, якою б вишуканою вона не була.
Радіус розсіяного затінення – щоб пояснити цей параметр, слід розглянути рис. 3.
На рис. 3. зображено стохастичне тестове ядро поодинокого радіусу. Цей параметр зменшує або збільшує радіус тестового ядра. Залежно від масштабності зображуваної сцени та розмірів типових представлених на ній елементів може виникнути бажання покерувати радіусом. Звичайні значення лежать у діапазоні від 0.2 до 1.5. Умовно можна вважати, що мова про метри, хоча це не зовсім так, особливо для центральної проекції, оскільки ядро працює в координатах однорідного простору, які використовуються для перспективних перетворень.
Ідеально для розрахунку розсіяного затінення в кожному пікселі зображення було б направити з відповідної йому точки поверхні об'єкта промені на всі боки і перевірити, які з них перетнуться з іншими об'єктами (затіняться), а які досягнуть небосхилу, а значить, зроблять свій внесок у освітлення. Але за такого підходу рендеринг відбувався б надзвичайно повільно. Тому ми обмежилися кількома тестовими напрямками, які вибирають випадково. Приклад такої «троянди променів» якраз і показаний на рис. 3. Результат тесту потім кількісно оцінюється і порівнюється із заданим значенням параметру Поріг розсіяного затінення. Для нього значення 0,5 є фізично обґрунтованим. Воно означає, що половина тестів, випадково спрямованих з точки на деякій поверхні, повинна опинитися всередині тіла, тобто бути затіненою, а друга половина виявитися освітленою. Якщо задати значення менше 0.5, ефект затінення буде виражений гіпертрофовано. Якщо більше 0.5, то навпаки стане менш помітним.
У порядку нагадування, про всяк випадок, наводимо тут налаштування програми, що стосуються візуалізації, які повинні бути включені для того, щоб було актуально все вищесказане.
Критично важливі параметри:
Апаратне прискорення – щоб використовувалися апаратні можливості візуалізації, що надаються програмі графічною платформою комп'ютера.
Підтримка OpenGL 4.6 – декларуємо, що графічна платформа даного комп'ютера підтримує вищезгаданий стандарт, і програмі можна звертатися до її можливостей відповідно до цього стандарту. Для ряду застарілих відеокарт ця опція має бути відключена, оскільки звернення до старих карт за новим стандартом може призводити до фатальних помилок у драйвері пристрою.
Використання шейдерів – рендеринг за умовчанням здійснюється за допомогою програмованого конвеєра на відміну від вбудованого, як це було в попередніх версіях.
Візуальні ефекти – для рендерингу використовується повний комплект шейдерів, що постачаються з програмою, включаючи всі існуючі можливості. Якщо обмежити цю опцію значенням Ні, то буде використаний скорочений набір спрощених шейдерів, що може бути корисним на застарілих, нестандартних або малопотужних графічних платформах.
Відмова від візуальних ефектів на хороших графічних платформах шляхом відключення цієї опції може дати незначний (менше 10%) приріст продуктивності у вимірах по fps. Ми не рекомендуємо так робити, хоч і не забороняємо.
SSAO-технологію застосовувати – Screen Space Ambient Occlusion – розсіяне затінення в екранному просторі – технологія, заснована на алгоритмі, що дозволяє отримувати ефект розсіяного затінення ефективним хоч і наближеним методом, забезпечуючи хороші результати при мінімальних витратах продуктивності. Якщо опцію вимкнути, ефект розсіяного затінення стане недоступним. Зрозуміло, ця опція доступна тільки при доступних візуальних ефектах, шейдерах, новому стандарті графіки та апаратному прискоренні.
Тепер про самих шейдерів. Шейдери – це програми мовою GLSL. Вони постачаються разом із програмою у комплекті постачання у вигляді вихідних текстів. Їх можна знайти в каталозі, шлях до якого задається в налаштуваннях програми (див. рис. 5).
У каталозі Initial є підкаталог Shaders. Там і розташовуються шейдерні програми (див. рис. 6).
Програмований конвеєр рендерингу (pipe) складається із двох шейдерів: вершинного (розширення файлу *.vert
) та фрагментного (розширення *.frag
).
При відкритті чергового вікна графічного вигляду в LIRA-CAD створюється OpenGL контекст, в нього завантажуються шейдерні програми та компілюються з урахуванням особливостей програмно-апаратної графічної платформи, на якій виконується програма. В результаті виходить програмний код, спеціалізований для виконання саме на Вашому комп'ютері у надрах Вашої відеокарти.
Які шейдерні програми будуть завантажені та виконані, залежить від вибраних опцій візуалізації в налаштуваннях програми. Для візуалізації завжди потрібний шейдер полігонів – імена файлів починаються з Spf_01, і шейдер ліній – імена файлів Spf_line.
До імен файлів можуть бути додані суфікси _bb або _mc.
Значення суфіксів:
_bb – полегшені файли шейдерних програм із урізаним набором функцій. Вони завантажуються в тому випадку, якщо опція Візуальні ефекти встановлена у значення Ні. При цьому не буде працювати розсіяне затінення, карти нормалей та імітація туману.
_mc – ще більш урізаний варіант шейдерних програм, який не працює з текстурами та не забезпечує згладжування країв тіней. Цей набір завантажується, якщо опція Підтримка Open GL 4.6 встановлена у значення Ні. Призначена для роботи на дуже застарілих або проблемних платформах.
Без суфіксу – файли шейдерних програм із повним набором функцій, що забезпечують усі доступні візуальні ефекти. Завантажується, якщо вибрані опції Підтримка Open GL 4.6 - Так і Візуальні ефекти - Такi>. У цьому випадку, крім згаданих шейдерних програм Spf_01 та Spf_line, завантажуються також усі програми з іменами, що починаються на ssao_. Вони забезпечують ефект розсіяного затінення.
За бажанням, в порядку експерименту під Вашу відповідальність, Ви можете самостійно модифікувати код шейдерних програм для отримання спеціальних візуальних ефектів.
Для прикладу розглянемо файл ssao_main.frag
, який містить фрагментний шейдер для розрахунку розсіяної освітленості (див. рис. 7).
Можна закоментувати два рядки, які забезпечують розрахунок offset звичайним способом, що штатно пропонується за замовчуванням, і, навпаки, розкоментувати закоментовані рядки, які обчислюють зміщення з поворотом тестового ядра в залежності від екранної координати на псевдовипадковий кут.
При відкритті чергового графічного вікна в його контекст буде завантажено вже не оригінальну, а модифіковану програму. В результаті характер зображення може суттєво змінитись. Безумовно, додавання нових обчислювальних функцій призведе до зниження продуктивності, що призведе до нижчих показників fps. Однак, це шлях до створення власних візуальних ефектів, які можуть радикально відрізнятися від початкових задумів розробників програми.
На рис. 8 показана картинка, отримана в результаті описаного вище виправлення згаданого фрагментного шейдера. Слід зазначити також справедливість наведеного вище прогнозу продуктивності. На рис. 9 ліворуч наведено результат роботи модифікованого шейдера, праворуч – оригінального.
Також потрібно знати, що, якщо в коді шейдера допустити синтаксичні помилки, то він не буде відкомпільований, про що драйвер повідомить програмі, і він автоматично відключить використання шейдерів.
Якщо код шейдера буде написаний синтаксично правильно, і його компіляція відбудеться успішно, він буде запущений на виконання в ході рендерингу. І, якщо він міститиме помилки не за формою, а по суті, то його виконання може призвести або до отримання не тієї картинки, яка очікується, або до критичного збою та завершення роботи програми. У цьому випадку розумним рішенням буде відновити оригінальні тексти шейдерів з резервних копій, які були завбачливо збережені.
Авторський колектив щиро бажає Вам успіхів у роботі та творчості.
Помилка в тексті? Виділіть її та натисніть Ctrl + Enter, щоб повідомити нам.
Коментарі