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

Inverse smoothstep function

#0
16:45, 6 апр. 2018

Smoothstep однозначен на 0..1. Как найти его обратную функцию на этом интервале? Немогу догнать как избавиться от множественных иксов. Интересует вывод.


#1
17:53, 6 апр. 2018

В смысле? Smoothstep - это функция от 3-х переменных.

Следовательно, существует 3 обратных функции от переменных:
1) smoothstep_result, x, edge0
2) smoothstep_result, x, edge1
3) smoothstep_result, edge0, edge1

И еще несколько моментов. В следующих случаях невозможно найти точное обратные значения из-за clamp:
1) Когда x > edge1 для варианта 1.
2) Когда x < edge0 для варианта 2

И на все это накладывается изначальное ограничение функции: если edge0 ≥ edge1 - значение функции не определено, а значит и обратная для неё функция

#2
17:56, 6 апр. 2018

solve y == x * x * (3.0 - 2.0 * x) for x

Deamon
https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/smoothstep.xhtml

#3
17:56, 6 апр. 2018

Deamon
Изображение

#4
17:58, 6 апр. 2018

Delfigamer
А теперь расскажи как все это получилось. Смогешь? Подставить туда формулу я и сам могу. Написал же специально - интересует вывод

#5
18:01, 6 апр. 2018

Андрей5000
> А теперь расскажи как все это получилось. Смогешь? Подставить туда формулу я и
> сам могу
https://en.wikipedia.org/wiki/Cubic_function

А на самом деле, алгебраическое решение тебе, скорее всего, не понадобится. Ты же не собираешься вычислять по десять корней в шейдере?
Лучше подобрать численно полином какой-нибудь схожей степени и считать через него.

#6
18:06, 6 апр. 2018

Delfigamer
И где там про обратную функцию? Не, я вычислять в рилтайме не собираюсь. Это чисто ради интереса

#7
18:49, 6 апр. 2018

Андрей5000
Издеваешься?

Задача звучит так.

S(x1) = y1.

y1 - дано. Используя формулу из #3 найти значение x1.

Решение:

y1 = -2*x^3 + 3*x^2
-2*x^3 + 3*x^2 - y1 = 0  | / (-2)
x^3 - 1.5*x^2 + (y1/2) = 0

А дальше берем любую метод из https://ru.wikipedia.org/wiki/%D0%9A%D1%83%D0%B1%D0%B8%D1%87%D0%B… D%D0%B8%D1%8F и решаем это уравнение

#8
19:17, 6 апр. 2018

Delfigamer
Ну, ты интересное пропустил.
Который из этих корней переводит [0;1]->[0; 1]?
Ответ: 3-й, который
Изображение
Естественно, корни (что квадратные, что кубические) в формуле комплексные.
Строго говоря комплексные функции z1/n - n-значные. Формула выше - это для конкретного выбора одного из значений.

Тригонометрическая запись решения будет, видимо, компактнее (и, подозреваю, в ту же скорость).

> Лучше подобрать численно полином какой-нибудь схожей степени и считать через него.
Вот как раз для вещей вида x1/n полином - стрёмно.

#9
19:39, 6 апр. 2018

Собственно.
> Тригонометрическая запись
https://www.patreon.com/posts/inverse-12584585

#10
22:10, 6 апр. 2018

Всем спасибо. Теперь все ясно как день

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

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