심플렉스 노이즈

심플렉스 노이즈()는 펄린 노이즈("고전적" 노이즈)와 유사하지만 더 높은 차원에서 등방성 결함이 적고 계산 오버헤드가 낮은 n차원 기울기 노이즈 함수의 결과이다. 켄 펄린은 2001년에Ken Perlin, Noise hardware. In Real-Time Shading SIGGRAPH Course Notes (2001), Olano M., (Ed.). (pdf) 그의 고전적인 노이즈 함수의 한계, 특히 고차원에서의 한계를 해결하기 위해 이 알고리즘을 설계했다.

펄린 노이즈에 대한 심플렉스 노이즈의 장점:
 심플렉스 노이즈는 계산 복잡성이 낮고 곱셈 횟수가 적다.
 심플렉스 노이즈는 훨씬 적은 계산 비용으로 더 높은 차원(4D, 5D)으로 확장된다. 복잡도는 고전적 노이즈의  대신  차원에 대해 이다.Ken Perlin, Making noise. Based on a talk presented at GDCHardcore (Dec 9, 1999). (url) 
 심플렉스 노이즈는 눈에 띄는 방향성 아티팩트가 없다(등방성적으로 보이지만, 다른 차원에서 생성된 노이즈는 시각적으로 구별된다(예: 2D 노이즈는 3D 노이즈의 2D 슬라이스와 다른 모양을 가지며, 더 높은 차원에서는 점점 더 나빠 보인다)).
 심플렉스 노이즈는 잘 정의되고 연속적인 기울기(거의)를 가지며, 이는 상당히 저렴하게 계산할 수 있다.
 심플렉스 노이즈는 하드웨어로 구현하기 쉽다.

펄린 노이즈가 주변 하이퍼그리드 끝점(예: 2D에서 북동, 북서, 남동, 남서)의 기울기 사이를 보간하는 반면, 심플렉스 노이즈는 공간을 단체(즉, 차원 삼각형)로 나눈다. 이는 데이터 포인트 수를 줄인다. 차원 하이퍼큐브는 개의 꼭짓점을 가지지만, 차원 단체는 개의 꼭짓점만 가진다. 2D에서는 삼각형이 정삼각형이지만, 더 높은 차원에서는 단체는 대략적으로만 정규적이다. 예를 들어, 함수의 3D 경우 타일링은 사각이등변사면체 허니콤의 방향이다.

심플렉스 노이즈는 일반적으로 2, 3, 4, 또는 5차원에서 노이즈를 계산하는 컴퓨터 그래픽스 애플리케이션에 유용하다. 더 높은 차원에서는 n-단체 모서리 주변의 n-구체가 충분히 조밀하게 채워지지 않아 함수의 지지대가 줄어들고 공간의 많은 부분에서 0이 된다.

 알고리즘 세부 사항 
심플렉스 노이즈는 일반적으로 2차원, 3차원 또는 4차원 함수로 구현되지만, 임의의 수의 차원에 대해 정의될 수 있다. 구현은 일반적으로 좌표 기울이기, 단체 분할, 기울기 선택, 커널 합산의 네 단계를 포함한다.

 좌표 기울이기 
입력 좌표는 다음 공식을 사용하여 변환된다.



여기서


이는 좌표를 A 격자에 배치하는 효과를 가지며, 이는 본질적으로 점 (0, 0, ..., 0)과 (1, 1, ..., 1) 사이의 거리가 점 (0, 0, ..., 0)과 (1, 0, ..., 0) 사이의 거리와 같아질 때까지 주 대각선을 따라 압축된 초입방 벌집의 꼭짓점 배치이다.

결과 좌표 (x, y, ...)는 입력 점이 놓여있는 기울어진 단위 하이퍼큐브 셀 (xb = floor(x), yb = floor(y), ...)과 그 내부 좌표 (xi = x − xb, yi = y − yb, ...)를 결정하는 데 사용된다.

 단체 분할 
위가 결정되면, 내부 좌표 (xi, yi, ...)의 값이 내림차순으로 정렬되어 점이 놓여있는 기울어진 슐래플리 직사면체 단체를 결정한다. 그런 다음 결과 단체는 (0, 0, ..., 0)에서 (1, 1, ..., 1)로의 정렬된 모서리 이동에 해당하는 꼭짓점으로 구성되며, n!가지 가능성이 있으며, 각 가능성은 좌표의 단일 순열에 해당한다. 다시 말해, 0 좌표에서 시작하여 가장 큰 내부 좌표 값에 해당하는 값부터 시작하여 1을 연속적으로 추가하고 가장 작은 값으로 끝낸다.

예를 들어, 점 (0.4, 0.5, 0.3)은 꼭짓점 (0, 0, 0), (0, 1, 0), (1, 1, 0), (1, 1, 1)을 가진 단체 내부에 놓인다. yi 좌표가 가장 크므로 먼저 추가된다. 그 다음 xi 좌표가 추가되고 마지막으로 zi가 추가된다.

 기울기 선택 
각 단체 꼭짓점은 기울어진 하이퍼큐브의 기본 좌표에 다시 추가되고 유사 난수 기울기 방향으로 해시된다. 해시는 다양한 방법으로 구현될 수 있지만, 대부분 순열 테이블 또는 비트 조작 방식을 사용한다.

방향성 아티팩트를 최소화하기 위해 포함할 기울기 세트의 선택에 주의해야 한다.

 커널 합산 
단체의 n + 1개 꼭짓점 각각의 기여는 각 꼭짓점을 중심으로 하는 방사형 대칭 커널의 합산으로 고려된다. 먼저, 각 꼭짓점의 기울어지지 않은 좌표는 역 공식을 사용하여 결정된다.



여기서


이 점은 입력 좌표에서 빼서 기울어지지 않은 변위 벡터를 얻는다. 이 기울어지지 않은 변위 벡터는 두 가지 목적으로 사용된다.
 스칼라곱을 사용하여 외삽된 기울기 값을 계산한다.
 점까지의 제곱 거리인 d2를 결정한다.

거기서부터 각 꼭짓점의 합산된 커널 기여는 다음 표현식을 사용하여 결정된다.

여기서 r2는 일반적으로 0.5 또는 0.6으로 설정된다. 값 0.5는 불연속성이 없도록 보장하는 반면, 0.6은 불연속성이 눈에 띄지 않는 애플리케이션에서 시각적 품질을 향상시킬 수 있다. 켄 펄린의 원본 참조 구현에서는 0.6이 사용되었다.

 법적 지위 
텍스처 이미지 합성을 위한 3D 이상 구현 사용은 에 의해 보호되었으며, 이 특허는 2022년 1월 8일에 만료되었다.

 같이 보기 
 오픈심플렉스 노이즈
 등방성

 각주 

 외부 링크 
 스테판 구스타프손의 소스 코드가 포함된 짧은 기술 문서 (PDF)
 펄린의 애니메이션 "고무 시트" 심플렉스 노이즈 데모
 C++의 심플렉스 노이즈 또 다른 구현 (SimplexNoise1234)

분류:그래픽스