Dlaczego mój model nie świeci ciągle?

9

Stworzyłem podstawowy teksturowany model kostki z Blenderem, aby ćwiczyć modelowanie, a następnie zaimportowałem go do Unity. Po włączeniu oświetlenia wygląda to dość brzydko. Światło nie jest ciągłe w rzędzie teksturowanych kostek:

wprowadź opis zdjęcia tutaj

Co dziwniejsze, światło na blokach tworzących podłogę jest ciągłe. Co ja robię źle?

Tak to wygląda bez tekstur:

wprowadź opis zdjęcia tutaj

Gdybym nie wiedział, że są to idealne kostki, powiedziałbym, że na powierzchni jest lekko zakrzywiona. Próbowałem też rozjaśnić teksturę, ale to też nie pomogło:

https://dl.dropbox.com/u/45620018/lighter%20texture.PNG

Po prostu wyeksportowałem model z Blendera i nie ustawiłem żadnych normalnych ani podobnych rzeczy. Jednak nie zrobiłem też nic specjalnego z modelem z cegły podłogowej.

Sprawdziłem normalne i wydaje się, że wskazują właściwy kierunek.

wprowadź opis zdjęcia tutaj

Nie widzę też różnicy między tymi dwoma modelami. Na panelu tekstur ustawiłem też rzutowanie na płaskie:

wprowadź opis zdjęcia tutaj

Sprawdziłem różne panele w Blenderze i jedyną normalną opcją w panelu „Dane obiektu” jest ta „Auto Smooth” i jest ona domyślnie wyłączona:

wprowadź opis zdjęcia tutaj

nosferat
źródło
Czy działa poprawnie, jeśli wyłączysz teksturowanie?
sprzedać

Odpowiedzi:

7

Z obrazu bez tekstury jestem pewien, że problem polega na tym, że twoje modele kostek mają nieodpowiednie wartości normalne. Musisz powiedzieć Blenderowi, że krawędzie twoich sześcianów mają być ostre, a nie gładkie - to, co teraz masz, to sześciany, które zachowują się jak sześciokątne przybliżenia sfer.

Nie znam Blendera, więc nie mogę dokładnie powiedzieć, jak to zrobić, ale można to nazwać „płaską” zamiast „gładkich” twarzy lub normalnych, lub może istnieć sposób na „przełamanie” określonej krawędzi. Twój model płytek podłogowych wydaje się mieć prawidłowe wartości normalne, więc być może powinieneś zobaczyć, co się w nim różni.

Kevin Reid
źródło
2
Miałeś rację, musiałem powiedzieć Blenderowi, żeby wyostrzył krawędzie. Mógłbym to osiągnąć za pomocą modyfikatora EdgeSplit. ( wiki.blender.org/index.php/Doc:2.4/Manual/Modifiers/Generate/… )
nosferat
Możesz po prostu wybrać wszystkie twarze w Blenderze i nadać im „Płaskie” cieniowanie za pomocą lewego menu (tego aktywowanego przez „T”). Lub, w Unity, możesz wybrać górę hierarchii importu Blendera, wybrać obliczanie normalnych (zamiast importowanych), a następnie wybrać kąt wygładzania (wybranie czegoś takiego jak 60 powinno dać pożądany efekt). Nie sądzę, że to naprawdę jest problem z normami, normalne są w porządku, inaczej nie zobaczyłbyś niczego w Unity (lub w Blenderze, gdybyś mógł włączyć wygładzanie tła).
Shivan Dragon,
4

Kilka sugestii dotyczących problemu:

a) Czy sprawdziłeś, czy wszystkie normalne twarze siatki są skierowane we właściwym kierunku? W Blenderze jest to dość proste)

b) Czy zastosowałeś odpowiednie mapowanie UV? Unity eksportuje wszystkie dane tekstur w oparciu o sposób konfiguracji w Blenderze. Spójrz na panel Tekstury w Blenderze, szczególnie panel „Mapowanie” pod Teksturami (najlepiej, że powinien być ustawiony na UV.

(PS, jaka jest tutaj zasada dotycząca załączników lub zamieszczania linków do plików projektu, powiedzmy w pytaniu link Dropbox lub Dysk Google? Powinno to być tak łatwe do naprawienia, gdybym tylko mógł zobaczyć wszystkie pliki).

balajeerc
źródło
2
Aby odpowiedzieć na pytanie w załączniku, na Stack Exchange zewnętrzne linki do plików dla poszczególnych pytań nie są preferowane, ponieważ zwykle znikają. Obrazy powinny być przesłane na nasz własny hosting (za pomocą przycisku przesyłania w edytorze), aby zespół SE mógł się upewnić, że się trzymają. Nie ma szczególnego wsparcia dla obrazów innych niż obrazy (np. Pliki Blendera dla tego pytania), ale lepiej jest znaleźć alternatywy, ponieważ bardziej przypomina to „proszę debugować mój bardzo duży kod”, co jest mało prawdopodobne, aby było przydatne dla kogokolwiek poza oryginalny pytający, sprzeczny z celami SE.
Kevin Reid,