Войти
UnityФорумОбщее

Не получается использовать HDR Color в UI.Image

#0
12:03, 28 авг 2021

Привет всем. Нужно сделать чтобы в инспекторе UI.Image вместо Color был [HDR] Color. Сделал:

public class HDR_Image : Image {

    [ColorUsage ( true, true )]
    [SerializeField] private Color m_Color = Color.white;
}
00 | Не получается использовать HDR Color в UI.Image

В шейдере прописал [HDR] Color и шейдер стал выдавать HDR-цвета. Здесь все нормально.

Но если менять color в инспекторе (скрипт HDR_Image), то цвет меняется, но c HDR какие-то баги.
Ковырял исходники Graphics и UI.Image, но так и не понял почему HDR не работает. Не смог найти в каком месте/как передается цвет в материал.

#1
12:15, 28 авг 2021

Для HDR цвет следует задавать через Vector4, а так он будет иногда ерунду делать.

Смотрите в документации или подсказках соответствующее свойство

#2
12:17, 28 авг 2021

MSA2
> Для HDR цвет следует задавать через Vector4, а так он [b]будет иногда ерунду делать[/b].
У меня всегда все работало без Vector4. В каких случаях ернуда была?

Мне бы узнать как передается цвет в материал, где осуществляется эта передача ?

> Смотрите в документации или подсказках соответствующее свойство
Так да, смотрел везде. даже в исходниках. За цвет отвечает это:

[SerializeField] private Color m_Color = Color.white;

Находится в Graphics. Но если добавить : [ColorUsage ( true, true )], то что-то меняется, но работает криво

#3
14:28, 28 авг 2021

Не помню уже что там и как не работало. Смысл заключался в некорректных преобразованиях из одного цветового пространства в другое, которое надо делать вручную, само оно не преобразуется.

Технически мне нужна интенсивность свыше 1, чтобы при наложении блума на кадр источник света давал соответствующий эффект:

2021-08-28_142043 | Не получается использовать HDR Color в UI.Image

Цвет я задаю в RGB-пространстве, мне главное интенсивность контролировать, поэтому в инспекторе не стал ставить Color-box для HDR, использовал простой. Ну а скрипт сам преобразует параметры в  HDR:

2021-08-28_141611 | Не получается использовать HDR Color в UI.Image

Не знаю поможет ли это в вашем случае - задачи  разные

#4
15:43, 28 авг 2021

Alerr
> Мне бы узнать как передается цвет в материал, где осуществляется эта передача ?
Передача осуществляется через цвет вершин (vertex color), а он в Unity, по всей видимости, ограничивается диапазоном [0,1]. Так что надо объявить в шейдере отдельное свойство "_EmissionMultiplier" и задавать его скриптом исходя из интенсивности HDR цвета, а потом домножать на цвет вершины. При этом свойство m_Color должно оставаться не-HDR, иначе значение обрежется и результат будет неправильным.

UnityФорумОбщее

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