3 unstable releases
0.2.1 | Aug 11, 2021 |
---|---|
0.2.0 | Aug 11, 2021 |
0.1.0 | Aug 10, 2021 |
#1419 in Game dev
21KB
458 lines
ConvChain (Rust Port)
A port of Maxim Gumin's ConvChain to Rust:
ConvChain is a Markov chain of images that converges to input-like images. That is, the distribution of NxN patterns in the outputs converges to the distribution of NxN patterns in the input as the process goes on.
Please have a look on the original repo for a more thorough description of the application of the Metropolis algorithm to the problem.
fn main() {
// Generate a sample (this is the SimpleMaze example):
let pattern = [
true, true, true, true,
true, false, false, false,
true, false, true, false,
true, false, false, false,
];
let sample = ConvChainSample::new(&pattern, 4, 4);
// Initialize the chain using given sample and a
// - 32x32 output size
// - receptor size of 2
// - temperature of 1.0
let mut chain = ConvChain::new(&sample, 32, 2, 1.0);
// Generate the 32x32 field using 10 iterations.
let field: &[bool] = chain.process(10);
}
Example run
Here are a couple of outputs generated with the code, using different values for the receptor size and number of iterations:
Input | r=3, it=10 | r=5, it=10 | r=5, it=20 | r=5, it=100 |
---|---|---|---|---|
This repository provides ports of both original "slow" and "fast" implementations. To run the example, execute the following from the repository root:
$ cargo run --release --example fast
This will process the jobs defined in resources/samples.xml and produce output images in the current directory.
To run the benchmarks, execute
$ cargo bench
Dependencies
~310KB