Jump to content
Unity Insider Forum
  • Announcements

    • Lars

      Allgemeine Forenregeln   03/13/2017

      Forenregeln Nimm dir bitte einen Moment um die nachfolgenden Regeln durchzulesen. Wenn du diese Regeln akzeptierst und die Registration fortsetzen willst, klick einfach auf den "Mit der Registrierung fortfahren"-Button. Um diese Registration abzubrechen, klick bitte einfach auf den "Zurück" Button deines Browsers. Wir garantieren nicht für die Richtigkeit, Vollständigkeit und Brauchbarkeit der Nachrichten und sind auch nicht dafür verantwortlich. Die Beiträge drücken die Meinung des Autors des Beitrags aus, nicht zwangsläufig das, wofür die Forensoftware steht. Jeder Nutzer, der denkt, dass ein veröffentlichter Beitrag unzulässig bzw. störend ist, ist aufgefordert uns unverzüglich per E-Mail zu kontaktieren. Wir haben das Recht störende Beiträge zu löschen und bemühen uns, das in einem realistischem Zeitraum zu erledigen (sofern wir beschlossen haben, dass die Löschung notwendig ist). Du akzeptierst, durchgehend während der Nutzung dieses Services, dass du dieses Forum nicht dazu missbrauchen wirst, Inhalte zu veröffentlichen, welche bewusst falsch und/oder verleumderisch, ungenau, beleidigend, vulgär, hasserfüllt, belästigend, obszön, sexuell belästigend, bedrohlich, die Privatsphäre einer Person verletzend oder in irgend einer Art und Weise das Gesetz verletzen. Des Weiteren akzeptierst du, dass du keine urheberrechtlich geschützte Inhalte ohne Erlaubnis des Besitzers in diesem Forum veröffentlichst. Mit dem Klick auf den "Mit der Registrierung fortfahren"-Button, akzeptierst du zudem unsere Datenschutzerklärung und stimmst der Speicherung deiner IP-Adresse und personenbezogenen Daten zu, die dafür benötigt werden, um dich im Falle einer rechtswidrigen Tat zurückverfolgen zu können bzw. permanent oder temporär aus dem Forum ausschließen zu können. Es besteht keine Pflicht zur Abgabe der Einwilligung, dies erfolgt alles auf freiwilliger Basis.   Zusatzinformationen Der Forenbetreiber hat das Recht, Nutzer ohne Angabe von Gründen permanent aus dem Forum auszuschließen. Des Weiteren hat er das Recht, Beiträge, Dateianhänge, Umfrage, Blogeinträge, Galleriebilder oder Signaturen ohne Angabe von Gründen zu entfernen. Mit der Registrierung verzichtest du auf alle Rechte an den von dir erstellten Inhalten, bzw. treten diese an das Unity-Insider.de und Unity-Community.de ab. Dies bedeutet im Klartext, dass das Unity-Insider.de und Unity-Community.de frei über deine Texte verfügen kann, sofern diese nicht wiederum die Rechte anderer verletzen. Es besteht weiterhin kein Anspruch von registrierten Nutzern bzw. ehemaligen registrierten Nutzern darauf, dass erstellte Inhalte und/oder die Mitgliedschaft (User) wieder gelöscht werden (Erhaltung der Konsistenz dieses Forums).   Einwilligungserklärung Wenn du mit der Speicherung deiner personenbezogenen Daten sowie den vorstehenden Regeln und Bestimmungen einverstanden bist, kannst du mit einem Klick auf den Mit der Registrierung fortfahren-Button unten fortfahren. Ansonsten drücke bitte Zurück. Stand: 07.03.2011

Mr 3d

Members
  • Content count

    632
  • Joined

  • Last visited

  • Days Won

    20

Mr 3d last won the day on February 14

Mr 3d had the most liked content!

Community Reputation

122 Excellent

About Mr 3d

  • Rank
    Christian
  • Birthday 12/09/1999

Contact Methods

  • Skype
    Bei Nachfrage per PM

Profile Information

  • Gender
    Male
  • Location
    Bayern
  1. Bitselect bei Floats - ComputeShader

    Stimmt^ das hast du ja oben schon so geschrieben.. hätte ich mal genauer hinschaun sollen Ich weiß jetzt nicht, ob das ein Unterschied zwischen 'normalen' Shadern und ComputeShadern ist, aber aus meiner Erfahrung ist bei einem 'wahren'-Bool nur das letzte Bit gleich 1. (in einem ComputeShader) würde dann zu 11111111 11111111 11111111 11111110 werden.. Habs grad mal getestet und scheint, zumindest im ComputeShader, nicht zu funktionieren.. (~condition & 1) klappt.. aber sind die beiden bitwise-Operatoren schneller als eine Subtraktion? (edit: das '& 1' hast du ja auch oben geschrieben)
  2. Bitselect bei Floats - ComputeShader

    Mal abgesehen, ob es jetzt performanter ist, oder nicht, hab ich glaub ich einen einfachen Weg gefunden diesen Float-Switch ohne Branching umzusetzen.. float switchFloats(float optionTrue, float optionFalse, bool condition){ return lerp(optionFalse, optionTrue, (uint)condition); } bzw. return optionFalse * (1 - (uint)condition) + optionTrue * (uint)condition; Fast schon zu einfach.. oder übersehe ich grad was? ^
  3. Bitselect bei Floats - ComputeShader

    Über diesen Trick bin ich auch schon gestolpert.. leider scheint die Unity DirectCompute / hlsl Sprache keine "union" zu kennen.. :/ @Zer0Cool Meines Wissens ist das mit Branching auf der GPU so (hab ich mal irgendwo gelesen ^).. Der Code wird in Threadgruppen ausgeführt. Nimmt ein (oder mehrere) Threads eine andere Abzweigung als die Anderen, so muss die gesamte Gruppe den Code noch einmal durchlaufen. Und das so lange bis jeder Thread in der Gruppe einmal an seinem richtigen Ende angekommen ist. In deinem Beispiel nehmen alle Threads die selbe Abzweigung, weshalb es keine Performanceprobleme geben sollte. (was dein Test bestätigen würde) 'asuint' bzw. 'asfloat' würde mein Problem lösen.. aber damit würde ich wahrscheinlich die Kompatibilität zu stark einschränken.. ( wäre auch zu schön gewesen ) Ich glaube ich werde einfach mit uints arbeiten müssen^
  4. Hi, Branching in einem ComputeShader sollte man ja so gut wie möglich vermeiden^ Deshalb setze ich fast ausschließlich auf bitselect (hab ich hier gefunden https://stackoverflow.com/questions/4911400/shader-optimization-is-a-ternary-operator-equivalent-to-branching ) Mit uints funktioniert das auch wunderbar: bool cond = zahlA > zahlB; uint bitmask = cond * 0xffffffff; uint select = (optionTrue & bitmask) | (optionFalse & (~bitmask)); Aber wenn ich versuche ein float und ein uint bitwise zu vergleichen gibt es einen Fehler. Obwohl das ja möglich sein müsste, sind ja beides 4byte.. Ich könnte natürlich auch die floats mit einem Faktor multiplizieren, zu uints casten und dann die Selektion durchführen. Aber gibt es da noch eine "schönere" Lösung?
  5. Menü: andere Scene Laden ( Gelöst )

    Die Fehlermeldung sieht für mich so aus, als versucht unity die Szene mit dem Namen "SceneManager.GetaktiveScene().buildIndex + 1" zu laden. Hast du vtl. geschrieben: SceneManager.LoadScene("SceneManager.GetActiveScene().buildIndex + 1"); ? Dann mach mal die Anführungszeichen weg^ außerdem ist das "A" in "GetActiveScene" groß.. Szenen aus einem anderen Projekt wirst du so nicht laden können.. da musst du wohl die beiden Projekte zu einem kombinieren müssen
  6. Fragen für Quizspiel gesucht! [QUIZMASTER]

    Ich nehme mal an du meinst Wasser?^^
  7. Ich glaube er will ein Sprite mit 8x8 Pixeln erstellen, wobei die Farben der Pixel abhängig von den entsprechenden Werten im Array sind. Du kannst einfach eine Texture2D ( https://docs.unity3d.com/ScriptReference/Texture2D.html ) erstellen und dann die Farben für jeden Pixel setzen ( https://docs.unity3d.com/ScriptReference/Texture2D.SetPixels.html ). Danach nicht vergessen "Apply();" ( https://docs.unity3d.com/ScriptReference/Texture2D.Apply.html ) aufzurufen, um die Änderungen 'anzuwenden'. Die Texture2D kannst du in eine RawImage Komponente laden, oder du generierst aus der Textur ein Sprite ( https://docs.unity3d.com/ScriptReference/Sprite.Create.html ) und übergibst es an deinen SpriteRenderer.
  8. Zählt Freitag schon zum Wochenende? ^ Auf jeden Fall habe ich nach ein paar Monaten Pause an meinem Blut -fließ -Shader weitergearbeitet. Zwischendurch hatte ich da mit @Zer0Cool Kontakt, der an einem sehr ähnlichen System gewerkelt hatte. siehe: So sieht das Ganze aktuell aus:
  9. Ich hab das jetzt nicht getestet.. aber ich glaube dass die Werte in einem Bereich von 0.0f - 1.0f liegen müssen. aus (84, 84, 84, 255) wird effektiv (1, 1, 1, 1), also weiß. (255, 0, 0) wird auf (1, 0, 0) geclampt, also rot..
  10. Mathf.Round();

    schreibst du nur Mathf.Round(transform.position.z); ? "Mathf.Round();" gibt dir den Wert gerundet zurück, setzen musst du ihn selbst.. transform.position = new Vector3(transform.position.x, transform.position.y, Mathf.Round(transform.position.z));
  11. Foreach-Problem

    Hi, ich bin mir grad nicht ganz sicher was du mit der foreach Schleife machen willst. Für mich klingt es so, als willst du alle Text Komponenten der Kindobjekte von "menueHauptbereich" in dein "menueHauptbereichTexte" Array schreiben. Is das nicht genau das, was "GetComponentsInChildren<Text>();" macht? ( https://docs.unity3d.com/ScriptReference/Component.GetComponentsInChildren.html ) Edit: zu langsam
  12. Bugs

    Hey, der 2. Fehler sagt mir so direkt nichts.. Beide Errors haben aber mit ComputeShadern zu tun. Ich bin mir nicht sicher, ob du aktiv ComputeShader benutzt, oder sie vtl. in einem Asset dabei waren.. ComputeShader werden aber erst ab DX11 Systemen unterstützt. Deshalb sollst DX9 ausschließen.. Der erste Fehler kommt daher, dass du irgendwo (im C# Code) einen ComputeBuffer erstellst, aber nicht "Release" oder "Dispose" aufrufst. (z.B. in 'OnApplicationQuit') Das übernimmt der GarbageCollector nicht, weil ComputeBuffer im GPU speicher liegen. (afaik ^) edit: Um Direct3D9 von der API Liste zu streichen musst du einfach das machen, was die Meldung dir sagt.. ^^ Erst den Haken bei 'Auto Graphics API for Windows' rausnehmen, dann erscheint die Liste und du kannst es entfernen.
  13. Geh-Animation Programmieren.

    Du weißt doch, wie du den Speed Wert setzen kannst. (hast du ja in Zeile 23 geschrieben) wenn (if) 'w' gedrückt ist, setzt du Speed auf 6.0f, ansonsten (else) kannst du Speed wieder auf 0 setzen.. Alternativ könntest du auch animator.SetFloat("Speed", Input.GetAxis("Vertical")); schreiben. Dann wird Speed 1, wenn 'w' gedrückt ist; -1, wenn 's' gedrückt ist; und ansonsten 0 Input.GetAxis interpoliert den Wert noch etwas.. wenn du direkt -1/0/1 haben willst, kannst du "Input.GetAxisRaw(..)" verwenden
  14. Vector2 Werte in Grad umrechnen?

    private float getAngle(Vector2 point, Vector2 center) { float angle = Mathf.Atan2(point.x - center.x, point.y - center.y) * Mathf.Rad2Deg; // x & y vertauscht, weil ausgehend von yAchse gezählt wird.. return angle + (angle < 0 ? 360f : 0f); } Über dem Zentrum 0 und steigt im Uhrzeigersinn bis 360.. SignedAngle kennt Unity bei mir nicht (5.6)
  15. Vector2 Werte in Grad umrechnen?

    "The result is never greater than 180 degrees." Du kannst auch Vector2.Angle verwenden, dann musst du nur zusätzlich überprüfen, ob der Vector über oder unterhalb der xAchse liegt. ( wenn dein Referenzvektor die xAchse ist ) Ich verstehe nicht wirklich, warum bei dir der Atan2(0.5, 0) gleich 85.7 ist.. Ich habe es eben selbst getestet, und ich bekomme richtige Werte. Vtl. musst du den Vektor noch normalisieren?
×