BoxSpot - 3D-Softwareboxen selbst erstellen

    • Beta

    Es gibt 244 Antworten in diesem Thema. Der letzte Beitrag () ist von Tobias H..

      Die Spiegellung spinnt aus einigen Perspektiven wird sie einfach abgeschnitten. ( Scheinbar nur wenn ich im 0° Winkel von Front drauf schaue)

      Genau das ist der Bug, der bei vielen bekannt ist. Bei ca. der Hälfte der Leute geht es aber wiederum problemlos... Ich habe ihn übrigens auch auf meinem festen PC aus vielen Perspektiven.

      Bei mir geht der Designer wie Butter, das hängt ja von der Leistung des PC's ab. Aber AA ist in Preview aus, das einzige was eigentlich berechnet werden muss sind Schatten und Spiegelung. Und das ist ja eigentlich kein Ding und es wär auch doof, das beim Designer rauszunehmen, sonst sieht man das Bild ja nicht und muss dauernd Preview-Rendern.
      Die Textur passt sich der Größe der entsprechenden Seite an, verschieben kann man da in dieser Version nix mehr, also sollten die Bilder schon in einem ungefähr passendem Bildformat vorliegen. AA haben wir etwas reduziert, weil einige Stellen des Bildes unscharf geworden sind. Da werden wir aber auf jeden Fall nochmal drüberschauen.
      Wenn nichtmal AA im Preview Renderer drin ist dann verstehe ich nicht wie das teil auf überhaupt irgendeinem PC ruckeln kann. Eine Box + Schatten + Spiegellung konnte schon mein PC von 1998 darstellen.

      Bei mir gibt es massig Probleme mit der Spiegellung, Teilweise wird sogar nur das gespiegelte angezeigt und garnicht das Original.

      Es wäre schön, wenn das Bild nicht gestaucht/gestreckt werden würde sondern man es selber anpassen könnte.
      Wenn nichtmal AA im Preview Renderer drin ist dann verstehe ich nicht wie das teil auf überhaupt irgendeinem PC ruckeln kann.
      Ich auch nicht. Ist bisher auch noch nicht vorgekommen...

      Vielleicht reden wir doch von zwei verschiedenen Sachen? Ich meine das hier bei mir:



      Aus dieser Perspektive wird ein Teil der Spiegelung "weggeschnitten". Aus anderen fehlen Spiegelung + Schatten ganz. Manche wiederum gehen problemlos (siehe Render von eben). Bei mir besteht das Problem nur unter meinem festen PC.
      Hm... unter einer anderen Geforce aus der 8000er (weiß nicht mehr genau welche) gabs keine Probleme.... Wär cool, wenn du den CapsComparer von blaze laufen lassen und die Auswertung mal uppen könntest.

      @ Tobiii: Sind nicht mal so viele Zeilen. Das Update wird schon noch kommen, jetzt am Wochenende bin ich erstmal weg (fahre gleich los), entweder macht Lukas das dann oder wir zusammen am Sonntag Abend.
      An bshobbit:
      Irgendwie finde ich deine Posts immer unangebrachter... Sie kommen mir immer so vor, als würdest du kein einziges Lob verschenken wollen und immer darauf aus sein, neg. Kritik zu geben. (Scotty ist noch schlimmer) Und wenn ihr euch so anstellt, als würdet ihr allwissend sein, dann will ich das auch sehen (Showroom zB). Von dir, bshobbit, gabs ja das 2D-Spiel. Daher hast du Respekt und Anerkennung verdient, das kann auch nicht jeder. Aber von dir, Scotty, habe ich noch nie was gesehen, oder kann mich an nichts Herrausragendes erinnern.
      Und immer diese Anschuldigungen, wie "ausm Inet geklaut", finde ich vor allem von dir einfach nur zum ******.

      Nochmal wegen DX:
      Wir benutzen DX wegen folgenden Gründen:

      1. Matrix, Vector, Effect(Shader), usw. -Klassen sind fertig eingebaut. Eine eigene ähnlich arbeitende 3D-engine habe ich selbst schon gecoded (=> Mathematik die kein Problem ist in der Oberstufe). Warum ich die aber nicht nutze, sollte Punkt 2 beantworten.

      2. Die Bilder werden direkt in der Renderpipeline der Graka gerendert. Dadurch gibt es einen enormen Performance-Vorsprung. CPU-Raytracen wäre nur unnötig langsam.

      3. Mithilfe von HLSL lassen sich ganz einfach Shader entwickeln und einbringen.


      AA hat wenig Wirkung auf das fertige Bild.
      Wir benutzen 4-faches Multisampling sowie anisotrope Filterung. Es muss also ein (großen) Unterschied geben. Und den sehe.

      Ich kann eine Textur nicht verschieben sondern muss die Größe der Box anpassen.
      Die Größe anzupassen ist generell vllt eher zwecklos. Aber warum bitte, sollte man die Textur verschieben? Wäre sowieso eine Arbeit von 2 Minuten. (UV Koordinaten addieren).

      Die Spiegellung spinnt aus einigen Perspektiven wird sie einfach abgeschnitten. ( Scheinbar nur wenn ich im 0° Winkel von Front drauf schaue)
      Der Fehler ist absolut unverständlich für mich. Die Spiegelung wird aus der Multiplikation der WorldViewProjektionsmatrix und den Koordinaten des Vertex erstellt. Sie sollten (nach dem HLSL-Code zu urteilen) absolut identisch mit den Screen-Koordinaten sein. Bei einem bestimmten Winkel jedoch verändert sich die Spieglungs-UV-Koordinate, die Screen-Posi bleibt jedoch. Dass beide unterschiedlich sind, kann eigentlich nicht sein, da ich beide gleichsetze und gleich ausrechne. Wenn du dich mit HLSL auskennst kann ich dir den Code ja mal schicken.

      Der Designer ruckelt wie sau, und das sollte egal was für ein Rechner man hat bei so einer kleinen Anwendung nicht sein.
      Die Anwendung ist nicht so klein, wie sie aussieht. Sie arbeitet wir folgend:
      1. Rendern der Shadowmap mit einer Auflösung von mindestens 2048x2048 oder 4096x4096 (das ist unglaublich hoch für heutige Graka-Verhältnisse)
      2. Rendern der Spiegelung mit Phong-Shading und PercentageCloser-Abnahme in eine Textur
      3. Rendern der Box mit Phong-Shading in das normale Rendertarget
      4. Rendern des Bodens (der aufwändigste Teil des Rendervorgangs):
      - PercentageClose-Softshadowing, das in 2 ineinander-verschachtelte Schleifen errechnet wird. Die Sampling-Rate ist dabei noch eher niedrig.
      - Errechnen der Spiegelungskoordinaten und damit gleichzeitig das Einbringen der Spiegelung

      Das Softshadowing verbraucht Nnmengen an Rechenleistung, ist dafür aber genau. Schalte sie aus und es wird nicht mehr ruckeln.

      Farbe des Lichts
      Ok.


      Skybox/-dome
      Bei einer einfachen Produkt-Box?

      Modelimporter
      Warum bitte das? Es soll kein 3D-Editor werden. Außerdem kommen fertige Boxen noch dazu.


      Zu Bild 1:
      Das liegt noch an dem zu hohen NearPlaneFaktor. Das ist uns bisher nicht aufgefallen. Danke :)

      Zu Bild 2:
      Wie ist das enstanden?

      Zu Bild 3:
      Meinst du den weißen Strich zwische Spiegelung und Original. Lässt sich ausbessern. Nochmal Danke.



      Sorry wenn ich etwas falsch verstanden habe. Das hat mich gerade einfach nur aufgeregt.
      Trotzdem danke für umfassendes Testen, bshobbit. :)


      ---

      An Tobiii:
      Wir haben 2700 Zeilen Code, 7900 Wörter und 94000 Zeichen ;) (Shader sind eingeschlossen).

      Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „yeti2078“ ()

      Ich wiederhole mich nochmal gerne: Sicher eines der besseren Programme hier im Showroom, wenn das kein Lob ist weiss ich auch nicht. Und sorry das man hier misstrauisch wird was Sourcecode "diebstahl" angeht, das sieht man hier nunmal etwas öfter, und ich habe in der ersten Sekunde nicht an DirectX gedacht und war völlig überrascht als ich den Screen sah, war etwas voreilig gepostet... verzeih.

      Das 2D Spiel war nun wirklich keine große Sache nur eine Woche Hobby-Arbeit, die 2D Physik Engine die ich mal angefangen habe hingegen schon. In der 3D Programmierung bin ich nur hin und wieder mal unterwegs, hab aber meinen Lineare Algebra und Vektorrechnung 1-2 Kurs mit 1.0 bestanden, aber wirklich schlau werde ich aus einigen Physik-Berechnung der 2D/3D Welt immernoch nicht :/

      Also das AA hat schon wirkung auf das gerenderte Bild nur sah das bei meinen ersten Render versuchen mit eigenen Grafiken komisch aus. Mit der Standard Grafik gibt es keine Probleme was AA angeht, es scheint also an der Textur gelegen zu haben.

      Was ich mit Textur verschieben meinte: Ich habe zum Beispiel eine zu große Textur die lade ich auf die Box, diese wird skaliert, will ich nicht, ich will einfach nur einen Teil der Textur aufm Frontcover sehen, also würde ein verschieben der Gesamttextur ausreichen, so muss ich Paint öffnen und die Grafik zurechtschneiden.

      Was du zur Spiegelung geschrieben hast klingt aus rein Mathematischer sicht sehr verständlich, aber die Screenshots die ich vorher gepostet habe, habe ich bestimmt nicht gefaked, ich hab auch nichts provoziert, einfach software gestartet und Perspektive geändert.

      Könnte man das Preview Rendern denn nicht ein wenig abändern so das es nicht ruckelt?

      Skybox hatte ich gedacht um einen Schönen Hintergrund für die Box zu erstellen ist nicht notwendig.

      Der Modelimporter um selbst erstellte boxen/cd-Hüllen zu rendern.

      Du kannst gerne den HLSL Code uppen.
      Bild1:
      Kann eigentlich nicht am NearPlane liegen, da der Abstand dabei keine Rolle spielt.

      Bild2:
      Einfach nochmal eine Perspektiänderrung, weiss aber nicht mehr in welche Richtung!

      Bild3:
      Nein ich meine die Abgeschnittene Spiegellung, eigentlich ist eingestellt,das die komplette box zu 100% gespiegelt werden.


      Sollte das doch ein einfaches NearPlane Problem sein würds mich wunder, aber freuen das es ein so einfacher Fehler ist.

      Edit: Ups wollte Edit. Sorry.
      Hi bshobbit
      irgendwie habe ich mich nochmal extrem aufgeregt, wegen dem "diebstahl" (aber der Auslöser war eigentlich Scotty, naja). Entschuldigung! :S Und das mit "eines der besten Progs" habe ich übersehen -.-

      Ich kann mich für die Verbesserungsvorschläge bedanken.
      Textur verschieben: Da hast du Recht. ;)
      Weniger Ruckeln: Da ließe sich die Samplingrate runtersetzen.
      Skybox: mal sehen
      Modelimporter: joar, wäre dann komisch mit 3 Texturen

      Zur Spiegelung:
      (Klar sind deine Bilder nicht gefaket.)
      Also ich erkläre es mal mit dem Shader:

      VB.NET-Quellcode

      1. struct vertexOutput {
      2. float4 HPosition: POSITION;//#
      3. float2 UV: TEXCOORD0;
      4. float3 LightVec: TEXCOORD1;
      5. float3 WorldNormal: TEXCOORD2;
      6. float3 WorldTangent: TEXCOORD3;
      7. float3 WorldBinormal : TEXCOORD4;
      8. float3 WorldView: TEXCOORD5;
      9. float4 PosLightSpace: TEXCOORD6;
      10. float4 PosReflectSpace : TEXCOORD7; //#
      11. };
      12. vertexOutput VSS(vertexInput IN) {
      13. vertexOutput OUT;
      14. OUT.WorldNormal = mul(IN.Normal,WorldITXf).xyz;
      15. OUT.WorldTangent = mul(IN.Tangent,WorldITXf).xyz;
      16. OUT.WorldBinormal = mul(IN.Binormal,WorldITXf).xyz;
      17. float4 Pos = float4(IN.Position.xyz,1);
      18. float3 Pw = mul(Pos,WorldXf).xyz;
      19. OUT.LightVec = (Lamp0Pos - Pw);
      20. OUT.UV = IN.UV.xy;
      21. OUT.WorldView = normalize(ViewIXf[3].xyz - Pw);
      22. OUT.HPosition = mul(Pos,WvpXf);//#
      23. OUT.PosLightSpace = mul(Pos,MatLightWVP);
      24. OUT.PosReflectSpace = OUT.HPosition; //#
      25. return OUT;
      26. }


      Zur Zeit hängt noch (eher unnötige) Phongberechnung dahinter, aber der wichtige teil sind die Zeilen mit "//#"
      Wie du siehst ist "HPosition" die berechnete Screenkoordinate (sie würde dann von -1,-1 bis +1,+1 gehen (vereinfacht als 2D-Vektor)).
      Aber, "PosReflectSpace" wird am Ende HPosition gleichgesetzt, das heißt "PosReflectSpace" IST "HPosition".

      Logisch soweit?

      Jetzt gebe ich mal als Test die "PosReflectSpace" als Farbe aus.
      Im PixelShader:

      VB.NET-Quellcode

      1. float4 PSS(vertexOutput IN){
      2. return float4(IN.PosReflectSpace.xy,0,1);
      3. }


      Da "PosReflectSpace" gleich HPositon, also gleich der Screenkoordinate ist, müsste sich so ein ähnliches Bild ergeben, falls das Objekt den ganzen Monitor verdeckt:


      Logisch? (die Farben wären nur vertikal gespiegelt, hab kein anderes bild gefunden)

      So: Durch diese Koordinaten wird dann aus der ReflectionTextur die Reflection gerendert.
      Nur als Test bleiben wir mal bei den Farben.

      Bei mir sieht es so aus, wie im Bild (nur gespiegelt). Das heißt die werden richtig berechnet. Doch auf anderen Pcs (zB Kevins) ist ein Vertex der Fläche bei einem bestimmten Winkel , ganz plötzlich vollkommen grün oder vollkommen rot.

      Das ist aber für mich unverständlich, da "PosReflectSpace" = "HPosition" gilt.
      HPosition stimmt (sonst würde ich das vertex ja gar nicht sehen), "PosReflectSpace" (also die Farbe) ist manchmal absolut falsch.

      Ich verstehe nicht warum. (vor allem warum es auf manchen PCs geht und manchen nicht).
      Hast du vllt mal ein Treiberupdate gemacht?



      So und nochmal:
      Bild1:
      Kann eigentlich nicht am NearPlane liegen, da der Abstand dabei keine Rolle spielt.
      Doch daran liegt es, glaube mir. Denn der Boden wird vorne (unten, wo er "zu" nah ist) abgeschnitten und nicht gerendert. Somit sieht man dort auch nicht die Reflektion.

      Bild2:
      Einfach nochmal eine Perspektiänderrung, weiss aber nicht mehr in welche Richtung!
      Habs selbst hinbekommen. :D Kleiner Bug: Eigentlich sollte man nicht unter den Boden gucken, daher wird das beim drehen abgefangen. Beim Scrollen haben wir es aber vergessen.

      Bild3:
      Nein ich meine die Abgeschnittene Spiegellung, eigentlich ist eingestellt,das die komplette box zu 100% gespiegelt werden.
      Achso, das ist aber das gleiche Problem wie bei Bild1.
      Wann kommt den der Download?
      Mist ich habe das Projekt nicht. Wir haben es letztens über TeamViewer bei Kevin geschrieben und nicht geschickt. :S
      Na toll, dann müsst ihr leider warten. Tut mir echt Leid. :S

      Wie schon gesagt: Ich bin BoxSpot süchtig! ;)
      Das freut uns sehr. :D

      PS: (wurde ich ignoriert???)
      Wo? :huh:


      Mit Ribbon probieren wir es mal. Thx :thumbup:

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „yeti2078“ ()