Python으로 4GB RAM PC에서 1억 화소 줄리아 셋 만들기

발행: (2026년 6월 18일 AM 04:52 GMT+9)
8 분 소요
원문: Dev.to

출처: [Dev.to](https://dev.to/divyanshusinha136/how- i-generated-a-100-million-pixel-julia-set-on-a-4- gb-ram-pc-using-python- 1e2j)

프랙탈은 프로그래머들에게 수십 년간 매료시켜 왔습니다.
맨델브로 집합부터 줄리아 셋까지, 이러한 수학적 구조는 간단한 방정식으로도 놀랍게도 멋진 패턴을 생성할 수 있습니다.
프랙탈 자체를 생성하는 것이 아니라, 극한 해상도로 생성하는 것이 과제다.

A 10,000 × 10,000 이미지는 다음과 같은 픽셀을 포함한다: 1억 개(100,000,000) 픽셀
그것은 1억 개의 픽셀이다.

많은 이미지 생성 접근 방식은 디스크에 저장하기 전에 전체 이미지를 메모리에 저장하려고 시도한다. 이러한 해상도에서는 메모리 사용량이 빠르게 문제가 될 수 있다.
이때 pyaitk.CLSE의 StreamingWriter가 유용하게 작동한다.

RAM에 전체 이미지를 구축하는 대신, 행을 생성하고 바로 디스크에 기록한다.

이 문서에서는 메모리 사용량을 조절하면서 10K 해상도의 줄리아 셋 프랙탈을 생성해 보겠습니다.

from pyaitk.CLSE import StreamingWriter
WIDTH = 10000
HEIGHT = 10000
MAX_ITER = 300
C_REAL = -0.7
C_IMAG = 0.27015
with StreamingWriter(
     "julia_10k.png",
    width=WIDTH,
    height=HEIGHT,
    bpp=24
) as sw:

    for py in range(HEIGHT):

        row  = []

        zy  = ((py  / HEIGHT)  * 3.0)  - 1.5

        for px in range(WIDTH):

            zx  = ((px  / WIDTH)  * 3.0)  - 1.5

            iteration  = 0

            while (
                zx  * zx  + zy  * zy  2

해점이 탈출한 것으로 간주됩니다.
안정적인 포인트는 특유의 줄리아 셋 구조를 만든다.
반복 과정을 마친 후 색상이 할당된다.

color = int(
    255 * iteration / MAX_ITER
)

픽셀 색상은:

(
    color,
    color // 2,
    255 - color
)

이것은 깊은 파랑에서 밝은 하이라이트까지 부드러운 그라데이션을 만든다.
고급 색상 맵은 더욱 드라마틱한 결과를 낼 수 있다.

전통적인 이미지 생성 워크플로우는 일반적으로 다음과 같은 패턴을 따른다:
이미지를 할당한다
모든 픽셀을 메모리에 저장한다
이미지를 저장한다

소규모 이미지에서는 문제가 되지 않는다.
하지만 10,000 × 10,000 RGB 이미지는 1억 개 픽셀을 포함한다. 해상도가 증가함에 따라 메모리 요구량이 급격히 늘어나며, 추가 처리 버퍼가 사용될 경우 특히 그렇다.

StreamingWriter는 다른 접근 방식을 취한다:
행 생성
행을 디스크에 기록
행 삭제
다음 행 생성

주어진 시점에서는 단 하나의 행(및 소량의 메타데이터)만 메모리에 존재하면 된다.
메모리 사용량이 비교적 안정적인 이유는 전체 이미지가 동시에 RAM에 저장될 필요가 없기 때문이다.

이는 구형 노트북, 에ント리 레벨 PC, 가상 머신, 또는 약 4GB RAM의 시스템을 사용하는 개발자들도 워크스테이션 수준 하드웨어 없이 대용량 프로시저 이미지를 생성할 수 있음을 의미한다.
완전한 1억 개 픽셀 이미지를 메모리에 저장하려는 요구 없이, StreamingWriter는 데이터를 직접 디스크에 스트리밍한다.

이 결과는 전통적인 메모리 기반 접근 방식보다 훨씬 더 크게 확장될 수 있는 워크플로를 제공한다.

해상도를 이해하기 위해 비교해 보겠습니다.

Resolution
Pixels
1920×1080 2.07 Million
3840×2160 (4K) 8.29 Million
7680×4320 (8K) 33.18 Million
10000×10000 100 Million

이 단일 프랙탈 이미지는 일반적인 8K 렌더보다 더 많은 픽셀을 포함한다.

같은 스트리밍 접근 방식은 많은 프로시저 그래픽 시스템에 적용될 수 있다:
맨델브로 집합
퍼린 노이즈
보로노이 다이어그램
지형 지도
열 지도
과학 시각화
AI 데이터셋 생성
프로시저 아트웍

렌더링 로직이 바뀐다.
스트리밍 아키텍처는 정확히 동일하게 유지된다.

현대 디스플레이는 해상도를 계속 높이고 있다.
동시에 프로시저 콘텐츠 생성은 다음과 같은 분야에서 점점 더 중요해지고 있다:
게임
시뮬레이션
AI
과학 계산
생성형 아트

이 자산들을 효율적으로 생성하려면 단순히 빠른 알고리즘만으로는 충분하지 않다.
메모리 효율적인 워크플로가 필요하다.

StreamingWriter는 바로 그것이다.

줄리아 셋을 생성하는 것은 이미 흥미로운 수학적 연습이다.
10,000 × 10,000 해상도로 하나 생성하면 메모리 관리가 효율적으로 이루어져야 하는 전혀 다른 과제가 발생한다.

프랙탈 수학과 pyaitk.CLSE.StreamingWriter를 결합함으로써 1억 개 픽셀 이미지를 생성하면서 전체 이미지를 메모리에 보관할 필요 없이 할 수 있다.

이러한 렌더링의 가장 흥미로운 점 중 하나는 고급 워크스테이션에 한정되지 않다는 것이다.
행 단위 스트리밍 덕분에 약 4GB RAM의 시스템도 완전히 메모리에 저장하는 워크플로우를 사용하지 않고 대형 프로시저 이미지를 생성할 수 있다.

간단한 방정식에서 시작됩니다:
z = z² + c

결국 한 행씩 생성되는 대형이고 고도로 상세한 프랙탈 이미지가 된다.

이것이 스트리밍 이미지 생성의 힘이다.

pip install pythonaibrain[clse]
github.com/DivyanshuSinha136/Pythonaibrain-1.1.9

0 조회
Back to Blog

관련 글

더 보기 »