载入中...
搜索中...
未找到
PbrMaterial.h
浏览该文件的文档.
1#pragma once
2
3#include "procgen/Params.h"
5
6#include <cstdint>
7#include <functional>
8#include <memory>
9#include <string>
10#include <unordered_map>
11#include <vector>
12
13namespace eve::image {
14class ImageData;
15}
16
17namespace eve::procgen {
18
28 image::ImageData *albedo = nullptr; // RGBA8
29 image::ImageData *normal = nullptr; // RGBA8 tangent-space normal
30 image::ImageData *roughness = nullptr; // RGBA8, grayscale 0=glossy 1=rough
31 image::ImageData *metallic = nullptr; // RGBA8, grayscale 0=dielectric 1=metal
32 image::ImageData *height = nullptr; // RGBA8, grayscale displacement
33 image::ImageData *ao = nullptr; // RGBA8, grayscale ambient occlusion
34
36 image::ImageData *getAlbedo() const { return albedo; }
38 image::ImageData *getNormal() const { return normal; }
44 image::ImageData *getHeight() const { return height; }
46 image::ImageData *getAo() const { return ao; }
48 void destroy();
49};
50
52using PbrRecipeFn = std::function<std::unique_ptr<PbrTextureSet>(const Params &params, std::string &error)>;
53
56public:
58 static PbrRecipeRegistry &instance();
59
61 void registerPbrRecipe(const std::string &id, PbrRecipeFn fn);
63 void registerPbrRecipe(RecipeDescriptor descriptor, PbrRecipeFn fn);
65 bool has(const std::string &id) const;
74 [[nodiscard]] std::unique_ptr<PbrTextureSet> generate(const std::string &id, const Params &params,
75 std::string &error) const;
77 std::vector<std::string> list() const;
79 const RecipeDescriptor *descriptor(const std::string &id) const;
81 bool applyDefaults(const std::string &id, Params &params) const;
82
84 void registerPbrBuiltins();
85
86private:
87 struct Entry {
90 };
91 PbrRecipeRegistry() = default;
92 std::unordered_map<std::string, Entry> recipes_;
93 bool builtinsRegistered_ = false;
94};
95
97[[nodiscard]] std::unique_ptr<PbrTextureSet> generatePbrSet(const TextureRecipeDef &def, const Params &params,
98 std::string &error);
99
101[[nodiscard]] std::unique_ptr<image::ImageData> grayscaleImage(const std::vector<float> &values, int w, int h);
102
103} // namespace eve::procgen
float w
Definition AnimClip.cpp:738
std::string descriptor
graphics::Texture * albedo
std::map< std::string, Var > values
#define EVENGINE_API_DOMAINS
Definition Export.h:110
int h
std::uint32_t height
void(* destroy)(void *)
float roughness
Texture * normal
float metallic
std::string error
Definition Package.cpp:60
Represents raw pixel data.
Definition ImageData.h:38
Owning, typed generation parameters.
Definition Params.h:27
EVENGINE_API_DOMAINS public API.
Definition PbrMaterial.h:55
std::vector< ParamSpec > params
std::unique_ptr< PbrTextureSet > generatePbrSet(const TextureRecipeDef &def, const Params &params, std::string &error)
Builds a full PBR set from a texture definition and returns unique ownership.
std::unique_ptr< image::ImageData > grayscaleImage(const std::vector< float > &values, int w, int h)
Builds a grayscale RGBA8 image and returns unique ownership to the caller.
std::function< std::unique_ptr< PbrTextureSet >(const Params &params, std::string &error)> PbrRecipeFn
Recipe returns a newly owned full PBR set, or null on failure.
Definition PbrMaterial.h:52
SettlementPipeline::Stage fn
Full metallic-roughness PBR map set. All maps are caller-owned; call destroy() (or delete each pointe...
Definition PbrMaterial.h:25
image::ImageData * getRoughness() const
Return the generated roughness image.
Definition PbrMaterial.h:40
image::ImageData * getNormal() const
Return the generated normal image.
Definition PbrMaterial.h:38
image::ImageData * getMetallic() const
Return the generated metallic image.
Definition PbrMaterial.h:42
image::ImageData * getAlbedo() const
Return the generated albedo image.
Definition PbrMaterial.h:36
image::ImageData * getAo() const
Return the generated ambient-occlusion image.
Definition PbrMaterial.h:46
image::ImageData * getHeight() const
Return the generated height image.
Definition PbrMaterial.h:44
Complete metadata and parameter schema shared by every procgen recipe family.
Definition ParamSchema.h:52
A procedural texture is fully described by an albedo ramp + a displacement field + PBR knobs....