-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMaterialBuilder.cpp
More file actions
132 lines (100 loc) · 3.29 KB
/
MaterialBuilder.cpp
File metadata and controls
132 lines (100 loc) · 3.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#include"MaterialBuilder.h"
void MaterialBuilder::createEmptyTexture()
{
const uint32_t texChannel = 4;
const uint32_t size = 2;
const std::vector<unsigned char> pixels(size * size * texChannel, 0);
emptyTexture = textureFactory->Create(texChannel,pixels.data()
, size, size, TexturePattern::NORMAL);
}
//マテリアルのプロパティを初期化
std::shared_ptr<MaterialBuilder> MaterialBuilder::initProperty()
{
property.initProperty();
return shared_from_this();
}
//基本色のテクスチャを設定
std::shared_ptr<MaterialBuilder> MaterialBuilder::withBaseColorTexture(const int& uvIndex, std::shared_ptr<Texture> texture)
{
property.texCoordSet.baseColor = uvIndex;
property.baseColorTexture = texture;
return shared_from_this();
}
//メタリックと粗さのテクスチャを設定
std::shared_ptr<MaterialBuilder> MaterialBuilder::withMetallicRoughnessTexture(const int& uvIndex, std::shared_ptr<Texture> texture)
{
property.texCoordSet.metallicRoughness = uvIndex;
property.metallicRoughnessTexture = texture;
return shared_from_this();
}
//法線用テクスチャを設定
std::shared_ptr<MaterialBuilder> MaterialBuilder::withNormalTexture(const int& uvIndex, std::shared_ptr<Texture> texture)
{
property.texCoordSet.normal = uvIndex;
property.normalTexture = texture;
return shared_from_this();
}
//オクルージョン化リング用テクスチャを設定
std::shared_ptr<MaterialBuilder> MaterialBuilder::withOcclusionTexture(const int& uvIndex, std::shared_ptr<Texture> texture)
{
property.texCoordSet.occlusion = uvIndex;
property.occlusionTexture = texture;
return shared_from_this();
}
//発光用テクスチャを設定
std::shared_ptr<MaterialBuilder> MaterialBuilder::withEmissiveTexture(const int& uvIndex, std::shared_ptr<Texture> texture)
{
property.texCoordSet.emissive= uvIndex;
property.emissiveTexture = texture;
return shared_from_this();
}
//基本色の設定
std::shared_ptr<MaterialBuilder> MaterialBuilder::withBaseColorFactor(const glm::vec4& factor)
{
property.baseColorFactor = factor;
return shared_from_this();
}
//発光の設定
std::shared_ptr<MaterialBuilder> MaterialBuilder::withEmissiveFactor(const glm::vec4& factor)
{
property.emissiveFactor = factor;
return shared_from_this();
}
//金属光沢の度合いを設定
std::shared_ptr<MaterialBuilder> MaterialBuilder::withMetallicFactor(const float& factor)
{
property.metallicFactor = factor;
return shared_from_this();
}
//粗さの度合いを設定
std::shared_ptr<MaterialBuilder> MaterialBuilder::withRoughnessFactor(const float& factor)
{
property.roughnessFactor = factor;
return shared_from_this();
}
//透明度の最大値を設定
std::shared_ptr<MaterialBuilder> MaterialBuilder::withAlphaMaskCutOff(const float& cutoff)
{
property.alphaMaskCutoff = cutoff;
return shared_from_this();
}
//自己放射の強さを設定
std::shared_ptr<MaterialBuilder> MaterialBuilder::withEmissiveStrength(const float& strength)
{
property.emissiveStrength = strength;
return shared_from_this();
}
//マテリアルのプロパティを作成
MaterialProperty MaterialBuilder::Build()
{
property.Build(emptyTexture);
MaterialProperty prop = property;
initProperty();
return prop;
}
//マテリアルを作成
std::shared_ptr<Material> MaterialBuilder::Create(const MaterialProperty& property)
{
std::shared_ptr<Material> material = std::make_shared<Material>(property, bufferFactory, layoutFactory, descriptorSetFactory);
return material;
}