При изменении кода материалы становятся чисто белыми без затенения | Годо C#C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 При изменении кода материалы становятся чисто белыми без затенения | Годо C#

Сообщение Anonymous »

У меня есть PackedScene, экземпляр которого я создаю с помощью кода. Все, что есть в этой сцене, — это один MeshInstance3D со стандартным StandardMaterial3D.
Из кода после создания экземпляра я пытаюсь изменить AlbedoColor MeshInstance3D. Однако, что бы я ни делал, материал получается чисто белым без каких-либо оттенков.
[img]https://i .stack.imgur.com/0KJeg.png[/img]

Если я добавляю материал вручную либо в MeshInstance3D напрямую, либо через переопределение материала поверхности или Geometry.MaterialOvrride в инспекторе все работает как положено и материалы имеют правильное затенение. Однако, как только я добавляю или изменяю материал с помощью кода, он сразу же ломается и выглядит, как на изображении выше.
Я пробовал различные подходы с помощью кода, все они описаны ниже:
Прямой доступ к материалу сетки

Код: Выделить всё

var orb = _orbResource.Instantiate();
if (orb.Mesh.SurfaceGetMaterial(0) is StandardMaterial3D material)
{
material.AlbedoColor = _color;
orb.Mesh.SurfaceSetMaterial(0, material);
}
Прямой доступ к переопределенному материалу

Код: Выделить всё

var orb = _orbResource.Instantiate();
if (orb.MaterialOverride is not StandardMaterial3D material)
{
throw new NullReferenceException("The orb did not have a material override");
}

material.AlbedoColor = _color;

orb.MaterialOverride = material;
Новый материал для переопределения

Код: Выделить всё

var orb = _orbResource.Instantiate();
var material = new StandardMaterial3D();
material.AlbedoColor = _color;

orb.MaterialOverride = material;
Я пробовал различные комбинации вышеперечисленного. Он не изменится, даже если я снова установлю материал после его изменения. Несмотря ни на что, если я изменю AlbedoColor, он всегда станет полностью белым без затенения. Я также подтвердил подлинность цветов. Я серьезно не понимаю, что могло произойти, но мне кажется, что я просто упустил из виду что-то простое.
Я новичок в Godot, так что, вероятно, это какая-то специфичная для движка вещь. пропустил.
Редактировать 1
Как упомянул @Theraot, я пытался сделать то же самое в новом проекте и это привело к той же проблеме. Взгляните на изображение ниже.
Изображение

Все эти шары являются MeshInstance3D со своим уникальным экземпляром сферы. Сфера внизу в центре — это та сфера, которую я изменяю с помощью кода. Как бы я это ни делал, он всегда оказывается неосвещенным и чисто белым. Сетка слева имеет материал непосредственно на сетке. Сфера справа не имеет материала. А сфера вверху имеет переопределение материала. Все они работают нормально, если я не изменяю их с помощью кода. Странно.
Моя установка освещения представляет собой рамку вокруг сфер с точечным источником света.
Важно также сказать, что я могу создавать и назначать материалы. и они, кажется, работают нормально. Однако, как только я изменяю какое-либо свойство, оно ломается.

Подробнее здесь: https://stackoverflow.com/questions/781 ... de-godot-c
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»