Skip to content

Commit 30ebc3b

Browse files
committed
feat: add clearcoat material support
1 parent 6d2b777 commit 30ebc3b

13 files changed

Lines changed: 419 additions & 178 deletions

editor/app.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -921,7 +921,10 @@ pl__show_editor_window(plAppData* ptAppData)
921921
"Geometry Normal",
922922
"Geometry Tangent",
923923
"Geometry Bitangent",
924-
"UV 0"
924+
"UV 0",
925+
"Clearcoat",
926+
"Clearcoat Roughness",
927+
"Clearcoat Normal",
925928
};
926929
bool abShaderDebugMode[PL_ARRAYSIZE(apcShaderDebugModeText)] = {0};
927930
abShaderDebugMode[ptRuntimeOptions->tShaderDebugMode] = true;

editor/editor.cpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1109,7 +1109,10 @@ pl__show_editor_window(plAppData* ptAppData)
11091109
"Geometry Normal",
11101110
"Geometry Tangent",
11111111
"Geometry Bitangent",
1112-
"UV 0"
1112+
"UV 0",
1113+
"Clearcoat",
1114+
"Clearcoat Roughness",
1115+
"Clearcoat Normal",
11131116
};
11141117
bool bReloadShaders = false;
11151118
if(ImGui::Combo("Shader Debug Mode", &ptRuntimeOptions->tShaderDebugMode, apcShaderDebugModeText, PL_ARRAYSIZE(apcShaderDebugModeText))) bReloadShaders = true;
@@ -1234,8 +1237,8 @@ pl__create_scene(plAppData* ptAppData)
12341237
ptLight->fIntensity = 1.0f;
12351238
ptLight->fRange = 1.0f;
12361239
ptLight->uShadowResolution = 1024;
1237-
ptLight->afCascadeSplits[0] = 0.01f;
1238-
ptLight->afCascadeSplits[1] = 0.25f;
1240+
ptLight->afCascadeSplits[0] = 0.05f;
1241+
ptLight->afCascadeSplits[1] = 0.15f;
12391242
ptLight->afCascadeSplits[2] = 0.50f;
12401243
ptLight->afCascadeSplits[3] = 1.00f;
12411244
ptLight->tFlags |= PL_LIGHT_FLAG_CAST_SHADOW | PL_LIGHT_FLAG_VISUALIZER;
@@ -1244,7 +1247,7 @@ pl__create_scene(plAppData* ptAppData)
12441247
ptLight->uShadowResolution = 1024;
12451248
ptLight->tFlags |= PL_LIGHT_FLAG_CAST_SHADOW | PL_LIGHT_FLAG_VISUALIZER;
12461249
plTransformComponent* ptPLightTransform = (plTransformComponent* )gptEcs->add_component(ptAppData->ptCompLibrary, gptEcs->get_ecs_type_key_transform(), tPointLight);
1247-
ptPLightTransform->tTranslation = pl_create_vec3(0.0f, 1.497f, 2.0f);
1250+
ptPLightTransform->tTranslation = pl_create_vec3(9.316f, 1.497f, -1.042f);
12481251

12491252
plEntity tSpotLight = gptRenderer->create_spot_light(ptAppData->ptCompLibrary, "spot light", pl_create_vec3(0.0f, 4.0f, -1.18f), pl_create_vec3(0.0, -1.0f, 0.376f), &ptLight);
12501253
ptLight->uShadowResolution = 1024;

editor/editor_entities.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -465,6 +465,8 @@ pl__show_entity_components(plAppData* ptAppData, plScene* ptScene, plEntity tEnt
465465
bool bMaterialModified = false;
466466
if(ImGui::InputFloat("Roughness", &ptMaterialComp->fRoughness)) bMaterialModified = true;
467467
if(ImGui::InputFloat("Metalness", &ptMaterialComp->fMetalness)) bMaterialModified = true;
468+
if(ImGui::InputFloat("Clearcoat", &ptMaterialComp->fClearcoat)) bMaterialModified = true;
469+
if(ImGui::InputFloat("Clearcoat Roughness", &ptMaterialComp->fClearcoatRoughness)) bMaterialModified = true;
468470
if(ImGui::InputFloat("Alpha Cutoff", &ptMaterialComp->fAlphaCutoff)) bMaterialModified = true;
469471
if(ImGui::InputFloat4("Base Factor", ptMaterialComp->tBaseColor.d)) bMaterialModified = true;
470472
if(ImGui::InputFloat4("Emmissive Factor", ptMaterialComp->tEmissiveColor.d)) bMaterialModified = true;
@@ -486,7 +488,7 @@ pl__show_entity_components(plAppData* ptAppData, plScene* ptScene, plEntity tEnt
486488
static const char* apcShaderNames[] =
487489
{
488490
"PL_SHADER_TYPE_PBR",
489-
"PL_SHADER_TYPE_UNLIT",
491+
"PL_SHADER_TYPE_PBR_CLEARCOAT",
490492
"PL_SHADER_TYPE_CUSTOM"
491493
};
492494
ImGui::LabelText("Shader Type", "%s", apcShaderNames[ptMaterialComp->tShaderType]);

extensions/pl_material_ext.h

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -104,13 +104,17 @@ enum _plTextureSlot
104104
PL_TEXTURE_SLOT_EMISSIVE_MAP,
105105
PL_TEXTURE_SLOT_OCCLUSION_MAP,
106106
PL_TEXTURE_SLOT_METAL_ROUGHNESS_MAP,
107+
PL_TEXTURE_SLOT_CLEARCOAT_MAP,
108+
PL_TEXTURE_SLOT_CLEARCOAT_ROUGHNESS_MAP,
109+
PL_TEXTURE_SLOT_CLEARCOAT_NORMAL_MAP,
107110

108111
PL_TEXTURE_SLOT_COUNT
109112
};
110113

111114
enum _plShaderType
112115
{
113116
PL_SHADER_TYPE_PBR,
117+
PL_SHADER_TYPE_PBR_CLEARCOAT,
114118
PL_SHADER_TYPE_CUSTOM,
115119

116120
PL_SHADER_TYPE_COUNT
@@ -142,14 +146,16 @@ typedef struct _plTextureMap
142146

143147
typedef struct _plMaterialComponent
144148
{
145-
plMaterialFlags tFlags; // default: PL_MATERIAL_FLAG_CAST_SHADOW | PL_MATERIAL_FLAG_CAST_RECEIVE_SHADOW
146-
plShaderType tShaderType; // default: PL_SHADER_TYPE_PBR
147-
plBlendMode tBlendMode; // default: PL_BLEND_MODE_OPAQUE
148-
plVec4 tBaseColor; // default: {1.0f, 1.0f, 1.0f, 1.0f}
149-
plVec4 tEmissiveColor; // default: {0.0f, 0.0f, 0.0f, 0.0f}
150-
float fAlphaCutoff; // default: 0.5f
151-
float fRoughness; // default: 1.0f
152-
float fMetalness; // default: 1.0f
149+
plMaterialFlags tFlags; // default: PL_MATERIAL_FLAG_CAST_SHADOW | PL_MATERIAL_FLAG_CAST_RECEIVE_SHADOW
150+
plShaderType tShaderType; // default: PL_SHADER_TYPE_PBR
151+
plBlendMode tBlendMode; // default: PL_BLEND_MODE_OPAQUE
152+
plVec4 tBaseColor; // default: {1.0f, 1.0f, 1.0f, 1.0f}
153+
plVec4 tEmissiveColor; // default: {0.0f, 0.0f, 0.0f, 0.0f}
154+
float fAlphaCutoff; // default: 0.5f
155+
float fRoughness; // default: 1.0f
156+
float fMetalness; // default: 1.0f
157+
float fClearcoat; // default: 0.0f
158+
float fClearcoatRoughness; // default: 0.0f
153159
plTextureMap atTextureMaps[PL_TEXTURE_SLOT_COUNT];
154160
} plMaterialComponent;
155161

extensions/pl_model_loader_ext.c

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -487,7 +487,19 @@ pl__refr_load_material(const char* pcPath, const char* pcDirectory, plMaterialCo
487487

488488
if(ptGltfMaterial->pbr_metallic_roughness.metallic_roughness_texture.texture)
489489
pl__load_gltf_texture(pcPath, PL_TEXTURE_SLOT_METAL_ROUGHNESS_MAP, &ptGltfMaterial->pbr_metallic_roughness.metallic_roughness_texture, pcDirectory, ptGltfMaterial, ptMaterial);
490-
490+
}
491+
492+
if(ptGltfMaterial->has_clearcoat)
493+
{
494+
ptMaterial->tShaderType = PL_SHADER_TYPE_PBR_CLEARCOAT;
495+
ptMaterial->fClearcoat = ptGltfMaterial->clearcoat.clearcoat_factor;
496+
ptMaterial->fClearcoatRoughness = ptGltfMaterial->clearcoat.clearcoat_roughness_factor;
497+
if(ptGltfMaterial->clearcoat.clearcoat_texture.texture)
498+
pl__load_gltf_texture(pcPath, PL_TEXTURE_SLOT_CLEARCOAT_MAP, &ptGltfMaterial->clearcoat.clearcoat_texture, pcDirectory, ptGltfMaterial, ptMaterial);
499+
if(ptGltfMaterial->clearcoat.clearcoat_roughness_texture.texture)
500+
pl__load_gltf_texture(pcPath, PL_TEXTURE_SLOT_CLEARCOAT_ROUGHNESS_MAP, &ptGltfMaterial->clearcoat.clearcoat_roughness_texture, pcDirectory, ptGltfMaterial, ptMaterial);
501+
if(ptGltfMaterial->clearcoat.clearcoat_normal_texture.texture)
502+
pl__load_gltf_texture(pcPath, PL_TEXTURE_SLOT_CLEARCOAT_NORMAL_MAP, &ptGltfMaterial->clearcoat.clearcoat_normal_texture, pcDirectory, ptGltfMaterial, ptMaterial);
491503
}
492504
}
493505

extensions/pl_renderer_ext.c

Lines changed: 30 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1898,17 +1898,20 @@ pl_renderer_outline_entities(plScene* ptScene, uint32_t uCount, plEntity* atEnti
18981898
int aiForwardFragmentConstantData0[] = {
18991899
(int)ptMesh->ulVertexStreamMask,
19001900
iTextureMappingFlags,
1901-
PL_INFO_MATERIAL_METALLICROUGHNESS,
1901+
PL_MATERIAL_SHADER_FLAG_METALLIC_ROUGHNESS,
19021902
iObjectRenderingFlags,
19031903
pl_sb_capacity(ptScene->sbtLightData),
19041904
pl_sb_capacity(ptScene->sbtProbeData),
19051905
gptData->tRuntimeOptions.tShaderDebugMode
19061906
};
19071907

1908+
if(ptMaterial->tShaderType == PL_SHADER_TYPE_PBR_CLEARCOAT)
1909+
aiForwardFragmentConstantData0[2] |= PL_MATERIAL_SHADER_FLAG_CLEARCOAT;
1910+
19081911
int aiGBufferFragmentConstantData0[] = {
19091912
(int)ptMesh->ulVertexStreamMask,
19101913
iTextureMappingFlags,
1911-
PL_INFO_MATERIAL_METALLICROUGHNESS,
1914+
PL_MATERIAL_SHADER_FLAG_METALLIC_ROUGHNESS,
19121915
gptData->tRuntimeOptions.tShaderDebugMode,
19131916
iObjectRenderingFlags
19141917
};
@@ -3749,12 +3752,18 @@ pl_renderer_update_scene_materials(plScene* ptScene, uint32_t uMaterialCount, co
37493752
plTextureHandle tEmissiveTex = ptGPUMaterial->iEmissiveTexIdx == -1 ? gptData->tDummyTexture : gptResource->get_texture(ptMaterial->atTextureMaps[PL_TEXTURE_SLOT_EMISSIVE_MAP].tResource);
37503753
plTextureHandle tMetallicRoughnessTex = ptGPUMaterial->iMetallicRoughnessTexIdx == -1 ? gptData->tDummyTexture : gptResource->get_texture(ptMaterial->atTextureMaps[PL_TEXTURE_SLOT_METAL_ROUGHNESS_MAP].tResource);
37513754
plTextureHandle tOcclusionTex = ptGPUMaterial->iOcclusionTexIdx == -1 ? gptData->tDummyTexture : gptResource->get_texture(ptMaterial->atTextureMaps[PL_TEXTURE_SLOT_OCCLUSION_MAP].tResource);
3752-
3753-
ptGPUMaterial->iBaseColorTexIdx = (int)pl__renderer_get_bindless_texture_index(ptScene, tBaseColorTex);
3754-
ptGPUMaterial->iNormalTexIdx = (int)pl__renderer_get_bindless_texture_index(ptScene, tNormalTex);
3755-
ptGPUMaterial->iEmissiveTexIdx = (int)pl__renderer_get_bindless_texture_index(ptScene, tEmissiveTex);
3756-
ptGPUMaterial->iMetallicRoughnessTexIdx = (int)pl__renderer_get_bindless_texture_index(ptScene, tMetallicRoughnessTex);
3757-
ptGPUMaterial->iOcclusionTexIdx = (int)pl__renderer_get_bindless_texture_index(ptScene, tOcclusionTex);
3755+
plTextureHandle tClearcoatTex = ptGPUMaterial->iClearcoatTexIdx == -1 ? gptData->tDummyTexture : gptResource->get_texture(ptMaterial->atTextureMaps[PL_TEXTURE_SLOT_CLEARCOAT_MAP].tResource);
3756+
plTextureHandle tClearcoatRoughnessTex = ptGPUMaterial->iClearcoatRoughnessTexIdx == -1 ? gptData->tDummyTexture : gptResource->get_texture(ptMaterial->atTextureMaps[PL_TEXTURE_SLOT_CLEARCOAT_ROUGHNESS_MAP].tResource);
3757+
plTextureHandle tClearcoatNormalTex = ptGPUMaterial->iClearcoatNormalTexIdx == -1 ? gptData->tDummyTexture : gptResource->get_texture(ptMaterial->atTextureMaps[PL_TEXTURE_SLOT_CLEARCOAT_NORMAL_MAP].tResource);
3758+
3759+
ptGPUMaterial->iBaseColorTexIdx = (int)pl__renderer_get_bindless_texture_index(ptScene, tBaseColorTex);
3760+
ptGPUMaterial->iNormalTexIdx = (int)pl__renderer_get_bindless_texture_index(ptScene, tNormalTex);
3761+
ptGPUMaterial->iEmissiveTexIdx = (int)pl__renderer_get_bindless_texture_index(ptScene, tEmissiveTex);
3762+
ptGPUMaterial->iMetallicRoughnessTexIdx = (int)pl__renderer_get_bindless_texture_index(ptScene, tMetallicRoughnessTex);
3763+
ptGPUMaterial->iOcclusionTexIdx = (int)pl__renderer_get_bindless_texture_index(ptScene, tOcclusionTex);
3764+
ptGPUMaterial->iClearcoatTexIdx = (int)pl__renderer_get_bindless_texture_index(ptScene, tClearcoatTex);
3765+
ptGPUMaterial->iClearcoatRoughnessTexIdx = (int)pl__renderer_get_bindless_texture_index(ptScene, tClearcoatRoughnessTex);
3766+
ptGPUMaterial->iClearcoatNormalTexIdx = (int)pl__renderer_get_bindless_texture_index(ptScene, tClearcoatNormalTex);
37583767
}
37593768
}
37603769
ptScene->uGPUMaterialDirty = gptGfx->get_frames_in_flight();
@@ -3845,12 +3854,19 @@ pl_renderer_add_materials_to_scene(plScene* ptScene, uint32_t uMaterialCount, co
38453854
plTextureHandle tEmissiveTex = ptGPUMaterial->iEmissiveTexIdx == -1 ? gptData->tDummyTexture : gptResource->get_texture(ptMaterial->atTextureMaps[PL_TEXTURE_SLOT_EMISSIVE_MAP].tResource);
38463855
plTextureHandle tMetallicRoughnessTex = ptGPUMaterial->iMetallicRoughnessTexIdx == -1 ? gptData->tDummyTexture : gptResource->get_texture(ptMaterial->atTextureMaps[PL_TEXTURE_SLOT_METAL_ROUGHNESS_MAP].tResource);
38473856
plTextureHandle tOcclusionTex = ptGPUMaterial->iOcclusionTexIdx == -1 ? gptData->tDummyTexture : gptResource->get_texture(ptMaterial->atTextureMaps[PL_TEXTURE_SLOT_OCCLUSION_MAP].tResource);
3848-
3849-
ptGPUMaterial->iBaseColorTexIdx = (int)pl__renderer_get_bindless_texture_index(ptScene, tBaseColorTex);
3850-
ptGPUMaterial->iNormalTexIdx = (int)pl__renderer_get_bindless_texture_index(ptScene, tNormalTex);
3851-
ptGPUMaterial->iEmissiveTexIdx = (int)pl__renderer_get_bindless_texture_index(ptScene, tEmissiveTex);
3852-
ptGPUMaterial->iMetallicRoughnessTexIdx = (int)pl__renderer_get_bindless_texture_index(ptScene, tMetallicRoughnessTex);
3853-
ptGPUMaterial->iOcclusionTexIdx = (int)pl__renderer_get_bindless_texture_index(ptScene, tOcclusionTex);
3857+
plTextureHandle tClearcoatTex = ptGPUMaterial->iClearcoatTexIdx == -1 ? gptData->tDummyTexture : gptResource->get_texture(ptMaterial->atTextureMaps[PL_TEXTURE_SLOT_CLEARCOAT_MAP].tResource);
3858+
plTextureHandle tClearcoatRoughnessTex = ptGPUMaterial->iClearcoatRoughnessTexIdx == -1 ? gptData->tDummyTexture : gptResource->get_texture(ptMaterial->atTextureMaps[PL_TEXTURE_SLOT_CLEARCOAT_ROUGHNESS_MAP].tResource);
3859+
plTextureHandle tClearcoatNormalTex = ptGPUMaterial->iClearcoatNormalTexIdx == -1 ? gptData->tDummyTexture : gptResource->get_texture(ptMaterial->atTextureMaps[PL_TEXTURE_SLOT_CLEARCOAT_NORMAL_MAP].tResource);
3860+
3861+
ptGPUMaterial->iBaseColorTexIdx = (int)pl__renderer_get_bindless_texture_index(ptScene, tBaseColorTex);
3862+
ptGPUMaterial->iNormalTexIdx = (int)pl__renderer_get_bindless_texture_index(ptScene, tNormalTex);
3863+
ptGPUMaterial->iEmissiveTexIdx = (int)pl__renderer_get_bindless_texture_index(ptScene, tEmissiveTex);
3864+
ptGPUMaterial->iMetallicRoughnessTexIdx = (int)pl__renderer_get_bindless_texture_index(ptScene, tMetallicRoughnessTex);
3865+
ptGPUMaterial->iOcclusionTexIdx = (int)pl__renderer_get_bindless_texture_index(ptScene, tOcclusionTex);
3866+
ptGPUMaterial->iClearcoatTexIdx = (int)pl__renderer_get_bindless_texture_index(ptScene, tClearcoatTex);
3867+
ptGPUMaterial->iClearcoatRoughnessTexIdx = (int)pl__renderer_get_bindless_texture_index(ptScene, tClearcoatRoughnessTex);
3868+
ptGPUMaterial->iClearcoatNormalTexIdx = (int)pl__renderer_get_bindless_texture_index(ptScene, tClearcoatNormalTex);
3869+
38543870
pl_hm_insert(&ptScene->tMaterialHashmap, tMaterialComp.uData, ulValue);
38553871
}
38563872
}

extensions/pl_renderer_internal.c

Lines changed: 33 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2352,23 +2352,31 @@ pl__renderer_get_bindless_texture_index(plScene* ptScene, plTextureHandle tTextu
23522352
void
23532353
pl_material_fill_gpu_data(const plMaterialComponent* ptComp, plGpuMaterial* ptMaterial)
23542354
{
2355-
ptMaterial->fMetallicFactor = ptComp->fMetalness;
2356-
ptMaterial->fRoughnessFactor = ptComp->fRoughness;
2357-
ptMaterial->tBaseColorFactor = ptComp->tBaseColor;
2358-
ptMaterial->tEmissiveFactor = ptComp->tEmissiveColor.rgb;
2359-
ptMaterial->fAlphaCutoff = ptComp->fAlphaCutoff;
2360-
ptMaterial->fOcclusionStrength = 1.0f;
2361-
ptMaterial->fEmissiveStrength = 1.0f;
2362-
ptMaterial->iBaseColorUVSet = (int)ptComp->atTextureMaps[PL_TEXTURE_SLOT_BASE_COLOR_MAP].uUVSet;
2363-
ptMaterial->iNormalUVSet = (int)ptComp->atTextureMaps[PL_TEXTURE_SLOT_NORMAL_MAP].uUVSet;
2364-
ptMaterial->iEmissiveUVSet = (int)ptComp->atTextureMaps[PL_TEXTURE_SLOT_EMISSIVE_MAP].uUVSet;
2365-
ptMaterial->iOcclusionUVSet = (int)ptComp->atTextureMaps[PL_TEXTURE_SLOT_OCCLUSION_MAP].uUVSet;
2366-
ptMaterial->iMetallicRoughnessUVSet = (int)ptComp->atTextureMaps[PL_TEXTURE_SLOT_METAL_ROUGHNESS_MAP].uUVSet;
2367-
ptMaterial->iBaseColorTexIdx = gptResource->is_valid(ptComp->atTextureMaps[PL_TEXTURE_SLOT_BASE_COLOR_MAP].tResource) ? 0 : -1;
2368-
ptMaterial->iNormalTexIdx = gptResource->is_valid(ptComp->atTextureMaps[PL_TEXTURE_SLOT_NORMAL_MAP].tResource) ? 0 : -1;
2369-
ptMaterial->iEmissiveTexIdx = gptResource->is_valid(ptComp->atTextureMaps[PL_TEXTURE_SLOT_EMISSIVE_MAP].tResource) ? 0 : -1;
2370-
ptMaterial->iMetallicRoughnessTexIdx = gptResource->is_valid(ptComp->atTextureMaps[PL_TEXTURE_SLOT_METAL_ROUGHNESS_MAP].tResource) ? 0 : -1;
2371-
ptMaterial->iOcclusionTexIdx = gptResource->is_valid(ptComp->atTextureMaps[PL_TEXTURE_SLOT_OCCLUSION_MAP].tResource) ? 0 : -1;
2355+
ptMaterial->fMetallicFactor = ptComp->fMetalness;
2356+
ptMaterial->fRoughnessFactor = ptComp->fRoughness;
2357+
ptMaterial->tBaseColorFactor = ptComp->tBaseColor;
2358+
ptMaterial->tEmissiveFactor = ptComp->tEmissiveColor.rgb;
2359+
ptMaterial->fAlphaCutoff = ptComp->fAlphaCutoff;
2360+
ptMaterial->fClearcoatFactor = ptComp->fClearcoat;
2361+
ptMaterial->fClearcoatRoughnessFactor = ptComp->fClearcoatRoughness;
2362+
ptMaterial->fOcclusionStrength = 1.0f;
2363+
ptMaterial->fEmissiveStrength = 1.0f;
2364+
ptMaterial->iBaseColorUVSet = (int)ptComp->atTextureMaps[PL_TEXTURE_SLOT_BASE_COLOR_MAP].uUVSet;
2365+
ptMaterial->iNormalUVSet = (int)ptComp->atTextureMaps[PL_TEXTURE_SLOT_NORMAL_MAP].uUVSet;
2366+
ptMaterial->iEmissiveUVSet = (int)ptComp->atTextureMaps[PL_TEXTURE_SLOT_EMISSIVE_MAP].uUVSet;
2367+
ptMaterial->iOcclusionUVSet = (int)ptComp->atTextureMaps[PL_TEXTURE_SLOT_OCCLUSION_MAP].uUVSet;
2368+
ptMaterial->iMetallicRoughnessUVSet = (int)ptComp->atTextureMaps[PL_TEXTURE_SLOT_METAL_ROUGHNESS_MAP].uUVSet;
2369+
ptMaterial->iClearcoatUVSet = (int)ptComp->atTextureMaps[PL_TEXTURE_SLOT_CLEARCOAT_MAP].uUVSet;
2370+
ptMaterial->iClearcoatRoughnessUVSet = (int)ptComp->atTextureMaps[PL_TEXTURE_SLOT_CLEARCOAT_ROUGHNESS_MAP].uUVSet;
2371+
ptMaterial->iClearcoatNormalUVSet = (int)ptComp->atTextureMaps[PL_TEXTURE_SLOT_CLEARCOAT_NORMAL_MAP].uUVSet;
2372+
ptMaterial->iBaseColorTexIdx = gptResource->is_valid(ptComp->atTextureMaps[PL_TEXTURE_SLOT_BASE_COLOR_MAP].tResource) ? 0 : -1;
2373+
ptMaterial->iNormalTexIdx = gptResource->is_valid(ptComp->atTextureMaps[PL_TEXTURE_SLOT_NORMAL_MAP].tResource) ? 0 : -1;
2374+
ptMaterial->iEmissiveTexIdx = gptResource->is_valid(ptComp->atTextureMaps[PL_TEXTURE_SLOT_EMISSIVE_MAP].tResource) ? 0 : -1;
2375+
ptMaterial->iMetallicRoughnessTexIdx = gptResource->is_valid(ptComp->atTextureMaps[PL_TEXTURE_SLOT_METAL_ROUGHNESS_MAP].tResource) ? 0 : -1;
2376+
ptMaterial->iOcclusionTexIdx = gptResource->is_valid(ptComp->atTextureMaps[PL_TEXTURE_SLOT_OCCLUSION_MAP].tResource) ? 0 : -1;
2377+
ptMaterial->iClearcoatTexIdx = gptResource->is_valid(ptComp->atTextureMaps[PL_TEXTURE_SLOT_CLEARCOAT_MAP].tResource) ? 0 : -1;
2378+
ptMaterial->iClearcoatRoughnessTexIdx = gptResource->is_valid(ptComp->atTextureMaps[PL_TEXTURE_SLOT_CLEARCOAT_ROUGHNESS_MAP].tResource) ? 0 : -1;
2379+
ptMaterial->iClearcoatNormalTexIdx = gptResource->is_valid(ptComp->atTextureMaps[PL_TEXTURE_SLOT_CLEARCOAT_NORMAL_MAP].tResource) ? 0 : -1;
23722380
}
23732381

23742382
static uint32_t
@@ -3546,17 +3554,20 @@ pl__renderer_set_drawable_shaders(plScene* ptScene)
35463554
int aiForwardFragmentConstantData0[] = {
35473555
(int)ptMesh->ulVertexStreamMask,
35483556
iTextureMappingFlags,
3549-
PL_INFO_MATERIAL_METALLICROUGHNESS,
3557+
PL_MATERIAL_SHADER_FLAG_METALLIC_ROUGHNESS,
35503558
iObjectRenderingFlags,
35513559
pl_sb_capacity(ptScene->sbtLightData),
35523560
pl_sb_size(ptScene->sbtProbeData),
35533561
gptData->tRuntimeOptions.tShaderDebugMode
35543562
};
35553563

3564+
if(ptMaterial->tShaderType == PL_SHADER_TYPE_PBR_CLEARCOAT)
3565+
aiForwardFragmentConstantData0[2] |= PL_MATERIAL_SHADER_FLAG_CLEARCOAT;
3566+
35563567
int aiGBufferFragmentConstantData0[] = {
35573568
(int)ptMesh->ulVertexStreamMask,
35583569
iTextureMappingFlags,
3559-
PL_INFO_MATERIAL_METALLICROUGHNESS,
3570+
PL_MATERIAL_SHADER_FLAG_METALLIC_ROUGHNESS,
35603571
gptData->tRuntimeOptions.tShaderDebugMode,
35613572
iObjectRenderingFlags
35623573
};
@@ -3828,6 +3839,9 @@ pl__renderer_unstage_drawables(plScene* ptScene)
38283839
if(gptResource->is_valid(ptMaterial->atTextureMaps[PL_TEXTURE_SLOT_EMISSIVE_MAP].tResource))
38293840
bForward = true;
38303841

3842+
if(ptMaterial->tShaderType == PL_SHADER_TYPE_PBR_CLEARCOAT)
3843+
bForward = true;
3844+
38313845
if(bForward)
38323846
ptScene->sbtDrawables[i].tFlags = PL_DRAWABLE_FLAG_FORWARD;
38333847
else

0 commit comments

Comments
 (0)