OROCHI
 
Loading...
Searching...
No Matches
GxSysLight.h
Go to the documentation of this file.
1//===========================================================================
9//===========================================================================
10#pragma once
11
12#if defined(_MSC_VER)
13#pragma warning(disable:4263 4264)
14#endif //_MSC_VER
15
16GX_SHADER_NAMESPACE_BEGIN()
18//===========================================================================
20//===========================================================================
22{
23 //-------------------------------------------------------------
25 //-------------------------------------------------------------
27public:
30 {
31 COLOR,
32 NORMAL,
33 POSITION,
34 MAX,
35 };
37 static const GX_CSTR LIGHT_PROBE_TEXTURE_SUFFIX[static_cast<u32>(LIGHT_PROBE_TEXTURE::MAX)];
39 static const u32 LIGHT_PROBE_TEXTURE_RESOLUTION_MAX = GxMath::VALUE_4K;
40
42#if defined(_NX64)
43 static const u32 SPHERICAL_HARMONICS_DIMENSION_MAX = 2;
44#else //_NX64
45 static const u32 SPHERICAL_HARMONICS_DIMENSION_MAX = 3;
46#endif // !_NX64
47private:
49 static const u32 SPHERICAL_HARMONICS_COUNT[SPHERICAL_HARMONICS_DIMENSION_MAX];
50
51public:
52 GX_RTTI_ABSTRACT_CLASS(GxSysLight, GxSysLightBase)
53 // ClassBase継承クラス用禁止宣言
55
56
57 //-------------------------------------------------------------
59 //-------------------------------------------------------------
61
63 GxSysLight(void);
65 ~GxSysLight(void) override {}
67 b32 initialize(const GxClassBase* pInitialInformation = nullptr) override;
69 void terminate(void) override;
70
72 //-------------------------------------------------------------
74 //-------------------------------------------------------------
76
78 void update(void) override;
79
81 //-----------------------------------------------------------
83 //-----------------------------------------------------------
85
86public:
88 GX_FORCE_INLINE u32 getLightList(u32 lightTypeMask, u32 lightGroup, GxUnitLightBase** ppLightList, u32 count) override { return Super::getLightList(lightTypeMask, lightGroup, ppLightList, count); }
90 virtual u32 getLightList(u32 lightTypeMask, u32 lightGroup, const GxVector3& nearestTo, const GxUnitCameraBase* pCamera, b32 onlyShadowEnable, GxUnitLightBase** ppLightList, u32 count, RENDER_VIEW view);
92 virtual u32 getPointLightList(u32 lightGroup, const GxVector3& nearestTo, const GxUnitCameraBase* pCamera, b32 onlyShadowEnable, GxUnitLightPoint** ppPointLightList, u32 count, RENDER_VIEW view);
94 void updateLightListCache(void);
95
97 GX_FORCE_INLINE b32 isEnableGlobalIllumination(void) const { return _enableGlobalIllumination; }
99 GX_FORCE_INLINE void setEnableGlobalIllumination(b32 enable) { _enableGlobalIllumination = enable; }
101 constexpr GxRenderTexture* getTextureProbe(LIGHT_PROBE_TEXTURE type) const { return _pTextureLightProbe[static_cast<u32>(type)]; }
103 constexpr void setTextureProbe(LIGHT_PROBE_TEXTURE type, GxRenderTexture* pTexture) { _pTextureLightProbe[static_cast<u32>(type)] = pTexture; }
105 constexpr u32 getLightProbeResolution(void) const { return _lightProbeResolution; }
107 GX_FORCE_INLINE void setLightProbeResolution(u32 resolution) { _lightProbeResolution = GxMath::getClamp(resolution, GxMath::VALUE_1, GxMath::VALUE_64); }
109 constexpr u32 getLightProbeResolutionDownScale(void) const { return _lightProbeResolutionDownScale; }
111 GX_FORCE_INLINE void setLightProbeResolutionDownScale(u32 resolution) { _lightProbeResolutionDownScale = GxMath::getClamp(resolution, GxMath::VALUE_1, _lightProbeResolution); }
113 GxUnitLightProbe* getLightProbeUnit(const GxVector3& position) const;
115 u32 getLightProbeCount(void) const;
117 constexpr f32 getLightProbePower(void) const { return _enableGlobalIllumination ? _lightProbePower : 0.0f; }
119 GX_FORCE_INLINE void setLightProbePower(f32 power) { _lightProbePower = GxMath::getClamp(power, 0.0f, 1.0f); }
121 constexpr u32 getLightProbeBounce(void) const { return _lightProbeBounce; }
123 GX_FORCE_INLINE void setLightProbeBounce(u32 bounce) { GX_ASSERT(false, "反射回数の変更は未対応"); _lightProbeBounce = GxMath::getClamp(bounce, 1u, 5u); }
125 constexpr u32 getSphericalHarmonicsDimension(void) const { return _sphericalHarmonicsDimension; }
127 GX_FORCE_INLINE void setSphericalHarmonicsDimension(u32 dimension) { _sphericalHarmonicsDimension = GxMath::getClamp(dimension, GxMath::VALUE_2, SPHERICAL_HARMONICS_DIMENSION_MAX); }
129 constexpr u32 getSphericalHarmonicsCount(void) const { return SPHERICAL_HARMONICS_COUNT[_sphericalHarmonicsDimension - 1]; }
131 GX_FORCE_INLINE u32 getSphericalHarmonicsTextureCount(void) const { return GxMath::getRoundUp(SPHERICAL_HARMONICS_COUNT[_sphericalHarmonicsDimension - 1], 4) / 4; }
132private :
134 void clearLightListCache(void);
135
137 //-------------------------------------------------------------
139 //-------------------------------------------------------------
142 struct LightChacheParam
143 {
144 GxUnitLightBase* _pUnit;
146 u32 _group;
147 };
148 LightChacheParam* _pLightListCache;
149 u32 _lightListCacheCount;
150 u32 _lightListMaxCount;
151
152 b32 _enableGlobalIllumination;
153 GxRenderTexture* _pTextureLightProbe[static_cast<u32>(LIGHT_PROBE_TEXTURE::MAX)];
154 u32 _lightProbeResolution;
155 u32 _lightProbeResolutionDownScale;
156 u32 _sphericalHarmonicsDimension;
157 f32 _lightProbePower;
158 u32 _lightProbeBounce;
159
161};
162
163// アクセスインターフェース
164GX_FORCE_INLINE GxSysLight* getGxSysLight(void){ return static_cast<GxSysLight*>(getGxSysLightBase()); }
165
166GX_SHADER_NAMESPACE_END()
167
168#if defined(_MSC_VER)
169#pragma warning(default:4263 4264)
170#endif //_MSC_VER
#define GX_PROHIBIT_CLASS_BASE(__CLASS__)
GxClassBase継承の禁止宣言
Definition GxBase.h:240
@ MAX
定義数
RENDER_VIEW
描画優先度(ビュー)
Definition GxRender.h:442
@ NORMAL
法線(VS入力,VS→PS)
@ POSITION
位置データ(VS入力,VS出力)
@ COLOR
4D パック済み 正規化される u8(GxColor形式)
オブジェクト基底クラス
Definition GxBase.h:88
static GX_FORCE_INLINE T getRoundUp(T value, u32 alignment)
数値切り上げ
Definition GxMath.h:513
static GX_FORCE_INLINE T getClamp(const T value, const T min, const T max)
最小値・最大値で切り落とす
Definition GxMath.h:170
static constexpr u32 VALUE_2
2
Definition GxMath.h:120
static constexpr u32 VALUE_1
1
Definition GxMath.h:119
static constexpr u32 VALUE_4K
4K
Definition GxMath.h:131
static constexpr u32 VALUE_64
64
Definition GxMath.h:125
テクスチャクラス
Definition GxRenderTexture.h:19
ライトシステムクラス
Definition GxSysLightBase.h:19
ライトシステムクラス
Definition GxSysLight.h:22
constexpr void setTextureProbe(LIGHT_PROBE_TEXTURE type, GxRenderTexture *pTexture)
ライトプローブテクスチャを設定
Definition GxSysLight.h:103
~GxSysLight(void) override
デストラクタ
Definition GxSysLight.h:65
constexpr GxRenderTexture * getTextureProbe(LIGHT_PROBE_TEXTURE type) const
ライトプローブテクスチャを取得
Definition GxSysLight.h:101
constexpr u32 getSphericalHarmonicsCount(void) const
球面調和関数の項数を取得
Definition GxSysLight.h:129
GX_FORCE_INLINE void setSphericalHarmonicsDimension(u32 dimension)
球面調和関数の次数を設定
Definition GxSysLight.h:127
constexpr u32 getLightProbeResolutionDownScale(void) const
ライトプローブテクスチャの解像度を取得
Definition GxSysLight.h:109
constexpr u32 getLightProbeBounce(void) const
ライトプローブの反射回数を取得
Definition GxSysLight.h:121
GX_FORCE_INLINE void setLightProbeResolution(u32 resolution)
ライトプローブテクスチャの解像度を設定
Definition GxSysLight.h:107
constexpr u32 getSphericalHarmonicsDimension(void) const
球面調和関数の次数を取得
Definition GxSysLight.h:125
constexpr u32 getLightProbeResolution(void) const
ライトプローブテクスチャの解像度を取得
Definition GxSysLight.h:105
GX_FORCE_INLINE u32 getLightList(u32 lightTypeMask, u32 lightGroup, GxUnitLightBase **ppLightList, u32 count) override
指定個数のライトを取得
Definition GxSysLight.h:88
constexpr f32 getLightProbePower(void) const
ライトプローブの強さを取得
Definition GxSysLight.h:117
GX_FORCE_INLINE u32 getSphericalHarmonicsTextureCount(void) const
球面調和関数のテクスチャ枚数を取得
Definition GxSysLight.h:131
LIGHT_PROBE_TEXTURE
ライトプローブテクスチャ定義
Definition GxSysLight.h:30
GX_FORCE_INLINE b32 isEnableGlobalIllumination(void) const
GIの有効判定
Definition GxSysLight.h:97
GX_FORCE_INLINE void setLightProbePower(f32 power)
ライトプローブの強さを設定
Definition GxSysLight.h:119
GX_FORCE_INLINE void setEnableGlobalIllumination(b32 enable)
GIの有効設定
Definition GxSysLight.h:99
GX_FORCE_INLINE void setLightProbeBounce(u32 bounce)
ライトプローブの反射回数を設定
Definition GxSysLight.h:123
GX_FORCE_INLINE void setLightProbeResolutionDownScale(u32 resolution)
ライトプローブテクスチャの解像度を設定
Definition GxSysLight.h:111
カメラ基礎クラス
Definition GxUnitCameraBase.h:20
ライト基礎クラス
Definition GxUnitLightBase.h:19
TYPE
ライトタイプ
Definition GxUnitLightBase.h:33
ポイントライトクラス
Definition GxUnitLight.h:197
ライトプローブクラス
Definition GxUnitLightProbe.h:18
3次元ベクトル
Definition GxVector.h:245
32bitブーリアン
Definition GxDefine.h:173