init:
픽셀당 한 번 실행돼요. 초기 오빗 값과 보조 변수를 여기서 설정하세요.
FractalPark의 검증된 FRM 하위 집합을 배우고, 소스가 GPU 셰이더가 되는 과정을 이해하며, 에디터가 사용하는 동일한 예제로 작동하는 수식 세 개를 만들어 보세요.
FRM은 반복 프랙탈을 설명하는 간결한 텍스트 기반 방식이에요. 수식은 시작 상태, 각 오빗마다 반복되는 계산, 그리고 반복을 계속할지 결정하는 조건을 정의해요.
이 형식은 렌더링 프로그램을 다시 빌드하지 않고도 실험을 교환할 수 있게 해준 수식 파일이 있는 Fractint 생태계에서 성장했어요. FractalPark은 완전한 호환성을 주장하는 대신 자체 검증된 하위 집합을 문서화하면서 그 저작 아이디어를 브라우저 워크플로우로 옮겨왔어요.
더 넓은 프로젝트의 기원과 역사에 대해서는 다음을 참조하세요: Fractint 프로젝트 사이트.
FractalPark은 의도적으로 설계된 FRM 하위 집합을 토큰화·파싱·검증·컴파일해요. 아래 표는 직접 작동하는 구성, 문서화된 FractalPark 의미론을 가진 구성, 현재 워크플로우가 보존할 수 없는 구성을 구분해요.
| 수준 | 의미 | 검증된 범위 |
|---|---|---|
| 지원됨 | 컴파일러 테스트로 검증되며 의미론적 제약 없이 사용할 수 있어요. |
|
| 변형 지원 | 문서화된 의미론적 차이를 두고, 또는 FractalPark 확장으로 수용돼요. |
|
| 지원 안 됨 | 현재 컴파일러나 파일 워크플로우가 보존하지 못해요. 조용히 다시 쓰는 대신 거부돼요. |
|
이것은 검증된 호환성 기준선이지, 완전한 Fractint 호환성을 주장하는 것은 아니에요. 컴파일러가 변경되면 이 매트릭스와 테스트도 함께 변경돼야 해요.
이 기능 수는 버전이 지정된 매니페스트에서 가져왔어요. 588개의 대상 항목은 579개의 strict-v2 통과와 9개의 문서화된 면제로 구성되며, 별도의 117개 항목은 안정적인 사유와 함께 제외돼요.
매개변수: p1, p2, p3, p4, p5 · 함수 슬롯: fn1, fn2, fn3, fn4
기능 매니페스트 v1 · 엄격한 의미론 v2
FractalPark FRM 수식은 이름 있는 선언 하나와 세 개의 명시적 섹션으로 구성돼요. 이들이 함께 모든 픽셀의 상태 전이를 정의해요.
픽셀당 한 번 실행돼요. 초기 오빗 값과 보조 변수를 여기서 설정하세요.
반복마다 한 번 실행돼요. z와 다음 반복에 필요한 상태를 업데이트하세요.
오빗을 계속할 조건을 반환해요. 조건이 거짓이 되면 그 점은 이탈한 거예요.
섹션 이름은 주석이 아닌 구조적 요소예요: 빠뜨리거나 잘못 쓰면 진단이 생성돼요.
언어는 의도적으로 작게 유지돼요: 표현식은 복소수 연산을 기술하고, 문장은 오빗 상태를 업데이트하며, 제어 흐름은 업데이트 중 하나를 선택해요.
FractalPark은 FRM 텍스트를 셰이더에 그대로 붙여넣지 않아요. 소스를 단계적 컴파일러에 통과시켜 문법, 의미, 생성 코드, 진단이 연결된 상태를 유지해요.
에디터, 붙여넣기, 또는 로컬 파일의 정확한 텍스트가 권위 있는 입력이에요.
렉서는 이름, 숫자, 연산자, 섹션 표시자, 주석, 지시어를 소스 위치와 함께 인식해요.
파서는 구조화된 수식 트리를 만들고 잘못된 선언, 표현식, 제어 흐름 블록을 보고해요.
검증기는 표준 수식이 생성되기 전에 이름, 타입, 섹션, 지원되는 의미론을 확인해요.
코드 생성은 셰이더 함수를 출력하고 생성된 GLSL에서 FRM 소스로의 매핑을 기록해요.
컴파일이 성공하면 렌더러와 셰이더 조립 시스템이 사용하는 동일한 수식 플러그인 계약이 돼요.
공유 컴파일러 계약은 탐색기, 독립형 에디터, 저장된 커스텀 수식, 예제, 테스트가 하나의 구현 경로를 따르게 해요.
이 예제들은 가장 작은 이차 수식에서 파라미터와 상태 기반 피드백까지 점진적으로 나아가요. 각 소스 블록은 공유 예제 레지스트리에서 직접 가져오며 테스트 중에 컴파일돼요.
레슨 1
가장 작은 이탈 시간(escape-time) 수식으로, init / loop / bailout 구조를 먼저 배우기에 좋아요.
초점: 선언과 init / loop / bailout 구조. 이 버전이 컴파일된 후에만 지수나 이탈 임계값을 변경하세요.
StarterBrot {
init:
z = 0
loop:
z = z^2 + c
bailout:
|z| < 4
}레슨 2
p1 / p2 파라미터 슬롯과 cabs와 |z|의 차이를 보여줘요.
초점: p1과 p2 파라미터 슬롯, 복소수 리터럴, 명시적 크기 함수로서의 cabs(z).
ParameterDrift {
init:
z = 0
loop:
z = z^2 + c + p1 * 0.15 + p2 * (0.05, -0.02)
bailout:
cabs(z) < 8
}레슨 3
zPrev를 피드백 메모리로 사용하며, 오빗 엔벨로프를 위한 orbitEcho 컬러링과 잘 어울려요.
초점: 이전 오빗 상태로서의 zPrev. 피드백은 수동으로 관리하는 두 번째 상태 변수를 도입하지 않고 메모리를 추가해요.
OrbitEcho {
init:
z = pixel
loop:
z = sqr(z) + zPrev * (0.30, -0.12) + pixel * (0.85, 0.0)
bailout:
|z| < 48
}FRM 편집기는 안정적인 ID로 이와 동일한 컴파일 검사 예제를 열어요. 수식 소스는 클라우드 수식 라이브러리에 저장할 때까지 현재 탭에만 남아 있고, URL에는 절대 포함되지 않아요.
컴파일은 가장 이른 안전하지 않은 단계에서 멈추고 소스 중심 메시지를 보고해요. 거부된 구성은 비슷해 보이는 것으로 다시 쓰여지지 않아요.
예상치 못한 문자와 지원되지 않는 식별자는 행과 열과 함께 보고돼요.
잘못된 섹션, 표현식, 제어 흐름 블록은 의미론적 검증 전에 진단돼요.
알 수 없는 변수, 잘못된 할당, 타입 불일치, 지원되지 않는 의미론은 코드 생성을 차단해요.
생성된 GLSL은 셰이더 컴파일 실패를 원래 FRM 위치로 가리킬 수 있는 매핑을 유지해요.
오류를 고칠 때는 첫 번째 보고 메시지부터 시작하세요: 이후의 진단은 동일한 누락 토큰이나 잘못된 표현식의 결과일 수 있어요.
작성한 수식은 직접 선택하기 전까지 비공개예요. 수식이 이동할 수 있는 방법은 세 가지이며, 각각 명시적이고 어떤 것도 조용히 이루어지지 않아요.
기본적으로 비공개
수식은 클라우드 라이브러리에 있으며 나만 볼 수 있어요. 저장한 작품은 초안 안에 수식 소스 사본을 담고 있어서, 항상 마지막으로 둔 상태 그대로 열려요.
.frm 파일 다운로드
수식은 일반 텍스트예요. 내 수식에서 언제든 다운로드하여 직접 사본을 보관하세요 — 내보내기 요청도, 대기도 필요 없어요.
작품을 게시하고 소스 공유하기
내 수식을 사용하는 작품을 게시하면 수식 소스가 MIT 라이선스로 공개돼요: 누구나 읽고, 복사하고, 그 위에 만들 수 있어요. 커뮤니티 페이지에는 메타데이터의 수식 이름이 표시되고 소스를 다운로드할 수 있어요. 해당 게시에 대해서는 되돌릴 수 없어요.
커스텀 수식을 작성하기 전에 탐색기를 열어 내장 수식의 동작, 컬러링, 변환, 애니메이션, 내보내기 컨트롤을 비교해 보세요.
탐색기 열기전용 FRM 편집기에서 수식을 컴파일, 미리 보기, 가져오기, 다운로드할 수 있어요. 탐색기로 넘기기 전에 로그인해서 수식 하나를 내 클라우드 수식 라이브러리에 저장하세요.
역사적 맥락과 구현 세부 사항은 별도로 링크되어, 가이드가 Fractint 계보와 FractalPark의 현재 컴파일러 계약을 구분할 수 있어요.