fix: poeira da Via Láctea orgânica — bordas suaves, manchas, Saco de Carvão
Substitui as faixas senoidais binárias por: queda quadrática suave nas bordas, caminho/largura irregulares (senos incomensuráveis), escuridão variando em manchas ao longo da banda e nuvens escuras discretas em posições reais (Saco de Carvão junto ao Cruzeiro, Cachimbo em Ofiúco). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015HtPHsTnDcLVSCiF5FGHZj
This commit is contained in:
parent
2f4994918d
commit
2014dcf9b7
1 changed files with 37 additions and 8 deletions
|
|
@ -1302,15 +1302,44 @@ function mwColor(dl) {
|
||||||
return [mix(255, 236, 186), mix(226, 224, 205), mix(188, 214, 242)];
|
return [mix(255, 236, 186), mix(226, 224, 205), mix(188, 214, 242)];
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Faixas de poeira (Grande Fenda + secundária): 1 = livre, ~0.1 = dentro da poeira */
|
/* Nuvens escuras discretas em posições reais aproximadas
|
||||||
|
(Saco de Carvão junto ao Cruzeiro, região do Cachimbo em Ofiúco...) */
|
||||||
|
const MW_DARKS = [
|
||||||
|
{ l: 303, b: -1.5, rl: 3.5, rb: 3.0, s: 0.85 }, // Saco de Carvão
|
||||||
|
{ l: 357, b: 4.5, rl: 5.0, rb: 2.2, s: 0.80 }, // Cachimbo (Ofiúco)
|
||||||
|
{ l: 31, b: -1.0, rl: 4.0, rb: 1.8, s: 0.75 },
|
||||||
|
{ l: 16, b: 2.5, rl: 3.0, rb: 1.6, s: 0.70 },
|
||||||
|
{ l: 344, b: -2.5, rl: 3.2, rb: 1.8, s: 0.70 },
|
||||||
|
];
|
||||||
|
|
||||||
|
/* Contribuição de uma faixa de poeira com borda suave (0 = fora, s = centro) */
|
||||||
|
function laneDark(b, center, halfw, strength) {
|
||||||
|
const d = Math.abs(b - center) / Math.max(halfw, 0.3);
|
||||||
|
return d >= 1 ? 0 : strength * (1 - d * d) ** 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Poeira: 1 = céu livre, ->0.08 = poeira densa. Caminhos e larguras
|
||||||
|
irregulares (senos incomensuráveis) + escuridão em manchas, não uniforme */
|
||||||
function mwDust(l, b, dl) {
|
function mwDust(l, b, dl) {
|
||||||
if (dl > 100) return 1;
|
if (dl > 105) return 1;
|
||||||
const fade = dl > 70 ? (100 - dl) / 30 : 1; // fenda some longe do centro
|
const fade = Math.min(1, (105 - dl) / 35); // fenda some longe do centro
|
||||||
const lane1 = Math.abs(b - 1.6 * Math.sin(l * DEG * 2.2)) <
|
const x = l * DEG;
|
||||||
(2.2 + 1.2 * Math.sin(l * 0.7)) * fade;
|
const wob1 = Math.sin(x * 2.2) + 0.6 * Math.sin(x * 4.9 + 1.7) +
|
||||||
const lane2 = Math.abs(b + 2.6 - 1.2 * Math.sin(l * DEG * 1.4 + 1.7)) <
|
0.35 * Math.sin(x * 9.3 + 0.6);
|
||||||
(1.3 + 0.8 * Math.sin(l * 1.3 + 0.5)) * fade;
|
const wob2 = Math.sin(x * 1.4 + 1.7) + 0.6 * Math.sin(x * 3.7 + 4.2);
|
||||||
return (lane1 || lane2) ? 0.1 : 1;
|
const patch1 = 0.62 + 0.38 * Math.sin(x * 1.1 + 2.9) * Math.sin(x * 2.6 + 0.4);
|
||||||
|
const patch2 = 0.55 + 0.45 * Math.sin(x * 0.9 + 5.1);
|
||||||
|
let dark = laneDark(b, 0.9 * wob1, 2.1 + 0.9 * Math.sin(x * 3.3 + 2.2),
|
||||||
|
0.9 * patch1);
|
||||||
|
dark = Math.max(dark, laneDark(b, -2.4 + 0.7 * wob2,
|
||||||
|
1.4 + 0.7 * Math.sin(x * 2.8 + 1.1),
|
||||||
|
0.8 * patch2));
|
||||||
|
for (const d of MW_DARKS) {
|
||||||
|
const dlc = Math.min(Math.abs(l - d.l), 360 - Math.abs(l - d.l));
|
||||||
|
const dd = (dlc / d.rl) ** 2 + ((b - d.b) / d.rb) ** 2;
|
||||||
|
if (dd < 1) dark = Math.max(dark, d.s * (1 - dd));
|
||||||
|
}
|
||||||
|
return 1 - Math.min(0.92, dark * fade);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Nuvens estelares (Scutum, Sagitário, Carina...) — adensamentos fixos na banda */
|
/* Nuvens estelares (Scutum, Sagitário, Carina...) — adensamentos fixos na banda */
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue