Cellular Noise
1996년 Steven Worley의 "A Cellular Texture Basis Function" 논문에 기술되었다.Celluar Noise는 돌, 물, 세포 같은 질감을 비슷하게 표현할 수 있다. 아래 이미지를 보면 좀더 쉽게 이해할 수 있다.
작성자: ospace114@empal.com, http://ospace.tistory.com/
알고리즘
알고리즘은 간단하다.
- 그리드 영역 내에 랜덤한 임의 점들이 분산되어 있다.
- 실행할 때 그리드의 모든 점들이 랜덤한 임의 점들과 거리를 추출한다.(이웃으로 제한하여 효율적 계산 가능)
- 이 거리들 중에서 가장 작은 값을 선택한다.
구현
function noise(pts, x, y) {
let min = 0.5;
for(let k=0; k<pts.length; ++k) {
let d = distance(pts[k][0], pts[k][1], x, y);
min = Math.min(min, d);
}
return min;
}
function distance(x0, y0, x1, y1) {
let dx = x1 - x0;
let dy = y1 - y0;
return Math.sqrt(dx*dx + dy*dy);
}
사용예
const width = 100;
const height = 100;
const pts = [[0.1, 0.2], [0.7, 0.3], [0.2, 0.7], [0.8, 0.7], [0.5, 0.5]];
for(let i=0; i<height; ++i) {
for(let j=0; j<width: ++j) {
const val = noise(pts, j/width, i/height);
console.log(j, ',', i, ':', val);
}
}
Demo
참고
[1] Patricio Gonzalez Vivo & Jen Lowe, Cellular Noise, https://thebookofshaders.com/12/, 2022/02/10
[2] Worley noise, https://en.wikipedia.org/wiki/Worley_noise
반응형
'6.수학과 알고리즘' 카테고리의 다른 글
나비에-스토크스(Navier-Stokes) 방정식 (0) | 2023.01.03 |
---|---|
랑그랑주 역학 (0) | 2022.12.28 |
[알고리즘] Perlin Noise (0) | 2022.01.24 |
hash 함수 기본 (0) | 2012.01.09 |
정말 좋은 수학기호 모음 (0) | 2008.11.14 |