@@ -97,6 +97,8 @@ void GBufferPass::Update(const float fDeltaTime)
97
97
ResourceMgr->GetTexture (LinearFullDepthBuffer.GetRenderTarget ()->GetColorBuffer ())->SetFilter (SF_MIN_MAG_POINT_MIP_NONE);
98
98
ResourceMgr->GetTexture (LinearQuarterDepthBuffer.GetRenderTarget ()->GetColorBuffer ())->SetFilter (SF_MIN_MAG_POINT_MIP_NONE);
99
99
ResourceMgr->GetTexture (HyperbolicQuarterDepthBuffer.GetRenderTarget ()->GetColorBuffer ())->SetFilter (SF_MIN_MAG_POINT_MIP_NONE);
100
+
101
+ DIFFUSE_ANISOTROPY = Math::clamp (DIFFUSE_ANISOTROPY, 1 , (int )MAX_ANISOTROPY);
100
102
}
101
103
102
104
void GBufferPass::Draw ()
@@ -151,27 +153,33 @@ void GBufferPass::Draw()
151
153
{
152
154
PUSH_PROFILE_MARKER (SponzaScene.GetModel ()->arrMaterial [SponzaScene.GetModel ()->arrMesh [mesh]->nMaterialIdx ]->szName .c_str ());
153
155
154
- DIFFUSE_ANISOTROPY = Math::clamp (DIFFUSE_ANISOTROPY, 1 , (int )MAX_ANISOTROPY);
155
- RenderContext->GetResourceManager ()->GetTexture (
156
- SponzaScene.GetTexture (Synesthesia3D::Model::TextureDesc::TT_DIFFUSE, SponzaScene.GetModel ()->arrMesh [mesh]->nMaterialIdx )
157
- )->SetAnisotropy ((unsigned int )DIFFUSE_ANISOTROPY);
156
+ const unsigned int diffuseTexIdx = SponzaScene.GetTexture (Synesthesia3D::Model::TextureDesc::TT_DIFFUSE, SponzaScene.GetModel ()->arrMesh [mesh]->nMaterialIdx );
157
+ const unsigned int normalTexIdx = SponzaScene.GetTexture (Synesthesia3D::Model::TextureDesc::TT_HEIGHT, SponzaScene.GetModel ()->arrMesh [mesh]->nMaterialIdx );
158
+ const unsigned int specTexIdx = SponzaScene.GetTexture (Synesthesia3D::Model::TextureDesc::TT_SPECULAR, SponzaScene.GetModel ()->arrMesh [mesh]->nMaterialIdx );
159
+ const unsigned int matTexIdx = SponzaScene.GetTexture (Synesthesia3D::Model::TextureDesc::TT_AMBIENT, SponzaScene.GetModel ()->arrMesh [mesh]->nMaterialIdx );
160
+ const unsigned int roughnessTexIdx = SponzaScene.GetTexture (Synesthesia3D::Model::TextureDesc::TT_SHININESS, SponzaScene.GetModel ()->arrMesh [mesh]->nMaterialIdx );
161
+
162
+ if (diffuseTexIdx != ~0u && ((texMatType != ~0u && texRoughness != ~0u ) || nBRDFModel == BLINN_PHONG))
163
+ {
164
+ RenderContext->GetResourceManager ()->GetTexture (diffuseTexIdx)->SetAnisotropy ((unsigned int )DIFFUSE_ANISOTROPY);
158
165
159
- texDiffuse = SponzaScene. GetTexture (Synesthesia3D::Model::TextureDesc::TT_DIFFUSE, SponzaScene. GetModel ()-> arrMesh [mesh]-> nMaterialIdx ) ;
160
- texNormal = SponzaScene. GetTexture (Synesthesia3D::Model::TextureDesc::TT_HEIGHT, SponzaScene. GetModel ()-> arrMesh [mesh]-> nMaterialIdx ) ;
161
- bHasNormalMap = (texNormal != -1 ) && GBUFFER_USE_NORMAL_MAPS;
166
+ texDiffuse = diffuseTexIdx ;
167
+ texNormal = normalTexIdx ;
168
+ bHasNormalMap = (texNormal != -1 ) && GBUFFER_USE_NORMAL_MAPS;
162
169
163
- // For Blinn-Phong BRDF
164
- texSpec = SponzaScene. GetTexture (Synesthesia3D::Model::TextureDesc::TT_SPECULAR, SponzaScene. GetModel ()-> arrMesh [mesh]-> nMaterialIdx );
165
- bHasSpecMap = (texSpec != -1 );
166
- fSpecIntensity = SponzaScene.GetModel ()->arrMaterial [SponzaScene.GetModel ()->arrMesh [mesh]->nMaterialIdx ]->fShininessStrength ;
170
+ // For Blinn-Phong BRDF
171
+ texSpec = (nBRDFModel == BLINN_PHONG ? specTexIdx : ~ 0u );
172
+ bHasSpecMap = (texSpec != -1 );
173
+ fSpecIntensity = SponzaScene.GetModel ()->arrMaterial [SponzaScene.GetModel ()->arrMesh [mesh]->nMaterialIdx ]->fShininessStrength ;
167
174
168
- // For Cook-Torrance BRDF
169
- texMatType = SponzaScene. GetTexture (Synesthesia3D::Model::TextureDesc::TT_AMBIENT, SponzaScene. GetModel ()-> arrMesh [mesh]-> nMaterialIdx );
170
- texRoughness = SponzaScene. GetTexture (Synesthesia3D::Model::TextureDesc::TT_SHININESS, SponzaScene. GetModel ()-> arrMesh [mesh]-> nMaterialIdx );
175
+ // For Cook-Torrance BRDF
176
+ texMatType = (nBRDFModel == COOK_TORRANCE_GGX || nBRDFModel == COOK_TORRANCE_BECKMANN ? matTexIdx : ~ 0u );
177
+ texRoughness = (nBRDFModel == COOK_TORRANCE_GGX || nBRDFModel == COOK_TORRANCE_BECKMANN ? roughnessTexIdx : ~ 0u );
171
178
172
- GBufferGenerationShader.Enable ();
173
- RenderContext->DrawVertexBuffer (SponzaScene.GetModel ()->arrMesh [mesh]->pVertexBuffer );
174
- GBufferGenerationShader.Disable ();
179
+ GBufferGenerationShader.Enable ();
180
+ RenderContext->DrawVertexBuffer (SponzaScene.GetModel ()->arrMesh [mesh]->pVertexBuffer );
181
+ GBufferGenerationShader.Disable ();
182
+ }
175
183
176
184
POP_PROFILE_MARKER ();
177
185
}
0 commit comments