분류 전체보기 190

컴퓨터 구조 기초 - 1

CPU ALU, 레지스터, 컨트롤 유닛, 버스인터페이스 로 구성. ALU는 산술연산+AND/OR 논리연산을 수행 컨트롤 유닛은 CPU가 처리해야 할 명령어를 해석하고 적절한 신호를 CPU의 다른 블록에 준다. 레지스터 셋은 CPU가 연산을 하는데 필요한 데이터를 임시적으로 저장할 메모리 공간. 버스인터페이스는 하드웨어 장치끼리 데이터를 주고밭는 매개체가 I/O 버스. 이런 버스의 프로토콜을 이해하는 것이 이 인터페이스. 클럭 펄스(Clock Pulse) : CPU는 이 클럭신호에 맞춰서 일을 함. 왜? 동기화 하려고. 프로그램의 실행 과정 전처리기 -> 컴파일러 -> 어셈블러 -> 링커 -> 실행 전처리기 : #define같이 #으로 시작하는 지시자의 지시에 따라 소스코드를 변경한다. 컴파일러 : 소스코..

이론/기초 2023.06.25

N번째 난수 값 얻어오기

문제 어떤 난수생성기가 있다고 가정하자. 이 난수 생성기로부터 N번째에 있는 난수를 얻고 싶다. 어떻게 해야 할까? 아니 애초에 위와 같은 상황은 무엇일까? 당신이 랜덤한 스테이지 A,B,C,D를 만든다고 가정하자. 한 스테이지는 1000개의 난수 시퀀스를 필요로 한다. 어떤 난수 생성기가 생성한 1001~2000번째의 난수를 이용해 A스테이지를 만들었다. 그리고 2001에서 3000까지의 난수를 이용해 B스테이지를 만들었다. 이때 B스테이지에 있던 유저가 다시 A스테이지로 돌아갔다고 하자. 아니면 4001에서 5000번째까지의 난수를 필요로 하는 D스테이지로 곧바로 들어간다면? 과거에 생성했던 난수 시퀀스를 어딘가에 저장해 둔다거나 혹은 0번째부터 다시 Next()를 호출하며 목표로 하는 시퀀스까지 도..

이론/일반 2023.06.18

(협업) Unity Accelerator - 임포트 시간 단축

에셋 임포팅 에셋 데이터는 CPU GPU등의 하드웨어에서 즉시 쓰일 수 있는 포맷일 필요가 있다. 그러나 대부분의 파일 포맷은 저장공간을 최소화하도록 되어있다.(압축) 따라서 유니티는 저장공간에 있는 데이터를 에셋 데이터로 컨버전 한다. 그리고 이렇게 변환된 에셋 데이터는 라이브러리 폴더에 캐싱된다. 이 과정을 에셋 임포팅이라 한다. 문제는? 근데 에셋 임포팅은 오래 걸림. 변경이 많으면 많을수록 더 오래걸린다. 만약 아예 모든 에셋을 임포트 해야 하는 상황이거나 플랫폼을 바꿔야 하는 경우라면 더욱 더 오래걸린다. 그러면 이걸 어떻게 해결할까? 임포트된 에셋 데이터는 라이브러리에 캐싱된다. 따라서 팀내에서 라이브러리 폴더를 공유할 수 있다. 플랫폼 스위칭 같은 경우를 대비하여 플랫폼별로 라이브러리 폴더를..

Update()

Update()는 어떻게 실행되나? Monobehaviour을 상속한 클래스 내에서 Update() 메서드를 정의하면 해당 메서드는 매 프레임마다 유니티에 의해 실행된다. 그럼 어떻게? Update()메서드를 private로 선언하건, protected로 선언하건 항상 수행되는 것을 보면 리플렉션 따위를 써서 메서드 이름을 얻어오고 어딘가에 캐싱한 다음 매 프레임마다 호출할 것으로 예상해볼 수 있다. 이게 아무것도 없는 빈 Update()메서드를 정의하지 말아야 하는 이유이기도 할 것이다. Update()의 성능은? 10000개의 Monobehaviour 객체를 매 프레임 업데이트 하고 싶다고 하자. 이 때 두 가지 방법이 가능하다. 하나는 Monobehaviour에 Update()를 정의하는 것. pr..

(토막상식) NativeContainer

Native Container Native Container는 native memory(unmanage)에 대한 wrapper이다. (Thread-Safe를 지원) native memory에 대한 버퍼를 managed code영역으로 노출하는 array, map, set등을 가지고 있음. 기본적으로는 Safety-Check를 수행하는데, unsafe로 시작하는 애들은 안 함. 그래서 당연히 native를 쓰는 게 더 좋겠지만 Native Container안에 Native Container를 담을 수는 없어서 unsafe를 써야 할 때가 있긴 하다. Access 정해주기 기본적으로 job 따위가 NativeContainer 인스턴스에 접근하면 read/write 둘 다 가능함. 그러나 이건 비효율적인데 r..

(토막상식) 유니티 메모리

메모리 종류 Managed Memory : GC가 적용되는 유저 영역의 메모리 레이어. Umanaged Memory(C#) : GC가 적용되지 않는 메모리 레이어, Unity.Collections 패키지를 통해 사용할 수 있는 공간이다. Native Memory(C++) : 유니티 엔진이 돌아갈때 쓰는 C++ 메모리이다. 일반적으로 유저가 접근 불가능한 영역. Managed Memory Mono나 IL2CPP나 VM에 managed memory 시스템이 있다. (=scripting memory system). managed heap : VM이 자동으로 GC써서 컨트롤 해주는 힙 메모리 영역. 여기에 메모리 할당하는걸 GC Allocation이라고도 한다. scripting stack : 그냥 스택영역....

Blittable Types

Blittable Type이란 .NET Framework에서 사용하는 데이터 타입들로, 대충보면 int, float, double... 과 같은 애들이 포함되어 있음. 그러면 이걸 굳이 왜 정의해놓았느냐? 하면 Blittable Type들이 다른 애들보다 마샬링할 때 더 효율적이기 때문이다. 마샬링이란 어떤 오브젝트의 메모리 데이터를 전송/보관에 용이하도록 변환하는 행위를 의미한다. 당연히 서로 다른 프로그램 사이에 데이터를 교환하는 경우에도 마샬링이 사용됨. 서로 다른 프로그램이라면 데이터를 표현하는 방법도 다를 수 있는데, 이 때 managed memory와 unmanaged memory에서 동일한 데이터 표현방식을 갖는 애들이 Blittable Type임. 이런 BlittableType은 마샬링 할..

언어/C# 2023.05.13

(개발일지) EntitySpriteRenderer - 1

개요 ECS에서 사용할 수 있는 SpriteRenderer를 만든다. 우선적으로 Sprite 정보 / Color / Flip X만 구현할 것이다. GPU Instancing은 일단은 고려하지 않는다. 또한 균일하지 않은 Sprite 크기와, Custom Pivot을 지원해야 한다. EntitySpriteRenderer가 하는 역할은 딱 하나다. 매 프레임 마다 지정된 Sprite를 그려주는 것. 개발과정 EntitySpriteRenderer 컴포넌트 우선 Authoring부터 만들어보자. Authoring에는 그리길 원하는 sprite와, 색, X축 뒤집기 여부가 들어가야 한다. public class EntitySpriteRendererAuthoring : MonoBehaviour { public Sp..

개발일지/DOTS 2023.04.30

beforefieldinit

개요 사실 읽을 필요 없다. 그런데 C# 싱글턴 초기화에 대한 유명한 아티클 을 보면 beforefieldinit이 뭔지 궁금해진다. 문제 class Test { static object o = new object(); } class Test { static object o; static Test() { o = new object(); } } class Test { static object o = new object(); static Test() { } } 위 세 코드는 모두 문법적으로 동일할까 아닐까? 정답은~~ 두구두구 아니다!! 두번째랑 세번째만 동일하고 첫번째는 아니다. 왜냐? 이유는 간단하다. 정적 생성자가 없는 첫번째는 BeforeFieldInit 플래그가 붙을 수도 아닐 수도 있다. 그런데 ..

언어/C# 2023.04.23

유니티/DOTS2D Sprite Animation (1) - 핵심 구현 아이디어

2023.03.19 - [유니티/DOTS] - 2D Sprite Animation (0) - 레퍼런스 조사 2D Sprite Animation (0) - 레퍼런스 조사 DOTS로 3D 애니메이션의 구현은 레퍼런스가 꽤 많다. 에셋스토어만 봐도 꽤 완성된 패키지를 팔기도 함... 반면 2D 애니메이션쪽은 쫌 레퍼런스가 적다. 그나마 있는애들도 Entites 1.0 적용 이전이라 tsyang.tistory.com 공통 이전 레퍼런스에서 크게 두 가지를 조사했는데, https://youtu.be/t1f8ZreCuuQ https://forum.unity.com/threads/1-million-animated-sprites-at-60-fps.811116/ 1 MILLION animated sprites at 60..

게임엔진/DOTS 2023.04.02