From 3f3ff85a59b9ce68cfb9d9a5222bf7e050d966c1 Mon Sep 17 00:00:00 2001 From: Haroon Qureshi Date: Tue, 12 May 2026 04:40:39 -0700 Subject: [PATCH] Enable backface culling by default. Disable only for geom types that need it (planes and triangles). PiperOrigin-RevId: 914211570 Change-Id: Id95e32924122789111f561d922110128b3f56c77 --- src/experimental/filament/assets/pbr.mat | 1 - src/experimental/filament/assets/pbr_packed.mat | 1 - src/experimental/filament/assets/phong_2d.mat | 1 - src/experimental/filament/assets/phong_2d_fade.mat | 1 - src/experimental/filament/assets/phong_2d_reflect.mat | 1 - src/experimental/filament/assets/phong_2d_uv.mat | 1 - src/experimental/filament/assets/phong_2d_uv_fade.mat | 1 - .../filament/assets/phong_2d_uv_reflect.mat | 1 - src/experimental/filament/assets/phong_color.mat | 1 - src/experimental/filament/assets/phong_color_fade.mat | 1 - .../filament/assets/phong_color_reflect.mat | 1 - src/experimental/filament/assets/phong_cube.mat | 1 - src/experimental/filament/assets/phong_cube_fade.mat | 1 - .../filament/assets/phong_cube_reflect.mat | 1 - src/experimental/filament/assets/unlit_decor.mat | 1 - src/experimental/filament/assets/unlit_depth.mat | 1 - .../filament/assets/unlit_segmentation.mat | 1 - src/experimental/filament/filament/renderable.cc | 10 ++++++++++ src/experimental/filament/filament/renderable.h | 1 + src/experimental/filament/filament/scene_view.cc | 1 + 20 files changed, 12 insertions(+), 17 deletions(-) diff --git a/src/experimental/filament/assets/pbr.mat b/src/experimental/filament/assets/pbr.mat index 19855986..2c1611f4 100644 --- a/src/experimental/filament/assets/pbr.mat +++ b/src/experimental/filament/assets/pbr.mat @@ -15,7 +15,6 @@ material { name : pbr, shadingModel : lit, - culling: none, flipUV: false, parameters : [ { type : sampler2d, name : BaseColor }, diff --git a/src/experimental/filament/assets/pbr_packed.mat b/src/experimental/filament/assets/pbr_packed.mat index 252af662..8626bf3e 100644 --- a/src/experimental/filament/assets/pbr_packed.mat +++ b/src/experimental/filament/assets/pbr_packed.mat @@ -15,7 +15,6 @@ material { name : pbr_packed, shadingModel : lit, - culling: none, flipUV: false, parameters : [ { type : sampler2d, name : BaseColor }, diff --git a/src/experimental/filament/assets/phong_2d.mat b/src/experimental/filament/assets/phong_2d.mat index df4788cc..e3aacba5 100644 --- a/src/experimental/filament/assets/phong_2d.mat +++ b/src/experimental/filament/assets/phong_2d.mat @@ -15,7 +15,6 @@ material { name : phong_2d, shadingModel : specularGlossiness, - culling : none, flipUV : false, parameters : [ { type : float4, name : BaseColorFactor }, diff --git a/src/experimental/filament/assets/phong_2d_fade.mat b/src/experimental/filament/assets/phong_2d_fade.mat index 15c18d73..2c934425 100644 --- a/src/experimental/filament/assets/phong_2d_fade.mat +++ b/src/experimental/filament/assets/phong_2d_fade.mat @@ -15,7 +15,6 @@ material { name : phong_2d_fade, shadingModel : specularGlossiness, - culling : none, flipUV : false, blending: fade, parameters : [ diff --git a/src/experimental/filament/assets/phong_2d_reflect.mat b/src/experimental/filament/assets/phong_2d_reflect.mat index 94dd2a0e..63a2c640 100644 --- a/src/experimental/filament/assets/phong_2d_reflect.mat +++ b/src/experimental/filament/assets/phong_2d_reflect.mat @@ -15,7 +15,6 @@ material { name : phong_2d_reflect, shadingModel : specularGlossiness, - culling : none, flipUV : false, parameters : [ { type : float4, name : BaseColorFactor }, diff --git a/src/experimental/filament/assets/phong_2d_uv.mat b/src/experimental/filament/assets/phong_2d_uv.mat index cad22805..7641564a 100644 --- a/src/experimental/filament/assets/phong_2d_uv.mat +++ b/src/experimental/filament/assets/phong_2d_uv.mat @@ -15,7 +15,6 @@ material { name : phong_2d_uv, shadingModel : specularGlossiness, - culling : none, flipUV : false, parameters : [ { type : float4, name : BaseColorFactor }, diff --git a/src/experimental/filament/assets/phong_2d_uv_fade.mat b/src/experimental/filament/assets/phong_2d_uv_fade.mat index 83464418..96430d08 100644 --- a/src/experimental/filament/assets/phong_2d_uv_fade.mat +++ b/src/experimental/filament/assets/phong_2d_uv_fade.mat @@ -15,7 +15,6 @@ material { name : phong_2d_uv_fade, shadingModel : specularGlossiness, - culling : none, flipUV : false, blending: fade, parameters : [ diff --git a/src/experimental/filament/assets/phong_2d_uv_reflect.mat b/src/experimental/filament/assets/phong_2d_uv_reflect.mat index 51ace511..8843be8f 100644 --- a/src/experimental/filament/assets/phong_2d_uv_reflect.mat +++ b/src/experimental/filament/assets/phong_2d_uv_reflect.mat @@ -15,7 +15,6 @@ material { name : phong_2d_uv_reflect, shadingModel : specularGlossiness, - culling : none, flipUV : false, parameters : [ { type : float4, name : BaseColorFactor }, diff --git a/src/experimental/filament/assets/phong_color.mat b/src/experimental/filament/assets/phong_color.mat index beaec101..778c6ab6 100644 --- a/src/experimental/filament/assets/phong_color.mat +++ b/src/experimental/filament/assets/phong_color.mat @@ -15,7 +15,6 @@ material { name : phong_color, shadingModel : specularGlossiness, - culling: none, parameters : [ { type : float4, name : BaseColorFactor }, { type : float, name : SpecularFactor }, diff --git a/src/experimental/filament/assets/phong_color_fade.mat b/src/experimental/filament/assets/phong_color_fade.mat index 2fd0721a..34fd8c42 100644 --- a/src/experimental/filament/assets/phong_color_fade.mat +++ b/src/experimental/filament/assets/phong_color_fade.mat @@ -15,7 +15,6 @@ material { name : phong_color_fade, shadingModel : specularGlossiness, - culling: none, blending: fade, parameters : [ { type : float4, name : BaseColorFactor }, diff --git a/src/experimental/filament/assets/phong_color_reflect.mat b/src/experimental/filament/assets/phong_color_reflect.mat index 80b7e09d..1bd3bee0 100644 --- a/src/experimental/filament/assets/phong_color_reflect.mat +++ b/src/experimental/filament/assets/phong_color_reflect.mat @@ -15,7 +15,6 @@ material { name : phong_color_reflect, shadingModel : specularGlossiness, - culling: none, parameters : [ { type : float4, name : BaseColorFactor }, { type : float, name : SpecularFactor }, diff --git a/src/experimental/filament/assets/phong_cube.mat b/src/experimental/filament/assets/phong_cube.mat index 0a39c3c6..5240ef1d 100644 --- a/src/experimental/filament/assets/phong_cube.mat +++ b/src/experimental/filament/assets/phong_cube.mat @@ -15,7 +15,6 @@ material { name : phong_cube, shadingModel : specularGlossiness, - culling : none, flipUV : false, parameters : [ { type : float4, name : BaseColorFactor }, diff --git a/src/experimental/filament/assets/phong_cube_fade.mat b/src/experimental/filament/assets/phong_cube_fade.mat index dec2b3af..4f42711d 100644 --- a/src/experimental/filament/assets/phong_cube_fade.mat +++ b/src/experimental/filament/assets/phong_cube_fade.mat @@ -15,7 +15,6 @@ material { name : phong_cube_fade, shadingModel : specularGlossiness, - culling : none, flipUV : false, blending: fade, parameters : [ diff --git a/src/experimental/filament/assets/phong_cube_reflect.mat b/src/experimental/filament/assets/phong_cube_reflect.mat index c4f02ac0..c575246c 100644 --- a/src/experimental/filament/assets/phong_cube_reflect.mat +++ b/src/experimental/filament/assets/phong_cube_reflect.mat @@ -15,7 +15,6 @@ material { name : phong_cube_reflect, shadingModel : specularGlossiness, - culling : none, flipUV : false, parameters : [ { type : float4, name : BaseColorFactor }, diff --git a/src/experimental/filament/assets/unlit_decor.mat b/src/experimental/filament/assets/unlit_decor.mat index 73a08e50..d9cd4aff 100644 --- a/src/experimental/filament/assets/unlit_decor.mat +++ b/src/experimental/filament/assets/unlit_decor.mat @@ -15,7 +15,6 @@ material { name : unlit_decor, shadingModel : unlit, - culling: none, parameters : [ { type : float4, name : BaseColorFactor } ] diff --git a/src/experimental/filament/assets/unlit_depth.mat b/src/experimental/filament/assets/unlit_depth.mat index 681319d8..d3f35604 100644 --- a/src/experimental/filament/assets/unlit_depth.mat +++ b/src/experimental/filament/assets/unlit_depth.mat @@ -16,7 +16,6 @@ material { name : unlit_depth, shadingModel : unlit, blending : opaque, - culling: none, depthWrite: true } diff --git a/src/experimental/filament/assets/unlit_segmentation.mat b/src/experimental/filament/assets/unlit_segmentation.mat index b57aca03..1fb6c1b5 100644 --- a/src/experimental/filament/assets/unlit_segmentation.mat +++ b/src/experimental/filament/assets/unlit_segmentation.mat @@ -15,7 +15,6 @@ material { name : unlit_segmentation, shadingModel : unlit, - culling: none, parameters : [ { type : float4, name : SegmentationColor } ] diff --git a/src/experimental/filament/filament/renderable.cc b/src/experimental/filament/filament/renderable.cc index 7597182a..ddd45503 100644 --- a/src/experimental/filament/filament/renderable.cc +++ b/src/experimental/filament/filament/renderable.cc @@ -77,6 +77,11 @@ void Renderable::SetMesh(const Mesh* mesh, int elem_offset, int elem_count) { if (mesh == nullptr) { mju_error("Cannot set mesh to nullptr."); } + + // We use MESH, even though it could be any mesh-like geom type, e.g. + // heightfields, flex, skin, sdf, etc. + geom_type_ = mjGEOM_MESH; + filament::VertexBuffer* vertex_buffer = mesh->GetFilamentVertexBuffer(); if (vertex_buffer == nullptr) { mju_error("Invalid (null) vertex buffer."); @@ -234,6 +239,10 @@ void Renderable::AssignMaterial(mjrDrawMode mode, } if (material) { instances_[index] = material->createInstance(); + if (geom_type_ == mjGEOM_PLANE || geom_type_ == mjGEOM_TRIANGLE) { + instances_[index]->setCullingMode( + filament::MaterialInstance::CullingMode::NONE); + } } } @@ -407,6 +416,7 @@ ObjectManager::MaterialType Renderable::GetColorMaterialType() const { void Renderable::SetGeomMesh(mjtGeom type, int nstack, int nslice, int nquad) { Builtins* builtins = object_mgr_->GetBuiltins(nstack, nslice, nquad); + geom_type_ = type; switch (type) { case mjGEOM_PLANE: diff --git a/src/experimental/filament/filament/renderable.h b/src/experimental/filament/filament/renderable.h index dfed9db0..3d7707da 100644 --- a/src/experimental/filament/filament/renderable.h +++ b/src/experimental/filament/filament/renderable.h @@ -130,6 +130,7 @@ class Renderable : public mjrRenderable { ObjectManager* object_mgr_; mjrRenderableParams params_; filament::MaterialInstance* instances_[mjNUM_DRAW_MODES] = {nullptr}; + mjtGeom geom_type_ = mjGEOM_NONE; mjrMaterial material_; mjrDrawMode draw_mode_ = mjDRAW_MODE_COLOR; filament::Scene* assigned_scene_ = nullptr; diff --git a/src/experimental/filament/filament/scene_view.cc b/src/experimental/filament/filament/scene_view.cc index 3622f0ab..d7ff12e6 100644 --- a/src/experimental/filament/filament/scene_view.cc +++ b/src/experimental/filament/filament/scene_view.cc @@ -141,6 +141,7 @@ SceneView::SceneView(FilamentContext* ctx, const mjrSceneParams& params) reflect_view_->setCamera(reflect_camera_); reflect_view_->setShadowingEnabled(false); reflect_view_->setPostProcessingEnabled(false); + reflect_view_->setFrontFaceWindingInverted(true); reflect_view_->setVisibleLayers(0xff, params.reflection_layer_mask); // Disable post processing for the depth and segmentation views to preserve