PB 6.00 - Documentation sur les shaders

Généralités sur la programmation 3D
Avatar de l’utilisateur
Guillot
Messages : 529
Inscription : jeu. 25/juin/2015 16:18

PB 6.00 - Documentation sur les shaders

Message par Guillot »

La documentation concernant les nouvelles fonctions 3D n'étant pas terminée au moment de la traduction de la doc, elle contient des erreurs et lacunes
ci dessous une mis à jour de la doc concernant les shader + descriptif des shaderes prédéfinis
je donnerai par la suite quelques exemples d'utilisation

___________________________________________________________________________________________
- CreateShader

l'énumération des shaders prédéfinis n'a pas sa place ici mais dans CreateShaderMaterial

remarque:
Les shaders doivent généralement recevoir des paramètres pour fonctionner:
2 fonctions permettent de transmettre ces paramètres:
- MaterialShaderAutoParameter (parametre automatique)
- MaterialShaderParameter (parametre shader)

PureBasic permet également de fixer ces paramètres directement dans les programmes shader en ajoutant en fin de ligne de déclaration des 'uniform': "//" suivie soit:
- du numéro de paramètre automatique précédé d'un "+" (cf. constantes 'ParameterType' de la fonction MaterialShaderAutoParameter)
note: je fournirai plus tard un éditeur de shader pour simplifier l'affectation de ces numéros
- d'une ou plusieurs valeurs (séparée d'un espace) correpondant au paramètre shader (MaterialShaderParameter)

exemple:
uniform vec4 camera_pos;//+76 <- paramètre automatique #PB_Shader_CameraPosition
uniform vec4 fog_params;//+31 <- paramètre automatique #PB_Shader_FogParams
uniform vec3 speed;//0.5 1 0 <- paramètre shader 'speed'
uniform sampler2D diffuseMap;//1 <- paramètre shader numéro de texture

___________________________________________________________________________________________
- MaterialShaderAutoParameter

description :
les paramètres automatique correspondent aux paramètres du moteur 3D (positions de la camera, des lumières, couleur du matériel, brouillard...)
cette fonction permet de faire le lien entre les variable 'uniform' du shader et ces paramètres

exemple:
MaterialShaderAutoParameter(#Material, #PB_Shader_Fragment, #PB_Shader_CameraPosition, "camerapos", 0)

liste des paramètres automatiques:
https://www.ogre3d.org/docs/manual18/ma ... d_005fauto

____________________________________________________________________________________________
- MaterialShaderParameter

description :
cette fonction permet de fixer des paramètres spécifique au shader

exemple:
MaterialShaderParameter(#Material, #PB_Shader_Fragment, "bumpy", #PB_Shader_Float, 0.5,0,0,0)

____________________________________________________________________________________________
CreateShaderMaterial

le champ ShaderID doit contenir soit
- l'ID d'un shader préalablement créé avec CreateShader
- l'ID d'un shader prédéfini :
#PB_Material_ColorShader
#PB_Material_PerpixelShader
#PB_Material_BumpShader
#PB_Material_SkyShader
#PB_Material_WaterShader
#PB_Material_WaterShaderRTT
#PB_Material_OceanShader
#PB_Material_PointSpriteSphereShader
#PB_MaterialShader_CubicEnvShader <- nouveau
#PB_MaterialShader_CubicEnvBumpShader <- nouveau

___________________________________________________________________________________________
___________________________________________________________________________________________


descriptif des shaders prédéfinis:
___________________________________________________________________________________________
#PB_Material_ColorShader

Effet: couleur uniforme en 'perpixel'

texture(s) : aucune

MaterialShaderParameter : aucun

Prise en compte de :
- SetMaterialColor(#Material, #PB_Material_AmbientColor|#PB_Material_DiffuseColor, color)
- MaterialShininess(#Material, Shininess , SpecularColor)
- AmbiantColor
- Fog
- ScaleMaterial / ScrollMaterial / RotateMaterial

___________________________________________________________________________________________
#PB_Material_PerpixelShader

Effet: materiel en 'perpixel'

texture(s) :
- 0: sampler2D color

MaterialShaderParameter : aucun

Prise en compte de :
- SetMaterialColor(#Material, #PB_Material_AmbientColor|#PB_Material_DiffuseColor, color)
- MaterialShininess(#Material, Shininess , SpecularColor)
- LightAttenuation
- AmbiantColor
- Fog
- ScaleMaterial / ScrollMaterial / RotateMaterial

___________________________________________________________________________________________
#PB_Material_BumpShader

Effet: materiel avec relief

texture(s) :
- 0: sampler2D color
- 1: sampler2D normal

MaterialShaderParameter :
#PB_Shader_Fragment
- float bumpy - valeur par défaut: 1 (ampliture du relief)

Prise en compte de :
- SetMaterialColor(#Material, #PB_Material_AmbientColor|#PB_Material_DiffuseColor, color)
- MaterialShininess(#Material, Shininess , SpecularColor)
- LightAttenuation
- AmbiantColor
- Fog
- ScaleMaterial / ScrollMaterial / RotateMaterial

remarque(s):
- les tangents doivent être définies (utiliser 'BuildMeshTangent')

___________________________________________________________________________________________
#PB_Material_SkyShader

Effet: permet d'afficher un ciel avec nuage et soleil

texture(s) :
- 0: uniform sampler2D color (nuage)

MaterialShaderParameter :
#PB_Shader_Fragment
- vec3 speed - valeur par défaut: 10 0 0 (vitesse des nuages X et Y)
- float height - valeur par défaut: 200 (hauteur de la 1ere couche de nuage)
- int layer - valeur par défaut: 2 (nombre de couche de nuage suplementaire)
- float scale - valeur par défaut: 4000 (echelle de la texture)

Prise en compte de :
- SetMaterialColor(#Material, #PB_Material_AmbientColor, couleur): couleur du ciel soleil au zenith
- SetMaterialColor(#Material, #PB_Material_DiffuseColor, couleur): couleur du ciel soleil a l'horizon
- Fog

___________________________________________________________________________________________
#PB_Material_WaterShader

Effet : permet d'afficher une surface d'eau

texture(s) :
- 0: sampler2D normal

MaterialShaderParameter :
#PB_Shader_Fragment
- float scale - valeur par défaut: 0.1 (échelle de la texture)
- float height - valeur par défaut: 1 (hauteur des vagues)

Prise en compte de :
- SetMaterialColor(#Material, #PB_Material_DiffuseColor, couleur): couleur de l'eau (Alpha: opacité)
- SetMaterialColor(#Material, #PB_Material_SpecularColor, couleur): couleur du reflet du ciel
- Fog

___________________________________________________________________________________________
#PB_Material_WaterShaderRTT

Effet : permet d'afficher une surface d'eau avec reflet (via RTT)

texture(s) :
- sampler2D normal - texture n°0
- sampler2D RTT - texture n°1

MaterialShaderParameter : aucun

Prise en compte de :
- SetMaterialColor(#Material, #PB_Material_DiffuseColor, couleur): couleur de l'eau (Alpha: opacité)
- Fog
- ScaleMaterial / ScrollMaterial / RotateMaterial

___________________________________________________________________________________________
#PB_Material_OceanShader

Effet : permet d'afficher une surface d'eau avec des vagues
texture(s) :
- 0: sampler2D normal
- 1: sampler2D color (écume)

MaterialShaderParameter :
#PB_Shader_Vertex
- float wavebig - valeur par défaut: 0.5 (amplitude des vagues)
- float swell - valeur par défaut: 0.5 (amplitude de la houle)
#PB_Shader_Fragment
- float wavelittle - valeur par défaut: 0.5 (amplitude des "petites" vagues)
- float foam - valeur par défaut: 0.5 (écume)

Prise en compte de :
- SetMaterialColor(#Material, #PB_Material_AmbientColor, couleur): couleur de l'eau
- SetMaterialColor(#Material, #PB_Material_DiffuseColor, couleur): couleur du reflet du ciel
- Fog

remarque(s):
- la valeur alpha de la texture 'normal' contient la hauteur de la vague
___________________________________________________________________________________________
#PB_Material_PointSpriteSphereShader

Effet: affiche des sphere aux emplacement des sommets du mesh

texture(s) : aucune

MaterialShaderParameter : aucun

Prise en compte de :
- SetMaterialColor(#Material, #PB_Material_AmbientColor|#PB_Material_DiffuseColor, couleur)
- MaterialShininess(#Material, Shininess , SpecularColor)
- AmbiantColor
- Fog

remarque(s):
- la matière doit être de type PointSprite : SetMaterialAttribute(0,#PB_Material_PointSprite,1)
- les mesh doit être de type PointList : CreateMesh(#Mesh,#PB_Mesh_PointList)
- le rayon de la sphère est défini par la coordonnée de texture U
- la couleur de la sphère, est définie par la couleur du vertex
exemple: MeshVertex(posX, posY, posZ, 10, 0,RGB(255,0,0))
_______________________________________________________________________________________
#PB_MaterialShader_CubicEnv

Effet: reflection via texture cubique

texture(s) :
- 0: samplerCube cubemap
- 1: uniform sampler2D color

MaterialShaderParameter :
#PB_Shader_Fragment
- float glossy - valeur par défaut: 0.5 (intensité du reflet)

Prise en compte de :
- SetMaterialColor(#Material, #PB_Material_AmbientColor|#PB_Material_DiffuseColor, color)
- AmbiantColor
- Fog
- ScaleMaterial / ScrollMaterial / RotateMaterial

remarque(s) :
- les textures cubiques doivent être 'clampées': SetMaterialAttribute(#texture, #PB_Material_TAM, #PB_Material_ClampTAM)

___________________________________________________________________________________________
#PB_MaterialShader_CubicEnvBump

Effet: réflexion via texture cubique avec relief

texture(s) :
- 0: samplerCube cubemap
- 1: sampler2D color
- 2: sampler2D normal

MaterialShaderParameter :
#PB_Shader_Fragment
- float glossy - valeur par défaut: 0.5 (intensité du reflet)
- float bumpy - valeur par défaut: 1 (amplitude du relief)

Prise en compte de :
- SetMaterialColor(#Material, #PB_Material_AmbientColor|#PB_Material_DiffuseColor, color)
- MaterialShininess(#Material, Shininess , SpecularColor)
- AmbiantColor
- Fog
- ScaleMaterial / ScrollMaterial / RotateMaterial

remarque(s) :
- les textures cubiques doivent être 'clampées': SetMaterialAttribute(#texture, #PB_Material_TAM, #PB_Material_ClampTAM)
- les tangents doivent être définies (utiliser 'BuildMeshTangent')