SlideShare a Scribd company logo
1 of 20
Download to read offline
게임 엔진(2)
 활용팁
 김성익(noerror@hitel.net)
             2006.4.30
개요
• 게임 엔진을 구성하는 데 고려해 볼 것들
• 몇 가지 처리 방식 제안
알파 메시 렌더링 정책(1)
•   알파 텍스처를 쓴 메시나, 버텍스 알파를 사용하는 메시는 나중
    에 그린다.




•   알파 메시에 대해서는 멀리 있는 것부터 가까운 메시 순으로 렌
    더링한다. .
알파 메시 렌더링 정책(2)




• 투명한 메시(혹은 오브젝트)에 대해선 겹치지 않도록
  2pass 렌더링한다.
DrawPrimitive 정책(1)
• 최적화 전략
  DrawPrimitive 를 적게 함
  속도상의 이득이 있는 순서대로 그림

• 제안 : DrawPrimitive 시 실제로
  DrawPrimive 하지 않고, 리스트에 추가함,
  EndScene 호출시나, 순서를 맞춰야 하는
  경우 Flush 함
DrawPrimitive 정책(2)
•   Flush   시 소팅해서 찍음
    동일한     텍스처끼리
    동일한     렌더링 스테이트끼리
    렌더링     스테이트가 적게 바뀌도록

•   실제 DrawPrimitve 시
    찍은 메시와 다음에 찍을 메시가 동일하고 렌더링스테이트, 텍
    스처까지 동일하며, 찍을 메시의 버텍스 수와 인덱스 수가 적다
    면 머지해서 찍는다. (버텍스 수가 적어서 머지할만한 메시는 버
    텍스 정보과 인덱스 정보를 저장해둠)
DrawPrimitive 정책(3)
•   머지해서 찍을 때는 가능한 상황이라면 D3DLOCK_DISCARD 없이
    D3DLOCK_NOOVERWRITE로 LOCK
DrawPrimitive 정책(4)
•   엔진 사용하는 레벨에서도 어느 정도 조절을 해준다면 별다른
    처리 없이 성능 향상이 가능한 부분도 존재

•   예를 들어 UI를 찍을 경우 동일한 텍스처 위주로
    DrawPrimitive를 한다면, 실제 머지 되기 때문에 적은 횟수로
    DrawPrimitive 가 됨 - 내부적으로 적은 수의
    DrawPrimitive를 위해서 최적의 UI나 파티클 출력 내용물의
    버텍스 리스트와 인덱스 리스트를 만들 필요가 적어짐

•   셰이더 상수 관련
렌더스테이트관리(1)
• 렌더링시 큰 영향을 미침
• 상태 변수가 많아서 관리가 어려움
• 관리가 안될 경우 오브젝트 렌더링 순서에 따
  라 렌더링 상태가 바뀌는 괴 현상 생김
렌더스테이트관리(2)




•   DrawCharacter 에 SetRenderState(D3DRS_ZFUNC,
    D3DCMP_LESSEQUAL); 를 추가하면 문제가 안 생기지만, 추후에
    도 단 하나의 렌더링 루틴에서 새로운 State 를 사용할 경우 모든 렌더
    링 루틴에서 그 상태에 대한 처리를 해주어야 함
렌더스테이트관리(3)
• 제안 : 비트 연산을 통해서 하나의 프래그에
  해당 정보를 저장한다.
렌더스테이트관리(4)




•   렌더링 스테이트를 하나의 데이터로 관리가 가능해지므로 관리
    가 쉽고, 직관적으로 한 눈에 상태를 알 수 있음.
•   상태의 데이터가 적기 때문에 오브젝트를 렌더링 스테이트 별로
    소팅시 비교가 용이함
렌더스테이트관리(5)
•   특별히 세팅을 전혀 안할 경우 0가 되기 때문에 나중에 하나의
    오브젝트에서만 렌더링시 CULL 방향을 수정한다고 해도 문제
    없이 추가 가능함
렌더스테이트관리(6)
•   해당 값이 비트 단위로 저장되기 때문에 간단한 비트연산으로
    RenderState 함수 호출을 줄일 수 있음 (중복된 상태 변환이 없어짐)




•   SetRenderState 함수 호출의 최소화 : 렌더스테이트 별로 소팅 후
    렌더링
부동 소수점 수 압축
•   애니메이션의 키 프레임 값 등 정밀도가 조금 떨어져도 되며 메
    모리를 많이 차지하는 float을 압축해서 메모리 사용 최적화로
    성능 향상
SSE를 활용
• SSE의 특징
 부동 소수점 곱하기를 동시에 여러 개를 한다
 연산 속도는 증가되지만 레지스터간 이동(형 변환)의
 부담을 고려하지 않으면 속도 향상이 적거나 없다
 메모리는 16 바이트 align 되어야 한다

• 데이터 형식 변환 등의 적극적인 최적화가 필요하다
이벤트 객체를 이용한 동기화
          (1)
•   Mutex, CriticalSection 등과 Event 객체의 차이점 :
    Event는 수동으로도 동기 상태를 제어할 수 있다.




•   백그라운드로 로딩하도록 처리 때 미처 로딩이 마치기도 전에
    사용을 요청한다면 그 동작을 우선 로딩하여 해당 이벤트를 Set
    해주면 사용 쓰레드는 우아하게 하던 일 계속함 (단, 로딩이 긴
    것보다는 게임 중간에 약간 밀리는 일이 있더라도 로딩이 짧은
    것이 좋다는 가정.)
이벤트 객체를 이용한 동기화
          (2)
•   엔진 레벨에서 멀티 쓰레드를 잘 활용한다면 쾌적한 게임 구현
    에 도움이 됨

•   만약 로딩만 하는 쓰레드를 운영한다면




•   이처럼 구성하면 로딩 안 할 때도 과부하가 생김
이벤트 객체를 이용한 동기화
          (3)
•   강제로 Sleep 루틴을 넣어서 로딩이 없을 때는 100ms 에 한번씩 루
    프에 오도록 수정됨. 하지만 로딩시 Sleep 중이면 최대 100ms 의 지
    연이 생김




•   아이템 추가하고 SetEvent 해주면 LoadThread 가 바로 깨어나서
    우아하게 로딩을 시작함. (ResetEvent(m_Loading) 이벤트 부분과
    아이템 추가시 SetEvent 부분은 동기화가 고려 안된 예임.)
질문/의견

More Related Content

What's hot

Hierachical z Map Occlusion Culling
Hierachical z Map Occlusion CullingHierachical z Map Occlusion Culling
Hierachical z Map Occlusion CullingYEONG-CHEON YOU
 
빠른 렌더링을 위한 오브젝트 제외 기술
빠른 렌더링을 위한 오브젝트 제외 기술빠른 렌더링을 위한 오브젝트 제외 기술
빠른 렌더링을 위한 오브젝트 제외 기술YEONG-CHEON YOU
 
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법YEONG-CHEON YOU
 
영웅의 군단의 테크니컬 아트 - 황재철, 유나이트 코리아 2014
영웅의 군단의 테크니컬 아트 - 황재철, 유나이트 코리아 2014영웅의 군단의 테크니컬 아트 - 황재철, 유나이트 코리아 2014
영웅의 군단의 테크니컬 아트 - 황재철, 유나이트 코리아 2014NDOORS
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현YEONG-CHEON YOU
 
Unity3D - Asset bundle
Unity3D - Asset bundleUnity3D - Asset bundle
Unity3D - Asset bundleSungWook Hong
 
NDC2015 광개토태왕 테크니컬 아트
NDC2015 광개토태왕 테크니컬 아트NDC2015 광개토태왕 테크니컬 아트
NDC2015 광개토태왕 테크니컬 아트재철 황
 
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술Ki Hyunwoo
 
CUDA를 게임 프로젝트에 적용하기
CUDA를 게임 프로젝트에 적용하기CUDA를 게임 프로젝트에 적용하기
CUDA를 게임 프로젝트에 적용하기YEONG-CHEON YOU
 
[박민근] 3 d렌더링 옵티마이징_5 최적화 전략
[박민근] 3 d렌더링 옵티마이징_5 최적화 전략[박민근] 3 d렌더링 옵티마이징_5 최적화 전략
[박민근] 3 d렌더링 옵티마이징_5 최적화 전략MinGeun Park
 
Ndc12 이창희 render_pipeline
Ndc12 이창희 render_pipelineNdc12 이창희 render_pipeline
Ndc12 이창희 render_pipelinechangehee lee
 
게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPUYEONG-CHEON YOU
 
실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략YEONG-CHEON YOU
 
Unity4 Mecanim 활용
Unity4 Mecanim 활용Unity4 Mecanim 활용
Unity4 Mecanim 활용희운 강
 
유니티 Rpg게임배경 스타트업 6번째 스터디자료
유니티 Rpg게임배경 스타트업 6번째 스터디자료유니티 Rpg게임배경 스타트업 6번째 스터디자료
유니티 Rpg게임배경 스타트업 6번째 스터디자료Je Lyoung Kim
 
Unity3D로 풀3D web mmorpg 만들기
Unity3D로 풀3D web mmorpg 만들기Unity3D로 풀3D web mmorpg 만들기
Unity3D로 풀3D web mmorpg 만들기JP Jung
 
게임 개발을 위한 렌더링 기법 한성환
게임 개발을 위한 렌더링 기법   한성환게임 개발을 위한 렌더링 기법   한성환
게임 개발을 위한 렌더링 기법 한성환Yggdrasil610
 
[KGC2014] 울프나이츠 엔진 프로그래밍 기록
[KGC2014] 울프나이츠 엔진 프로그래밍 기록 [KGC2014] 울프나이츠 엔진 프로그래밍 기록
[KGC2014] 울프나이츠 엔진 프로그래밍 기록 JiUng Choi
 

What's hot (20)

Hierachical z Map Occlusion Culling
Hierachical z Map Occlusion CullingHierachical z Map Occlusion Culling
Hierachical z Map Occlusion Culling
 
빠른 렌더링을 위한 오브젝트 제외 기술
빠른 렌더링을 위한 오브젝트 제외 기술빠른 렌더링을 위한 오브젝트 제외 기술
빠른 렌더링을 위한 오브젝트 제외 기술
 
gv004 ver0.1
gv004 ver0.1gv004 ver0.1
gv004 ver0.1
 
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법
 
영웅의 군단의 테크니컬 아트 - 황재철, 유나이트 코리아 2014
영웅의 군단의 테크니컬 아트 - 황재철, 유나이트 코리아 2014영웅의 군단의 테크니컬 아트 - 황재철, 유나이트 코리아 2014
영웅의 군단의 테크니컬 아트 - 황재철, 유나이트 코리아 2014
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현
 
Unity3D - Asset bundle
Unity3D - Asset bundleUnity3D - Asset bundle
Unity3D - Asset bundle
 
NDC2015 광개토태왕 테크니컬 아트
NDC2015 광개토태왕 테크니컬 아트NDC2015 광개토태왕 테크니컬 아트
NDC2015 광개토태왕 테크니컬 아트
 
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
 
CUDA를 게임 프로젝트에 적용하기
CUDA를 게임 프로젝트에 적용하기CUDA를 게임 프로젝트에 적용하기
CUDA를 게임 프로젝트에 적용하기
 
[박민근] 3 d렌더링 옵티마이징_5 최적화 전략
[박민근] 3 d렌더링 옵티마이징_5 최적화 전략[박민근] 3 d렌더링 옵티마이징_5 최적화 전략
[박민근] 3 d렌더링 옵티마이징_5 최적화 전략
 
Voxelizaition with GPU
Voxelizaition with GPUVoxelizaition with GPU
Voxelizaition with GPU
 
Ndc12 이창희 render_pipeline
Ndc12 이창희 render_pipelineNdc12 이창희 render_pipeline
Ndc12 이창희 render_pipeline
 
게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU
 
실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략
 
Unity4 Mecanim 활용
Unity4 Mecanim 활용Unity4 Mecanim 활용
Unity4 Mecanim 활용
 
유니티 Rpg게임배경 스타트업 6번째 스터디자료
유니티 Rpg게임배경 스타트업 6번째 스터디자료유니티 Rpg게임배경 스타트업 6번째 스터디자료
유니티 Rpg게임배경 스타트업 6번째 스터디자료
 
Unity3D로 풀3D web mmorpg 만들기
Unity3D로 풀3D web mmorpg 만들기Unity3D로 풀3D web mmorpg 만들기
Unity3D로 풀3D web mmorpg 만들기
 
게임 개발을 위한 렌더링 기법 한성환
게임 개발을 위한 렌더링 기법   한성환게임 개발을 위한 렌더링 기법   한성환
게임 개발을 위한 렌더링 기법 한성환
 
[KGC2014] 울프나이츠 엔진 프로그래밍 기록
[KGC2014] 울프나이츠 엔진 프로그래밍 기록 [KGC2014] 울프나이츠 엔진 프로그래밍 기록
[KGC2014] 울프나이츠 엔진 프로그래밍 기록
 

Viewers also liked

KGC06_적응성 있는 자원 흐름 관리
KGC06_적응성 있는 자원 흐름 관리KGC06_적응성 있는 자원 흐름 관리
KGC06_적응성 있는 자원 흐름 관리noerror
 
06_앰비언트어클루전 소개
06_앰비언트어클루전 소개06_앰비언트어클루전 소개
06_앰비언트어클루전 소개noerror
 
06_HDR 소개
06_HDR 소개06_HDR 소개
06_HDR 소개noerror
 
07_Visual Shader Editor
07_Visual Shader Editor07_Visual Shader Editor
07_Visual Shader Editornoerror
 
11_웹서비스활용
11_웹서비스활용11_웹서비스활용
11_웹서비스활용noerror
 
Engines, Tools, and Scripts
Engines, Tools, and ScriptsEngines, Tools, and Scripts
Engines, Tools, and ScriptsKalito Viscra
 
06_자동차물리입문(1)
06_자동차물리입문(1)06_자동차물리입문(1)
06_자동차물리입문(1)noerror
 
NDC08_실시간비주얼그래프편집
NDC08_실시간비주얼그래프편집NDC08_실시간비주얼그래프편집
NDC08_실시간비주얼그래프편집noerror
 

Viewers also liked (9)

KGC06_적응성 있는 자원 흐름 관리
KGC06_적응성 있는 자원 흐름 관리KGC06_적응성 있는 자원 흐름 관리
KGC06_적응성 있는 자원 흐름 관리
 
06_앰비언트어클루전 소개
06_앰비언트어클루전 소개06_앰비언트어클루전 소개
06_앰비언트어클루전 소개
 
06_HDR 소개
06_HDR 소개06_HDR 소개
06_HDR 소개
 
Ssao
SsaoSsao
Ssao
 
07_Visual Shader Editor
07_Visual Shader Editor07_Visual Shader Editor
07_Visual Shader Editor
 
11_웹서비스활용
11_웹서비스활용11_웹서비스활용
11_웹서비스활용
 
Engines, Tools, and Scripts
Engines, Tools, and ScriptsEngines, Tools, and Scripts
Engines, Tools, and Scripts
 
06_자동차물리입문(1)
06_자동차물리입문(1)06_자동차물리입문(1)
06_자동차물리입문(1)
 
NDC08_실시간비주얼그래프편집
NDC08_실시간비주얼그래프편집NDC08_실시간비주얼그래프편집
NDC08_실시간비주얼그래프편집
 

Similar to 06_게임엔진 활용팁

임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012devCAT Studio, NEXON
 
Direct x 12 초기화
Direct x 12 초기화Direct x 12 초기화
Direct x 12 초기화QooJuice
 
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례SangYun Yi
 
실전프로젝트 정서경 양현찬
실전프로젝트 정서경 양현찬실전프로젝트 정서경 양현찬
실전프로젝트 정서경 양현찬현찬 양
 
09_motionblur
09_motionblur09_motionblur
09_motionblurnoerror
 
[Kgc2013] 모바일 엔진 개발기
[Kgc2013] 모바일 엔진 개발기[Kgc2013] 모바일 엔진 개발기
[Kgc2013] 모바일 엔진 개발기changehee lee
 
[IGC 2017] 에픽게임즈 최용훈 - 밤낮으로 부수고 짓고 액션 빌딩 게임 만들기 - 포트나이트
[IGC 2017] 에픽게임즈 최용훈 - 밤낮으로 부수고 짓고 액션 빌딩 게임 만들기 - 포트나이트[IGC 2017] 에픽게임즈 최용훈 - 밤낮으로 부수고 짓고 액션 빌딩 게임 만들기 - 포트나이트
[IGC 2017] 에픽게임즈 최용훈 - 밤낮으로 부수고 짓고 액션 빌딩 게임 만들기 - 포트나이트강 민우
 
05_동기화_개요
05_동기화_개요05_동기화_개요
05_동기화_개요noerror
 
[211]대규모 시스템 시각화 현동석김광림
[211]대규모 시스템 시각화 현동석김광림[211]대규모 시스템 시각화 현동석김광림
[211]대규모 시스템 시각화 현동석김광림NAVER D2
 
[14.10.21] Far Cry and DX9 번역(shaderstudy)
[14.10.21] Far Cry and DX9 번역(shaderstudy)[14.10.21] Far Cry and DX9 번역(shaderstudy)
[14.10.21] Far Cry and DX9 번역(shaderstudy)해강
 
The nosql echossytem
The nosql echossytemThe nosql echossytem
The nosql echossytem종석 박
 
[NDC08] 최적화와 프로파일링 - 송창규
[NDC08] 최적화와 프로파일링 - 송창규[NDC08] 최적화와 프로파일링 - 송창규
[NDC08] 최적화와 프로파일링 - 송창규ChangKyu Song
 
Rankwave MOMENT™ (Korean)
Rankwave MOMENT™ (Korean)Rankwave MOMENT™ (Korean)
Rankwave MOMENT™ (Korean)HyoungEun Kim
 
Chapter 8 - optimization for training deep models
Chapter 8 - optimization for training deep modelsChapter 8 - optimization for training deep models
Chapter 8 - optimization for training deep modelsKyeongUkJang
 
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013devCAT Studio, NEXON
 
AAA게임_UI_최적화_및_빌드하기.pptx
AAA게임_UI_최적화_및_빌드하기.pptxAAA게임_UI_최적화_및_빌드하기.pptx
AAA게임_UI_최적화_및_빌드하기.pptxTonyCms
 
엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기
엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기
엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기흥래 김
 

Similar to 06_게임엔진 활용팁 (20)

Motion blur
Motion blurMotion blur
Motion blur
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012
 
Direct x 12 초기화
Direct x 12 초기화Direct x 12 초기화
Direct x 12 초기화
 
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
 
실전프로젝트 정서경 양현찬
실전프로젝트 정서경 양현찬실전프로젝트 정서경 양현찬
실전프로젝트 정서경 양현찬
 
09_motionblur
09_motionblur09_motionblur
09_motionblur
 
[Kgc2013] 모바일 엔진 개발기
[Kgc2013] 모바일 엔진 개발기[Kgc2013] 모바일 엔진 개발기
[Kgc2013] 모바일 엔진 개발기
 
[IGC 2017] 에픽게임즈 최용훈 - 밤낮으로 부수고 짓고 액션 빌딩 게임 만들기 - 포트나이트
[IGC 2017] 에픽게임즈 최용훈 - 밤낮으로 부수고 짓고 액션 빌딩 게임 만들기 - 포트나이트[IGC 2017] 에픽게임즈 최용훈 - 밤낮으로 부수고 짓고 액션 빌딩 게임 만들기 - 포트나이트
[IGC 2017] 에픽게임즈 최용훈 - 밤낮으로 부수고 짓고 액션 빌딩 게임 만들기 - 포트나이트
 
05_동기화_개요
05_동기화_개요05_동기화_개요
05_동기화_개요
 
[211]대규모 시스템 시각화 현동석김광림
[211]대규모 시스템 시각화 현동석김광림[211]대규모 시스템 시각화 현동석김광림
[211]대규모 시스템 시각화 현동석김광림
 
Gametech2015
Gametech2015Gametech2015
Gametech2015
 
[14.10.21] Far Cry and DX9 번역(shaderstudy)
[14.10.21] Far Cry and DX9 번역(shaderstudy)[14.10.21] Far Cry and DX9 번역(shaderstudy)
[14.10.21] Far Cry and DX9 번역(shaderstudy)
 
The nosql echossytem
The nosql echossytemThe nosql echossytem
The nosql echossytem
 
[NDC08] 최적화와 프로파일링 - 송창규
[NDC08] 최적화와 프로파일링 - 송창규[NDC08] 최적화와 프로파일링 - 송창규
[NDC08] 최적화와 프로파일링 - 송창규
 
Rankwave MOMENT™ (Korean)
Rankwave MOMENT™ (Korean)Rankwave MOMENT™ (Korean)
Rankwave MOMENT™ (Korean)
 
Chapter 8 - optimization for training deep models
Chapter 8 - optimization for training deep modelsChapter 8 - optimization for training deep models
Chapter 8 - optimization for training deep models
 
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
 
AAA게임_UI_최적화_및_빌드하기.pptx
AAA게임_UI_최적화_및_빌드하기.pptxAAA게임_UI_최적화_및_빌드하기.pptx
AAA게임_UI_최적화_및_빌드하기.pptx
 
엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기
엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기
엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기
 
Shader Driven
Shader DrivenShader Driven
Shader Driven
 

More from noerror

NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현noerror
 
KCGS11_실시간 피사계 심도 렌더링 개선 기법
KCGS11_실시간 피사계 심도 렌더링 개선 기법KCGS11_실시간 피사계 심도 렌더링 개선 기법
KCGS11_실시간 피사계 심도 렌더링 개선 기법noerror
 
11_통계 자료분석 입문
11_통계 자료분석 입문11_통계 자료분석 입문
11_통계 자료분석 입문noerror
 
11_빠른 개발 가능한 레벨 편집 시스템
11_빠른 개발 가능한 레벨 편집 시스템11_빠른 개발 가능한 레벨 편집 시스템
11_빠른 개발 가능한 레벨 편집 시스템noerror
 
11_SH를 이용한 실시간 투명 근사법
11_SH를 이용한 실시간 투명 근사법11_SH를 이용한 실시간 투명 근사법
11_SH를 이용한 실시간 투명 근사법noerror
 
ICON08_게임 애니메이션 최적화 기법
ICON08_게임 애니메이션 최적화 기법ICON08_게임 애니메이션 최적화 기법
ICON08_게임 애니메이션 최적화 기법noerror
 
08_Marching Cube Terrains
08_Marching Cube Terrains08_Marching Cube Terrains
08_Marching Cube Terrainsnoerror
 
08_게임 물리 프로그래밍 가이드
08_게임 물리 프로그래밍 가이드08_게임 물리 프로그래밍 가이드
08_게임 물리 프로그래밍 가이드noerror
 
08_플래시 맛보기
08_플래시 맛보기08_플래시 맛보기
08_플래시 맛보기noerror
 
08_애니메이션고등학교 게임과 특강
08_애니메이션고등학교 게임과 특강08_애니메이션고등학교 게임과 특강
08_애니메이션고등학교 게임과 특강noerror
 
08_Wxwidgets 소개
08_Wxwidgets 소개08_Wxwidgets 소개
08_Wxwidgets 소개noerror
 
07_PhysX 강체물리 입문
07_PhysX 강체물리 입문07_PhysX 강체물리 입문
07_PhysX 강체물리 입문noerror
 
07_스케일폼 소개
07_스케일폼 소개07_스케일폼 소개
07_스케일폼 소개noerror
 
05_Reliable UDP 구현
05_Reliable UDP 구현05_Reliable UDP 구현
05_Reliable UDP 구현noerror
 
05_스마트 포인터 구현하기
05_스마트 포인터 구현하기05_스마트 포인터 구현하기
05_스마트 포인터 구현하기noerror
 
05_벡터와 매트릭스
05_벡터와 매트릭스05_벡터와 매트릭스
05_벡터와 매트릭스noerror
 
05_STL컨테이너정리
05_STL컨테이너정리05_STL컨테이너정리
05_STL컨테이너정리noerror
 
05_글로벌일루미네이션
05_글로벌일루미네이션05_글로벌일루미네이션
05_글로벌일루미네이션noerror
 
05_컴파일러최적화전략(1)
05_컴파일러최적화전략(1)05_컴파일러최적화전략(1)
05_컴파일러최적화전략(1)noerror
 
04_장면 관리 개요
04_장면 관리 개요04_장면 관리 개요
04_장면 관리 개요noerror
 

More from noerror (20)

NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현
 
KCGS11_실시간 피사계 심도 렌더링 개선 기법
KCGS11_실시간 피사계 심도 렌더링 개선 기법KCGS11_실시간 피사계 심도 렌더링 개선 기법
KCGS11_실시간 피사계 심도 렌더링 개선 기법
 
11_통계 자료분석 입문
11_통계 자료분석 입문11_통계 자료분석 입문
11_통계 자료분석 입문
 
11_빠른 개발 가능한 레벨 편집 시스템
11_빠른 개발 가능한 레벨 편집 시스템11_빠른 개발 가능한 레벨 편집 시스템
11_빠른 개발 가능한 레벨 편집 시스템
 
11_SH를 이용한 실시간 투명 근사법
11_SH를 이용한 실시간 투명 근사법11_SH를 이용한 실시간 투명 근사법
11_SH를 이용한 실시간 투명 근사법
 
ICON08_게임 애니메이션 최적화 기법
ICON08_게임 애니메이션 최적화 기법ICON08_게임 애니메이션 최적화 기법
ICON08_게임 애니메이션 최적화 기법
 
08_Marching Cube Terrains
08_Marching Cube Terrains08_Marching Cube Terrains
08_Marching Cube Terrains
 
08_게임 물리 프로그래밍 가이드
08_게임 물리 프로그래밍 가이드08_게임 물리 프로그래밍 가이드
08_게임 물리 프로그래밍 가이드
 
08_플래시 맛보기
08_플래시 맛보기08_플래시 맛보기
08_플래시 맛보기
 
08_애니메이션고등학교 게임과 특강
08_애니메이션고등학교 게임과 특강08_애니메이션고등학교 게임과 특강
08_애니메이션고등학교 게임과 특강
 
08_Wxwidgets 소개
08_Wxwidgets 소개08_Wxwidgets 소개
08_Wxwidgets 소개
 
07_PhysX 강체물리 입문
07_PhysX 강체물리 입문07_PhysX 강체물리 입문
07_PhysX 강체물리 입문
 
07_스케일폼 소개
07_스케일폼 소개07_스케일폼 소개
07_스케일폼 소개
 
05_Reliable UDP 구현
05_Reliable UDP 구현05_Reliable UDP 구현
05_Reliable UDP 구현
 
05_스마트 포인터 구현하기
05_스마트 포인터 구현하기05_스마트 포인터 구현하기
05_스마트 포인터 구현하기
 
05_벡터와 매트릭스
05_벡터와 매트릭스05_벡터와 매트릭스
05_벡터와 매트릭스
 
05_STL컨테이너정리
05_STL컨테이너정리05_STL컨테이너정리
05_STL컨테이너정리
 
05_글로벌일루미네이션
05_글로벌일루미네이션05_글로벌일루미네이션
05_글로벌일루미네이션
 
05_컴파일러최적화전략(1)
05_컴파일러최적화전략(1)05_컴파일러최적화전략(1)
05_컴파일러최적화전략(1)
 
04_장면 관리 개요
04_장면 관리 개요04_장면 관리 개요
04_장면 관리 개요
 

06_게임엔진 활용팁

  • 1. 게임 엔진(2) 활용팁 김성익(noerror@hitel.net) 2006.4.30
  • 2. 개요 • 게임 엔진을 구성하는 데 고려해 볼 것들 • 몇 가지 처리 방식 제안
  • 3. 알파 메시 렌더링 정책(1) • 알파 텍스처를 쓴 메시나, 버텍스 알파를 사용하는 메시는 나중 에 그린다. • 알파 메시에 대해서는 멀리 있는 것부터 가까운 메시 순으로 렌 더링한다. .
  • 4. 알파 메시 렌더링 정책(2) • 투명한 메시(혹은 오브젝트)에 대해선 겹치지 않도록 2pass 렌더링한다.
  • 5. DrawPrimitive 정책(1) • 최적화 전략 DrawPrimitive 를 적게 함 속도상의 이득이 있는 순서대로 그림 • 제안 : DrawPrimitive 시 실제로 DrawPrimive 하지 않고, 리스트에 추가함, EndScene 호출시나, 순서를 맞춰야 하는 경우 Flush 함
  • 6. DrawPrimitive 정책(2) • Flush 시 소팅해서 찍음 동일한 텍스처끼리 동일한 렌더링 스테이트끼리 렌더링 스테이트가 적게 바뀌도록 • 실제 DrawPrimitve 시 찍은 메시와 다음에 찍을 메시가 동일하고 렌더링스테이트, 텍 스처까지 동일하며, 찍을 메시의 버텍스 수와 인덱스 수가 적다 면 머지해서 찍는다. (버텍스 수가 적어서 머지할만한 메시는 버 텍스 정보과 인덱스 정보를 저장해둠)
  • 7. DrawPrimitive 정책(3) • 머지해서 찍을 때는 가능한 상황이라면 D3DLOCK_DISCARD 없이 D3DLOCK_NOOVERWRITE로 LOCK
  • 8. DrawPrimitive 정책(4) • 엔진 사용하는 레벨에서도 어느 정도 조절을 해준다면 별다른 처리 없이 성능 향상이 가능한 부분도 존재 • 예를 들어 UI를 찍을 경우 동일한 텍스처 위주로 DrawPrimitive를 한다면, 실제 머지 되기 때문에 적은 횟수로 DrawPrimitive 가 됨 - 내부적으로 적은 수의 DrawPrimitive를 위해서 최적의 UI나 파티클 출력 내용물의 버텍스 리스트와 인덱스 리스트를 만들 필요가 적어짐 • 셰이더 상수 관련
  • 9. 렌더스테이트관리(1) • 렌더링시 큰 영향을 미침 • 상태 변수가 많아서 관리가 어려움 • 관리가 안될 경우 오브젝트 렌더링 순서에 따 라 렌더링 상태가 바뀌는 괴 현상 생김
  • 10. 렌더스테이트관리(2) • DrawCharacter 에 SetRenderState(D3DRS_ZFUNC, D3DCMP_LESSEQUAL); 를 추가하면 문제가 안 생기지만, 추후에 도 단 하나의 렌더링 루틴에서 새로운 State 를 사용할 경우 모든 렌더 링 루틴에서 그 상태에 대한 처리를 해주어야 함
  • 11. 렌더스테이트관리(3) • 제안 : 비트 연산을 통해서 하나의 프래그에 해당 정보를 저장한다.
  • 12. 렌더스테이트관리(4) • 렌더링 스테이트를 하나의 데이터로 관리가 가능해지므로 관리 가 쉽고, 직관적으로 한 눈에 상태를 알 수 있음. • 상태의 데이터가 적기 때문에 오브젝트를 렌더링 스테이트 별로 소팅시 비교가 용이함
  • 13. 렌더스테이트관리(5) • 특별히 세팅을 전혀 안할 경우 0가 되기 때문에 나중에 하나의 오브젝트에서만 렌더링시 CULL 방향을 수정한다고 해도 문제 없이 추가 가능함
  • 14. 렌더스테이트관리(6) • 해당 값이 비트 단위로 저장되기 때문에 간단한 비트연산으로 RenderState 함수 호출을 줄일 수 있음 (중복된 상태 변환이 없어짐) • SetRenderState 함수 호출의 최소화 : 렌더스테이트 별로 소팅 후 렌더링
  • 15. 부동 소수점 수 압축 • 애니메이션의 키 프레임 값 등 정밀도가 조금 떨어져도 되며 메 모리를 많이 차지하는 float을 압축해서 메모리 사용 최적화로 성능 향상
  • 16. SSE를 활용 • SSE의 특징 부동 소수점 곱하기를 동시에 여러 개를 한다 연산 속도는 증가되지만 레지스터간 이동(형 변환)의 부담을 고려하지 않으면 속도 향상이 적거나 없다 메모리는 16 바이트 align 되어야 한다 • 데이터 형식 변환 등의 적극적인 최적화가 필요하다
  • 17. 이벤트 객체를 이용한 동기화 (1) • Mutex, CriticalSection 등과 Event 객체의 차이점 : Event는 수동으로도 동기 상태를 제어할 수 있다. • 백그라운드로 로딩하도록 처리 때 미처 로딩이 마치기도 전에 사용을 요청한다면 그 동작을 우선 로딩하여 해당 이벤트를 Set 해주면 사용 쓰레드는 우아하게 하던 일 계속함 (단, 로딩이 긴 것보다는 게임 중간에 약간 밀리는 일이 있더라도 로딩이 짧은 것이 좋다는 가정.)
  • 18. 이벤트 객체를 이용한 동기화 (2) • 엔진 레벨에서 멀티 쓰레드를 잘 활용한다면 쾌적한 게임 구현 에 도움이 됨 • 만약 로딩만 하는 쓰레드를 운영한다면 • 이처럼 구성하면 로딩 안 할 때도 과부하가 생김
  • 19. 이벤트 객체를 이용한 동기화 (3) • 강제로 Sleep 루틴을 넣어서 로딩이 없을 때는 100ms 에 한번씩 루 프에 오도록 수정됨. 하지만 로딩시 Sleep 중이면 최대 100ms 의 지 연이 생김 • 아이템 추가하고 SetEvent 해주면 LoadThread 가 바로 깨어나서 우아하게 로딩을 시작함. (ResetEvent(m_Loading) 이벤트 부분과 아이템 추가시 SetEvent 부분은 동기화가 고려 안된 예임.)