나무모에 미러 (일반/어두운 화면)
최근 수정 시각 : 2024-11-10 17:42:26

Ren'Py

렌파이에서 넘어옴

Ren'Py
파일:attachment/renpy_launcher.jpg 파일:external/1926779177df570ad1ae35b9946fbed207e9b1eab0fb3c6ae019d8088ca0cb4e.jpg
1. 개요2. 장점
2.1. 오픈 소스2.2. 멀티 플랫폼 지원2.3. 직관적인 문법2.4. 자유도2.5. 체계적인 도큐먼트2.6. 엄청난 레퍼런스와 두터운 커뮤니티2.7. 파이썬2.8. GUI 작성 환경2.9. 지속적인 지원과 개선
3. 단점
3.1. 성능3.2. 보안
4. 후원5. 기타6. 관련 사이트7. 렌파이로 제작된 게임들8. 관련 문서

1. 개요


비주얼 노벨 제작을 위한 오픈 소스 게임 엔진. 개발자는 일명 파이톰(PyTom)으로 불리는 톰 로타멜(Tom Rothamel)이다.

렌파이라는 이름은 일본어 단어 연애([ruby(恋愛, ruby=れんあい)]; 렌아이)와 개발 언어인 파이썬에서 따 온 합성어다. 이 때문에 기초적인 파이썬 문법을 사용하지만 고급 수준까지 필요한 것은 아니다. 단순히 스페이스바만 누르면 되는 간단한 비주얼 노벨 정도는 시나리오와 그림만 있다면 금방 만들 수 있는 수준. 하지만 여기서 더 발전하려면 물론 렌파이 언어에 대해 이해가 필요하다. 조금만 손보면 어드벤처류의 게임이나 프린세스 메이커와 같은 육성 시뮬레이션 게임도 만들 수 있다.

SDL을 바탕으로 한 Pygame을 바탕으로 하고 있으며 6.99 버전부터는 SDL2를 바탕으로 한 Pygame을 바탕으로 쓰여졌다. 그래서 아이콘도 Pygame의 상징인 '게임 패드를 물고 있는 뱀'을 두른 탐험가의 모습이다. 기타 Ren'Py가 의존하는 프로그램의 목록은 SDK의 라이선스 페이지에서 확인할 수 있다.

2. 장점

텍스트 기반의 어드벤처 스크립트 문법을 만들기 위해서는 기획자나 게임 디자이너를 위한 스크립트 언어를 하나 마련해야 되는데, 프로그래머 입장에서는 바닥부터 이미지 처리와 컴파일러까지 다 만들기에는 너무나 거대한 프로젝트가 되어 버리고, 유니티코코스 위에 만들기에는 그냥 직접 프로그래머가 하드 코딩을 하는게 낫거나, 아무리 잘 만들어도 렌파이 스크립트 수준의 확장성을 가진 언어를 구현하기 힘들다.

렌파이 스크립트의 환경은 프로그래머들을 위한 언어와 기획자용 단순 스크립트 언어 사이에서 적절한 중간지대에 걸쳐 있는데, 텍스트 어드벤처 툴 중에서는 가장 프로그래머적 사상에 가까운 형태를 취하고 있다.

사실 아래에 언급된 이 툴의 장점들 또한 이러한 특성에서 모두 파생된 것.

2.1. 오픈 소스

무료로 사용할 수 있으며, MIT 라이선스 기반이라 별달리 제약이 없어서 이걸로 만든 게임을 영리적 목적으로 판매할 수도 있으며 원한다면 GitHub에 공개되어 있는 프로젝트 소스 코드를 직접 수정하여 원하는 형태로 렌파이 개발 도구를 마개조할 수도 있다.

오픈 소스로 오랜 기간 커뮤니티의 기여로 개발된 툴이기에 안전성도 매우 뛰어나다.

2.2. 멀티 플랫폼 지원

또한 제작 환경과 실행 환경으로 윈도우, 리눅스, 매킨토시 등 멀티 플랫폼을 지원하고 있으며 내장툴인 RAPT와 Renios를 통해 안드로이드iOS 포팅도 가능하다. iOS는 Xcode 프로젝트로 출력하기 때문에 맥 컴퓨터가 필요하며, 앱스토어 출시에 개발자 라이센스가 필요하다.[1]

또한 모바일의 경우, 각 앱스토어(애플, 구글, 아마존)에 대한 인앱 결제 모듈도 쉽고 충실하게 구현되어 있다.

2.3. 직관적인 문법

스크립트 문법은 파이썬에서 영감을 받아 다른 비주얼 노벨 엔진들보다 코드가 직관적이고 간결하다. 다만 스크립트 언어 자체가 파이썬인 것은 아니며, 스크립트 도중에 블록을 열어 빌트인 파이썬 함수나, 직접 짠 파이썬 함수를 호출할 수 있다.

또한 자체적으로 GUI 작성을 하기 위한 스크린 언어라는 것이 존재하는데, GUI 요소들 사이의 계층구조를 들여쓰기를 통해 직관적으로 짤 수 있어 편리하다.

특히 들여쓰기(4 spaces)를 통해 간단하게 서브 블록을 만들 수 있는데, 다른 비주얼 노벨 엔진에서 계층을 표현하기 위해 괄호나 태그를 남발하는 걸 생각하면 무척이나 편한 편이다.

스토리 블록 간의 콜(서브루틴)과 점프의 차이를 명확하게 선언할 수 있는 등, 직관적인 면에서는 가히 최강이라 볼 수 있다. 특히 문법이 일관적이기 때문에 도큐먼트를 안 봐도 명령어들을 어떻게 써야할 지 헷갈리지 않는 것도 장점.

특히 렌파이를 제외한 다른 스크립트 엔진이나 유니티 확장 툴 사이의 가장 큰 차이는, 다른 비노베 툴들은 마크업 언어 특성을 물려받은 게 대부분이라 태그가 남발되어 가독성이 좋지 않고, 언어 문법에 일관성이 없어서 확장성도 떨어지고 버그도 많이 발생한다. 하지만 렌파이는 파이썬 문법을 계승했기에 각종 명령어들을 조합하는 방향성이 통일되어 있다.

2.4. 자유도

간결한 문법 덕분에 오히려 태그로 일일이 커맨드를 미리 지정해놓은 다른 비주얼 노벨 툴과 달리, 그냥 원하는 기능은 만들면 된다. 덕분에 일반적인 키네틱 노블은 물론, 육성게임이나 전략 시뮬레이션도 만들 수 있다.

사실 말이 비주얼 노벨 툴이지, 사실상 2D 이미지에 텍스트 기반 게임이라면 어떠한 장르의 게임도 만들 수 있는 자유도를 자랑한다.

2.5. 체계적인 도큐먼트

체계적인 도큐먼트가 부실한 다른 비주얼 노벨 엔진들과 달리, 사용되는 거의 대부분의 명령어와 함수 등에 대해 체계적이고 자세한 문서가 있는 것도 강점.

다른 비노베 툴들의 경우, 커뮤니티에 직접 물어보지 않으면 알 수 없는 명령어들이 많은데, 렌파이의 경우 어떤 처리를 하고 싶은데, 그런 명령어가 존재하는지 모르겠다 싶으면 도큐먼트에 몇가지 키워드만 조합해서 검색하면 보통 이미 존재하는 명령어가 있어 바로 찾을 수 있다.

2.6. 엄청난 레퍼런스와 두터운 커뮤니티

워낙 오랫동안 폭넓게 사용되었기에, 공식 커뮤니티인 Lemma Soft Forum에서 렌파이 개발에 대한 정보 교환이 매우 활발한 편이다.

모르는 것에 대해 물어보면 못해도 하루안에 누가 정답을 알려줄 것이며, 개발자인 PyTom도 시간을 내서 꼬박꼬박 답변을 매일 달아주는 편이다.

2.7. 파이썬

직접 파이썬 파일(py)로 작성한 기능들을 프로젝트 폴더에 첨부하여 사용할 수 있다. 다만 렌파이에 내장된 파이썬은 여러 라이브러리가 빠진 경량화 버전이기 때문에 numpy 등을 사용하여 복잡한 파이썬 코드를 작성하긴 힘들다. 그래도 서버 통신 등은 가볍게 구현할 수 있다.

사용하고자 하는 파이썬 라이브러리를 폴더 채로 프로젝트 내에 추가할 수는 있다. 다만 의존 라이브러리가 프로젝트 폴더와 렌파이의 경량 파이썬에 존재해야 하며, 순수 파이썬으로 작성된 모듈만 사용 가능하다. C 언어 기반의 파이썬 모듈은 사용할 수 없다. 이를 하려면 직접 렌파이 소스 코드를 직접 수정하여 빌드하는 수밖에 없다.

2.8. GUI 작성 환경

렌파이의 UI는 간결한 코드를 통해 동적 생성도 가능하다. UI를 붙박이 이미지로 일일이 만들어도 되지만, 작은 사이즈의 기준 이미지 몇 개만 지정하여 코드를 통해 다양한 형태의 UI로 변형 왜곡할 수도 있고, 순수 코드만으로도 다양한 색과 형태의 UI를 만들 수 있다. 파이썬 코드를 통해 사용자 해상도 환경에 따라 동적으로 조절해줄 수도 있다. 많은 경우 GUI 프로그램을 작성할 때 IDE에 내장된 어설픈 그래픽 에디터로 배치하는 것보다 코드로 작성하는게 직관성에선 더 나으며, 렌파이의 UI 전용 언어인 스크린 언어는 이 점을 충실히 만족시키고 있다.

문제는 6.99.10 버전까지 기본 제공되었던 UI 템플릿이 너무 구식이었던 것. 몇년째 디자인이 거의 바뀌지 않았으며, 저해상도 데스크탑 모니터를 기준으로 제작되었는지라 모바일 환경에서 보기 매우 흉했다. 직접 UI를 디자인하고 UI 코드를 작성하는데 익숙한 사람이야 기본 제공되는 템플릿을 그대로 사용할 리가 없으니 별로 문제가 되지 않았는데, UI 코드를 어떻게 처음부터 작성해야 할지 감을 잡기 어려운 입문자들에게는 그대로 쓰기엔 너무나 디자인이 구렸다.

하지만 모바일 디바이스 환경에 맞는 UI를 적극 지원하겠다고 명시한 렌파이 6.99.11 정식 릴리즈와 함께 모던 플랫 디자인과 좀더 객체지향적인 UI 코드가 기본 첨부 템플릿으로 적극 도입되었다. 이제는 기본 생성되는 UI를 거의 변경없이 출시해도 될 정도로 세련되게 변화하였고, 파이썬 코드를 사용할 필요 없이 스크린 언어 단계에서 사용자 디바이스의 종류(데스크탑, 핸드폰, 타블렛 등)에 따른 화면 크기를 감지하고 디바이스 별로 UI의 속성을 다르게 지정할 수 있어 모바일 환경을 위한 UI를 작성하기 매우 편해졌다.

2.9. 지속적인 지원과 개선

렌파이는 출시 이후 수년 동안 계속해서 PyTom 주도의 공개 프로젝트로 발전해왔고, 지금도 계속해서 커뮤니티의 피드백을 받아 지속적으로 업데이트가 되고 있다.

이는 다른 비주얼 노벨 엔진이 계속 나와도 렌파이가 계속 주류로 남아 있는 이유인데, 아무래도 비주얼 노벨 제작 툴이란 범용적으로 사용되는 개발 툴이 아니기에 툴 개발사나 개발자가 지속적인 개선과 사후 지원을 해주기 어렵기 때문이다. 해당 비노베 툴들이 도큐먼트가 부실한 것도 그러한 이유이다.

하지만 렌파이는 오픈 소스 커뮤니티를 기반으로 PyTom의 주도로 지속적으로 업데이트하고 있으며, 상당히 체계적으로 배포되고 있다. 프리 릴리즈와 알파, 베타를 칼같이 구분하며 배포하고, 도큐먼트도 상세하게 그때 마다 업로드되며, 커뮤니티에서는 활발하게 질문과 답이 오가는 등, 범용적으로 사용되는 상업엔진에 필적하는 지원 환경이 마련되어 있다.

그럴 일은 없겠지만 불운한 사건으로 PyTom이 렌파이를 더이상 개발할 수 없게 되어도, 이미 널리 사용되고 있는 이 오픈 소스 프로젝트를 다른 사람이 가만히 두지 않을 것이다.

사실 여태까지 다른 비노벨 엔진들의 문제점이 엔진 그 자체에 있다기보다는 제작자들이 시간이나 금전적인 이유로 지속적인 개선을 해주기도 힘들었으며, 커뮤니티가 아니라 개발사나 개발자 개인에게 의존한 형태기 때문에 빠른 버그 수정이나 기능 개선, 체계적인 문서 등을 기대하기 힘들었다. 하지만 렌파이는 규모 있는 커뮤니티의 기여를 받고 있기 때문에, 툴 제작자 개인의 사정으로 엔진의 지속적인 업데이트가 죽어버릴 염려가 거의 없다.

3. 단점

3.1. 성능

Python 언어로 동작하는 엔진의 특성상 게임 코드가 Python의 인터프리터를 거쳐서 실행되므로 직접 기계어 코드를 만드는 C/C++ 언어나 바이트코드를 만드는 Java나 C#보다 실행 속도가 느리다. 다만 하드웨어들의 성능이 향상되면서 문제가 되지 않는다. 애초에 텍스트 어드벤처 게임에서 사용하는 엔진이라 높은 성능을 요구하는 것도 아니긴 하다.

다만 문제는 모바일인데, PC보다 성능이 낮고 전력을 적게 먹는 CPU를 탑재한 휴대폰에서 느려질 수 있다. 물론 최적화가 상당히 진행되었지만, 근본적으로 파이썬을 이용하는 특성상 렌파이로 만든 모바일 비노베는 다른 모바일 비주얼 노벨보다 무거운 편이다. 특히 PC에서 정상적으로 동작하는 일부 기능들은 모바일 판에서는 지연시간이 너무 길어 자체적으로 렌파이에서 무한 루프로 판정을 때려버리고 버그를 내는 일도 있을 정도.

다만 게임을 못 돌릴 정도는 아니고, 레거시 기기들에서 잔렉이 많은 편이다.

3.2. 보안

빌드시 옵션에 따라서, 이미지 파일이나 (컴파일된) 코드 파일들을 전용 확장자로 묶어서 외부로 노출하지 못하게 할 수 있다. 문제는 이 파일을 코드 몇 줄로 해체하는 간단한 프로그램이 인터넷에 이미 나도는 것.

코드 같은 경우는 원본 코드가 담긴 rpy가 아니라 미리 컴파일한 rpyc를 빌드에 넣기 때문에 rpy를 넣도록 옵션을 방치하지 않는 이상 코드가 그대로 노출될 일은 없다. 물론 역컴파일을 통해 원본 코드를 추측할 수 있겠지만, 파이썬에 대한 역컴파일이 아니라 렌파이 코드에 대한 역컴파일이기에 기존 파이썬 도구를 그대로 사용할 순 없다.

다른 문제로는 DRM 기능이 포함되어 있지 않다. 공식적으로 지원하지 않는다고 못박았다. 즉, 렌파이 스크립트나 렌파이의 경량화된 파이썬을 가지고 DRM을 구현해야 하는데, 수준 높은 DRM을 구현하는 것이 불가능하다.

물론 덴더라이언의 경우처럼 로그인 방식을 사용하거나, 스팀 서버와의 통신을 사용할 순 있겠다. 하지만 애초에 비주얼 노벨 툴이라는 것이 로그인을 요구하는 종류의 게임과는 거리가 멀기에 덴더라이언의 방식은 일반적으로는 적용하기 힘든 편.

또한, 안드로이드의 경우 인앱 결제 명령어 등 소수의 명령어를 제외하면, 렌파이 스크립트에서 직접 안드로이드 운영체제의 API들을 액세스할 방법이 전혀 없으므로 DRM을 만들 방법이 없다. 렌파이 스크립트를 사용하지 않고, 렌파이 RAPT의 임시 파일들을 모아 직접 안드로이드 스튜디오 프로젝트를 생성 후, 실행 단계에서 안드로이드 네이티브로 직접 앱스토어 연동 DRM을 짜는 방법이 있을 순 있겠지만, 안드로이드 개발에 대한 지식을 요구한다.

사실 코드와 기타 소스 파일에 대한 보안을 철저히 구현하는 수준을 원한다면 비노베 툴이 아니라 직접 좀 더 하드웨어에 가까운 게임 엔진을 써야 하는게 맞다. 비주얼 노벨이 그렇게 엄한 보안을 요구하지 않기 때문에 큰 문제는 아니다. 유니티 엔진만 해도 보안에 취약한 점은 마찬가지이다.

스마일게이트의 게임 플랫폼인 스토브의 경우 자체적인 DRM이 존재하는데, 이게 렌파이에도 대응된다.

4. 후원

렌파이 개발자들이 렌파이 개발에 좀더 시간을 투자할 수 있도록 2017년 중반부터 패트론을 통해 후원을 받고 있는 중이다.

5. 기타

2012년에 화제가 됐던 아날로그 역시 렌파이 기반으로 제작되어 스팀에서 판매되었으며 멀티 플랫폼을 지원하여 윈도우와 맥 둘 다 실행이 가능하다. 물론 이론적으로는 리눅스에서도 실행할 수 있다.

주로 일본 인디 게임을 영어 번역하여 퍼블리싱하는 세카이 프로젝트에서 렌파이 엔진을 PS Vita용으로도 포팅하고 있다고 한다...의 정체는 RenPy에서 Unity로 자동으로 포팅하는 유니티 확장 툴로 밝혀졌다. 세카이 프로젝트에서 RenPy를 PS4용으로 만든다는 말이 있었는데, 이것을 가리키던 것. 유니티는 본래 콘솔과 모바일을 모두 지원하는 개발 엔진이니 렌파이를 유니티로 포팅하면 자연스럽게 멀티 플랫폼이 된다는 발상.

다만 세카이 프로젝트 외부 개발자들한테는 공개하지 않는다고 한다.

한국어 페이지(두번째 페이지 2020년 1월 기준으로 접속 불가)가 있긴 하지만 양은 실로 빈약하다. 인터페이스 한글화는 6.9.2 버전(2009년 6월)에 와서야 이뤄졌고, 당시 국내에서 렌파이를 알던 사람은 정말 얼마 없었기 때문.(포럼 기준으로 고작 2명이었다 카더라) 그나마 강의 블로그는 준비되어 있으니 그것을 봐도 좋다. 또한 튜토리얼 게임도 번역이 되어 있다.

렌파이 문서 번역 페이지에 들어가서 로그인 후 번역을 할 수 있다. 자세한 방법은 여길 참조.

오류가 어딘가 낯이 익다

rpy 스크립트는 텍스트 에디터를 통해서 작업해야 하는데 Atom과 Editra가 추천된다. Visual Studio Code도 링크 가능하며 Renpy 문법을 지원하는 플러그인을 설치하면 맞춤 하이라이팅 등을 쓸 수 있다.

7.4 버전부터 Live2D를 지원한다. 아직 완전히 안정되지는 않은 듯. 7.4.4 버전에서는 Live2D 캐릭터가 움직이지 않는 버그가 있다. Live2D를 활용하려면 7.4.1, 7.4.5 등의 버전을 선택해야 한다.

2022년 6월 27일자로 Python 3.0을 활용하는 8.0 버전이 릴리즈됐다. 파이썬 2를 사용하는 7버전과 코드 일부가 호환되지 않는다.

6. 관련 사이트

렌파이 공식 사이트
Lemma Soft Forums - 렌파이 공식 사이트와 별도의 사이트라서 착각할 수도 있는데, 여기가 공식 포럼이다.
VMO - 한국의 렌파이 및 소설형 게임[2] 제작자들 모임이다. 글이 자주 올라오는 건 아니나 질문에 대한 답변은 잘 달린다.

7. 렌파이로 제작된 게임들

※1 한국어로 된 것은 특별히 ☆ 표시한다.
※2 나머지는 이곳에서 확인 가능하고 원한다면 목록에 추가 요청할 수도 있다.

8. 관련 문서


[1] 이 점은 유니티 등 다른 게임 엔진들을 통한 iOS 게임 제작에 있어서도 동일하다.[2] 비주얼 노벨, 텍스트 어드벤처, 육성 시뮬레이션 등등 소위 스토리 게임들(2D)[3] 나중에 게임메이커로 교체됨.[4] 총 1~3편으로 이루어져 있는데 현재 1편만 공식적으로 한국어를 지원한다.