[4.60] shaders (reflection, normalmap..) & Lightmap

Généralités sur la programmation 3D
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: [4.60] shader : reflection (env_map)

Message par G-Rom »

kelebrindae, entre la 1.6 et la 1.7 , ogre gère différemment les materials , si les shaders sont écrit en HLSL ou GLSL , ca ne pose aucun problème.
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: [4.60] shader : reflection (env_map)

Message par blendman »

Fred a écrit :Sympa les exemples !
et on espère que ce n'est que le début :)

Ce serait d'ailleurs intéressant par la suite de mettre ce genre d'exemples dans le dossier exemples de PB, histoire de montrer ce que l'on peut faire avec pb et ogre :D.
kelebrindae
Messages : 579
Inscription : ven. 11/mai/2007 15:21

Re: [4.60] shader : reflection (env_map)

Message par kelebrindae »

@Blendman: ou bien, un endroit sur le forum (français ou anglais) pour mettre en "sticky" les shaders développés par les utilisateurs; avoir une petite liste de shaders à dispo pour éviter de les re-développer à chaque fois, ça pourrait être pratique. :wink:

@G-Rom: Théoriquement, les deux qui ne marchent plus (refraction et normal maps) sont en HLSL :? . Pour le shader "normal map", notamment, je l'avais obtenu en convertissant us shader CG en HLSL avec le CgCompiler de nVidia.

J'ai relevé ça dans ogre.log:

Code : Tout sélectionner

OGRE EXCEPTION(3:RenderingAPIException): Cannot assemble D3D9 high-level shader BumpMapFPSpecular Errors:
error X3539: ps_1_x is no longer supported; use /Gec in fxc to automatically upgrade to ps_2_0
error X3539: Alternately, fxc's /LD option allows use of the old compiler DLL
=> Ogre 1.7 ne supporte plus les versions de shaders en dessous de 2.0 ?

Pour info, voici toutes les erreurs que je trouve dans le ogre.log:

Code : Tout sélectionner

10:31:26: OGRE EXCEPTION(3:RenderingAPIException): Cannot assemble D3D9 high-level shader AmbientOneTexture Errors:
D:\Programmation\PureBasic\projects\shaders\normalMaps - multilights\memory(33,14): error X3025: global variables are implicitly constant, enable compatibility mode to allow modification
 in D3D9HLSLProgram::loadFromSource at OgreD3D9HLSLProgram.cpp (line 223)
10:31:26: High-level program AmbientOneTexture encountered an error during loading and is thus not supported.
OGRE EXCEPTION(3:RenderingAPIException): Cannot assemble D3D9 high-level shader AmbientOneTexture Errors:
D:\Programmation\PureBasic\projects\shaders\normalMaps - multilights\memory(33,14): error X3025: global variables are implicitly constant, enable compatibility mode to allow modification
 in D3D9HLSLProgram::loadFromSource at OgreD3D9HLSLProgram.cpp (line 223)
10:31:26: OGRE EXCEPTION(2:InvalidParametersException): Named constants have not been initialised, perhaps a compile error. in GpuProgramParameters::_findNamedConstantDefinition at OgreGpuProgramParams.cpp (line 1423)
10:31:26: Compiler error: invalid parameters in cube.material(10): setting of constant failed
10:31:26: OGRE EXCEPTION(2:InvalidParametersException): Named constants have not been initialised, perhaps a compile error. in GpuProgramParameters::_findNamedConstantDefinition at OgreGpuProgramParams.cpp (line 1423)
10:31:26: Compiler error: invalid parameters in cube.material(11): setting of constant failed
10:31:26: OGRE EXCEPTION(3:RenderingAPIException): Cannot assemble D3D9 high-level shader BumpMapVPSpecular Errors:
D:\Programmation\PureBasic\projects\shaders\normalMaps - multilights\memory(52,14): error X3025: global variables are implicitly constant, enable compatibility mode to allow modification
 in D3D9HLSLProgram::loadFromSource at OgreD3D9HLSLProgram.cpp (line 223)
10:31:26: High-level program BumpMapVPSpecular encountered an error during loading and is thus not supported.
OGRE EXCEPTION(3:RenderingAPIException): Cannot assemble D3D9 high-level shader BumpMapVPSpecular Errors:
D:\Programmation\PureBasic\projects\shaders\normalMaps - multilights\memory(52,14): error X3025: global variables are implicitly constant, enable compatibility mode to allow modification
 in D3D9HLSLProgram::loadFromSource at OgreD3D9HLSLProgram.cpp (line 223)
10:31:26: OGRE EXCEPTION(2:InvalidParametersException): Named constants have not been initialised, perhaps a compile error. in GpuProgramParameters::_findNamedConstantDefinition at OgreGpuProgramParams.cpp (line 1423)
10:31:26: Compiler error: invalid parameters in cube.material(23): setting of constant failed
10:31:26: OGRE EXCEPTION(2:InvalidParametersException): Named constants have not been initialised, perhaps a compile error. in GpuProgramParameters::_findNamedConstantDefinition at OgreGpuProgramParams.cpp (line 1423)
10:31:26: Compiler error: invalid parameters in cube.material(24): setting of constant failed
10:31:26: OGRE EXCEPTION(2:InvalidParametersException): Named constants have not been initialised, perhaps a compile error. in GpuProgramParameters::_findNamedConstantDefinition at OgreGpuProgramParams.cpp (line 1423)
10:31:26: Compiler error: invalid parameters in cube.material(25): setting of constant failed
10:31:26: OGRE EXCEPTION(3:RenderingAPIException): Cannot assemble D3D9 high-level shader BumpMapFPSpecular Errors:
error X3539: ps_1_x is no longer supported; use /Gec in fxc to automatically upgrade to ps_2_0
error X3539: Alternately, fxc's /LD option allows use of the old compiler DLL

 in D3D9HLSLProgram::loadFromSource at OgreD3D9HLSLProgram.cpp (line 223)
10:31:26: High-level program BumpMapFPSpecular encountered an error during loading and is thus not supported.
OGRE EXCEPTION(3:RenderingAPIException): Cannot assemble D3D9 high-level shader BumpMapFPSpecular Errors:
error X3539: ps_1_x is no longer supported; use /Gec in fxc to automatically upgrade to ps_2_0
error X3539: Alternately, fxc's /LD option allows use of the old compiler DLL

 in D3D9HLSLProgram::loadFromSource at OgreD3D9HLSLProgram.cpp (line 223)
10:31:26: OGRE EXCEPTION(2:InvalidParametersException): Named constants have not been initialised, perhaps a compile error. in GpuProgramParameters::_findNamedConstantDefinition at OgreGpuProgramParams.cpp (line 1423)
10:31:26: Compiler error: invalid parameters in cube.material(37): setting of constant failed
10:31:26: OGRE EXCEPTION(2:InvalidParametersException): Named constants have not been initialised, perhaps a compile error. in GpuProgramParameters::_findNamedConstantDefinition at OgreGpuProgramParams.cpp (line 1423)
10:31:26: Compiler error: invalid parameters in cube.material(38): setting of constant failed
Les idées sont le souvenir de choses qui ne se sont pas encore produites.
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: [4.60] shader : reflection (env_map)

Message par blendman »

kelebrindae a écrit :@Blendman: ou bien, un endroit sur le forum (français ou anglais) pour mettre en "sticky" les shaders développés par les utilisateurs; avoir une petite liste de shaders à dispo pour éviter de les re-développer à chaque fois, ça pourrait être pratique. :wink:
oui, le mieux étant d'avoir les deux :) : des exemples assez complets et poussés dans le dossier exemple (shaders, lighting, gameplay, etc..) et un sujet dans le forum Anglais ou fr avec les shaders et exemples des utilisateurs, ce serait bien classe :).

Sinon, voici la suite de mon test de lightmap. Le mapping est pourri (mode automatique), mais c'est vraiment du très vite fait pour mes tests de lightmap :).
Image

le fichier :
http://blendman.free.fr/dev/pb/3arks/lightmap02.zip

sur ce fichier, je rencontre plusieurs choses étranges :
- SpotLightRange(1,20,90,20) fait planter le fichier et le débugger
- lightpower() ne semble pas fonctionner : comment l'utilise t-on ?
- sous windows, on a toujours le bug des shadows sur la 4.60beta 2 (pas sur ce fichier, mais sur l'autre fichier, avec le puf et les barrières) ;).

Autre question :
- est-il possible de donner une atténuation aux lights omnidirectionnelles ? Par exemple, au bout de 20 unités, elle n'éclairent plus les objets.

voiloutch :)
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: [4.60] shader : reflection (env_map)

Message par djes »

C'est appétissant tout ça :P
Quand j'aurais le temps je posterai aussi quelques essais. Je me suis déjà un peu amusé avec le moteur physique, c'est vraiment cooooool! Sinon, mes anciens tests de shaders sont tous à revoir, je vais devoir les repasser à la moulinette CG, ça me saoule un peu pour l'instant. Faut aussi que je vois si j'arrive toujours à convertir mes objets sous lightwave. Au fait, pour le problème d'ombres, ce n'est pas une histoire de complexité de l'objet, ou de double faces? Ca arrive souvent.
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: [4.60] shader : reflection (env_map)

Message par G-Rom »

- SpotLightRange(1,20,90,20) fait planter le fichier et le débugger
- lightpower() ne semble pas fonctionner : comment l'utilise t-on ?
- sous windows, on a toujours le bug des shadows sur la 4.60beta 2 (pas sur ce fichier, mais sur l'autre fichier, avec le puf et les barrières)


- Il faut que ta lumière soit un spot , il faut maitrisé les vecteurs pour leur donné une direction LumDir = normalise (LumTarget - LumPos) , il manque une fonction d'atténuation , elle est codé , non implémenté.
- LightPower() n'est là que pour le HDR , son utilisation est inutile dans ton cas de figure
- je pense que cela viens de tes meshs , si c'est un bug inhérent à ogre , je ne peut rien faire mis à part un rapport.
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: [4.60] shader : reflection (env_map)

Message par blendman »

G-Rom a écrit :- Il faut que ta lumière soit un spot , il faut maitrisé les vecteurs pour leur donné une direction LumDir = normalise (LumTarget - LumPos) , il manque une fonction d'atténuation , elle est codé , non implémenté.
ok, et ce sera intégré pour la 4.60 ou sans doute après j'imagine ? :D
LightPower() n'est là que pour le HDR , son utilisation est inutile dans ton cas de figure
Ah ok. Et peut-on gérer l'intensité d'une lumière ?
j'imagine que c'est aussi lié à l'atténuation ;) (http://www.ogre3d.org/tikiwiki/-Point+Light+Attenuation)

- je pense que cela viens de tes meshs , si c'est un bug inhérent à ogre , je ne peut rien faire mis à part un rapport.
ce qui est étrange c'est que visiblement, avec les mêmes meshs, sous linux ça ne fait pas ce bug (car tu ne l'avais pas, mais tous ceux qui ont tester sous windows l'avaient.
Cela dit, j'ai testé et je ne vois pas trop non plus ce que je peux faire, car le mesh semble correct, ou alors c'est un bug du à l'export depuis blender, mais là non je ne pourrais rien faire :(

EDIT : bon, visiblement, c'est plus ou oins connu comme bug on dirait :
"The stencil shadows issue is likely to be that your model has too many 'holes', which can be genuine holes or things like triangles not indexing shared vertices properly, but restating vertices for every triangle independently. Basically holes cause degeneracies in the hull, which causes problems for shadow volumes - we can cope with the odd hole, but if there are lots of them they blow the stencil buffer and cause artefacts. "

Ca pose problème pour certains export lié à blender, on dirait.
Mais ça ne se voit presque pas lorsque l'on utilise entityscale(0,1,1,1) et pas entityscale(0,200,200,200) :D
Je veux dire quand on utilise un scale très petit ou pas du tout, car scale = 1 ne sert je sais bien ;)
kelebrindae
Messages : 579
Inscription : ven. 11/mai/2007 15:21

Re: [4.60] shader : reflection (env_map)

Message par kelebrindae »

J'ai réussi à refaire marcher mon shader normalMap :) :
http://keleb.free.fr/codecorner/downloa ... pPB460.zip

En gros, on peut convertir un shader Cg en shader HLSL compatible PB 4.60 en faisant comme ceci:
1) Passer l'utilitaire CgCompiler sur les fichiers du shader Cg avec le profil hlsl10. Exemple:

Code : Tout sélectionner

cgc.exe -entry ambientOneTexture_vp -profile hlsl10v example_Basic.cg -o ambientOneTexture.hlsl

cgc.exe -entry specular_vp -profile hlsl10v example_bumpmapping.cg -o specular_vp.hlsl

cgc.exe -entry specular_fp -profile hlsl10f example_bumpmapping.cg -o specular_fp.hlsl
2) Dans les fichiers obtenus, virer les "#pragma pack_matrix(row_major)".

3) Si les tangentes du mesh sont utilisées dans les paramètres d'un vertex shader, remplacer:

Code : Tout sélectionner

in float3 _tangent : TEXCOORD1
par

Code : Tout sélectionner

in float3 _tangent : TANGENT
4) Ecrire le ".material" à partir du ".program" ou équivalent (un bout du shader qui indique les fichiers sources, les entry_point, les textures units, etc.). Attention: j'ai l'impression que Ogre 1.7 n'accepte pas les versions de shaders en dessous de 2.0 => pensez à vérifier les valeurs de "profiles vs_..." et "profiles ps_...".

Bon, j'imagine que l'on peut faire mieux ou autrement, mais avec ce shader-là, ça a marché...

[EDIT] Allez, un p'tit screenshot:
Image
Les idées sont le souvenir de choses qui ne se sont pas encore produites.
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: [4.60] shader : reflection (env_map)

Message par blendman »

classe :)
je vais regarder ça.

Maintenant, reste plus qu'à convertir tes autres shaders ;)
Refraction, miam :D

EDIT : par contre, il n'y a plus de spéculaires, on dirait sur ton exemple
Répondre