GiiGaTeam / GiiGaEngine

0 stars 0 forks source link

Material #91

Open damibran opened 2 weeks ago

damibran commented 2 weeks ago

Use Case

На данный момент опустим возможность создания пользовательских материалов. Забудем про material instance, без отслеживания дерева override это не имеет большого смысла. Аналогично UE. При создании пользователь имеет возможность выбрать следующие свойства материала:

Возможные парамеры

Рассмотрим все параметры и их тип, которые может иметь материал.

Зависимость параметров от свойств

Для каждой комбинации свойств рассмотрим возможные параметры:

Diagram

PlantUML @startuml class Material <> { MaterialID BlendMode ShadingMode Base color : TextureColor Metallic : TextureСhannel Specular : TextureСhannel Roughness : TextureСhannel Anisotropy : TextureСhannel Emissive Color : TextureСhannel Opacity : TextureСhannel Normal : TextureID ShaderResources* <> } class TextureColor <> { TextureID Texture Float3 Color } class TextureChannel <> { TextureID Texture UINT Channel } class RuntimeResourceManager { void LoadMaterial(MaterialID) State Verify(TextureID) <> } class PSOManager { + ShaderResources* CreateShaderResourcesFor(Material*) } Material .. ShaderResource Material "1" *-- "0..*" TextureColor : uses Material "1" *-- "0..*" TextureChannel : uses note as TextureIDNote TextureID may be invalid end note TextureIDNote .. TextureColor TextureChannel .. TextureIDNote note as NoteInit RRM::LoadMaterial(MaterialID) in editor: For all properties RRM::Verify(TextureID) == Loaded PSO::CreateShaderResourcesFor(Material*) end note NoteInit .. Material NoteInit .. RuntimeResourceManager NoteInit .. PSOManager @enduml

image

Code