2016-06-06 11 views
0

Eine der grundlegendsten Techniken zum Rendern ist es, denselben Vertex-/Fragment-Shader auf mehrere Objekte anzuwenden, die unterschiedliche Texturen verwenden können. Allerdings verstehe ich nicht, wie das in SceneKit gemacht wird.Mehrere SCNMaterials mit gemeinsam genutztem Shader

Wenn Sie zwei verschiedene Texturen in zwei verschiedenen Polygonen verwenden möchten, müssen Sie zwei separate SCNMaterial-Objekte erstellen und auf diese Polygone (genauer gesagt auf die SCNGeometry-Objekte, die diese enthalten) anwenden Polygone).

Wenn Sie jedoch zwei SCNMaterial-Instanzen erstellen, verfügt jede über eigene unabhängige Vertex- und Fragment-Shader-Quellen, die separat kompiliert und verwendet werden. Dies gilt insbesondere, wenn Sie diese Shader in irgendeiner Weise modifizieren möchten.

Das heißt, wenn ich tausend Polygone habe, jede mit ihrer eigenen unterschiedlichen Textur, dann wird es tausend Kopien derselben Vertex-/Fragment-Shader geben, anstatt dass ein und dieselbe Shader-Instanz geteilt wird Sie. Auch wenn die Shader dasselbe tun. Das ist lächerlich ineffizient. (Stellen Sie sich vor, Sie würden beispielsweise eine 2D-Engine auf Sprite-Basis erstellen. Jedes einzelne Sprite würde seine eigene Kopie desselben Shaders haben, anstatt dasselbe Shader-Objekt zu teilen, was es wirklich ineffizient macht.)

Ich kann keinen Weg finden, zwei SCNMaterial-Objekte mit unterschiedlichen Texturen die gleichen Shader-Objekte zu teilen. Oder andersrum in SceneKit.

Antwort

0

SceneKit erkennt automatisch, dass diese Materialien dieselben Vertex- und Fragment-Shader verwenden können und kompiliert sie nicht zweimal.

+0

Sie meinen, dass es die Shader-Quellcodes von SCNMaterial-Objekten vergleicht und automatisch zusammenführt, um sie zu teilen, wenn sie identisch sind? – Warp

Verwandte Themen