Texture types and how to use them Good day everyone. I took a 3D model from the game, and it's using a few textures. I opened them, and now I'm a little bit confused.



Why does each texture end with _d or _m?

_d - is diffuse, right?

_n - Normals.

_m - Weight paint 

and what about others?

I did a sample render with "Diffuse" map:



There's an actual game screenshot from MLBB. Archives has *.unity3d files:



After extracting games character archive, there was a file AdditiveBackface.txt

And inside it says:



Shader "&lt;effect&gt;/AdditiveBackface" {
Properties {
 _diffuse ("diffuse", 2D) = "white" {}
 _intensity ("intensity", Float) = 0
 _Color ("Color", Color) = (0.5,0.5,0.5,1)
}
SubShader { 
 Tags { "QUEUE"="Transparent" "IGNOREPROJECTOR"="true" "RenderType"="Transparent" }
 Pass {
  Name "FORWARD"
  Tags { "LIGHTMODE"="ForwardBase" "QUEUE"="Transparent" "IGNOREPROJECTOR"="true" "RenderType"="Transparent" }
  ZWrite Off
  Fog { Mode Off }
  Blend One One
Program "vp" {
SubProgram "gles " {
"!!GLES


#ifdef VERTEX

attribute vec4 _glesVertex;
attribute vec4 _glesColor;
attribute vec4 _glesMultiTexCoord0;
uniform highp mat4 glstate_matrix_mvp;
varying highp vec2 xlv_TEXCOORD0;
varying highp vec4 xlv_COLOR;
void main ()
{
  gl_Position = (glstate_matrix_mvp * _glesVertex);
  xlv_TEXCOORD0 = _glesMultiTexCoord0.xy;
  xlv_COLOR = _glesColor;
}



#endif
#ifdef FRAGMENT

uniform sampler2D _diffuse;
uniform highp vec4 _diffuse_ST;
uniform highp float _intensity;
uniform highp vec4 _Color;
varying highp vec2 xlv_TEXCOORD0;
varying highp vec4 xlv_COLOR;
void main ()
{
  highp vec4 _diffuse_var_1;
  lowp vec4 tmpvar_2;
  highp vec2 P_3;
  P_3 = ((xlv_TEXCOORD0 * _diffuse_ST.xy) + _diffuse_ST.zw);
  tmpvar_2 = texture2D (_diffuse, P_3);
  _diffuse_var_1 = tmpvar_2;
  highp vec4 tmpvar_4;
  tmpvar_4.w = 1.0;
  tmpvar_4.xyz = (((
    ((xlv_COLOR.xyz * _diffuse_var_1.xyz) * (_diffuse_var_1.w * xlv_COLOR.w))
   * _intensity) * _Color.xyz) * _Color.w);
  gl_FragData[0] = tmpvar_4;
}



#endif"
}
SubProgram "gles3 " {
"!!GLES3#version 300 es


#ifdef VERTEX


in vec4 _glesVertex;
in vec4 _glesColor;
in vec4 _glesMultiTexCoord0;
uniform highp mat4 glstate_matrix_mvp;
out highp vec2 xlv_TEXCOORD0;
out highp vec4 xlv_COLOR;
void main ()
{
  gl_Position = (glstate_matrix_mvp * _glesVertex);
  xlv_TEXCOORD0 = _glesMultiTexCoord0.xy;
  xlv_COLOR = _glesColor;
}



#endif
#ifdef FRAGMENT


layout(location=0) out mediump vec4 _glesFragData[4];
uniform sampler2D _diffuse;
uniform highp vec4 _diffuse_ST;
uniform highp float _intensity;
uniform highp vec4 _Color;
in highp vec2 xlv_TEXCOORD0;
in highp vec4 xlv_COLOR;
void main ()
{
  highp vec4 _diffuse_var_1;
  lowp vec4 tmpvar_2;
  highp vec2 P_3;
  P_3 = ((xlv_TEXCOORD0 * _diffuse_ST.xy) + _diffuse_ST.zw);
  tmpvar_2 = texture (_diffuse, P_3);
  _diffuse_var_1 = tmpvar_2;
  highp vec4 tmpvar_4;
  tmpvar_4.w = 1.0;
  tmpvar_4.xyz = (((
    ((xlv_COLOR.xyz * _diffuse_var_1.xyz) * (_diffuse_var_1.w * xlv_COLOR.w))
   * _intensity) * _Color.xyz) * _Color.w);
  _glesFragData[0] = tmpvar_4;
}



#endif"
}
}
Program "fp" {
SubProgram "gles " {
"!!GLES"
}
SubProgram "gles3 " {
"!!GLES3"
}
}
 }
}
}
d is diffuse color

n is normal

s is specular color

e is emission I guess

m is mask. It's used to separate into different parts ; ie here you can see the red color isolate metallic objects, wich will probably use a different shader ; same for green (hairs)