miniRT [miniRT] #7 HIT Record 레이를 쏘았을 때 가장 먼저 마주친 물체에 대한 정보를 저장해서 이후에 충돌하게 되더라도 해당 픽셀에는 가장 먼저 부딪힌 물체를 렌더링하게끔 해야 한다. 카메라를 설정했을 때, 카메라에서 쏘는 광선이 구 안쪽면을 보는지, 바깥쪽 면을 보는지 검사해야 한다. **구 내부에 카메라가 있을 때** 위 그림처럼 내적의 결과가 양수이면 ray가 구 내부에 있다는 것을 알 수 있다. **구 외부에 카메... 42SeoulminiRT42Seoul [miniRT] #10 평면 구현 [추가] 서로 수직인 벡터를 내적하면 결과값이 0이 나온다는데, 생각해보면 당연한 결과다. 벡터 N은 인자로 제공되는 평면의 방향 벡터이다. 이 방향 벡터의 수직으로 평면은 뻗어나가고 있다. 바로 위에서 언급했던 것처럼 서로 수직인 두 벡터를 내적하면 0이 나온다는 사실을 우리는 알고 있다. 벡터 N과 수직인 벡터라고 함은 평면의 일부분인 P0과 평면을 지나고 있는 점 P를 이은 벡터, 벡터 P - ... 42SeoulminiRT42Seoul [miniRT] #8 Object 구조체 역시 와 동일하다. 원본 자료를 찾아보는 걸 추천한다. 현재 코드에서는 하나의 물체만 배치한 채 렌더링하고 있지만, 이제는 여러 물체를 배치해서 광선을 쏘고 가장 먼저 마추진 물체에 대해서 렌더링을 해주어야 한다. 여러가지 물체들을 배치하고 연결리스트로 하나하나 훑어가며 감지를 체크해보자. ray_color.c hit.c hit_sphere.c... 42SeoulminiRT42Seoul [miniRT] #9 Object 구조체 광원에서 출발한 빛 입자의 양은 항상 일정할 것이기 때문에, 빛이 도달한 미소 면적이 작을 수록 단위 면적당 도달한 빛 입자의 양은 많아질 것이고, 반대의 경우는 줄어들 것이다. 빛이 도달한 미소 면적이 가장 작을 때는 빛의 벡터가 교점의 법선 벡터와 일치할 때(사이각 0도)일 것이고, 사이각이 90도 이상이되면 미소 면적은 무한해지므로 빛 입자가 도달하지 못할 것이다. 이 때 두 벡터 A와... 42SeoulminiRT42Seoul [miniRT] #6 법선 구현 법선은 어떤 표면에 수직인 방향으로 뻗어나가는 벡터로, 광선과 구체가 부딪힌 지점에서 수직으로 뻗어나가는 벡터를 이용하면 구, 관성의 교점, 구의 중심을 나눠주면 정규화된 법선을 구할 수 있다. x, y 좌표를 알기에 우리는 피타고라스의 정리를 이용해서 삼각형의 빗면, 벡터의 길이를 구할 수 있다. a = \sqrt{x^2 + y^2} a=x2+y2 |A| = \sqrt{x^2 + y^2} ... 42SeoulminiRT42Seoul [miniRT] #4 코드 상에서의 레이 케스팅 [추가] 실습 자료에서는 카메라를 구현할 때 가로, 세로가 가변적으로 들어갈 수 있다고 가정하여 종횡비를 고려한 처리를 진행하고 카메라의 원점이나 벡터도 고려하지 않았다. 그러나 실제 과제에서 화면(window)의 크기를 지정하라는 문구는 없었고 카메라의 원점이나 벡터도 고려해주어야 하기 때문에 실습 자료의 소스 코드와 비교하면서 멘덴토리에 맞게끔 코드를 수정해볼 것이다. 각 픽셀 간의 간격을 1로 ... 42SeoulminiRT42Seoul [42cursurs]Ray Tracing in One Weekend 12-Defocus Blur 마지막 기능으로 Blur 효과를 만들어 보자. Blur는 이미지를 흐리게 하는 효과다. 원문은 반영하고자하는 현실의 카메라에서 일어나는 현상을 설명한다. 하지만 저걸 다 구현할 게 아니므로 목표인 Blur를 위해 필요한 것만 챙기자. Blur, 즉 이미지를 흐릿하게하는 효과를 구현할 거다. Blur를 구현하기 위해 현실의 카메라 구조 일부를 구현한다. 실제 카메라 모델의 이미지다. 우리는 저... raytracingminiRTminiRT [42cursurs]Ray Tracing in One Weekend 7-Antialiasing 주의: 이미지가 굉장히 작게 나오니 을 참고하자. 이번 주제는 Antialiasing이다. 백문이 불여일견이라고 먼저 원문의 7단원 가장 마지막에 위치한 이미지인 Image 6: Before and after antialiasing 를 먼저 살펴보자. 이미지를 살펴봤다면 Antialiasing 전후의 이미지가 다르다는 건 알수있다. Antialiasing를 적용하지 않은 이미지의 경우 어떤 ... raytracingminiRTantialiasingantialiasing [miniRT] 3. 벡터 구조체 만들기 그래픽 연산을 하기 위해 필요한 벡터 구조체와 벡터 함수들을 만들겠습니다. 이 벡터 구조체로 색상, 위치, 방향 등등의 많은 것들을 표현할 수 있습니다. 먼저 벡터 구조체와 함수의 선언을 vec3.h 헤더 파일에 작성합니다. 1. 벡터 정의하기 벡터 구조체 벡터 사칙연산 함수 벡터 내적, 외적 연산 함수 기타 함수 함수의 정의를 vec3.c 파일에 작성하겠습니다. 기본적으로 모든 함수는 함수... raytracingminiRTminiRT miniRT 진행(3) 벡터 연산, 광선, 카메라 만들기 그렇다면 이번엔 ray 구조체를 만들고 이 ray를 통해 스크린으로 쏘는 과정을 나타낼 것이다. 이때를 위하여 벡터의 사칙연산, 내적, 외적, 단위벡터, 벡터의 길이를 구하는 공식을 코드로 구현 한다. 벡터의 사칙연산 벡터의 내적, 외적 벡터의 기타 계산식 그리고 광선을 정의할 구조체와 함수를 만든다. 여기서 orig는 origin으로 처음 위치를 뜻한다. 그리고 dir는 direction으... miniRTminiRT
[miniRT] #7 HIT Record 레이를 쏘았을 때 가장 먼저 마주친 물체에 대한 정보를 저장해서 이후에 충돌하게 되더라도 해당 픽셀에는 가장 먼저 부딪힌 물체를 렌더링하게끔 해야 한다. 카메라를 설정했을 때, 카메라에서 쏘는 광선이 구 안쪽면을 보는지, 바깥쪽 면을 보는지 검사해야 한다. **구 내부에 카메라가 있을 때** 위 그림처럼 내적의 결과가 양수이면 ray가 구 내부에 있다는 것을 알 수 있다. **구 외부에 카메... 42SeoulminiRT42Seoul [miniRT] #10 평면 구현 [추가] 서로 수직인 벡터를 내적하면 결과값이 0이 나온다는데, 생각해보면 당연한 결과다. 벡터 N은 인자로 제공되는 평면의 방향 벡터이다. 이 방향 벡터의 수직으로 평면은 뻗어나가고 있다. 바로 위에서 언급했던 것처럼 서로 수직인 두 벡터를 내적하면 0이 나온다는 사실을 우리는 알고 있다. 벡터 N과 수직인 벡터라고 함은 평면의 일부분인 P0과 평면을 지나고 있는 점 P를 이은 벡터, 벡터 P - ... 42SeoulminiRT42Seoul [miniRT] #8 Object 구조체 역시 와 동일하다. 원본 자료를 찾아보는 걸 추천한다. 현재 코드에서는 하나의 물체만 배치한 채 렌더링하고 있지만, 이제는 여러 물체를 배치해서 광선을 쏘고 가장 먼저 마추진 물체에 대해서 렌더링을 해주어야 한다. 여러가지 물체들을 배치하고 연결리스트로 하나하나 훑어가며 감지를 체크해보자. ray_color.c hit.c hit_sphere.c... 42SeoulminiRT42Seoul [miniRT] #9 Object 구조체 광원에서 출발한 빛 입자의 양은 항상 일정할 것이기 때문에, 빛이 도달한 미소 면적이 작을 수록 단위 면적당 도달한 빛 입자의 양은 많아질 것이고, 반대의 경우는 줄어들 것이다. 빛이 도달한 미소 면적이 가장 작을 때는 빛의 벡터가 교점의 법선 벡터와 일치할 때(사이각 0도)일 것이고, 사이각이 90도 이상이되면 미소 면적은 무한해지므로 빛 입자가 도달하지 못할 것이다. 이 때 두 벡터 A와... 42SeoulminiRT42Seoul [miniRT] #6 법선 구현 법선은 어떤 표면에 수직인 방향으로 뻗어나가는 벡터로, 광선과 구체가 부딪힌 지점에서 수직으로 뻗어나가는 벡터를 이용하면 구, 관성의 교점, 구의 중심을 나눠주면 정규화된 법선을 구할 수 있다. x, y 좌표를 알기에 우리는 피타고라스의 정리를 이용해서 삼각형의 빗면, 벡터의 길이를 구할 수 있다. a = \sqrt{x^2 + y^2} a=x2+y2 |A| = \sqrt{x^2 + y^2} ... 42SeoulminiRT42Seoul [miniRT] #4 코드 상에서의 레이 케스팅 [추가] 실습 자료에서는 카메라를 구현할 때 가로, 세로가 가변적으로 들어갈 수 있다고 가정하여 종횡비를 고려한 처리를 진행하고 카메라의 원점이나 벡터도 고려하지 않았다. 그러나 실제 과제에서 화면(window)의 크기를 지정하라는 문구는 없었고 카메라의 원점이나 벡터도 고려해주어야 하기 때문에 실습 자료의 소스 코드와 비교하면서 멘덴토리에 맞게끔 코드를 수정해볼 것이다. 각 픽셀 간의 간격을 1로 ... 42SeoulminiRT42Seoul [42cursurs]Ray Tracing in One Weekend 12-Defocus Blur 마지막 기능으로 Blur 효과를 만들어 보자. Blur는 이미지를 흐리게 하는 효과다. 원문은 반영하고자하는 현실의 카메라에서 일어나는 현상을 설명한다. 하지만 저걸 다 구현할 게 아니므로 목표인 Blur를 위해 필요한 것만 챙기자. Blur, 즉 이미지를 흐릿하게하는 효과를 구현할 거다. Blur를 구현하기 위해 현실의 카메라 구조 일부를 구현한다. 실제 카메라 모델의 이미지다. 우리는 저... raytracingminiRTminiRT [42cursurs]Ray Tracing in One Weekend 7-Antialiasing 주의: 이미지가 굉장히 작게 나오니 을 참고하자. 이번 주제는 Antialiasing이다. 백문이 불여일견이라고 먼저 원문의 7단원 가장 마지막에 위치한 이미지인 Image 6: Before and after antialiasing 를 먼저 살펴보자. 이미지를 살펴봤다면 Antialiasing 전후의 이미지가 다르다는 건 알수있다. Antialiasing를 적용하지 않은 이미지의 경우 어떤 ... raytracingminiRTantialiasingantialiasing [miniRT] 3. 벡터 구조체 만들기 그래픽 연산을 하기 위해 필요한 벡터 구조체와 벡터 함수들을 만들겠습니다. 이 벡터 구조체로 색상, 위치, 방향 등등의 많은 것들을 표현할 수 있습니다. 먼저 벡터 구조체와 함수의 선언을 vec3.h 헤더 파일에 작성합니다. 1. 벡터 정의하기 벡터 구조체 벡터 사칙연산 함수 벡터 내적, 외적 연산 함수 기타 함수 함수의 정의를 vec3.c 파일에 작성하겠습니다. 기본적으로 모든 함수는 함수... raytracingminiRTminiRT miniRT 진행(3) 벡터 연산, 광선, 카메라 만들기 그렇다면 이번엔 ray 구조체를 만들고 이 ray를 통해 스크린으로 쏘는 과정을 나타낼 것이다. 이때를 위하여 벡터의 사칙연산, 내적, 외적, 단위벡터, 벡터의 길이를 구하는 공식을 코드로 구현 한다. 벡터의 사칙연산 벡터의 내적, 외적 벡터의 기타 계산식 그리고 광선을 정의할 구조체와 함수를 만든다. 여기서 orig는 origin으로 처음 위치를 뜻한다. 그리고 dir는 direction으... miniRTminiRT