스크립트 엔진으로써의 파이썬 선택에 도움 좀 부탁드립니다.

프로그래밍 일반에 관한 포럼입니다.

Moderator: 류광

Locked
비회원

스크립트 엔진으로써의 파이썬 선택에 도움 좀 부탁드립니다.

Post by 비회원 »

첫번째 질문은 파이썬을 사용하는 것이 옳은가 하는 것입니다.
보통은 루아를 많이 쓰는 것으로 알고 있습니다.

하지만 1% 라도 익숙한 것은 파이썬이고, 파이썬이 더 끌리기 때문에 파이썬으로 선택을 했습니다.
이에 대해서 장단점이나 조언 어떤 것이든 부탁드립니다.

두번째 질문은 라이브러리 선택입니다.
엔진 내에서 파이썬 라이브러리를 사용해서 파이썬을 얻어온 후 엔진을 조작해야 되는데,
딱히 적당한 라이브러리 등이 있을지 궁금합니다. (물론 플랫폼은 C++ 입니다.)

아, 파이썬을 활용할 곳은,
일단 기본적인 것들(로딩이나 그런것들)을 다룬 후 렌더링 부분만(특히 쉐이더)을 활용할 것이구요.
장기적으로는 엔진 전반적인 것을 다룰 수 있도록 할 예정입니다.

답변 부탁드립니다. 감사합니다.
rein
Posts: 45
Joined: 2007-07-05 16:18
Contact:

Post by rein »

파이썬을 채용해서 게임을 만든 경우도 몇몇 있습니다.

서버에서는 파이썬의 한 변형(이라기엔 좀 많이 바꾼거지만)인 stackless python을 사용하는 EVE Online이 있고,
클라쪽에서는 시드마이어의 문명 4에서 파이썬 엔진을 씁니다 (그래서 boost-python.dll 이 포함되어 있습니다).

속도가 엄청나게 중요한게 아니면(사실 그러면 스크립트 엔진을 쓰는게 에러) 그냥 파이썬을 써도 큰 문제는 없다고 생각합니다. 파이썬을 붙일 방법도 몇 가지 존재하고요(C++이라면 SWIG이나 boost-python등등; C라면 아예 파이썬 모듈로 넣어도 되니).
harkon
Posts: 57
Joined: 2002-03-06 09:00

Post by harkon »

일단 파이썬은 덩치가 꽤 큽니다. dll 크기가 2M 정도되는데, 루아는 100KB 거의 20배차이나죠. 파이썬쪽 자료보면, 비교대상 언어로 java가 언급되는데, 덩치가 큰 많큼 소스 컴파일하기위해서 이것저것 따라오는게 많겠죠.

그리고, 전체적인 자료는 파이썬이 훨씬 많겠지만, 임베딩쪽은 루아쪽이 더 찾기 쉬울겁니다. 파이썬쪽은 파이썬이 기반이고, 포함되는 모듈을 c/c++로 작성해서 넣어서 사용하는 경우가, 훨씬 많거든요.

루아 문법이 불편하시면, javascript 쪽도 한 대안이 될 수 있습니다. 게임쪽은 아니더라도, 다른 어플리케이션쪽에선, 임베딩 스크립터 엔진으로 잘 사용되고 있으니까요. 파이어폭스에 들어가는 스파이더몽키 900KB, 구글 크롬의 v8이 1M정도 크기입니다.
myevan
Posts: 1314
Joined: 2003-03-04 10:21
Contact:

Post by myevan »

파이썬 게임에 활용한지 7년째입니다 : )

일단 바인딩툴로는 직접 바인딩, ctypes, boost::python & pyste, swig 등등이 있는데...

swig 가 제일 낫다고 생각합니다.

사용하기에는 boost::python 는 상당히 편하지만,

컴파일 속도가 부담이 되고 내부 구조를 살펴보기 어렵기 때문에 문제 대응하기가 쉽지 않습니다.

반면 swig 는 Python API 코드를 만들어주는 방식이기 때문에 특정한 C++ 문법 적용시

실제 어떻게 작동되는지를 파악할수 있기 때문에 튜닝을 하기 편하고 가볍습니다.


저의 실례를 들어보면;

boost::python 과 swig 모두 스마트 포인터를 지원합니다.

작업중 boost::python 의 경우 boost::weak_ptr 과 게임브리오 스마트 포인터 지원시 문제가 발생했는데,

아직까지 시원한 해결 방법을 못 찾았지만 swig 로는 쉽게 해결했습니다.

템플릿 코드 분석과 C++ 소스 분석의 차이는 의외로 상당합니다.


-----------------

루아랑 파이썬의 임베딩 난이도는 별반 차이 없습니다.

Code: Select all

lua:
pushi
pushs
call
v = pop

python:
v = conv(call(int(), str()));
이런 정도 차이입니다.

-----------------

질문자분 이야기중에 문제가 될만한 부분은 활용 용도인데...

렌더링에서는 대개 어떤 스크립트 라이브러리도 적절하지 않습니다;

스크립트는 컨텐츠 제작에는 편하지만, 하부로 내려갈수로 적당하지 않습니다~

...
빗자루네 http://www.myevan.net >_<b
Locked