Использование функции abs может придать уверенность в том, что какая-либо функция будет возвращать только положительные значения. С ее помощью также можно вносить неоднородности в функции сглаживания. Как будет видно из раздела 12.5, это свойство функции abs будет использоваться для внесения в. функцию шума неоднородностей, создающих эффект, похожий на завихрение. Графическое представление функции abs приведено на рис. 5.2.
Рис. 5.2. Функция abs
Функция s i gn просто возвращает -1,0 или 1 в зависимости от знака п ереданно-го в нее числа. Получается бесконечная функция (рис. 5.3).
Рис. 5,3. Функция sign
Функция floor является бесконечной ступенчатой функцией (рис. 5.4). Дробная часть каждого входного значения отбрасывается, и выходное значение всегда является ближайшим к входному значению меньшим или равным ему целым.
Функция ceil выполняет почти то же самое, что и floor, за исключением того, что возвращаемое целое число тоже будет ближайшим ко входному значению, но большим или равным ему (рис. 5.5). Функция выглядит так же, как и показанная на рис. 5.4, но выходные значения сдвинуты на единицу. (Хотя функции cei 1 и f 1 оог всегда возвращают только целые числа, они определены таким образом, чтобы возвращать тип данных с плавающей запятой.)
Функция tract являет собой бесконечную функцию, где каждый сегмент наклонен (рис. 5.6).
Рис. 5.4. Функция floor
Рис. 5.5. Функция ceil
Рис. 5.6. Функция fract
Функция mod очень похожа на fract. Фактически, если разделить результат 1>х(а‘, у) на у, результат будет практически таким же, как результат fract. Един-..ственное отличие - период (рис. 5.7).
Рис. 5.7. Периодическая функция тос1(л; у)!у
Функция cl атр полезна для приведения какого-либо значения к заданному диапазону, Самый распространенный вариант использования: clamp(x. 0.0. 1.0): где переменная хбудет приведена к диапазону [0, 1 ]. Так как при выполнении этой функции выполняются два сравнения, ее следует использовать только в случае, когда неизвестно, в какую сторону от проверяемого диапазона уходит значение. Если это известно, можно использовать mi п или шах, и тогда будет выполняться только одно сравнение. Если известно, что значение будет не меньшее, чем 0, то функция rainCx. 1.0); наверняка будет выполняться быстрее и потребует меньше машинных ресурсов, чем clamp(x. 0.0. 1.0): так как нет смысла проверять, что полученное значение меньше нуля. Не нужно вызывать функцию cl amp для значений цвета и глубины фрагментного шейдера, так как это выполняется автоматически после завершения шейдера.
Функции mln, max, clamp показаны на рис. 5.8-5.10 соответственно. Функция mi п(х, у) имеет наклон при х, меньшем у, и является прямой горизонтальной линией при х, большем у. Эта функция часто используется для ограничения окончательного результата, например, чтобы гарантировать, что вычисленный результат никогда не превысит 1,0.
Рис. 5.8. Функция min
Функция maxf*. у) выглядит как прямая линия при х меньшем,, чем у, и как наклонная при х, большем у. Эта функция, как и mi n, часто используется для ограничения окончательного результата, например, чтобы гарантировать, что вычисленный результат никогда не будет меньше 0.