테드옹의 VFX
Fresnel 이펙트 본문
만트라에는 렌더타임에서 fresnel 함수를 사용할 수 있지만
다른 렌더러에서는 그 기능이 있는지 모르겠고(내부적으로는 계산을 하겠지만 aov로 뽑을 수 있는지..), 일단 렌더타임에서는 수치를 미세하게 조절하기 힘들기 때문에 SOP에서 하는 방법을 발견
특히 외곽선 쇼크웨이브의 화면왜곡을 줄 때 좋을 것 같았다.
아이디어는 다음과 같음
1. 카메라의 위치벡터와 지오메트리의 위치벡터를 뺄셈하여 방향을 얻어냄
2. 그 방향을 기준으로 fresnel함수를 사용하여 외곽선에서 반사되는 빛의 세기를 구해낸다.
카메라의 위치벡터는 optransform함수로 행렬을 구하고
cracktranform함수를 사용하여 위치벡터를 골라낸다
지오메트리와 뺄셈한 벡터는 단위벡터화시켜서 방향벡터를 만들고, 단위벡터를 만들기 전 크기를 계산하여 거리값을 구한다
vex코드로 보면 대략 이렇게 나온다.
fresnel의 인자는 (raydirection, surfaceNormal, relativeIOR, $kt, $kr)이다
kt는 흡수된 빛의 양이라 별로 관심이 없고, 중요한건 kr(반사된 빛의 양)이다.
이를 기반으로 Cd 어트리뷰트를 생성하면 뷰포트에서 프레넬이 표현된다. 카메라의 위치에 따라 동적으로 변함
요로코롬 외곽선에서 반사된 빛의 양이 나옴
지오메트리의 반쪽은 사실 필요가 없기 때문에 최소거리와 최대거리를 단위화시켜서 0.5만큼 잘라내고 활용하면 된다.
대신 LOD가 높아야 단면이 부드러움..!
per-point계산이기 때문에 인풋을 바꿔주면 자동으로 프레넬값을 계산해준다
'Houdini' 카테고리의 다른 글
컴퓨터 그래픽스 강의 필기 (0) | 2022.04.24 |
---|---|
wedges, dailies 셋업하는 방법 (0) | 2022.03.19 |
Spiral along curve (0) | 2022.03.18 |
point instance (0) | 2022.03.15 |
라이팅 필기 (0) | 2022.01.29 |