Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

31

11.05.2004, 23:26

was hast du für ne graka?

der unterschied wundert mich insofern, als du anstatt 4 auf deine weise 18 instruktionen brauchst um den vertex zu transformieren.

PS: warum sollte das was mit amd zu tun haben?

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

32

11.05.2004, 23:51

Vielleicht weil die Optimierung für nen AMD nicht so gut sein könnte, wie für den Intel und miene Graka ist ne Radeon 9800SE/128MB Ram, allerdings wurde bei meiner die pipeline Aanzahl auf 4 reduziert.

33

12.05.2004, 00:41

Zitat

Vielleicht weil die Optimierung für nen AMD nicht so gut sein könnte, wie für den Intel
??? Es ist wohl eher anders herum. Sonst könnte AMD nicht mit einer geringeren CPU Frequenz die gleich Leistung bieten wie Intel.

Davon ab haben Optimierungen der CPU mit Shader Code soviel zu tun wie Äpfel mit Birnen ;) Zumal kannst du nicht davon ausgehen das jeder Shader V 2.0 hat und so verschwänderisch mit Shader Code umgehen kann.

Für Shader Code gibt es eine Faustregel: Je länger der Code desto langsamer ist er.
Schlussvolgerung: Für etwas so einfaches wie eine Transformation eines Vertex sollte der Code so klein wie möglich sein und wenn ich ihn mit 4 dp4 Befehlen abwickeln kann, sollte man das auch machen. Das ist alle mal schneller und man hat mehr Platz für die wichtigeren Dinge im Leben ;D


Nun zum Thema: @MannyDasMammut
Was für eine Kamera willst du denn machen? Eine für die Ich Perspektive oder eine aus der dritten Person?

Für eine Kamera für eine Ich Perspektive habe ich mal ein Tutorial geschrieben. http://www.dragon-master.net/tutorials/directx81/index.php?site=d3d-camera&title=Kamera+System
Schau es dir mal an. Vieleicht Hilft es dir bei deinem Kameraproblem.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

34

12.05.2004, 09:37

NEIN es ging darum den befehl trans zu ersetzen. Denn für den gilt die CPU und es geht um die Codeoptimierung.(das mit dem mehr leistung pro rechenschritt hängt mit der Cpu struktur zusammen).

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

35

12.05.2004, 22:41

was is besser?

eine von profis hochoptimierte funktion die MMX oder SSE bzw. SSE2 oder 3dNow! auf und ab unterstützt einmal pro frame aufzurufen um die matrix zu transponieren, oder pro frame und vertex 20 statt 4 instruktionen von der gpu ausführen zu lassen.
glaub nicht, dass die gpu für ein dp4 gleich lang braucht wie für 4 muls.
sowas können sich nvidia bzw. ati bei den optimierungen einer modernen graka sicher nicht leisten.

was mich wundert sind die höheren fps bei deiner version

das shader vom dx sample macht um einiges mehr als nur zu transformieren.
macht das deiner auch?

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

36

12.05.2004, 22:48

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
vs.1.1
; Constants:
;
;  c0-c3  - View+Projection matrix
;
;  c4.x   - time
;  c4.y   - 0
;  c4.z   - 0.5
;  c4.w   - 1.0
;
;  c7.x   - pi
;  c7.y   - 1/2pi
;  c7.z   - 2pi
;  c7.w   - 0.05
;
;  c10    - first 4 taylor coefficients for sin(x)
;  c11    - first 4 taylor coefficients for cos(x)

dcl_position v0

; Decompress position
mov r0.x, v0.x
mov r0.y, c4.w       ; 1
mov r0.z, v0.y
mov r0.w, c4.w       ; 1

; Compute theta from distance and time
mov r4.xz, r0        ; xz
mov r4.y, c4.y       ; y = 0
dp3 r4.x, r4, r4     ; d2
rsq r4.x, r4.x
rcp r4.x, r4.x       ; d
mul r4.xyz, r4, c4.x     ; scale by time

; Clamp theta to -pi..pi
add r4.x, r4.x, c7.x
mul r4.x, r4.x, c7.y
frc r4.xy, r4.x
mul r4.x, r4.x, c7.z
add r4.x, r4.x,-c7.x

; Compute first 4 values in sin and cos series
mov r5.x, c4.w       ; d^0
mov r4.x, r4.x       ; d^1
mul r5.y, r4.x, r4.x ; d^2
mul r4.y, r4.x, r5.y ; d^3
mul r5.z, r5.y, r5.y ; d^4
mul r4.z, r4.x, r5.z ; d^5
mul r5.w, r5.y, r5.z ; d^6
mul r4.w, r4.x, r5.w ; d^7

mul r4, r4, c10      ; sin
dp4 r4.x, r4, c4.w

mul r5, r5, c11      ; cos
dp4 r5.x, r5, c4.w

; Set color
add r5.x, -r5.x, c4.w ; + 1.0
mul oD0, r5.x, c4.z   ; * 0.5

; Scale height
mul r0.y, r4.x, c7.w

mov r10, r0;

; Transform position
; Transform position
mul r0.x, r10.x, c0.x 
mul r1.x, r10.y, c1.x
mul r2.x, r10.z, c2.x
mul r3.x, r10.w, c3.x

mul r0.y, r10.x, c0.y 
mul r1.y, r10.y, c1.y
mul r2.y, r10.z, c2.y 
mul r3.y, r10.w, c3.y

mul r0.z, r10.x, c0.z 
mul r1.z, r10.y, c1.z
mul r2.z, r10.z, c2.z
mul r3.z, r10.w, c3.z

mul r0.w, r10.x, c0.w 
mul r1.w, r10.y, c1.w
mul r2.w, r10.z, c2.w
mul r3.w, r10.w, c3.w

add r0, r0, r1
add r0, r0, r2
add oPos, r0, r3


und einmal:

Zitat


vs.1.1
; Constants:
;
; c0-c3 - View+Projection matrix
;
; c4.x - time
; c4.y - 0
; c4.z - 0.5
; c4.w - 1.0
;
; c7.x - pi
; c7.y - 1/2pi
; c7.z - 2pi
; c7.w - 0.05
;
; c10 - first 4 taylor coefficients for sin(x)
; c11 - first 4 taylor coefficients for cos(x)

dcl_position v0

; Decompress position
mov r0.x, v0.x
mov r0.y, c4.w ; 1
mov r0.z, v0.y
mov r0.w, c4.w ; 1

; Compute theta from distance and time
mov r4.xz, r0 ; xz
mov r4.y, c4.y ; y = 0
dp3 r4.x, r4, r4 ; d2
rsq r4.x, r4.x
rcp r4.x, r4.x ; d
mul r4.xyz, r4, c4.x ; scale by time

; Clamp theta to -pi..pi
add r4.x, r4.x, c7.x
mul r4.x, r4.x, c7.y
frc r4.xy, r4.x
mul r4.x, r4.x, c7.z
add r4.x, r4.x,-c7.x

; Compute first 4 values in sin and cos series
mov r5.x, c4.w ; d^0
mov r4.x, r4.x ; d^1
mul r5.y, r4.x, r4.x ; d^2
mul r4.y, r4.x, r5.y ; d^3
mul r5.z, r5.y, r5.y ; d^4
mul r4.z, r4.x, r5.z ; d^5
mul r5.w, r5.y, r5.z ; d^6
mul r4.w, r4.x, r5.w ; d^7

mul r4, r4, c10 ; sin
dp4 r4.x, r4, c4.w

mul r5, r5, c11 ; cos
dp4 r5.x, r5, c4.w

; Set color
add r5.x, -r5.x, c4.w ; + 1.0
mul oD0, r5.x, c4.z ; * 0.5

; Scale height
mul r0.y, r4.x, c7.w

m4x4 oPos, r0, c0

Also ich habe mal m_size von 32 auf 512 geändert. Raus kamen die selben zahlen, mit dem einizigen unterschied, dass die kleinen Einbrüche bei der standard version seltsamerweise häufiger waren(ich höre immer mukke im hintergrund könnte beim abspielen bei einem anderen stück aufgetretten sein).

37

13.05.2004, 01:49

Zitat von »"dot"«

was is besser?

eine von profis hochoptimierte funktion die MMX oder SSE bzw. SSE2 oder 3dNow! auf und ab unterstützt einmal pro frame aufzurufen um die matrix zu transponieren, oder pro frame und vertex 20 statt 4 instruktionen von der gpu ausführen zu lassen.
glaub nicht, dass die gpu für ein dp4 gleich lang braucht wie für 4 muls.
sowas können sich nvidia bzw. ati bei den optimierungen einer modernen graka sicher nicht leisten.

was mich wundert sind die höheren fps bei deiner version

das shader vom dx sample macht um einiges mehr als nur zu transformieren.
macht das deiner auch?
Der Unterschied dürfte nicht all zu hoch sein. Ist es doch so das bei SSE und SSE2 eine Matrixmultiplikation genau so in nur 4 Schritten volbracht werden kann wie bei den Shadern auch. Und bei den heutigen GPU's dürfte der Unterschied nur bei sehr hohem gebrauch von Shader Codes aufallen. Vor allem Dann wenn man ihn ständig wechseln muss. Dann sollte er nämlich auch so klein wie möglich sein.

Was du dir allerdings auch vor Augen halten must, ist das du in deinem Shader Code nicht nur einfach eine Transformation ausführen willst. Es sollen ja auch Effekte dami bewerkstelligt werden. Lighting z.B. Dann brauchst du einfach den Platz und kannst ihn nicht mit Transformationgeschichten belegen.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

38

13.05.2004, 13:29

Naja war ja auch nur nen Versuch, denn probieren geht vor studieren ;D . Habe nämlich gleichzeitig noch shader erlernt, war also nur ein Versuch um eine Theorie entweder zu bestärken oder zu entkräften und gleichzeitig zu lernen.

Werbeanzeige