나는 왜 내 몫도 아닌 일들을 하고 있는가에 대한 소고

by 옆집 사람

오늘은 그런 날이었다.


뭐 수학 한그득한 어지러운 논문을 수학과 물리를 아예 모르는 아티스트들을 위해 강의할 준비를 하면서, 동시에 내 일도 따로 해야 하는 뭐 그런 토 나오는 날.


그 논문이 뭔지 구욷이 있어 보일라고 좀 쓰자면,


유체 시뮬레이션은 기본적으로 모든 유체를 발산항이 0인 비압축성이라 가정하고 유체의 움직임을 계산한다. 그렇게 하면 변수 몇 개가 사라져 비교적 적은 자원으로 시뮬레이션을 진행할 수 있으니까.


하지만 연산을 하다 보면 외력도 더해줘야 하고, 이산 데이터다 보니 수치적 오차가 발생하기도 하는 등의 이유로 불가피하게 발산값이 발생한다.


이는 발산이 없다는 전제조건과 상충되는 상황이라 있어서는 안 될 일이다. 일단 전제조건 어쩌구 얘기를 떠나, 없던 발산이 갑자기 뿅 나타났다는 건 총 질량이 보존되고 있지 않다는 뜻이기도 하니, 거 어디선가 들어본 질량보존법칙의 위배라 논리적으로도 말이 안 되는 상황이다.


그래서 이를 해결하기 위해, 유체 시뮬레이션은 압력-투사라는 단계를 도입해 속도장에서 발산을 제거하는 과정을 거친다.


해당 과정은 다음과 같다.


우리에게 필요한 발산이 없는 속도장은 임시 속도장 + 모종의 속도장 변화량으로 표현할 수 있다.

그래서 이 과정 내에서 우리의 목표는 이 모종의 속도장 변화량을 계산하여 임시 속도장을 보정하는 것이다.


우선, 속도장의 변화량은 F=mㆍa의 유체 버전인 비압축성 나비에-스토크스 방정식을 이용하여 구할 수 있다.


-시간변화량/밀도 * 압력 그래디언트


(이때, 우리가 다룰 유체 시뮬레이션은 발산뿐만 아니라 점성에 관한 부분도 싹 무시하고 계산한다. 점성 까짓 거, 그냥 속도장에 블러 커널 대충 비벼서 비슷하게 눈속임하면 되니까. 심플-이즈-베스트.)


속도장에 헬름홀츠 분해를 진행하면, 발산과 컬의 합으로 속도장이 분해된다. 이 분해된 식의 양변에 발산을 취하면 컬 항은 사라지고 오로지 발산 항만이 남는다.


컬은 유출/유입이 없는 순수한 회전성분만을 가지고 있으니 발산을 취하면 결괏값이 0이 되어 사라지므로.


첫 식인 새 속도장 = 임시 속도장 + 모종의 속도장 변화량에 위의 간략화된 나비에-스토크스 방정식을 대입한다. 그 후, 헬름홀츠 분해를 통해 확인한 성질을 이용하기 위해, 양 변에 발산을 취한다.


새 속도장은 당연히 우리의 목표인 발산이 0인 속도장이므로 좌변은 0, 우변은 임시속도장의 발산과 압력 라플라시안 곱하기 상수덩어리의 합으로 표현된다.


이를 압력 라플라시안에 대해 정리하면 압력을 계산할 수 있는 푸아송 방정식을 얻을 수 있다.


이렇게 얻어낸 압력의 그래디언트 값을 이용하여 나비에-스토크스 방정식 + 임시 속도장에 대입하면 우리가 원하는 발산이 제거된 속도장이 나온다.


위와 같이 수학적으로 섹시한 단계를 거쳐 속도장은 일단 보정됐지만, 다음 서브스텝에서 속도장으로 속도장을 어드벡션 할 때, 또또 이산적 어쩌구가 등장해 운동량을 일부 소실시켜 버린다. 눈물.


이를 해결하기 위해, 2018년. 이류-반사라는 새로운 기술이 시그라프에서 발표되었고, 요 부분이 내가 설명해야 하는 시스템이다. 다들 마지막 수학이 중1~2인 분들이다 보니 이걸 도대체 어떻게.. 싶지만...


아무튼, 해당 시스템이 제안하는 운동량 보존 방식은 아래와 같다.


1. 이류연산의 이후가 아닌 중간 단계에서 압력-투사를 미리 진행한다.

2. 기존 속도장과 압력-투사로 보정된 속도장 간의 오차를 구한다.

3. 해당 오차를 반사시켜 기존 속도장에 더해준다.

4. 더해준 속도장으로 더해지기 전 속도장을 이류처리한다.


해당 과정을 거치면, 압력-투사 과정에서 손실된 에너지가 새로 만들어진 속도장에 반영이 된다.


이 속도장은 물론 발산이 포함된 상태이므로 다시 압력-투사를 거쳐야 하여 수치적 확산이 또 발생은 하겠지만, 보정되지 않은 상태보다는 덜한 상태가 된다. 테스트 케이스 기준으로는 운동량 보존력 차가 꽤 많이 눈에 띄는 정도.


짜-잔. 매-직.


이러한 내용을 담은 논문을 무슨 뜻인지 단 한 줄도 이해하지 못한 이사가 들고 와서는, 이거 신기술이래. 와 멋지당. 이걸 전 아티스트들이 알아들을 수 있게 세미나를 준비해 줘 라는데, 아니 무슨 그게 뚝딱하면 나오나.


애초에 이런 수학을 아티스트들이 전혀 몰라도 되도록 만들어주는 게 내 업무인데...


거기다 나도 전공은 원래 순수미술이었고, 말고도 할 일이 참 많으며, 뭣보다 돈을 더 주는 것도 아니면서.. 하고 거절하고 싶었지만


안타까운 점은, 저게 무슨 뜻인지 설명할 수 있을 만큼은 알고 있고, 개발, 수학 등의 기술적인 부분은 이미 내가 담당하고 있으며, 이사가 시키는 일이라 뭐 뺄 수도 없었다.


나는 아주 오래전부터 어딜 가도 늘 이런 식인 것 같다.


달리 할 사람이 없어서, 해본 거니까, 할 수 있으니까 등의 이유로 참 많은 것들이 떠넘겨진다. 내가 감당할 수 있는지는 그다지 고려되지 않은 채로.


당연히 해낸다고 딱히 보상이 있지도 않다.


집안에 일이 생기면 동네 놀이터로 도망가버리는 형 대신, 어린이집 재학 중이던 고사리 손으로 싸움을 말리려, 혹은 위로하려 여기저기 뛰어다니기도 했고,

온 학교를 불려 다니며 쉬는 시간이고 점심시간이고 없이 열댓 명씩이나 되는 아이들의 고민 상담도 해줘야 했고,

방과 후, 학교 교사네 집에 불려 가 컴퓨터도 고쳐줘야 했고,

병장씩이나 되어도 다른 병장들 다 누워 잘 때, 혼자 행보관 손에 이끌려 진지공사에 불려 다녀야 했고,

애당초 내가 미대를 나와 이런 것들을 깔짝대고 있는 것도 달리 할 사람이 없어서였기도 하다.


늘 이렇게 뛰어다니는 게 다들 안 보이진 않았을 텐데,


거 없다 라던지, 공부는 도대체 언제 하노. 느그 형 봐라 말고,

그렇게나 들어줬는데, 막상 내 얘기 꺼내면 아 진짜?라고 띡 던지곤 지 얘기로 슬 돌아가지 말고,

실컷 고쳐줬는데, 집에 데려다 줄려는 시늉조차 안 하는 거 말고,

그렇게 다 해줬는데, 곧 갈 사람이니 포상휴가는 애들한테 양보해라 말고.

나한테도 그냥 화이티이이이잉! 너밖에 없다! 나 좀 해줬으면 어땠을까 싶다.


아무도 안 챙겨주니까 이렇게 혼자 어깨 뽕이나 좀 채우려고 여따가 유체니 뭐니. 아무도 관심 없을 이런 소리를 늘어놓고 있는 오늘 밤도 여느 때와 같이 어째 참 길 것 같다.