728x90

UnityEngine 119

유니티 그래픽스 최적화 - 6.그림자 (Shadow)

. . 6-1 쉐도우맵 ​ Mesh Renderer 컴포넌트의 Cast Shadows 항목은 오브젝트의 그림자가 다른 오브젝트에 드리우는지, Receive Shadows 항목은 오브젝트에 다른 오브젝트의 그림자를 받는지. ​ 정적인 오브젝트는 라이트맵을 활용. 라이트맵은 GI(7장)에서 다룸. ​ 유니티는 쉐도우맵 기법을 사용. 그림자의 깊이를 저장하는 버퍼 생성, 픽셀쉐이더(Pixel Shader)에서 깊이를 비교하는 과정 거침. 넓은 영역은 여러 구역으로 나누기도 함(Cascade) 계단 현상을 없애기 위해 여러 번 샘플링, 필터링 처리 등. 렌더링 비용 중 많은 부분을 차지. ----- 셀프 쉐도우 (Self Shadow) 오브젝트 자기 자신의 그림자를 드리우는 기능. ----- ​ 쉐도우맵의 원리..

유니티 그래픽스 최적화 - 5.라이팅 (Lighting)

. . 라이트의 모든 걸 다루진 않고, 성능에 포커싱해서 유의점들을 다룬다. 라이팅 전반은 유니티 매뉴얼 https://docs.unity3d.com/kr/current/Manual/LightingOverview.html ​ 5-1 포워드 렌더링 vs 디퍼드 렌더링 ​ 카메라 컴포넌트에서 포워드 렌더링과 디퍼드 렌더링 두 가지 방식 중 선택 가능. Rendering Path 에서 Forward, Deferred 선택. Use Graphics Settings 로 두면 포워드 혹은 디퍼드를 강제하지 않고 디바이스마다 다른 렌더링 파이프라인 설정 가능. Edit > Project Settings > Graphics 선택, GraphicsSettings 인스펙터 오픈. Tier Setting 에서 플랫폼 티어별..

유니티 그래픽스 최적화 - 4. 드로우콜과 배칭 (Draw Call & Batching)

. . 4. 드로우콜과 배칭 (Draw Call & Batching) 4-1 드로우콜 (Draw Call) 수많은 병목지점이 있지만, 드로우콜이 병목인 경우가 많다. 최적화를 많이 간과하기 때문. 01) 드로우콜의 이해 CPU가 GPU에 오브젝트를 그리라는 명령을 호출하는 것. 한 프레임에서, 오브젝트 하나를 그릴 때 여러가지 정보들이 CPU에서 GPU로 전달됨. (매시 데이터 ,텍스쳐, 쉐이더, 트랜스폼, 블렌딩 셋팅 등등) DATA > Storage(HDD,SDD,SD) > CPU Memory > GPU Memory 플랫폼에 따라 VRAM(GPU Memory)은 자동으로 관리됨. 가비지는 VRAM 에서 제거하고 올리는 등 관리가 됨. GPU는 그려야 하는 상태 정보를 담는 테이블을 가지고 있고 텍스처..

유니티 그래픽스 최적화 - 2.렌더링 파이프라인

. . 책 읽으면서 대략적인 내용 정리. 이번엔 렌더링 파이프라인입니다. 기본적인 내용들이고 이미지 설명이 많아서 정리는 심플합니다. 자세한 설명은 책 본문에서 확인해주세요. ​ 2. 렌더링 파이프라인 (Rendering Pipeline) 화면에 그려지는 과정, Graphics API 워크플로우 2-1 GPU의 의미 . 2-2 게임 루프 게임루프를 크게 묶어 보면 다음과 같다. - 리소스 생성 및 초기화 (Initialization) - 갱신 (물리, 입력, 로직, AI, 네트워크, 애니메이션 등) - 렌더 - 종료 전 해제 (Decommissioning) 스크립트 라이프사이클 플로우차트 (Script Lifecycle Flowchart) https://docs.unity3d.com/kr/2019.1/M..

유니티 그래픽스 최적화 - 1.최적화 개요

. . 유니티 리드 에반젤리스트 오지현님의 "유니티 그래픽스 최적화 스타트업" 오랜만에 다시 읽기 시작해서 내용 정리 중입니다. ​ 이전에 3챕터 다뤘고 이번엔 1챕터. 그냥 읽고 넘겨도 될 부분이 많아서 1챕터 정리는 짧네요. 제가 읽으면서 스터디 목적으로 간략하게 정리한 포스트입니다. 자세한 설명은 책 본문에서 확인해주세요. 1. 최적화 개요 최적화의 가장 중요, 병목 제거 1-1 최적화 이해 1-2 렌더링의 이해 슈렉의 법칙 기술 발전과 시간의 지남에 따라 렌더링 시간이 더 늘어남. 2001년 슈렉 1 렌더링 500만시간 데이터 크기 6TB 2004년 슈렉 2 렌더링 1000만시간 2007년 슈렉 3 렌더링 2000만시간 2010년 슈렉포에버 렌더링 4500만시간 슈렉1 데이터 크기 6TB 드래곤 ..

유니티, 업스케일 샘플링(Upscale Sampling) 데모

. . 유니티 최적화 서적에서 다룬 업스케일 샘플링 데모를 돌려봤습니다. 관련 내용 포스트는 아래. https://wonsorang.tistory.com/475 유니티 그래픽스 최적화 - 3.병목 . . 유니티 리드 에반젤리스트 오지현님의 "유니티 그래픽스 최적화 스타트업" 오랜만에 다시 읽기 시작해서 정리를 해봤습니다. 왜 3챕터부터냐... 는 정리 하고싶은 챕터 먼저 다시 읽어서요. 다른 챕터도 다시.. wonsorang.tistory.com GUI 해상도는 그대로 렌더링 하고, 인게임 렌더 텍스처를 줄이면서 최적화와 룩앤필을 둘 다 취하는 트릭인데요, 아래 깃헙에서 데모 프로젝트를 받을 수 있습니다. https://github.com/ozlael/UpsamplingRenderingDemo ozlae..

유니티 그래픽스 최적화 - 3.병목

. . 유니티 리드 에반젤리스트 오지현님의 "유니티 그래픽스 최적화 스타트업" 오랜만에 다시 읽기 시작해서 정리를 해봤습니다. 왜 3챕터부터냐... 는 정리 하고싶은 챕터 먼저 다시 읽어서요. 다른 챕터도 다시 읽고 정리해보겠습니다. ​ 제가 다시 볼 목적으로 간략하게 정리한 포스트입니다. 자세한 설명은 책 본문에서 확인해주세요. 3. 병목 ( Bottleneck ) 최적화의 가장 중요, 병목 제거 3-1 병목의 이해, 측정, GUI 병목 탐지 보통의 최적화 목록 - 매시 버텍스 줄이기 - 텍스쳐 크기 줄이기 - 가벼운 쉐이더 - 드로우콜 줄이기 - 게임 로직 최적화 - 물리 연산 줄이기 - 기타 등등... 프로파일링을 잘 해야한다. 최적화의 처음은 게임의 타깃 기기를 결정하는 것. 주 타깃 기기와, 시..

[Unity] 유니티 엔진 사용 팁 몇 가지

두괄식 요약 먼저 정리합니다. 1. Playmode Color tint 설정 2. Playmode 에서 수정한 Component, Editmode 에 적용하기 3. Inspector, Project 등 기본 윈도우 탭 추가하기. 4. 오브젝트들 선택 저장/불러오기 5. 선택된 오브젝트 활성화/비활성화 1. Playmode Color tint 플레이 모드로 전환되면, 유니티 GUI 의 배경 컬러를 바꿀 수 있는 옵션. 눈에 띄는 컬러로 조금만 설정해놔도 플레이모드인지 인지하기가 쉽습니다. 플레이 모드 걸어둔 상태로 씬 수정했다가 데이터 날려먹는 일을 방지해줍니다. ​ Edit > Preference 의 Colors 탭에서 수정합니다. ​ 2. Playmode 에서 컴포넌트를 수정한 경우. Playmode ..

[Unity] 시각적 코딩 도구 PlayMaker

PlayMaker 는 유니티 엔진의 Asset 중 하나입니다. 이미 수 년 전부터 유명한 Visual Scripting Tool 로 알려져 있기도 합니다. 유니티 엔진의 강력한 컴포넌트 시스템을 기반으로 한 FSM 제작 도구인데, 확장성이 훌륭해서 이미 여러 프로젝트에서도 활용된 것으로 알고 있습니다. 실제로 지인분들 중에서도 상용 프로젝트에서 활용했다는 이야길 여러번 들었던 것 같군요. ​ 스샷에 보이는 것처럼, State 와 Event, 그리고 State 속의 Action 들로 원하는 기능들을 구현할 수 있습니다. 꽤 로우레벨 단위의 Action 들도 준비돼 있기 때문에, 코딩 한 줄 없이도 기능을 구현할 수는 있습니다. 로우레벨 단위 Action 들은 Operator 정도 수준들이라, 모든 Oper..

[Unity] 게임 유닛(Game Unit)과 Pixels Per Unit

Unity 엔진에만 종속된 내용은 아닌 것 같다는 걸 먼저 적고 시작합니다. 게임 유닛, "유닛"이란 어휘가 보통 전략 게임들에서 캐릭터 개체 하나의 단위를 부를 때 유닛 몇마리 같은 식으로 쓰는데, 여기서의 게임 유닛은 게임의 화면 단위를 부르는 용도로 씁니다. 쉽게 말해 "한 칸" 이라고 이해하면 좋을 것 같습니다. ​ 2D 게임에서는 이 한 칸(유닛)이 몇 Pixel 로 구성되는지에 대한 정의가 필요합니다. 위 스샷처럼 1 Game Unit 을 32로 설정하고, 스프라이트의 Pixels Per Unit 도 32로 설정한다면, 32x32 사이즈 타일이 정확히 한 칸, 1유닛에 딱 들어맞게 됩니다. 맵을 만들거나, 캐릭터의 이동 속도, 점프 높이, 사물의 크기 등을 좀 더 직관적으로 설정할 수 있어집니..

728x90
반응형