Seite 1 von 1

[Unity] Bloecke - Batching und Schatten

Verfasst: 24.01.2013, 00:31
von Seraph
Da ich in absehbarer Zeit hoffentlich wieder etwas mehr Zeit fuer eigene Projekte habe, moechte ich mich mal mit meinen 1.5 Problemen an euch wenden. Vielleicht hat ja jemand von euch genuegend Wissen und Erfahrung ueber/mit Unity. Falls nicht wende ich mich dann ggf. ans offizielle Unity-Forum.

Vor ca. 3-4 Monaten habe ich nach langer Zeit mit dem UDK endlich mal Unity 3.5 ausprobiert. Ich war ueberrascht wie schnell man damit doch im Vergleich zum UDK viele Dinge hinbekommt. Mein Ziel war recht einfach. Ich wollte einfach wie in Sims 3 dynamisch Fussboeden und Waende bauen. Dieses habe ich auch innerhalb kurzer Zeit umsetzen koennen.

Die 1.5 Probleme die ich dabei jedoch hatte waren zum einen das Batching der Bloecke und zum anderen die Schatten. Zu dem Zeitpunkt musste ich es dann aufgrund der Arbeit leider erstmal ruhen lassen.

Gestern habe ich nun Unity 4 installiert, das Projekt konvertieren lassen und festgestellt dass nichts mehr funktioniert. Na gut, schnell ein neues Projekt mit den grundlegend notwendigen Sachen erstellt, die ganzen Skripte kopiert und es funktioniert auch erstmal wieder halbwegs.

Ich freute mich schon, dass das Batching der ganzen Wand-Teile (Bloecke) nun auf Anhieb klappte, 5 Draw-Calls trotz ueber 200 dynamisch gezeichneten Wand-Teilen. Selbst mit drei verschiedenen Texturen pro Wand-Teil wurden es nicht mehr.

Nachdem ich jedoch den Schatten vom globalen Licht aktivierte, war die Freude schnell verschwunden. Er hat aufgehoert die Bloecke zu batchen und benoetigte fuer jeden Block 4 Draw-Calls. Nun stellen sich mir zwei Fragen:

1. Gibt es eine Moeglichkeit ihn dennoch zum batchen zu bewegen? Ich habe mittlerweile auch wieder einfache simple Cubes genutzt, aber selbst die batcht er nicht mehr sobald der Schatten aktiviert ist.

2. Ist es irgendwie moeglich den Schatten fuer einzelne Objekte zu deaktivieren?


Auch fuer sonstige Hinweise bzgl. Unity waere ich sehr dankbar.

Re: [Unity] Bloecke - Batching und Schatten

Verfasst: 24.01.2013, 19:41
von Punika
Hi

soviel Erfahrung habe ich in Unity nicht, nur paar Studiumsprojekte.

Du kannst für einzelne Meshes Schatten deaktivieren, unter Mesh Renderer gibt es castShadows -> (Pro only feature) laut Webseite.

Zum zweiten: Welchen Rendering Path hast du denn aktiviert? Macht er das vielleicht beim Deferred Shading nicht? Nur so ne Idee.

Gruß

Lutz

Re: [Unity] Bloecke - Batching und Schatten

Verfasst: 24.01.2013, 21:30
von Seraph
Erstmal danke fuer die Antwort. :)

Durch die nicht vorhandene Pro-Version fehlen wohl diverse Sachen, u.a. auch der Deferred Shading Rendering Path. Ebenso gibt es kein statisches Batchen. Wobei ich auch nicht weiss ob statisches Batchen wirklich funktionieren wuerde, da die Objekte ja zur Laufzeit erzeugt werden. Aber es scheint nur dynamische (sich bewegende Objekte) auszuschliessen. Das Problem mit den Schatten sind lt. Docs die Multi-Pass-Shader, welche ein Batchen verhindern.

Na dann ignoriere ich halt erstmal den Schatten und schau ob ich so weiter komme. Sieht zwar doof aus aber was soll es. Also danke nochmal. :)

Re: [Unity] Bloecke - Batching und Schatten

Verfasst: 25.01.2013, 09:11
von Tiles
Ja. Drawcall batching ist fast schon schwarze Magie.

Ganz andere Idee. Es gibt meines Wissens einen FBX im- und exporter der auch zur Runtime funktioniert. Wenn das Ding nur ein Material hat, und man das ganze als ein Objekt exportiert, und es dann wieder importiert hat man ja im Idealfall nur noch ein Objekt. Und somit auch nur noch einen Drawcall. Nur mal so als möglichen Workaround angedacht. Ob das Sinn macht und ob es brauchbar funktioniert wäre natürlich eine andere Frage.

Re: [Unity] Bloecke - Batching und Schatten

Verfasst: 26.01.2013, 11:49
von Seraph
Im Moment besteht ein Wand-Tile aus 3 moeglichen Materialien, welche natuerlich auch die selben sein koennen. Mein letzter Gedanke war, dass ich es das Prinzip grundsaetzlich so lasse, die Wand-Tiles also keine Schatten werfen, ich dafuer aber aus den Wandtiles grosse Waende bilde (diese Info habe ich eh bereits), diese untexturiert lasse und dafuer Schatten werfen lasse. Nun muesste ich sie nur noch irgendwie wieder verschwinden lassen koennen. Problem sind evtl. auch noch evtl. vorhandene Reflexionen.

Auch habe ich noch keine wirkliche Idee wie ich das mit Fenstern mache. Im Moment baue ich die Wand-Tiles selbst zusammen. Will ich Fenster in verschiedenen Groessen und ggf. sogar Formen beruecksichtigen wird es schwierig. Da waere es einfacher aus einem bestehenden Objekt etwas auszuschneiden, nur weiss ich nicht ob es da etwas entsprechendes gibt.

Die vielen moeglichen kleinen Texturen kann ich wohl ueber eine Extension wie Amplify umgehen, sofern ich das Prinzip richtig verstanden habe.

Aber heute und morgen werde ich wohl leider nicht dazu kommen mich weiter damit zu beschaeftigen, ich muss erst noch eine iOS-App fertig stellen. Aber danke fuer deine Idee und vielleicht hast Du oder jemand anderes ja noch weitere Ideen zu den o.g. Punkten.