Всем привет
Не получается использовать карту нормалей (png 1500x1500)
При использовании только albedo карты все норм, при добавлении нормалей серый однотонный квадрат
Настройка импорта
Код:
Свет (пробовал разный, высоту, яркость)
var sun = new OmniLight3D();
sun.LightColor = new Color(1, 1, 1);
sun.LightEnergy = 5.0f;
sun.Position = new Vector3(1, 5, 1);
Импорт текстуры
const int textureScale = 1;
var GravelColorfulTexture = new StandardMaterial3D()
{
NormalEnabled = true,
ShadingMode = BaseMaterial3D.ShadingModeEnum.PerPixel,
AlbedoColor = new Color(1, 1, 1)
};
GravelColorfulTexture.AlbedoTexture = GD.Load<Texture2D>("res://Resources/gravel_albedo.jpg");
GravelColorfulTexture.NormalTexture = GD.Load<Texture2D>("res://Resources/gravel_normal.png");
GravelColorfulTexture.Uv1Scale = new Vector3(textureScale, textureScale, 1);
Отрисовка
var st = new SurfaceTool();
st.Begin(Mesh.PrimitiveType.Triangles);
... отрисовка по треугольникам в цикле...
st.SetUV(uv0); st.AddVertex(c0);
st.SetUV(uv1); st.AddVertex(c1);
st.SetUV(uv2); st.AddVertex(c2);
... готовый меш
st.GenerateNormals();
var arrayMesh = st.Commit();
arrayMesh.RegenNormalMaps();
var mesh = new MeshInstance3D();
mesh.Mesh = arrayMesh;
mesh.MaterialOverride = Resources.Textures.GravelColorfulTexture; // текстура см выше
Надо в импорте поменять Mode Lossless на что то другое.
Тогда появится NormalMap, который можно включить.
Вопрос решился?
Ну так чтобы понимать суть поста.