В общем так Владислав, первое что тебе нужно сделать это читать учебник по шейдерам для Xors3D
http://area.xors3d.com/depository/do...ps-ru/download , это раз.
По поводу освещения ты можешь сделать следующие, берешь стандартный шейдер и поставки Xors3D > ShaderPack > - Bump Light. Разберешь сам пример по полочкам. Далее открываем шейдер Bump Light.FX смотрим у нас есть переменные
// Light
const float3 AmbientClr; // Ambient Color
const float3 LightClr; // Light Color
const half LightInt; // Light Intensity
// Positions
float3 PosLight; // Light Position
float RngLight; // Light Range
float DotLight; // Light Soft
// Other
static float3 Color;
static float4 cD;
static float3 cN;
static float3 nLight;
Добовляем еще переменные в виде LightClr2, LightInt2, PosLight2, RngLight2 , DotLight2, nLight2.
// Light 1
const float3 AmbientClr; // Ambient Color
const float3 LightClr; // Light Color
const half LightInt; // Light Intensity
// Positions
float3 PosLight; // Light Position
float RngLight; // Light Range
float DotLight; // Light Soft
// Light 2
const float3 LightClr2; // Light Color
const half LightInt2; // Light Intensity
// Positions
float3 PosLight2; // Light Position
float RngLight2; // Light Range
float DotLight2; // Light Soft
// Other
static float3 Color;
static float4 cD;
static float3 cN;
static float3 nLight;
static float3 nLight2;
Далее перелистываем ниже и видим описание техник. Нам нужна ТЕХНИКА
psPointDistance.
Нам нужно добавить сюда второй источник света.
float4 psPointDistance( in sp_PW_TBN_TC IN ) : COLOR {
cD = tex2D(TexDiffuse,IN.TexCoords);
Color = cD.rgb*AmbientClr;
RngLight = pow(saturate(1.0f-(distance(IN.pWorld,PosLight)/RngLight)),DotLight);
if (RngLight>0.0f) {
cN = normalize(tex2D(TexNormal,IN.TexCoords)*2.0f-1.0f);
PosLight = normalize(PosLight-IN.pWorld);
nLight = float3(dot(PosLight,IN.Tangent),
dot(PosLight,IN.Binormal),dot(PosLight,IN.Normal));
nLight = pow(max(dot(cN,nLight),0.0f),0.8f);
Color +=cD.rgb*nLight*LightClr*LightInt*RngLight;
}
return float4(Color,cD.a);
}
Добавляем переменные второго источника света.
float4 psPointDistance( in sp_PW_TBN_TC IN ) : COLOR {
cD = tex2D(TexDiffuse,IN.TexCoords);
Color = cD.rgb*AmbientClr;
//light=1
RngLight = pow(saturate(1.0f-(distance(IN.pWorld,PosLight)/RngLight)),DotLight);
cN = normalize(tex2D(TexNormal,IN.TexCoords)*2.0f-1.0f);
PosLight = normalize(PosLight-IN.pWorld);
nLight = float3(dot(PosLight,IN.Tangent),
dot(PosLight,IN.Binormal),dot(PosLight,IN.Normal));
nLight = pow(max(dot(cN,nLight),0.0f),0.8f);
//light=2
RngLight2 = pow(saturate(1.0f-(distance(IN.pWorld,PosLight2)/RngLight2)),DotLight2);
cN = normalize(tex2D(TexNormal,IN.TexCoords)*2.0f-1.0f);
PosLight2 = normalize(PosLight2-IN.pWorld);
nLight2 = float3(dot(PosLight2,IN.Tangent),
dot(PosLight2,IN.Binormal),dot(PosLight2,IN.Normal));
nLight2 = pow(max(dot(cN,nLight2),0.0f),0.8f);
Color +=cD.rgb*nLight*LightClr*LightInt*RngLight+cD.rgb*nLight2*LightClr2*LightInt2*RngLight2;
return float4(Color,cD.a);
}
Далее уже в самом Ксорсе указываем второй источник света, ну думаю ты сам там поставишь источник света.
пару скринов.