이력서
김용욱의 이력서 겸 포트폴리오 페이지


PDF 포트폴리오 확인하기
경력기술서 확인하기(준비중)

  • Email: rladyddnrl a-t gmail . com
  • Github: 2wind

기술

유니티3D 엔진과 C#을 이용해 게임을 제작하고 있습니다. 유니티3D와 C#을 다룰 수 있으며 이를 이용해 인게임 로직, 캐릭터 전투, 전투 중 캐릭터가 가지는 여러 속성 등을 구현할 수 있습니다. 유니티 에디터를 확장하여 여러 직군이 활용하는 게임 툴, 데이터 검증기 등을 제작할 수 있습니다. 형상관리 도구(Git)를 사용하여 별도의 브랜치에서 작업하고 추후 Peer review를 거쳐 머지하는 과정을 체험해보았습니다. 게임 제작의 다양한 단계에서 활발하게 의견을 내고 소통하며 최적의 결과물을 내기 위해 팀원과 소통합니다.

경험(경력)

데브시스터즈 쿠키런 킹덤 클라이언트 프로그래머 - 2022년 7월 ~ 현재

  • 데브시스터즈
  • 2022년 7월 18일부터 (주)스튜디오킹덤의 킹덤팀에서 클라이언트 프로그래머로 근무하고 있습니다.

엔씨소프트 2022 동계 산학협력 인턴십 - 2022년 1월 ~ 2월

  • 엔씨소프트
  • 2022년 1월 10일에서 2월 25일까지, 엔씨소프트 R&D센터 Vision AI Lab에서 산학협력 인턴으로 근무했습니다.
  • “Unity 엔진 기반 배경 데이터셋 구축” 이라는 주제로 인턴십 과제를 수행했습니다.
  • 오픈 소스 드론 시뮬레이션 라이브러리인 AirSim을 이용하여 과제를 진행하였습니다. 그 과정에서 유니티 엔진 백엔드의 기능을 언리얼 엔진과 동등한 수준으로 개선하였으며, AirSim 라이브러리를 이용해 캡쳐를 원활하게 할 수 있는 파이썬 기반 프로그램을 제작하였습니다.
  • 유니티 Built-in 렌더러의 특성 및 데이터셋 정보 수집을 위해 이용되는 Replacement Shader의 작동 방식을 분석하였습니다. 유니티 셰이더(ShaderLab, HLSL) 문법을 이해하고, 이를 유니티 엔진 백엔드 기능 구현 및 각종 버그 수정, 개선에 활용하였습니다.
  • 유니티 엔진에서 구현된 장면별 특성을 이해하고 분석하여, 각 Scene을 데이터셋 수집에 최적화하는 과정을 거쳤습니다.
  • 해당 과제 결과 언리얼 엔진에서만이 아니라 유니티 엔진으로 제작된 장면에서도 고품질의 인공 풍경 데이터셋을 수집할 수 있게 되었습니다. 해당 데이터셋에는 실제 데이터셋으로는 수집이 어려운 Pixel-perfect depth, segmentation data가 포함되어 있어 Image Synthesis 등에 유용하게 활용 가능할 것으로 예상합니다.
  • 해당 인턴십의 작업물을 컴퓨터공학부 졸업논문 대체 인턴보고서로 활용하여 제출하였습니다.

서울대학교 산림과학부 목재물리학연구실 학생연구원 - 2021년 12월, 2022년 3월

  • 서울대학교
  • 2021년 2학기 졸업논문 작성에 도움을 받은 인연으로, 서울대학교 산림과학부 목재물리학연구실에서 진행하는 “인공지능을 이용한 목재 표면 결점 분석” 프로젝트에 학생연구원으로 선발되었습니다.
  • 해당 프로젝트에서 목재 표면의 결점을 평가하는 모델에 대한 GUI 프론트엔드를 PySimpleGUI를 이용하여 제작하였고, 모델 evaluation 부분을 모듈화하여 향후 활용에 용이하게 만들었습니다.
  • 상세한 부분은 공개하기 어렵지만, 파이썬 프로젝트와 버전 의존성이라는 골치아픈 문제부터 PySimpleGUI 라이브러리를 이용한 편리한 GUI 제작까지 파이썬 프로그램에서 겪을 수 있는 다양한 문제점과 해결 방법을 빠르게 알아보는 계기가 되었습니다.
  • 멀티쓰레딩을 지원하는 GUI를 설계하여, 해당 부분에 대해서는 오픈소스로 공개하였습니다.

군입대(공군 병 만기전역) - 2018년 10월 ~ 2020년 8월

  • ROKAF
  • 2018년 후반기에 군입대를 하여, 2020년 8월 21일 전역했습니다. 정보통신대대에서 정보보호 체계를 관제하면서 사무자동화에 대해 관심을 가지게 되었습니다. 또한 자세한 내용은 밝힐 수 없으나 파이썬과 자바스크립트의 범용성 및 유용성을 체감하게 되었습니다. 회사의 분위기가 노동의 강도와 사기에 중요한 역할을 한다는 것도 깨달았습니다.
  • Python(2 3) 및 HTML/JS/CSS를 활용해 주업무의 효율성을 높였습니다.

서울대학교 게임개발동아리 부회장 활동 - 2015년 12월 ~ 2016년 12월

  • SNUGDC
  • 동아리의 부회장으로 당선되어, 조직이 활동하는 방식에 대해 배우고 갈등을 조절하면서 조직을 지원하는 경험을 했습니다. 회원들이 게임 개발에 집중할 수 있도록 회비를 활용해 비품을 정기적으로 구입하였고, 투명한 회계를 위해 동아리 명의의 통장을 개설하여 회계 담당의 도움을 받아 운영하였습니다.

서울대학교 게임개발동아리 SNUGDC 입회 - 2014년 3월 ~ 2022년 8월(졸업)

  • SNUGDC
  • 게임 개발에 대해 평소에 관심을 가지고 있었고, 다른 회원들과 협업 작업을 통해 게임을 비평하고 직접 만들어보고자 서울대학교 게임개발동아리인 SNUGDC에 입회하여 현재까지 활동중입니다.
  • 게임을 여러 각도에서 비평해보거나, 새로운 게임에 대한 아이디어를 발표하거나, 직접 다른 회원들과 같이 게임을 제작해보았습니다.
  • 넥슨, 라인플러스, 데브시스터즈 등에서 진행했던/진행중인 동아리 후원 프로그램에 참여하여 다른 동아리와 교류하고 게임업계에 종사하는 현업 개발자로부터 멘토링을 받기도 했습니다.
  • 주로 유니티3D와 C#을 활용해 게임을 제작했습니다. 상단 프로젝트들을 참조 바랍니다.

프로젝트

프로젝트 (정규직 근무 이전)

Eval_GUI_Example, ML 프로젝트를 위한 간단한 GUI - 2021년 12월

서울대학교 산림과학부 목재물리학연구실에서 진행하는 “인공지능을 이용한 목재 표면 결점 분석” 프로젝트에 참가하면서, 공개 허락을 받은 GUI 프론트엔드 부분에 Dummy Evaluator를 붙여 만든 예제 프로젝트입니다. GUI를 이용해 모델을 (다른 쓰레드에서) 불러오고, 이미지를 Evaluate하여 표시하고, 저장할 수 있는 기능을 갖추었습니다. UI는 PySimpleGUI로 제작되어 간편하게 편집이 가능합니다. 라이브러리 형태 혹은 CUI 형태 프로그램에, 간편하게 GUI를 부착할 수 있도록 최소한의 의존성으로 만들어졌습니다. MIT 라이센스로 공개하였습니다.

컴퓨터그래픽스 HW 5, GPU 가속 레이트레이싱 렌더링 - 2021년 2학기(9월 ~ 12월 초)

  • 컴퓨터그래픽스 최종 과제

컴퓨터그래픽스 과목의 최종 과제로, “복잡한 사물들이 존재하는 배경을 레이트레이싱하기”를 구현했습니다.

  • C++과 GLSL, OpenGL 4.6을 이용하여 일반적인 Phong shading과 레이트레이싱을 모두 구현했습니다.
  • 평면, 구 등의 Primitive shape, 스플라인을 이용해 정의되는 Swept Surface Polygon, .OBJ 파일들로 이루어진, 20만 폴리곤 정도의 복잡한 장면을 렌더링합니다.
    • 마우스와 키보드를 이용해 자유롭게 장면 내부를 이동하고, 오브젝트를 회전하는 카메라를 구현하였습니다.
    • FoV 조정 및 와이어프레임 렌더링, 반투명 오브젝트 렌더링 등도 지원합니다.
  • Swept Surface 및 .OBJ 파일 파서를 직접 구현하였으며, 스플라인 테셀레이션을 위해 테셀레이션 셰이더를 이용합니다.
  • 레이트레이싱은 컴퓨트 셰이더를 이용하며, 다단계 재귀적 레이트레이싱 및 텍스쳐, Soft Shadow를 지원합니다.
    • 800x600의 화면에 대해 타일드 렌더링을 적용하여 hang이 되는 것을 방지합니다.
    • AABB를 이용한 기본적인 최적화를 적용하였습니다.
    • UBO / SSBO 등의 자료구조를 이용해 폴리곤의 데이터를 저장하고, 호출 “스택”을 구현하여 재귀적 레이트레이싱을 구현했습니다.
    • GPU에서 연산하기 때문에 수십만 폴리곤 장면도 (수십 분 이상이 소요되는 CPU 연산 대비) 수십 초 정도면 렌더링이 완료됩니다.
  • 렌더링한 프레임버퍼에 대해 FXAA를 적용할 수 있습니다.

LandmarkDetector (with 오스템), 랜드마크 자동 정합 프로그램 - 2021년 1학기(3월 ~ 7월 초)

  • 메인 프로그래머 - 창의적통합설계 2021년 1학기 프로젝트
  • 소스 코드

LandmarkDetector는 창의적통합설계 과목 중, (주)오스템으로부터 의뢰받은 “AI 기반 치과 랜드마크 자동 정합 프로그램 개발”을 구현한 결과입니다. 이미지 2개와, 한 이미지 내에서 정해진 랜드마크를 받으면 다른 이미지에서 상응하는 랜드마크를 찾아 정합을 하는 모델을 개발했습니다. 이를 위해 다음과 같은 요소를 구현했습니다.

  1. CNN을 바탕으로 하여, 이미지에서 정해진 랜드마크를 찾을 수 있는 모델 탐색.
  2. 오스템에서 제공한 이미지 및 랜드마크 쌍을 데이터셋 형태로 가공 및 augmentation.
  3. 모델 학습 및 다른 프로그램(facenet-pytorch)과의 연동.
  4. 독립 실행형 프로그램 형태로의 연동(pyinstaller)

위 4가지 요소를 모두 혼자서 개발하였으며, 딥 러닝의 장점과 한계, 작동 방식에 대해서 배울 수 있는 유익한 시간이었습니다.

GridUnlocker, 레이저를 맞추는 간단한 VR 퍼즐 게임 - 2021년 1월 ~ 8월

GridUnlocker는 레이저를 적절하게 한쪽 끝에서 다른 쪽에 있는 목표까지 인도하는 게임입니다. 한 쪽에서 쏘아진 레이저는 중간에 여러 판들에 의해 가로막히는데, 특정한 방식으로 판을 배열해서 반대쪽에 놓인 목표까지 레이저를 쏘아 보내야 합니다. 이 게임은 제가 처음 만들어보는 VR 게임이자 혼자 만들어보는 게임으로써, 이동과 팔 휘두르기 없이 정적인 분위기에서 퍼즐을 풀 수 있도록 기획되었습니다. (의도적으로 게임의 스코프를 제한했습니다) 이 게임이 어떤 게임인지 자세히 알아보려면 이전 글을 참조하시기 바랍니다.

VR 게임을 처음부터 기획하고 만들어보면서, 기획 / 프로그래밍 / 아트 분야의 작업을 직접 체험할 수 있었습니다. VR이라는 생소한 플랫폼과 조작 방식을 익힐 수 있었고, VR 공간에서 적절한 UI와 조작 방식을 시험해볼 수 있었습니다. 또한 Unity3D에서 제공하는 오브젝트 조작 코드만으로는 만족스럽게 게임을 구현할 수 없어서 해당 부분을 직접 만들어 보았습니다.

개발 과정에서의 좌충우돌 과정은 블로그 게시글 12들을 참조 바랍니다.

클러스터노이드, 수많은 주인공 캐릭터를 조종하는 탑 뷰 슈터 - 2017년 겨울

클러스터노이드는 수많은 플레이어 캐릭터를 한 번에 조종하면서 적들을 무찌르는 탑뷰 슈터 게임입니다. Unity3D 엔진과 C# 언어를 이용했습니다. 휴학 기간에 갈고 닦은 프로그래밍 실력을 활용해보기 위해 메인 프로그래머 중 한 명으로 참여했습니다. 플레이어 캐릭터들의 유기체와 같은 작동 방식, UI, 적 인공지능, 맵 구성 및 실제 구현 테스트를 담당했습니다. NDM 및 데브시스터즈 동아리 후원에 참여하여 높은 평가를 받았습니다.

던전 엔지니어, 물건의 속성을 조합하는 모바일 로그라이크 - 2015년 여름

던전 엔지니어는 고전적 로그라이크를 지향하는 턴제 모바일 게임으로, 맵 상에 등장하는 아이템들의 다양한 “태그”를 이용해 다양한 물건을 제작하면서 던전을 돌파하는 게임입니다. 프로그래머로 참여했으며 아이템 구현 및 태그 시스템을 이용한 합성을 구현하였고 UI 제작에도 일부 참여했습니다. (위에 보이는)홍보 영상도 더빙했습니다. 처음으로 제대로 된 게임 엔진과 형상관리를 사용했던 게임으로, 매일같이 동아리방에 출근해 게임을 제작했던 추억이 생각납니다.

교육

서울대학교 농업생명과학대학 산림과학부 환경재료과학과, 공과대학 컴퓨터공학부 컴퓨터공학과에 복수전공하였습니다.

서울대학교 졸업 - 2022년 8월

서울대학교 컴퓨터공학부 복수전공 신청 - 2015년 9월

서울대학교 입학 - 2014년 3월

관심 분야 및 기타 참고 사항

*****
긍정적인 영향을 주는 사람이 됩시다
Served using home raspberry pi 3 B+
☕ Pudhina theme by Knhash 🛠️