분류 전체보기 11

[최적화 스터디] 4. 드로우 콜, 배칭, SRP Batcher

* 본 게시물은 3D 유니티 프로젝트를 다룬다. Draw CallCPU가 상태 세팅(머티리얼, 셰이더, 텍스처)을 마친 이후 드로우를 호출하면, GPU가 픽셀 연산을 수행하게 된다.이때 CPU가 GPU에게 상태 세팅을 보내서 연산을 수행하라는 명령 1번을 Draw Call(드로우 콜)이라고 한다.주의할 점은 오브젝트 수가 아닌, 묶을 수 있는 오브젝트 그룹 수가 draw call의 수다. 오브젝트가 같은 머터리얼, 같은 렌더링 상태를 보유하고 있다면 같은 그룹으로 묶을 수 있다. Unity의 Frame Dubber를 사용하면 Draw call을 분석할 수 있다.CPU가 매 프레임마다 draw call을 많이 던지면, draw call을 셋업하다가 병목나는 경우가 많기 때문에 최대한 줄여주는 것이 좋다.아..

공부/Unity 2025.11.27

[최적화 스터디] 3. Project Auditor 2

* 본 게시물은 3D 유니티 프로젝트를 다룬다. 지난 게시물에서 다뤘던 Project Audtior를 활요하여 최적화를 몇 가지 더 진행하였다. Object.FindObjectsOfType()PipeInteractionRig.cs/ConveyorBeltDiagonalRig.cs - FindPlayerCC//수정 전static CharacterController FindPlayerCC(string tagName){ GameObject go = null; if (!string.IsNullOrEmpty(tagName)) go = GameObject.FindGameObjectWithTag(tagName); CharacterController cc = null; if (go) ..

공부/Unity 2025.11.27

[최적화 스터디] 2. Project Auditor

* 본 게시물은 3D 유니티 프로젝트를 다룬다. 짧은 잡담지스타를 가서 나의 우상 나의 영웅 나의 왕 골드메탈 님을 만났다.유니티 관련 질문으로 ‘최근에 최적화 작업을 하고 있는데 신경 쓸 부분이 없겠느냐’라고 여쭤봤는데 Project Auditor 패키지를 사용하면 코드, 에셋, 셰이더 등등 모든 부분에서 최적화 해야 할 부분을 알려준다고 하며 사용법을 정확하게 설명해주셨다.추가로, 현재는 Profiler로 하고 있다고 말씀드리니까 ‘그 방법은 실제로 튀어야 찾을 수 있기 때문에 힘들 거다’라고 하셨다. (하지 말라는 말은 아니긴 하지만 확실히 모든 씬 다 해봐야 되니까 잠재적인 위협이나 우연히 잡히지 않은 부분을 캐치할 수 없을 것 같기는 함)정말 감동의 도가니였습니다 … Proejct Auditor..

공부/Unity 2025.11.21

[최적화 스터디] 1. GC에 대해

* 본 게시물은 3D 유니티 프로젝트를 다룬다. GarbageCollector.CollectIncremental보스전 씬에서 Profiler를 돌려보던 중 GarbageCollector.CollectIncremental이 급격하게 높아지는 것을 확인했다. GarbageCollector가 뭔데 이렇게 갑자기 튀는걸까? 하는 궁금증이 생겨 GC에 대해서 검색해보았다. 일단 이미지는 유니티의 '증분형 가비지 컬렉션(Incremental Garbage Collection)'이 작동하고 있다는 뜻이다. 여기서 가비지 컬렉션 (GC)은 시스템이 자동으로 더 이상 사용되지 않는 메모리를 찾아내어 수거하고, 이 공간을 다시 사용할 수 있도록 정리하는 역할을 하며, CPU 자원을 소모한다.일반 GC vs. 증분형 GC ..

공부/Unity 2025.11.18

MiniBossRush 개발 후기

깃허브 링크: https://github.com/BeepBeepMaeae/MiniBossRush다운로드 링크: https://drive.google.com/file/d/1sfvdrcUiaT7E1i39AtPdukjAWRY3ax46/view?usp=drive_link 개발 기간: 1개월 유튜브에서 그대로 따라하거나, 다른 사람과 협업하며 게임의 한 부분을 완성한 적은 있지만 이렇게 게임을 '완성'하고, 다른 사람에게 직접 배포한 것은 이게 처음이 아닐까 싶다. 초기 기획은 친구의 생일을 축하하기 위해 만든 게임이었고, 매우 간단하게 구현하려고 했다.'엘든 링'의 세계관과 소울라이크 좋아하는 친구, 그리고 IWBTG 류의 액션 어드벤처 플랫폼 게임을 좋아하는 나. 그렇다면 이 두 장르를 접목시킨다면 내가 개발..

개발후기 2025.09.03

[Python] 3015: 오아시스 재결합

문제 링크https://www.acmicpc.net/problem/3015 일단 해당 문제의 티어를 보지 않고 무작정 덤빈 과거의 나에게 분노를 표한다. Grrrr 처음 봤을 때 드는 생각은 당연히 이중 for문을 돌려서 i와 j번째 사람의 키를 비교하는 것. 답은 당연히 나오겠지만 안 봐도 시간 초과가 나올 것이다. 따라서 기각. 그 다음 든 생각은, 어차피 키가 작은 사람 다음에 그 사람보다 키가 큰 사람이 있다면, 그 뒤에 다른 사람은 그 사람을 절대로 볼 수 없다. 그래서 Stack에 사람들의 키를 저장하며 단순 1만큼 카운트하다, 키가 큰 사람이 들어오면 그 사람보다 키가 작은 사람을 모두 pop해서 단순 1 카운트 + 그만큼 카운트를 세는 것이다. 그런데 문제가 있었다. 바로 '키가 같은 사..

공부/백준 2025.05.05

[Python] 1918: 후위 표기식

문제 링크https://www.acmicpc.net/problem/1918 후위 표기식의 경우 개인적으로 Stack의 정수라고 보기 때문에 이야기를 조금 하고 넘어가겠다. 3 + 5 * 7처럼 우리가 실생활에서 사용하는 표기식은 '중위 표기식'이라고 한다.3 5 7 * + 처럼 숫자가 앞, 수식이 뒤에 있는 표기식은 '후위 표기식'이라고 한다. 뭐 어떻게 봐야되는지도 모르겠고, 복잡해보이기만 하는 후위 표기식을 왜 사용하는 것일까? 우리는 인간이기 때문에 5*7을 먼저 해야 한다는 사실을 알고 있다. 하지만 컴퓨터는 선형적으로 데이터를 읽기 때문에 해당 방식을 사용하는 것을 비효율적이다. 우리는 컴퓨터가 더 빠르고 효율적으로 계산을 할 수 있도록 Stack을 이용해서 중위 표기식을 후위 표기식으로 변환..

공부/백준 2025.05.05

[Python] 2841: 외계인의 기타 연주

문제 링크https://www.acmicpc.net/problem/2841 솔직히 대학생이 되고 읽은 책이라곤 전공 책 밖에 없다보니 어휘력이 떨어졌다는 걸 체감하는 시간이었다 ... 코드 짜는데는 진짜 얼마 안 걸렸는데 문제를 파악하는데 많은 시간을 소요했다. Stack을 6개(줄 만큼) 생성한 뒤, 줄 별로 데이터를 관리해준다.새로 누를 프랫이 누르고 있는 프랫 중 가장 큰 값(가장 오른쪽에 있는 값)보다 클 경우에는 그 프랫을 추가해주기만 하면 된다.새로 누를 프랫이 누르고 있는 프랫보다 작을 경우, 그 프랫보다 더 큰 프랫을 모두 떼야 한다. while문을 써서 조건을 만족할 때까지 pop을 해주자. stack이 비어있을 경우에는 무조건 append를 해야 한다는 사소한 사실을 잊지 않도록 하자..

공부/백준 2025.05.05

[Python] 3986: 좋은 단어

문제 링크https://www.acmicpc.net/problem/3986 선이 교차하지 않아야 한다는 조건만 정확하게 파악한다면 쉽게 풀 수 있는 문제다. 1. 연속된 문자들을 제거하고 봤을 때도 연속된 문자가 있어야 한다.2. 문자가 끝났을 때 쌍을 이루지 못하는 문자가 남아있으면 안 된다. Stack을 이용해서 첫 문자 또는 연속하지 않는 문자를 push해주고, 연속되면 pop으로 빼주면 되는 쉬운 문제가 된다.n = int(input())cnt = 0for _ in range(n): stack = [] str = list(input()) for i in str: if not len(stack): # 스택이 비었으면 추가 stack.append(..

공부/백준 2025.05.05

[Python] 10799: 쇠막대기

문제 링크https://www.acmicpc.net/problem/10799 기본적인 아이디어는 다음과 같았다. 1. 열린 괄호 '('가 나오면 Stack에 push한다.2. 닫힌 괄호 ')'가 나오면 Stack에 있던 '('를 pop한 뒤, 코드를 잘~ 짜서 개수를 세어준다. 다만 이렇게만 할 수 있다면 아마 9012번 괄호 문제와 다름 없었을 것이다. 고려해야 될 사항은 괄호가 나왔을 때 경우의 수가 2가지라는 것이다. 1. 해당 괄호가 레이저일 경우 직전 문자가 열린 괄호, 그 다음 문자가 닫힌 괄호인 경우이다. 이 경우에는 일단 닫힌 괄호에 대응되는 열린 괄호를 Stack에서 pop해주고, 현재 Stack에 저장하고 있는 열린 괄호의 개수만큼 조각이 생긴다. 2. 해당 괄호가 쇠..

공부/백준 2025.05.05