Texture Mapping
텍스처는 물체 표면의 질감(거침, 부드러움)을 나타내는 무늬를 말한다.
기본적으로는 2D 이미지인데, 이를 3차원 모델에 입혀서 사실감을 더해주는데 사용된다.
이런 텍스처 이미지를 3D 모델에 입히는 것을 가리켜 texture mapping 이라고 한다.
텍스처 매핑은 모델의 굴곡과 곡면이 많을수록 어려워진다.
Bump Mapping
물체의 표면이 울퉁불퉁하고 거친 경우에는 bump mapping 기법을 사용할 수 있다.
이 기법을 적용하면 위 사진처럼 벽돌과 같이 울퉁불퉁한 느낌을 줄 수 있다.
Environment Mapping
다른 기법으로는 알루미늄 그릇 표면에 주변 환경이 비쳐보이듯,
주변 환경의 모습 자체를 텍스처로 하여 모델에 입히는 environment mapping 기법도 있다.
이 기법은 계산량이 많다고 한다.
(4장 내용도 여기에 추가적으로 정리할 예정)
Shadow Generation
물체와 빛이 있으면 물체에 대한 그림자가 생기는 것이 자연스럽다.
그림자의 경우에는 Ray Tracing 같은 global illumination 기법을 사용하면 자연스럽게 만들어진다.
하지만 local illumination 기법을 사용하게 되면 그림자가 알아서 만들어지지 않기 때문에 직접 계산해야 한다.
그림자의 종류는 크게 2가지로 나눌 수 있다.
물체에 의해 바닥이나 벽에 생기는 projective shadow
물체 자체가 복잡해서 자신의 일부에 의해 자신에게 드리워지는 self shadow 이다.
또한 그림자는 광원의 성질에 따라 다르게 만들어지기도 한다.
햇빛과 같이 멀리 한 점에서 오는 빛 (점광원) 의 경우, 그림자가 선명하게 생기지만
강의실처럼 여러 각도에서 오는 형광등에 의해 그림자가 만들어지는 경우, 햇빛에 비해 그림자가 선명하지 않다.
이런 광원의 성질을 고려하여 그림자를 만들기 위해서 ray tracing 같은 기법을 사용한다.
(그림자를 계산하기 위한 ray tracing, rendering 을 위한 것이 아니다)
그림자를 만드는 간단한 알고리즘으로 2-pass algorithm 이 있다.
말 그대로 2개 단계를 통해 그림자를 만드는 알고리즘이다.
1-pass
shadow map 을 만든다.
빛을 물체에 쐈을 때 어디에 빛이 부딪히고 어디에 부딪히지 않는지 계산하는 과정이다.
계산 결과는 z 값을 저장하는 Z Buffer 에 저장한다.
구체적으로는 가상의 2차원 격자를 만들고, 각 격자칸을 향해 빛을 사선으로 쏜 뒤,
각 칸에서 빛이 얼만큼의 거리를 가서 부딪혔는지 그 거리 (z) 를 저장한 것이 셰도우 맵이다.
2-pass
하지만 빛과 그림자의 관계는 그냥 world 에 있는 빛과 물체만으로 결정된 데이터이다.
결국 그림자 역시 '관찰자' 에게 보여야 하기 때문에 관찰자 입장에서 그림자가 어떻게 보일지를 계산해야 한다.
이 과정을 두번째 패스에서 계산한다.
관찰자 입장에서도 스크린을 기준으로 광선을 쏜 뒤, 물체에 부딪히는 포인트를 찍는다.
이제 이 점의 색을 결정하기 위해 그 포인트와 빛 사이의 거리 d 를 잰다.
만약 이 거리 d 가 셰도우 맵에 저장했던 z 값 보다 크다면,
관찰자는 빛이 부딪힌 거리 뒤에 있는 모습을 보는 것이므로 그림자를 보게 된다. (어두운 색으로 표현)
만약 d = z 라면 빛이 부딪힌 물체의 상태를 그대로 보고 있는 것이므로 그림자가 아닌 물체를 보게 된다. (물체의 색으로 표현)
soft shadow
광원이 점광원이 아니라 area, 또는 volumn 형태일 때 그림자를 가리켜 soft shadow 라고 한다.
광원이 면적형태라면 빛이 위 그림과 같이 사방에서 날아오기 때문에 안쪽은 진한 그림자가, 바깥쪽은 옅은 그림자가 그려진다.
이런 그림자를 가리켜 soft shadow 라고 부른다.
'CS > 컴퓨터그래픽스와 메타버스' 카테고리의 다른 글
[그래픽스] 3. Rendering (1) - Shading (0) | 2025.06.08 |
---|---|
[그래픽스] 2. Modeling (0) | 2025.06.08 |
[그래픽스] 1. 컴퓨터 그래픽스 (8) | 2025.06.07 |