Сортування об’єктів перед рендерінгом


10

Я намагаюся реалізувати графік сцени, і у всіх статтях, до яких я потрапив, йдеться про сортування об'єктів. Отже, ви б сортували свої об'єкти, наприклад, "за матеріалами". Тепер, поки я сів і почав його реалізовувати, я начебто це сприйняв як належне, бо це мало сенс. Але тепер мені цікаво, що насправді змінюється сортування?

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

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

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

До речі, є будь-яка інформація про те, чи змінювати форму та називати glBufferSubData дорожче (або менше).


3
Швидка відповідь, так, стрибок від зміни матриці до встановлення матеріалів також для кожного об'єкта - це погано. На даний момент я б запропонував відправитися в сторону, щоб дізнатися про засоби вимірювання ефективності OpenGL для вашої платформи, перш ніж продовжувати. За допомогою інструментів Perf ви можете легко виміряти різні методи і дізнатися, що найкраще підходить для потреб вашого рендера. Плюс ці інструменти протримають вас всю вашу кар’єру вперед, тоді як цей один рендер ... не так багато ;-)
Патрік Х'юз

@PatrickHughes приголомшливий, спасибі, я напевно перевіряю їх
dreta

Відповіді:


4

Ви обов'язково хочете сортувати, щоб збирати разом матеріали. Якщо ви можете, ви також можете використовувати екземпляр для об'єднання геометрії (наприклад, якщо у вас є X однакових об'єктів).

Ще є значення в сортуванні за глибиною. Ви повинні відсортуватися наперед для отримання прозорих об'єктів (ігноруючи декілька вдосконалених прийомів, які усувають цю потребу за обмежених обставин).

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


3
Впорядкувати непрозорі / прозорі об’єкти непросто для складних ситуацій (до того, що неможливо без довільних правил). Ви також можете групувати за фактурою з тією ж метою, щоб зменшити дзвінки gl.
Darkwings

Упорядкування за фактурою необхідне для пакетних викликів та зменшення кількості дзвінків. Сортування не має нічого спільного зі зменшенням дзвінків на розіграші. Сортування пов'язане з фактичним правильним відображенням (для прозорих об'єктів) або зведенням до мінімуму накладних витрат процесора (для непрозорих об'єктів). Бути "складним" - це проблема, але саме з цим графічні програмісти ігрових двигунів отримують гроші, щоб зробити ігри справді відтворюваними на товарному обладнання. Ефективність обладнання між відсортованими та несортованими непрозорими об'єктами може бути досить величезною.
Шон Міддлічч

opengl.org/wiki/Transparency_Sorting Ось що я мав на увазі під "довільними правилами". Не існує об'єктивного «правильного» сортування для складних випадків. Про "сортування" та "упорядкування" в ОП чітко зазначено "сортування за матеріалами" (незалежно від прозорості), і я мав на увазі те саме для текстури, оскільки обидві цілі впливають на ефективність роботи.
Darkwings

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

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

3

Сортування об'єктів суто за глибиною має величезне значення, особливо в архітектурі бінінгу чи кахельної рендерингу.

Сортуйте тверді речовини спереду та назад, прозорі плівки зі спини на фронт.

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

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

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