개발 노트 레이 트레이싱 2019/01/14 21:12 by cagetu



이걸 완독 할 수 있을까?? 화이팅!! #2019

하루 하루 2018, and 2019 2018/12/31 23:17 by cagetu

2016, and 2017가 마지막인 걸 보니, 2017년도 정리는 하지 않은 듯 하구나...

지금 생각해보면 2017년도는 대기업 들어가서 회사에 흘러가는데로 그냥 같이 흘러갔다. 주어진대로 시키는대로...
적응하느라 눈치보게 되고, 인정받느라 긴장해야 하고... 

2018년은 정말 다양한 일이 많이 벌어졌다. 회사에서도 여러가지 일이 생기고, 그 과정에서 여러가지 관계에 대한 일들... 역할에 대한 변화들... 스스로에 대한 고민들... 그 고민의 시간들을 지나고 났더니, 누군가에서 기대어서 편하게 살려고 했던 내 모습이 보였다. 회사를 옮긴다고 재밌는 일이 생기는 것이 아니라, 나 스스로 이 일에 대해서 다시 생각해보고 즐겁게 접근하는 것이 맞는 것이었다. 나는 변했다. 그걸 인정하고 나니 현재의 내 모습에서 내가 좋아하고 할 수 있는 것을 하기로 했다. 

시장에서 뒤쳐지면 어쩌지? 내 부족한 능력이 들통나면 어쩌지? 라는 두려움. 다른 사람들은 저렇게 앞서가는데 나는 뭐하고 있지? 라는 걱정이 사실 매일 매일 나를 괴롭힌다. 이겨내는 수 밖에 없는 것 같다. 40살의 불안은 시작된 것 같다. 나도 내 앞 날을 잘 모르겠다. 이게 내 2018년도 40살을 맞이한 나의 불안함 이었다. 그래도 견딜 수 있었던 것은 가족과 교회, 그리고 동료들이었다.

2019년도에는 "하루를 즐겁고 최선을 다하자!" 가 나의 목표이다. 회사에서도 내가 할 수 있는 한 모든 것을 하고, 공부도, 운동도, 취미생활도 정말 즐기면서 하루를 보내고 싶다. 우울해하거나 환경에 불만을 가지지 말고, 현재 상황을 받아들이고 집중할 것이다. 비록 게임이 출시하지 않더라도 적어도 내 스스로 당당한 결과를 만들어낼 수 있다면 만족할 수 있을 것 같다. (그게 쉽지 않지만...). 즐기면서 만들고 성장하자. 나도 해보자!!! 

주변에 내가 혼자가 아님을 기억하고, 동료들과 많이 이야기 하고, 나누면서 앞으로 나갈 생각이다. (그러니, 혹시 판교를 지나시는 지인분들은 언제든지 연락주세요~)

2018년도 힘든 한국 게임 시장에서 개발자로 살아가는데, 다들 어려움이 많은 듯 합니다. 2019년도에는 좀 더 행복한 하루 하루 보내시길 기도합니다. 새해 복 많이 받으세요~


개발 노트 custom containers 2018/12/31 22:48 by cagetu

연말에 남은 휴가를 사용해서, 집에서 정말 아무 생각없이 놀면서 했던 것 중에 하나가 string 및 assert를 포함해서 그 동안 작업했던 custom container 마무리 하는 것이다.


언리얼 엔진의 TArray 가 너무 잘 만들어져 있는 것 같아서, 꽤 많이 참고하였다. Map은 RB Tree로 보통 구현하는 듯 한데, Array<Pair<Key, Value>> 기반으로 이진 트리 lowbound 함수를 이용해서 구현하였다. (성능은 아직 모르겠다.) Set도 유사한 형태로 구현했으며, 이는 oryol과 nebula3의 core 라이브러리를 기반으로 하였다. 

string은 기본적으로 irright 소스를 바탕으로 작업했는데, 실제로 돌려보니 동적할당/해제가 너무 많이 일어난다. 언리얼의 FString도 TArray 기반으로 할당 빈도는 다르지만 string 복사를 자주 하기 때문에, 유사한 모습이지 않을까 생각되었다. 이를 해결하기 위해서, fbstring에서 smallbuffer를 적용했다는 것이 생각났다. (물론, facebook은 string은 단위가 다르다.) 카사 모임에서 찬호님이 nebula3의 string 클래스가 그렇게 되어있으니, 참고하면 좋을 거 같다고 말씀해주셨고, 성능향상에 꽤 많은 이득을 보았다고 했다. 그래서 겸사 겸사 아래와 같은 모습으로 적용하게 되었다. 기본사이즈가 커져버리기 때문에, 어느 정도 기본 버퍼를 잡는 것이 적당한지는 고민이 되지만, 동적할당을 줄이는데 꽤 많은 도움이 되는 것 같다. (nebula3는 기본이 20이다. wchar로 간다면 무시못할 크기이다.)

Core 라이브러리를 잘 만들려면 사실 이것만으로도 끝이 없는 듯 하다. 그래도, 매번 만들어진 것들만 사용하다보니, 한번은 만들어보고 싶었다. 이것을 해보면서, UnrealEngine, Nebula2,3, Oryol, Godot Engine, eastl, dg, blueshiftengine, irright, orge3d, cocos2d 등 정말 다앙한 소스들을 찾아보게 되었고, 구현방식이나 정리한 모습등을 보면서 배운 점이 많았다.

Reflection도 만들어보고 싶고, Core 도 정말 해보고 싶은 것들이 참 많다. 어쩌면 렌더러보다 이걸 더 잘 만들어 져야 하는 것일 수 있는데, 게임을 만들면서 하나 둘씩 추가되면서 완성되어가는 라이브러리 같다.

1주일 동안 오랜만에 좀 편하게 취미 코딩 좋았다. 내년에 회사 생활하면서도 이 기분으로 쭉 진행해보자!! ㅎㅎ

개발 노트 TO DO 2018/12/26 06:20 by cagetu

Core (Foundation)
이 정도로 하고, 빠르게 OpenGL ES 3.1 기반으로 삼각형 그리자... <--- 이건 모바일 프로젝트용 연습장
(Indirect Draw 등 ES 3.1에서 해볼 수 있는 것은 다 해볼 생각)

다른 차세대 api는 그 다음에... (metal도 좀 땡기는데, mac이 없다...)


그리고, 수학 공부를.... Calculus(미적분)을 컴퓨터 그래픽스에 사용되는 것 중심으로 공부하고 싶은데, 뭐 부터 봐야할지 잘 모르겠다. 진짜 미적분 책을 사서 보기 시작하면 되려나??? 아직은 모르겠다르~~~ 수학 이라니.. ㅎㅎㅎ;;;;



개발 노트 string 및 assert 2018/12/24 23:47 by cagetu

* String

작업 중(or 작업 한) Container 들에 이어서 string 클래스를 보고 있다. 오픈소스 게임엔진을 많이 살펴보고 특징들을 보니까 꽤 재밌다. Unreal, irright, neblua3, oryol 등을 좀 찾아봤다.

기본적으로 unreal, irright 은 allocator를 기반으로 스트링 사용량 만큼 메모리를 할당하는 방식이다. 언리얼은 TArray를 그대로 사용해서 만들었다. Nebula3는 좀 재밌는데, char localbuffer[20];를 가지고 있어서, 아주 작은 할당에 대해서는 heap 할당이 되지 않도록 구현했다. fbstring도 이런 방식으로 메모리를 조금 더 보유하도록 해서 메모리 할당이 빈번해지지 않도록 하는 최적화를 했다고 알고 있다. (small 인지 확인하는 flag). oryol은 nebula를 만든 개발자가 새롭게 진행하는 프로젝트인데, string을 복사할 때 재할당이 일어나지 않도록 포인터로 참조하도록 한 후 레퍼런스 카운터로 다른 객체가 삭제될 때, 같이 사라지지 않도록 하였다. 빈번하게 스트리객체게 복사된다고 생각해보면 되게 경재적인 방법으로 보인다. (물론 쓰레드 등에서는 어찌할지 ...)

또 언리얼의 FName 같이 StringId 객체도 필요한데, HashCode로 변환되어서 빠른 비교가 필요할 때 사용하게 된다. 

나는 irright 코드를 기반으로 사용해보기로 하고, 아래와 같은 이름으로 정의하였다.

template<class T> basestring;
namespace unicode
{
typedef basestring<char> utf8;
typedef basestring<wchar> string;
}

16 정도의 localbuffer를 사용하는 것이 효과가 좋지 않을까? 하고 적용해 볼 예정이다. (nebula3 참고)

* Assertion Macro


스킵 가능한 메크로에 대한 소개이다. 프로그래머가 적용한 Assert 때문에, 사용자 (디자이너, 아티스트 등)이 작업이 멈추는 상황이 생기지 않도록 Assert를 만들자는 내용이다. Assert를 통해서 최대한 많은 정보를 서버로 보내서 프로그래머는 코드 수정을 할 수 있는 정보를 취합하고, ASSERT가 true/false를 반환하도록 하여 skip 가능하도록 하자는 의견이다.

* Memory 할당자

tcmalloc, jemalloc, nedmalloc 등의 메모리 할당 라이브러리가 있다. jemalloc은 언리얼에 통합되어 있고, 옵션으로 사용이 가능하다. nedmalloc은 orge3D에 적용되어 있다. 설명을 보면 멀티 쓰레드 환경에서 효과가 좋을 것 같은데, 아직 판단이 서지 않는다. 아직은 멀티 쓰레드 환경에 익숙하지 않아서 더 그런 듯... 기억해 두었다가 나중에 적용해봐야지...

오늘은 여기까지~.


1 2 3 4 5 6 7 8 9 10 다음



메모장

내가 먼 훗날에 이 글들을 보았을 때, 좋은 추억이 될 수 있기를...

나를 위해... 나에게 쓰는...

msn: cagetu@hotmail.com
mail: cagetu79@gmail.com
twitter: twitter.com/cagetu
facebook: facebook.com/cagetu