载入中...
搜索中...
未找到
PbrMaterial.h
浏览该文件的文档.
1#pragma once
2
3#include "procgen/Params.h"
5
6#include <cstdint>
7#include <functional>
8#include <string>
9#include <unordered_map>
10#include <vector>
11
12namespace eve::image {
13class ImageData;
14}
15
16namespace eve::procgen {
17
25 image::ImageData *albedo = nullptr; // RGBA8
26 image::ImageData *normal = nullptr; // RGBA8 tangent-space normal
27 image::ImageData *roughness = nullptr; // RGBA8, grayscale 0=glossy 1=rough
28 image::ImageData *metallic = nullptr; // RGBA8, grayscale 0=dielectric 1=metal
29 image::ImageData *height = nullptr; // RGBA8, grayscale displacement
30 image::ImageData *ao = nullptr; // RGBA8, grayscale ambient occlusion
31
32 void destroy() {
33 delete albedo;
34 delete normal;
35 delete roughness;
36 delete metallic;
37 delete height;
38 delete ao;
39 albedo = normal = roughness = metallic = height = ao = nullptr;
40 }
41};
42
44using PbrRecipeFn = std::function<PbrTextureSet *(const Params &params, std::string &error)>;
45
47public:
49
50 void registerPbrRecipe(const std::string &id, PbrRecipeFn fn);
51 bool has(const std::string &id) const;
52 PbrTextureSet *generate(const std::string &id, const Params &params, std::string &error) const;
53 std::vector<std::string> list() const;
54
56
57private:
58 PbrRecipeRegistry() = default;
59 std::unordered_map<std::string, PbrRecipeFn> recipes_;
60 bool builtinsRegistered_ = false;
61};
62
64PbrTextureSet *generatePbrSet(const TextureRecipeDef &def, const Params &params,
65 std::string &error);
66
68image::ImageData *grayscaleImage(const std::vector<float> &values, int w, int h);
69
70} // namespace eve::procgen
std::map< std::string, Var > values
int h
int w
std::string error
SettlementPipeline::Stage fn
Represents raw pixel data.
Definition ImageData.h:26
Generation parameters. Algorithm-specific keys live in values as strings (no overloads; typed setters...
Definition Params.h:13
static PbrRecipeRegistry & instance()
std::vector< std::string > list() const
PbrTextureSet * generate(const std::string &id, const Params &params, std::string &error) const
void registerPbrRecipe(const std::string &id, PbrRecipeFn fn)
bool has(const std::string &id) const
std::function< PbrTextureSet *(const Params &params, std::string &error)> PbrRecipeFn
Recipe returns a full PBR set (caller owns), or nullptr on failure.
Definition PbrMaterial.h:44
image::ImageData * grayscaleImage(const std::vector< float > &values, int w, int h)
Build a grayscale RGBA8 image from per-pixel values in [0,1]. Caller owns.
PbrTextureSet * generatePbrSet(const TextureRecipeDef &def, const Params &params, std::string &error)
Build a full PBR set from a texture definition. Caller owns the result.
Full metallic-roughness PBR map set. All maps are caller-owned; call destroy() (or delete each pointe...
Definition PbrMaterial.h:24
image::ImageData * normal
Definition PbrMaterial.h:26
image::ImageData * height
Definition PbrMaterial.h:29
image::ImageData * ao
Definition PbrMaterial.h:30
image::ImageData * albedo
Definition PbrMaterial.h:25
image::ImageData * roughness
Definition PbrMaterial.h:27
image::ImageData * metallic
Definition PbrMaterial.h:28
A procedural texture is fully described by an albedo ramp + a displacement field + PBR knobs....