Post List

2018/01/02

DirectX3D__빌보드(Billboard)

이번에는 빌보드에(Billboard) 대해 알아보겠습니다. 빌보드란
3D 게임을 플레이하다보면 어떤 방향이든 항상 카메라 정면만 바라보는 오브젝트? 들이 있습니다. 만들어진 게임에 따라 다르겠지만, 풀이라던지, 스킬 이펙트라던지.. 등등 있겠지요. 이처럼 텍스쳐가 항상 카메라를 응시하듯 정면을 바라보게 처리하는 기법을 빌보드라고 합니다. 빌보드의 특징은 카메라가 어느 방향에서 바라봐도 항상 카메라의 정면을 향하고 있다는 것이죠.

빌보드는 종류는 어떤 축에 고정하느냐에 따라 다르겠지만 많이 사용하는 축으로 나뉘게되면, Y 빌보드 전체 축에 대한 빌보드 입니다.

Y 빌보드는 일반적으로 지면에 고정된 상태에서 Y축에 대해서만 회전하는 빌보드를 말합니다. 이는 카메라 변환 행렬의 성분중에서 회전행렬 부분만 역변환하여 빌보드 행렬을 구할 있는데요, 카메라의 회전행렬에서 y 회전행렬값을 가져와 y 역행렬을 구한 빌보드 행렬의 y 변환행렬로 사용하면 된답니다.

그럼 전체 축에 대한 빌보드를 알아보겠습니다.
주로 파티클 이펙트 효과를 출력할때 많이 사용되는데요, y 빌보드와 원리는 비슷합니다. 카메라 행렬의 회전 성분 전체를 역행렬로 사용하시면 됩니다.
카메라 변환행렬에서 이동에 관한 성분만 제외하고 전체행렬을 역행렬로 변환한 , 빌보드를 적용하려는 오브젝트의 변환행렬에 회전행렬값을 적용해주시면 됩니다.

행렬에 대해 잠시 알아보겠습니다.
[ X 회전행렬 ]
1
0
0
0
0
cosθ
-sinθ
0
0
sinθ
cosθ
0
0
0
0
1



[ Y 회전행렬 ]
cosθ
0
sinθ
0
0
1
0
0
-sinθ
0
cosθ
0
0
0
0
1

[ Z 회전행렬 ]
cosθ
 -sinθ
0
0
sinθ
cosθ
0
0
0
0
0
1
0
0
0
1

[ 단위 변환 행렬 ]
1
0
0
0
0
1
0
0
0
0
1
0
0
0
0
1

[ 이동 변환 행렬 ]
1
0
0
0
0
1
0
0
0
0
1
0
x
y
z
1

[ 크기 변환 행렬 ]
x
0
0
0
0
y
0
0
0
0
z
0
0
0
0
1

DirectX9에서 Y 빌보드에 대해 간단하게 코드로 보여드리자면,

1
2
3
4
5
6
7
MatBillBoard._11 = MatCamera._11;
MatBillBoard._13 = MatCamera._13;
MatBillBoard._31 = MatCamera._31;
MatBillBoard._33 = MatCamera._33;
D3DMatrixInverse(&MatBillBoard, nullptr, &MatBillBoard)
cs
MatBillBoard 빌보드를 적용할 오브젝트의 행렬이 되겠고, MatCamera 현재 카메라의 변환행렬이 되겠습니다.
Y 빌보드를 적용하기 위해 Y 회전행렬에 해당하는 값들을 빌보드 행렬에 넣어주면 되겠지요, 그리고 MatBillBoard행렬을 역변환하게 되면 된답니다.

아니면 카메라의 변환행렬을 먼저 역변환 빌보드 행렬에 적용하셔도 동일합니다.