Тон мэппер что это
Camera- and Exposure Effects
Tone Mapping
When rendering physical light levels one runs into the problem of managing the HDRI output of the real physics vs. the limited dynamic range of computer displays. This was discussed in more detail on page Gamma.
There are numerous shaders and algorithms for doing «tone mapping» (this is a very active area of research within the CG industry), and the architectural library provides two: One very simple shader that simply adds a knee compression to «squash» over-brights into a manageable range, and a more complex «photographic» version that converts real photometric luminances with the help of parameters found on a normal camera into an image.
These shaders can be applied either as a lens shaders (which will tone map the image «on the fly» as it is being rendered) or as output shaders (will tone map the image as a post process).
Also, both of the supplied tone mappers include a gamma term. It is important to know if one is already applying a gamma correction elsewhere in the imaging pipeline (in an image viewer, in compositing, etc.), and if so, set it to 1.0 in these shaders. If one is not applying gamma correction anywhere but simply displaying the image directly on screen with a viewer that does not apply it’s own gamma, one should most likely use the gamma in these shaders, set to a value between 1.8 and 2.4.
The «Simple» Tone Mapper
mia_exposure_simple
That’s the theory. What is the practical use of these parameters?
Changing pedestal equates to tweaking the «black level». A positive value will add some light so even the blackest black will become slightly gray. A negative value will subtract some light and allows «crushing the blacks» for a more contrasty artistic effect.
gain is the «brightness knob». This is the main point where the high dynamic range values are converted to low dynamic range values. For example: if one knows the approximate range of color intensities goes between 0 and 10, this value should then be approximately 0.1 to get this range into the desired 0-1 range.
However, the whole point of tone mapping is not to blindly linearly scale the range down. Simply setting it to 0.1 most likely yields a dark and boring image. A much more likely value is 0.15 or even 0.2. But a value of 0.2 will map our 0-to-10 range to 0 to 2. what to do about that stuff above 1.0?
That’s where the compression comes in. The knee level is the point where the over-brights begin to be «squashed». Since this is applied after the gain, it should be in the range of 0.0 to 1.0. A good useful range is 0.5 to 0.75.
Assume we set it to 0.75. This means any color that (after having pedestal added and multiplied by gain) that comes out above 0.75 will be «compressed». If compression is 0.0 there is no compression. At a compression value of 5.0 the squashing is fairly strong.
Finally, the resulting «squashed» color is gamma-corrected for the output device (computer screen etc.)
The use_preview and preview parameters are used to make the process of tweaking the tone mapper a little bit more «interactive».
The «Photographic» Tone Mapper
mia_exposure_photographic
The photographic tonemapper converts actual pixel luminances (in candela per square meter) into image pixels as seen by a camera, applying camera-related parmeters (like f-stops and shutter times) for the exposure, as well as applying tonemapping that emulates film- and camera-like effects.
If the film_iso parameter is nonzero, the «`Photographic» mode is used, and if it is zero, the «Arbitrary» mode is chosen.
In «Photographic mode» (nonzero film_iso) cm2_factor is the conversion factor between pixel values and candela per square meter. This is discussed more in detail below.
In «Arbitrary» mode, cm2_factor is simply the multiplier applied to scale rendered pixel values to screen pixels. This is analogous to the gain parameter of mia_exposure_simple.
whitepoint is a color that will be mapped to «white» on output, i.e. an incoming color of this hue/saturation will be mapped to grayscale, but its intensity will remain unchanged.
film_iso should be the ISO number of the film, also known as «film speed». As mentioned above, if this is zero, the «Arbitrary» mode is enabled, and all color scaling is then strictly defined by the value of cm2_factor.
camera_shutter is the camera shutter time expressed as fractional seconds, i.e. the value 100 means a camera shutter of 1/100. This value has no effect in «Arbitrary» mode.
The parameters burn_highlights and crush_blacks guide the actual «tone mapping» of the image, i.e. exactly how the high dynamic range imagery is adapted to fit into the black-to-white range of a display device.
If burn_highlights is 1 and crush_blacks is zero, the transfer is linear, i.e. the shader behaves like a simple linear intensity scaler only.
burn_highlights can be considered the parameter defining how much «over exposure» is allowed. As it is decreased from 1 towards 0, high intensities will be more and more «compressed» to lower intensities. When it is 0, the compression curve is asymptotic, i.e. an infinite input value maps to white output value, i.e. over-exposure is no longer possible. A good default value is 0.5.
When the upper part of the dynamic range becomes compressed it naturally loses some of it’s former contrast, and one often desire to regain some «punch» in the image by using the crush_blacks parameter. When 0, the lower intensity range is linear, but when raised towards 1, a strong «toe» region is added to the transfer curve so that low intensities gets pushed more towards black, but in a gentle (soft) fashion.
Compressing bright color components inherently moves them towards a less saturated color. Sometimes, very strong compressions can make the image in an unappealingly de-saturated state. The saturation parameter allows an artistic control over the final image saturation. 1.0 is the standard «unmodified» saturation, higher increases and lower decreases saturation.
The gamma parameter applies a display gamma correction. Be careful not to apply gamma twice in the image pipeline. This is discussed in more detail on page Gamma.
The side_channel and side_channel_mode is intended for OEM integrations of the shader, to support «interactive» tweaking as well as for the case where one wants to insert an output shader prior to the conversion to «display pixel values».
This is accomplished by applying two copies of the shader, one as lens shader, the other as output shader. The two shaders communicate via the «side channel», which is a separate floating point frame buffer that needs to be set up prior to rendering.
One may wonder, if one wants to apply the tone mapping as a post process, why not skip applying the lens shader completely? The answer is twofold: First, by applying the lens shader (even though it’s output is never used), one can see something while rendering, which is always helpful. Second, the mental ray over-sampling is guided by the pixels in the main frame buffer. If these are left in full dynamic range, mental ray may needlessly shoot thousands of extra samples in areas of «high contrast» that will all be tone mapped down to white in the final stage.
The use_preview and preview work exactly like in the mia_exposure_simple shader described above.
Examples
Lets walk through a practical example of tuning the photographic tone mapper. We have a scene showing both an indoor and outdoor area, using the sun and sky, mia_material, and a portal light in the window. The units are set up such that the raw pixels are in candela per square meter.
The raw render, with no tone mapping, looks something like this:
This is the typical look of a Gamma=1 un-tonemapped image. Bright areas blow out in a very unpleasing way, shadows are unrealistically harsh and dark, and the colors are extremely over-saturated.
Applying mia_exposure_photographic with the following settings:
. gives the following image as a result 4 :
The settings we used abide by the «Sunny 16» rule in photography; for an aperture of f/16, setting the shutter speed (in fractional seconds) equal to the film speed (as an ISO number) generates a «good» exposure for an outdoor sunny scene. As we can see, indeed, the outdoor area looks fine, but the indoor area is clearly underexposed.
In photography, the «film speed» (the ISO value), the aperture (f_number) and shutter time all interact to define the actual exposure of the camera. Hence, to modify the exposure you could modify either for the «same» result. For example, to make the image half as bright, we could halve the shutter time, halve the ISO of our film, or change the aperture one «stop» (for example from f/16 to f/22, see page f-stops for more details).
In a real world camera there would be subtle differences between these different methods, but with this shader they are mathematically equivalent.
Clearly the f/4 image is the best choice for the indoor part, but now the outdoor area is extremely overexposed. This is because we have the burn_highlights parameter at 1.0, which does not perform any compression of highlights.
The left image subdues the overexposure some. The right image is using a burn_highlights of zero, which actually removes any over- exposure completely. However, this has the drawback of killing most contrast in the image, and while real film indeed performs a compression of the over-brights, no film exists that magically removes all overexposure. Hence, it is suggested to keep burn_highlights small, yet non-zero. In our example we pick the 0.5 value.
Real cameras have a falloff near the edges of the image known as «vignetting», which is supported in this shader by using the parameter of the same name:
The image on the right is interesting in that it «helps» our overexposed outdoors by the fact that it happens to be on the edge of the image and is hence attenuated by the vignetting. However, the left edge turns out too dark.
We will try a middle-of-the road version using a vignetting of 6 and we modify the burn_highlights to 0.25 and get this image:
This image is nice, but it really lacks that feel of «contrast». To help this we play with the crush_shadows parameter:
The crush_shadows parameter deepens the lower end of the intensity curve, and we get some very nice contrast. However, since this image is already near the «too dark» end of the spectrum, it tends to show an effect of darkening the entire image a bit.
This can be compensated by changing the exposure. Lets try a couple of different shutter values, and prevent overexposure by further lowering our burn_highlights value:
The final image is pretty good. However, since so much highlight compression is going on, we have lost a lot of color saturation by now. Lets try to finalize this by compensating:
Now we have some color back, the image is fairly well balanced. We still see something exists outdoors. This is probably the best we can do that is still physically correct.
However, remember we were using the portal lights for the window? These have a non-physical «transparency» mode. This mode is intended to solve exactly this issue. Even though the result we have so far is «correct», many people intuitively expect to see the outdoor scene much more clearly. Since our eyes does such a magnificent job at compensating for the huge dynamic range difference between the sunlit outdoors and the much darker indoors, we expect our computers to magically do the same. Using the transparency feature of the portal lights, this can be achieved visually, without actually changing the actual intensities of any light going into the room:
Now the objects outdoors are visible, while maintaining the contrast indoors. The light level indoors hasn’t changed and still follows the real world values (unlike if we had put actual dark glass into the window, which would have attenuated the incoming light as well).
Now this is a mid day scene. What if we change the time of day and put the sun lower on the horizon? The scene will be much darker, and we can compensate by changing the exposure:
Keeping the same settings (left) with the new sun angle makes a very dark image. On the right, all we changed was the shutter time to 2 (half a second). This image has a bit of a yellow cast due to the reddish sunlight, as well as the yellowish incandescent lighting. To compensate, we set the white-point to a yellowish color:
The remaining issue is the overexposure around the lamp (although it would be there in a real photograph), so we make the final image with burn_highlights set to a very low value, yet keep it nonzero to maintain a little bit of «punch»:
In conclusion: Photography-related parameters help users with experience in photography make good judgements on suitable values. The intuitive «look» parameters allow further adjustment of the image for a visually pleasing result.
Depth of Field / Bokeh
«Bokeh» is a Japanese term meaning «blur», that is often used to refer to the perceived «look» of out-of-focus regions in a photograph. The term «Depth of Field» (henceforth abbreviated DOF) does in actuality not describe the blur itself, but the «depth» of the region that is in focus. However, it is common parlance to talk about «DOF» while refering to the blur itself.
This shader is very similar to the physical_lens_dof in the physics library, but with more control on the actual appearance and quality of the blur.
on enables the shader.
plane is the distance to the focal plane from the camera, i.e. a point at this distance from the camera is completely in focus.
samples defines how many rays are shot. Fewer is faster but grainier, more is slower but smoother:
When bias is 1.0, the circle of confusion is sampled as a uniform disk. Lower values push the sample probability towards the center, creating a «softer» looking DOF effect with a more «misty» look. Higher values push the sample probability towards the edge, creating a «harder» looking DOF where bright spots actually resolve as small circles.
The blade_count defines how many «edges» the «circle» of confusion has. A zero value makes it a perfect circle. One can also set the angle with the blade_angle parameter, which is expressed such that 0.0 is zero degrees and 1.0 is 360 degrees.
The use_bokeh parameter enables the user of a specific bokeh map. When this parameter is used, the parameters bias, blade_count and blade_angle have no effect. The map defines the shape of the DOF filter kernel, so a filled white circle on a black background is equivalent to the standard blur. Generally, one need more samples to accurately «resolve» a custom bokeh map than the built-in bokeh shape, which has an optimal sampling distribution.
With bias at 1.0, samples at 4, blade_count at 0 and use_bokeh off, this shader renders an identical image to the old physical_lens_dof shader.
Свой mapper или немного про ExpressionTrees
Сегодня мы поговорим про то, как написать свой AutoMapper. Да, мне бы очень хотелось рассказать вам об этом, но я не смогу. Дело в том, что подобные решения очень большие, имеют историю проб и ошибок, а также прошли долгий путь применения. Я лишь могу дать понимание того, как это работает, дать отправную точку для тех, кто хотел бы разобраться с самим механизмом работы «мапперов». Можно даже сказать, что мы напишем свой велосипед.
Отказ от ответственности
Я ещё раз напоминаю: мы напишем примитивный mapper. Если вам вдруг вздумается его доработать и использовать в проде — не делайте этого. Возьмите готовое решение, которое знает стек проблем этой предметной области и уже умеет их решать. Есть несколько более-менее весомых причинам писать и использовать свой вело-mapper:
Что называют словом «mapper»?
Это подсистема, которая отвечает за то, чтобы взять некий объект и преобразовать (скопировать его значения) его в другой. Типичная задача: преобразовать DTO в объект бизнес слоя. Самый примитивный mapper «бежит» по свойствам (property) источника данных и сопоставляет их со свойствами типа данных, который будет на выходе. После сопоставления происходит извлечение значений из источника и их запись в объект, который будет результатом преобразования. Где-то по пути, скорее всего, нужно будет ещё создать этот самый «результат».
Для потребителя mapper — это сервис, который предоставляет следующий интерфейс:
Подчеркиваю: это наиболее примитивный интерфейс, который, с моей точки зрения, удобен для объяснения. В реальности мы, скорее всего, будем иметь дело с более конкретным маппером (IMapper ) или с более общим фасадом (IMapper), который сам подберет конкретный mapper под заданные типы объектов входа-выхода.
Наивная реализация
Ремарка: даже наивная реализация mapper’a требует элементарных знаний в области Reflection и ExpressionTrees. Если вы ещё не прошли по ссылкам или ничего не слышали об этих технологиях — сделайте это, прочтите. Обещаю, мир уже никогда не будет прежним.
Впрочем, мы с вами пишем свой mapper. Для начала давайте получим все свойства (PropertyInfo) того типа данных, который будет на выходе (далее я буду называть его TOut). Это сделать достаточно просто: тип мы знаем, так как пишем имплементацию generic-класса, параметризированного типом TOut. Далее, используя экземпляр класса Type, мы получаем все его свойства.
При получении свойств я опускаю особенности. Например, некоторые из них могут быть без setter-функции, некоторые могут быть помечены аттрибутом как игнорируемые, некоторые могут быть со специальным доступом. Мы рассматриваем самый простой вариант.
Идём далее. Было бы неплохо уметь создавать экземпляр типа TOut, то есть того самого объекта, в который мы «мапим» входящий объект. В C# это можно сделать несколькими способами. Например, мы можем сделать так: System.Activator.CreateInstance(). Или даже просто new TOut(), но для этого вам нужно создать ограничение для TOut, чего в обобщенном интерфейсе делать не хотелось бы. Впрочем, мы с вами что-то знаем об ExpressionTrees, а значит можем сделать вот так:
Почему именно так? Потому что мы знаем, что экземпляр класса Type может дать информацию о том, какие у него есть конструкторы — это весьма удобно для случаев, когда мы решим развить свой mapper настолько, что будем передавать в конструктор какие-либо данные. Также, мы ещё немного узнали про ExpressionTrees, а именно — они позволяют налету создать и скомпилировать код, который потом можно будет многократно использовать. В данном случае это функция, которая на самом деле выглядит как () => new TOut().
Теперь нужно написать основной метод mapper’a, который будет копировать значения. Мы пойдем по самому простому пути: идём по свойствам объекта, который пришёл к нам на вход, и ищем среди свойств исходящего объекта свойство с таким же названием. Если нашли — копируем, если нет — идём дальше.
Таким образом у нас полностью сформировался класс BasicMapper. С его тестами можно ознакомиться вот тут. Обратите внимание, что источником может быть как объект какого-то конкретного типа, так и анонимный объект.
Производительность и boxing
Reflection отличная, но медленная штука. Более того, её частое использование увеличивает memory traffic, а значит нагружает GC, а значит ещё больше замедляет работу приложения. Например, только что мы использовали методы PropertyInfo.SetValue и PropertyInfo.GetValue. Метод GetValue возвращает object, в которой завернуто (boxing) некое значение. Это значит, что мы получили аллокацию на пустом месте.
Mapper’ы обычно находятся там, где нужно превратить один объект в другой… Нет, не один, а множество объектов. Например, когда мы забираем что-то из базы данных. В этом месте хотелось бы видеть нормальную производительность и не терять память на элементарной операции.
Компилируемый mapper
На самом деле, всё относительно просто: мы уже делали new с помощью Expression.New(ConstructorInfo). Наверное вы заметили, что статический метод New называется точно так же, как и оператор. Дело в том, что почти у всего синтаксиса C# есть отражение в виде статических методов класса Expression. Если чего-то нет, то это значит, что вы ищите т.н. «синтаксический сахар».
Вот несколько операций, которые мы будем использовать в нашем mapper’e:
К сожалению, код получается не очень компактный, поэтому предлагаю сразу взглянуть на имплементацию CompiledMapper. Я вынес сюда лишь узловые моменты.
Для начала мы создаем объектное представление параметра нашей функции. Так как она принимает на вход object, то и параметром будет объект типа object.
Далее мы создаем две переменные и список Expression, в который будем последовательно складывать выражения присваивания. Порядок важен, ведь именно так команды будут выполнены, когда мы вызовем скомпилированный метод. Например, мы не можем присвоить значение переменной, которая ещё не объявлена.
Далее мы точно также, как и в случае с наивной имплементацией, идём по списку свойств типов и пытаемся их сопоставить по имени. Однако, вместо того, чтобы немедленно присваивать значения — мы создаем выражения извлечения значений и присваивания значений для каждого сопоставленного свойства.
Важный момент: после того, как мы создали все операции присваивания нам нужно вернуть результат из функции. Для этого последним выражением в списке должно быть Expression, содержащее экземпляр класса, который мы создали. Я оставил комментарий рядом с этой строчкой. Почему поведение, соответствующее ключевому слову return в ExpressionTree выглядит именно так? Боюсь, что это отдельная тема. Сейчас я предлагаю это просто запомнить.
Ну и в самом конце мы должны скомпилировать все выражения, которые мы построили. Что нам тут интересно? Переменная body содержит «тело» функции. У «обычных функций» ведь есть тело, верно? Ну, которое мы заключаем в фигурные скобки. Так вот, Expression.Block — это именно оно. Так как фигурные скобки — это ещё и область видимости, то мы должны передать туда переменные, которые там будут использоваться — в нашем случае sourceInstance и outInstance.
Почему не будет boxing? Потому что скомпилированный ExpressionTree это настоящий IL и для runtime он выглядит также (почти), как и ваш код. Почему «скомпилированный mapper» работает быстрее? Снова: потому что это просто обычный IL. Кстати, скорость мы можем легко подтвердить с помощью библиотеки BenchmarkDotNet, а сам бенчмарк можно посмотреть тут.
Method | Mean | Error | StdDev | Ratio | Allocated |
---|---|---|---|---|---|
AutoMapper | 1,291.6 us | 3.3173 us | 3.1030 us | 1.00 | 312.5 KB |
Velo_BasicMapper | 11,987.0 us | 33.8389 us | 28.2570 us | 9.28 | 3437.5 KB |
Velo_CompiledMapper | 341.3 us | 2.8230 us | 2.6407 us | 0.26 | 312.5 KB |
В колонке Ratio «скомпилированный mapper» (CompiledMapper) показал очень неплохой результат, даже по сравнению с AutoMapper (он baseline, т.е. 1). Впрочем, давайте не будем радоваться: AutoMapper обладает значительно большими возможностями по сравнению с нашим велосипедом. Этой табличкой я лишь хотел показать, что ExpressionTrees значительно быстрее, чем «подход классического Reflection».
Резюме
А что mapper? Mapper — отличный пример, на котором всему этому можно научиться.
Алгоритмы тональной компрессии в PhotoEngine
1. Auto Tone Mapper (автоматическая тональная компрессия). Опция Auto предусматривает всего один ползунок. Смещение ползунка вправо изменяет изображение от естественного до сюрреалистического.
2. Local Tone Mapper (локальная тональная компрессия). Это опция по умолчанию, и в большинстве случаев она обеспечивает вас достаточным числом регуляторов.
ТМ Strength. Контролирует общую степень тональной компрессии. Чем больше значение, тем темнее становятся света и светлее тени. Ползунок можно сместить в область отрицательных значений для затемнение теней и осветления светов, чтобы увеличить контрастность.
Detail Strength. Контролирует на изображении контрастность деталей или микроконтрастность. Сместите ползунок вправо для лучшего проявления фактуры и деталей.
Auto-Exposure.
В большинстве случаев PhotoEngine автоматически устанавливает наиболее точную экспозицию, так что поставьте метку в этом окне. Можно подкорректировать настройку ползунками Exposure и Fine Exposure.
Auto-Contrast. Как и в случае с настройкой Auto-Exposure, программа устанавливает оптимальную настройку контрастности, которую можно изменить ползунком Contrast.
Полезный совет: Не пытайтесь самостоятельно заменить разбитый дисплей или тачскрин своего смартфона. Хотите сэкономить – купите готовый дисплей в сборе и отнесите своему мастеру в сервис. Сервисные центры нередко завышают цены на комплектующие, а так вы им заплатите только за работу мастера.
3. Advanced Local Tone Mapper (прогрессивная локальная тональная компрессия).
Помимо настроек, аналогичных настройкам в алгоритме Local Tone Mapper, алгоритм Advanced Local Tone Mapper предлагает некоторые дополнительные настройки.
Detail Size. Определяет размер объектов, классифицируемых PhotoEngine как «детали». Чем меньше значение настройки, тем мельче объекты, идентифицируемые программой как детали.
Detail Threshold. Использует значения яркости, чтобы определять, какие объекты считать деталями изображения, а какие нет. Обе эти настройки полезны для уменьшения артефактов в виде ореолов.
Edge Sharpen. Еще одна настройка локализованной контрастности, способная помочь в уменьшении или контролировании артефактов, порой возникающих в местах с очень высокой контрастностью.
Panorama Mode. Отмечайте эту опцию, когда хотите создать круговую (360°) панораму.
Опция обеспечивает одинаковый цвет пикселей на соединяющихся краях снимков.
4. Global Tone Mapper (глобальная тональная компрессия). Наиболее эффективна для изображений с небольшим динамическим диапазоном, которые должны выглядеть реалистично.
Strength (сила воздействия). При ее увеличении восстанавливаются детали в областях светов.
Compression (сжатие). При ее увеличении восстанавливаются детали в тенях.
5. Natural HDR Mode (режим естественного HDR-изображения). Этот режим обеспечивает более естественный вид ваших фотографий. Программа использует сложные алгоритмы, делающие цвета, тона и контрастность натуральными.
6. Low Dynamic Tone (тона умеренного диапазона). Выставив настройки тональной компрессии, можно скорректировать экспозицию, яркость, насыщенность и контрастность изображения с умеренным тональным диапазоном, прежде чем сохранить его. При щелчке в окне Linear Raw действие любых ранее примененных к изображению кривых отменяется. Здесь можно корректировать баланс белого — предустановками из меню, ползунками Temperature и Tint или на цветовом колесе.
Photographic Print Toning (тонирование фотографических отпечатков). Очень эффективный инструмент для создания двухцветных (дуплексных) изображений или изображений, имитирующих химическое тонирование обычных фотографических отпечатков в традиционной пленочной фотографии. Левая сторона контролирует теневые области, правая сторона влияет на света. Горизонтальные ползунки определяют цветовую насыщенность, а цветовые колеса позволяют выбирать оттенки. Ползунок Mix в нижней части окна определяет, будет ли отдан приоритет областям теней или светов.
Настройки группы Advanced
В разделе Advanced окна настроек есть пять дополнительных инструментов, с помощью которых можно настроить окончательный вид изображения.
1. Brightness/Brightness (яркость/ яркость). Этот инструмент работает аналогично инструменту Curves (кривые) в Photoshop, позволяя корректировать яркость в конкретных тоновых областях изображения — тенях, средних тонах и светах. Верхний правый отрезок кривой воздействует на света, а нижний левый — на тени. Щелкните на кривую, чтобы добавить точки и перемещайте их, корректируя вид изображения. Можно также тянуть за стрелку касательной линии, чтобы изменять форму кривой (как при работе с кривыми Безье в Photoshop).
Saturation/Saturation (насыщенность/насыщенность). Действует во многом аналогично кривой яркости, но изменяет цветовую насыщенность изображения. Прямая линия отражает цветовую насыщенность оригинального изображения. Чтобы увеличить или уменьшить насыщенность в областях с низкой насыщенностью, смещайте нижнюю левую половину кривой вверх или вниз, а чтобы увеличить или уменьшить насыщенность в очень насыщенных областях, смещайте верхнюю правую секцию кривой вверх или вниз.
3. Hue/Saturation (оттенок/насыщенность). Контролирует насыщенность заданных цветов. Смещайте мишень вверх для увеличения насыщенности того или иного цвета или опускайте ее для обесцвечивания.
4. Hue/Luminance (оттенок/яркость). Контролирует яркость цветов.
5. Hue/Hue (оттенок/оттенок). Изменяет цветовые оттенки на противоположные.
Фотореалистичное изображение, созданное в программе PhotoEngine
Это фотореалистичное изображение зданий в Дубае было создано с помощью предустановки тональной компрессии Natural More Details. При этом был автоматически установлен режим Natural HDR Mode, чтобы получилось изображение с естественными цветами.
Конец очередного прекрасного дня.
Майкл Штейхнер
Photomatix Pro 3.1 настройки Details Enhancer
Strength: 100
Color Saturation: 79
Luminosity: 5
Light Smoothing: High
Microcontrast: 1
White Point: 0,029900
Black Point: 0,202350
Gamma: 1,214195
Temperature: 0
Saturation
Highlights: 0
Saturation Shadows: 0
Micro-smoothing: 2
Highlights Smoothing: 0
Shadows Smoothing: 71
Shadows Clipping: 0
На просторах Эверглейдс.
Флорида, США.
Майкл Штейхнер
Photomatix Pro 3.1 настройки Details Enhancer
Strength: 84
Color Saturation: 63
Luminosity: 4
Light Smoothing: High
Microcontrast: 3
White Point: 0,558550
Black Point: 0,334800
Gamma: 1,283426
Temperature: 2
Saturation Highlights: 0
Saturation Shadows: 0
Micro-smoothing: 2
Highlights Smoothing: 0
Shadows Smoothing: 0
Shadows Clipping: 0