KX_BlenderMaterial
Classe base: EXP_PyObjectPlus
Esta é a interface para os materiais na game engine.
Os materiais definem o estado de render aplicado aos objetos de malha.
O exemplo abaixo mostra uma configuração simples de shader GLSL que mistura dinamicamente dois canais de textura num material. Todos os materiais do objeto que roda este script devem ter duas texturas usando UV maps separados nos dois primeiros canais de textura.
O código funciona nos modos de render Multitexture e GLSL.
from Range import logic
vertex_shader = """
void main(void){ // simple projection of the vertex position to view space gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; // coordinate of the 1st texture channel gl_TexCoord[0] = gl_MultiTexCoord0; // coordinate of the 2nd texture channel gl_TexCoord[1] = gl_MultiTexCoord1;}"""
fragment_shader ="""
uniform sampler2D texture_0;uniform sampler2D texture_1;uniform float factor;
void main(void){ vec4 color_0 = texture2D(texture_0, gl_TexCoord[0].st); vec4 color_1 = texture2D(texture_1, gl_TexCoord[1].st); gl_FragColor = mix(color_0, color_1, factor);}"""
object = logic.getCurrentController().owner
for mesh in object.meshes: for material in mesh.materials: shader = material.getShader() if shader is not None: if not shader.isValid(): shader.setSource(vertex_shader, fragment_shader, True)
# pega o primeiro canal de textura do material shader.setSampler('texture_0', 0) # pega o segundo canal de textura do material shader.setSampler('texture_1', 1) # passa outro uniform para o shader shader.setUniform1f('factor', 0.3)O shader do material.
Tipo: BL_Shader
blending
Seção intitulada “blending”Inteiros usados na mistura de pixels, (src, dst), iguais aos do método setBlending.
Tipo: (integer, integer)
getShader()
Seção intitulada “getShader()”Devolve o shader do material.
Retorna: o shader do material
Tipo do retorno: BL_Shader
getTextureBindcode(textureslot)
Seção intitulada “getTextureBindcode(textureslot)”Devolve o bind code/id/número/nome OpenGL da textura do material.
textureslot: Define o número do slot de textura- tipo: integer
Retorna: o bind code/id/número/nome OpenGL da textura do material
Tipo do retorno: integer
A transparência alpha do material.
Tipo: float between 0.0 and 1.0 inclusive
hardness
Seção intitulada “hardness”Quão dura (nítida) é a reflexão especular do material.
Tipo: integer between 1 and 511 inclusive
Quantidade de luz emitida.
Tipo: float between 0.0 and 2.0 inclusive
ambient
Seção intitulada “ambient”Quantidade de luz ambiente no material.
Tipo: float between 0.0 and 1.0 inclusive
specularAlpha
Seção intitulada “specularAlpha”Transparência alpha das áreas especulares.
Tipo: float between 0.0 and 1.0 inclusive (alpha must be < 1.0)
specularIntensity
Seção intitulada “specularIntensity”Quão intensa (brilhante) é a reflexão especular do material.
Tipo: float between 0.0 and 1.0 inclusive
diffuseIntensity
Seção intitulada “diffuseIntensity”A quantidade de reflexão difusa do material.
Tipo: float between 0.0 and 1.0 inclusive
specularColor
Seção intitulada “specularColor”A cor especular do material.
Tipo: mathutils.Color
diffuseColor
Seção intitulada “diffuseColor”A cor difusa do material.
Tipo: mathutils.Color
textures
Seção intitulada “textures”Lista de todas as texturas do material.
Tipo: List of BL_Texture (read only)
setScriptUniform(name, value)
Seção intitulada “setScriptUniform(name, value)”Define um uniform u_ declarado no Texto dos nós GLSL Script deste material (uniform float u_speed;). O valor é enviado à GPU no próximo desenho, sem recompilar o shader. Um uniform cujo socket está ligado a outro nó não é afetado.
name: Nome do uniform, como foi escrito no Texto ("u_speed").- tipo: string
value: Um número ou uma sequência de até 4 números para vec2/vec3/vec4.- tipo: float or sequence of floats
Retorna: True quando o material possui esse uniform.
Tipo do retorno: boolean
getScriptUniform(name)
Seção intitulada “getScriptUniform(name)”Valor atual de um uniform u_ dos nós GLSL Script deste material.
name: Nome do uniform.- tipo: string
Retorna: Um float, uma tupla (2 valores para vec2, 3 para vec3 e 4 para vec4) ou None quando não existe esse uniform.
setBlending(src, dest)
Seção intitulada “setBlending(src, dest)”Define as funções aritméticas de cor dos pixels.
src: Define como os fatores de mistura de origem de vermelho, verde, azul e alpha são calculados; um destes… *GL_ZERO*GL_ONE*GL_SRC_COLOR*GL_ONE_MINUS_SRC_COLOR*GL_DST_COLOR*GL_ONE_MINUS_DST_COLOR*GL_SRC_ALPHA*GL_ONE_MINUS_SRC_ALPHA*GL_DST_ALPHA*GL_ONE_MINUS_DST_ALPHA*GL_SRC_ALPHA_SATURATE- tipo: int
dest: Define como os fatores de mistura de destino de vermelho, verde, azul e alpha são calculados; um destes… *GL_ZERO*GL_ONE*GL_SRC_COLOR*GL_ONE_MINUS_SRC_COLOR*GL_DST_COLOR*GL_ONE_MINUS_DST_COLOR*GL_SRC_ALPHA*GL_ONE_MINUS_SRC_ALPHA*GL_DST_ALPHA*GL_ONE_MINUS_DST_ALPHA*GL_SRC_ALPHA_SATURATE- tipo: int
Sem documentação da Range
Seção intitulada “Sem documentação da Range”Estes itens existem na engine mas não estavam na documentação da Range. Os marcados novo na Anastacio foram adicionados pela Anastacio Engine.
passIndex
Seção intitulada “passIndex”atributo
Pass Index do material, usado para separar materiais em filtros e efeitos.
