Unterstütz ich jetzt Shader oder nicht?

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Benutzeravatar
Ingrater
Establishment
Beiträge: 103
Registriert: 18.04.2007, 21:52

Re: Unterstütz ich jetzt Shader oder nicht?

Beitrag von Ingrater »

GLSL 1.10 dürfte gut reichen um die Grundlagen von shadern zu lernen. Wenns dann halt mal bissl weiter geht brauchst du eventuell dann sowieso ne andere Graka weil die von intel dann schlicht und einfach zu langsam ist ;-)
Eisflamme
Establishment
Beiträge: 412
Registriert: 26.05.2002, 17:42
Wohnort: Köln

Re: Unterstütz ich jetzt Shader oder nicht?

Beitrag von Eisflamme »

Nagut.

Und kann ich CG jetzt für GLSL verwenden?

Vielleicht frag ich zu viel und sollt mich einfach woanders informieren.

Hat jemand denn ein gutes Einsteigertut? Das von nehe läuft ja nicht und Google bringt ja nur Zeug, was ich nicht unterstütze.

Ich könnte auf DX umsteigen, aber ich bin gerade so schön eingearbeitet (=
Benutzeravatar
Ingrater
Establishment
Beiträge: 103
Registriert: 18.04.2007, 21:52

Re: Unterstütz ich jetzt Shader oder nicht?

Beitrag von Ingrater »

Ich hab zwar noch nie cg benutzt, aber du solltest es nutzen können. CG compiliert das ganze ja dann um in glsl, du musst dann halt darauf achten dass das compile profil so eingestellt ist dass er nur auf glsl 1.10 geht.

Ein gutes tutorial zu glsl findest du hier:
http://www.lighthouse3d.com/opengl/glsl/

Den Rest musst dir dann selber beibringen / in Directx Tutorials abkuckn und umschreiben was an sich gar nicht schlecht is, da das copy & paste verhindert ^^
Eisflamme
Establishment
Beiträge: 412
Registriert: 26.05.2002, 17:42
Wohnort: Köln

Re: Unterstütz ich jetzt Shader oder nicht?

Beitrag von Eisflamme »

Werd ich mir noch anschauen, danke!

Also ich kriege das CG-Tutorial von nehe jetzt ohne Probleme zum Laufen, aber es wird halt einfach nichts angezeigt. Das ist ja nun wirklich ein sehr einfacher Shader, wie es scheint. Ich bin zwar nicht komplett drin, aber hat hier jemand vielleicht eine Ahnung, was bei dem simplen Beispiel GLSL1.1 sprengen könnte? Ich hab halt auch kA, ob der automatisch GLSL1.1 nimmt, weil nur das unterstützt wird. Scheint ja nicht so intelligent zu sein. Sonst programmier ich halt direkt GLSL.
Eisflamme
Establishment
Beiträge: 412
Registriert: 26.05.2002, 17:42
Wohnort: Köln

Re: Unterstütz ich jetzt Shader oder nicht?

Beitrag von Eisflamme »

So, nach der versauten Klausur hab ich mir endlich Mal Rendermonkey geladen.

Seltsam ist, dass das auch die OGL-Shader unterstützt.

Also meine Idee, wieso GLSL (und damit CG) nicht funktioniert ist einfach Folgende:
Mein Grafikbeschleuniger unterstütz nur OpenGL 1.5

OpenGl2.0+ unterstüzt laut Wiki GLSL.

Wieso aber funktionieren die Shader mit Rendermonkey jetzt?
glassbear
Establishment
Beiträge: 324
Registriert: 08.04.2003, 18:09
Alter Benutzername: Enrico_
Echter Name: Enrico
Wohnort: San Diego
Kontaktdaten:

Re: Unterstütz ich jetzt Shader oder nicht?

Beitrag von glassbear »

Weil GLSL auch per Extension unterstützt werden könnten oder die Rendermonkey-Shader liegen in assembler vor (oder da ist ein Assembler dabei, der das erst umsetzt).
Ein Hoch auf uns Männer... Auf die Frau, die uns HAT ( oder hat, und nicht weiß, dass sie uns hat ) ...auf die Idiotinnen ... besser gesagt VOLLPFOSTINNEN ... die uns hatten und uns verloren haben ... und auf die GLÜCKLICHEN, die das Vergnügen & Glück haben werden uns kennenzulernen!
Benutzeravatar
Ingrater
Establishment
Beiträge: 103
Registriert: 18.04.2007, 21:52

Re: Unterstütz ich jetzt Shader oder nicht?

Beitrag von Ingrater »

Das halte ich für ein Gerücht dass die Rendermonkey shader in assembler vorliegen. Ich hab zumindest noch nie welche in Rendermonkey gesehen die als assembler vorliegen. Zudem hat nur nvidia für jedes Shadermodell eine vernüftige assembler extension. ATI hat meines wissens nach nur für Shadermodell 1.0 eine assembler extension. Aber man kann wirklich GLSL unterstüzen ohne OpenGL 2.0 mit extensions.
Eisflamme
Establishment
Beiträge: 412
Registriert: 26.05.2002, 17:42
Wohnort: Köln

Re: Unterstütz ich jetzt Shader oder nicht?

Beitrag von Eisflamme »

Achso, also klappen die Beispiele alle nicht, weil die OpenGL 2.0 benutzen, was GLSL standardmäßig ohne Extension kann. Daher muss ich mir einfach die GLSL-Extension besorgen für OpenGL?
Benutzeravatar
Ingrater
Establishment
Beiträge: 103
Registriert: 18.04.2007, 21:52

Re: Unterstütz ich jetzt Shader oder nicht?

Beitrag von Ingrater »

Genau, warscheinlich liegts daran. Ich würde die GLee empfehlen. Benutzt ich für extensions sehr einfach zu nutzen.
Dirk Schulz
Establishment
Beiträge: 130
Registriert: 01.03.2009, 14:21
Alter Benutzername: frittentuete

Re: Unterstütz ich jetzt Shader oder nicht?

Beitrag von Dirk Schulz »

Hi,

um Klarheit zu schaffen:

führe mal diesen Quelltest aus:

Code: Alles auswählen

CGprofile profile;
int nProfiles;
int ii;
nProfiles = cgGetNumSupportedProfiles();
printf("NumSupportedProfiles: %i\n", nProfiles);
for (ii=0; ii<nProfiles; ++ii) {
    profile = cgGetSupportedProfile(ii);
    printf("SupportedProfile %i: %s %i\n", ii, cgGetProfileString(profile),
    cgGetProfile(cgGetProfileString(profile)));
}
das sollte dir alle verfügbaren CG-Profile geben, die deine GPU unterstützt.

Dann im Nehe Quelltext "cgVertexProfile = cgGLGetLatestProfile(CG_GL_VERTEX);" austauschen mit:

Code: Alles auswählen

cgVertexProfile = cgGetProfile("a"); // wobei "a" mit einem der Profile auszutauschen ist
Das kannst du dann solange machen, bis etwas angezeigt wird, oder ein Fehler auftritt, dann weißt du, was du unterstützt! ;)

PS: schreibe uns sonst mal alle Profile auf, die er anzeigt.
Eisflamme
Establishment
Beiträge: 412
Registriert: 26.05.2002, 17:42
Wohnort: Köln

Re: Unterstütz ich jetzt Shader oder nicht?

Beitrag von Eisflamme »

Öhm, also der kennt cgGetNumSpportedProfiles() und cgGetSupportedProfile() nicht. Ich hätt ja einfach statt der Anzahl 100 eingesetzt und einfach Mal probiert, aber es gibt auch nur die Methode cgGetProfile, die nen const char* erwartet. Sonst gibt's nur cgGetProfileString() und cgGetProfileDomain() (auch laut Doku).

Übrigens habe ich mir Mal ein paar Shader von Rendermonkey angeschaut, die scheinen schon in ASM geschrieben worden zu sein. Hat ASM da eigentlich irgendwelche Vorteile?
Dirk Schulz
Establishment
Beiträge: 130
Registriert: 01.03.2009, 14:21
Alter Benutzername: frittentuete

Re: Unterstütz ich jetzt Shader oder nicht?

Beitrag von Dirk Schulz »

Hi,

die Funktionen werden ab CG-Version 2.2 zur Verfügung gestellt, ich dachte du hättest die aktuelle Version. ;)

Was, die Rendermonkey-Shader sind in ASM? :shock:
Bei meiner Version sind die entweder in HLSL (DirectX9), oder GLSL (OpenGL / OpenGLES). Bist du dir sicher, du weißt wie ASM aussieht? :lol:
Eisflamme
Establishment
Beiträge: 412
Registriert: 26.05.2002, 17:42
Wohnort: Köln

Re: Unterstütz ich jetzt Shader oder nicht?

Beitrag von Eisflamme »

Knapp daneben (2.1.) :D

Ok, hab mir Mal n andres Beispiel angeschaut und da wird tatsächlich nicht ASM verwendet. Aber im D3D-Shader für "Atmospheric" steht dieser Code hier:

Code: Alles auswählen

 
; Scattering Vertex shader
; (c) Preetham ATI Research, 2002.
; V View direction
; L Sun direction
; Theta Scattering angle
; s Distance
; E Total extinction (including reflectance).
;
vs.2.0

dcl_position   v0
dcl_texcoord   v2


; Transformation.
m4x4 oPos, v0, c0  ; Transform position to viewport

; Texture Coordinates.
; 0 Normal/Horizon map
; 1 Terrain texture
; 2 Cloud texture
mov oT0.xy, v2
mov oT1.xy, v2

mov r1, c32
mad oT2.xy, r1, c33, v2


mov  r0, c22               ; get eye position in eye space (origin)
m4x4 r1, r0, c8            ; eye position in model space
sub  r1, v0, r1            ; V = vertex eye
dp3  r1.w, r1, r1          ; normalize V
rsq  r1.w, r1.w            ;
mul  r1, r1, r1.w          ;

; calculate sun's position in sky
mov r8.x,  c19.x
mul r8.x,  r8.x, c32.x
frc r8.xy, r8.x
sub r8.x, r8.x, c31.z
mul r8.x, r8.x, c31.w

add r8.x, r8.x, c17.x
max r8.x, r8.x, -c31.x
min r8.x, r8.x, c31.x

; calculate sun direction
; r2 = [cos(theta), sin(theta)] of sun's rotation from east to west
mov r2.x, r8.x
max r2.y, r2.x, -r2.x
sub r2.y, c31.x, r2.y

; rotate sun from east to west depending on east_to_west value [-1,1]
; y' = y
mov r5, c18

; x' = z sin(theta)
mul r5.x, c18.z, r2.y

; x' = (z sin(theta)) + (x cos(theta))
mad r5.x, c18.x, r2.x, r5.x

; z' = (x sin(theta))
mul r5.z, c18.x, r2.y

; z' = (z cos(theta)) (x sin(theta))
mad r5.z, c18.z, r2.x, -r5.z

; normalize sun direction vector
dp3 r5.w, r5, r5
rsq r5.w, r5.w
mul r5.xyz, r5.xyz, -r5.w

; scale and bias to [0,1]
add r7, r5, c31.xxx
mul oT5, r7, c31.zzz

; Angle (theta) between sun direction (L) and view direction (V).
dp3 r0.x, r1, r5           ; r0.x = [cos(theta)] = V.L
mad r0.y, r0.x, r0.x, c31.x ; r0.y = [1+cos^2(theta)] = Phase1(theta)

; Distance (s)
m4x4 r1, v0, c4           ; r1.z = s
mov r0.z, r1.z            ; store in r0.z for future use.

; Terms used in the scattering equation.
; r0 = [cos(theta), 1+cos^2(theta), s] 

; at noon we want no shadows
dp3 r10.x, r5, c14
add r10.x, r10.x, c31.x
mul r10.x, r10.x, c31.z     ; sun angle for shadowing
sub oT3, c31.x, r10.x


; Approximate theta r10.x = theta / (pi/2)
mov r10, r5
dp3 r10.x, r10, c14
max r10.x, r10.x, -r10.x     ; get abs of cos(theta) 
//add r10.x, r10.x, c31.x    ; scale and bias cos(theta) to [0,1] range
//mul r10.x, r10.x, c31.z    ; ...
mov oT4.xy, r10.x    ; ; 

; Extinction term E
mov r1, c26.xxx
add r1, r1, c26.yyy         ;  beta_1 + beta_2

mul r1, r1, -r0.z           ; -(beta_1+beta_2) * s
mul r1, r1, c31.y           ; -(beta_1+beta_2) * s * log_2 e
exp r1.x, r1.x          ; r1 = e^(-(beta_1 + beta_2) * s) = E1
exp r1.y, r1.y          
exp r1.z, r1.z          



; Apply Reflectance to E to get total net effective E
mul r3, r1, c13     ;r3 = E (Total extinction) 


; Phase2(theta) = (1-g^2)/(1+g-2g*cos(theta))^(3/2)
; theta is 180 actual theta (this corrects for sign)
; c[28] = [(1-g)^2, 1+g^2, 2g]
mov r8.xyz, c28.xxx
sub r8.x, c31.x, r8.x
mul r8.xy, r8.xy, r8.xy ; r8.xy = [(1-g)^2, g^2]
add r8.y, r8.y, c31.x   ; r8.y = 1+g^2
mul r8.z, r8.z, c31.w  // 2g

mad r4.x, r8.z, r0.x, r8.y; 


rsq r4.x, r4.x                
mul r4.y, r4.x, r4.x       
mul r4.x, r4.y, r4.x;
mul r0.w, r4.x, r8.x              ; r0.w = Phase2(theta)


; Inscattering (I) = (Beta'_1 * Phase_1(theta) + Beta'_2 * Phase_2(theta)) * 
;        [1-exp(-Beta_1*s).exp(-Beta_2*s)] / (Beta_1 + Beta_2)

mul r4, c26.xxx, r0.y 
mul r5, c26.yyy, r0.w  
sub r6, c31.x, r1

mov r1, c26.xxx
add r1, r1, c26.yyy          ;  beta_1 + beta_2

mov r7, r1

add r4, r4, r5
mul r4, r4, r6

rcp r1.x, r1.x
mul r4, r4, r1.xxx ; r4 = I (inscattering)


; Apply Inscattering contribution factors.

mul r4, r4, c25.y


; Scale with Sun color & intesity.
mul r4, r4, c15    
mul r4, r4, c15.w  

mul r3, r3, c15    
mul r3, r3, c15.w  

; Outputs.
mov oD0, r3                             ; Extinction
mov oD1, r4                             ; Inscattering
Sieht für mich nach ASM aus ;P
Benutzeravatar
Ingrater
Establishment
Beiträge: 103
Registriert: 18.04.2007, 21:52

Re: Unterstütz ich jetzt Shader oder nicht?

Beitrag von Ingrater »

Joa aber das is ja D3D. Irgendwie hatte sich das so angehört als ob du ein OpenGL-Sample mit Assembler gefunden hast.
Dirk Schulz
Establishment
Beiträge: 130
Registriert: 01.03.2009, 14:21
Alter Benutzername: frittentuete

Re: Unterstütz ich jetzt Shader oder nicht?

Beitrag von Dirk Schulz »

Hi,

tatsächlich, die Standard-Technique von Atmospheric ist in ASM, heißt ja auch so: "AtmosphericScatteringEffect_ASM"

Dann würde ich vorschlagen, dass du dir die neuste Version von CG mal runterlädst! :)

Soll ja auch nur testweise sein: also du siehst dann, welche Shader-techniken deine Grafikkarte unterstützt, probierst solange durch, bis eine Technik funktioniert und nutzt diese dann mit cgSetProfile(const char*) bei jedem Programm dass du schreibst.

Wenn du dann später dein Programm veröffentlichen willst, kannst du ja wieder nach der besten Version suchen.
Eisflamme
Establishment
Beiträge: 412
Registriert: 26.05.2002, 17:42
Wohnort: Köln

Re: Unterstütz ich jetzt Shader oder nicht?

Beitrag von Eisflamme »

Ok, hier dann Mal meine Profile:

Code: Alles auswählen

SupportedProfile 0: vp20 6146
SupportedProfile 1: fp20 6147
SupportedProfile 2: vp30 6148
SupportedProfile 3: fp30 6149
SupportedProfile 4: arbvp1 6150
SupportedProfile 5: fp40 6151
SupportedProfile 6: arbfp1 7000
SupportedProfile 7: vp40 7001
SupportedProfile 8: glslv 7007
SupportedProfile 9: glslf 7008
SupportedProfile 10: glslg 7016
SupportedProfile 11: gp4fp 7010
SupportedProfile 12: gp4vp 7011
SupportedProfile 13: gp4gp 7012
SupportedProfile 14: vs_1_1 6153
SupportedProfile 15: vs_2_0 6154
SupportedProfile 16: vs_2_x 6155
SupportedProfile 17: vs_2_sw 6156
SupportedProfile 18: vs_3_0 6157
SupportedProfile 19: hlslv 6158
SupportedProfile 20: ps_1_1 6159
SupportedProfile 21: ps_1_2 6160
SupportedProfile 22: ps_1_3 6161
SupportedProfile 23: ps_2_0 6162
SupportedProfile 24: ps_2_x 6163
SupportedProfile 25: ps_2_sw 6164
SupportedProfile 26: ps_3_0 6165
SupportedProfile 27: hlslf 6166
SupportedProfile 28: vs_4_0 6167
SupportedProfile 29: ps_4_0 6168
SupportedProfile 30: gs_4_0 6169
SupportedProfile 31: generic 7002
Ich lass das Mal stehen.

Aber seltsamerweise funktioniert das jetzt einfach Mal? Krank? Ich meine, ich habe ja nur die neuste CG-Version installiert, wieso ändert das jetzt was? (=

Auf dieser Seite http://www.saschawillems.de/?page_id=100 funktioniert jetzt auch die Wasserdemo. Die Demo "Cel Shading and post scene effects" läuft leider nicht (Fehler beim Zugriff auf 0x0; irgendne Extension wird halt geladen, wo der Zugriff nicht geht).
Antworten