60

Click here to load reader

WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

WEBGL + NODE.JS + CUDA를이용한

서버사이드 렌더링

Kasa Study (2012/10/25)김혁

Tuesday, October 30, 12

Page 2: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

목적

설치 없는 클라이언트 3D 툴

클라우드 기반 렌더링 서버(Render Farm)

Tuesday, October 30, 12

Page 3: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

현실 타협(개인 프로젝트입니다... -ㅅ-;; )

Tuesday, October 30, 12

Page 4: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

목적

WebGL 을 이용한 3D 모델 뷰어! (카메라 조작, 조명 조작)

node.js 를 이용한 서버 + CUDA를 이용한 렌더링 엔진

프로토타입 버전은 일단 1서버 1 client.

Tuesday, October 30, 12

Page 5: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

Tuesday, October 30, 12

Page 6: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

Click

Tuesday, October 30, 12

Page 7: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

Click

Tuesday, October 30, 12

Page 8: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

Click

Tuesday, October 30, 12

Page 9: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

Click

Tuesday, October 30, 12

Page 10: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

Click

Tuesday, October 30, 12

Page 11: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

Click

Tuesday, October 30, 12

Page 12: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

발표 내용

사용한 기술들에 대한 간략한 소개

구현 과정

차후 기술 발전 동향에 관한 논의

Tuesday, October 30, 12

Page 13: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

필요한 기술들

웹 3D

웹 기반 텍스트 & 바이너리 데이터 전송

웹 서버에서 CUDA 사용

Tuesday, October 30, 12

Page 14: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

구현 OverviewClient

(Internet Browser)Web Server(node.js)

Tuesday, October 30, 12

Page 15: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

구현 OverviewClient

(Internet Browser)

WebGL (Three.js)

Web Server(node.js)

Tuesday, October 30, 12

Page 16: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

구현 OverviewClient

(Internet Browser)

WebGL (Three.js)

Web Server(node.js)

BinaryJS+

BinaryImageJS

BinaryJS+

BinaryImageJS

Tuesday, October 30, 12

Page 17: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

구현 OverviewClient

(Internet Browser)

WebGL (Three.js)

Web Server(node.js)

BinaryJS+

BinaryImageJS

BinaryJS+

BinaryImageJS

AJAX

Tuesday, October 30, 12

Page 18: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

구현 OverviewClient

(Internet Browser)

WebGL (Three.js)

Web Server(node.js)

BinaryJS+

BinaryImageJS

BinaryJS+

BinaryImageJS

AJAX

바이너리 데이터

Tuesday, October 30, 12

Page 19: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

구현 Overview

Hyper3D-GI(CUDA Rendering Engine)

node C++ addonfor Hyper3D-GI

Web Server(node.js)

Tuesday, October 30, 12

Page 20: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

구현 Overview명령

(Load Scene, Render)

Hyper3D-GI(CUDA Rendering Engine)

node C++ addonfor Hyper3D-GI

Web Server(node.js)

Tuesday, October 30, 12

Page 21: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

구현 Overview명령

(Load Scene, Render)

Hyper3D-GI(CUDA Rendering Engine)

node C++ addonfor Hyper3D-GI

Web Server(node.js)

Tuesday, October 30, 12

Page 22: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

구현 Overview명령

(Load Scene, Render)

Hyper3D-GI(CUDA Rendering Engine)

node C++ addonfor Hyper3D-GI

Web Server(node.js)

Tuesday, October 30, 12

Page 23: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

구현 Overview명령

(Load Scene, Render)

Hyper3D-GI(CUDA Rendering Engine)

node C++ addonfor Hyper3D-GI

Web Server(node.js)

Tuesday, October 30, 12

Page 24: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

구현 Overview명령

(Load Scene, Render)

Hyper3D-GI(CUDA Rendering Engine)

node C++ addonfor Hyper3D-GI

Web Server(node.js)

Tuesday, October 30, 12

Page 25: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

구현 Overview명령

(Load Scene, Render)

Hyper3D-GI(CUDA Rendering Engine)

node C++ addonfor Hyper3D-GI

Web Server(node.js)

데이터(Scene, 이미지)

Tuesday, October 30, 12

Page 26: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

사용한 기술들

WebGL ( Three.js ) - 3D Viewer + Postprocessing

node.js

node.js C++ 모듈

CUDA 엔진

AJAX (Asynchronous Javascript and XML)

socket.io (BinaryJS)

Tuesday, October 30, 12

Page 27: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

WebGL

웹에서 돌아가는 OpenGL ES 2.0

Javascript API

Internet Explorer 는 지원 안함

버전 1.0 스펙은 2011년 2월 만들어짐. 아직 발전 중

Tuesday, October 30, 12

Page 28: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

Three.js

WebGL을 쉽게 사용할 수 있도록 도와주는 Javascript 라이브러리

귀찮은 작업들이 모두 감춰져있어서 작업하기 용이함

많은 프로젝트에서 사용

생각보다 많은 기능들을 지원하고 있음

Tuesday, October 30, 12

Page 29: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

Three.js 예제

Featured Projects: http://mrdoob.github.com/three.js/

Car Visualizer: http://carvisualizer.plus360degrees.com/threejs/

Tuesday, October 30, 12

Page 30: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

그 외 클라이언트 라이브러리

jQuery

jQuery UI

dat-gui: HTML & Javascript UI 컨트롤러 라이브러리

Tuesday, October 30, 12

Page 31: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

Tuesday, October 30, 12

Page 32: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

jQuery UI

Tuesday, October 30, 12

Page 33: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

dat-gui

Tuesday, October 30, 12

Page 34: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

node.js

구글의 V8 엔진을 기반으로한 네트워크 어플리케이션

이벤트 기반, 넌블러킹 I/O

싱글 쓰레드 기반, 가볍고 빠름

전반적으로 비동기 처리

다양한 모듈을 사용 많은 기능들을 사용할 수 있음 (eg. BinaryJS)

Tuesday, October 30, 12

Page 35: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

싱글 쓰레드, 비동기 처리

Hyper3D-Web - server/web.jshttps://github.com/Hybrid0/Hyper3D-Web/blob/master/server/web.js

sendImageFile function

(참고: web.js는 차후 server.js로 파일 이름이 변경 될 예정)

Tuesday, October 30, 12

Page 36: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

node C++ addon

윈도우에서는 node 를 빌드해야함(리눅스, 맥에서는 node-waf로 매우 간단하게 가능)

빌드한 node.lib를 이용해서 C++ 함수를 호출해주는 것이 목적

비동기 처리의 장점을 그대로 얻어올 수 있음

내부의 블러킹 처리는 자동으로 별도의 쓰레드로 관리 됨

Tuesday, October 30, 12

Page 38: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

Hyper3D-GI

오프라인 렌더링용 엔진

현재 CUDA 위주로 작업 중

현재 소스 상태는 .... &@*!)@#&)!@!)(!_&!@#(!@^

github에 올라가 있는 소스는 상당히 예전 소스

Tuesday, October 30, 12

Page 39: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

BinaryJS

socket.io (web socket)를 이용하여 바이너리 데이터를 주고 받을 수 있도록 하는 node 모듈

BinaryJS를 이용하여 이미지를 편리하게 주고 받을 수 있도록 하는 BinaryImageJS 를 추가로 제작하였음 (Three.js 텍스쳐로 변환)

데이터 전송시 meta 데이터로 JSON 정보를 함께 보낼 수 있음

Tuesday, October 30, 12

Page 40: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

데이터 전송의 예 - 렌더링 요청{ command: 'render', renderMethod: 'raytracing', camera: { position: [ 297.0508766427297, 163.66725462109272, 175.97522643426097 ], direction: [ -0.4801681339740753, -0.11271892488002777, -0.8699040412902832 ], upDirection: [ -0.1005520448088646, 0.9922450184822083, -0.07306887209415436 ], aspectRatio: 2, fov: 45 }, screenWidth: 800, screenHeight: 400 }

Tuesday, October 30, 12

Page 41: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

데이터 전송의 예 - 렌더링 요청

BinaryJS로는 JSON을 그대로 보낼 수 있음(바이너리 데이터는 빈 배열)

AJAX로 요청하는 것도 좋음

Tuesday, October 30, 12

Page 42: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

데이터 전송의 예 - 이미지 데이터

전송은 바이너리 데이터와 meta (JSON) 데이터로 이루어짐

meta 데이터를 통해서 어떤 데이터인지를 판별함

Tuesday, October 30, 12

Page 43: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

데이터 전송의 예 - 이미지 데이터

meta = { imageInfo: { width: 800, height: 400, dataFormat: BinaryImageJS.BinaryDataFormat.UINT8, targetDataType: BinaryImageJS.TargetDataType.THREE_JS_TEXTURE }}

Tuesday, October 30, 12

Page 44: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

간단한 시연(을 통한 동작 과정 설명)

http://youtu.be/ww79ewuQjd8

Tuesday, October 30, 12

Page 45: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

Psudo-서버를 이용한 데모

Tuesday, October 30, 12

Page 46: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

데모 이미지

Tuesday, October 30, 12

Page 47: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

데모 이미지

Tuesday, October 30, 12

Page 48: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

데모 이미지

Tuesday, October 30, 12

Page 49: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

데모 이미지

Tuesday, October 30, 12

Page 50: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

데모 이미지

Tuesday, October 30, 12

Page 51: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

데모 이미지

Tuesday, October 30, 12

Page 52: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

포스트프로세싱

Tuesday, October 30, 12

Page 53: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

포스트프로세싱

Tuesday, October 30, 12

Page 54: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

포스트프로세싱

Tuesday, October 30, 12

Page 55: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

포스트프로세싱

Tuesday, October 30, 12

Page 56: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

포스트프로세싱

Tuesday, October 30, 12

Page 57: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

차후 계획MLT/PPM 렌더링 지원

포스트프로세싱 강화

Scene 업로드 처리

조명 컨트롤, 재질 수정

Multiple-client (세션과 리소스 관리)

등등...

Tuesday, October 30, 12

Page 58: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

외부 라이브러리

node (js)

BinaryJS:

Three.js

NVIDIA CUDA

Tuesday, October 30, 12

Page 59: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

소스는 작업하면서 올리는 중(언젠가는 올라가...겠죠 -ㅅ-;; )

BinaryImageJS: https://github.com/Hybrid0/BinaryImageJS BinaryJS를 이용해서 이미지를 전송하는 용도의 간단한 모듈

Hyper3D-GI: https://github.com/Hybrid0/Hyper3D-GI렌더링 엔진 (현재 소스 코드는 로컬에서만 작업중)

Hyper3D-Web: https://github.com/Hybrid0/Hyper3D-Webnode.js 관련 코드들

Tuesday, October 30, 12

Page 60: WebGL + node.js + CUDA를 이용한 서버사이드 렌더링

감사합니다( Q & A )

Tuesday, October 30, 12