17#if defined(_PS4) || defined(_WINDOWS) || defined(_PS5)
19GX_SHADER_NAMESPACE_BEGIN()
26#define FFT_TEXTURE_ARRAY_NUM 8
30 enum class WATER_SURFACE_TECHNIQUE_TYPE
41 GX_ENUM_TABLE_MAX(WATER_SURFACE_TECHNIQUE_TYPE)
45 enum class WATER_SURFACE_ENVIRONMENT_MAP_TYPE
53 GX_ENUM_TABLE_MAX(WATER_SURFACE_ENVIRONMENT_MAP_TYPE)
65 GX_RTTI_CLASS_NAME( GxUnitWaterModel,
GxUnitModel,
"水表現用シェーダーモデル" )
76 GxUnitWaterModel(
void);
78 void cleanup(
void) override;
87 b32 setup(
void) override;
91 void render(
void) override;
96 void preRenderWaterSurfaceResource(
void);
99 virtual
void initializeConstantBufferHandle(
void);
102 virtual
void initializeResources(
void);
105 void initializeTextureHTilde0(
void);
108 void initializeTextureWavesSampler(
void);
111 void initializeTextureSpectrum12SamplerAndSpectrum34Sampler(
void);
114 void initializeTextureButterflySampler(
void);
117 void initializeTexturePingSamplerAndPongSampler(
void);
120 f32 calculateDFTPhillips(s32 n_prime, s32 m_prime);
122 void calculateWaterSurfaceVerticesHTilde0ForDFT(struct MyVertexElement_hTilde_0* pWaterSurfaceVerticesHTilde0ForDFT);
125 f32 calculateFFTOmega(f32 k);
127 f32 calculateFFTSpectrum(f32 kx, f32 ky,
b32 omnispectrum = false);
129 void getFFTSpectrumSample(s32 i, s32 j, f32 lengthScale, f32 kMin, f32* pResult);
132 void renderTextureFFTInitialize(
void);
134 void renderTextureFFTX(
void);
136 void renderTextureFFTY(
void);
138 void renderTextureFFTXY(u32 shaderPass);
141 void drawQuad(u32 shaderPass);
144 void simurateFFTWaves(
void);
147 void createResourceForFFTCalculation(
void);
161 constexpr WATER_SURFACE_TECHNIQUE_TYPE getWaterSurfaceTechniqueType(
void)
const {
return _waterSurfaceTechniqueEnable ? _waterSurfaceTechniqueType : WATER_SURFACE_TECHNIQUE_TYPE::NONE; }
163 constexpr void setWaterSurfaceTechniqueType( WATER_SURFACE_TECHNIQUE_TYPE type ) { _waterSurfaceTechniqueType = type; }
166 constexpr WATER_SURFACE_ENVIRONMENT_MAP_TYPE getWaterSurfaceEnvironmentMapType(
void)
const {
return _waterSurfaceEnvironmentMapType; }
168 constexpr void setWaterSurfaceEnvironmentMapType( WATER_SURFACE_ENVIRONMENT_MAP_TYPE type ){ _waterSurfaceEnvironmentMapType = type; }
171 constexpr f32 getWaveTimeCommon(
void)
const {
return _waveTimeCommon; }
173 constexpr void setWaveTimeCommon( f32 fCommon ) { _waveTimeCommon = fCommon; }
176 constexpr f32 getDFTWaveParamLambdaX(
void)
const {
return _dftWaveParamLambda[ 0 ]; }
178 constexpr f32 getDFTWaveParamLambdaY(
void)
const {
return _dftWaveParamLambda[ 1 ]; }
180 constexpr f32 getDFTWaveParamLambdaZ(
void)
const {
return _dftWaveParamLambda[ 2 ]; }
182 constexpr void setDFTWaveParamLambdaX( f32 value ) { _dftWaveParamLambda[ 0 ] = value; }
184 constexpr void setDFTWaveParamLambdaY( f32 value ) { _dftWaveParamLambda[ 1 ] = value; }
186 constexpr void setDFTWaveParamLambdaZ( f32 value ) { _dftWaveParamLambda[ 2 ] = value; }
189 constexpr f32 getDFTWaveParamW0Div(
void)
const {
return _dftWaveParamW0Div; }
191 constexpr void setDFTWaveParamW0Div( f32 value ) { _dftWaveParamW0Div = value; }
194 GX_FORCE_INLINE
b32 getFFTWaveParamIsChoppyEnabled(
void)
const {
return _fftWaveParamIsChoppyEnabled; }
196 GX_FORCE_INLINE
void setFFTWaveParamIsChoppyEnabled(
b32 isEnabled ) { _fftWaveParamIsChoppyEnabled = isEnabled; }
198 constexpr f32 getFFTWaveParamChoppyFactor( u32 index )
const {
return _fftWaveParamChoppyFactor[ index ]; }
200 constexpr void setFFTWaveParamChoppyFactor( u32 index, f32 value ) { _fftWaveParamChoppyFactor[ index ] = value; }
204 void setConstantBufferCommon(
void);
206 void setConstantBufferGerstner(
void);
208 void setConstantBufferDFT(
void);
210 void setConstantBufferMiddle(
void);
212 void setConstantBufferFFT(
void);
215 f32 getWaveTime(
void);
218 constexpr void getPropertyWaterSurfaceTechniqueType(
void*
const pValue ) { *
static_cast<WATER_SURFACE_TECHNIQUE_TYPE*
>(pValue) = getWaterSurfaceTechniqueType(); }
220 constexpr void setPropertyWaterSurfaceTechniqueType(
const void*
const pValue ) { setWaterSurfaceTechniqueType(*
static_cast<WATER_SURFACE_TECHNIQUE_TYPE*
>(
const_cast<void*
>(pValue))); }
223 constexpr void getPropertyWaterSurfaceEnvironmentMapColorType(
void*
const pValue ) { *
static_cast<WATER_SURFACE_ENVIRONMENT_MAP_TYPE*
>(pValue) = getWaterSurfaceEnvironmentMapType(); }
225 constexpr void setPropertyWaterSurfaceEnvironmentMapColorType(
const void*
const pValue ) { setWaterSurfaceEnvironmentMapType( *
static_cast<WATER_SURFACE_ENVIRONMENT_MAP_TYPE*
>(
const_cast<void*
>(pValue)) ); }
228 GX_FORCE_INLINE
void getPropertyCubeMapTextureResource(
void*
const pValue ) { *
static_cast<GxResTexture**
>(pValue) = getCubeMapTextureResource(); }
230 GX_FORCE_INLINE
void setPropertyCubeMapTextureResource(
const void*
const pValue ) { setCubeMapTextureResource( *
static_cast<GxResTexture**
>(
const_cast<void*
>(pValue)) ); }
234 GX_FORCE_INLINE
virtual GxResTexture* getCubeMapTextureResource(
void )
const {
return _pResTexture_WaterSurfaceCubeMap; }
242 b32 _waterSurfaceTechniqueEnable;
244 WATER_SURFACE_TECHNIQUE_TYPE _waterSurfaceTechniqueType;
246 WATER_SURFACE_ENVIRONMENT_MAP_TYPE _waterSurfaceEnvironmentMapType;
250 GX_HANDLE _handleApplyWaterSurfaceEnvironmentMap;
254 GX_HANDLE _handleWaterSurfaceTechniqueType;
261 GX_HANDLE _handleGerstnerWavesAmpOverLen;
266 u32 _gerstnerWavesNum;
267 GxVector3 _gerstnerWavesDirection [GERSTNER_WAVES_NUM_MAX];
268 f32 _gerstnerWavesAmpOverLen[GERSTNER_WAVES_NUM_MAX];
269 f32 _gerstnerWavesLength [GERSTNER_WAVES_NUM_MAX];
270 f32 _gerstnerWavesSpeed [GERSTNER_WAVES_NUM_MAX];
271 f32 _gerstnerWavesSteepness [GERSTNER_WAVES_NUM_MAX];
273 GX_HANDLE _handleDftWaveParamWaveDimension;
274 GX_HANDLE _handleDftWaveParamWaveGridSize;
279 s32 _dftInitialWaveParamDimension;
280 s32 _dftInitialWaveParamGridSize;
281 f32 _dftInitialWaveParamAmp;
282 GxVector2 _dftInitialWaveParamWindDirect;
283 f32 _dftWaveParamLambda[ 3 ];
284 f32 _dftWaveParamW0Div;
286 u32 _middleInitialWaveParamNbWaves;
287 f32 _middleInitialWaveParamLambdaMin;
288 f32 _middleInitialWaveParamLambdaMax;
289 f32 _middleInitialWaveParamHeightMax;
290 f32 _middleInitialWaveParamU0;
291 f32 _middleInitialWaveParamWaveDispersion;
292 f32 _middleWaveParamWaveDirection;
293 f32 _middleWaveParamNyquistMin;
294 f32 _middleWaveParamNyquistMax;
295 f32 _middleWaveParamSigmaXsquare;
296 f32 _middleWaveParamSigmaYsquare;
310 GX_HANDLE _handleSamplerSpectrum12Sampler;
311 GX_HANDLE _handleSamplerSpectrum34Sampler;
314 GX_HANDLE _handleSamplerButterflySampler;
320 GX_HANDLE _handleSamplerFftWavesSampler[FFT_TEXTURE_ARRAY_NUM];
323 f32 _fftInitialWaveParamWaveSizes[ 4 ];
324 s32 _fftInitialWaveParamPasses;
325 b32 _fftInitialWaveParamPropagate;
326 f32 _fftInitialWaveParamCm;
327 f32 _fftInitialWaveParamKm;
328 f32 _fftInitialWaveParamAmp;
329 f32 _fftInitialWaveParamWindSpeed;
330 f32 _fftInitialWaveParamOmega;
331 b32 _fftWaveParamIsChoppyEnabled;
332 f32 _fftWaveParamChoppyFactor[ 4 ];
333 f32 _fftWaveParamWaveGridSize;
337 GxColor _waveParamEmissiveColor;
338 GxColor _waveParamAmbientColor;
339 GxColor _waveParamDiffuseColor;
340 GxColor _waveParamSpecularColor;
341 f32 _waveParamEmissiveContribution;
342 f32 _waveParamAmbientContribution;
343 f32 _waveParamDiffuseContribution;
344 f32 _waveParamSpecularContribution;
345 f32 _waveParamSpecularPower;
346 f32 _waveParamFresnelRefractive;
347 f32 _waveParamFresnelAdditionalAlpha;
367 GX_HANDLE _handleSamplerWaterSurfaceCubeMap;
373 GX_HANDLE _handleWaveParamEmissiveContribution;
374 GX_HANDLE _handleWaveParamAmbientContribution;
375 GX_HANDLE _handleWaveParamDiffuseContribution;
376 GX_HANDLE _handleWaveParamSpecularContribution;
378 GX_HANDLE _handleWaveParamFresnelRefractive;
379 GX_HANDLE _handleWaveParamFresnelAdditionalAlpha;
382 b32 _isDrawNormalMode;
387GX_SHADER_NAMESPACE_END()
#define GX_PROHIBIT_CLASS_BASE_REFERENCE(__CLASS__)
GxClassBaseReference継承の禁止宣言(new以外の生成禁止 + コピー禁止)
Definition GxBase.h:244
void GxTypedObject
その他
Definition GxDefine.h:213
u32 GX_HANDLE
ハンドル
Definition GxDefine.h:214
RENDER_VIEW
描画優先度(ビュー)
Definition GxRender.h:442
RENDER_SUB_VIEW
描画優先度(サブビュー)
Definition GxRender.h:485
static constexpr u32 VALUE_4
4
Definition GxMath.h:121
プロパティクラス
Definition GxProperty.h:48
マテリアル構造体
Definition GxRenderMaterial.h:18
テクスチャクラス
Definition GxRenderTexture.h:19
頂点バッファを管理する
Definition GxRenderVertexBuffer.h:20
頂点シェーダに渡す頂点の宣言を管理する
Definition GxRenderVertexDeclaration.h:22
シェーダパッケージリソースクラス
Definition GxResShaderPackage.h:19
テクスチャリソース
Definition GxResTexture.h:23
実行時型情報クラス
Definition GxRtti.h:154
モデルクラス
Definition GxUnitModel.h:19
2次元ベクトル
Definition GxVector.h:34
3次元ベクトル
Definition GxVector.h:245
32bitブーリアン
Definition GxDefine.h:173