ПрограммированиеФорумГрафика

Unity: почему Linear Color Space смотрится по-разному на OpenGl и directX? (2 стр)

Страницы: 1 2 3 Следующая »
#15
11:38, 25 июня 2018

DirectX правильную картину дает. Физически 0.5 для нас должно быть в 4 раза ярче

#16
12:00, 25 июня 2018

g-cont
> Может это мэджик куб высветляет картинку?
Он частично высветляет в GammaSpace, но его заметно только по границам высветления (то есть видно ребра в directX). В linearSpace его вообще не видно.
Cейчас провожу генеральную уборку, все перевожу в sRGB. В одной сцене переводил текстуры в sRGB в режиме PlayMode, как только перевел последнюю картинку, которая имелась в сцене, так сразу вся сцена изменила цвет.

#17
12:19, 25 июня 2018

IBets
> DirectX правильную картину дает. Физически 0.5 для нас должно быть в 4 раза ярче
Похоже что да.

Выставил sRGB на UI и теперь он смотрится лучше, ну во всяком случае нельзя сказать что над ним работал слепой :)
Но лучше, это не так как надо. Все же OpenGL выдает более темную картинку.
1) Попробую еще сменить DirectX на OpenGL на компе с Windows, не знаю что это даст, но может что-то и даст.
2) Буду еще гуглить возможную причину проблемы, неужели нужно руками делать гамма-коррекцию?

#18
12:25, 25 июня 2018

Alerr
glEnable(GL_FRAMEBUFFER_SRGB) посмотри в RenderDoc вызывается ли у финального FrameBuffer-a
Там по факту должно отображать в каком формате FrameBuffer

#19
17:11, 25 июня 2018

IBets
> glEnable(GL_FRAMEBUFFER_SRGB) посмотри в RenderDoc вызывается ли у финального FrameBuffer-a
> Там по факту должно отображать в каком формате FrameBuffer
Пока все пытаюсь поставить RenderDoc на линукс.
Собрал билд, заметил что картинка в билде с OpenGL имеет нормальную яркость, такую же как и на directX.
На это можно было бы и закрыть глаза, но так как проект собирается в редакторе у которого GraphicAPI только OpenGL, то приходится выкручиваться.

#20
17:16, 25 июня 2018

Alerr
Забей на Linux. Они в паровозик в консоле играют. Им этого за глаза

#21
17:39, 25 июня 2018

IBets
> Забей на Linux. Они в паровозик в консоле играют. Им этого за глаза
А с OSX как быть, у них тоже OpenGL.

#22
17:54, 25 июня 2018

Alerr
Там Metal не поддерживается разве?

#23
18:41, 25 июня 2018

IBets
> Там Metal не поддерживается разве?
Поддерживается, советуете с ним связываться?

#24
19:18, 25 июня 2018

Alerr
Ну Apple недавно объявила OpenGL legacy

#25
12:27, 26 июня 2018

Мне все же удалось исправить эту ошибку.
IBets
> glEnable(GL_FRAMEBUFFER_SRGB) посмотри в RenderDoc вызывается ли у финального FrameBuffer-a
Да, он вызывался.

За 4 дня поисков перепробовал много чего, начал шнырять по всему юнити с целью сымитировать подобную ошибку.
Как результат нашел еще несколько ошибок, но свою не повторил. Например можно получить вот такое чудное розовое окошко во все окно Unity просто сменив шейдерную модель на Shader Model 2 в Edit>Graphics Emulation:

+ Показать

Так что как сымитировать эту проблему не знаю, знаю что она возникла из-за файлов в папке Assets (а там очень много файлов и мне не хотелось бы тратить время на доскональные исследования).

Как исправил косяк:
1) Нужно изьять содержимое Assets, тогда камера будет выдавать верный цвет.
2) Нужно несколько раз сменить настройки LinearSpace на Gamma и оставить Linear.
3) Потом нужно открыть юнити и по папке закидывать обратно в Assets его содержимое. Примечание: нужно закидывать именно по папке, так как если не выдержать этой пытки и закинуть назад сразу все содержимое и открыть проект, то ошибка не уйдет.
4) Теперь, когда все сделано, можно менять Linear на Gamma и сюрпириз-сюрпириз-сюрпириз ничего не сломается :)

С исправлением этой ошибки почти ушла ошибка с линиями от источника света. Непонятно почему, но поверхности обьектов рисовали на себе освещение так будто на них было что-то типа мультяшного шейдера. Интересно, из-за чего свет мог падать такими "зонами" с резкой сменой интенсивности:

+ Показать

Что думаете по линиям, из-за чего они могут возникнуть (все шейдеры Standard)?

#26
13:04, 26 июня 2018

Alerr
> Интересно, из-за чего свет мог падать такими "зонами" с резкой сменой
> интенсивности:
Проблема в юнити. У них затухание от источников света запихано в маленькую 1D-текстурку, которая при том 8 бит. Эта текстурка воспринимается как линейная, и её точности не хватает. Решить можно повесив разработчиков, переписав все встроенные шейдеры нахрен, что я для себя и сделал. Кстати, сама кривая этого затухания у них тоже от балды (и смешно говорить о каком-то PBR'е в юнити после этого).

#27
13:51, 26 июня 2018

Mr F
> Решить можно [s]повесив разработчиков[/s], переписав все встроенные шейдеры нахрен, что я для себя и сделал. Кстати, сама кривая этого затухания у них тоже от балды (и смешно
> говорить о каком-то PBR'е в юнити после этого).
Да уж, придется еще и с этим разбираться. Не подскажете статью где что-то подобное уже делали или хотябы где эта 1D текстура располагается/как до нее добраться? Тоже придется разбираться с этим вопросом.

#28
15:18, 26 июня 2018

Mr F не зря у меня плохие предчувствия были по поводу Юнити ! Ох не зря.
Спасибо за инфу.

#29
16:10, 26 июня 2018

Alerr
Текстура генерится движком и нигде не хранится. Ты можешь увидеть её в Frame Debugger'е юнити (ну или РендерДоке, Пиксе и прочих).
В шейдерах оно лежит в UnityDeferredLibrary.cginc и AutoLight.cginc, называется _LightTextureB0 и _LightTexture0 соответственно.
Я тут доделываю лайтмаппер и сделал там опции для твиканья шейдеров заодно:

+ Показать
Страницы: 1 2 3 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.