본문 바로가기
Graphics/Graphics

Smooth Min (IQ's polynomial smooth minimum)

by scahp 2020. 7. 17.

개요

메타볼 기능을 구현하려고 알아보던 참에 재미있는 식을 발견하여 정리한 것입니다.

Smooth Min는 두 함수가 일정 값 범위 내에 들어오면 그때부터 보간을 수행하는 함수입니다. 또한 이름처럼 보간된 부분이 부드럽게 이어지도록 해줍니다.

이 정리는 여기의 공식 해석을 기반이며, 원글을 조금 더 풀어서 설명하는 것을 목표로 합니다.

 

 

내용

Smooth Min 함수는 아래와 같습니다. 이제 이 공식에 숨어있는 의미를 알아봅시다.

// https://iquilezles.org/www/articles/smin/smin.htm
// Polynomial smooth minimum by iq
float smin(float a, float b, float k) {
  float h = clamp(0.5 + 0.5*(a-b)/k, 0.0, 1.0);
  return mix(a, b, h) - k*h*(1.0-h);
}

 

 

 

그림1. a, b 사이를 선형보간 해보니, a-b가 (-K, k) 부분에서 불연속이 나타남 (녹색선)

 

 

그림2. 최종 결과, a와 b가 보간되는지점이 C1 연속이 된다. (녹색선)

 

P.S. k값을 0~1 사이 값으로 테스트 하고 있는데, -1~0 사이로 변경하게 되면, Smooth Max 함수가 됨.

 

그림3. Smooth Max 함수 (녹색선)

 

레퍼런스

http://www.viniciusgraciano.com/blog/smin/

https://iquilezles.org/www/articles/smin/smin.htm

https://www.youtube.com/watch?v=YJ4iyff7zbk

 

 

반응형

'Graphics > Graphics' 카테고리의 다른 글

Absorption and Scattering (흡수와 산란)  (0) 2020.08.11
Perspective Shadow Map (PSM)  (0) 2020.08.05
Cascade Shadow Map  (2) 2020.07.10
VolumeLight  (0) 2020.06.24
Forward Plus Rendering  (0) 2020.05.26