[%]
그래픽스 궁금한게 있는데 들어볼사람
익명(1.231)
2020-02-24 15:52
추천 0


안녕 얘들아
그래픽스 공부하면서 Oren Nayer Diffuse 모델을 공부중인데, 내 빡머가리로는 이해가 안되는게 있어서 찾아왔어
이야기를 들어보니깐 여기가 수학을 잘한다고 하더라고
아무튼 위에 구형좌표계에서 theta랑 phi를 저렇게 정의한다고 하자
근데 내가 계산하고 싶은거는
![L_{r}={\\frac {\\rho }{\\pi }}\\cdot \\cos \\theta _{i}\\cdot (A+(B\\cdot \\max[0,\\cos(\\phi _{i}-\\phi _{r})]\\cdot \\sin \\alpha \\cdot \\tan \\beta ))\\cdot E_{0}](/media?src=https://wikimedia.org/api/rest_v1/media/math/render/svg/eb7db21b2f3e813d8aaf53204a2fb3e2cbb77560&board=github&pid=6403&kind=minor)




여기에서 안에 max[0, cos(phi_i - phi_r)] 부분인데
우선 코드 스니펫부터 보자
vec3 normal = normalize(frag_in.normal);
vec3 view_dir = normalize(view_direction);
vec3 light_dir = normalize(light_position);
float NdotL = dot(normal, light_dir); // cos(theta_r)
float NdotV = dot(normal, view_dir); // cos(theta_i)
float angleVN =
acos(NdotV); // theta_i
float angleLN =
acos(NdotL); // theta_r
float alpha = max(angleVN, angleLN);
float beta = min(angleVN, angleLN);
float gamma = dot(view_dir - normal * dot(view_dir, normal), light_dir - normal * dot(light_dir, normal));
여기서 gamma가 내가 궁금한 cos(phi_i - phi_r) 부분이야
gamma를 왜 저렇게 구하는지 모르겠어
설명을 어떻게 해야할지 잘 모르겠는데 댓글점 달아주라
읽어줘서 고마워
*******
gamma가 이렇게 계산된다고 하네

근데 왜 cos(phi_i - phi_r) 가 이렇게되누?
ㅆㅂ
내적의 분배법칙 이용해서 좀 정리해보니까 대강 나오는 것 같다. 끝까지는 안 해봄
ㄳㄳ 나도 해보겠음
알아냈다 노말 기준 평면에 프로젝션 시킨 두 백터를 닷 프로덕트해서 cos을 구한거구나 끗
구현에 벡터 스칼라로 나누는 부분 빠진거 같은데?
어디부분? 구현 코드는 감마를 구하는곳 까지만 가져오긴 했음
dot product 공식 cosΘ = a · b / a b 하고 구현의 gamma = dot(..., ...) 을 비교해보면 뭐가 빠졌는지 보일것임.
다시보니 dot이 유닛벡터로 만들어주는 것 겸하는겨면 빠진거 없심.
ㅇㅇ 맞음 Normalize는 왜 코드에서 무시했지? 한번 확인해보겠음 ㄳㄳ
어짜피 Normalized 된 벡터들로 계산을 하는거라 무시했나
뭔 책이 theta랑 phi를 뒤집어놨어 하고 레퍼런스 대려고 위키 펴보니까 물리하는 애들이 컨벤션이 그렇다는 데에서 다시 충격먹음...
뭐 답은 안거같지만 단위벡터로 보면 내적 안은 xy평면으로의 사영이니 좌표가 (cos phi_r, sin phi_r, 0) 나오고, light를 n방향이랑 xy평면 성분분해하면 결국 cos phi_l, sin phi_l, 0이랑 아까거 내적인데 cos 합차공식에 의해서 같은값임
원래는 theta랑 phi랑 반대로 사용하는가? 책에서 그렇게 나와있어서 몰랐다 쓰바거 모를때는 직접 그려보면 쉬운 것 같다 그려보니깐 알겠더라 암튼 ㄳㄳ
수학과는 theta랑 phi를 반대로 적는게 컨벤션인데 물리과는 그렇게 한대. 그거랑 별개로 저 책은 이상하게 그림을 그리긴 했음. x방향이랑 y 방향 외적했을때 z방향이 오른손법칙으로 안나와 (거울상이라서 좌표계산 자체는 맞음)