0. 3D Vtx & 3D Mesh

DV·2024년 5월 8일

DirectX_3D

목록 보기
1/13

📒3D Vtx


📌복습: VB & IB

  • 다각형을 그리기 위해서는 중첩된 정점이 발생함
  • Index Buffer: 정점을 재활용하므로 같은 정점을 두 번 만들지 않음
    • 메모리적 이점

📌Normal Vector & Tangent Vectors

3D Vertex에는 정점의 방향 정보가 추가됨

  • Normal: (정점 표면 방향 벡터) 표면의 수직 방향으로 향함
  • Tangent: (접선 벡터) Normal Vector에 수직이며 UV의 U축으로 향하는 벡터
    • DX에서 UV의 U축은 왼손좌표계 기준 우측으로 향하는 벡터임
  • Binormal: (종법선 벡터) Normal Vector에 수직이며 UV의 V축으로 향하는 벡터
    • Normal과 Tangent 벡터에 모두 수직한 벡터

[복습] Vertex Struct 변경 시

  • Input Layout 변경

📌추가된 벡터(방향정보)의 사용

: 3D Lighting

  • 표면의 normal 벡터와 빛의 진입각을 내적해서 빛을 받는 양 계산

    • 내적하는 이유: cos 그래프 사용하려고
    • 빛이 0도로 진입했을땐 1(최대), 90도로 진입했을땐 0(최소)
  • 연산 시 사용하는 Light 방향:

    • 90도를 기준으로 연산해야하므로,
    • 광원에서 나온 Light의 반대 방향을 사용해야 함
    • (~표면으로 들어온 Light의 방향)

📒3D Shader


📌Vertex Shader

: Vtx의 방향 계산

  • 단위벡터
    1. 확장: 좌표가 아닌 단위벡터이므로 0으로 확장
    2. Rotate에만 영향받아야 함: World Matrix는 Scaling이 이미 적용되어 있으므로 Normalize 필요
  • 좌표계: Local -> World 변환
    • Vtx의 정보는 Local 좌표계 기준으로 들어오지만,
    • Light의 World 방향과 연산 등
    • World상에서의 normal 방향을 표기해 사용해야 하므로
    • World좌표계로 옮겨줘야 함

📌Pixel Shader

: 최종 출력 색상 결정

  • Obj color * Light color * Light Pow
  • + Obj color * Light Amb color

📌Light Pow의 범위

: 0~1

  • 음수일 수 없음
  • Ambient color 등 빛의 개념을 의도대로 적용하기 위해선 0~1에서 잘라줘야 함

📒3D Debug Shading


📌Inner Glow

  • Sphere의 중앙일수록 Normal이 카메라를 보고
  • Sphere의 가쪽일수록 Normal이 카메라와 직교함
  • 카메라의 시선벡터 (부호반대)와 내적해서 유사도 계산
  • alpha = ~유사도

📒3D Mesh


📌Normal, 평면과 곡면

[평면]
: 극단적으로 표면의 각이 변화하는 경우

  • ex Cube Mesh
  • Normal 공유할 수 없음
  • 4*6 개의 Vtx 필요

[곡면]
: 표면의 각이 부드럽게 변화하는 경우

  • ex Sphere
  • Normal 중간값으로 둬서 공유해도 됨

📌Culling

: Cull-Back

  • 3D Light 연산

    • CW를 가정한 Vtx 세팅의 연산결과이므로
    • 뒷면(CCW)에서 보더라도 CW의 연산결과를 보게됨
    • ➡️ 그냥 뒷면을 그리지 않게 Cull back 사용
  • 뒷면을 그리려면

    • 두 면(앞면 + 뒷면)을 합쳐야 함

📌(곡면예시) Sphere Mesh 만들기

  • Vtx: 가로/세로 분할해 접근
  • Normal: 본인의 좌표가 Normal임
    • 중점에서 바라보는 방향이 표면의 방향이 되므로

0개의 댓글