본문 바로가기
컴터/OpenGL

[OpenGL] Shading

by 나 진짜 못차마 2023. 6. 10.
728x90

경북대 '컴퓨터그래픽스' 강의 백낙훈 교수님의 강의를 듣고 복습하기 위한 게시글입니다.

게시글의 내용은 강의 또는 구글링을 통해 공부하였습니다.

이미지 자료는 출처를 밝히거나 직접 그려 사용하였습니다

 

그래픽스 프로그램을 돌리거나 씌운 영상을 보면,

여전히 실제와 같은 느낌이 나지않고 어색한 느낌이 많이 들 때가 있다.

그것은 빛의 처리가 잘 되지 않아 어색한 경우가 종종 있다.

광학 시뮬레이션에 대해 알아보자.


빛에 대한 처리를 하기 위해서는 빛과 해당 빛을 받는 물체가 필요하다.

그래픽스에서는 Light source(광원)Matter(=material)이라 부른다.

( L&M )으로 줄여 부르기도 한다.

light

3 channel 따로 처리 해야하고, 마찬가지로 RGB를 사용한다.

빛의 R 성분을 많이 쏘냐, G 성분을 많이 쏘냐 등을 의미하고,

material도 각 성분만큼 얼마나 반사하냐를 의미한다.

각 성분을 합성해서 결과적으로 어느정도 반사될지를 수학적으로 계산하여 최종 결과를 보여준다.

illustrated by 백낙훈 교수님

 

예를 들어 왼쪽의 그림은

하얀 빛을 쏘고, 물질은 빨간색 물체이다. 그럼 연산 후 shading 한 결과가 빨간색으로 반사된다.

오른쪽 그림은 그 반대로 결과는 동일하다.

matter

표면 물질에 따라 반사되는 특성이 다를 것이다.

가상의 light source에서 target object에 부딪혔을 때,

가상의 material에 따라 반사되는 정도를 수학적으로 모델링하고

우리의 가상 camera로 들어온다.

그리고 들어올 때, 우리 window에 어느 픽셀에 찍힐지를 update함으로써 전체적으로 shading을 적용시킨 realistic한 이미지가 우리 화면에 출력된다.


Illumination Model

물체 표면의 한 점에 대해서 intensity of light(빛의 밝기)를 계산하는 수학적인 모델이다.

shading model, lighting model이라고 불리기도 한다.

물체 표면에서 특정한 점을 잡았을 때,

정반사가 일어나면 왼쪽 그림 처럼 빛나는 부분을 만들어(수학적인 계산을 해)낼 수도 있고,

material이 달라, 난반사가 일어나는 경우, 빛이 그 부분이 밝아지긴 하지만 빛나는 부분이 없는 효과도 만들어 낼 수 있다.

즉,

표면 재질에 따라 빛-재질 간의 상호 작용을 계산하는 모델이다.


Light Sources

좁은 의미 : 진짜로 빛이 나오는 물체만 고려한다. self-emitting(자체 발광) object

예를 들어, 태양, 전구 같이 직접 빛을 발산하는 물체이다.

넓은 의미: 모든 물체를 광원으로 해석한다. reflection(빛의 반사) 때문.

태양, 전구 같은 곳에서 빛이 나와 반사되는 빛 마저 광원으로 간주하는 것이다.

4가지 타입의 광원이 있다.

  • Ambient light
  • Point light source
  • Spotlight
  • Distant light

Four types of llight sources - Ambient Light

ambient의 뜻은 '어디에나 있는', '잔잔한', '에워싼'이라는 의미가 있다.

unifrom lighting이라고 부르기도 한다.

빛이 난반사해서, 특별한 광원이 없더라도 희미한 빛이 있을 것이라는 의미이다.

모든 방향에서 같은 정도의 낮은 밝기로 간접 조명이 있다고 가정한다는 것이다.

예를 들어,실제로 우리는 집에 불을 다 끄더라도 어디선가 오는 희비한 빛으로 집 안을 볼 수 있다.

아주 희미하지만 균일하기 때문에 uniform lighting이라 하는 것이다.

수학적인 모델로는 ambient illumination이라고 하는데,

전체적으로 모든 방향에서 낮고 균일한 정도의 빛이 들어올 것이다 하여,

scalar 값, 실제로는 constant 값으로

La

라는 상수 값을 사용한다.

(밑의 a는 ambient)

La 에는 상대적으로 낮은 값을 넣어 사용하는게 일반적이다.

Four types of llight sources - Point Light Source

점 광원으로,

이상적으로는 3차원 공간 상의 중심점 P0 에서 모든 방향으로 동일하게 빛을 내보내는 것을 의미한다.

예를 들어, 태양이나 전구처럼 점 하나에서 모든 방향으로 똑같은 빛을 내는 광원이다.

대신에 처음 출발할 때는 균일한 정도를 가지지만 거리에 의해 빛이 줄어든다.

점 P 에서 받게 되는 양 = 거리 제곱의 반비례한다.

L(P , P0) = 1 / |P - P|²*L(P0)

이론상으로는 점 하나지만, 실제로는 점 하나의 light source는 거의 불가능하다.

전구로 예를 들면,

illustrated by 백낙훈 교수님

전구를 point light source라고 생각했을 때랑 실제랑 비교했을 때 그림자에서 차이가 난다.

만약 정말 point light source면 그림자가 깔끔하고 정밀하게 경계가 또렷해야한다.

하지만 실제로는 그렇지 않다.

가운데에는 진그림자(umbra)가 있고, 주변에는 반그림자(penumbra)라는 게 생긴다.

위와 같은 경우는 point light source가 아니라 area light soure라 한다.

area light soure를 처리하는 거는 꽤 복잡하다.

light point source 여러 개를 가지고 area light source를 시뮬레이션 하면 거의 비슷한 효과가 나오긴 한다.

 

Four types of llight sources - Spotlight

point light와 같이 어떤 점에서 빛이 나온다는 성질은 비슷하지만,

특정한 방향으로만 빛이 진행된다. 그러면서 어떤 각도만큼 빛이 번진다는 것을 설정할 수 있다.

Ps : apex(꼭대기)

Ls : light direction

θ : angle

부드러운 경계를 만들기 위해서 cos 함수를 사용한다.

by 백낙훈 교수님 강의 자료

Ls의 중심에 따라 cos함수를 적용시키면 가운데, 0도 일 때는 최고의 intensity가 될 것이다.

점점 옆으로 갈수록 희미해진다. 근데 그냥 cos을 사용하면 천천히 희미해진다.

spotlight은 범위를 벗어나면 급격히 어두워져야한다.

그래서 그냥 cos를 사용하는게 아니라 cos 거듭제곱을 사용한다. 사용자 정의에 맞게 적절한 제곱수를 사용한다.

Four types of llight sources - Distant light source

parallel light source라고도 불린다.

물체를 향한 빛이 평행하게 오는 상황이다.

일종의 area light source다.

특징은 계산 과정이 간단하다.

728x90