W mojej ocenie wygląda to bardzo dobrze:
- Cień posiada dobrą przezroczystość — nie za małą, nie za dużą.
- Cienie sumują się — miejsce, w które dwa obiekty rzucają cień jest ciemniejsze niż pojedynczy cień.
- Cienie rzucane są również na obiekty, a nie tylko na podłoże (cień golema na golemie).
To co zrobiłeś to jeden z najprostszych sposobów, a mimo to daje bardzo ładne efekty. Wiadomo, że jeśli ze cztery obiekty rzucą cień w jedno miejsce, to to miejsce będzie czarne, co nie jest zgodne z tym co widzimy na Ziemi — tu atmosfera rozprasza światło, więc miejsca zacienione tak czy siak są oświetlane rykoszetem. Ale to co widać na zrzucie wygląda bardzo fajnie, więc wcale nie jest powiedziane, że trzeba to ulepszyć.
Witam.
Piszę sobie hobbystycznie grę 2D RPG.
Myślę, że już całą Polska wie, że piszesz grę, więc już nie musisz o tym pisać.
I nie wygląda to wtedy jak cień, a zlepek półprzeźroczystych obiektów.
Tyle że tak właśnie wyglądają cienie w rzeczywistości. Co najwyżej mają rozmyte krawędzie.
Mam wstępny pomysł, żeby użyć dwóch tekstur jedna do renderowania gry a druga do renderowania cieni i na końcu tę z cieniem dodawać do tej pierwszej. Ale czy to dobry pomysł ?
Zależy co konkretnie chcesz z tą teksturą dla cieni robić, mam na myśli to jak chcesz na niej cienie renderować. Nie wiem też na co konkretnie pozwala SFML, ale modulacja koloru to nie tylko koloryzacja tekstur — można nią negować kolory, dodawać, mnożyć, dzielić itd., a więc uzyskać różne efekty. W tym np. możesz wszystkie cienie wyrenderować na teksturze, ale miejsca zacienione przez wiele obiektów będą tak samo ciemne jak te zacienione przez jeden obiekt. Czyli kolor i przezroczystość cienia zawsze będzie taki sam, nieważne ile cieni w jednym miejscu namalujesz.
Gdybym sam robił tego typu grę, to — jak pisałem kiedyś — skorzystałbym z warstw. Dno, woda, teren i obiekty na terenie — każda po jednej teksturze. W trakcie renderowania, najpierw renderowałbym teksturę warstwy na ekranie (w oknie), następnie cienie obiektów, które się na niej znajdują, na koniec obiekty. Natomiast obiekty renderowałbym w taki sposób, aby cień innych mógł na nie padać — czyli najpierw malowałbym obiekt na pomocniczej teksturze, następnie sprawdzał czy coś na niego rzuca cień i jeśli tak, to renderowałbym cień (albo cienie), a na koniec ten ocieniowany obiekt na ekranie (w oknie). Coś w ten deseń, tak na szybko wymyślone.
Bez tekstur pomocniczych trudno będzie się za ten temat zabrać.