Expose Renderable settings in mjrRenderableParams.
PiperOrigin-RevId: 908587103 Change-Id: Ic0e19a7fb3535bf32782b85d2da0049ec4ac8ec7
This commit is contained in:
committed by
Copybara-Service
parent
0399bfd058
commit
ee3ac5b349
@@ -85,6 +85,8 @@ SceneBridge::SceneBridge(FilamentContext* ctx, const mjModel* model)
|
|||||||
: ctx_(ctx) {
|
: ctx_(ctx) {
|
||||||
mjrSceneParams params;
|
mjrSceneParams params;
|
||||||
mjr_defaultSceneParams(¶ms);
|
mjr_defaultSceneParams(¶ms);
|
||||||
|
params.layer_mask = mjCAT_ALL;
|
||||||
|
params.reflection_layer_mask = mjCAT_DYNAMIC | mjCAT_STATIC;
|
||||||
scene_view_ = std::make_unique<SceneView>(ctx_, params);
|
scene_view_ = std::make_unique<SceneView>(ctx_, params);
|
||||||
model_objects_ = std::make_unique<ModelObjects>(model, ctx_);
|
model_objects_ = std::make_unique<ModelObjects>(model, ctx_);
|
||||||
|
|
||||||
|
|||||||
@@ -122,11 +122,11 @@ void Renderable::InitPartEntity(Part& part) {
|
|||||||
if (instances_[static_cast<int>(draw_mode_)] != nullptr) {
|
if (instances_[static_cast<int>(draw_mode_)] != nullptr) {
|
||||||
builder.material(0, instances_[static_cast<int>(draw_mode_)]);
|
builder.material(0, instances_[static_cast<int>(draw_mode_)]);
|
||||||
}
|
}
|
||||||
builder.castShadows(cast_shadows_);
|
builder.castShadows(params_.cast_shadows);
|
||||||
builder.receiveShadows(receive_shadows_);
|
builder.receiveShadows(params_.receive_shadows);
|
||||||
builder.layerMask(0xff, layer_mask_);
|
builder.layerMask(0xff, params_.layer_mask);
|
||||||
builder.priority(priority_);
|
builder.priority(params_.priority);
|
||||||
builder.blendOrder(0, blend_order_);
|
builder.blendOrder(0, params_.blend_order);
|
||||||
builder.screenSpaceContactShadows(true);
|
builder.screenSpaceContactShadows(true);
|
||||||
|
|
||||||
builder.build(*GetEngine(), part.entity);
|
builder.build(*GetEngine(), part.entity);
|
||||||
@@ -264,62 +264,62 @@ void Renderable::SetDrawMode(mjrDrawMode mode) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::uint8_t Renderable::SetLayerMask(std::uint8_t mask) {
|
std::uint8_t Renderable::SetLayerMask(std::uint8_t mask) {
|
||||||
std::uint8_t prev = layer_mask_;
|
std::uint8_t prev = params_.layer_mask;
|
||||||
if (mask != layer_mask_) {
|
if (mask != params_.layer_mask) {
|
||||||
layer_mask_ = mask;
|
params_.layer_mask = mask;
|
||||||
|
|
||||||
filament::RenderableManager& rm = GetEngine()->getRenderableManager();
|
filament::RenderableManager& rm = GetEngine()->getRenderableManager();
|
||||||
for (Part& part : parts_) {
|
for (Part& part : parts_) {
|
||||||
rm.setLayerMask(rm.getInstance(part.entity), 0xff, layer_mask_);
|
rm.setLayerMask(rm.getInstance(part.entity), 0xff, params_.layer_mask);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return prev;
|
return prev;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::uint8_t Renderable::SetPriority(std::uint8_t priority) {
|
std::uint8_t Renderable::SetPriority(std::uint8_t priority) {
|
||||||
std::uint8_t prev = priority_;
|
std::uint8_t prev = params_.priority;
|
||||||
if (priority != priority_) {
|
if (priority != params_.priority) {
|
||||||
priority_ = priority;
|
params_.priority = priority;
|
||||||
|
|
||||||
filament::RenderableManager& rm = GetEngine()->getRenderableManager();
|
filament::RenderableManager& rm = GetEngine()->getRenderableManager();
|
||||||
for (Part& part : parts_) {
|
for (Part& part : parts_) {
|
||||||
rm.setPriority(rm.getInstance(part.entity), priority_);
|
rm.setPriority(rm.getInstance(part.entity), params_.priority);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return prev;
|
return prev;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::uint16_t Renderable::SetBlendOrder(std::uint16_t blend_order) {
|
std::uint16_t Renderable::SetBlendOrder(std::uint16_t blend_order) {
|
||||||
std::uint16_t prev = blend_order_;
|
std::uint16_t prev = params_.blend_order;
|
||||||
if (blend_order != blend_order_) {
|
if (blend_order != params_.blend_order) {
|
||||||
blend_order_ = blend_order;
|
params_.blend_order = blend_order;
|
||||||
|
|
||||||
filament::RenderableManager& rm = GetEngine()->getRenderableManager();
|
filament::RenderableManager& rm = GetEngine()->getRenderableManager();
|
||||||
for (Part& part : parts_) {
|
for (Part& part : parts_) {
|
||||||
rm.setBlendOrderAt(rm.getInstance(part.entity), 0, blend_order_);
|
rm.setBlendOrderAt(rm.getInstance(part.entity), 0, params_.blend_order);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return prev;
|
return prev;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Renderable::SetCastShadows(bool cast_shadows) {
|
void Renderable::SetCastShadows(bool cast_shadows) {
|
||||||
if (cast_shadows_ != cast_shadows) {
|
if (params_.cast_shadows != cast_shadows) {
|
||||||
cast_shadows_ = cast_shadows;
|
params_.cast_shadows = cast_shadows;
|
||||||
|
|
||||||
filament::RenderableManager& rm = GetEngine()->getRenderableManager();
|
filament::RenderableManager& rm = GetEngine()->getRenderableManager();
|
||||||
for (Part& part : parts_) {
|
for (Part& part : parts_) {
|
||||||
rm.setCastShadows(rm.getInstance(part.entity), cast_shadows_);
|
rm.setCastShadows(rm.getInstance(part.entity), params_.cast_shadows);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Renderable::SetReceiveShadows(bool receive_shadows) {
|
void Renderable::SetReceiveShadows(bool receive_shadows) {
|
||||||
if (receive_shadows_ != receive_shadows) {
|
if (params_.receive_shadows != receive_shadows) {
|
||||||
receive_shadows_ = receive_shadows;
|
params_.receive_shadows = receive_shadows;
|
||||||
|
|
||||||
filament::RenderableManager& rm = GetEngine()->getRenderableManager();
|
filament::RenderableManager& rm = GetEngine()->getRenderableManager();
|
||||||
for (Part& part : parts_) {
|
for (Part& part : parts_) {
|
||||||
rm.setReceiveShadows(rm.getInstance(part.entity), receive_shadows_);
|
rm.setReceiveShadows(rm.getInstance(part.entity), params_.receive_shadows);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,10 +48,6 @@ namespace mujoco {
|
|||||||
// of the Renderable.
|
// of the Renderable.
|
||||||
class Renderable : public mjrRenderable {
|
class Renderable : public mjrRenderable {
|
||||||
public:
|
public:
|
||||||
// Default filament values for priority and layer mask.
|
|
||||||
static constexpr std::uint8_t kDefaultPriority = 4;
|
|
||||||
static constexpr std::uint8_t kDefaultLayerMask = 0x01;
|
|
||||||
|
|
||||||
Renderable(FilamentContext* ctx, const mjrRenderableParams& params);
|
Renderable(FilamentContext* ctx, const mjrRenderableParams& params);
|
||||||
~Renderable() noexcept;
|
~Renderable() noexcept;
|
||||||
|
|
||||||
@@ -155,12 +151,7 @@ class Renderable : public mjrRenderable {
|
|||||||
std::vector<Part> parts_;
|
std::vector<Part> parts_;
|
||||||
filament::math::mat4f transform_;
|
filament::math::mat4f transform_;
|
||||||
GetTransformFn get_transform_fn_;
|
GetTransformFn get_transform_fn_;
|
||||||
std::uint8_t priority_ = kDefaultPriority;
|
|
||||||
std::uint8_t layer_mask_ = kDefaultLayerMask;
|
|
||||||
std::uint16_t blend_order_ = 0;
|
|
||||||
bool wireframe_ = false;
|
bool wireframe_ = false;
|
||||||
bool cast_shadows_ = true;
|
|
||||||
bool receive_shadows_ = true;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace mujoco
|
} // namespace mujoco
|
||||||
|
|||||||
@@ -132,7 +132,7 @@ SceneView::SceneView(FilamentContext* ctx, const mjrSceneParams& params)
|
|||||||
view = engine->createView();
|
view = engine->createView();
|
||||||
view->setScene(scene_);
|
view->setScene(scene_);
|
||||||
view->setCamera(camera_);
|
view->setCamera(camera_);
|
||||||
view->setVisibleLayers(0xff, mjCAT_ALL);
|
view->setVisibleLayers(0xff, params.layer_mask);
|
||||||
}
|
}
|
||||||
|
|
||||||
reflect_view_ = engine->createView();
|
reflect_view_ = engine->createView();
|
||||||
@@ -140,7 +140,7 @@ SceneView::SceneView(FilamentContext* ctx, const mjrSceneParams& params)
|
|||||||
reflect_view_->setCamera(reflect_camera_);
|
reflect_view_->setCamera(reflect_camera_);
|
||||||
reflect_view_->setShadowingEnabled(false);
|
reflect_view_->setShadowingEnabled(false);
|
||||||
reflect_view_->setPostProcessingEnabled(false);
|
reflect_view_->setPostProcessingEnabled(false);
|
||||||
reflect_view_->setVisibleLayers(0xff, mjCAT_DYNAMIC | mjCAT_STATIC);
|
reflect_view_->setVisibleLayers(0xff, params.reflection_layer_mask);
|
||||||
|
|
||||||
// Disable post processing for the depth and segmentation views to preserve
|
// Disable post processing for the depth and segmentation views to preserve
|
||||||
// the values.
|
// the values.
|
||||||
|
|||||||
@@ -67,6 +67,8 @@ void mjr_defaultSceneParams(mjrSceneParams* params) {
|
|||||||
params->enable_post_processing = true;
|
params->enable_post_processing = true;
|
||||||
params->enable_reflections = true;
|
params->enable_reflections = true;
|
||||||
params->enable_shadows = true;
|
params->enable_shadows = true;
|
||||||
|
params->layer_mask = 0xff;
|
||||||
|
params->reflection_layer_mask = 0xff;
|
||||||
}
|
}
|
||||||
|
|
||||||
void mjr_defaultLightParams(mjrLightParams* params) {
|
void mjr_defaultLightParams(mjrLightParams* params) {
|
||||||
@@ -113,6 +115,11 @@ void mjr_defaultMaterialParams(mjrMaterialParams* params) {
|
|||||||
|
|
||||||
void mjr_defaultRenderableParams(mjrRenderableParams* params) {
|
void mjr_defaultRenderableParams(mjrRenderableParams* params) {
|
||||||
params->shading_model = mjSHADING_MODEL_SCENE_OBJECT;
|
params->shading_model = mjSHADING_MODEL_SCENE_OBJECT;
|
||||||
|
params->cast_shadows = true;
|
||||||
|
params->receive_shadows = true;
|
||||||
|
params->layer_mask = 0x01;
|
||||||
|
params->priority = 4;
|
||||||
|
params->blend_order = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void mjr_defaultRenderTargetConfig(mjrRenderTargetConfig* config) {
|
void mjr_defaultRenderTargetConfig(mjrRenderTargetConfig* config) {
|
||||||
|
|||||||
@@ -206,6 +206,20 @@ void mjr_defaultTextureConfig(mjrTextureConfig* config);
|
|||||||
struct mjrRenderableParams {
|
struct mjrRenderableParams {
|
||||||
// The shading model to use for the Renderable.
|
// The shading model to use for the Renderable.
|
||||||
mjrShadingModel shading_model;
|
mjrShadingModel shading_model;
|
||||||
|
// Whether or not the Renderable casts shadows.
|
||||||
|
mjtByte cast_shadows;
|
||||||
|
// Whether or not the Renderable receives shadows.
|
||||||
|
mjtByte receive_shadows;
|
||||||
|
// The layers to which the Renderable belongs. This mask is used in
|
||||||
|
// conjunction with the layer mask in the Scene to determine which
|
||||||
|
// Renderables to render. Defaults to 0xff.
|
||||||
|
uint8_t layer_mask;
|
||||||
|
// Controls the order in which the Renderable is drawn relative to other
|
||||||
|
// Renderables; defaults to 4.
|
||||||
|
uint8_t priority;
|
||||||
|
// Similar to priority, but provides finer-grained control for Renderables
|
||||||
|
// with transparency; defaults to 0.
|
||||||
|
uint16_t blend_order;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Initializes the mjrRenderableParams to default values.
|
// Initializes the mjrRenderableParams to default values.
|
||||||
@@ -292,6 +306,11 @@ struct mjrSceneParams {
|
|||||||
mjtByte enable_reflections;
|
mjtByte enable_reflections;
|
||||||
// Whether or not to enable shadows; enabled by default.
|
// Whether or not to enable shadows; enabled by default.
|
||||||
mjtByte enable_shadows;
|
mjtByte enable_shadows;
|
||||||
|
// This mask, in conjunction with the layer mask in the Renderable, determines
|
||||||
|
// which Renderables to render within the Scene.
|
||||||
|
uint8_t layer_mask;
|
||||||
|
// The layer mask to use for reflections.
|
||||||
|
uint8_t reflection_layer_mask;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Initializes the mjrSceneParams to default values.
|
// Initializes the mjrSceneParams to default values.
|
||||||
|
|||||||
Reference in New Issue
Block a user