홍정모 그래픽스 파트1

홍정모 그래픽스 파트1

홍정모 그래픽스 파트1을 공부하면서 배운 내용 정리를 위한 포스트.
파트1은 입문자를 위해서 그래픽스의 느낌을 보여주기 위해 맛보기 형태로 제작하셨다고 한다.
인상적이었던 부분은 수학을 못하더라도 이해할 수 있도록 간략하게나마 유도과정이 있다.
맛보기라 유도가 아쉬운 부분은 참고자료를 통해서 채웠다.

그래픽스 내용

  1. 좌표계 변환에 대한 내용 (픽셀 -> 월드)
  2. 광선과 물체의 충돌감지
  3. Phong model (Ambient, Diffuse, Specular)
  4. 텍스처 입히기
  5. Raytracing (반사와 굴절)

필요한 수학 / 광학 개념

광선과 물체의 충돌감지

  • 직선의 방정식
  • 구의 방정식
  • 평면의 방정식
  • 벡터의 연산 : 합, 차, 스칼라 곱, 내적, 외적

텍스처링

  • 선형 보간 (Linear interpolation, 이하 Lerp)
  • 무게중심 좌표계 (Barycentric coordinates) < Lerp 응용
    위 내용을 응용해 이런 삼각형도 그릴 수 있고, 좌표계 변환도 섞어서 텍스처도 입힐 수 있다.
    보간

Raytracing

  • 반사
  • 굴절 (스넬의 법칙)
  • 프레넬 효과 (Fresnel Effect) - 강의에는 없지만 간단하게라도 구현해보면 더 나은 결과를 구할 수 있다.

구현 결과

이 사진은 큐브 안에 투명도 100%의 유리구슬, 카메라, 광원을 넣은 화면이다.
기본

파트 1을 끝내고 나서 조금 아쉬운 부분이 있었다.

  1. 큐브 각 면이 맞닿는 경계선이 자세히 보면 보인다.
  2. 유리구슬이 어색하다.

이러한 문제를 하나씩 고쳐보았다.

큐브의 경계면 숨기기

자세히 보면 왼쪽은 앞쪽 면과 왼쪽 면의 경계가 보이지 않고, 오른쪽은 경계가 보인다. 경계면의 좌표를 수치가 딱 맞아떨어지게 했더니 부동소수점 오차 때문에 빛이 새어서 바탕색이 나오는 것이 문제인 것 같아 왼쪽만 수정해본 결과다.

유리구슬 더 자연스럽게 만들기

프레넬 효과를 완벽히 이해하기는 어려움이 있어 다른 방식으로 . “빛이 닿는 표면과 평행에 가까워질수록 반사율이 높아지고 투과율이 낮아진다”라는 생각을 바탕으로 아래 방식으로 구현했다.
투과율 : $transparency * (1 - \cos \theta)$
반사율 : $transparency - 투과율$

아주 조금이지만 더 자연스럽게 느껴지는 것을 볼 수 있었다.

추가로 투명도를 조금 낮추고 반사를 조금 더 넣으니 더 자연스러워지는 것을 볼 수 있었다.
약간의 투명도를 더한

후기

Raytracing의 아이디어는 그대로 보여주는 듯 하고, 재미도 붙여주는데에는 효과적인 듯 하다. 진짜 맛보기라는 느낌이 많이 든다. 대학 1주차 강의같은 느낌?

카메라도 이동도 넣고, 자글자글한 부분 등 더 깎고 싶은 부분들이 많은데, 너무 느려서 계속하기에는 무리가 있었다. 병렬처리까지 완주하고 여러 기술들을 찾아서 섞어보면 재밌겠다는 생각이 들었다. 어서 CUDA를 사용해보고 싶다.

참고한 자료

자료는 봤던 순서대로 나열함.

3Blue1Brown - 선형대수학의 시각적 이해 선형대수학의 기본적인 내용을 시각적으로 아주 잘 보여줌. 벡터 등 이러한 내용에 대해 전혀 모른다면 가장 먼저 보는 것을 추천.
한정현 - 그래픽스
컴퓨터 그래픽스를 모른다면 입문하기에 아주 좋은 강의.

Sam Buss - 3D Computer Graphics: A mathematical approach with OpenGL ,
캠브릿지 대학에 있을 당시 사무엘 부스의 저서인듯 함
3D에서 사용하는 공식들의 증명이 나옴. 그 중 Lerp, Barycentric coordinates에 대해서 도움을 받음.
피토스터디 - 선형대수학
수식을 시각적으로 잘 보여줌. 응용하는 문제도 있어서 짧게 연습하기에 좋음.

행렬의 기원에 대한 글
선형대수의 기원에 대한 글
인하대 차동우 교수님 - 광학 22A~22J
그래픽스를 시작하고 나서 광학에도 관심을 가지게 되었는데, 입문용으로 좋은 것 같음.
행렬식을 어디에 쓸까?
이외에도 해석적인 면에서의 관점을 제공한다.

노트

카테고리:

업데이트:

댓글남기기