게임 프로그래밍 용어

2011. 4. 13. 20:16C# And Unity


3D 용어등을 정리하고자 한다.

 

// 해골책

vertex(정점) : 수학적인 연산에서는 point(점)을, 구체적으로 프로그래밍할 때는 vertex라고 한다.

pixel(화소) : 화면상에 실제로 보이게 되는 물리적인 점을 말한다.

affine transform : 이동과 회전만으로 이루어진 행렬.

polygon : 3개의 vertex로 만들어진 삼각형.

edge(모서리) : polygon에서 vertex와 vertex를 연결하는 직선.

mesh : polygon이 모여서 만들어진 3차원 공간의 object(객체).

shading : polygon에 음영을 넣는 작업.

mapping : 3차원 정점에 이미지를 입히는 작업.

texture mapping : 3차원 물체에 texture를 입히는 것.

                         이때 이미지를 texture, 또는 texture map이라고 한다.

FVF(Flexible Vertex Format) : 사용자 정의 정점 형식.

T&L(TnL) : Transform & Lighting

Vertex Buffer : 정점을 모아두는 일종의 메모리.

                    비디오 메모리와 시스템 메모리 두 가지의 메모리를 사용.

interpolation : 보간.

로컬 좌표계 : 최초에 3차원 데이터가 생성되는 시점에서 기준이 되는 원점을 중심으로 한 좌표계.

TM(Transform Matrix) : 로컬 좌표계를 월드 좌표계로 변환하는 행렬.

World Transform : 로컬 좌표계를 월드 좌표계로의 변환하는 것.

Camera Transform : 뷰변환.

                            3차원 월드 좌표계를 카메라를 기준으로 한 카메라 좌표계로 변환하는 것.

Projection Transform : 투영변환.

                                3차원 좌표계를 2차원 좌표계로 바꿔주는 변환.

                                orthographic projection(직교투영)과 perspective projection(원근투영).

frustum : 절두체.

material : 재질. 메시(혹은 물체)의 표면 상태를 말하는 것.

             빛이 물체의 표면에서 반사되어 변화된 뒤 사람의 눈에 들오오기까지의 과정을

             수학적으로 모델링하기 위해서 사용하는 값들.

             주변광, 확산광, 반사광, 방출광이 있다.



ambient(주변광) : 최저 평균 밝기. 똑같은 양으로 모든 면에서 나오는 빛.

diffuse(확산광) : 표면의 모든 점들에 균일하게 비춰지는 빛.

specular(반사광) : 특정한 방향으로만 반사하는 빛.

                           광원의 위치와 카메라의 위치에 따라서 달라진다.

emissive(방출광) : 메시 표면에서 자체적으로 방출되는 빛.

                           이 빛이 다른 메쉬에 영향을 주지는 못한다.

raytrace(광선추적) : 빛이 물체 표면에서 반사되어 인간의 눈에 도달하기까지의 과정을 시뮬레이팅.



ambient light : 주변 광원. 3차원 공간 내에서 메시의 배치나 위치와는 전혀 상관없이 똑같은 양으로 모든 곳을 비추는 빛의 강도를 말한다. 방향과 위치가 없으며, 색깔과 강도만이 존재한다.

point light : 점 광원. 직관적으로 가장 쉽게 생각할 수 있는 빛이다. 예를 들면, 백열전구를 생각하면 된다. 광원의 위치, 방향에 따라 빛의 강도가 달라진다.

directional light : 방향성 광원. 모든 광원의 방향이 하나의 방향을 갖는 것으로 완벽하지는 않지만 태양을 예로 들 수 있다. 광원의 위치는 상관 없고, 방향이 가장 중요한 요소다.

spot light : 점적 광원.  정해진 위치와 범위에만 비추는 특수한 조명을 말한다. 흔히 영화나 쇼 무대에서 사용하는 점적 광원 조명을 생각하면 된다.

IB(Index Buffer) : 정점을 저장하기 위한 정점 버퍼와 마찬가지로 정점의 인덱스를 보관하기 위한 전용 버퍼를 말한다.

임포스터: 풀같이 많은 매쉬가 필요한 곳에 사용한다. 카메라가 보는 방향으로 해당 메쉬가 움직인다.
              즉 옆에서 보면 얇은 매쉬로 보이지만, 이걸 회전하면 항상 정면을 보게 된다.
정식 명칭 : 2D Imposter

 
* 정의
: 씬의 일부를 이미지로 캐싱함으로써 디테일을 잃지 않고 3D 씬의 기하학적 복잡성을 감소시키는 데 있다. 씬의 3D 오브젝트들은 개별 이미지로 캡춰된다. 최종 씬이 생성될 때, 캐시된 이미지 혹은 imposter 라 알려진 것들이 3D 오브젝트 대신에 렌더링된다. 이러한 방식으로 임포스터는 복잡한 3D 오브젝트에 대한 단순화된 표현이 된다. 
쉽게 말해...3D 오브젝트를 스크린샷하여 2D이미지화 하여 사용한다는 것임
 

* 주의사항

 - 잘쓰면 저비용, 고효율의 효과를 볼수 있음

 - 멀리 있거나 작은 물체 혹은 고정된 뷰에서는 효과가 탁월하지만 그외의 경우 오히려 문제됨


-  SSAO, Screen Space Ambient Occlusion 좀더 깊이 있는 그림자 효과를 준다.
- min map: 2개의 리소스를 준비해서 멀리 있는 물체는 단순한 텍스쳐를 입힌다.
- 컬링 : 보이는 곳만 렌더링 한다. 성능 향상

-LOD란 "멀리있는 물체는 잘 보이지 않는다"는 생각을 바탕으로, 렌더링될 이미지에 기여도가 작을 경우 간략하게 표현하는 방법이다. LOD는 기여도를 나타태는 LOD단계를 이용하여 간략한 정도를 정한다. 이 때 어떤 방법을 이용하여 LOD단계를 얻어내느냐에 따라 성능이나 속도에 차이가 생긴다. 폴리곤 자체를 단순화 시켜버린다.


- FOV : Field of View 화면을 어디까지 보여줄것인가.https://mirror.enha.kr/wiki/FOV

UV 좌표:  3d에서 말하는 UV란

일반적으로 3차원을 말할때 XYZ좌표.. 가로(폭)-세로(높이)-깊이 라고 지칭합니다.

그걸 3D에서는

사용자좌표값으로 UVW.. 알파벳순서 XYZ의 앞 3개의 알파벳을 사용하게 됩니다.

 

UVW에서 W를 제외한 UV.. 즉 XY좌표입니다.

이건 절대상의 좌표가 아닌 사용자에 의한 XY좌표를 말하는 것입니다.


- 노말맵핑 : 하폴의 렌더링 이미지를 텍스쳐로 뽑아내어 로폴에 입힐때 사용

- 노말맵:

노말맵을 얘기하기 전에 먼저 노말을 얘기합니다. Normal이란것은 가령 정점에 잇다고 햇을때

(보통 정점에 있지만 폴리곤전체에 노말한개이런식으로 계산할때도 있습니다. ) 

그 정점과 빛 사이의 각도를 재서 이 정점이 빛을 현재 얼마나 받고 잇는지 처리하기 위한 방법입니다. 

정점에 잇는 노말과 빛이 일직선이면 가장 빛을 많이 받고, 만약 정점과 노말이 서로 반대 방향이면 빛을 받지 못하는겁니다.  

이 노말맵이란 것은 이런 노말 (노말은 vector로 표현됩니다 즉, ,x,y,z로 방향을 표시합니다) 을 텍스쳐 픽셀 하나하나의 값에다가 

즉 rgb값으로 저장해서 3D모델의 빛에 대한 표현율을 비약적으로 높인것입니다.  

즉 20개의 정점으로 이루어진 원형구가 있다면 이것은 분명 폴리곤 면이 각지게 보일것입니다. 

그러나 이 원통 구에다가 노말맵 방식으로 만들어진 텍스쳐를 맵핑하여 그 노말맵과 빛과의 계산을 하여(보통 내적을 합니다.) 

3D모델이 2D 이미지로 맵핑될때의 그 지점의 색깍을 구하게 되면 눈에 확 띌정도로 부드럽게 보입니다. 

노말맵을 만들어주는 여러가지 툴이 나와있습니다. 3dMax, Maya, photoshop등등


- Decal

  스티커 같은것, 벽돌에 붙은 탄흔 같은걸 표시 할때

  특정 텍스쳐 위에 별도의 텍스쳐를 뿌리는