C의 단일 파일 웨이브 기능 붕괴 라이브러리 및 명령 줄 도구
이것은 겹치는 WFC 메소드를 지원하는 초기 버전입니다. 이 방법은 작은 입력 이미지를 취하고 입력 이미지와 로컬로 유사한 더 큰 출력 이미지를 생성합니다. 입력/출력 쌍의 몇 가지 예 :

WFC는 종종 절차 맵 생성에 사용되지만이 유스 케이스에만 국한되지 않습니다.
라이브러리는 매우 성능이 뛰어나며 다른 구현에서는 찾을 수없는 다수의 최적화가 포함되어 있습니다. 예를 들어, MacBook Air M1 (2020)에서 상기 128x128 이미지의 생성 (3x3 패턴, 뒤집기 및 회전)은 각각 1.35, 0.92, 0.31, 7.7, 1.74 및 0.67 초를 취했습니다. 여기에는 이미지 로딩/절약 시간이 포함됩니다.
프로젝트의 한 파일에는 다음과 같은 wfc.h 포함되어야합니다.
#define WFC_IMPLEMENTATION
#include "wfc.h" 다른 파일에는 wfc.h 포함하고 사용할 수 있지만 WFC_IMPLEMENTATION 매크로를 정의해서는 안됩니다.
또는 make wfc.o 사용하여 기존 .O 파일을 작성하고 wfc.h 일반 헤더 파일로 사용할 수 있습니다.
용법:
struct wfc * wfc = wfc_overlapping (
128 , // Output image width in pixels
128 , // Output image height in pixels
input_image , // Input image that will be cut into tiles
3 , // Tile width in pixels
3 , // Tile height in pixels
1 , // Expand input image on the right and bottom
1 , // Add horizontal flips of all tiles
1 , // Add vertical flips of all tiles
1 // Add n*90deg rotations of all tiles
);
wfc_run ( wfc , -1 ); // Run Wave Function Collapse
// -1 means no limit on iterations
struct wfc_image * output_image = wfc_output_image ( wfc );
wfc_destroy ( wfc );
// use output_image->data
// wfc_img_destroy(output_image); 기본적으로 입력 및 출력을 위해 struct wfc_image 와 협력합니다.
struct wfc_image {
unsigned char * data ;
int component_cnt ;
int width ;
int height ;
} data 패딩없이 단단히 포장됩니다. 각 픽셀은 component_cnt 구성 요소 (예 : RGBA 형식의 4 가지 구성 요소)로 구성됩니다. 출력 이미지는 입력 이미지와 동일한 수의 구성 요소를 갖습니다.
wfc_run 솔루션을 찾을 수없는 경우 0을 반환합니다. 당신은 그렇게 다시 시도 할 수 있습니다 :
wfc_init ( wfc );
wfc_run ( wfc , -1 );WFC는 선택적으로 stb_image.h 및 stb_image_write.h를 사용하여 이미지 파일과 직접 작업하기위한 편의 기능을 제공 할 수 있습니다.
일반적으로 stb_image.h 및 stb_image_write.h wfc.h 와 동일한 디렉토리에 배치하고 프로젝트 파일 중 하나에 구현을 포함시킵니다.
#define STB_IMAGE_IMPLEMENTATION
#define STB_IMAGE_WRITE_IMPLEMENTATION
#include "stb_image.h"
#include "stb_image_write.h" 또한 wfc.h STB를 사용하도록 지시합니다.
#define WFC_IMPLEMENTATION
#define WFC_USE_STB
#include "wfc.h"용법:
struct wfc_image * input_image = wfc_img_load ( "input.png" );
struct wfc * wfc = wfc_overlapping (
...
input_image ,
...
);
wfc_run ( wfc , -1 ); // Run Wave Function Collapse
// -1 means no restriction on number of iterations
wfc_export ( wfc , "output.png" );
wfc_img_destroy ( input_image );
wfc_destroy ( wfc );STB를 포함 시켜서 가능한 추가 기능 :
struct wfc_image * image = wfc_img_load ( "image.png" )
wfc_img_save ( image , "image.png" )
wfc_export ( wfc , "output.png" )
wfc_export_tiles ( wfc , "directory" )
// don't forget to wfc_img_destroy(image) loaded images 명령 줄 도구는 라이브러리를 사용하여 WFC 이미지를 생성 할 수 있습니다. 이 도구는 stb_image.h 및 stb_image_write.h에 따라 다릅니다. 두 파일을 wfctool.c 와 동일한 디렉토리에 배치하십시오.
make
./wfc
사용 가능한 옵션을 보려면 ./wfc 를 실행하십시오
기본 사용 :
./wfc -m overlapping samples/wrinkles.png output.png
WFC를 사용해 주셔서 감사합니다. 버그가 있거나 질문이 있거나 피드백이 있으면 알려주십시오. 또한 작품을 공유하고 싶다면 매우 감사합니다.
gmail.com의 Samp.krystian