SlideShare a Scribd company logo
Graphics Programming	

In Clojure
양승헌
소개
•A Gamedev
•Emacs
•C / Lisp
Outline
•Graphics/Game programming in Clojure
•Raytracer
•Shadertone
구글링
Graphics/Game In Lisp
•장점
•Immutable persistant data structure
•awesome for game scripting
•awesome for interactive programming
!
•고려할점
•careful for performance
•natural GC-heavy process
•mutability
Naughty Dog
어느 게임회사 모집 공고
Architecture of Data Compiler
DC in Naughty Dog
!
!
!
!
https://con.racket-lang.org/2013/danl-slides.pdf
Lessons in DC
https://con.racket-lang.org/2013/danl-slides.pdf
리습을 공부해도 쓸일이 없다
리습과 나
•Clojure SNG 서버를 만들어 보았다
■ 프로토타이 단계에서 필요한 기능을 금방 만들었다.
■ 금방 만들다 보니 금방 실증났다.
■ 다른 프로그래머가 쳐다 보기도 싫어한다.
■ 차라리 Python이나 Go 로 만들지 그랬냐며 빈정댄다.
!
•다른 걸 해보자.
■ 굳이 Clojure로 하지 않아도 될것들
■ 그냥 최근에 C로 짜본건들
■ Raytracer / Raymarching
Tracing Rays :-)
Raytracer
•The “Hello World” in Graphics
•A numerical application(Linear Algebra)
•Rendering algorithms
•Takes lots of time
대략 이런 결과물
Raytracer
Great Paul Graham
Raytracer in Common lisp
•9장 예제
Vector
Raytracer in Detail
Sphere
Raytracer in Detail
•코드 설명
Tracing
Raytracer in Detail
•코드 설명
Writing Numbers into file
Raytracer in Detail
•코드 설명
PPM file
Raytracer in Detail
•코드 설명
Viewing PPM file
Raytracer in Detail
•코드 설명
Features
Advanced Raytracer
•Shadow
•Lambertian Material
•Metal Material
•Dielectric Material
•Camera
•Performance
Vector[1d] / Matrix[md] library
clojore.core.matrix
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
Materials in defrecord
Output
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)
Shadertoy in Clojure
Shadertone
•shadertoy.com
Usage
Shadertone
GLSL(OpenGL Shading Language)
Shadertone
GLSL(raymarching)
Shadertone
Lisp-like GLSL
Shadertone
Lessons
•Immutable vs mutable의 특성을 이해하고 적재적
소에 활용하자
• defstruct 보다는 defrecord
• GPU를 활용할 수 있으나 아직 좀 부족한 감이 있다
• CPU최적화(e.g. SIMD) 방법은 찾지 못했다.(VM?)

More Related Content

What's hot (8)

PDF
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
devCAT Studio, NEXON
 
PPTX
The Future of C# and .NET Framework
명신 김
 
PPTX
NDC 2017 마이크로토크 - Spacemacs: 최고의 에디터는 Emacs도 Vim도 아니다. Emacs와 Vim이다!
영호 김
 
PDF
격변하는 프로그래밍 언어, 이제는 Let it go
Chris Ohk
 
PDF
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
NAVER D2
 
PDF
객체지향프로그래밍의 소개
Byeung-Ho Han
 
PDF
Concurreny programming
Jaejin Yun
 
PPTX
Introduction to Golang v2
Hyejong
 
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
devCAT Studio, NEXON
 
The Future of C# and .NET Framework
명신 김
 
NDC 2017 마이크로토크 - Spacemacs: 최고의 에디터는 Emacs도 Vim도 아니다. Emacs와 Vim이다!
영호 김
 
격변하는 프로그래밍 언어, 이제는 Let it go
Chris Ohk
 
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
NAVER D2
 
객체지향프로그래밍의 소개
Byeung-Ho Han
 
Concurreny programming
Jaejin Yun
 
Introduction to Golang v2
Hyejong
 

Viewers also liked (7)

PDF
제 5회 Lisp 세미나 - 클로저 개발팀을 위한 지속적인 통합
NAVER D2
 
PDF
core.logic (Clojure)
Seonho Kim
 
PDF
동시성 프로그래밍 하기 좋은 Clojure
Eunmin Kim
 
PDF
Re frame
Sang-Kyu Park
 
PDF
Dragon: A Distributed Object Storage at Yahoo! JAPAN (WebDB Forum 2017 / E...
Yahoo!デベロッパーネットワーク
 
PDF
Dragon: A Distributed Object Storage at Yahoo! JAPAN (WebDB Forum 2017)
Yahoo!デベロッパーネットワーク
 
PDF
Clojure Monad
Eunmin Kim
 
제 5회 Lisp 세미나 - 클로저 개발팀을 위한 지속적인 통합
NAVER D2
 
core.logic (Clojure)
Seonho Kim
 
동시성 프로그래밍 하기 좋은 Clojure
Eunmin Kim
 
Re frame
Sang-Kyu Park
 
Dragon: A Distributed Object Storage at Yahoo! JAPAN (WebDB Forum 2017 / E...
Yahoo!デベロッパーネットワーク
 
Dragon: A Distributed Object Storage at Yahoo! JAPAN (WebDB Forum 2017)
Yahoo!デベロッパーネットワーク
 
Clojure Monad
Eunmin Kim
 
Ad

More from NAVER D2 (20)

PDF
[211] 인공지능이 인공지능 챗봇을 만든다
NAVER D2
 
PDF
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
NAVER D2
 
PDF
[215] Druid로 쉽고 빠르게 데이터 분석하기
NAVER D2
 
PDF
[245]Papago Internals: 모델분석과 응용기술 개발
NAVER D2
 
PDF
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
NAVER D2
 
PDF
[235]Wikipedia-scale Q&A
NAVER D2
 
PDF
[244]로봇이 현실 세계에 대해 학습하도록 만들기
NAVER D2
 
PDF
[243] Deep Learning to help student’s Deep Learning
NAVER D2
 
PDF
[234]Fast & Accurate Data Annotation Pipeline for AI applications
NAVER D2
 
PDF
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
NAVER D2
 
PDF
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
NAVER D2
 
PDF
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
NAVER D2
 
PDF
[224]네이버 검색과 개인화
NAVER D2
 
PDF
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
NAVER D2
 
PDF
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
NAVER D2
 
PDF
[213] Fashion Visual Search
NAVER D2
 
PDF
[232] TensorRT를 활용한 딥러닝 Inference 최적화
NAVER D2
 
PDF
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
NAVER D2
 
PDF
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
NAVER D2
 
PDF
[223]기계독해 QA: 검색인가, NLP인가?
NAVER D2
 
[211] 인공지능이 인공지능 챗봇을 만든다
NAVER D2
 
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
NAVER D2
 
[215] Druid로 쉽고 빠르게 데이터 분석하기
NAVER D2
 
[245]Papago Internals: 모델분석과 응용기술 개발
NAVER D2
 
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
NAVER D2
 
[235]Wikipedia-scale Q&A
NAVER D2
 
[244]로봇이 현실 세계에 대해 학습하도록 만들기
NAVER D2
 
[243] Deep Learning to help student’s Deep Learning
NAVER D2
 
[234]Fast & Accurate Data Annotation Pipeline for AI applications
NAVER D2
 
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
NAVER D2
 
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
NAVER D2
 
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
NAVER D2
 
[224]네이버 검색과 개인화
NAVER D2
 
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
NAVER D2
 
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
NAVER D2
 
[213] Fashion Visual Search
NAVER D2
 
[232] TensorRT를 활용한 딥러닝 Inference 최적화
NAVER D2
 
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
NAVER D2
 
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
NAVER D2
 
[223]기계독해 QA: 검색인가, NLP인가?
NAVER D2
 
Ad

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