Okej, låt oss lägga till lite vatten. Denna gång i en pool.
Ett sätt skulle vara att ställa in varje vertex under en viss nivå till samma y-värde, men jag ville också styra geometrin under ytan. SplitMesh-verktyget i papervision löste det för mig. Först delade jag nätet och la sedan till ytterligare ett plan i den korsningen. Det var lite knepigt att få z-sortering rätt när man förhandsgranskade alla delar tillsammans. Ett problem var att tilldela ett viewport-lager till de nya objekten. Trianglarna hade olika nivåer så några trianglar gömdes.
En lösning var att klona objektet och dess material, men det var cpu- och minneskrävande i mitt fall. Istället modifierade jag splitMesh-metoden för att ändra föräldern för de trianglar som skars. Split-util är ganska långsam för stora maskor, så det fryser spelaren ett tag. Tyvärr är jag ingen expert på att dela upp for-loops i bitar, så jag får leva med det nu. Lade till en vänteskärm istället.
Precis som med terrängen är vettenstrukturen en sammansättning av flera plan och material som placeras i olika visningsportlager för z-sortering och blandningslägeseffekter. Det första planet innehåller den diffusa färgen. Man kan också använda en reflektion istället för färgvärdet (detta får ljuset att reflekteras på ytan). Med BitmapData.draw() skapar man en bitmapp som i sin tur får alfakanalen från en transparenskarta, i det här fallet en gradientfill där vi ställer in alfa (vattentransparens) och range (z-djup). Nivån under vattenytan blir synlig och skärningen blir mindre skarp. Detaljerna under vattenytan är så platta och små, så jag bryr mig inte om att använda en förskjutningskarta för att simulera ljus som bryts genom vatten.
Vågorna genereras av, kan du gissa? Perlin Noise. Precis som med moln så ger det ett avfasningsfilter en slags volym till det.
Geometrin över vattnet klonas också med inverterade hörn. Sedan läggs en förskjutningskarta baserad på perlinbrus till i visningsporten. Där får man till några fina reflektioner.
Framtida förbättringar:
- Mer realistisk bumpkarta.
- Ljusreflektioner i vågorna (lite glitter). Jag provade en liknande ljuskarta som terrängen använder men jag kan inte göra plattsättningen korrekt.
- Skum (längs kantlinjerna skulle det vara lätt att använda höjdkartan och ändra palettkartan med transparenta och vita färger) för att skapa vita vågor med skum runt kanten.