gsys: Add ModelSceneConfig

This commit is contained in:
Léo Lam 2022-04-02 22:51:57 +02:00
parent 8e445021ab
commit 55f8bde652
No known key found for this signature in database
GPG Key ID: 0DF30F9081000741
13 changed files with 1136 additions and 58 deletions

View File

@ -40188,7 +40188,7 @@ Address,Quality,Size,Name
0x00000071006726dc,U,000264, 0x00000071006726dc,U,000264,
0x00000071006727e4,U,000164,_ZN4sead6Worker10getNextJQ_Ev 0x00000071006727e4,U,000164,_ZN4sead6Worker10getNextJQ_Ev
0x0000007100672888,U,000260, 0x0000007100672888,U,000260,
0x000000710067298c,U,000372,_ZN4sead15FixedSafeStringILi19EEaSERKNS_14SafeStringBaseIcEE 0x000000710067298c,U,000372,
0x0000007100672b00,U,000028, 0x0000007100672b00,U,000028,
0x0000007100672b1c,U,000028, 0x0000007100672b1c,U,000028,
0x0000007100672b38,U,000040, 0x0000007100672b38,U,000040,
@ -68997,62 +68997,62 @@ Address,Quality,Size,Name
0x0000007100c19b48,U,000004,nullsub_3524 0x0000007100c19b48,U,000004,nullsub_3524
0x0000007100c19b4c,U,000020,_ZN4gsys19ModelSceneComponentC2Ev 0x0000007100c19b4c,U,000020,_ZN4gsys19ModelSceneComponentC2Ev
0x0000007100c19b60,U,000080,_ZN4gsys19ModelSceneComponentD2Ev 0x0000007100c19b60,U,000080,_ZN4gsys19ModelSceneComponentD2Ev
0x0000007100c19bb0,U,000092,_ZThn176_N2nn3atk6detail6driver23AdvancedWaveSoundPlayerD0Ev 0x0000007100c19bb0,U,000092,
0x0000007100c19c0c,U,000008, 0x0000007100c19c0c,U,000008,
0x0000007100c19c14,U,000068,_ZN4gsys19ModelSceneComponent14setUpComponentEiPN4sead4HeapES3_ 0x0000007100c19c14,U,000068,_ZN4gsys19ModelSceneComponent14setUpComponentEiPN4sead4HeapES3_
0x0000007100c19c58,U,000004,nullsub_3525 0x0000007100c19c58,U,000004,nullsub_3525
0x0000007100c19c5c,U,000404, 0x0000007100c19c5c,O,000404,_ZNK4gsys12_GLOBAL__N_111DepthFormat4textEv
0x0000007100c19df0,U,000404, 0x0000007100c19df0,O,000404,_ZNK4gsys12_GLOBAL__N_120DepthShadowMapFormat4textEv
0x0000007100c19f84,U,014120,_ZN4gsys16ModelSceneConfigC2Ev 0x0000007100c19f84,m,014120,_ZN4gsys16ModelSceneConfigC1Ev
0x0000007100c1d6ac,U,000552,_ZN4sead9SafeArrayIN3agl3utl9ParameterIbEELi42EEC2Ev 0x0000007100c1d6ac,O,000552,_ZN4sead9SafeArrayIN3agl3utl9ParameterIbEELi42EEC2Ev
0x0000007100c1d8d4,U,000296, 0x0000007100c1d8d4,O,000296,_ZN4sead9SafeArrayIN4gsys16ModelSceneConfig16DepthShadowParamELi2EEC2Ev
0x0000007100c1d9fc,U,000480,_ZN4sead9SafeArrayIN3agl3utl9ParameterINS_15FixedSafeStringILi64EEEEELi8EEC2Ev 0x0000007100c1d9fc,O,000480,_ZN4sead9SafeArrayIN3agl3utl9ParameterINS_15FixedSafeStringILi64EEEEELi8EEC2Ev
0x0000007100c1dbdc,U,000476,_ZN4sead9SafeArrayIN3agl3utl9ParameterINS_15FixedSafeStringILi32EEEEELi8EEC2Ev 0x0000007100c1dbdc,O,000476,_ZN4sead9SafeArrayIN3agl3utl9ParameterINS_15FixedSafeStringILi32EEEEELi8EEC2Ev
0x0000007100c1ddb8,U,000008, 0x0000007100c1ddb8,O,000008,_ZNK4gsys16ModelSceneConfig31getStaticDepthShadowDepthFormatEv
0x0000007100c1ddc0,U,000008, 0x0000007100c1ddc0,O,000008,_ZNK4gsys16ModelSceneConfig40getStaticDepthShadowDepthShadowMapFormatEv
0x0000007100c1ddc8,U,000032,_ZNK3eui6Screen8isClosedEv 0x0000007100c1ddc8,O,000032,_ZN4gsys16ModelSceneConfig8preRead_Ev
0x0000007100c1dde8,U,000032, 0x0000007100c1dde8,O,000032,_ZThn8_N4gsys16ModelSceneConfig8preRead_Ev
0x0000007100c1de08,U,000568,_ZNK4gsys16ModelSceneConfig9preWrite_Ev 0x0000007100c1de08,O,000568,_ZNK4gsys16ModelSceneConfig9preWrite_Ev
0x0000007100c1e040,U,000028, 0x0000007100c1e040,O,000028,_ZThn8_NK4gsys16ModelSceneConfig9preWrite_Ev
0x0000007100c1e05c,U,001504,_ZN4gsys16ModelSceneConfig9postRead_Ev 0x0000007100c1e05c,O,001504,_ZN4gsys16ModelSceneConfig9postRead_Ev
0x0000007100c1e63c,U,000008, 0x0000007100c1e63c,O,000008,_ZThn8_N4gsys16ModelSceneConfig9postRead_Ev
0x0000007100c1e644,U,000040,_ZNK4gsys16ModelSceneConfig21getEnvObjSetTemplate_Ei 0x0000007100c1e644,O,000040,_ZNK4gsys16ModelSceneConfig21getEnvObjSetTemplate_Ei
0x0000007100c1e66c,U,001168,_ZN3agl3env6EnvObjC2Ev 0x0000007100c1e66c,O,001168,_ZN4gsys16ModelSceneConfig17EnvObjSetTemplateC1Ev
0x0000007100c1eafc,U,001520,_ZN4gsys20ModelSceneConfigListC2Ev 0x0000007100c1eafc,O,001520,_ZN4gsys20ModelSceneConfigListC1Ev
0x0000007100c1f0ec,U,000500,_ZN4sead9SafeArrayIN4gsys16ModelSceneConfigELi32EEC2Ev 0x0000007100c1f0ec,O,000500,_ZN4sead9SafeArrayIN4gsys16ModelSceneConfigELi32EEC2Ev
0x0000007100c1f2e0,U,000076,_ZN4gsys20ModelSceneConfigList12applyResouceEPKv 0x0000007100c1f2e0,O,000076,_ZN4gsys20ModelSceneConfigList12applyResouceEPKv
0x0000007100c1f32c,U,000492,_ZN4gsys20ModelSceneConfigList5setupERKN4sead14SafeStringBaseIcEE 0x0000007100c1f32c,O,000492,_ZN4gsys20ModelSceneConfigList5setupERKN4sead14SafeStringBaseIcEE
0x0000007100c1f518,U,000560,_ZN4gsys20ModelSceneConfigList6reloadERKN4sead14SafeStringBaseIcEE 0x0000007100c1f518,O,000560,_ZN4gsys20ModelSceneConfigList6reloadERKN4sead14SafeStringBaseIcEE
0x0000007100c1f748,U,000096,_ZNK4gsys20ModelSceneConfigList9preWrite_Ev 0x0000007100c1f748,O,000096,_ZNK4gsys20ModelSceneConfigList9preWrite_Ev
0x0000007100c1f7a8,U,000088, 0x0000007100c1f7a8,O,000088,_ZThn8_NK4gsys20ModelSceneConfigList9preWrite_Ev
0x0000007100c1f800,U,000112,_ZN4gsys20ModelSceneConfigList8preRead_Ev 0x0000007100c1f800,O,000112,_ZN4gsys20ModelSceneConfigList8preRead_Ev
0x0000007100c1f870,U,000112, 0x0000007100c1f870,O,000112,_ZThn8_N4gsys20ModelSceneConfigList8preRead_Ev
0x0000007100c1f8e0,U,000460,_ZN4gsys20ModelSceneConfigList9postRead_Ev 0x0000007100c1f8e0,M,000460,_ZN4gsys20ModelSceneConfigList9postRead_Ev
0x0000007100c1faac,U,000008, 0x0000007100c1faac,O,000008,_ZThn8_N4gsys20ModelSceneConfigList9postRead_Ev
0x0000007100c1fab4,U,000016, 0x0000007100c1fab4,O,000016,_ZN4gsys20ModelSceneConfigList21EnvObjSetTemplateList8preRead_Ev
0x0000007100c1fac4,U,001012, 0x0000007100c1fac4,O,001012,_ZN4gsys16ModelSceneConfigD2Ev
0x0000007100c1feb8,U,000036, 0x0000007100c1feb8,O,000036,_ZN4gsys16ModelSceneConfigD0Ev
0x0000007100c1fedc,U,000008, 0x0000007100c1fedc,O,000008,_ZThn8_N4gsys16ModelSceneConfigD1Ev
0x0000007100c1fee4,U,000040, 0x0000007100c1fee4,O,000040,_ZThn8_N4gsys16ModelSceneConfigD0Ev
0x0000007100c1ff0c,U,000004,j__ZdlPv_772 0x0000007100c1ff0c,O,000004,_ZN4gsys20ModelSceneConfigList21EnvObjSetTemplateListD0Ev
0x0000007100c1ff10,U,001352, 0x0000007100c1ff10,O,001352,_ZN4gsys20ModelSceneConfigListD2Ev
0x0000007100c20458,U,000036, 0x0000007100c20458,O,000036,_ZN4gsys20ModelSceneConfigListD0Ev
0x0000007100c2047c,U,000008, 0x0000007100c2047c,O,000008,_ZThn8_N4gsys20ModelSceneConfigListD1Ev
0x0000007100c20484,U,000040, 0x0000007100c20484,O,000040,_ZThn8_N4gsys20ModelSceneConfigListD0Ev
0x0000007100c204ac,U,000064, 0x0000007100c204ac,O,000064,_ZN4gsys16ModelSceneConfig17EnvObjSetTemplateD2Ev
0x0000007100c204ec,U,000004,j__ZdlPv_773 0x0000007100c204ec,O,000004,_ZN4gsys16ModelSceneConfig17EnvObjSetTemplateD0Ev
0x0000007100c204f0,U,000172, 0x0000007100c204f0,O,000172,_ZN4gsys12_GLOBAL__N_111DepthFormat9getArray_Ev
0x0000007100c2059c,U,000004,j__ZdlPv_774 0x0000007100c2059c,O,000004,_ZN4sead15FixedSafeStringILi19EED0Ev
0x0000007100c205a0,U,000240,_ZN4sead15FixedSafeStringILi27EEaSERKNS_14SafeStringBaseIcEE 0x0000007100c205a0,O,000240,_ZN4sead15FixedSafeStringILi19EEaSERKNS_14SafeStringBaseIcEE
0x0000007100c20690,U,000004,j__ZdlPv_775 0x0000007100c20690,O,000004,_ZN4sead19FixedSafeStringBaseIcLi19EED0Ev
0x0000007100c20694,U,000240,_ZN4sead19FixedSafeStringBaseIcLi27EEaSERKNS_14SafeStringBaseIcEE 0x0000007100c20694,O,000240,_ZN4sead19FixedSafeStringBaseIcLi19EEaSERKNS_14SafeStringBaseIcEE
0x0000007100c20784,U,000168, 0x0000007100c20784,O,000168,_ZN4gsys12_GLOBAL__N_120DepthShadowMapFormat9getArray_Ev
0x0000007100c2082c,U,000004,j__ZdlPv_776 0x0000007100c2082c,O,000004,_ZN4sead15FixedSafeStringILi57EED0Ev
0x0000007100c20830,U,000240,_ZN4sead15FixedSafeStringILi50EEaSERKNS_14SafeStringBaseIcEE 0x0000007100c20830,O,000240,_ZN4sead15FixedSafeStringILi57EEaSERKNS_14SafeStringBaseIcEE
0x0000007100c20920,U,000004,j__ZdlPv_777 0x0000007100c20920,O,000004,_ZN4sead19FixedSafeStringBaseIcLi57EED0Ev
0x0000007100c20924,U,000240,_ZN4sead19FixedSafeStringBaseIcLi50EEaSERKNS_14SafeStringBaseIcEE 0x0000007100c20924,O,000240,_ZN4sead19FixedSafeStringBaseIcLi57EEaSERKNS_14SafeStringBaseIcEE
0x0000007100c20a14,U,000504,_ZN4sead9SafeArrayIN4gsys16ModelSceneConfigELi32EED2Ev 0x0000007100c20a14,O,000504,_ZN4sead9SafeArrayIN4gsys16ModelSceneConfigELi32EED2Ev
0x0000007100c20c0c,U,000696, 0x0000007100c20c0c,O,000696,_GLOBAL__sub_I_gsysModelSceneConfig.cpp
0x0000007100c20ec4,U,000120,_ZN4gsys17ModelSceneContextC2Ev 0x0000007100c20ec4,U,000120,_ZN4gsys17ModelSceneContextC2Ev
0x0000007100c20f3c,U,000096, 0x0000007100c20f3c,U,000096,
0x0000007100c20f9c,U,000104, 0x0000007100c20f9c,U,000104,
@ -86267,9 +86267,9 @@ Address,Quality,Size,Name
0x000000710101c90c,O,000412,_ZN4ksys3snd25EnvPaletteReactiveBgmInfo25EnvPaletteReactiveBgmEnum5text_Ei 0x000000710101c90c,O,000412,_ZN4ksys3snd25EnvPaletteReactiveBgmInfo25EnvPaletteReactiveBgmEnum5text_Ei
0x000000710101caa8,U,000428, 0x000000710101caa8,U,000428,
0x000000710101cc54,U,000004,j__ZdlPv_1094 0x000000710101cc54,U,000004,j__ZdlPv_1094
0x000000710101cc58,U,000240,_ZN4sead19FixedSafeStringBaseIcLi113EEaSERKNS_14SafeStringBaseIcEE 0x000000710101cc58,U,000240,
0x000000710101cd48,U,000004,j__ZdlPv_1095 0x000000710101cd48,U,000004,j__ZdlPv_1095
0x000000710101cd4c,U,000240,_ZN4sead19FixedSafeStringBaseIcLi19EEaSERKNS_14SafeStringBaseIcEE 0x000000710101cd4c,U,000240,
0x000000710101ce3c,U,000032, 0x000000710101ce3c,U,000032,
0x000000710101ce5c,U,000176, 0x000000710101ce5c,U,000176,
0x000000710101cf0c,U,000072, 0x000000710101cf0c,U,000072,

Can't render this file because it is too large.

@ -1 +1 @@
Subproject commit eb11f3af9f3a39f4e515ec53f122a11527083c1b Subproject commit 0f55dfbaa9fcaf53e769cfc2cfc6e94187793e75

View File

@ -1,14 +1,22 @@
project(gsys CXX ASM) project(gsys CXX ASM)
add_library(gsys OBJECT add_library(gsys OBJECT
include/gsys/gsysMaskedProjLight.h
include/gsys/gsysMaskedProjLight.h
include/gsys/gsysMaskedSpotLight.h
include/gsys/gsysModel.h include/gsys/gsysModel.h
include/gsys/gsysModelAccessKey.h include/gsys/gsysModelAccessKey.h
include/gsys/gsysModelNW.h include/gsys/gsysModelNW.h
include/gsys/gsysModelSceneConfig.h
include/gsys/gsysModelUnit.h include/gsys/gsysModelUnit.h
include/gsys/gsysOfxLensFlareRig.h
include/gsys/gsysORUtil.h include/gsys/gsysORUtil.h
include/gsys/gsysParticleConfig.h include/gsys/gsysParticleConfig.h
include/gsys/gsysPointLight.h
include/gsys/gsysSpotLight.h
src/gsys/gsysModelAccessKey.cpp src/gsys/gsysModelAccessKey.cpp
src/gsys/gsysModelSceneConfig.cpp
src/gsys/gsysParticleConfig.cpp src/gsys/gsysParticleConfig.cpp
) )

View File

@ -0,0 +1,22 @@
#pragma once
#include <agl/env/aglEnvObj.h>
namespace gsys {
class MaskedSpotLight;
class PointLight;
class SpotLight;
// TODO
template <typename T>
class LightRigObj {
public:
static const agl::env::TypeInfo* sTypeInfo;
};
extern template class LightRigObj<MaskedSpotLight>;
extern template class LightRigObj<PointLight>;
extern template class LightRigObj<SpotLight>;
} // namespace gsys

View File

@ -0,0 +1,19 @@
#pragma once
#include <agl/env/aglEnvObj.h>
namespace gsys {
// TODO
class MaskedProjLight {
public:
static const agl::env::TypeInfo* sTypeInfo;
};
// TODO
class MaskedProjLightRig {
public:
static const agl::env::TypeInfo* sTypeInfo;
};
} // namespace gsys

View File

@ -0,0 +1,19 @@
#pragma once
#include <agl/env/aglEnvObj.h>
namespace gsys {
// TODO
class MaskedSpotLight {
public:
static const agl::env::TypeInfo* sTypeInfo;
};
// TODO
class MaskedSpotLightRig {
public:
static const agl::env::TypeInfo* sTypeInfo;
};
} // namespace gsys

View File

@ -0,0 +1,287 @@
#pragma once
#include <agl/env/aglEnvObjBuffer.h>
#include <agl/env/aglEnvObjMgr.h>
#include <agl/env/aglEnvObjSetMgr.h>
#include <agl/utl/aglParameter.h>
#include <agl/utl/aglParameterIO.h>
#include <agl/utl/aglParameterObj.h>
#include <basis/seadTypes.h>
#include <container/seadSafeArray.h>
#include <hostio/seadHostIONode.h>
#include <math/seadVector.h>
#include <prim/seadSafeString.h>
namespace gsys {
class ModelSceneConfigList;
class ModelSceneConfig : public sead::hostio::Node, public agl::utl::IParameterObj {
public:
static constexpr int NumFeatures = 42;
struct FeatureDescription {
const char* description;
const char* parameter_name;
bool _10;
bool _11;
bool should_create_by_default;
const char* jp_description;
};
enum class Feature {
LightMap = 0,
LightProbe = 1,
SnapShot = 2,
DepthShadow = 3,
MaskedLight = 4,
StaticDepthShadow = 5,
EnvCubeMap = 6,
Reflection = 7,
LocalReflection = 8,
ZPrePass = 9,
LightPrePass = 10,
ShadowPrePass = 11,
Decal = 12,
NormalDrawer = 13,
SSAO = 14,
SSII = 15,
SSSSS = 16,
OcclusionQeuery = 17,
DeferredShading = 18,
OpaqueAlphaMask = 19,
OutlineSilhouette = 20,
DepthSilhouette = 21,
XluSeal = 22,
Cloud = 23,
VolumeMask = 24,
XluWater = 25,
Xlu = 26,
XluIndirect = 27,
XluFx = 28,
ReducedBuffer = 29,
ShadowMask = 30,
RadialBlur = 31,
DOF = 32,
XluZPrePass = 33,
Bloom = 34,
GlareFilter = 35,
FlareFilter = 36,
OccludedEffect = 37,
AutoExposure = 38,
HDR = 39,
ColorCorrection = 40,
FilterAA = 41,
};
struct DepthShadowParam {
agl::utl::Parameter<bool> use_uniform_mtx;
agl::utl::Parameter<int> cascade_num;
sead::SafeArray<agl::utl::Parameter<float>, 4> near;
agl::utl::Parameter<float> far;
agl::utl::Parameter<float> offset_near;
agl::utl::Parameter<float> offset_far;
};
struct EnvObjSetTemplate : agl::utl::IParameterObj {
EnvObjSetTemplate();
agl::utl::Parameter<bool> enable;
agl::utl::Parameter<int> num;
agl::utl::Parameter<int> ambient_light_num;
agl::utl::Parameter<int> directional_light_num;
agl::utl::Parameter<int> hemisphere_light_num;
agl::utl::Parameter<int> fog_num;
agl::utl::Parameter<int> light_map_obj_num;
agl::utl::Parameter<sead::FixedSafeString<32>> template_name;
};
ModelSceneConfig();
int getStaticDepthShadowDepthFormat() const;
int getStaticDepthShadowDepthShadowMapFormat() const;
EnvObjSetTemplate& getEnvObjSetTemplate_(int index) const;
bool preRead_() override;
void postRead_() override;
bool preWrite_() const override;
static constexpr int cConfig_Max = 32;
private:
friend class ModelSceneConfigList;
agl::utl::IParameterObj _c0;
agl::env::EnvObjMgr::InitArg mEnvObjMgrInitArg;
agl::env::EnvObjBuffer::AllocateArg mEnvObjBufferAllocateArg;
sead::SafeArray<agl::utl::Parameter<bool>, NumFeatures> mEnabledFeatures;
sead::SafeArray<agl::utl::Parameter<bool>, NumFeatures> mShouldCreateFeatures;
agl::env::EnvObjSetMgr::InitArg mEnvObjSetMgrInitArg;
const sead::FixedSafeString<32>* mConfigName{};
ModelSceneConfigList* mpConfigList{};
bool _1798 = false;
bool _1799 = false;
sead::FixedSafeString<64> _17A0;
int mIndex1 = -1;
int mIndex2 = -1;
int mStaticSdwDepthFormat;
int mStaticSdwShadowMapFormat;
agl::utl::Parameter<float> mOpaPolygonOffset;
agl::utl::Parameter<float> mOpaPolygonScale;
agl::utl::Parameter<float> mXluPolygonOffset;
agl::utl::Parameter<float> mXluPolygonScale;
agl::utl::Parameter<float> mRevPolygonOffset;
agl::utl::Parameter<float> mRevPolygonScale;
agl::utl::Parameter<bool> mLinearLightingEnable;
agl::utl::Parameter<bool> mHizExpandEnable;
agl::utl::Parameter<bool> mNldEnable;
agl::utl::Parameter<bool> mNld32Bit;
agl::utl::Parameter<bool> mNldHalf32Bit;
agl::utl::Parameter<bool> mDepthReduce;
agl::utl::Parameter<bool> mZPrePassSelectable;
agl::utl::Parameter<bool> mDepthClear;
agl::utl::Parameter<bool> mGBufferAlbedoSrgb;
agl::utl::Parameter<bool> mIndirectBufferLDR;
agl::utl::Parameter<bool> mReducedBuffer16Bit;
agl::utl::Parameter<bool> mReducedBufferEdgeAdjustBake;
#ifdef UKING_NX_V150
agl::utl::Parameter<bool> mReducedBufferBlurAdjustBake;
#endif
agl::utl::Parameter<bool> mReducedBufferEdgeAdjust;
agl::utl::Parameter<float> mReducedBufferEdgeAdjustCoeff;
agl::utl::Parameter<bool> mGBufferAlbedoReduceNearest;
agl::utl::Parameter<bool> mGBufferNormal8Bit;
agl::utl::Parameter<bool> mGBufferNormalDisableReduce;
agl::utl::Parameter<bool> mGBufferNormalReduceNearest;
agl::utl::Parameter<bool> mGBufferNormalZSignW;
agl::utl::Parameter<bool> mGBufferDepth;
agl::utl::Parameter<int> mGBufferMaterialIdFormat;
agl::utl::Parameter<int> mBaseResoWidth;
agl::utl::Parameter<int> mBaseResoHeight;
agl::utl::Parameter<bool> mGpuStressAnalyzerEnable;
agl::utl::Parameter<bool> mEnableDrcFilterAa;
agl::utl::Parameter<bool> mInitFilterAaSmaaResTextures;
agl::utl::Parameter<bool> mGpuStressAnalyzerReduceBufferenable;
sead::SafeArray<agl::utl::Parameter<int>, 3> mLmMax;
agl::utl::Parameter<int> mLightMapSizeSphere;
agl::utl::Parameter<int> mLightMapCube;
agl::utl::Parameter<int> mLightMapAmbientLight;
agl::utl::Parameter<int> mLightMapHemiSphereLight;
agl::utl::Parameter<int> mLightMapDirectionalLight;
sead::SafeArray<agl::utl::Parameter<int>, 2> mCubeMapMaxTex;
agl::utl::Parameter<bool> mLightPrepassTextureHalf;
agl::utl::Parameter<bool> mUseDecalAo;
agl::utl::Parameter<int> mDecalAoObjectMax;
agl::utl::Parameter<int> mDecalAoTextureMax;
agl::utl::Parameter<int> mDecalAoTextureWidth;
agl::utl::Parameter<int> mDecalAoTextureHeight;
agl::utl::Parameter<int> mDecalAoTextureCannelNum;
agl::utl::Parameter<bool> mUseDecalBuffer;
agl::utl::Parameter<bool> mUseDecalTrail;
agl::utl::Parameter<int> mStaticSdwWidth;
mutable agl::utl::Parameter<sead::FixedSafeString<32>> mStaticSdwDepthFormatName;
mutable agl::utl::Parameter<sead::FixedSafeString<32>> mStaticSdwShadowMapFormatName;
agl::utl::Parameter<bool> mMaskedLightShadowOnly;
agl::utl::Parameter<int> mDepthShadowClipPlaneEnable;
agl::utl::Parameter<int> mDepthShadowExClipPlaneNum;
sead::SafeArray<agl::utl::Parameter<sead::Vector4f>, 4> mDepthShadowClipPlanes;
agl::utl::Parameter<float> mDepthShadowPcfOffset;
agl::utl::Parameter<int> mDepthShadowTexWidth;
agl::utl::Parameter<int> mDepthShadowTexHeight;
agl::utl::Parameter<bool> mDepthShadowEnableBbClip;
agl::utl::Parameter<bool> mDepthShadowCheckOnly;
agl::utl::Parameter<bool> mDepthShadowMatrixViewCoordinate;
agl::utl::Parameter<bool> mDepthShadowEnableHiZ;
agl::utl::Parameter<bool> mDepthShadowForceArray;
agl::utl::Parameter<bool> mBloomCorrectDepth;
agl::utl::Parameter<float> mDepthShadowNearFarMargin;
agl::utl::Parameter<float> mDepthShadowPolygonOffset;
agl::utl::Parameter<float> mDepthShadowPolygonScale;
sead::SafeArray<agl::utl::Parameter<float>, 4> mDepthShadowRefValueThresholds;
agl::utl::Parameter<bool> mDepthShadowReleaseGbuffer;
sead::SafeArray<DepthShadowParam, 2> mDepthShadowParams;
agl::utl::Parameter<int> mProjectionShadowNum;
agl::utl::Parameter<bool> mProjShadowMatrixViewCoordinate;
agl::utl::Parameter<float> mSsaoWidthScale;
agl::utl::Parameter<bool> mSsaoIsDepthFull;
agl::utl::Parameter<int> mModelSceneEnvDataSetNum;
agl::utl::Parameter<bool> mCubemapArray;
agl::utl::Parameter<float> mCubemapDynamicRange;
agl::utl::Parameter<float> mCubemapHdrComposePower;
agl::utl::Parameter<u32> mCubemapMaxModelUnitNum;
agl::utl::Parameter<u32> mCubemapMaxShapeNum;
agl::utl::Parameter<bool> mCubemapDisableEncode;
agl::utl::Parameter<int> mModelNum;
agl::utl::Parameter<int> mModelUnitNum;
agl::utl::Parameter<int> mShapeNum;
agl::utl::Parameter<int> mOcclusionQueryNum;
agl::utl::Parameter<int> mEnvObjPointLightNum;
agl::utl::Parameter<int> mEnvObjPointLightRigNum;
agl::utl::Parameter<int> mEnvObjSpotLightNum;
agl::utl::Parameter<int> mEnvObjSpotLightRigNum;
agl::utl::Parameter<int> mEnvObjMaskedSpotLightNum;
agl::utl::Parameter<int> mEnvObjMaskedSpotLightRigNum;
agl::utl::Parameter<int> mEnvObjMaskedProjLightNum;
agl::utl::Parameter<int> mOfxNumLensFlare;
agl::utl::Parameter<int> mOfxNumLensFlarePreset;
agl::utl::Parameter<int> mOfxNumLensFlareDynamic;
agl::utl::Parameter<int> mOfxNumLensFlareDynamicPreset;
agl::utl::Parameter<int> mOfxNumLensFlareRig;
agl::utl::Parameter<int> mOfxNumLensFlareRigObj;
agl::utl::Parameter<int> mOfxNumLensFlareRigPreset;
agl::utl::Parameter<int> mOfxNumLargeLensFlareRig;
agl::utl::Parameter<int> mOfxNumLargeLensFlareRigObj;
agl::utl::Parameter<int> mOfxNumLargeLensFlareRigPreset;
sead::SafeArray<agl::utl::Parameter<sead::FixedSafeString<64>>, 8> mDeferredShadingModels;
agl::utl::Parameter<sead::FixedSafeString<64>> mSceneMaterialModel;
sead::SafeArray<agl::utl::Parameter<sead::FixedSafeString<32>>, 8> mUserVisualizeClrNames;
sead::SafeArray<agl::utl::Parameter<sead::FixedSafeString<32>>, 8> mUserVisualizeTexNames;
};
class ModelSceneConfigList : public sead::hostio::Node, public agl::utl::IParameterIO {
public:
struct EnvObjSetTemplateList : agl::utl::IParameterList {
EnvObjSetTemplateList();
bool preRead_() override;
bool unk = false;
};
ModelSceneConfigList();
// sic
void applyResouce(const void* resource);
const ModelSceneConfig& setup(const sead::SafeString& config_name);
void reload(const sead::SafeString& config_name);
void copyPassConfig(const sead::SafeString& config_name_1,
const sead::SafeString& config_name_2);
void copyPassConfig(int config_idx_1, int config_idx_2);
protected:
bool preRead_() override;
void postRead_() override;
bool preWrite_() const override;
private:
friend class ModelSceneConfig;
ModelSceneConfig& addNewConfig_(const sead::SafeString& config_name);
void deleteConfig_(ModelSceneConfig* config);
agl::utl::IParameterObj mNameArrayObj;
EnvObjSetTemplateList mEnvObjSetTemplateList;
sead::SafeArray<ModelSceneConfig, ModelSceneConfig::cConfig_Max> mConfigs;
sead::SafeArray<agl::utl::Parameter<sead::FixedSafeString<32>>, ModelSceneConfig::cConfig_Max>
mConfigNames;
sead::SafeArray<ModelSceneConfig::EnvObjSetTemplate, 8> mEnvObjSetTemplates;
int mCurrentConfigIndex = -1;
bool _821e4 = true;
const void* mResource = nullptr;
};
} // namespace gsys

View File

@ -14,6 +14,16 @@ enum class Icon {
_b = 0xB, _b = 0xB,
}; };
enum class Category {
_0 = 0,
};
enum class Attribute {
_2 = 2,
};
void setNodeMeta(sead::hostio::Node* node, Category category, sead::Heap* heap);
void setNodeMeta(sead::hostio::Node* node, Category category, Attribute attr, sead::Heap* heap);
void setNodeMetaIcon(sead::hostio::Node* node, Icon icon, sead::Heap* heap); void setNodeMetaIcon(sead::hostio::Node* node, Icon icon, sead::Heap* heap);
} // namespace gsys::ORUtil } // namespace gsys::ORUtil

View File

@ -0,0 +1,43 @@
#pragma once
#include <agl/env/aglEnvObj.h>
namespace gsys {
// TODO
class OfxLensFlareImpl {
public:
// TODO
class Preset {
public:
static const agl::env::TypeInfo* sTypeInfo;
};
static const agl::env::TypeInfo* sTypeInfo;
};
// TODO
class OfxLensFlareRig {
public:
static const agl::env::TypeInfo* sTypeInfo;
};
// TODO
class OfxLargeLensFlareImpl {
public:
// TODO
class Preset {
public:
static const agl::env::TypeInfo* sTypeInfo;
};
static const agl::env::TypeInfo* sTypeInfo;
};
// TODO
class OfxLargeLensFlareRig {
public:
static const agl::env::TypeInfo* sTypeInfo;
};
} // namespace gsys

View File

@ -0,0 +1,16 @@
#pragma once
#include <agl/env/aglEnvObj.h>
namespace gsys {
// TODO
class PointLight {};
// TODO
class PointLightRig {
public:
static const agl::env::TypeInfo* sTypeInfo;
};
} // namespace gsys

View File

@ -0,0 +1,16 @@
#pragma once
#include <agl/env/aglEnvObj.h>
namespace gsys {
// TODO
class SpotLight {};
// TODO
class SpotLightRig {
public:
static const agl::env::TypeInfo* sTypeInfo;
};
} // namespace gsys

View File

@ -0,0 +1,638 @@
#include "gsys/gsysModelSceneConfig.h"
#include <agl/detail/aglPrivateResource.h>
#include <agl/env/aglFog.h>
#include <agl/env/aglLight.h>
#include <agl/env/aglProjector.h>
#include <agl/pfx/aglBloom.h>
#include <agl/pfx/aglDepthOfField.h>
#include <basis/seadRawPrint.h>
#include <prim/seadEnum.h>
#include "agl/fx/aglFxOfxLensFlare.h"
#include "gsys/gsysLightRigObj.h"
#include "gsys/gsysMaskedProjLight.h"
#include "gsys/gsysMaskedSpotLight.h"
#include "gsys/gsysORUtil.h"
#include "gsys/gsysOfxLensFlareRig.h"
#include "gsys/gsysPointLight.h"
#include "gsys/gsysSpotLight.h"
namespace gsys {
namespace {
SEAD_ENUM_EX(DepthFormat, Depth_32, Depth_16)
SEAD_ENUM_EX_VALUES(DepthFormat, 60, 59)
SEAD_ENUM_EX(DepthShadowMapFormat, R32_G32_float, R16_G16_float, R16_G16_uNorm, R8_G8_uNorm)
SEAD_ENUM_EX_VALUES(DepthShadowMapFormat, 38, 25, 21, 10)
} // namespace
static sead::FixedSafeString<32> sDepthFormat32Str{DepthFormat(60).text()};
static sead::FixedSafeString<32> sDepthShadowMapFormat_R32_G32_float_Str{
DepthShadowMapFormat(38).text()};
static const ModelSceneConfig::FeatureDescription sModelSceneFeatures[] = {
{"LightMap", "light_map", false, false, true, "環境マップにライトを合成"},
{"LightProbe", "light_probe", false, false, false, "静的なライトプローブ"},
{"SnapShot", "snap_shot", false, false, false, "モデルのスナップショットを作成"},
{"DepthShadow", "depth_shadow", false, false, false, "動的デプスシャドウ"},
{"MaskedLight", "masked_light", false, false, false, "シャドウによってマスクされるライト"},
{"StaticDepthShadow", "static_depth_shadow", false, false, false, "静的デプスシャドウ"},
{"EnvCubeMap", "env_cube_map", false, false, true, "環境キューブマップ"},
{"Reflection", "reflection", false, false, false, "平面的な反射"},
{"LocalReflection", "local_reflection", false, false, false, "ローカルリフレクション"},
{"Z-PrePass", "z_pre_pass", true, false, true, "Z値だけをを先に埋める"},
{"Light-PrePass", "light_pre_pass", false, false, false,
"Deferred Lighting用のライトバッファ生成"},
{"ShadowPrePass", "shadow_pre_pass", false, false, false,
"Deferred Shadowing用のシャドウバッファ生成"},
{"Decal", "decal", false, false, false, "デカール"},
{"NormalDrawer", "normal_drawer", false, false, false, "法線をモディファイしたり"},
{"SSAO", "ssocclusion", false, false, false, "スクリーンスペースのアンビエントオクルージョン"},
{"SSII", "ssii", false, false, false, "スクリーンスペースの間接光"},
{"SSSSS", "sssss", false, false, false, "スクリーンスペースのサブサーフェススキャッタリング"},
{"OcclusionQeuery", "occlusion_query", false, false, false, "遮蔽されているモデルをカリング"},
{"DeferredShading", "deferred_opa_alphamask", false, false, false,
"【モデル】不透明と抜き(デファード)"},
{"Opaque + AlphaMask", "opa_alphamask", true, true, true, "【モデル】不透明と抜き"},
{"OutlineSilhouette", "outline_silhouette", false, false, false,
"【モデル】輪郭に沿ってアウトラインを描画"},
{"DepthSilhouette", "depth_silhouette", true, true, true,
"【モデル】遮蔽されたときのシルエット表示"},
{"Xlu(Seal)", "xlu_seal", true, true, true, "【モデル】半透明(シールポリゴン)"},
{"Cloud", "cloud", false, false, false, "プロシージャル雲"},
{"VolumeMask", "volume_mask", false, false, false, "空間マスク"},
{"Xlu(Water)", "xlu_water", true, true, true, "【モデル】半透明(水)"},
{"Xlu", "xlu", true, true, true, "【モデル】半透明"},
{"Xlu(Indirect)", "xlu_indirect", true, true, true, "【モデル】半透明(インダイレクト)"},
{"Xlu(Fx)", "xlu_fx", true, true, true, "【モデル】半透明(特殊効果)"},
{"ReducedBuffer", "reduced_buffer", true, true, true, "縮小バッファ"},
{"ShadowMask", "shadow_mask", false, false, false,
"画面の見せたい部分を残して他の部分を黒く覆ってくれる"},
{"RadialBlur", "radial_blur", false, false, false, "空間に放射状のブラーエフェクトをおける"},
{"DOF", "dof", false, false, true, "被写界深度"},
{"Xlu Z-PrePass", "xlu_z_pre_pass", false, false, true, "【モデル】半透明Zプリパス"},
{"Bloom", "bloom", false, false, true, "ブルーム効果"},
{"GlareFilter", "glare_filter", false, false, false, "グレアフィルタ"},
{"FlareFilter", "flare_filter", false, false, false,
"フレアフィルタ(スクリーンスペースのレンズフレア)"},
{"OccludedEffect", "occluded_effect", false, false, false, "遮蔽率をいい感じに使うエフェクト"},
{"AutoExposure", "auto_exposure", false, false, false, "自動露出"},
{"HDR", "hdr", false, false, true, "HDR解決(トーンマップ + sRGB変換)"},
{"ColorCorrection", "color_correction", false, false, true, "カラーコレクション"},
{"FilterAA", "filter_aa", false, false, true, "エイリアシングを除去"},
};
// NON_MATCHING: various issues, notably iterator stuff(?) for mDeferredShadingModels
ModelSceneConfig::ModelSceneConfig() {
mEnvObjMgrInitArg.setContainMax(agl::env::AmbientLight::sTypeInfo->id, 5);
mEnvObjMgrInitArg.setContainMax(agl::env::HemisphereLight::sTypeInfo->id, 10);
mEnvObjMgrInitArg.setContainMax(agl::env::DirectionalLight::sTypeInfo->id, 30);
mEnvObjMgrInitArg.setContainMax(agl::env::Projector::sTypeInfo->id, 10);
mEnvObjMgrInitArg.setContainMax(agl::env::Fog::sTypeInfo->id, 10);
mEnvObjMgrInitArg.setContainMax(agl::pfx::BloomObj::sTypeInfo->id, 10);
mEnvObjMgrInitArg.setContainMax(agl::pfx::DepthOfFieldObj::sTypeInfo->id, 10);
mEnvObjMgrInitArg.setContainMax(MaskedSpotLight::sTypeInfo->id, 13);
mEnvObjBufferAllocateArg.setContainMax(agl::env::AmbientLight::sTypeInfo->id, 1);
mEnvObjBufferAllocateArg.setContainMax(agl::env::HemisphereLight::sTypeInfo->id, 1);
mEnvObjBufferAllocateArg.setContainMax(agl::env::DirectionalLight::sTypeInfo->id, 4);
for (int i = 0; i < NumFeatures; ++i) {
const FeatureDescription& info = sModelSceneFeatures[i];
if (info._11)
mEnabledFeatures[i].init(true, info.parameter_name, info.description, &_c0);
else if (!info._10)
mEnabledFeatures[i].init(false, info.parameter_name, info.description, &_c0);
else
mEnabledFeatures[i].init(false, info.parameter_name, info.description, this);
if (info._10) {
*mShouldCreateFeatures[i] = true;
} else {
mShouldCreateFeatures[i].init(
info.should_create_by_default,
sead::FormatFixedSafeString<64>("create_%s", info.parameter_name), info.description,
this);
}
}
mOpaPolygonOffset.init(-1.0, "opa_polygon_offset", "Opaポリゴンオフセット", this);
mOpaPolygonScale.init(-1.0, "opa_polygon_scale", "Opaポリゴンスケール", this);
mXluPolygonOffset.init(-2.5, "xlu_polygon_offset", "Xluポリゴンオフセット", this);
mXluPolygonScale.init(-2.5, "xlu_polygon_scale", "Xluポリゴンスケール", this);
mRevPolygonOffset.init(0.0, "rev_polygon_offset", "逆ポリゴンオフセット", this);
mRevPolygonScale.init(0.0, "rev_polygon_scale", "逆ポリゴンスケール", this);
{
static constexpr sead::SafeArray<const char*, 3> names = {
"lm_max_front_only",
"lm_max_front_and_back",
"lm_max_cube_map",
};
static constexpr sead::SafeArray<const char*, 3> labels = {
"SphereFrontOnly",
"SphereFrontAndBack",
"CubeMap",
};
for (int i = 0; i < mLmMax.size(); ++i)
mLmMax[i].init(i == 1 ? 12 : 0, names[i], labels[i], this);
}
mLightMapSizeSphere.init(0x30, "LightMapSizeSphere", "light_map_size_sphere", this);
mLightMapCube.init(0x20, "LightMapCube", "light_map_size_cube", this);
mLightMapAmbientLight.init(1, "LightMapAmbientLight", "アンビエントライト数", this);
mLightMapHemiSphereLight.init(1, "LightMapHemiSphereLight", "半球ライト数", this);
mLightMapDirectionalLight.init(4, "LightMapDirectionalLight", "ディレクショナルライト数", this);
{
static constexpr sead::SafeArray<const char*, 2> names = {
"cube_map_max_tex_num",
"cube_map_max_tex_width",
};
static constexpr sead::SafeArray<const char*, 2> labels = {
"MaxTexNum",
"CMaxTexWidth",
};
for (int i = 0; i < mCubeMapMaxTex.size(); ++i)
mCubeMapMaxTex[i].init(i == 0 ? 10 : 256, names[i], labels[i], this);
}
mLightPrepassTextureHalf.init(false, "light_prepass_texture_half",
"ライトプリパスの解像度を下げる", this);
mUseDecalAo.init(false, "use_decal_ao", "デカールAO使用", this);
mDecalAoObjectMax.init(0x20, "decal_ao_object_max", "デカールAOオブジェクト最大数", this);
mDecalAoTextureMax.init(0x20, "decal_ao_texture_max", "デカールAOテクスチャ最大数", this);
mDecalAoTextureWidth.init(0x100, "decal_ao_texture_width", "デカールAOテクスチャ幅", this);
mDecalAoTextureHeight.init(0x100, "decal_ao_texture_height", "デカールAOテクスチャ高さ", this);
mDecalAoTextureCannelNum.init(4, "decal_ao_texture_cannel_num",
"デカールAOテクスチャチャンネル数", this);
mUseDecalBuffer.init(false, "use_decal_buffer", "デカールバッファ使用", this);
mUseDecalTrail.init(false, "use_decal_trail", "デカール軌跡使用", this);
mBloomCorrectDepth.init(false, "bloom_correct_depth", "ブルームで正しいデプスを使う", this);
mMaskedLightShadowOnly.init(false, "masked_light_shadow_only", "MaskedLightShadowのみをつかう",
this);
mDepthShadowTexWidth.init(0x400, "depth_shadow_tex_width", "シャドウマップ幅", this);
mDepthShadowTexHeight.init(-1, "depth_shadow_tex_height", "シャドウマップ高さ", this);
mDepthShadowEnableBbClip.init(false, "depth_shadow_enable_bb_clip", "BoundingによるClip", this);
mDepthShadowCheckOnly.init(false, "depth_shadow_check_only", "初期化のみ使用CheckOnly",
this);
mDepthShadowMatrixViewCoordinate.init(false, "depth_shadow_matrix_view_coordinate",
"ビュー座標系をシェーダに送る", this);
mDepthShadowEnableHiZ.init(false, "depth_shadow_enable_hiz", "Hi-Z", this);
mDepthShadowForceArray.init(false, "depth_shadow_force_array",
"初期化のみ使用強制でArrayにする", this);
mDepthShadowNearFarMargin.init(0.0, "depth_shadow_near_far_margin",
"(初期化のみ使用)撮影範囲マージン", this);
mDepthShadowPolygonOffset.init(0.2, "depth_shadow_polygon_offset", "ポリゴンオフセット", this);
mDepthShadowPolygonScale.init(2.7, "depth_shadow_polygon_scale", "ポリゴンスケール", this);
mDepthShadowClipPlaneEnable.init(0, "depth_shadow_clip_plane_enable", "クリップ有効", this);
for (int i = 0; i < mDepthShadowClipPlanes.size(); ++i) {
mDepthShadowClipPlanes[i].init(
sead::Vector4f::ey, sead::FormatFixedSafeString<64>("depth_shadow_clip_plane_%d", i),
"clip_plane", this);
}
mDepthShadowExClipPlaneNum.init(0, "depth_shadow_ex_clip_plane_num", "拡張クリップ面の数",
this);
mDepthShadowPcfOffset.init(0.5, "depth_shadow_pcf_offset", "pcf_offset", this);
for (int i = 0; i < mDepthShadowRefValueThresholds.size(); ++i) {
mDepthShadowRefValueThresholds[i].init(
-1.0, sead::FormatFixedSafeString<64>("depth_shadow_refvalue_threshold_%d", i), "",
this);
}
mDepthShadowReleaseGbuffer.init(false, "depth_shadow_release_gbuffer",
"G-Bufferを描き終えたら捨てる", this);
for (int i = 0; i < mDepthShadowParams.size(); ++i) {
auto& param = mDepthShadowParams[i];
param.use_uniform_mtx.init(
false, sead::FormatFixedSafeString<32>("depth_shadow_use_uniform_mtx_%d", i),
"UniformMtx", this);
param.cascade_num.init(1, sead::FormatFixedSafeString<32>("depth_shadow_cascade_num_%d", i),
"(初期化のみ使用)カスケード数", i == 0 ? this : &_c0);
for (int j = 0; j < param.near.size(); ++j) {
param.near[j].init(float(20 << j),
sead::FormatFixedSafeString<32>("depth_shadow_near_%d_%d", i, j), "",
this);
}
param.far.init(2000.0, sead::FormatFixedSafeString<32>("depth_shadow_far_%d", i),
"FrustumのFar", "Min=0", this);
param.offset_near.init(0.0,
sead::FormatFixedSafeString<32>("depth_shadow_offset_near_%d", i),
"OptimaizeOffsetNear", "Min=0", this);
param.offset_far.init(0.0, sead::FormatFixedSafeString<32>("depth_shadow_offset_far_%d", i),
"OptimizeOffsetFar", "Min=0", this);
}
mStaticSdwWidth.init(0x100, "static_sdw_width", "シャドウマップの幅", this);
mStaticSdwDepthFormatName.init(sDepthFormat32Str, "static_sdw_depth_format_name",
"デプスフォーマット", this);
mStaticSdwShadowMapFormatName.init(sDepthShadowMapFormat_R32_G32_float_Str,
"static_sdw_shadow_map_format_name",
"シャドウマップフォーマット", this);
mProjectionShadowNum.init(1, "projection_shadow_num", "投影影の数", this);
mProjShadowMatrixViewCoordinate.init(false, "proj_shadow_matrix_view_coordinate",
"ビュー座標系をシェーダに送る", this);
mSsaoWidthScale.init(0.5, "ssao_width_scale", "SSAOバッファのスケール", this);
mSsaoIsDepthFull.init(false, "ssao_is_depth_full", "SSAOのデプスをフル解像度", this);
mLinearLightingEnable.init(false, "linear_lighting_enable", "リニアライティング有効", this);
mHizExpandEnable.init(true, "hiz_expand_enable", "Hi-Z Expand有効", this);
mNldEnable.init(true, "nld_enable", "NormalizedLinearDepth生成", this);
mNld32Bit.init(false, "nld_32bit", "NormalizedLinearDepthを32bit", this);
mNldHalf32Bit.init(false, "nld_half_32bit", "NormalizedLinearDepth(Half)を32bit", this);
mDepthReduce.init(false, "depth_reduce", "デプスの縮小をmaxで計算", this);
mZPrePassSelectable.init(false, "z_pre_pass_selectable", "Zプリパスを選択式にする", this);
mDepthClear.init(true, "depth_clear", "Depth Clear有効", this);
mIndirectBufferLDR.init(false, "indirect_buffer_LDR", "インダイレクトバッファLDR", this);
mReducedBuffer16Bit.init(false, "reduced_buffer_16bit", "縮小バッファ16bit", this);
mReducedBufferEdgeAdjustBake.init(false, "reduced_buffer_edge_adjust_bake",
"縮小バッファエッジ補正をテクスチャ焼付け", this);
mReducedBufferBlurAdjustBake.init(false, "reduced_buffer_blur_adjust_bake",
"縮小バッファブラー補正をテクスチャ焼付け", this);
mReducedBufferEdgeAdjust.init(false, "reduced_buffer_edge_adjust", "縮小バッファエッジ補正有効",
this);
mReducedBufferEdgeAdjustCoeff.init(2.0, "reduced_buffer_edge_adjust_coeff",
"縮小バッファエッジ補正係数", this);
mBaseResoWidth.init(0x500, "base_reso_width", "基準解像度の幅", this);
mBaseResoHeight.init(0x2D0, "base_reso_height", "基準解像度の高さ", this);
mGBufferAlbedoSrgb.init(false, "g_buffer_albedo_srgb", "GBufferのアルベドsRGB", this);
mGBufferAlbedoReduceNearest.init(false, "g_buffer_albedo_reduce_nearest",
"GBufferのアルベド縮小をポイントサンプル", this);
mGBufferNormal8Bit.init(false, "g_buffer_normal_8bit", "GBufferのーマル8bit", this);
mGBufferNormalDisableReduce.init(false, "g_buffer_normal_disable_reduce", "GBufferの縮小停止",
this);
mGBufferNormalZSignW.init(false, "g_buffer_normal_z_sign_w",
"GBufferのーマルのZを符号だけWに格納", this);
mGBufferNormalReduceNearest.init(false, "g_buffer_normal_reduce_nearest",
"GBufferのーマル縮小をポイントサンプル", this);
mGBufferDepth.init(false, "g_buffer_depth", "GBufferでマテリアルIDを使用", this);
mGBufferMaterialIdFormat.init(0, "g_buffer_material_id_format", "マテリアルIDフォーマット",
this);
mGpuStressAnalyzerEnable.init(false, "gpu_stress_analyzer_enable", "GPU Stress Analyzer有効",
this);
mGpuStressAnalyzerReduceBufferenable.init(
true, "gpu_stress_analyzer_reduce_bufferenable",
"GPU Stress Analyzerでレンダーバッファのサイズを変える", this);
mEnableDrcFilterAa.init(true, "enable_drc_filter_aa", "FilterAAが有効の時DRCも有効にする",
this);
mInitFilterAaSmaaResTextures.init(false, "init_filter_aa_smaa_res_textures",
"FilterAAの初期化時にSMAAのリソーステクスチャを生成する",
this);
mCubemapArray.init(true, "cubemap_array", "キューブマップを配列で扱う", this);
mCubemapDynamicRange.init(1024.0, "cubemap_dynamic_range", "キューブマップのダイナミックレンジ",
this);
mCubemapHdrComposePower.init(4.0, "cubemap_hdr_compose_power", "キューブマップの圧縮乗数",
this);
mCubemapMaxModelUnitNum.init(0x400, "cubemap_max_model_unit_num",
"キューブマップの最大モデルユニット数", this);
mCubemapMaxShapeNum.init(0x1000, "cubemap_max_shape_num", "キューブマップの最大シェイプ数",
this);
mCubemapDisableEncode.init(false, "cubemap_disable_encode", "キューブマップを圧縮しない", this);
mModelSceneEnvDataSetNum.init(1, "model_scene_env_data_set_num",
"シーン環境で管理する genv の数", "Min=1, Max=4, Mode=MinMaxLock",
this);
mEnvObjPointLightNum.init(0x400, "env_obj_point_light_num", "ポイントライト数",
"Min=0 ,Max=1024", this);
mEnvObjPointLightRigNum.init(0x80, "env_obj_point_light_rig_num", "ポイントライトリグ数",
"Min=0 ,Max=1024", this);
mEnvObjSpotLightNum.init(0x200, "env_obj_spot_light_num", "スポットライト数", "Min=0 ,Max=1024",
this);
mEnvObjSpotLightRigNum.init(0x20, "env_obj_spot_light_rig_num", "スポットライトリグ数",
"Min=0 ,Max=1024", this);
mEnvObjMaskedSpotLightNum.init(50, "env_obj_masked_spot_light_num", "マスクドライト数",
"Min=0 ,Max=1024", this);
mEnvObjMaskedSpotLightRigNum.init(5, "env_obj_masked_spot_light_rig_num",
"マスクドライトリグ数", "Min=0 ,Max=1024", this);
mEnvObjMaskedProjLightNum.init(3, "env_obj_masked_proj_light_num",
"マスクドプロジェクションライト数", "Min=0 ,Max=1024", this);
mOfxNumLensFlare.init(10, "ofx_num_lens_flare", "レンズフレア数", "Min=0,Max=32", this);
mOfxNumLensFlarePreset.init(5, "ofx_num_lens_flare_preset", "レンズフレアPreset数",
"Min=0,Max=32", this);
mOfxNumLensFlareDynamic.init(10, "ofx_num_lens_flare_dynamic", "プログラム用レンズフレア数",
"Min=0,Max=32", this);
mOfxNumLensFlareDynamicPreset.init(5, "ofx_num_lens_flare_dynamic_preset",
"プログラム用レンズフレアPreset数", "Min=0,Max=32", this);
mOfxNumLensFlareRig.init(8, "ofx_num_lens_flare_rig", "レンズフレアRig数", "Min=0,Max=32",
this);
mOfxNumLensFlareRigObj.init(0x18, "ofx_num_lens_flare_rig_obj", "Rig用レンズフレア数",
"Min=0,Max=32", this);
mOfxNumLensFlareRigPreset.init(5, "ofx_num_lens_flare_rig_preset", "Rig用レンズフレアPreset数",
"Min=0,Max=32", this);
mOfxNumLargeLensFlareRig.init(2, "ofx_num_large_lens_flare_rig", "LargeレンズフレアRig数",
"Min=0,Max=16", this);
mOfxNumLargeLensFlareRigObj.init(2, "ofx_num_large_lens_flare_rig_obj",
"Rig用Largeレンズフレア数", "Min=0,Max=16", this);
mOfxNumLargeLensFlareRigPreset.init(10, "ofx_num_large_lens_flare_rig_preset",
"Rig用LargeレンズフレアPreset数", "Min=0,Max=16", this);
mModelNum.init(0x2000, "model_num", "エントリーモデル数", "Min=0 ,Max=16000", this);
mModelUnitNum.init(0x4000, "model_unit_num", "エントリーモデルユニット数", "Min=0 ,Max=16000",
this);
mShapeNum.init(0x1000, "shape_num", "キューイングシェイプ数", "Min=0 ,Max=16000", this);
mOcclusionQueryNum.init(0x100, "occlusion_query_num", "オクルージョンクエリ最大数",
"Min=0 ,Max=16000", this);
for (int i = 0; i < mUserVisualizeClrNames.size(); ++i) {
static constexpr sead::SafeArray<const char*, 8> names = {
"user_visualize_clr_name_0", "user_visualize_clr_name_1", "user_visualize_clr_name_2",
"user_visualize_clr_name_3", "user_visualize_clr_name_4", "user_visualize_clr_name_5",
"user_visualize_clr_name_6", "user_visualize_clr_name_7",
};
static constexpr sead::SafeArray<const char*, 8> labels = {
"ユーザーカラー可視化[0]", "ユーザーカラー可視化[1]", "ユーザーカラー可視化[2]",
"ユーザーカラー可視化[3]", "ユーザーカラー可視化[4]", "ユーザーカラー可視化[5]",
"ユーザーカラー可視化[6]", "ユーザーカラー可視化[7]",
};
mUserVisualizeClrNames[i].init(sead::SafeString::cEmptyString, names[i], labels[i],
"AcceptReturn=true", this);
}
for (int i = 0; i < mUserVisualizeTexNames.size(); ++i) {
static constexpr sead::SafeArray<const char*, 8> names = {
"user_visualize_tex_name_0", "user_visualize_tex_name_1", "user_visualize_tex_name_2",
"user_visualize_tex_name_3", "user_visualize_tex_name_4", "user_visualize_tex_name_5",
"user_visualize_tex_name_6", "user_visualize_tex_name_7",
};
static constexpr sead::SafeArray<const char*, 8> labels = {
"ユーザーテクスチャ可視化[0]", "ユーザーテクスチャ可視化[1]",
"ユーザーテクスチャ可視化[2]", "ユーザーテクスチャ可視化[3]",
"ユーザーテクスチャ可視化[4]", "ユーザーテクスチャ可視化[5]",
"ユーザーテクスチャ可視化[6]", "ユーザーテクスチャ可視化[7]",
};
mUserVisualizeTexNames[i].init(sead::SafeString::cEmptyString, names[i], labels[i],
"AcceptReturn=true", this);
}
for (auto it = mDeferredShadingModels.begin(), end = mDeferredShadingModels.end(); it != end;
++it) {
auto i = int(-(&*mDeferredShadingModels.begin() - &*it));
static constexpr sead::SafeArray<const char*, 8> labels = {
"デファードシェーディング用モデル0", "デファードシェーディング用モデル1",
"デファードシェーディング用モデル2", "デファードシェーディング用モデル3",
"デファードシェーディング用モデル4", "デファードシェーディング用モデル5",
"デファードシェーディング用モデル6", "デファードシェーディング用モデル7",
};
it->init(sead::SafeString::cEmptyString,
i == 0 ? sead::FormatFixedSafeString<256>("deferred_shading_model") :
sead::FormatFixedSafeString<256>("deferred_shading_model%d", i),
labels(i), "AcceptReturn=false", this);
}
mSceneMaterialModel.init(sead::SafeString::cEmptyString, "scene_material_model",
"シーンマテリアルモデル名", "AcceptReturn=false", this);
#ifdef SEAD_DEBUG
setNodeName("コンフィグ");
#endif
ORUtil::setNodeMetaIcon(this, ORUtil::Icon::_b,
agl::detail::PrivateResource::instance()->getDebugHeap());
}
int ModelSceneConfig::getStaticDepthShadowDepthFormat() const {
return mStaticSdwDepthFormat;
}
int ModelSceneConfig::getStaticDepthShadowDepthShadowMapFormat() const {
return mStaticSdwShadowMapFormat;
}
bool ModelSceneConfig::preRead_() {
return !_1798 && !_1799;
}
bool ModelSceneConfig::preWrite_() const {
mStaticSdwDepthFormatName->copy(DepthFormat(mStaticSdwDepthFormat).text());
mStaticSdwShadowMapFormatName->copy(DepthShadowMapFormat(mStaticSdwShadowMapFormat).text());
return true;
}
template <typename T>
static T convertToEnum(const sead::SafeString& str_value, T default_value) {
T value;
return value.fromText(str_value) ? value : default_value;
}
void ModelSceneConfig::postRead_() {
_1799 = true;
for (int i = 0; i < NumFeatures; ++i) {
if (!sModelSceneFeatures[i]._10)
*mEnabledFeatures[i] = *mShouldCreateFeatures[i];
}
mEnvObjMgrInitArg.setContainMax(LightRigObj<PointLight>::sTypeInfo, *mEnvObjPointLightNum);
mEnvObjMgrInitArg.setContainMax(PointLightRig::sTypeInfo, *mEnvObjPointLightRigNum);
mEnvObjMgrInitArg.setContainMax(LightRigObj<SpotLight>::sTypeInfo, *mEnvObjSpotLightNum);
mEnvObjMgrInitArg.setContainMax(SpotLightRig::sTypeInfo, *mEnvObjSpotLightRigNum);
mEnvObjMgrInitArg.setContainMax(LightRigObj<MaskedSpotLight>::sTypeInfo,
*mEnvObjMaskedSpotLightNum);
mEnvObjMgrInitArg.setContainMax(MaskedSpotLightRig::sTypeInfo, *mEnvObjMaskedSpotLightRigNum);
mEnvObjMgrInitArg.setContainMax(MaskedProjLight::sTypeInfo, *mEnvObjMaskedProjLightNum);
mEnvObjMgrInitArg.setContainMax(agl::fx::OfxLensFlare::sTypeInfo, *mOfxNumLensFlare);
mEnvObjMgrInitArg.setContainMax(agl::fx::OfxLensFlare::Preset::sTypeInfo,
*mOfxNumLensFlarePreset);
mEnvObjMgrInitArg.setContainMax(agl::fx::OfxLensFlareDynamic::sTypeInfo,
*mOfxNumLensFlareDynamic);
mEnvObjMgrInitArg.setContainMax(agl::fx::OfxLensFlareDynamic::Preset::sTypeInfo,
*mOfxNumLensFlareDynamicPreset);
mEnvObjMgrInitArg.setContainMax(OfxLensFlareRig::sTypeInfo, *mOfxNumLensFlareRig);
mEnvObjMgrInitArg.setContainMax(OfxLensFlareImpl::sTypeInfo, *mOfxNumLensFlareRigObj);
mEnvObjMgrInitArg.setContainMax(OfxLensFlareImpl::Preset::sTypeInfo,
*mOfxNumLensFlareRigPreset);
mEnvObjMgrInitArg.setContainMax(OfxLargeLensFlareRig::sTypeInfo, *mOfxNumLargeLensFlareRig);
mEnvObjMgrInitArg.setContainMax(OfxLargeLensFlareImpl::sTypeInfo, *mOfxNumLargeLensFlareRigObj);
mEnvObjMgrInitArg.setContainMax(OfxLargeLensFlareImpl::Preset::sTypeInfo,
*mOfxNumLargeLensFlareRigPreset);
mEnvObjBufferAllocateArg.setContainMax(agl::env::AmbientLight::sTypeInfo,
*mLightMapAmbientLight);
mEnvObjBufferAllocateArg.setContainMax(agl::env::HemisphereLight::sTypeInfo,
*mLightMapHemiSphereLight);
mEnvObjBufferAllocateArg.setContainMax(agl::env::DirectionalLight::sTypeInfo,
*mLightMapDirectionalLight);
if (*mDepthShadowTexHeight < 1)
*mDepthShadowTexHeight = *mDepthShadowTexWidth;
mStaticSdwDepthFormat = convertToEnum<DepthFormat>(*mStaticSdwDepthFormatName, 60);
mStaticSdwShadowMapFormat =
convertToEnum<DepthShadowMapFormat>(*mStaticSdwShadowMapFormatName, 38);
IParameterObj::postRead_();
}
ModelSceneConfig::EnvObjSetTemplate& ModelSceneConfig::getEnvObjSetTemplate_(int index) const {
SEAD_ASSERT(mpConfigList != nullptr);
return mpConfigList->mEnvObjSetTemplates[index];
}
ModelSceneConfig::EnvObjSetTemplate::EnvObjSetTemplate()
: enable(false, "enable", "有効", this), num(8, "num", "Num", "Min=0,Max=16", this),
ambient_light_num(1, "ambient_light_num", "Ambient Light Num", "Min=0,Max=8", this),
directional_light_num(1, "directional_light_num", "Directional Light Num", "Min=0,Max=8",
this),
hemisphere_light_num(1, "hemisphere_light_num", "Hemisphere Light Num", "Min=0,Max=8", this),
fog_num(1, "fog_num", "Fog Num", "Min=0,Max=8", this),
light_map_obj_num(1, "light_map_obj_num", "Light Map Obj Num", "Min=0,Max=8", this),
template_name({"Tepmlate Name"} /* sic */, "template_name", "Template Name",
"Mode=TextBoxOnly, Comment=template_name, AcceptReturn=False", this) {}
ModelSceneConfigList::ModelSceneConfigList() : agl::utl::IParameterIO("gmsconf", 0) {
#ifdef SEAD_DEBUG
setNodeName("シーンコンフィグ");
#endif
ORUtil::setNodeMeta(this, ORUtil::Category::_0, ORUtil::Attribute::_2,
agl::detail::PrivateResource::instance()->getDebugHeap());
addObj(&mNameArrayObj, "name_array");
addList(&mEnvObjSetTemplateList, "env_obj_set_template");
for (int i = 0; i < mEnvObjSetTemplates.size(); ++i) {
mEnvObjSetTemplateList.addObj(&mEnvObjSetTemplates[i], sead::FormatFixedSafeString<32>(
"env_obj_set_template_%02d", i));
}
*mEnvObjSetTemplates[0].enable = true;
for (int i = 0; i < mConfigNames.size(); ++i) {
const auto param = sead::FormatFixedSafeString<32>("config_%02d", i);
const auto default_name = sead::FixedSafeString<32>("");
mConfigNames[i].init(default_name, param, "コンフィグ名", &mNameArrayObj);
mConfigs[i].mpConfigList = this;
}
}
void ModelSceneConfigList::applyResouce(const void* resource) {
mResource = resource;
applyResParameterArchive(agl::utl::ResParameterArchive(resource));
}
const ModelSceneConfig& ModelSceneConfigList::setup(const sead::SafeString& config_name) {
sead::SafeString name = &sead::SafeString::cNullChar;
int index = 0;
if (mCurrentConfigIndex != -1) {
name = *mConfigNames[mCurrentConfigIndex]; // NOLINT(cppcoreguidelines-slicing)
index = mCurrentConfigIndex;
} else {
for (int i = 0; i < mConfigs.size(); ++i) {
if (*mConfigNames[i] == config_name) {
name = *mConfigNames[i]; // NOLINT(cppcoreguidelines-slicing)
index = i;
}
}
}
if (name.isEmpty()) {
name = *mConfigNames[0]; // NOLINT(cppcoreguidelines-slicing)
index = 0;
}
reload(name);
return mConfigs[index];
}
void ModelSceneConfigList::reload(const sead::SafeString& config_name) {
for (int i = 0; i < mConfigs.size(); ++i) {
if (*mConfigNames[i] != "" && *mConfigNames[i] == config_name) {
mConfigs[i]._1799 = false;
}
}
applyResouce(mResource);
}
bool ModelSceneConfigList::preWrite_() const {
// eww
auto* mutable_this = const_cast<ModelSceneConfigList*>(this);
mutable_this->clearObj();
mutable_this->addObj(&mutable_this->mNameArrayObj, "name_array");
#ifdef SEAD_DEBUG
for (int i = 0; i < mConfigs.size(); ++i) {
if (!mConfigs[i].isAppended())
mutable_this->addObj(&mutable_this->mConfigs[i], *mConfigNames[i]);
}
#endif
return true;
}
bool ModelSceneConfigList::preRead_() {
if (_821e4) {
clearObj();
addObj(&mNameArrayObj, "name_array");
}
return true;
}
// NON_MATCHING: reordering fest
void ModelSceneConfigList::postRead_() {
if (!_821e4) {
_821e4 = true;
// TODO: debug stuff
// sead::hostio::InvalidateNode(this, true);
return;
}
for (int i = 0; i < mConfigs.size(); ++i) {
const auto& name = *mConfigNames[i];
if (name == "")
continue;
addObj(&mConfigs[i], name);
mConfigs[i].mIndex1 = i;
mConfigs[i].mIndex2 = i;
mConfigs[i].mConfigName = &name;
}
_821e4 = false;
applyResouce(mResource);
}
ModelSceneConfigList::EnvObjSetTemplateList::EnvObjSetTemplateList() = default;
bool ModelSceneConfigList::EnvObjSetTemplateList::preRead_() {
return !unk;
}
} // namespace gsys

@ -1 +1 @@
Subproject commit b8c69e3e04aff4295416a4c61b6f749f4e4cb51c Subproject commit 06a028cbf382e5b997d17d3a8147dbdbb7f66109