Log Stash

as an Industrial Personnel

전체보기 56

임의의 구간에서 허밋 스플라인의 도함수

(Cubic Hermite Spline's derivative on an arbitrary interval) 최근에 일하다가 오랜만에 Hermite 스플라인을 건드릴 일이 있어서 간단 정리. 1. Hermite Spline 구하기 1.1. 제약조건 4가지 cubic (3차) 함수로 표현되니, 4개의 제약조건을 가질 수 있다. Hermite Spline은 시작점, 끝점의 위치와 속력(=기울기)를 사용함. 위에서 나열한 순서와는 다르게, 보통 g2와 g3을 바꿔 (위치, 속력, 위치, 속력) 순서로 쓰는데 (이러면 더 알아보기 쉽다) 예전에 노트에 정리해 둘때는 (위치 위치 속력 속력) 으로 정리해두는 바람에 그냥 이대로 진행함. 1.2. Blending functions 구하기 구하고자 하는 Hermite..

Note 2023.01.08

GDC 2018 참관기 및 짧은 미국 여행기 - 마지막

여행기는 마지막 글로 끝이지만, 현장에서 세션을 듣고 개인적으로 느낀 감상 및 세션 듣는 요령을 정리함. 1. 시간표 짜기 동시에 진행되는 세션이 많기 때문에 한국에 있을 때 미리 어떤 세션을 듣고 싶은지 정리해 가면 좋다. GDC 스케쥴 사이트(https://schedule.gdconf.com/sessions)에 들어가면 이렇게 세션 목록을 볼 수 있고, 여기서 관심있는 세션을 마킹해놓고 나중에 모아서 볼 수 있다. 왼쪽 아래에 보면 'Topic'을 선택해서 관심 있는 토픽을 필터링해서 볼 수도 있다. 하나만 찍어 봐도 충분히 많은 세션이 있으니 천천히 보고 결정하자. 대학교 수강신청 같은게 아니기 때문에 시간이 겹치는 여러 개 세션을 마킹하는 것도 가능하다. 일단 괜찮아 보이면 다 담아놓고 시간대별로..

잡글 2022.11.27

GDC 2018 참관기 및 짧은 미국 여행기 - 4

이전 참관기에서 이어지는 글. 1. Day 4 (2018-03-23) 아침에 일어났을 때 햇빛 드는 게 좋아서 사진 한번 찍었다. 오늘은 밖에서 체크아웃 시간을 넘어 오래 있을 예정이기 때문에 미리 짐을 싸놓고 호텔 1층 리셉션에 가방을 맡겨두고 컨퍼런스 홀로 향했다. 2. 세션 2.1. Extreme SIMD: Optimized Collision Detection in Titanfall 초간단 요약 충돌 검사를 위해 4-way AABB tree를 사용 (SIMD 최적) 4개의 자식을 가지고 있는 1개의 노드를 64비트 캐시라인에 쑤셔넣음 Branchless AABB 테스트 선, 선분, 반직선 vs. AABB box 충돌 검사 테스트는 아래 논리로 간단하게 판별 가능 각 AABB box face 영역에 ..

잡글 2022.11.27

GDC 2018 참관기 및 짧은 미국 여행기 - 3

이전 참관기에서 이어지는 글. 1. Day 3 (2018-03-22) 이 날도 마찬가지로 10시 첫 세션을 들으러 가고 싶었기 때문에 8시쯤 일어나서 후드 쓰고 라떼 하나 사 왔다. 지나가는 길에 은행을 지나갔는데, 입구 바로 앞에 있던 가드 오른쪽 허벅지에 홀스터가 있고 권총이 있다는 게 좀 신기했음. 한국인에게 익숙한 스타벅스를 가서 라떼 하나를 주문했다. 캐셔가 사이즈는 뭘로 하겠냐고 물어보길래, 어떤 사이즈 있냐고 되물으니 레지스터 옆에 사이즈 비교용으로 전시해놓은 예시 컵들을 가리킨다. 2022년 연말을 지나가고 있는 현재도 스타벅스 컵 사이즈는 아직 익숙지 않다. 호텔로 돌아와서 보고 싶은 세션들을 적당히 메모해두고, 월그린으로 가서 대충 때울만한 뭔갈 사먹었다. 이때 당당하게 들어와 유기농 ..

잡글 2022.11.26

GDC 2018 참관기 및 짧은 미국 여행기 - 2

이전 참관기에서 이어지는 글. 1. Day 2 (2018-03-21) 아침 첫 세션이 대충 10시쯤 시작이다. 이 때부터 듣고 싶은 세션이 있기도 했고, 특히나 첫 날에는 입장권 목줄을 받아와야 하는 시간까지 고려해서 조금 일찍 일어났다. 다행히 호텔의 위치와 GDC행사를 주최하는 Moscone Center간의 거리가 매우 가까워서 새벽같이 일어날 필요는 없었다. 도착하자마자 입장권 목줄 교환을 먼저 진행했다. GDC 티켓을 구매하면 이메일로 영수증과 QR코드가 날아오는데, 이 QR 코드와 신분증 (여권) 을 제시하면 소정의 굿즈와 함께 아래와 같은 목줄을 받을 수 있다. 당연히 이게 없으면 컨퍼런스 룸에 들어갈 수 없다. 세션 들어갈 때 매번 태그 해야함. 목줄을 받고 나니 첫 세션이 시작하기 살짝 이..

잡글 2022.11.25

GDC 2018 참관기 및 짧은 미국 여행기 - 1

지난 2018년 3월 20일 ~ 23일동안 미국에서 열리는 GDC에 참관하러 다녀왔었다. 그 때 당시 회사에서 진행했던 프로그램을 통해서 다녀왔던지라 전체 여행 경비와 GDC 티켓 값을 회사에서 커버 해주었다. 그 대신 참관기를 ppt 형태로 만들어서 공유 해야 했었는데, 이번에는 비슷한 내용 + 여행기를 글의 형태로 정리해서 올리고자 한다. 이걸 왜 2022년 막바지에 올리냐면... 그냥... 사진 정리하다가 생각나서. 1. GDC는 무엇인가 Game Developers Conference, 게임 개발자 컨퍼런스. 게임 개발자들이 일년에 한번씩 모여서 각자 배운점, 삽질한 기록 등을 공유/자랑하는 장소다. 한국 버전으론 넥슨에서 진행하는 NDC가 가장 비슷하다. 엔씨에서도 내부적으로 컨퍼런스를 하지만 ..

잡글 2022.11.24

C#에서 Dictionary에 Enum을 써도 괜찮은것 같다

전에 이런 글에서 Dictionary에 Key값으로 enum을 넣으면 내부에서 boxing이 일어나는데, 그 이유는 Dictionary 내부에서 IEqualityComarer로 ObjectEqualityComparer를 사용하게 되기 때문이라고 했다. 4 버전대 이상 닷넷에선 EqualityComparer.CreateComparer()의 로직이 바뀌었고, 이젠 타입이 enum인지 아닌지를 봐서 EnumEqualityComparer라는 전용 비교자를 만들어 넘겨준다. 진짜 그런지 한번 들여다 본다. C# v.3.5 일단 닷넷 버전 3.5에서 진짜 boxing을 하는지 IL만 잠깐 살펴보도록 한다. 테스트 코드는 아래처럼 작성했는데, 아무래도 상관 없다. 어차피 mscorlib 안쪽만 볼 예정이다. clas..

Note 2019.12.23

Roslyn으로 C# 코드 정적 분석하기

1. 상황 현재 나는 유니티 엔진으로 개발하는 게임 프로젝트팀에서 일하고 있고, 요즘 게임들이 그렇듯 이 게임도 서버와 HTTP위에서 json텍스트를 주고 받으며 통신한다. 서버로부터 json텍스트를 받으면, 텍스트안에 명시된 데이터 타입의 이름으로 그에 맞는 deserializer 메소드를 찾아 해당 데이터 타입 오브젝트로 변환해주는 방법을 사용하고 있다. (몇몇 데이터의 구조가 약간 복잡해서 바로 리플렉션 시켜줄 수는 없음)현재 쓰고 있는 json 라이브러리는, 파싱할 때 json 오브젝트는 Hashtable로, json 배열은 ArrayList로, 문자열은 string으로, 그리고 숫자 타입은 무조건 float 으로 만들어서 반환해주고 있었고, 이렇게 파싱된 자료구조를 다시 데이터 오브젝트 객체의 ..

프로그래밍 2018.03.05

라인하르트 방어막 셰이더 흉내내기

Three.js로 만들어봄. 깊이맵으로 가까이 있으면 glow 효과 나오게 함. (gl_FragCoord의 z값 처리는 아직 안 함) Code Vertex shader void main() { gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); } Fragment Shader // Screen size uniform sampler2D depthMap; uniform vec2 screenSize; void main() { float depth = texture2D(depthMap, gl_FragCoord.xy / screenSize).r; float logDiff = log(1000.0 * abs(gl_FragCoord.z - d..

프로그래밍 2017.11.27

C#: object => IEnumerable<object>

1. Enumerable.Repeat() C#으로 코드를 짜다보면 종종 어떤 하나의 객체를, 그 객체를 담고 있는 IEnumerable로 변환해야 하는일이 종종 생긴다. 그땐 Enumerable.Repeat()을 사용하면 편하다.예를들어, 어떤 메소드 중간에 객체 obj가 있고, 이것을 IEnumerable 타입으로 만들어서 반환해야 한다고 생각해보자. GameObject obj; 가장 단순하게 생각해보자면, List 컨테이너를 하나 할당해서 그 리스트에 값을 집어넣을 수 있다. List list = new List(1); list.Add(obj); return list; 유니티3d 엔진의 코루틴 기능을 알고 있다면, C#의 발생자 문법을 사용하는 방식도 생각해 볼 수 있겠다. IEnumerable To..

프로그래밍 2017.11.21