Smoothstep

Smoothstep – rodzina sigmoidalnych funkcji powszechnie stosowanych w grafice komputerowej[1][2], silnikach gier wideo[3] i uczeniu maszynowym.
Wartość funkcja smoothstep zależy od argumentu x oraz dwóch parametrów: „lewej krawędzi” i „prawej krawędzi” (przy czym przyjmuje się, że lewa krawędź jest mniejsza od prawej). Argumentem x jest liczba rzeczywista. Funkcja zwraca 0, jeśli x jest mniejsze lub równe lewej krawędzi, oraz 1, jeśli x jest większe od lub równe prawej krawędzi. W przeciwnym razie funkcja dokonuje płynnej (ang. smooth) interpolacji, wykorzystując interpolację Hermite'a, i zwraca wartość z zakresu od 0 do 1. Nachylenie funkcji smoothstep wynosi zero na obu krawędziach. Dzięki temu idealnie nadaje się ona do tworzenia gładkich przejść między wartościami – można stosować ją do interpolacji kolejnych segmentów zamiast korzystać z bardziej złożonych lub kosztownych technik interpolacyjnych.
W GLSL smoothstep implementuje interpolację Hermite’a stopnia trzeciego , po uprzednim ograniczeniu (clamping) argumentu. Przy założeniu, że lewa krawędź to 0, a prawa krawędź to 1, wzór ma postać:
Poniżej przedstawiono zmodyfikowany przykład implementacji w języku C/C++ udostępniony przez firmę AMD [4] .
float smoothstep (float edge0, float edge1, float x) {
// Scale, and clamp x to 0..1 range
x = clamp((x - edge0) / (edge1 - edge0));
return x * x * (3.0f - 2.0f * x);
}
float clamp(float x, float lowerlimit = 0.0f, float upperlimit = 1.0f) {
if (x < lowerlimit) return lowerlimit;
if (x > upperlimit) return upperlimit;
return x;
}
Ogólna postać funkcji smoothstep (przy założeniu, że lewa krawędź to 0, a prawa krawędź ma wartość 1) to:
to funkcja zaciskająca (ang. clamping function)
Charakterystyczną krzywą sigmoidalną w kształcie litery S uzyskuje się za pomocą tylko dla dodatnich liczb całkowitych n. Stopień wielomianu wykorzystanego w funkcji wynosi 2n + 1. Dla n = 1 nachylenie (czyli pierwsza pochodna funkcji) jest równe zeru na lewej i prawej krawędzi (dla x = 0 i x = 1). Dla wyższych n, drugie i kolejne pochodne są równe zeru na krawędziach.
Przypisy
- ↑ Smoothstep at Microsoft Developer Network.
- ↑ GLSL Language Specification, Version 1.40.
- ↑ Unity game engine SmoothStep documentation.
- ↑ Natalya Tatarchuk: Advanced Real-Time Shader Techniques. 2003. s. 94. [dostęp 2022-04-16]. [zarchiwizowane z tego adresu (2021-05-30)].
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.