Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

제 5회 Lisp 세미나 - Graphics Programming in Clojure


Published on

게임 개발과 관련된 그래픽 처리 방법에 대한 개요를 설명합니다. 그래픽 프로그램의 "Hello World" 인 Raytracer 등을 통해 Clojure 에서 활용 가능한 GPU programming Library 소개 및 예제 데모를 설명합니다.

Published in: Engineering
  • Login to see the comments

제 5회 Lisp 세미나 - Graphics Programming in Clojure

  1. 1. Graphics Programming In Clojure 양승헌
  2. 2. 소개 •A Gamedev •Emacs •C / Lisp
  3. 3. Outline •Graphics/Game programming in Clojure •Raytracer •Shadertone
  4. 4. 구글링 Graphics/Game In Lisp •장점 •Immutable persistant data structure •awesome for game scripting •awesome for interactive programming ! •고려할점 •careful for performance •natural GC-heavy process •mutability
  5. 5. Naughty Dog 어느 게임회사 모집 공고
  6. 6. Architecture of Data Compiler DC in Naughty Dog ! ! ! !
  7. 7. Lessons in DC
  8. 8. 리습을 공부해도 쓸일이 없다 리습과 나 •Clojure SNG 서버를 만들어 보았다 ■ 프로토타이 단계에서 필요한 기능을 금방 만들었다. ■ 금방 만들다 보니 금방 실증났다. ■ 다른 프로그래머가 쳐다 보기도 싫어한다. ■ 차라리 Python이나 Go 로 만들지 그랬냐며 빈정댄다. ! •다른 걸 해보자. ■ 굳이 Clojure로 하지 않아도 될것들 ■ 그냥 최근에 C로 짜본건들 ■ Raytracer / Raymarching
  9. 9. Tracing Rays :-) Raytracer •The “Hello World” in Graphics •A numerical application(Linear Algebra) •Rendering algorithms •Takes lots of time
  10. 10. 대략 이런 결과물 Raytracer
  11. 11. Great Paul Graham Raytracer in Common lisp •9장 예제
  12. 12. Vector Raytracer in Detail
  13. 13. Sphere Raytracer in Detail •코드 설명
  14. 14. Tracing Raytracer in Detail •코드 설명
  15. 15. Writing Numbers into file Raytracer in Detail •코드 설명
  16. 16. PPM file Raytracer in Detail •코드 설명
  17. 17. Viewing PPM file Raytracer in Detail •코드 설명
  18. 18. Features Advanced Raytracer •Shadow •Lambertian Material •Metal Material •Dielectric Material •Camera •Performance
  19. 19. Vector[1d] / Matrix[md] library clojore.core.matrix
  20. 20. Why should I use defrecord in clojure defstruct vs defrecord •Performance •With additional macro machinery around defrecord, I can get field validation, default values, and whatever other stuff I want •Records can implement arbitrary interfaces or protocols (maps can't) •Records act as maps for most purposes •keys and vals return results in stable (per- creation) order
  21. 21. Materials in defrecord
  22. 22. Output
  23. 23. GPU programming libraries Using GPU in Clojure •Java Graphics API •Penumbra(OpenGL Wrapper) •Calx(OpenCL Wrapper) •ClojureCL(OpenCL Wrapper) •Neanderthal(BLAS Wrapper) •Shadertone(Shader programming)
  24. 24. Shadertoy in Clojure Shadertone •
  25. 25. Usage Shadertone
  26. 26. GLSL(OpenGL Shading Language) Shadertone
  27. 27. GLSL(raymarching) Shadertone
  28. 28. Lisp-like GLSL Shadertone
  29. 29. Lessons •Immutable vs mutable의 특성을 이해하고 적재적 소에 활용하자 • defstruct 보다는 defrecord • GPU를 활용할 수 있으나 아직 좀 부족한 감이 있다 • CPU최적화(e.g. SIMD) 방법은 찾지 못했다.(VM?)