Кіріспе
n өлшемді шу функцияларына арналған конструкция Симплекс шуы Перлин шуымен салыстыратын n өлшемді шу функциясының нәтижесі ("классикалық" шуы), бірақ бағыттық артефактілері аз, жоғары өлшемдер мен төмен есептеу үстеме шығыны. Кен Перлин алгоритмді 2001 жылы өзінің классикалық шу функциясының, әсіресе жоғары өлшемдердегі шектеулерін шешу үшін жасады. Перлин шуына қарағанда симплекс шуының артықшылықтары: Симплекс шудың есептеу күрделілігі төмен және көбейтуді аз қажет етеді. Симплексті шудың масштабы жоғары өлшемдерге (4D, 5D) есептеу шығындары әлдеқайда аз: күрделілік классикалық шудың орнына өлшемдерге арналған. Симплексті шудың көрінетін бағыттағы артефактілері жоқ (көрнекі жағынан изотроптық), бірақ әр түрлі өлшемдер үшін шығарылған шу визуалды түрде ерекшеленеді (мысалы, 2D шу 3D шудың 2D кесінділерінен басқаша көрінеді және жоғары өлшемдер үшін барған сайын нашар көрінеді). Симплексті шудың барлық жерде (дәл) жақсы анықталған және үздіксіз градиенті бар, оны өте арзан есептеуге болады. Симплексті шуды аппараттық құралымда енгізу оңай. Классикалық шу гипержелілік шеткі нүктелердегі градиенттер арасында интерполяцияланады (яғни солтүстік-шығыс, солтүстік-батыс, оңтүстік-шығыс және оңтүстік-батыс 2D), ал симплекстік шу кеңістікті симпликаларға (яғни өлшемді үшбұрыштарға) бөледі. Бұл дерек нүктелерінің санын азайтады. Гиперкубтың бұрыштары болса, симплекстің бұрыштары болады. Үшбұрыштар 2D-де тең қабатты, бірақ жоғары өлшемдерде қарапайымдар шамамен тұрақты. Мысалы, функцияның 3D жағдайындағы плитка - бұл тетрагональды дисфеноидты бал арасының бағыты. Симплекстік шу компьютерлік графиканың қолданбаларында пайдалы, онда шу әдетте 2, 3, 4 немесе мүмкін 5 өлшемде есептеледі. Жоғары өлшемдер үшін n қарапайым бұрыштардың айналасындағы n сфералар тығыздықпен жеткілікті емес, бұл функцияның қолдауын азайтып, кең кеңістіктің үлкен бөліктерінде нөлге айналдырады.
Simplex noise is the result of an n dimensional noise function comparable to Perlin noise ("classic" noise) but with fewer directional artifacts, in higher dimensions, and a lower computational overhead. Ken Perlin designed the algorithm in 2001 to address the limitations of his classic noise function, especially in higher dimensions. The advantages of simplex noise over Perlin noise:
Simplex noise has lower computational complexity and requires fewer multiplications. Simplex noise scales to higher dimensions (4D, 5D) with much less computational cost: the complexity is for dimensions instead of the of classic noise. Simplex noise has no noticeable directional artifacts (is visually isotropic), though noise generated for different dimensions is visually distinct (e. g. 2D noise has a different look than 2D slices of 3D noise, and it looks increasingly worse for higher dimensions). Simplex noise has a well defined and continuous gradient (almost) everywhere that can be computed quite cheaply. Simplex noise is easy to implement in hardware. Whereas classical noise interpolates between the gradients at the surrounding hypergrid end points (i. e., northeast, northwest, southeast and southwest in 2D), simplex noise divides the space into simplices (i. e., dimensional triangles). This reduces the number of data points. While a hypercube in dimensions has corners, a simplex in dimensions has only corners. The triangles are equilateral in 2D, but in higher dimensions the simplices are only approximately regular. For example, the tiling in the 3D case of the function is an orientation of the tetragonal disphenoid honeycomb. Simplex noise is useful for computer graphics applications, where noise is usually computed over 2, 3, 4, or possibly 5 dimensions. For higher dimensions, n spheres around n simplex corners are not densely enough packed, reducing the support of the function and making it zero in large portions of space.
Алгоритмнің егжей-тегжейі
Симплексті шу әдетте екі, үш немесе төрт өлшемді функция ретінде жүзеге асырылады, бірақ кез келген өлшемдер үшін анықталуы мүмкін. Іске асыру әдетте төрт қадамды қамтиды: координаттық ауытқу, қарапайым бөлшектеу, градиент таңдау және өзекті қосу.
Қарапайым бөлшектеу
Жоғарыда көрсетілгендер анықталғаннан кейін ішкі координаттың (xi, yi, ) мәндері төмендеу тәртібімен сұрыпталады, бұл нүкте қай қисық Шлефли ортосхемасының қарапайымдығында екенін анықтау үшін. Одан кейін алынған симплекс (0, 0, , 0) -ден (1, 1, , 1) -ге дейінгі үзіліске сәйкес келетін ұштарынан тұрады, олардың саны n! ықтималдықтардың әрқайсысы координатаның бір ғана пермутациясына сәйкес келеді. Басқаша айтқанда, нөлдік координаттан бастаңыз және ең үлкен ішкі координаттың мәнінен бастап, ең кішісіне дейін жалғастыра отырып, бірін-бірі қосыңыз. Мысалы, (0,4, 0,5, 0,3) нүктесі (0, 0, 0), (0, 1, 0), (1, 1, 0), (1, 1, 1) ұштары бар симплекстің ішінде орналасады. yi координаты ең үлкені, сондықтан ол бірінші қосылады. Содан кейін xi координаты және ақырында zi.
Градиентті таңдау
Әрбір симплекс нүктесі қисық гиперкубтың негіз координатына қосылады және псевдо кездейсоқ градиент бағытына шағылады. Хэш көптеген жолдармен жүзеге асырылуы мүмкін, бірақ көбінесе пермутация кестесі немесе бит манипуляция схемасы қолданылады. Дирижабльді артефактілерді барынша азайту үшін градиенттер жиынтығын таңдағанда абай болу керек.
Құқықтық мәртебе
Егер алгоритм кез келген патенттік талапта сипатталған нақты әдістерді қолдана отырып іске асырылса, онда 3D және одан жоғары текстуралы бейне синтезі үшін қолдану 2022 жылдың 8 қаңтарында аяқталады.