빛이 굴절되어 나타나는 효과를 내보기 위해 몇번 시도해보았지만 번번히 실패했음. 이유는 두가지가 있음.
첫번째는 샘플의 문제.
노이즈 제거필터를 끄고 보면 이런 상태. 점점으로 보이는 것은 굉장히 적은 빛이 닿을 때 생기는 것인데, 프리즘의 반대면은 빛이 제대로 닿아야 할 것 같지만 사실 아니었음.
이것은 컴퓨터가 패스트레이싱을 구현하는 방법을 생각해보면 자연스러운 것임.
우리가 물체를 보는 것은 광원에서 나온 빛이 물체에 반사되어 눈에 들어가는 것이지만, 이것을 컴퓨터로 구현하면, 카메라로 들어갈지 안들어갈지도 모르는 빛을 죄다 계산해야 되므로 연산량이 어마무시하게 들어감.
그래서 방향을 거꾸고 해서 '카메라'에서 나온 빛(??) 이 물체에 반사되어 '광원'에 닿는지 아닌지를 계산하는 것이 패스트레이싱임.
프리즘 반대방향에서 물체에 닿으려면, 바닥면에 닿았다가 빛이 '광원 방향'으로 날라가야 됨.
그런데 바닥면은 무슨 면인가 .난반사가 일어나는 표면임. 안 그러면 프리즘에서 나온 빛의 모양이 제대로 생기지 않기 때문에
즉
카메라에서 나온 빛은 바닥면에 닿아서 미친듯이 온 방향으로 튀어대다가
운이 좋아서 프리즘 방향으로 튀어들어간 빛이 광원에 닿으면 그것이 위의 화면처럼 점 하나로 찍히는 것임.
이것을 해결하는 방법은 단순하면서도 끔찍한데
샘플을 막 10000씩 올리면 됨. 쉽게 말해서 렌더링 시간을 수십배 올리면 컴퓨터가 열불내면서 계산해주긴 함.
그러면 위처럼 대충 어떻게 굴절되는 것처럼 보이는 척은 해줌.
하지만 그럼에도 불구하고 분광현상은 일어나지 않는데, 이 역시 위에서 설명했음.
패스트레이싱은 광원에서 빛을 쏘는게 아니고 카메라에서 눈을 쏘는 것인데, 눈은 빛처럼 분산될 파장이 없음. 블렌더에서 분광현상은 기술적으로 불가능하단 소리.
쉬운 방법이라면 빛을 쏴서 렌더링을 시도한 미친 엔진을 사용하는 것임. 놀랍게도 있음 .대단한 인간놈들..
문제는 연산속도가 미친듯이 느리다는 것. (아래 그래프를 참고하면 다른 엔진에 비해서 3배는 느림.)
그러다가 최근 이런 영상을 발견했음.
이미 실패한 전력도 있고 기술적으로 불가능하다는 것을 알고 있었기 때문에 반신반의하면서 확인했는데
미친 방법으로 이 문제를 해결하고 있어서 애게에 박제하려고 글을 씀.
영상에서 어떻게 만드는지 보여주고
결정적으로 아예 파일을 배포하고 있기 때문에 그냥 갖다쓰면 되지만
경험상 이런 물건은 원리를 대충이라도 이해하고 있지 않으면 쓰는데 애로사항이 꽃피기 때문에 따라서 만들어봤음.
일단 할 일은 원시적인 유리 재질을 만드는 것. 굴절 쉐이더와 광택 쉐이더를 프레넬 값에 맞춰 섞어주면 됨.
일단 이 상태에서는 블렌더 기본 쉐이더에서 transmission을 올린거랑 완전히 같음.
오늘의 주인공 : white noise.
블렌더 2.8에서 추가된 노드인데
수치적으로는 계산할때마다 0과 1사이의 랜덤값을 내놓는 함수이고
비주얼적으로는 픽셀 하나하나를 계산할때마다 0과 1 사이의 무채색을 내놓는 함수임.
처음 소개될때도 대체 이걸 어디다 쓸지 몰랐었는데 정말 기가막힌 활용법임..
어떻게 쓰냐면 이 함수를 이용해서 0과 1사이의 값을 가시광선 스펙트럼에 대응시켜 굴절 쉐이더에 꽂아넣는 것.
그러면 굴절 쉐이더는 계산할때마다 랜덤한 가시광선 원색을 연산하게 됨.
이 상태에서 같은 입력값을 변화하는 IOR 값을 만드는데 사용하는 것임!
설명이 부실한데 결론적으로
매 연산시마다 굴절 쉐이더는 매번 다른 색과 그 색에 맞는 ior값을 받으므로, 이론상 실제 빛의 분광현상과 아주 비슷한 효과를 얻을 수 있는 것임!
일단 내부에서 일어나는 굴절은 보다시피 아주 선명하게 관찰됨.
여기서 좀 해멨는데 caustics에서 filter glossy를 반드시 0으로 꺼야 됨. 이게 아마 일종의 denoise인거 같은데 정확도를 현저하게 떨어트림.
그러면 이와 같이 블렌더에서도 프리즘을 만들 수 있음.
색수차 효과가 아주 그럴듯하게 만들어짐.
단점이라면 아까 말했든 미쳐돌아가는 샘플 수. 왼쪽 위에 써있듯이 샘플 수를 6000까지 올려도 여전히 firefly가 사라지지 않고 있음. 포토샵같은 사진 보정 프로그램의 도움을 받아야되지 않을까..