블로그 이미지
자신의 단점을 메꾸는 것을 단(鍛)이라 하고 자신의 강점을 갈고 닦는 것을 련(鍊)이라 하여, 두가지를 합친 것을 단련이라고 부른다. 붕대마음

카테고리

전체목록 (652)
참고사이트 (9)
Goal (4)
Travel (10)
My Life (94)
Game (35)
Game Review (7)
Game Plan (0)
Books (4)
English (1)
Optimizing (12)
Study (213)
유용한 것들_etc (44)
유용한 것들_func (20)
Unity (48)
Unreal (87)
작업장 (54)
RenderMonkey (6)
정리요망 (2)
따라잡기 시리즈 (0)
링크용 (0)
Total319,285
Today11
Yesterday27

early z

Study/Graphics / 2018.08.29 16:27

Early Z : 

- Z Test(Depth Test, 깊이 판정)를 미리 해서 비싼 Pixel연산을 피하자

- 일종의 픽셀단위 Culling 기법.


Z Test :

- 깊이 판정은 픽셀의 깊이 값을 깊이 버퍼의 깊이 값과 비교해서 픽셀의 가시성을 판단한다.

- 현재 픽셀이 다른 픽셀의 뒤에 있는지를 판단하여 뒤에 있다면 픽셀을 폐기하고,

  앞에 있다면 그 픽셀을 다음 단계로 넘겨 값을 z버퍼에 기록한다.


그렇다면 기존 Z Test의 순서는?

- 간단하게 말하자면 pixel shader(fragment shader) 다음.

   자세하게 말하자면 파이프 라인 참고.

- 왜 깊이판정을 ps 이후로 했을까?

- ps 연산에 따라 depth가 변경될 수 있기 때문에 ps 앞에서 하지 않음.


Early Z를 위해서는?

- 기존 하드웨어 동작방식이 바뀌는 거기 때문에 하드웨어에서 지원해 줘야 한다.

- Coarse-grained Z Culling vs Fine-grained Z Culling

- Depth Stencil buffer를 사용

- Early Z 비활성화 (Z buffer Optimization, 10page)

  - 그래서 ps에서 depth 값을 write(갱신)한다면 비활성화 된다. 

    (ps에서는 원하는 depth을 저장해야 하니)

  - ps에서 discard 하면 비활성화 된다.

    (ps에서는 버리려는데 write 할 수 있으니)

  - alpha-test을 쓸 경우 비활성화 된다.

    (discard와 마찬가지)

- 결국 ps에서 depth는 왠만하면 건들지 마라.


Early Z의 구현은?

- 하드웨어적으로 지원하고 적용될 수 있는 상황이라면 하드웨어에서

  내부적으로 사용되며 다른 멀티패스 기술(z pass 후 color pass)과 관련이 없다.

- OpenGL 이나 D3D 어디에서도 early z 작업을 지정하지 않는다.

  이 모든 작업은 하드웨어 관련 작업이며 사용 또는 미사용 설정은 할 필요 없이 

  하드웨어에서 자동으로 처리된다.

  즉, early z 는 실행가능한 조건충족하면 하드웨어가 알아서 지원한다.

- Depth/ Stencil buffer 사용

- Early Z를 하드웨어가 실행하는 조건을 충족시켜 주기 위해 사용하는 Early-Z Pass

- 1st pass에서 depth rendering, 2st pass에서 depth write 비활성화 하고 rendering.



Reference Link

- early-z를 이용한 pixel shader 최적화

- everything about early-z

- 3dmp - early z

- early z visibility test (early-z)

- early z and discard

- why discard pixel take a noticeable performance hit?

- 픽셀 셰이더의 기초

- wiki, HyperZ

- Applications of Explicit Early-Z culling, pdf

- Hierarchical Z-Buffer Visiblility

- microsoft early-z

- Triple Depth Culling

- Saving the Z-Cull Optimization

- Early Fragment Tests, Hi Z, Depth, Stencil and other benchmarks

- Early Fragment Test

- You Can Never Have a Custom Z Buffer Distribution and Early Z at the Same Time

- Early-Z

'Study > Graphics' 카테고리의 다른 글

early z  (0) 2018.08.29
hlod  (0) 2018.07.20
What is Texture  (0) 2018.03.10
texture format  (0) 2018.02.21
shader에서 채널값이 모자를 때...  (0) 2018.02.13
depth-precision-visualized  (0) 2018.01.31
Posted by 붕대마음

책 제목 : Head First Android Development

저자 : 돈 그리피스 & 데이비드 그리피스 지음

         우정은 옮김

출판년도 : 2018.07.15




Head First는 내가 개인적으로 좋아하는 시리즈다

아무것도 모르던 대학생 신입시절 어떻게 봐도 이해되지 않던 JAVA를

Head First Java 라는 책을 통해 쉽게 배울 수 있었고, 개발자를 업으로 삼기위해 

공부에 매진했을 때 늘 끼고 다녔던 책들 중 하나가 Head First Design Patterns 이었다.


사진 참고 : 한빛미디어

사진 참고 : 한빛미디어


우연히 기회가 되어 이번에 보게 된 책은 내게 있어 세번째 Head First 책이다.

나는 책을 읽을 때 서문이나 머리말을 꼼꼼히 읽는걸 좋아하는데 앞 부분이, 책의 전반적인 내용을 

설명해 주기 때문이다.


이 책도 서문에 보면 이 책의 타겟 독자를 명확하게 말해준다.

- 자바 프로그래밍 가능자.

- 안드로이드 앱 개발을 하고 싶은 자.

- 지루한 강의보다 실제로 뭔가를 해보고 싶은자


책의 내용을 살펴보면...

안드로드에 대해 간단하게 설명하고 안드로이드 개발 준비를 하는 것 부터 시작한다.



설치하는데 의외로 시간이 좀 오래걸린다.




모든 프로그래밍책의 기본 예제인 Hello World를 완성하였다.


예제실행에서 "Emulator: emulator: ERROR: x86 emulation currently requires hardware acceleration!" 와 같은

문제가 발생하여 바이오스 셋업에서 가상기를 켜 주었더니 잘 되었다.


그리고 책 예제 실행이 잘 되지 않아 avd manager의 advance에서 boot option을 cold boot로 바꿔 준 이후로는 

예제 코드가 잘 동작하였다.


그 이후로는 디자인편집기를 활용하여 레이아웃(버튼)을 만들고 OnClick으로

버튼 이벤트를 연결하여 처리하는 방법, 메세지 보내는 앱을 만들어 실제 디바이스 에서

앱을 테스트 하는 방법에 대해 설명한다.


대부분 어떤 컨트롤이 있고 어떻게 활용하는지 를 다양한 예제를 통해 설명 해 준다.

이렇게 책의 내용을 하나씩 따라가다 보면 어느새 근사한 앱을 만들 수 있고

조금씩 안드로이드에 익숙해 지는 자신을 발견 할 수 있다.


책을 읽으면서 특히 좋아했던 부분은 "지금까지 이런 작업을 했습니다."이다.

처음에는 간단간단 한 앱을 만들지만 뒤로 갈수록 조금씩 기능을 추가하다 보면 예제가 길어지고

여태까지 어떤 작업을 했는지 잊게 되는데 위와 같이 현재까지 한 내용을 중간중간에 되짚어 준다.


중간중간에 위와같이 이 예제에서는 몇단계의 작업단계가 있고 현재 어디까지 했는지를 계속해서 알려주는 부분도 좋았다.


그리고 "핵심정리"를 통해 내가 따라 한 예제에서 예제를 따라하기에 급급해 놓칠 수 있는

예제의 주 개념을 간결하게 따로 페이지를 구성하여 책을 공부한 개념을 한번 더 되짚어, 

오래동안 기억할 수 있게 해준다.


그리고 군데군데 "바보같은 질문이란 없습니다."를 통해 예제를 따라하면서

궁금해 할 수 있는 내용들을 미리 정리해서 알려준다.


책을 읽다 보면 의외로 이 "바보같은 질문이란 없습니다."의 내용이 예제를 따라하다가 

문득문득 뜨는 궁금증을 잘 풀어준다.


중간 중간 현재 내가 어떤 내용을 보고 있고, 얼마만큼 했고, 어떤걸 추가로 할 건지 계속해서 알려주는 부분이 좋았다.

사실 기술서가 두꺼우면 읽기가 부담스럽기 마련인데 Head First책은 우선 그림이 많고,

되짚어 주는 부분이 많아 다른 기술서에 비해 훨씬 빠르고 쉽게 읽힌다.

만약 이 책이 다른 기술서 처럼 기술에 대해서만 명확한 설명으로 끝냈다면 책이 훨씬 얇아졌을 것이다.

그래서 만약 책의 두께만으로 부담이 된다면 의외로 술술 읽혀서 생각보다 부담스럽지 않을거라 생각한다.


책을 읽으면서...

현재 언리얼과 유니티라는 게임 엔진을 통해 게임을 제작하면서 안드로이드에 대해 어느정도 알고 있었는데

이 책을 통해서 안드로이드 시스템을 '잘' 이해하게 되는 계기가 되었다.

위트있는 그림체와, 쉽게 읽혀지는 대화체, 그리고 누워서도 생각하게 만들었던 질문들,

Head First 시리즈의 일관된 학습 철학이 이 책에도 고스란히 녹아 있었다.

이 모든 것들이 좀 더 재미있게 학습하고, 깊이 있게 이해하고, 지루하지 않게 학습하기 위한 방법들이다.

그리고 정말 늘 생각하는 거지만 책의 편집은 정말 잘하는 것 같다.

기술서들의 특징은 대부분 딱딱한 그림체에 딱딱한 형식의 설명이 주를 이루는데 이 책은

기술설명에 있어서 독자가 쉽게 이해하도록 대화체를 쓰기도 하고 흥미를 유발하기 위해 위트있는 그림을 넣기도 한다.

사실 모바일 게임 개발을 6년정도 하면서 안드로이드를 어느정도 알고 있다고 생각했는데,

게임개발을 위한 안드로이드만 알았지 안드로이드 자체에 대해서는 자세히 알아본적이 없었다.

이 책을 통해서 안드로이드에 대해, 그리고 안드로이드 개발에 대해 좀 더 자세히 알수 있어 좋았다.

자바를 다룰 수 있는 개발자가 안드로이드개발을 시작하려 한다면 이 책은 좋은 동반자가 되어 줄 것이다.




Reference Link

- android studio download

- Head First Android

- 책 소개 및 목차, 구매 (한빛미디어)




Posted by 붕대마음

hlod

Study/Graphics / 2018.07.20 11:59

원문 : http://www.cs.unc.edu/~walk/hlod/

원문의 내용을 필요부분 번역하였습니다.

원문을 보길 강력추천합니다.


그림 1. Double Eagle 대형선박. 이 모델은 126,630개 오브젝트, 그리고 82,361,612 삼각형으로 구성되어 있다.


전통적인 LOD 방식으로는 한번에 하나의 객체만 단순화 할 수 있다.

그래서 여러 객체를 포함하는 화면이 주어지면 이 방식은 장면 전체가 아닌

개별 객체에 대해서만 에러를 최소화 할 수 있다.

HLOD(Hierarchical Level Detail, 계층적 lod)는 전통적인 방식의 LOD를 오브젝트의 

계층적 집합체로 일반화 하는 것이다.

장면의 개별 부분을 같이 단순화 하는 HLOD를 생성하여, 특히 적극적인 단순화를 위해

좀 더 괜찮은 전역 근사값을 생성한다.

원하는 목표 폴리곤 갯수에 따라, LOD는 화면에서 모든 오브젝트들을 렌더하지 못할 수도 있어 균열을 만들수 있다. 

그림 2. Double Eagle의 LOD. 7,887개, 1,922의 페이스로 구성.


HLOD는 보다 견고한 근사값을 제공한다. (그림 3 참고)

그림 3. Double Eagle의 LOD. 7,710개, 1,914의 페이스로 구성.

동적 장면에서, 가능하다면 동적으로 HLOD를 비동기로 계산하여 병렬 하드웨어의 이점을 얻는다.


중요 

충실도 : 오브젝트를 그룹화하여 HLOD를 만들므로 시각적 품질이 좀 더 많이 근사치만큼 올라간다.

자동 생성 : 사용자 개입없이 장면 그래프(scene graph)의 HLOD를 계산한다.

보편성 : 위상 정보나 표현에 대해 아무런 가정을 하지 않는다.

효율성 : LOD는 정적이므로 디스플레이 목록을 사용하여 렌더링 할 수 있다.

유연성 : HLOD 장면 그래프 구조는 일정한 프레임 속도 모드이미지 품질 모드로 렌더링 할 수 있게 해 준다.


HLOD 만들기

기존 방식의 LOD는 환경에서 단일 노드의 지오메트리를 나타내지만, HLOD는 장면 그래프의 전체 분기 또는,

다중 노드의 지오메트리를 나타낸다.

장면그래프를 사용해서 환경을 표현하고 먼저 각 노드에 대한기준 LOD를 계산한다.

그리고 나서 각 노드에서 해당 LOD를 기반으로 상향식으로 HLOD를 계산한다.

- 단말 노드(leaf node, 맨 마지막 끝 노드)의 HLOD는 그 노드의 LOD와 같다.

- 장면 그래프에 있는 내부 노드의 HLOD는 노드 자체에 속한 모든 LOD를 하위 노드의 HLOD와 

  결합하여 계산된다.


HLOD 렌더링

기존 LOD 렌더링 시스템에서는, 출력 알고리즘이 장면그래프의 모든 오브젝트나 노드에 대해

적절한 LOD를 렌더링 한다.

노드의 HLOD는 해당 노드의 지오메트리 뿐만 아니라 하위 노드까지의 근사치 이기 때문에,

장면그래프를 순회하면서 HLOD를 렌더하면 굳이 하위노드는 순회 할 필요가 없다. (그림 4 참고)

이렇게 하면 적절한 시점에 단지 HLOD를 렌더링함으로써, 장면의 전체 부분을 적극적으로 제거할 수 있다.

이미지 품질 모드에서, HLOD와 연관된 오차범위가 화면공간에 투영된 오류제약조건을 만족시킬 때 까지

장면 그래프를 순회하여 렌더링 한다.

목표 프레임 속도 모드에서, 시간적 제약보다 더 많은 폴리곤을 렌더링 할 때 까지 

최대한의 투영 오차를 가지는 가장 조잡한 HLOD를 만든다.

그림 4. 얼굴 모양을 만들기 위해 LOD와 HLOD를 사용하여 렌더링. 

얼굴에서 시작하여 장면그래프를 순회하는 알고리즘이다.

시야가 멀기 때문에, HLOD 0을 사용하여 얼굴모양을 그린다.

이 HLOD는 전체 장면그래프를 나타내므로 시스템은 순회를 멈춘다.




Reference Link

- Unity AutoLOD

- Unreal HLOD

- 번역 원문

- 3D Engine Design for Virtual Globes, page 371

'Study > Graphics' 카테고리의 다른 글

early z  (0) 2018.08.29
hlod  (0) 2018.07.20
What is Texture  (0) 2018.03.10
texture format  (0) 2018.02.21
shader에서 채널값이 모자를 때...  (0) 2018.02.13
depth-precision-visualized  (0) 2018.01.31
Posted by 붕대마음

최근에 달린 댓글

최근에 받은 트랙백

글 보관함