Jump to content
Unity Insider Forum

GaRv3

Members
  • Content Count

    290
  • Joined

  • Last visited

  • Days Won

    4

GaRv3 last won the day on January 29

GaRv3 had the most liked content!

Community Reputation

29 Excellent

About GaRv3

  • Rank
    Advanced Member
  • Birthday 07/01/1980

Contact Methods

  • Website URL
    http://www.garvin-gurbat.de

Profile Information

  • Gender
    Male
  • Location
    Köln

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Okay, hab den Shader umgeschrieben und er unterstützt jetzt auch Tint Color und Transparenz. Vielen Dank für den Link! Für alle, die es interessiert, hier der Shader: Shader "Sprites/Fog of War" { Properties{ _MainTex("Base (RGB)", 2D) = "white" {} _Color("Tint", Color) = (1,1,1,1) } SubShader{ Tags { "Queue" = "Transparent" } Pass { Stencil { Ref 2 Comp NotEqual Pass Replace } Blend SrcAlpha OneMinusSrcAlpha CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" uniform sampler2D _MainTex; struct appdata_t { float4 vertex : POSITION; float4 color : COLOR; float2 texcoord : TEXCOORD0; }; struct v2f { half4 pos : POSITION; fixed4 color : COLOR; half2 uv : TEXCOORD0; }; fixed4 _Color; v2f vert(appdata_t v) { v2f o; o.pos = UnityObjectToClipPos(v.vertex); o.color = v.color * _Color; half2 uv = MultiplyUV(UNITY_MATRIX_TEXTURE0, v.texcoord); o.uv = uv; return o; } half4 frag(v2f i) : COLOR{ half4 color = tex2D(_MainTex, i.uv) * i.color; if (color.a < 0.3) discard; color.rgb *= color.a; return color; } ENDCG } } Fallback off }
  2. Ja, sieht super aus. Jetzt muss ich nur noch die Tint Color mit Transparenz einbauen...
  3. Oha! Hab befürchtet dass es auf Shader hinausläuft. Hast du zufällig ein verständliches Tutorial parat?
  4. Hallo zusammen, ich arbeite gerade an einem Hex-basierten Game und möchte einen halbtransparenten Layer über einige Tiles legen. Im Grunde sind es einfach nur Sprites, die über einige Tiles gelegt werden. Allerdings gibt es je nach Zoomstufe Probleme mit den Kanten, an denen die Sprites sich berühren. Entweder bleiben einzelne Pixel frei oder die Sprites überlappen sich. Letzteres wäre für mich okay, wenn die Sprites sich nicht aufgrund ihrer Transparenz addieren würden. Daher meine Frage: Kann ich die Sprite Renderer irgendwie so konfigurieren, dass sie sich gegenseitig maskieren, also nicht übereinander dargestellt werden können? Sie liegen auf unterschiedlichen Objekten, haben aber alle identische Sorting Layer und Order in Layer. Vielen Dank und besten Gruß GaRv3
  5. Doch, wenn man die Kanten scharf zeichnen lässt, splittet Unity die Vertices beim Import.
  6. Hmm, okay. Ich glaub, ich hab den Fehler gefunden. Sowohl der von Blender importierte, als auch der Primitive Cube haben 24 Vertices. Also hat jede Ecke ein Vertice pro angrenzendem Face. Dann werden die Normalen entsprechend berechnet und es entstehen die scharfen Kanten. Ich habe mit 8 Vertices (eins je Ecke) gearbeitet. Daher stehen die Normalen immer diagonal zum Face und der Shader versucht, das ganze abgerundet zu Schattieren.
  7. Hallo zusammen, ich hab gerade ein Problem bei der Darstellung von in Unity erstellten Models. Hier ein Screenshot eines einfachen Würfels: Links: Eigenes Model Mitte: Unity Primitive Cube Rechts: Blender Cube Ich erstelle die Vertices, setze die UV-Koordinaten, erstelle die Polygone und weise alles zu: Mesh mesh = new Mesh(); mesh.Clear(); mesh.vertices = vertices; mesh.uv = uvs; mesh.triangles = tris; mesh.RecalculateBounds(); mesh.RecalculateTangents(); mesh.RecalculateNormals(); mesh.name = "RockMesh"; meshFilter.mesh = mesh; meshCollider.sharedMesh = mesh; Das Material ist bei allen identisch. Jemand spontan ne Idee, wo der Fehler liegt? Komme irgendwie nicht drauf. Vielen Dank und beste Grüße GaRv3
  8. Weil concave MeshCollider in Unity absolut unbrauchbar sind.
  9. Hallo zusammen, ich habe ein paar Objekte, die über seeeeehr viele Box-Collider verfügen. Ich möchte hier bitte nicht über die Frage sprechen, ob Objekte so viele Collider brauchen. In diesem speziellen fall ist es so, da es keine andere Möglichkeit gibt, die Form des Objekts genau genug abzubilden, denn ein Mesh-Collider müsste convex sein, was in dem Kontext aber nicht funktioniert. Mein Problem ist nun folgendes: Beim öffnen der Szene, starten des Play Modes und selektieren eines der Objekte hängt der Editor immer für einige Sekunden. Beim Selektieren eines Objekts liegt das in erster Linie am Rendern des Inspektors - InspectorWindow.DrawEditors() braucht mal eben 8,5s und BoxColliderEditor.OnEnable() dauert bei z.B. 562 BoxCollidern über 3,5s. Nach dem Selektieren des Objekts hängt der Editor also erst mal gute 12 Sekunden. Schlimmer ist es beim Wechsel in den Play Mode bzw. Laden der Szene. Hier hängt der Editor mehrere Minuten, ich kann mir aber noch nicht genau erklären, wieso dies so extrem ist. Eigentlich sollte das ja nicht mit dem Inspektor zusammenhängen. Es ist auch unabhängig davon, ob ich ein Objekt selektiert habe. Das Editorscript der Objekte setzt die HideFlags der BoxCollider immer entsprechend, sodass sie nicht im Inspektor angezeigt werden. Dadurch geht das Selektieren des Objekts ab dem zweiten mal gewohnt schnell. Anscheinend werden die HideFlags aber nicht gespeichert, sodass die Collider bei erneutem Selektieren nach dem Starten/Stoppen des Play Modes bzw. Neuladen der Szene wieder erscheinen und ich die erwähnte Verzögerung habe. Hat jemand eine Idee, wie ich die Collider dauerhaft ausblenden kann und woher die extrem langen Wartezeiten beim Starten/Stoppen/Laden kommen? Vielen Dank und beste Grüße GaRv3 EDIT: Ich konnte nun zumindest herausfinden, was beim Verlassen des Play Modes den Freeze verursacht: Prefabs.MergePrefabs braucht 585 Sekunden(!). Woran kann das liegen? Ich habe zwar einige Prefabs in der Szene, aber das kann nicht normal sein und ist mir bisher so auch noch nie aufgefallen. EDIT 2: Das erste Problem (langsames Rendern des Inspectors) habe ich nun gelöst, indem ich die HideFlags der Collider in OnEnable() des GameObjects selbst setze und nicht im dazugehörigen EditorScript. Merke: Beim Selektieren eines Objekts wird es zunächst selbst aktiviert und erst dann der Inspektor geladen. Bleiben noch die Prefabprobleme! EDIT 3: MergePrefabs braucht auch beim Starten des Play Modes 612 Sekunden.
  10. Danke für deine Antwort. Habe es inzwischen genau so gelöst. Allerdings habe ich aktuell erst mal direkt selbst Threads implementiert. Mit dem Jobsystem werde ich mich in den kommenden Tagen beschäftigen.
  11. Hallo zusammen, ich arbeite mich gerade in das neue C# Jobsystem der aktuellen Beta ein und möchte es u.a. für Performanceoptimierungen von Voxelsystemen nutzen. Naturgemäß nutze ich ein dreidimensionales Array, welches die Informationen der einzelnen Voxel enthält. Das Jobsystem erlaubt aber nicht die nutzung von Arrays, da das Array ein Referenztyp ist und im Jobsystem nur Werttypen erlaubt sind. Macht ja auch irgendwie Sinn, da man sonst wieder in Race Conditions laufen könnte. Meine Frage ist, wie ich ein dreidimensionales Array (Block[,,]) in ein dreidimensionales NativeArray<Block> umwandeln kann. Irgendwie fällt mir dazu nichts ein. Vielen Dank und beste Grüße garv3
  12. Ich habe schon verstanden, wie das ganze funktioniert. Allerdings glaube ich, dass es schon seit einer ganzen Weile nicht mehr über die RGBA-Kanäle läuft, denn man kann inzwischen beliebig viele Texturen auf ein Terrain "malen". Daher wird - wenn ich das richtig verstanden habe - eben nicht mehr auf die vier Kanäle zugegriffen, sondern Splatmaps genutzt, die in der dritten Dimension (eine je Textur) des Splatmap-Arrays gesetzt werden. Die erste und zweite Dimension (x, y) stellen ja die Position auf dem Terrain, also den "Pixel" der Splatmap dar und sind somit auf je 2048 begrenzt. Das Problem ist genau dieses System. Eigentlich liegt es im Shader. Es geht mit ja nur um Echtzeitmanipulation der Texturen. Ich will zur Laufzeit bestimmte Texturen aufzeichnen und wieder entfernen können. Ich kann die einzelnen Werte der Splatmap zwar problemlos per Script anpassen, allerdings müsste ich eine Kopie der ursprünglichen Splatmaps speichern, um die Änderungen an bestimmten Stellen wieder rückgängig machen zu können. Vermutlich bleibt mir aber nichts anderes übrig... :-/
  13. Hallo zusammen, ich würde über die Texturen meines Terrains gern weitere Texturen legen, die aber anders kombiniert werden sollen. Bei dem normalen Terrain werden die Texturen ja über Alphamaps kombiniert. Das ist grundsätzlich auch ok für mich, aber sie werden einfach ungünstig kombiniert. Die Summe der Alphawerte muss immer 1 ergeben. Ist die Summe höher, entstehen unschöne Effekte. Ich hätte gern die Möglichkeit, einzelne "Layer" auf 1 zu setzen, die dann alle darunterliegenden einfach verdecken. Wenn ich bei map[x, y, 0] = 0.6f; map[x, y, 1] = 0.4f; map[x, y, 2] = 0; nur noch Textur 2 Anzeigen will, muss ich die Werte wie folgt ändern: map[x, y, 0] = 0; map[x, y, 1] = 0; map[x, y, 2] = 1; Möchte ich nun aber wieder zurückwechseln, muss ich die Werte für die Texturen 0 und 1 noch kennen. Andernfalls kann ich Textur 2 nicht einfach wieder ausblenden. Gibt es eine Möglichkeit, dass der Alphawert wirklich nur die Deckkraft der jeweiligen Textur bestimmt und sie damit die darunterliegenden einfach verdeckt? Etwa so: map[x, y, 0] = 0.6f; map[x, y, 1] = 0.4f; map[x, y, 2] = 1; Dann könnte ich die 1 bei Bedarf einfach wieder in 0 ändern und hätte die selbe Texturkombination wie zuvor. Das ganze würde ich gern nutzen, um Details auf dem Terrain ein- und wieder auszublenden. Vielen Dank im Voraus für alle Hinweise! garv3
  14. Hehe, also ist ein Dictionary praktisch nur eine handlichere Version eines HashTables!? Ich werde erst mal diesen Weg gehen. Vielleicht haut es ja hin. Ich muss halt nur immer eindeutige Hashes erzeugen.
  15. Hmm, okay.. Bei einem Hashset kann man keine Elemente auslesen. Daher wird es wohl doch ein Disctionary werden... Ich berichte dann
×
×
  • Create New...