플라즈마 효과 구현은 다음과 같은 주요 단계로 진행됩니다.
1. 창 설정 및 그리드 생성
-
Ruby2D 초기화:
require 'ruby2d'를 통해 라이브러리를 불러오고,set명령어로 창의 제목, 너비(640), 높이(480), 배경색을 설정합니다. -
렌더링 그리드 정의: 모든 픽셀을 계산하는 대신 성능 최적화를 위해
GRID_WIDTH(80),GRID_HEIGHT(60)를 정의하여 창을 논리적인 셀 그리드로 나눕니다. 각 셀은CELL_WIDTH,CELL_HEIGHT값을 가집니다. -
사각형 그리드 구축:
plasma_grid라는 2D 배열을 생성하고, 각 그리드 셀에 해당하는Rectangle객체를 초기 ‘black’ 색상으로 채워 넣습니다.
2. 플라즈마 핵심 수학 및 색상 변환
plasma_color함수: 플라즈마 효과의 핵심으로,x,y좌표와time변수를 입력받아 네 가지 다른 사인 함수(v1,v2,v3,v4)를 조합합니다.v1: 수평 파동v2: 수직 파동v3: 대각선 파동v4: 원형/방사형 파동- 각 사인 함수에
time변수를 다른 계수와 함께 추가하여 파동이 서로 다른 속도로 움직이며 복잡한 패턴을 생성하도록 합니다.
- 색상 변환: 사인 함수의 결과값(-1에서 1 사이)을 0-1 범위로 정규화한 후, 이를
hue값으로 사용합니다.hue를 기반으로 빨강(r), 초록(g), 파랑(b) 채널에 120도씩 오프셋된 사인 함수를 적용하여 무지개 그라데이션을 생성하고,[r, g, b, 1.0]형태의 RGBA 배열로 반환합니다.
3. 애니메이션 루프
-
update블록: Ruby2D의update블록은 매 프레임마다 실행됩니다. 이 블록 내에서time변수를 일정량(0.03) 증가시키고, 중첩된 반복문을 통해plasma_grid의 모든 셀에 대해plasma_color함수를 호출하여 새로운 색상을 계산하고 해당Rectangle객체에 적용합니다. -
show명령: 모든 설정과 로직이 완료된 후show명령으로 Ruby2D 창을 시작하고 애니메이션을 구동합니다.
4. 사용자 정의 및 성능 팁
-
커스터마이징:
time증분 값 변경으로 속도 조절, 추가적인 사인 웨이브 조합으로 패턴 복잡도 증가, RGB 변환 로직 변경으로 다양한 색상 팔레트(예: 불꽃, 바다) 구현이 가능합니다. -
성능 최적화:
GRID_WIDTH및GRID_HEIGHT감소, 사인 웨이브 수 줄이기, 색상 계산 간소화, 또는 매 프레임이 아닌 특정 주기마다 계산하는 등의 방법을 통해 성능을 향상시킬 수 있습니다.