Skip to content

Commit 3c3bea2

Browse files
committed
WIP
1 parent bdf7f01 commit 3c3bea2

14 files changed

Lines changed: 470 additions & 188 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: 8 additions & 5 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;
@@ -1258,7 +1261,7 @@ pl__create_scene(plAppData* ptAppData)
12581261
plEnvironmentProbeComponent* ptProbe = nullptr;
12591262
gptRenderer->create_environment_probe(ptAppData->ptCompLibrary, "Main Probe", pl_create_vec3(0.0f, 3.0f, 0.0f), &ptProbe);
12601263
ptProbe->fRange = 30.0f;
1261-
ptProbe->uResolution = 128;
1264+
ptProbe->uResolution = 128 * 4;
12621265
ptProbe->tFlags |= PL_ENVIRONMENT_PROBE_FLAGS_INCLUDE_SKY;
12631266

12641267
}

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
};
@@ -3750,12 +3753,18 @@ pl_renderer_update_scene_materials(plScene* ptScene, uint32_t uMaterialCount, co
37503753
plTextureHandle tEmissiveTex = ptGPUMaterial->iEmissiveTexIdx == -1 ? gptData->tDummyTexture : gptResource->get_texture(ptMaterial->atTextureMaps[PL_TEXTURE_SLOT_EMISSIVE_MAP].tResource);
37513754
plTextureHandle tMetallicRoughnessTex = ptGPUMaterial->iMetallicRoughnessTexIdx == -1 ? gptData->tDummyTexture : gptResource->get_texture(ptMaterial->atTextureMaps[PL_TEXTURE_SLOT_METAL_ROUGHNESS_MAP].tResource);
37523755
plTextureHandle tOcclusionTex = ptGPUMaterial->iOcclusionTexIdx == -1 ? gptData->tDummyTexture : gptResource->get_texture(ptMaterial->atTextureMaps[PL_TEXTURE_SLOT_OCCLUSION_MAP].tResource);
3753-
3754-
ptGPUMaterial->iBaseColorTexIdx = (int)pl__renderer_get_bindless_texture_index(ptScene, tBaseColorTex);
3755-
ptGPUMaterial->iNormalTexIdx = (int)pl__renderer_get_bindless_texture_index(ptScene, tNormalTex);
3756-
ptGPUMaterial->iEmissiveTexIdx = (int)pl__renderer_get_bindless_texture_index(ptScene, tEmissiveTex);
3757-
ptGPUMaterial->iMetallicRoughnessTexIdx = (int)pl__renderer_get_bindless_texture_index(ptScene, tMetallicRoughnessTex);
3758-
ptGPUMaterial->iOcclusionTexIdx = (int)pl__renderer_get_bindless_texture_index(ptScene, tOcclusionTex);
3756+
plTextureHandle tClearcoatTex = ptGPUMaterial->iClearcoatTexIdx == -1 ? gptData->tDummyTexture : gptResource->get_texture(ptMaterial->atTextureMaps[PL_TEXTURE_SLOT_CLEARCOAT_MAP].tResource);
3757+
plTextureHandle tClearcoatRoughnessTex = ptGPUMaterial->iClearcoatRoughnessTexIdx == -1 ? gptData->tDummyTexture : gptResource->get_texture(ptMaterial->atTextureMaps[PL_TEXTURE_SLOT_CLEARCOAT_ROUGHNESS_MAP].tResource);
3758+
plTextureHandle tClearcoatNormalTex = ptGPUMaterial->iClearcoatNormalTexIdx == -1 ? gptData->tDummyTexture : gptResource->get_texture(ptMaterial->atTextureMaps[PL_TEXTURE_SLOT_CLEARCOAT_NORMAL_MAP].tResource);
3759+
3760+
ptGPUMaterial->iBaseColorTexIdx = (int)pl__renderer_get_bindless_texture_index(ptScene, tBaseColorTex);
3761+
ptGPUMaterial->iNormalTexIdx = (int)pl__renderer_get_bindless_texture_index(ptScene, tNormalTex);
3762+
ptGPUMaterial->iEmissiveTexIdx = (int)pl__renderer_get_bindless_texture_index(ptScene, tEmissiveTex);
3763+
ptGPUMaterial->iMetallicRoughnessTexIdx = (int)pl__renderer_get_bindless_texture_index(ptScene, tMetallicRoughnessTex);
3764+
ptGPUMaterial->iOcclusionTexIdx = (int)pl__renderer_get_bindless_texture_index(ptScene, tOcclusionTex);
3765+
ptGPUMaterial->iClearcoatTexIdx = (int)pl__renderer_get_bindless_texture_index(ptScene, tClearcoatTex);
3766+
ptGPUMaterial->iClearcoatRoughnessTexIdx = (int)pl__renderer_get_bindless_texture_index(ptScene, tClearcoatRoughnessTex);
3767+
ptGPUMaterial->iClearcoatNormalTexIdx = (int)pl__renderer_get_bindless_texture_index(ptScene, tClearcoatNormalTex);
37593768
}
37603769
}
37613770
ptScene->uGPUMaterialDirty = gptGfx->get_frames_in_flight();
@@ -3846,12 +3855,19 @@ pl_renderer_add_materials_to_scene(plScene* ptScene, uint32_t uMaterialCount, co
38463855
plTextureHandle tEmissiveTex = ptGPUMaterial->iEmissiveTexIdx == -1 ? gptData->tDummyTexture : gptResource->get_texture(ptMaterial->atTextureMaps[PL_TEXTURE_SLOT_EMISSIVE_MAP].tResource);
38473856
plTextureHandle tMetallicRoughnessTex = ptGPUMaterial->iMetallicRoughnessTexIdx == -1 ? gptData->tDummyTexture : gptResource->get_texture(ptMaterial->atTextureMaps[PL_TEXTURE_SLOT_METAL_ROUGHNESS_MAP].tResource);
38483857
plTextureHandle tOcclusionTex = ptGPUMaterial->iOcclusionTexIdx == -1 ? gptData->tDummyTexture : gptResource->get_texture(ptMaterial->atTextureMaps[PL_TEXTURE_SLOT_OCCLUSION_MAP].tResource);
3849-
3850-
ptGPUMaterial->iBaseColorTexIdx = (int)pl__renderer_get_bindless_texture_index(ptScene, tBaseColorTex);
3851-
ptGPUMaterial->iNormalTexIdx = (int)pl__renderer_get_bindless_texture_index(ptScene, tNormalTex);
3852-
ptGPUMaterial->iEmissiveTexIdx = (int)pl__renderer_get_bindless_texture_index(ptScene, tEmissiveTex);
3853-
ptGPUMaterial->iMetallicRoughnessTexIdx = (int)pl__renderer_get_bindless_texture_index(ptScene, tMetallicRoughnessTex);
3854-
ptGPUMaterial->iOcclusionTexIdx = (int)pl__renderer_get_bindless_texture_index(ptScene, tOcclusionTex);
3858+
plTextureHandle tClearcoatTex = ptGPUMaterial->iClearcoatTexIdx == -1 ? gptData->tDummyTexture : gptResource->get_texture(ptMaterial->atTextureMaps[PL_TEXTURE_SLOT_CLEARCOAT_MAP].tResource);
3859+
plTextureHandle tClearcoatRoughnessTex = ptGPUMaterial->iClearcoatRoughnessTexIdx == -1 ? gptData->tDummyTexture : gptResource->get_texture(ptMaterial->atTextureMaps[PL_TEXTURE_SLOT_CLEARCOAT_ROUGHNESS_MAP].tResource);
3860+
plTextureHandle tClearcoatNormalTex = ptGPUMaterial->iClearcoatNormalTexIdx == -1 ? gptData->tDummyTexture : gptResource->get_texture(ptMaterial->atTextureMaps[PL_TEXTURE_SLOT_CLEARCOAT_NORMAL_MAP].tResource);
3861+
3862+
ptGPUMaterial->iBaseColorTexIdx = (int)pl__renderer_get_bindless_texture_index(ptScene, tBaseColorTex);
3863+
ptGPUMaterial->iNormalTexIdx = (int)pl__renderer_get_bindless_texture_index(ptScene, tNormalTex);
3864+
ptGPUMaterial->iEmissiveTexIdx = (int)pl__renderer_get_bindless_texture_index(ptScene, tEmissiveTex);
3865+
ptGPUMaterial->iMetallicRoughnessTexIdx = (int)pl__renderer_get_bindless_texture_index(ptScene, tMetallicRoughnessTex);
3866+
ptGPUMaterial->iOcclusionTexIdx = (int)pl__renderer_get_bindless_texture_index(ptScene, tOcclusionTex);
3867+
ptGPUMaterial->iClearcoatTexIdx = (int)pl__renderer_get_bindless_texture_index(ptScene, tClearcoatTex);
3868+
ptGPUMaterial->iClearcoatRoughnessTexIdx = (int)pl__renderer_get_bindless_texture_index(ptScene, tClearcoatRoughnessTex);
3869+
ptGPUMaterial->iClearcoatNormalTexIdx = (int)pl__renderer_get_bindless_texture_index(ptScene, tClearcoatNormalTex);
3870+
38553871
pl_hm_insert(&ptScene->tMaterialHashmap, tMaterialComp.uData, ulValue);
38563872
}
38573873
}

0 commit comments

Comments
 (0)