모델링

폴리곤 기반 메시

 

좌표 변환

TRS 매트릭스

Basis

 

orthonormal, standard / non-orthonormal, non-standard / orthonormal, non-standard

orthonormal ( basis ) : local space의 각 dimension축(basis) 이 독립적인지 ( 직교인지 ) x 각 dimension축시 단위벡터인지 여부

standard : local space의 각 dimension축이 기준 직교좌표계의 축과 일치하는지 여부

 

렌더링

렌더링 파이프라인

IM → VS → RS → FS(PS) → OM ( shader = program at GPU )

 

VS ( vertex shader )

  1. view transform
    world space → eye(camera)의 location & 3dimension space를 통해 camera space로 변환 {u, v, n, EYE}
    [Eye] = 카메라pos, At = 카메라가 보는 dir → [n], Up X n = u, u X n = [v]

  2. projection transform

    1. view transform
      world space → eye(camera)의 location & 3dimension space를 통해 camera space로 변환 {u, v, n, EYE}
      [Eye] = 카메라pos, At = 카메라가 보는 dir → [n], Up X n = u, u X n = [v]


    2. projection transform

      1. view transform
        world space → eye(camera)의 location & 3dimension space를 통해 camera space로 변환 {u, v, n, EYE}
        [Eye] = 카메라pos, At = 카메라가 보는 dir → [n], Up X n = u, u X n = [v]

중간 전달 과정

 

vertex array

attribute

  • position ( object space )
  • color
  • texture coordination ( uv mapping )

caculated

  • normal ( 자신을 포함한 polygon들의 normal 평균 )
    • tangent space ( tangent + bitangent ) 

index array

attribute

  • index in vertexarray

Polygon

attribute

  • normal
  • index array

calculated

  • normal ( position of vertexes )

 

 

Rasterizer

클리핑, 원근 나눗셈, 뒷면제거, 뷰포트 변환, 스캔 전환

클리핑 clipping

  • view frustum(절두체)에 걸치는 object를 clipping ( 절단면 반영하여 GPU가 오브젝트 재구성 )

원근 나눗셈 perspective division

사다리꼴을 직육면체 projection으로 변환 (projection transform)

뒷면 제거 back face culling

z축값 무시하고 폴리곤의 포함 버텍스가 시계/반시계 체크

뷰포트 변환 viewport transform

  • NDC(Normalized Device Coordinate) → 뷰포트(VPT)
  • 기준점을 중심에서 모서리로 옮김 ( 언리얼은 좌상단이 0, 0, 우하단이 1, 1 / [0, 1] 정규화 )

스캔 전환 scan conversion

  • 뷰포트(VPT) → Screen Space ( UV 2차원 공간 )
  • pixel을 기준으로 fragment를 생성하여 각 fragment의 attribute는 자신을 포함하는 poligon의 vertex들의 attribute를 보간하여 적용
    • dx12의 multi 머시기는 x4배수
  • color, normal, tangent 등 

 

프래그먼트 셰이더

  • 라이팅 / 텍스쳐링

텍스쳐링

  • 텍스쳐는 texel들로 구성
  • rasterize단계에서 보간된 attribute에 따라, 각 fragment가 참조할 texel coord를 판단  

표면 파라미터화 surface parameterization

  • UV 매핑
    • 패치 ( UV상의 프래그먼트 )
    • 차트 ( UV에 입혀질 이미지 )
    • 아틀라스 ( 여러 차트를 커다란 텍스쳐에 모으는 것

기본적인 샘플링 예시

 

기본적인 Anti aliasing 예시

  • 밉맵 생성 ( 산술평균 기반 다운샘플링 )

 

라이팅

  • 퐁 모델 ( sum = diffuse + specular + ambient + emissive ) ( s는 light source의 RGB / m는 물체표면의 RGB )
    ox는 독립곱 ( r, g, b ) ox ( R, G, B ) = ( rR, gG, bB )

각도별 감쇄율 조절 필요시, exp(cos, n) 처리 ( specular )
간접조명 ( ambient ) : n차반사를 통한 은은한 빛 ( input vector.direction = anywhere ) / 발광 ( emissive )
Pre-fragment Lighting ( l = light vectro, n = normal vector, v = camera space vector )

 

Z buffering

  • pixel에 buffer된 z값과, fragment의 z값을 비교 ( glEnable ( GL_DEPTH_TEST ) )
    stensil buffer
    • 후면버퍼에서 추가계산이 필요없는 픽셀 저장
    alpha값 적용

 

기타

normal mapping

R = ( normal_x + 1 ) / 2 => normal_x = 2R - 1

G = ( normal_y + 1 ) / 2 => normal_y = 2G - 1

B = ( normal_z + 1 ) / 2 => normal_z = 2B - 1

=> 그래서 폴리곤의 노말벡터를 따라가는 중립은 ( 0.5, 0.5, 1 )

아마 texture가 적용된 polygon의 tangent space에서의 normal값을 world space로 transform하는듯

 

shadow mapping

  • shadow mapping을 위한 ray tracing 단계가 별도로 존재
  • ray내 충돌체들(fragment단위)간에 light와의 distance 비교를 통해 shadow 적용여부 체크 ( nearest point sampling )
    • light source → 각도별 lay 단에서, 양자화된 각도별 nearset distance를 구함
    • 이후 영향범위 내 각 object의 texel에 대한 light의 가려짐 판정 시, light - texel distance VS buffer nearest distance 비교하여 차이가 나면(nearest가 더 작으면) 가려짐 판정

 

자글그림자의 원인

  • 충돌지점좌표는 연속적인 그림자인데 반해, 비교대상 ( 버퍼에 저장되어있는 타겟 ) 은 양자화된 texel단위이기 때문에, 해당 texel의 영역내에있는, 보다 멀리있는 점들은 연속표면임에도 덮임판정을 받음
  • 그래서 bias를 무시할 범위를 파라미터로 관리함

 

 

Ambient occlusion

  • 샘플 지점이 주변으로 부터 얼마나 닫혀있는 지
  • Normal vector 기준 지정된 비산각(spread)/유효거리(max distance) 내 probe ray를 통해 object
  • 오브젝트에 hit된 probe ray 비율에 비례하여, Bright ↔ dark
  • Property
    • sample : probe ray 횟수 ( spread와 합해서 밀도 )
    • birght/dark :
    • spread : 프로브 비산각 범위
    • max distance : 유효 프로브 거리
    • reflective : surface의 노말이 아니라, 입사각 기준
    • fall off : 감쇠효과 (거리기준)

'3D Graphics' 카테고리의 다른 글

Graphics 개요2  (0) 2024.05.22
기본 수학  (0) 2024.05.22
FBX 구조  (0) 2024.05.22
DX11 레퍼런스  (0) 2024.05.22

+ Recent posts