Kapičky aneb Metaballs

Metaballs, blobs, kapičky. Jde o technologii využívanou hojně v 3D modelování organických povrchů a uživatelsky jsem se s ní poprvé setkal u programu PoV-Ray.

termNejlepší ukázkou kapiček je klasický film Terminátor 2, kde se stříbrolesklé kapičky tekutého kovu slévají v ničivou bytost.

Zde si lze stáhnout primitivní demo, vyrobené v Game Makeru, předvádějící jednoduché vzlínání dvou kapiček. Vysvětlení dále v článku.

> DONWLOAD BLOBS.EXE <

Princip:

ori

Základní kapička je kruhová a je definována svým středem x,y a poloměrem r. Představme si, že kapička má něco jako elektrický náboj. Uprostřed nejvyšší a na okraji nejnižší. Za okrajem ( tzn. ve vzdálenosti větší než r ) je vždy nula.

* Popisuji pro jednoduchost ve 2D, každý další přidaný rozměr způsob výpočtu nemění.

Každá kapička má tedy jakýsi svůj vliv na své okolí do vzdálenosti r. Ale co uvnitř? Vliv má být plynulý a tak by všechny body kruhu měly mít něco mezi 1 a 0. U metaballs se používá funkce:

vliv = (1-(d/r) 2

kde d je vzdálenost zjišťovaného bodu od středu kapičky
r je poloměr kapičky
a výsledný vliv je hodnota od 0 do 1 podle polohy

Pokud máme kapiček víc, tak se jejich vlivy jednoduše sečtou. Když vyberu nějaký bod, tak budu kreslit jeho průhlednost jako:
vliv_kapičky_1+vliv_kapičky_2+vliv_kapičky_3…atd

Samosebou nemusím brát v potaz příliš vzdálené kapičky a taky pokud vyjde průhlednost větší než 1, ořežu výsledek na rovno 1.
Podle vlivu jednotlivých kapiček je možné vykreslovat všelicos, ne jen průhlednost. Já jsem v demo ukázce měnil odstín vykreslovaného bodu.

Samotná funkce v Game Maker Language vypadá takto.

Pokud potřebujeme, aby různé kapičky měly různou sílu, násobíme vliv oné kapičky hodnotou té síly. Skládáním kapiček lze získat roztodivné tvary a pokud použijeme zápornou sílu, bude „negativní“ kapička vykusovat z pozitivních kapiček díru.

Pro vyzkoušení kapiček bez programování si lze stáhnout PoV-Ray, který je zdarma a umí kapičky snadno zobrazit. Stačí do textového souboru opsat text uvedený níže, otevřít ho v PoV-Ray a dát v menu příkaz Render.

  #include "colors.inc"
  background{White}
  camera {
    angle 15
    location <0,2,-10>
    look_at <0,0,0>
  }
  light_source { <10, 20, -10> color White }
  blob {
    threshold .65
    sphere { <.5,0,0>, .8, 1 pigment {Blue} }
    sphere { <-.5,0,0>,.8, 1 pigment {Pink} }
    finish { phong 1 }
  }

PoVRay zobrazí dvě kapičky v prostoru. Souřadnice jsou ta čísla <x,y,z> v řádcích za slovem sphere. Následuje velikost r, pak síla a nakonec barva. Vše lze měnit. Kapičky můžete po řádcích přidávat v libovolném množství.

Podrobnosti k používání kapiček v PoV-Ray online zde.

Výsledek vypadá nějak takhle:

povray