나의 그래픽 카드들

내가 그래픽카드에 대해 인식하기 시작한것은 마비노기를 할 무렵이였던 것 같다.
친구집에 놀러가서 마비노기를 해보자고 하였고, 설치를 했는데도 잘 실행이 안되어서 고객센터에 문의를 넣었다. 그랬더니 답변으로 그 때 친구의 그래픽카드는 geforce 2 시리즈이고, 그래픽카드의 성능이 모자라서 안된다고 하였다.

나는 그 당시에는 그래픽 카드가 뭔지는 몰라도 뭔가 그래픽에 관련된 것인 정도로만 이해하고 있었다. 그래서 집에 가서 내 그래픽카드가 무엇인지 보았더니 지포스 fx 5700 이였다. 이것이 지금 닿는 내 기억속의 그래픽 카드에 대한 첫 기억이다.

그보다 조금 더 이후 Black and White 2 라는 게임을 우리 형이 자신의 PC로 하는 것을 보면서 그래픽이 너무 좋아 보여 내 PC에도 설치하였는데 그래픽이 너무 차이가 났었다. 분명 크리쳐의 갈기들이 보드랍게 돋아나있고 풀들이 바람에 일렁이고 있었는데, 나의 PC에서는 털도 없이 민숭맨숭한 살갗만 존재하고 풀들이 그냥 2d sprite의 형태로 존재했다.

요것에 대해 찾아보니 제작사가 그래픽카드 별로 권장 성능을 세팅해두었고 요것이 나는 geforce fx 5700, 형은 geforce 6600 을 쓰고 있어서 그런 차이가 났다는 것을 알게 되었다. 그냥 똑같아 보이는 연산기가 차이가 꽤 나는것에 나는 놀랐다. 이와 비슷한 일은 하프라이프2를 하면서도 그래픽 카드 별로 지원하는 DirectX API 레벨이 달라지는 것을 목격하면서 재현되었다. 그 때에도 역시 그래픽 카드 별로 지원하는 API레벨을 밸브에서 미리 지정해두었던 것 같았다.

소스 엔진에서는 콘솔로 mat_dxlevel 81 같은 명령어를 이용하여 API 레벨을 바꿀수 있었다. 내 fx 5700은 DirectX 8 로 기본설정이 되어 있었고, 이것을 요리 조리 바꿔가면서 비교하였었다. DirectX 7 에서는 광원 효과가 많이 사라지고 모델들이 찰흙처럼 보였다. 바닥에서 피어나는 불꽃도 그냥 2d sprite처럼 보였다. 이와 반대로 DirectX 9 에서는 헤드 크랩의 거칠거칠한 질감도 생기고 빛에 따라 바닥의 그림자가 다르게 보였다. 불꽃은 그림 처럼 보이지 않고 투명하게 렌더링 되었다. 나는 이때에는 쉐이더가 무엇인지도, 존재조차 알지 못하였다. 나는 여러가지 그래픽 옵션을 켜보기도, 꺼보기도 하면서 스크린샷을 찍어가며 요런것에 대해 흥미를 느꼈다.

안타깝게도 나의 fx 5700은 directx 9 를 강제로 적용시키면 심히 느려졌다. 프레임이 반토막 정도로 내려가서 20 에서 왔다갔다 했었고 (그 당시에는 모니터가 FHD도 아니였다) 요것은 fps를 하기에는 좀 많이 힘든 수치였다. 내가 부러워했던 Black and White 2의 갈기는 콘픽을 고쳐서 강제로 옵션을 켰다 하면 튕기기 일수여서 느껴보기도 어려웠다. 그런데 놀랍게도 그래픽 카드의 맨 앞자리 숫자가 하나 더 올라가기만 하였는데도 게임은 놀랍게도 부드럽게 돌아갔고, 놀랍게도 아름다워진 비주얼은 내 심장을 두근거리게 하였다.

아쉽게도 지금도 어렵지만 어린이였던 나에게는 그래픽카드는 내가 마음대로 교체하거나 결정할 수 있는 영역의 물건이 아니였다. 새 컴퓨터가 필요해지고, 그에 따른 예산이 부모님께서 내려주시고 나면 그제서야 대충 CPU와 비슷한 성능의 것이 정해지던 것이였다. 물론 새 컴퓨터를 맞출 예산의 활용 중점은 다음에 맞춰졌다.

  1. 오래 쓸 수 있는가?
  2. 너무 비싸지 않는가?
  3. 학습에 충분한가?

학생이 사용할 컴퓨터에서 요런 기준에서 게임이 비집고 들어갈 자리는 없었다. 게다가 우리 형과 나는 모두 PC 하드웨어에 어느정도 관심이 있는 상태였기 때문에 서로의 PC 구매를 견제할 수 있었다. 무엇이 예산 구매 결정 기준에 합치하는지, 무엇이 게임 때문에 올라가는것인지 알고 있었기 때문에, 상대의 PC의 램이 많아지면 그것이 필요없다고 하였고, 그래픽 카드가 쓸데없이 좋으면 그것 역시 필요 없다고 하였다. 예산 절감에는 이보다 좋을 방법이 많지 않을 것이다. 이로 인해 어린 시절의 나의 PC에는 항상 엔트리 레벨 정도의 그래픽 카드가 사용되었다.

초등학교 시절부터 대학에 들어가기 전까지는 이러한 기조에서 살아왔고, 대학생이 되어서야 내 PC에 대한 선택권을 견제 없이 가져올 수 있었고, 여기서부터 PC를 내가 스스로 맞춰왔다. 그렇다고는 하지만 대학생이 되어도 예산 집행의 자유만 존재하였고, 총 예산의 범위는 여전히 크게 제한되어 있었다. 부모님으로 구성된 위원회에서 아주 조그마한 예산을 할당해 주고 생존에 필요한 식량과 어느정도 필요한 문화예술 향유(주로 알콜)를 위한 비용을 제하고 나면 PC에 투자할 수 있는 돈은 많지 않았다. 예전 처럼 물어뜯고 싸우는 감사원만 없다 뿐이지 사정은 크게 나아지지 않았다. 그렇기에 메인 스트림 이상의 그래픽카드를 향유하지는 못하였다.

이러한 이야기를 늘어놓은 이유는 그냥 내 그래픽 카드의 변천사를 정리해 보고 싶었기 때문이다. 연도는 정확하지 않다.

모델Nvidia fx 5700Radeon HD 4670Nvidia GTX 460Nvidia GTX 650ti
년도 2003(추측) 2007(추측) 20112013
PassMark4154426542660
비고기억 나는 첫 그래픽 카드4650 했다가 졸라서 올림대학 입학컴엔비디아 행사 갔다가 경품 당첨. 소감으로 행사에서 기억나는게 없다고 함. Sorry NVIDIA!
AMD R9 380AMD R9 290AMD r9 390AMD VEGA 56NVIDIA GTX 1080ti
20152016201620172018
6162715271521203914221
군 시절 스트레스로 충동구매전역 기념으로 원계이에게 중고 쿨매수리 보냈더니 재고가 없어서 업그레이드;특가로 올라온거에 혹해서 구매, 나중에 더 싸짐중고나라에서 구매했는데 지은상쌤 개인소장 버전

무어의 법칙대로 정말 그래픽 카드는 잘 발달하고 있는 것 같다. 나는 첫번째 그래픽카드가 그렇게 좋지 않다고 생각하지 않았는데 현세대와 비교하였을때 정말 개미처럼 연약한 모습을 볼 수 있다. 지금의 현세대 그래픽 카드도 나중의 시점에는 엄청나게 구려진 모습이 되어 있겠지? 기술의 발전은 항상 신비한것 같다.

과연 1080ti 의 뒤를 이을 친구는 무엇이 될까? 아마도 NVIDIA 3천번대 가 될 가능성이 지금으로서는 높아보인다. AMD 는 지금 게이밍용 그래픽카드 부분에서 너무 삽질을 많이 하고 있어서 큰 기대가 되지 않는다. 기껏 지금 나오는 것 NAVI의 고성능 버전 5800xt, 5900xt 가 나온다고 해도 NVIDIA의 2018년 아키텍쳐를 따라가는 수준밖에 되지 않을 것 같다.

Hello, Kotlin!

http://sunitpanwar.com/kotlin-in-android

코틀린은 젯브레인에서 소개한 Java와의 상호호환이 가능하고 JVM위에서 동작하는 프로그래밍 언어이다.

Java에 비해 간략해지고 쉬운(이 부분은 논란의 여지가 있다.) 문법, 여러 boilerplate 코드(비슷한 구현을 위해 약간의 수정만으로 반복적으로 여러 군데에 사용되는 코드)를 줄일 수 있는 구현, 파이썬이 생각나는 collection 함수 등의 장점을 가지고 있다.

2016년의 google I/O 에서의 안드로이드 공식 언어로 지정된 이후에 구글의 많은 지지를 업고 있다. 코틀린이 자바를 대체할 것인가에 대해서는 인터넷에서의 여론은 하나로 통일되어 있지는 않지만 다음과 같은 말들이 있다. 레딧: 안드로이드에서는 큰 격차로 코틀린이 결국 대체할 것. Quora: 안드로이드로서는 Yes, 그 외에서는 No.

웹브라우저에서 사용되다가 결국 모든 곳에 존재하게 된 자바스크립트처럼 코틀린도 지금은 Java의 Nice하고 Modern한 아바타에서 나중에는 독립적인 지위를 가지게 되지 않을까 생각한다. 여기에는 다음과 같은 이유가 있다.

  • If Java runs, so does Kotlin. 자바에서 돌아가는 수많은 라이브러리를 그냥 사용할 수 있다.
  • 현대적인 코딩 감각 + 매끄러온 IDE 서포트. 처음 써 볼때에는 놀랍게도 자바보다는 파이썬을 쓰는 것 같은 느낌을 받았다.
  • Java의 새로운 구현이 아닌, 독립적인 언어로써 Native 하게 컴파일/실행도 가능하다. v8 엔진과 같은 새로운 패러다임이 다가오면 언제든지 폭발할 수 있다.
package me.nhne.kotlin.hello

fun main(args: Array<String>){
    println("Hello World!!!")
}