DirectX правильную картину дает. Физически 0.5 для нас должно быть в 4 раза ярче
g-cont
> Может это мэджик куб высветляет картинку?
Он частично высветляет в GammaSpace, но его заметно только по границам высветления (то есть видно ребра в directX). В linearSpace его вообще не видно.
Cейчас провожу генеральную уборку, все перевожу в sRGB. В одной сцене переводил текстуры в sRGB в режиме PlayMode, как только перевел последнюю картинку, которая имелась в сцене, так сразу вся сцена изменила цвет.
IBets
> DirectX правильную картину дает. Физически 0.5 для нас должно быть в 4 раза ярче
Похоже что да.
Выставил sRGB на UI и теперь он смотрится лучше, ну во всяком случае нельзя сказать что над ним работал слепой :)
Но лучше, это не так как надо. Все же OpenGL выдает более темную картинку.
1) Попробую еще сменить DirectX на OpenGL на компе с Windows, не знаю что это даст, но может что-то и даст.
2) Буду еще гуглить возможную причину проблемы, неужели нужно руками делать гамма-коррекцию?
Alerr
glEnable(GL_FRAMEBUFFER_SRGB) посмотри в RenderDoc вызывается ли у финального FrameBuffer-a
Там по факту должно отображать в каком формате FrameBuffer
IBets
> glEnable(GL_FRAMEBUFFER_SRGB) посмотри в RenderDoc вызывается ли у финального FrameBuffer-a
> Там по факту должно отображать в каком формате FrameBuffer
Пока все пытаюсь поставить RenderDoc на линукс.
Собрал билд, заметил что картинка в билде с OpenGL имеет нормальную яркость, такую же как и на directX.
На это можно было бы и закрыть глаза, но так как проект собирается в редакторе у которого GraphicAPI только OpenGL, то приходится выкручиваться.
Alerr
Забей на Linux. Они в паровозик в консоле играют. Им этого за глаза
IBets
> Забей на Linux. Они в паровозик в консоле играют. Им этого за глаза
А с OSX как быть, у них тоже OpenGL.
Alerr
Там Metal не поддерживается разве?
IBets
> Там Metal не поддерживается разве?
Поддерживается, советуете с ним связываться?
Alerr
Ну Apple недавно объявила OpenGL legacy
Мне все же удалось исправить эту ошибку.
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)?
Alerr
> Интересно, из-за чего свет мог падать такими "зонами" с резкой сменой
> интенсивности:
Проблема в юнити. У них затухание от источников света запихано в маленькую 1D-текстурку, которая при том 8 бит. Эта текстурка воспринимается как линейная, и её точности не хватает. Решить можно повесив разработчиков, переписав все встроенные шейдеры нахрен, что я для себя и сделал. Кстати, сама кривая этого затухания у них тоже от балды (и смешно говорить о каком-то PBR'е в юнити после этого).
Mr F
> Решить можно [s]повесив разработчиков[/s], переписав все встроенные шейдеры нахрен, что я для себя и сделал. Кстати, сама кривая этого затухания у них тоже от балды (и смешно
> говорить о каком-то PBR'е в юнити после этого).
Да уж, придется еще и с этим разбираться. Не подскажете статью где что-то подобное уже делали или хотябы где эта 1D текстура располагается/как до нее добраться? Тоже придется разбираться с этим вопросом.
Mr F не зря у меня плохие предчувствия были по поводу Юнити ! Ох не зря.
Спасибо за инфу.
Alerr
Текстура генерится движком и нигде не хранится. Ты можешь увидеть её в Frame Debugger'е юнити (ну или РендерДоке, Пиксе и прочих).
В шейдерах оно лежит в UnityDeferredLibrary.cginc и AutoLight.cginc, называется _LightTextureB0 и _LightTexture0 соответственно.
Я тут доделываю лайтмаппер и сделал там опции для твиканья шейдеров заодно:
Тема в архиве.