visible-surface determination

2022. 6. 21. 20:25·CS/컴퓨터그래픽스

가시표면 결정 알고리즘은 두 종류가 있다.

  1. object-precision algorithm : 객체 단위로 보이는 것인가 아닌가를 확인
  1. image-precision algorithm : 픽셀 단위로 보이는것인가 아닌가를 확인

보통 객체단위가 계산이 줄고, 간단한 편이지만 그래픽스에서 가장 중요한것은 사실적인 표현이며 이를 위해서는 픽셀 단위로 표현하는게 더 좋다.

하지만 픽셀단위로 확인하면, 데이터 계산량이 많아지는데, 이를 해결하기 위한 방법은 픽셀의 Coherence(일관성)과 Sorting(정렬)이다.

정렬을 통해서 동일한 투영선 상에 존재하면 깊이순서로 , 즉 관측자로부터 먼 픽셀은 비가시픽셀로 선택하는 방법을 사용하고,

일관성을 통해서 규칙성을 찾아낸다.

해당알고리즘의 대표적인 방법들

두개의 방법의 대표적인인 알고리즘은 다음과 같다.

  1. object-precision algorithm
    1. back-face culling
  1. image-precision algorithm
    1. z-buffer algorithm
    1. a-buffer algorithm

Back-face culling

back face인지 아닌지 알기 위한 알고리즘으로 objec-precision 방법의 대표적 예다.

back face culling에서의 평면 방정식

일때 그 평면에서 직각인 백터는 아래와 같다. 즉, 각 계수가 주축인 선이 되는것,

back face culling은

N과 V백터의 내적(합)이, 양수일때는 뒷면, 음수일때는 전면 이라는 방법이다.

이 방법은 벡터의 내적값을 통해, 외부인지, 내부인지를 판별하는 방법으로 벡터에 대한 이해를 요한다. 모르겠다면 구글링을….

그래서 백터 내적을 구하는 방법은 두개다

z-buffer algorithm

image-precision방법의 대표적인 예시다.

x,y는 고정하고, z값을 깊이값으로 가져간다.

이 알고리즘을 행하기 위해서는 두개의 버퍼가 필요하다.

  1. frame buffer : 배경 컬러 저장
  1. z-buffer : 현재 가장 관측자와 가까이에 있는 물체의 z축을 기록하는 버퍼이다.

즉 z buffer algorithm은 한 점에서 가장 가까이에 있는 물체를 기록해두고, 이를 투영할때, 하나의 물체 뒤에 존재하는 것은 z-buffer에 존재하지 않기 때문에, 표현하지 않는 방식이다.

그런데 이렇게 하나하나의 계산을 하려면 매우 비효율적이다.

따라서 이를 효율적으로 하기 위해서 일관성을 이용한다.

즉 동일한 스캔라인에서는 z 값을 계산 한것을 활용해서 계산하는것이다.

z값(깊이감)의 공식은

이 z 값에서 다음 옆의 동일한 스캔라인의 z값을 계산하는 것은

과 동일하다.

이게 x+1로 가는 픽셀 스캔라인이고,

y+1은

이처럼 계산 할수 있다. 여기에서 m은 두 픽셀을 지나는 다면체의 기울기다.

A buffer algorithm

여러개가 겹쳐져 있어도, 제일 가까운것만 (z 버퍼에서 가장큰 값) 만 보여주는데, 단점이 존재한다.

바로 물체의 투과성을 고려하지 않는것.

때문에 이를 고려한, 방법이 a buffer이다.

즉 a buffer는 물체의 투과성을 고려해, 색이 섞이는것 까지 고려하는 방법이다.


Uploaded by N2T

반응형

'CS > 컴퓨터그래픽스' 카테고리의 다른 글

specular reflection  (0) 2022.06.21
illumination model  (0) 2022.06.21
parametric cubic  (0) 2022.06.21
3d viewing  (0) 2022.06.21
곡선과 곡면의 표현  (0) 2022.06.21
'CS/컴퓨터그래픽스' 카테고리의 다른 글
  • specular reflection
  • illumination model
  • parametric cubic
  • 3d viewing
진ddang
진ddang
안녕하세요 진땅의 개발자 블로그 입니다. 피드백은 환영입니다. 깃헙 : https://github.com/it794613
    반응형
  • 진ddang
    맛동산이
    진ddang
  • 전체
    오늘
    어제
    • 분류 전체보기 (199)
      • 일기 그리고 목표 (1)
      • 웹 (20)
        • 리액트 (19)
      • 앱 (115)
        • Swift 문법 (15)
        • Swift (65)
        • SwiftUI (32)
        • 리액트 네이티브 (3)
      • CS (30)
        • 컴퓨터그래픽스 (8)
        • 운영체제 (6)
        • 네트워크 (16)
      • 알고리즘 (13)
        • 백준 (12)
        • 프로그래머스 (1)
      • 대외활동 (7)
        • ict한이음(2022.04) (2)
        • 멋쟁이 사자처럼 (5)
        • Apple Developer Academy (0)
      • 다양한 내용들 (8)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    dispatchqueue
    Swift
    네트워크
    대외활동
    위젯킷
    스유
    swift concurrency
    ReactorKit
    c++
    운영체제
    문법
    cs
    spritekit
    영남대
    SwiftUI
    멋쟁이사자처럼
    멋사
    widget
    composable architecture
    알고리즘
    리액트
    후기
    TCA
    컴퓨터그래픽스
    uikit
    웹
    스위프트
    widgetkit
    Protocol
    백준
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
진ddang
visible-surface determination
상단으로

티스토리툴바