Autor Wątek: Ograniczenie barw używanych w renderowaniu do unsigned char  (Przeczytany 1200 razy)

Offline Glasgow

  • Użytkownik

# Maj 15, 2017, 21:11:42
Obraz renderowany na ekran jest inny od obrazu renderowanego do tekstury - prawdopodobnie różnica zakresu barw (?).

Zależy mi na tym, żeby obrazy były identyczne lub chociaż podobne.
Tekstura jest używana w późniejszym etapie do renderowania billboardów drzew, zatem pobieranie float zamiast unsigned char nie jest dobrym rozwiązaniem (duża liczba instancji).
Czy jest możliwość ograniczenia zakresu barw podczas właściwego renderowania (na ekran)?

Oczywiście pomijając GL_NEAREST.
« Ostatnia zmiana: Maj 15, 2017, 21:15:27 wysłana przez Glasgow »

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline JasonVoorhees

  • Użytkownik
    • The Immortal Life of the Son of Jay

# Maj 16, 2017, 02:12:49
Przydałoby się więcej danych.

Renderujesz do tekstury.
- teksturę nakładasz na obiekt?
- na ten obiekt działa jakieś oświetlenie? (bo to właśnie zmienia barwy)

Korzystasz z HDR? ( https://pl.wikipedia.org/wiki/Obraz_HDR )
Przy HDR kolory więcej ważą.

Offline beem

  • Użytkownik
    • Wordpress Blog

# Maj 16, 2017, 22:56:36
To chyba zależy od tego ile bitów poświęcisz na kolor, a nie od tego w jaki sposób kolor jest zapisany.

Offline Glasgow

  • Użytkownik

# Maj 17, 2017, 01:53:39
Testowałem kilka możliwości i jednak nie zakres barw jest problemem.
Po wyłączeniu kompresji barwa jest podobna (nie identyczna) do źródła.
Teksturę kompresuję do DXT5 - próbowałem kompresować lepszym algorytmem - niestety tekstura nadal wygląda jakby była ciemniejsza.

Oświetlenie jest wyłączone.
Nie korzystam z HDR (jeszcze).
« Ostatnia zmiana: Maj 17, 2017, 01:55:13 wysłana przez Glasgow »

Offline kalicjusz

  • Użytkownik
    • Kidler3D

# Maj 17, 2017, 20:39:22
To w takim razie może problem leży w przestrzeni kolorów?

https://learnopengl.com/#!Advanced-Lighting/Gamma-Correction
https://www.g-truc.net/post-0263.html

Mam na myśli żeby spróbować stworzyć teksturę w taki lub podobny sposób (ustawiając parametr internalformat na GL_SRGB):
glTexImage2D(GL_TEXTURE_2D, 0, GL_SRGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, image);

Offline Glasgow

  • Użytkownik

# Maj 19, 2017, 01:03:16
Kombinowałem z SRGB. Po przekształceniach stwierdziłem, że problem nie leży w korekcji gamma.
Problem został rozwiązany - kompresje wykonywałem na CPU, teraz wykonuję na GPU i różnica jest spora - mniej artefaktów (dziwnych pikseli) oraz barwa się poprawiła. Wynika, że złe wartości pikseli pobierał do RAM'u, bo test był wykonywany również bez kompresji.
Zauważyłem, że po aktualizacji sterowników od karty graficznej (NvIDIA) pojawiają się czasem błędy, których wcześniej nie było, może to było i jest przyczyną.
« Ostatnia zmiana: Maj 19, 2017, 01:06:48 wysłana przez Glasgow »