mirror of
https://github.com/bspeice/speice.io
synced 2024-12-22 16:48:10 -05:00
Get full post/final xform working
This commit is contained in:
parent
68c0b26015
commit
4bcc321c4b
@ -1,142 +0,0 @@
|
|||||||
import { randomInteger } from "./0-utility";
|
|
||||||
|
|
||||||
type Variation = (x: number, y: number) => [number, number];
|
|
||||||
|
|
||||||
const r = (x: number, y: number) => {
|
|
||||||
return Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));
|
|
||||||
};
|
|
||||||
const theta = (x: number, y: number) => {
|
|
||||||
return Math.atan2(x, y);
|
|
||||||
};
|
|
||||||
|
|
||||||
const linear: Variation = (x, y) => {
|
|
||||||
return [x, y];
|
|
||||||
};
|
|
||||||
|
|
||||||
const swirl: Variation = (x, y) => {
|
|
||||||
const r2 = Math.pow(r(x, y), 2);
|
|
||||||
const sinR2 = Math.sin(r2);
|
|
||||||
const cosR2 = Math.cos(r2);
|
|
||||||
|
|
||||||
return [x * sinR2 - y * cosR2, x * cosR2 + y * sinR2];
|
|
||||||
};
|
|
||||||
|
|
||||||
const polar: Variation = (x, y) => {
|
|
||||||
return [theta(x, y) / Math.PI, r(x, y) - 1];
|
|
||||||
};
|
|
||||||
|
|
||||||
const disc: Variation = (x, y) => {
|
|
||||||
const thetaOverPi = theta(x, y) / Math.PI;
|
|
||||||
const piR = Math.PI * r(x, y);
|
|
||||||
return [thetaOverPi * Math.sin(piR), thetaOverPi * Math.cos(piR)];
|
|
||||||
};
|
|
||||||
|
|
||||||
const variations = [linear, swirl, polar, disc];
|
|
||||||
|
|
||||||
class Coefs {
|
|
||||||
constructor(
|
|
||||||
public readonly a: number,
|
|
||||||
public readonly b: number,
|
|
||||||
public readonly c: number,
|
|
||||||
public readonly d: number,
|
|
||||||
public readonly e: number,
|
|
||||||
public readonly f: number
|
|
||||||
) {}
|
|
||||||
}
|
|
||||||
|
|
||||||
class Transform {
|
|
||||||
constructor(
|
|
||||||
public readonly weight: number,
|
|
||||||
public readonly coefs: Coefs,
|
|
||||||
// Assumes that we have a blend for each variation
|
|
||||||
public readonly blend: number[]
|
|
||||||
) {}
|
|
||||||
|
|
||||||
apply(x: number, y: number) {
|
|
||||||
const variationX = this.coefs.a * x + this.coefs.b * y + this.coefs.c;
|
|
||||||
const variationY = this.coefs.d * x + this.coefs.e * y + this.coefs.f;
|
|
||||||
|
|
||||||
var transformX = 0;
|
|
||||||
var transformY = 0;
|
|
||||||
this.blend.forEach((blend, i) => {
|
|
||||||
const [perVarX, perVarY] = variations[i](variationX, variationY);
|
|
||||||
transformX += blend * perVarX;
|
|
||||||
transformY += blend * perVarY;
|
|
||||||
});
|
|
||||||
|
|
||||||
return [transformX, transformY];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function plot(x: number, y: number, image: ImageData) {
|
|
||||||
const pixelX = Math.floor(((x + 2) * image.width) / 4);
|
|
||||||
const pixelY = Math.floor(((y + 2) * image.height) / 4);
|
|
||||||
|
|
||||||
if (
|
|
||||||
pixelX < 0 ||
|
|
||||||
pixelX > image.width ||
|
|
||||||
pixelY < 0 ||
|
|
||||||
pixelY > image.height
|
|
||||||
) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const index = pixelY * (image.width * 4) + pixelX * 4;
|
|
||||||
|
|
||||||
image.data[index + 0] = 0;
|
|
||||||
image.data[index + 1] = 0;
|
|
||||||
image.data[index + 2] = 0;
|
|
||||||
image.data[index + 3] = 0xff;
|
|
||||||
}
|
|
||||||
|
|
||||||
function render(transforms: Transform[], image: ImageData) {
|
|
||||||
const weightSum = transforms.reduce((val, xform) => val + xform.weight, 0);
|
|
||||||
|
|
||||||
var x = Math.random() * 2 - 1;
|
|
||||||
var y = Math.random() * 2 - 1;
|
|
||||||
|
|
||||||
const iter = 100_000;
|
|
||||||
for (var i = 0; i < iter; i++) {
|
|
||||||
// Find the tranform we're operating on
|
|
||||||
|
|
||||||
/*
|
|
||||||
var f = Math.random() * weightSum;
|
|
||||||
|
|
||||||
var transform = transforms[0];
|
|
||||||
transforms.forEach((xform, j) => {
|
|
||||||
if (f > 0 && f < xform.weight) {
|
|
||||||
console.log(`xform=${j}`);
|
|
||||||
transform = xform;
|
|
||||||
f -= xform.weight;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
*/
|
|
||||||
// HACK: Currently assuming weights are equal
|
|
||||||
const transform = transforms[randomInteger(0, transforms.length)];
|
|
||||||
|
|
||||||
// Play the chaos game
|
|
||||||
[x, y] = transform.apply(x, y);
|
|
||||||
|
|
||||||
if (i > 20) {
|
|
||||||
plot(x, y, image);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export function renderBaseline(image: ImageData) {
|
|
||||||
return render(
|
|
||||||
[
|
|
||||||
new Transform(
|
|
||||||
0.5,
|
|
||||||
new Coefs(0.982996, 0, -0.219512, 0, 0.982996, -0.1875),
|
|
||||||
[1, 0, 0, -0.934]
|
|
||||||
),
|
|
||||||
new Transform(
|
|
||||||
0.5,
|
|
||||||
new Coefs(0.966511, -0.256624, 0.050305, 0.256624, 0.966511, -0.235518),
|
|
||||||
[0, 0.156, 0.778, 0]
|
|
||||||
),
|
|
||||||
],
|
|
||||||
image
|
|
||||||
);
|
|
||||||
}
|
|
189
posts/2023/06/flam3/2a-variations.ts
Normal file
189
posts/2023/06/flam3/2a-variations.ts
Normal file
@ -0,0 +1,189 @@
|
|||||||
|
export type Variation = (
|
||||||
|
x: number,
|
||||||
|
y: number,
|
||||||
|
transformCoefs: Coefs
|
||||||
|
) => [number, number];
|
||||||
|
export type Coefs = {
|
||||||
|
a: number;
|
||||||
|
b: number;
|
||||||
|
c: number;
|
||||||
|
d: number;
|
||||||
|
e: number;
|
||||||
|
f: number;
|
||||||
|
};
|
||||||
|
|
||||||
|
function r(x: number, y: number) {
|
||||||
|
return Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));
|
||||||
|
}
|
||||||
|
|
||||||
|
function theta(x: number, y: number) {
|
||||||
|
return Math.atan2(x, y);
|
||||||
|
}
|
||||||
|
|
||||||
|
function omega(): number {
|
||||||
|
return Math.random() > 0.5 ? Math.PI : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const linear: Variation = (x, y) => [x, y];
|
||||||
|
|
||||||
|
export const julia: Variation = (x, y) => {
|
||||||
|
const sqrtR = Math.sqrt(r(x, y));
|
||||||
|
return [
|
||||||
|
sqrtR * Math.cos(theta(x, y) / 2 + omega()),
|
||||||
|
sqrtR * Math.sin(theta(x, y) / 2 + omega()),
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
export const popcorn: Variation = (x, y, transformCoefs) => {
|
||||||
|
return [
|
||||||
|
x + transformCoefs.c * Math.sin(Math.tan(3 * y)),
|
||||||
|
y + transformCoefs.f * Math.sin(Math.tan(3 * x)),
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
export const pdj: (
|
||||||
|
pdjA: number,
|
||||||
|
pdjB: number,
|
||||||
|
pdjC: number,
|
||||||
|
pdjD: number
|
||||||
|
) => Variation = (pdjA, pdjB, pdjC, pdjD) => {
|
||||||
|
return (x, y) => [
|
||||||
|
Math.sin(pdjA * y) - Math.cos(pdjB * x),
|
||||||
|
Math.sin(pdjC * x) - Math.cos(pdjD * y),
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
export class Transform {
|
||||||
|
constructor(
|
||||||
|
public readonly coefs: Coefs,
|
||||||
|
public readonly variations: [number, Variation][]
|
||||||
|
) {}
|
||||||
|
|
||||||
|
apply(x: number, y: number) {
|
||||||
|
const xformX = this.coefs.a * x + this.coefs.b * y + this.coefs.c;
|
||||||
|
const xformY = this.coefs.d * x + this.coefs.e * y + this.coefs.f;
|
||||||
|
|
||||||
|
var [curX, curY] = [0, 0];
|
||||||
|
this.variations.forEach(([blend, variation]) => {
|
||||||
|
const [varX, varY] = variation(xformX, xformY, this.coefs);
|
||||||
|
curX += blend * varX;
|
||||||
|
curY += blend * varY;
|
||||||
|
});
|
||||||
|
|
||||||
|
return [curX, curY];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export function weightedChoice<T>(choices: [number, T][]) {
|
||||||
|
const weightSum = choices.reduce(
|
||||||
|
(current, [weight, _t]) => current + weight,
|
||||||
|
0
|
||||||
|
);
|
||||||
|
var choice = Math.random() * weightSum;
|
||||||
|
|
||||||
|
for (var i = 0; i < choices.length; i++) {
|
||||||
|
const [weight, t] = choices[i];
|
||||||
|
if (choice < weight) {
|
||||||
|
return t;
|
||||||
|
}
|
||||||
|
|
||||||
|
choice -= weight;
|
||||||
|
}
|
||||||
|
|
||||||
|
throw "unreachable";
|
||||||
|
}
|
||||||
|
|
||||||
|
export function plot(x: number, y: number, image: ImageData) {
|
||||||
|
const pixelX = Math.floor(((x + 2) * image.width) / 4);
|
||||||
|
const pixelY = Math.floor(((y + 2) * image.height) / 4);
|
||||||
|
|
||||||
|
if (
|
||||||
|
pixelX < 0 ||
|
||||||
|
pixelX > image.width ||
|
||||||
|
pixelY < 0 ||
|
||||||
|
pixelY > image.height
|
||||||
|
) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const index = pixelY * (image.width * 4) + pixelX * 4;
|
||||||
|
|
||||||
|
image.data[index + 0] = 0;
|
||||||
|
image.data[index + 1] = 0;
|
||||||
|
image.data[index + 2] = 0;
|
||||||
|
image.data[index + 3] = 0xff;
|
||||||
|
}
|
||||||
|
|
||||||
|
export class Flame {
|
||||||
|
constructor(public readonly transforms: [number, Transform][]) {}
|
||||||
|
|
||||||
|
render(quality: number, image: ImageData) {
|
||||||
|
var x = Math.random() * 2 - 1;
|
||||||
|
var y = Math.random() * 2 - 1;
|
||||||
|
|
||||||
|
const iter = quality * (image.width * image.height);
|
||||||
|
for (var i = 0; i < iter; i++) {
|
||||||
|
const transform = weightedChoice(this.transforms);
|
||||||
|
|
||||||
|
// Play the chaos game
|
||||||
|
[x, y] = transform.apply(x, y);
|
||||||
|
|
||||||
|
if (i > 20) {
|
||||||
|
plot(x, y, image);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export const transform1Coefs: Coefs = {
|
||||||
|
a: -1.381068,
|
||||||
|
b: -1.381068,
|
||||||
|
c: 0,
|
||||||
|
d: 1.381068,
|
||||||
|
e: -1.381068,
|
||||||
|
f: 0,
|
||||||
|
};
|
||||||
|
export const transform1Weight = 0.56453495;
|
||||||
|
|
||||||
|
export const transform2Coefs: Coefs = {
|
||||||
|
a: 0.031393,
|
||||||
|
b: 0.031367,
|
||||||
|
c: 0,
|
||||||
|
d: -0.031367,
|
||||||
|
e: 0.031393,
|
||||||
|
f: 0,
|
||||||
|
};
|
||||||
|
export const transform2Weight = 0.013135;
|
||||||
|
|
||||||
|
export const transform3Coefs: Coefs = {
|
||||||
|
a: 1.51523,
|
||||||
|
b: -3.048677,
|
||||||
|
c: 0.724135,
|
||||||
|
d: 0.740356,
|
||||||
|
e: -1.455964,
|
||||||
|
f: -0.362059,
|
||||||
|
};
|
||||||
|
export const transform3Pdj = [1.09358, 2.13048, 2.54127, 2.37267];
|
||||||
|
export const transform3Weight = 0.42233;
|
||||||
|
|
||||||
|
export function renderBaseline(image: ImageData) {
|
||||||
|
const transform1 = new Transform(transform1Coefs, [[1, julia]]);
|
||||||
|
|
||||||
|
const transform2 = new Transform(transform2Coefs, [
|
||||||
|
[1, linear],
|
||||||
|
[1, popcorn],
|
||||||
|
]);
|
||||||
|
|
||||||
|
const [pdjA, pdjB, pdjC, pdjD] = transform3Pdj;
|
||||||
|
const transform3 = new Transform(transform3Coefs, [
|
||||||
|
[1, pdj(pdjA, pdjB, pdjC, pdjD)],
|
||||||
|
]);
|
||||||
|
|
||||||
|
const flame = new Flame([
|
||||||
|
[transform1Weight, transform1],
|
||||||
|
[transform2Weight, transform2],
|
||||||
|
[transform3Weight, transform3],
|
||||||
|
]);
|
||||||
|
|
||||||
|
flame.render(1, image);
|
||||||
|
}
|
79
posts/2023/06/flam3/2b-post.ts
Normal file
79
posts/2023/06/flam3/2b-post.ts
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
import {
|
||||||
|
Coefs,
|
||||||
|
Variation,
|
||||||
|
Flame,
|
||||||
|
Transform,
|
||||||
|
linear,
|
||||||
|
julia,
|
||||||
|
popcorn,
|
||||||
|
pdj,
|
||||||
|
transform1Coefs,
|
||||||
|
transform1Weight,
|
||||||
|
transform2Coefs,
|
||||||
|
transform2Weight,
|
||||||
|
transform3Coefs,
|
||||||
|
transform3Pdj,
|
||||||
|
transform3Weight,
|
||||||
|
} from "./2a-variations";
|
||||||
|
|
||||||
|
export class TransformPost extends Transform {
|
||||||
|
constructor(
|
||||||
|
coefs: Coefs,
|
||||||
|
variations: [number, Variation][],
|
||||||
|
public readonly post: Coefs
|
||||||
|
) {
|
||||||
|
super(coefs, variations);
|
||||||
|
}
|
||||||
|
|
||||||
|
apply(x: number, y: number): [number, number] {
|
||||||
|
const [transformX, transformY] = super.apply(x, y);
|
||||||
|
return [
|
||||||
|
transformX * this.post.a + transformY * this.post.b + this.post.c,
|
||||||
|
transformX * this.post.d + transformY * this.post.e + this.post.f,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export function variationPost(coefs: Coefs, variation: Variation): Variation {
|
||||||
|
return (x, y, transformCoefs) => {
|
||||||
|
const [varX, varY] = variation(x, y, transformCoefs);
|
||||||
|
return [
|
||||||
|
varX * coefs.a + varY * coefs.b + coefs.c,
|
||||||
|
varX * coefs.d + varY * coefs.e + coefs.f,
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export const transform2Post: Coefs = {
|
||||||
|
a: 1,
|
||||||
|
b: 0,
|
||||||
|
c: 0.241352,
|
||||||
|
d: 0,
|
||||||
|
e: 1,
|
||||||
|
f: 0.271521,
|
||||||
|
};
|
||||||
|
|
||||||
|
export function renderPost(image: ImageData) {
|
||||||
|
const transform1 = new Transform(transform1Coefs, [[1, julia]]);
|
||||||
|
|
||||||
|
const transform2 = new TransformPost(
|
||||||
|
transform2Coefs,
|
||||||
|
[
|
||||||
|
[1, linear],
|
||||||
|
[1, popcorn],
|
||||||
|
],
|
||||||
|
transform2Post
|
||||||
|
);
|
||||||
|
|
||||||
|
const [pdjA, pdjB, pdjC, pdjD] = transform3Pdj;
|
||||||
|
const transform3 = new Transform(transform3Coefs, [
|
||||||
|
[1, pdj(pdjA, pdjB, pdjC, pdjD)],
|
||||||
|
]);
|
||||||
|
|
||||||
|
const flame = new Flame([
|
||||||
|
[transform1Weight, transform1],
|
||||||
|
[transform2Weight, transform2],
|
||||||
|
[transform3Weight, transform3],
|
||||||
|
]);
|
||||||
|
flame.render(1, image);
|
||||||
|
}
|
86
posts/2023/06/flam3/2c-final.ts
Normal file
86
posts/2023/06/flam3/2c-final.ts
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
import {
|
||||||
|
Coefs,
|
||||||
|
Flame,
|
||||||
|
Transform,
|
||||||
|
linear,
|
||||||
|
julia,
|
||||||
|
popcorn,
|
||||||
|
pdj,
|
||||||
|
transform1Coefs,
|
||||||
|
transform1Weight,
|
||||||
|
transform2Coefs,
|
||||||
|
transform2Weight,
|
||||||
|
transform3Coefs,
|
||||||
|
transform3Pdj,
|
||||||
|
transform3Weight,
|
||||||
|
weightedChoice,
|
||||||
|
plot,
|
||||||
|
} from "./2a-variations";
|
||||||
|
import { TransformPost, transform2Post } from "./2b-post";
|
||||||
|
|
||||||
|
export class FlameFinal extends Flame {
|
||||||
|
constructor(
|
||||||
|
transforms: [number, Transform][],
|
||||||
|
public readonly final: Transform
|
||||||
|
) {
|
||||||
|
super(transforms);
|
||||||
|
}
|
||||||
|
|
||||||
|
render(quality: number, image: ImageData) {
|
||||||
|
var x = Math.random() * 2 - 1;
|
||||||
|
var y = Math.random() * 2 - 1;
|
||||||
|
|
||||||
|
const iter = quality * (image.width * image.height);
|
||||||
|
for (var i = 0; i < iter; i++) {
|
||||||
|
const transform = weightedChoice(this.transforms);
|
||||||
|
[x, y] = transform.apply(x, y);
|
||||||
|
|
||||||
|
// This line is the only thing that changes:
|
||||||
|
[x, y] = this.final.apply(x, y);
|
||||||
|
|
||||||
|
if (i > 20) {
|
||||||
|
plot(x, y, image);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export const finalCoefs: Coefs = {
|
||||||
|
a: 2,
|
||||||
|
b: 0,
|
||||||
|
c: 0,
|
||||||
|
d: 0,
|
||||||
|
e: 2,
|
||||||
|
f: 0,
|
||||||
|
};
|
||||||
|
|
||||||
|
export function renderFinal(image: ImageData) {
|
||||||
|
const transform1 = new Transform(transform1Coefs, [[1, julia]]);
|
||||||
|
|
||||||
|
const transform2 = new TransformPost(
|
||||||
|
transform2Coefs,
|
||||||
|
[
|
||||||
|
[1, linear],
|
||||||
|
[1, popcorn],
|
||||||
|
],
|
||||||
|
transform2Post
|
||||||
|
);
|
||||||
|
|
||||||
|
const [pdjA, pdjB, pdjC, pdjD] = transform3Pdj;
|
||||||
|
const transform3 = new Transform(transform3Coefs, [
|
||||||
|
[1, pdj(pdjA, pdjB, pdjC, pdjD)],
|
||||||
|
]);
|
||||||
|
|
||||||
|
const transformFinal = new Transform(finalCoefs, [[1, julia]]);
|
||||||
|
|
||||||
|
const flame = new FlameFinal(
|
||||||
|
[
|
||||||
|
[transform1Weight, transform1],
|
||||||
|
[transform2Weight, transform2],
|
||||||
|
[transform3Weight, transform3],
|
||||||
|
],
|
||||||
|
transformFinal
|
||||||
|
);
|
||||||
|
|
||||||
|
flame.render(1, image);
|
||||||
|
}
|
@ -1,9 +1,10 @@
|
|||||||
import React from "react";
|
|
||||||
import Blog from "../../../LayoutBlog";
|
import Blog from "../../../LayoutBlog";
|
||||||
|
|
||||||
import { Canvas } from "./0-utility";
|
import { Canvas } from "./0-utility";
|
||||||
import { gasket } from "./1-gasket";
|
import { gasket } from "./1-gasket";
|
||||||
import { renderBaseline } from "./2-variations";
|
import { renderBaseline } from "./2a-variations";
|
||||||
|
import { renderPost } from "./2b-post";
|
||||||
|
import { renderFinal } from "./2c-final";
|
||||||
|
|
||||||
export default function () {
|
export default function () {
|
||||||
const Layout = Blog({
|
const Layout = Blog({
|
||||||
@ -15,6 +16,8 @@ export default function () {
|
|||||||
<Layout>
|
<Layout>
|
||||||
<Canvas f={gasket} />
|
<Canvas f={gasket} />
|
||||||
<Canvas f={renderBaseline} />
|
<Canvas f={renderBaseline} />
|
||||||
|
<Canvas f={renderPost} />
|
||||||
|
<Canvas f={renderFinal} />
|
||||||
</Layout>
|
</Layout>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -81,6 +81,7 @@
|
|||||||
<xform weight="0.422330042096567" color="0" pdj="1" coefs="1.51523 0.740356 -3.048677 -1.455964 0.724135 -0.362059" pdj_a="1.09358" pdj_b="2.13048" pdj_c="2.54127" pdj_d="2.37267" />
|
<xform weight="0.422330042096567" color="0" pdj="1" coefs="1.51523 0.740356 -3.048677 -1.455964 0.724135 -0.362059" pdj_a="1.09358" pdj_b="2.13048" pdj_c="2.54127" pdj_d="2.37267" />
|
||||||
<xform weight="0.564534951145298" color="0" julia="1" coefs="-1.381068 1.381068 -1.381068 -1.381068 0 0" />
|
<xform weight="0.564534951145298" color="0" julia="1" coefs="-1.381068 1.381068 -1.381068 -1.381068 0 0" />
|
||||||
<xform weight="0.0131350067581356" color="0" linear="1" popcorn="1" coefs="0.031393 -0.031367 0.031367 0.031393 0 0" post="1 0 0 1 0.241352 0.271521" />
|
<xform weight="0.0131350067581356" color="0" linear="1" popcorn="1" coefs="0.031393 -0.031367 0.031367 0.031393 0 0" post="1 0 0 1 0.241352 0.271521" />
|
||||||
|
<finalxform color="0" symmetry="1" julia="1" coefs="2 0 0 2 0 0" />
|
||||||
<palette count="256" format="RGB">
|
<palette count="256" format="RGB">
|
||||||
3A78875998AA5E9DAC78B1C2599BAB36798A2252601B3438
|
3A78875998AA5E9DAC78B1C2599BAB36798A2252601B3438
|
||||||
1823270D1215080705010101000000000002080A090A0809
|
1823270D1215080705010101000000000002080A090A0809
|
||||||
@ -116,5 +117,4 @@
|
|||||||
6C303A56213D3033381C343619343B15383E193A431A4E5C
|
6C303A56213D3033381C343619343B15383E193A431A4E5C
|
||||||
</palette>
|
</palette>
|
||||||
</flame>
|
</flame>
|
||||||
|
|
||||||
</Flames>
|
</Flames>
|
||||||
|
@ -1,43 +1,4 @@
|
|||||||
<Flames name="variations">
|
<Flames name="variations">
|
||||||
<flame name="baseline" version="Apophysis 2.08 beta" size="600 600" center="0 0" scale="150" oversample="1" filter="0.2" quality="1" background="0 0 0" brightness="4" gamma="4" >
|
|
||||||
<xform weight="0.422330042096567" color="0" pdj="1" coefs="1.51523 0.740356 -3.048677 -1.455964 0.724135 -0.362059" pdj_a="1.09358" pdj_b="2.13048" pdj_c="2.54127" pdj_d="2.37267" />
|
|
||||||
<xform weight="0.564534951145298" color="0" julia="1" coefs="-1.381068 1.381068 -1.381068 -1.381068 0 0" />
|
|
||||||
<xform weight="0.0131350067581356" color="0" linear="1" popcorn="1" coefs="0.031393 -0.031367 0.031367 0.031393 0 0" />
|
|
||||||
<palette count="256" format="RGB">
|
|
||||||
3A78875998AA5E9DAC78B1C2599BAB36798A2252601B3438
|
|
||||||
1823270D1215080705010101000000000002080A090A0809
|
|
||||||
0C070D0B090A030406010101000000000000000000000000
|
|
||||||
0A00000B0A080E1213101B1F21202830243A6737357A3C31
|
|
||||||
864424643A22452F1838251427190E1C12080E0F110E1213
|
|
||||||
1014152110183720105D320FA0531F9144180409080A1312
|
|
||||||
0C13140E13160E15160E17160F16171015180B161C0A1225
|
|
||||||
0A0F2F101E37172E40294C5A3B6B7549798758879975A9BE
|
|
||||||
79A7BF7EA6C0949FA2AA9985B7A27BC4AB72AC965A867654
|
|
||||||
61574E4C4D48374343474141573F3F7C5C36B0914EC1DFF9
|
|
||||||
C4E4FAC8E9FCBEE1F4B5DAEDB2D8EDB0D6ED5398A7386D78
|
|
||||||
1D424A1B3B4219343B1B383E1D3C411D3B462155623D7C8B
|
|
||||||
46747F4F6C74636454785C3584663E917047BEA467CEA86A
|
|
||||||
DEAC6DC5975EAC834F916E41765A335F3D21431F21241625
|
|
||||||
1F202B1A2B321A2D321B30331B323A1628360E1D220E1D21
|
|
||||||
0F1D20101C1F111C1E111D1E121E1E2B21153B2B1B725432
|
|
||||||
85542C9854279B63369F7346AD7C3AB2763AB18F4FB39453
|
|
||||||
B69957B99B56BC9E56C19651CB9346AB6A2A9851254E341D
|
|
||||||
2F261B10181A0E15160C12120D11120A10100D0D0D0C0E0E
|
|
||||||
0B0F100B10120C11140F191A101F221829331A373B1E3D52
|
|
||||||
1A40551744591D556420424C1E3B431D3C41112C33102328
|
|
||||||
101B1D10191E111820101D2311242A1B33371B3A3F276476
|
|
||||||
3E637D556284545F7D7759355C41261B30290E16180B0F0F
|
|
||||||
0908060405030002010A0E0F12171A1C1B2B17343C3C7481
|
|
||||||
467F8F508A9E528FA23E81923769722E69772248512B545E
|
|
||||||
35616C688589807F85939FB5ABD6E6B3D6EA89B7CE5891A4
|
|
||||||
467E92356C81194A6B1A373F132C310E1C1F050409020205
|
|
||||||
0000020000000101010800000B0000170A000D0D0D0D1110
|
|
||||||
0F0E14100F141F11082619082F1904210F05111717101919
|
|
||||||
0F1B1B101F22182C2B252E2B282D311B2E321A2E2F162E30
|
|
||||||
1325270E191B0F1314190D0F2E1211461A27552227612723
|
|
||||||
6C303A56213D3033381C343619343B15383E193A431A4E5C
|
|
||||||
</palette>
|
|
||||||
</flame>
|
|
||||||
<flame name="post xform" version="Apophysis 2.08 beta" size="600 600" center="0 0" scale="150" oversample="1" filter="0.2" quality="1" background="0 0 0" brightness="4" gamma="4" >
|
<flame name="post xform" version="Apophysis 2.08 beta" size="600 600" center="0 0" scale="150" oversample="1" filter="0.2" quality="1" background="0 0 0" brightness="4" gamma="4" >
|
||||||
<xform weight="0.422330042096567" color="0" pdj="1" coefs="1.51523 0.740356 -3.048677 -1.455964 0.724135 -0.362059" pdj_a="1.09358" pdj_b="2.13048" pdj_c="2.54127" pdj_d="2.37267" />
|
<xform weight="0.422330042096567" color="0" pdj="1" coefs="1.51523 0.740356 -3.048677 -1.455964 0.724135 -0.362059" pdj_a="1.09358" pdj_b="2.13048" pdj_c="2.54127" pdj_d="2.37267" />
|
||||||
<xform weight="0.564534951145298" color="0" julia="1" coefs="-1.381068 1.381068 -1.381068 -1.381068 0 0" />
|
<xform weight="0.564534951145298" color="0" julia="1" coefs="-1.381068 1.381068 -1.381068 -1.381068 0 0" />
|
||||||
@ -117,4 +78,43 @@
|
|||||||
6C303A56213D3033381C343619343B15383E193A431A4E5C
|
6C303A56213D3033381C343619343B15383E193A431A4E5C
|
||||||
</palette>
|
</palette>
|
||||||
</flame>
|
</flame>
|
||||||
|
<flame name="baseline" version="Apophysis 2.08 beta" size="600 600" center="0 0" scale="150" oversample="1" filter="0.2" quality="1" background="0 0 0" brightness="4" gamma="4" >
|
||||||
|
<xform weight="0.422330042096567" color="0" pdj="1" coefs="1.51523 0.740356 -3.048677 -1.455964 0.724135 -0.362059" pdj_a="1.09358" pdj_b="2.13048" pdj_c="2.54127" pdj_d="2.37267" />
|
||||||
|
<xform weight="0.564534951145298" color="0.13" julia="1" coefs="-1.381068 1.381068 -1.381068 -1.381068 0 0" />
|
||||||
|
<xform weight="0.0131350067581356" color="0.844" linear="1" popcorn="1" coefs="0.031393 -0.031367 0.031367 0.031393 0 0" />
|
||||||
|
<palette count="256" format="RGB">
|
||||||
|
FF0000D31616BD2121A72C2C9137377C4242714747664D4D
|
||||||
|
3A63631D7171008080008B8B00969600A1A100ACAC00B1B1
|
||||||
|
00B7B700CCCC00D7D700E2E200EDED00F8F800FBFB00FFFF
|
||||||
|
2CF0FF42E8FF58E0FF6DD8FF83D1FF8ECDFF99C9FFAFC2FF
|
||||||
|
C5BAFFFFA6FFE9A2FFD39FFFBD9CFFA799FF9C97FF9196FF
|
||||||
|
668FFF508CFF3A89FF2485FF0E82FF0781FF0080FF0B80FF
|
||||||
|
1680FF2C80FF3780FF4280FF4D80FF5880FF5D80FF6380FF
|
||||||
|
7980FF7785F4758BE96A96D35FA1BD59A6B254ACA749B791
|
||||||
|
3EC17C28D7501DE23A12ED2409F61200FF0016E9002CD300
|
||||||
|
58A7006D9100837C00996600AF5000BA4500C53A00DB2400
|
||||||
|
F10E00E90B00D31600BD2100B22600A72C009137007C4200
|
||||||
|
5058003A6300246E001973000E79000080000A7500146A00
|
||||||
|
1E5F003249003C3E004633004B2D005028005A1D00651200
|
||||||
|
8100008C00009800009E0000A40000AF0000BB0000C70000
|
||||||
|
D20000EA0000F00000F60000FD0000F2160BE82C16DD4221
|
||||||
|
C76E37BC8342B2994DACA452A7AF589CC56392DB6E87F179
|
||||||
|
80FF8080E99680E39B80DEA180D3AC80C8B780BEC180B3CC
|
||||||
|
809DE2808EF08080FF7A80F47580E96A80D35F80BD5480A7
|
||||||
|
4980913380662D805B2880501D803A12802407800E008000
|
||||||
|
2C841A3784204285265887336E8940838B4D998D5AAF8E66
|
||||||
|
C59073FF9595FF9393FF9292FF9090FF8D8DFF8B8BFF8888
|
||||||
|
FF8383FF8181FF8080FF7E7EFF7B7BFF7979FF7777FF7783
|
||||||
|
FF768EFF769AFF75A6FF75B1FF74BDFF74C9FF73D4FF73E0
|
||||||
|
FF72F8FF71FBFF71FFFF6BEDFF65DBFF5FC9FF5AB7FF54A5
|
||||||
|
FF4E93FF4881FF426FFF3C5DFF374BFF2D2DFA293AF62548
|
||||||
|
F12155ED1E63E81A70E4167EDF128BDB0E99D60AA6D106B4
|
||||||
|
CD02C1CA00CACC00B9CE00A7CF0096D10085D30073D50062
|
||||||
|
D70050D8003FDA002EDC001CDE000BDF0000D90C06D4180C
|
||||||
|
CE2413C82F19C33B1FBD4725B7532BB25F32AC6B38A6773E
|
||||||
|
9D8A489D7E429E723C9E66359F5B2FA04F29A04323A1371D
|
||||||
|
A12B16A21F10A3130AA30804A40000A000009C0000980000
|
||||||
|
9400009000008C00008800008400008000007C0000750000
|
||||||
|
</palette>
|
||||||
|
</flame>
|
||||||
</Flames>
|
</Flames>
|
||||||
|
Loading…
Reference in New Issue
Block a user