16-бітні напівплавні лінійні HDR-зображення у вигляді (дифузних / альбедо) текстур?


10

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

Якщо всі ваші текстури є 8-бітовими зображеннями LDR, як JPEG, це не могло б викликати конфлікти з контролем експозиції / відображенням тонів під час візуалізації. Тобто, якщо ви відрегулюєте експозицію зображення, яка повинна відображати деталі в текстурах, яких насправді немає, оскільки вони були затиснуті низьким динамічним діапазоном. Так чи не було б сенсу також текстури як HDR-зображення, збережені у форматі .exr, в лінійному кольоровому просторі з 16-бітовим напівплавком, щоб отримати гарне кольорове зображення (32-бітовий "повний" поплавок може бути надмірним?). Щоб мати більш детальні та правильні значення кольорів, також, я думаю, може вплинути на GI і як обчислюється відтінок кольорів?

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

Редагувати: Для уточнення, мене найбільше цікавить це з фотореалістичної точки зору візуалізації, з рендерінгами променевих слідів (як ментальний промінь, V-Ray, Арнольд тощо) з повною імітацією світла та глобальним освітленням, а не для ігрові двигуни в реальному часі.

Відповіді:


8

У виробництві фільмів ми майже ніколи не використовуємо 8-бітові текстури для кольорів / альбедо через смуги тощо (JPEG особливо проблематичний, оскільки за специфікацією це sRGB, а не лінійні значення). Ми або використовуємо "половину" (16-бітний плаваючий ) або 16-бітові цілочисельні значення без підпису для текстур кольорів / альбедо.


1
Нічого, дякую @LarryGritz! Враховуючи, що ви працюєте в Sony Pictures Imageworks, я сприйму вас як дуже надійне джерело! :) Але як ви захоплюєте ці текстури? Більшість камер знімають лише 14-бітні файли RAW, у вас є спеціальні камери з лінійними датчиками 16 біт? Або ви берете кілька експозицій для текстур, як і для освітлення на основі HDRI? Або ви просто захоплюєте 14-бітну камеру RAW і зберігаєте її як "16-бітну"? Ow, і який формат файлу ви використовуєте, .tiff (.tx, .tex) або .exr? Ще раз дякую за ваш внесок !! :)
Крістофер Хелендер

1
@KristofferHelander: Перетворення з 14-бітного захоплення в 16-бітове представлення діапазону 0-1 легко досягається шляхом множення. Але більшість наших текстур пофарбовані, а не сфотографовані - іноді вони фарбуються безпосередньо у 16-бітовому форматі, іноді їх фарбують у sRGB, а потім перетворюють на 16 біт, коли вони "лінеаризовані" для використання в якості текстури. Немає потреби в HDR для текстур альбедо.
Ларрі Гріц

1
@KristofferHelander: Для текстур альбедо ми, як правило, використовуємо TIFF з 16-бітовими цілими даними (те, що ми називаємо .tx - це просто формат TIFF, але викладений плиткою і з мультирезолюцією MIP-карти, що зберігається у вигляді декількох підрозділів у файлі TIFF). Для справжніх даних HDR, таких як захоплення середовища, ми використовуємо OpenEXR. Вихід рендерера також має тенденцію бути OpenEXR.
Ларрі Гріц

8

Так, в деяких екстремальних випадках для HDR освітлення та тонального відображення можливо виявити проблеми смуги кольорових текстур. У цих випадках може бути корисним більша глибина бітів для текстур. Однак, на мій досвід, більшість матеріалів і звичайних освітлювальних ситуацій не виявляють цієї проблеми, і більшість текстур у типовій грі є прекрасними у 8-бітових (або навіть рідше - іграх часто використовується стиснення BC1, що зменшує їх до 5- 6-5-бітний).

Люди використовують цілі відображення HDR, оскільки одна сцена може містити дуже різні величини яскравості, наприклад, темна кімната, в якій ви можете бачити крізь вікно на сонячну зовнішність у 10–100 разів яскравішу за кімнату. Однак кольорові текстури не мають такого широкого діапазону величин. Вони представляють світловідбиваючі речовини, які притаманні діапазону [0, 1], і на практиці мало щоденних матеріалів нижче, ніж приблизно 2–5% відбиття. Таким чином, 8-бітове зображення (з гамма-кодуванням) зазвичай може представляти дифузні та дзеркальні кольори з достатньою точністю.

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

Випадок, коли ви, мабуть , хочете, щоб текстура HDR була емісійними матеріалами, особливо для неонових знаків та подібних джерел світла. Текстура виглядає так, як її значення збільшене, щоб виглядати як джерело яскравого світла в грі, тому в такому випадку 8-бітове зображення може легко показати смуги.

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


combination of a quite dark texture with very bright lighting or an extremely overexposed camera setting can show banding in the final frameдуже хороший огляд. Але ми можемо відзначити, що кодування гамми є саме для пом’якшення цього моменту. Якщо у нього є проблема, чому б не спробувати чудовий показник гами? але це перешкоджатиме використанню апаратних зразків sRGB.
v.oddou

Дякую за ваш внесок Але для уточнення мене це найбільше цікавить з точки зору фотореалістичної рендерингу, із рендерінгами променевих слідів (як ментальний промінь, V-Ray, Арнольд тощо) з повною імітацією світла та глобальним освітленням, а не з реальним -ігрові двигуни.
Крістофер Хеландер

@KristofferHelander Добре знати, але я думаю, що те, що я написав, мабуть, так само добре стосується і офлайн-рендерінга. Але я визнаю, що я не маю особливого прямого досвіду в цій галузі.
Натан Рід

@NathanReed Так, ви, безумовно, зробили там справді непогані моменти :)
Kristoffer Helander

5

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

Якщо TLDR, зверніть увагу на це зображення: введіть тут опис зображення

Що ми бачимо, це канал Albedo , це те, що ви хочете кодувати в 16 біт, якщо я правильно розумію ваше запитання.
Я не збираюся говорити, " якщо це могло бути закодовано в 256 кольорів для ігор у минулому, навіщо нам знадобиться 281474976710656 (це 281 трлн.) У нових іграх? ", Навіть якщо я хочу, але це звучить як пихатий хлопець Pixar від Вгору Більш конструктивно, якщо ви зазначили на цьому зображенні, все знаходиться на одному рівні освітлення . Більш конкретно, можлива максимальна інтенсивність, яка зберігає бажану насиченість. (значення в просторі HSV, V позначено максимумом)

Акцент є ключовим, нам ледь не потрібні будь-які шматочки, оскільки альбедо все одно не має глибини кодувати. Динаміка відбувається від затінення, має сенс працювати над f32компонентами всередині шейдерів, а також виводити для f16відображення цілей. Але зберігання текстур альбедо у f16цьому не лише надмірне, але це серйозна необґрунтована швидкість роботи для дорогоцінної пропускної здатності.


Дякую за ваш внесок Але для уточнення мене це найбільше цікавить з точки зору фотореалістичної рендерингу, із рендерінгами променевих слідів (як ментальний промінь, V-Ray, Арнольд тощо) з повною імітацією світла та глобальним освітленням, а не з реальним -ігрові двигуни. Я оновив своє початкове повідомлення.
Крістофер Хеландер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.