Move filament renderer out of experimental into src/render/filament.
Also: - renames the main header file to mjrfilament.h. - moves filament_util under a "support" folder. PiperOrigin-RevId: 930448415 Change-Id: Iad89756aaf1ddf4c3e67e1afc3a13776f71fa20f
This commit is contained in:
committed by
Copybara-Service
parent
1aaced190a
commit
96781fa793
@@ -171,6 +171,7 @@ endif()
|
|||||||
add_subdirectory(src/render/noop)
|
add_subdirectory(src/render/noop)
|
||||||
|
|
||||||
if(MUJOCO_USE_FILAMENT)
|
if(MUJOCO_USE_FILAMENT)
|
||||||
|
add_subdirectory(src/render/filament)
|
||||||
add_subdirectory(src/experimental/filament)
|
add_subdirectory(src/experimental/filament)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|||||||
@@ -14,47 +14,13 @@
|
|||||||
|
|
||||||
cmake_minimum_required(VERSION 3.16)
|
cmake_minimum_required(VERSION 3.16)
|
||||||
|
|
||||||
set(MUJOCO_FILAMENT_TARGET_NAME mujoco_filament)
|
set(MUJOCO_FILAMENT_EXPERIMENTAL_TARGET_NAME mujoco_filament_experimental)
|
||||||
|
|
||||||
add_library(${MUJOCO_FILAMENT_TARGET_NAME} STATIC)
|
add_library(${MUJOCO_FILAMENT_EXPERIMENTAL_TARGET_NAME} STATIC)
|
||||||
target_compile_definitions(${MUJOCO_FILAMENT_TARGET_NAME} PRIVATE MJ_STATIC)
|
target_compile_definitions(${MUJOCO_FILAMENT_EXPERIMENTAL_TARGET_NAME} PRIVATE MJ_STATIC)
|
||||||
|
|
||||||
target_sources(${MUJOCO_FILAMENT_TARGET_NAME}
|
target_sources(${MUJOCO_FILAMENT_EXPERIMENTAL_TARGET_NAME}
|
||||||
PUBLIC
|
PUBLIC
|
||||||
render_context_filament.h
|
|
||||||
render_context_filament.cc
|
|
||||||
render_context_filament_cpp.h
|
|
||||||
filament_util.h
|
|
||||||
filament_util.cc
|
|
||||||
filament/builtins.cc
|
|
||||||
filament/builtins.h
|
|
||||||
filament/color_grading_options.cc
|
|
||||||
filament/color_grading_options.h
|
|
||||||
filament/filament_context.cc
|
|
||||||
filament/filament_context.h
|
|
||||||
filament/filament_platform_factory.cc
|
|
||||||
filament/filament_platform_factory.h
|
|
||||||
filament/imgui_editor.cc
|
|
||||||
filament/light.cc
|
|
||||||
filament/light.h
|
|
||||||
filament/material_manager.cc
|
|
||||||
filament/material_manager.h
|
|
||||||
filament/mesh.cc
|
|
||||||
filament/mesh.h
|
|
||||||
filament/object_manager.cc
|
|
||||||
filament/object_manager.h
|
|
||||||
filament/outliner.cc
|
|
||||||
filament/outliner.h
|
|
||||||
filament/reflection_manager.cc
|
|
||||||
filament/reflection_manager.h
|
|
||||||
filament/render_target.cc
|
|
||||||
filament/render_target.h
|
|
||||||
filament/renderable.cc
|
|
||||||
filament/renderable.h
|
|
||||||
filament/scene_view.cc
|
|
||||||
filament/scene_view.h
|
|
||||||
filament/texture.cc
|
|
||||||
filament/texture.h
|
|
||||||
compat/light_manager.cc
|
compat/light_manager.cc
|
||||||
compat/light_manager.h
|
compat/light_manager.h
|
||||||
compat/model_objects.cc
|
compat/model_objects.cc
|
||||||
@@ -65,107 +31,20 @@ target_sources(${MUJOCO_FILAMENT_TARGET_NAME}
|
|||||||
compat/scene_geom_util.h
|
compat/scene_geom_util.h
|
||||||
)
|
)
|
||||||
if(MUJOCO_USE_FILAMENT_MJR_COMPAT)
|
if(MUJOCO_USE_FILAMENT_MJR_COMPAT)
|
||||||
target_sources(${MUJOCO_FILAMENT_TARGET_NAME}
|
target_sources(${MUJOCO_FILAMENT_EXPERIMENTAL_TARGET_NAME}
|
||||||
PUBLIC
|
PUBLIC
|
||||||
mjr_compat.cc
|
mjr_compat.cc
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
target_include_directories(${MUJOCO_FILAMENT_TARGET_NAME}
|
target_include_directories(${MUJOCO_FILAMENT_EXPERIMENTAL_TARGET_NAME}
|
||||||
PUBLIC
|
PUBLIC
|
||||||
${PROJECT_SOURCE_DIR}/include
|
${PROJECT_SOURCE_DIR}/include
|
||||||
${PROJECT_SOURCE_DIR}/src
|
${PROJECT_SOURCE_DIR}/src
|
||||||
)
|
)
|
||||||
|
|
||||||
include(third_party_deps/dear_imgui)
|
target_link_libraries(${MUJOCO_FILAMENT_EXPERIMENTAL_TARGET_NAME}
|
||||||
include(third_party_deps/filament)
|
mujoco_filament
|
||||||
target_link_libraries(${MUJOCO_FILAMENT_TARGET_NAME}
|
|
||||||
dear_imgui
|
|
||||||
filament
|
|
||||||
image # provided by filament
|
|
||||||
ktxreader # provided by filament
|
|
||||||
)
|
)
|
||||||
|
|
||||||
add_library(mujoco::filament ALIAS ${MUJOCO_FILAMENT_TARGET_NAME})
|
add_library(mujoco::filament_experimental ALIAS ${MUJOCO_FILAMENT_EXPERIMENTAL_TARGET_NAME})
|
||||||
|
|
||||||
# The "mujoco::filament" library needs access to some assets (e.g. filament
|
|
||||||
# material shaders) in order to do rendering. As such, you must also include
|
|
||||||
# the assets under MUJOCO_FILAMENT_ASSETS_DIR in your project. As part of
|
|
||||||
# the filament library configuration, you will provide a function that the
|
|
||||||
# library will use to load these assets.
|
|
||||||
set(ASSETS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/assets")
|
|
||||||
set(OUTPUT_ASSETS_DIR "${CMAKE_CURRENT_BINARY_DIR}/assets")
|
|
||||||
file(MAKE_DIRECTORY ${OUTPUT_ASSETS_DIR})
|
|
||||||
file(COPY
|
|
||||||
"${ASSETS_DIR}/ibl.ktx"
|
|
||||||
DESTINATION ${OUTPUT_ASSETS_DIR}
|
|
||||||
)
|
|
||||||
|
|
||||||
set(MATC_EXECUTABLE matc)
|
|
||||||
set(MATERIAL_FILES
|
|
||||||
pbr.mat
|
|
||||||
pbr_transparent.mat
|
|
||||||
pbr_packed.mat
|
|
||||||
pbr_packed_transparent.mat
|
|
||||||
phong_2d_fade.mat
|
|
||||||
phong_2d.mat
|
|
||||||
phong_2d_reflect.mat
|
|
||||||
phong_2d_uv_fade.mat
|
|
||||||
phong_2d_uv.mat
|
|
||||||
phong_2d_uv_reflect.mat
|
|
||||||
phong_color_fade.mat
|
|
||||||
phong_color.mat
|
|
||||||
phong_color_reflect.mat
|
|
||||||
phong_cube_fade.mat
|
|
||||||
phong_cube.mat
|
|
||||||
phong_cube_reflect.mat
|
|
||||||
outline_composite.mat
|
|
||||||
outline_flatten.mat
|
|
||||||
outline_jumpflood.mat
|
|
||||||
unlit_decor.mat
|
|
||||||
unlit_depth.mat
|
|
||||||
unlit_segmentation.mat
|
|
||||||
unlit_ui.mat
|
|
||||||
)
|
|
||||||
|
|
||||||
foreach(MATERIAL_FILE ${MATERIAL_FILES})
|
|
||||||
get_filename_component(MATERIAL_NAME ${MATERIAL_FILE} NAME_WE)
|
|
||||||
set(INPUT_FILE "${ASSETS_DIR}/${MATERIAL_FILE}")
|
|
||||||
set(OUTPUT_FILE "${OUTPUT_ASSETS_DIR}/${MATERIAL_NAME}.filamat")
|
|
||||||
|
|
||||||
if(CMAKE_SYSTEM_NAME STREQUAL "Emscripten")
|
|
||||||
set(PRECOMPILED_FILE "${MUJOCO_NATIVE_BUILD_DIR}/src/experimental/filament/assets/${MATERIAL_NAME}.filamat")
|
|
||||||
add_custom_command(
|
|
||||||
OUTPUT ${OUTPUT_FILE}
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy
|
|
||||||
${PRECOMPILED_FILE}
|
|
||||||
${OUTPUT_FILE}
|
|
||||||
DEPENDS ${PRECOMPILED_FILE}
|
|
||||||
COMMENT "Copying precompiled material ${MATERIAL_NAME}.filamat"
|
|
||||||
)
|
|
||||||
else()
|
|
||||||
add_custom_command(
|
|
||||||
OUTPUT ${OUTPUT_FILE}
|
|
||||||
COMMAND ${MATC_EXECUTABLE}
|
|
||||||
--platform=all
|
|
||||||
--api=vulkan
|
|
||||||
--api=opengl
|
|
||||||
--variant-filter skinning
|
|
||||||
--optimize-size
|
|
||||||
--output ${OUTPUT_FILE}
|
|
||||||
${INPUT_FILE}
|
|
||||||
DEPENDS ${INPUT_FILE}
|
|
||||||
DEPENDS matc
|
|
||||||
COMMENT "Compiling ${MATERIAL_FILE}"
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
list(APPEND MUJOCO_FILAMENT_ASSET_FILES ${OUTPUT_FILE})
|
|
||||||
endforeach()
|
|
||||||
|
|
||||||
list(APPEND MUJOCO_FILAMENT_ASSET_FILES "${OUTPUT_ASSETS_DIR}/ibl.ktx")
|
|
||||||
|
|
||||||
add_custom_target(mujoco_filament_assets DEPENDS ${MUJOCO_FILAMENT_ASSET_FILES})
|
|
||||||
add_dependencies(${MUJOCO_FILAMENT_TARGET_NAME} mujoco_filament_assets)
|
|
||||||
|
|
||||||
set(MUJOCO_FILAMENT_ASSETS_DIR ${OUTPUT_ASSETS_DIR})
|
|
||||||
|
|||||||
@@ -24,9 +24,9 @@
|
|||||||
#include <math/vec4.h>
|
#include <math/vec4.h>
|
||||||
#include <mujoco/mujoco.h>
|
#include <mujoco/mujoco.h>
|
||||||
#include "experimental/filament/compat/model_objects.h"
|
#include "experimental/filament/compat/model_objects.h"
|
||||||
#include "experimental/filament/filament_util.h"
|
#include "render/filament/mjrfilament_cpp.h"
|
||||||
#include "experimental/filament/render_context_filament_cpp.h"
|
#include "render/filament/mjrfilament.h"
|
||||||
#include "experimental/filament/render_context_filament.h"
|
#include "render/filament/support/filament_util.h"
|
||||||
|
|
||||||
namespace mujoco {
|
namespace mujoco {
|
||||||
|
|
||||||
|
|||||||
@@ -18,8 +18,8 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "experimental/filament/compat/model_objects.h"
|
#include "experimental/filament/compat/model_objects.h"
|
||||||
#include "experimental/filament/render_context_filament.h"
|
#include "render/filament/mjrfilament.h"
|
||||||
#include "experimental/filament/render_context_filament_cpp.h"
|
#include "render/filament/mjrfilament_cpp.h"
|
||||||
|
|
||||||
namespace mujoco {
|
namespace mujoco {
|
||||||
|
|
||||||
|
|||||||
@@ -29,9 +29,9 @@
|
|||||||
#include <math/vec3.h>
|
#include <math/vec3.h>
|
||||||
#include <math/vec4.h>
|
#include <math/vec4.h>
|
||||||
#include <mujoco/mujoco.h>
|
#include <mujoco/mujoco.h>
|
||||||
#include "experimental/filament/filament_util.h"
|
#include "render/filament/mjrfilament.h"
|
||||||
#include "experimental/filament/render_context_filament_cpp.h"
|
#include "render/filament/mjrfilament_cpp.h"
|
||||||
#include "experimental/filament/render_context_filament.h"
|
#include "render/filament/support/filament_util.h"
|
||||||
|
|
||||||
namespace mujoco {
|
namespace mujoco {
|
||||||
|
|
||||||
|
|||||||
@@ -19,8 +19,8 @@
|
|||||||
|
|
||||||
#include <mujoco/mjmodel.h>
|
#include <mujoco/mjmodel.h>
|
||||||
#include <mujoco/mujoco.h>
|
#include <mujoco/mujoco.h>
|
||||||
#include "experimental/filament/render_context_filament.h"
|
#include "render/filament/mjrfilament.h"
|
||||||
#include "experimental/filament/render_context_filament_cpp.h"
|
#include "render/filament/mjrfilament_cpp.h"
|
||||||
|
|
||||||
namespace mujoco {
|
namespace mujoco {
|
||||||
|
|
||||||
|
|||||||
@@ -19,18 +19,18 @@
|
|||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
#include <math/TMatHelpers.h>
|
#include <math/TMatHelpers.h>
|
||||||
|
#include <math/TVecHelpers.h>
|
||||||
#include <math/mat4.h>
|
#include <math/mat4.h>
|
||||||
#include <math/mathfwd.h>
|
#include <math/mathfwd.h>
|
||||||
#include <math/TVecHelpers.h>
|
|
||||||
#include <math/vec3.h>
|
#include <math/vec3.h>
|
||||||
#include <math/vec4.h>
|
#include <math/vec4.h>
|
||||||
#include <mujoco/mujoco.h>
|
#include <mujoco/mujoco.h>
|
||||||
#include "experimental/filament/compat/light_manager.h"
|
#include "experimental/filament/compat/light_manager.h"
|
||||||
#include "experimental/filament/compat/model_objects.h"
|
#include "experimental/filament/compat/model_objects.h"
|
||||||
#include "experimental/filament/compat/scene_geom_util.h"
|
#include "experimental/filament/compat/scene_geom_util.h"
|
||||||
#include "experimental/filament/filament_util.h"
|
#include "render/filament/mjrfilament.h"
|
||||||
#include "experimental/filament/render_context_filament_cpp.h"
|
#include "render/filament/mjrfilament_cpp.h"
|
||||||
#include "experimental/filament/render_context_filament.h"
|
#include "render/filament/support/filament_util.h"
|
||||||
|
|
||||||
namespace mujoco {
|
namespace mujoco {
|
||||||
|
|
||||||
|
|||||||
@@ -26,8 +26,8 @@
|
|||||||
#include <mujoco/mujoco.h>
|
#include <mujoco/mujoco.h>
|
||||||
#include "experimental/filament/compat/light_manager.h"
|
#include "experimental/filament/compat/light_manager.h"
|
||||||
#include "experimental/filament/compat/model_objects.h"
|
#include "experimental/filament/compat/model_objects.h"
|
||||||
#include "experimental/filament/render_context_filament.h"
|
#include "render/filament/mjrfilament.h"
|
||||||
#include "experimental/filament/render_context_filament_cpp.h"
|
#include "render/filament/mjrfilament_cpp.h"
|
||||||
|
|
||||||
namespace mujoco {
|
namespace mujoco {
|
||||||
|
|
||||||
|
|||||||
@@ -22,8 +22,8 @@
|
|||||||
#include <mujoco/mjvisualize.h>
|
#include <mujoco/mjvisualize.h>
|
||||||
#include <mujoco/mujoco.h>
|
#include <mujoco/mujoco.h>
|
||||||
#include "experimental/filament/compat/model_objects.h"
|
#include "experimental/filament/compat/model_objects.h"
|
||||||
#include "experimental/filament/render_context_filament.h"
|
#include "render/filament/mjrfilament.h"
|
||||||
#include "experimental/filament/render_context_filament_cpp.h"
|
#include "render/filament/mjrfilament_cpp.h"
|
||||||
|
|
||||||
namespace mujoco {
|
namespace mujoco {
|
||||||
|
|
||||||
|
|||||||
@@ -18,8 +18,8 @@
|
|||||||
#include <mujoco/mjvisualize.h>
|
#include <mujoco/mjvisualize.h>
|
||||||
#include <mujoco/mujoco.h>
|
#include <mujoco/mujoco.h>
|
||||||
#include "experimental/filament/compat/model_objects.h"
|
#include "experimental/filament/compat/model_objects.h"
|
||||||
#include "experimental/filament/render_context_filament.h"
|
#include "render/filament/mjrfilament.h"
|
||||||
#include "experimental/filament/render_context_filament_cpp.h"
|
#include "render/filament/mjrfilament_cpp.h"
|
||||||
|
|
||||||
namespace mujoco {
|
namespace mujoco {
|
||||||
|
|
||||||
|
|||||||
@@ -18,8 +18,8 @@
|
|||||||
|
|
||||||
#include <mujoco/mujoco.h>
|
#include <mujoco/mujoco.h>
|
||||||
#include "experimental/filament/compat/scene_bridge.h"
|
#include "experimental/filament/compat/scene_bridge.h"
|
||||||
#include "experimental/filament/render_context_filament.h"
|
#include "render/filament/mjrfilament.h"
|
||||||
#include "experimental/filament/render_context_filament_cpp.h"
|
#include "render/filament/mjrfilament_cpp.h"
|
||||||
|
|
||||||
// This library implements the entirety of mujoco's mjr API. You can link this
|
// This library implements the entirety of mujoco's mjr API. You can link this
|
||||||
// library with your application (instead of the "classic" mujoco renderer) to
|
// library with your application (instead of the "classic" mujoco renderer) to
|
||||||
|
|||||||
@@ -104,6 +104,7 @@ target_link_libraries(${MUJOCO_PLATFORM_TARGET_NAME}
|
|||||||
dear_imgui_stdlib
|
dear_imgui_stdlib
|
||||||
implot
|
implot
|
||||||
mujoco::filament
|
mujoco::filament
|
||||||
|
mujoco::filament_experimental
|
||||||
webp
|
webp
|
||||||
SDL2::SDL2-static
|
SDL2::SDL2-static
|
||||||
${MUJOCO_PLATFORM_RENDER_DEPS}
|
${MUJOCO_PLATFORM_RENDER_DEPS}
|
||||||
|
|||||||
@@ -28,12 +28,12 @@
|
|||||||
#include "experimental/platform/hal/egl_utils.h"
|
#include "experimental/platform/hal/egl_utils.h"
|
||||||
#endif
|
#endif
|
||||||
#include "experimental/filament/compat/scene_bridge.h"
|
#include "experimental/filament/compat/scene_bridge.h"
|
||||||
#include "experimental/filament/render_context_filament.h"
|
|
||||||
#include "experimental/filament/render_context_filament_cpp.h"
|
|
||||||
#include "experimental/platform/hal/graphics_mode.h"
|
#include "experimental/platform/hal/graphics_mode.h"
|
||||||
#include "experimental/platform/ux/imgui_bridge.h"
|
#include "experimental/platform/ux/imgui_bridge.h"
|
||||||
#include "experimental/platform/ux/imgui_widgets.h"
|
#include "experimental/platform/ux/imgui_widgets.h"
|
||||||
#include "experimental/platform/ux/plugin.h"
|
#include "experimental/platform/ux/plugin.h"
|
||||||
|
#include "render/filament/mjrfilament.h"
|
||||||
|
#include "render/filament/mjrfilament_cpp.h"
|
||||||
|
|
||||||
namespace mujoco::platform {
|
namespace mujoco::platform {
|
||||||
|
|
||||||
|
|||||||
@@ -23,10 +23,10 @@
|
|||||||
|
|
||||||
#include <mujoco/mujoco.h>
|
#include <mujoco/mujoco.h>
|
||||||
#include "experimental/filament/compat/scene_bridge.h"
|
#include "experimental/filament/compat/scene_bridge.h"
|
||||||
#include "experimental/filament/render_context_filament.h"
|
|
||||||
#include "experimental/filament/render_context_filament_cpp.h"
|
|
||||||
#include "experimental/platform/hal/graphics_mode.h"
|
#include "experimental/platform/hal/graphics_mode.h"
|
||||||
#include "experimental/platform/ux/imgui_bridge.h"
|
#include "experimental/platform/ux/imgui_bridge.h"
|
||||||
|
#include "render/filament/mjrfilament.h"
|
||||||
|
#include "render/filament/mjrfilament_cpp.h"
|
||||||
|
|
||||||
namespace mujoco::platform {
|
namespace mujoco::platform {
|
||||||
|
|
||||||
|
|||||||
@@ -25,8 +25,8 @@
|
|||||||
#include <math/mat3.h>
|
#include <math/mat3.h>
|
||||||
#include <math/vec3.h>
|
#include <math/vec3.h>
|
||||||
#include <mujoco/mujoco.h>
|
#include <mujoco/mujoco.h>
|
||||||
#include "experimental/filament/render_context_filament.h"
|
#include "render/filament/mjrfilament.h"
|
||||||
#include "experimental/filament/render_context_filament_cpp.h"
|
#include "render/filament/mjrfilament_cpp.h"
|
||||||
|
|
||||||
namespace mujoco {
|
namespace mujoco {
|
||||||
|
|
||||||
|
|||||||
@@ -20,8 +20,8 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include <imgui.h>
|
#include <imgui.h>
|
||||||
#include "experimental/filament/render_context_filament.h"
|
#include "render/filament/mjrfilament.h"
|
||||||
#include "experimental/filament/render_context_filament_cpp.h"
|
#include "render/filament/mjrfilament_cpp.h"
|
||||||
|
|
||||||
namespace mujoco {
|
namespace mujoco {
|
||||||
|
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ function(configure_studio_target TARGET_NAME)
|
|||||||
POST_BUILD
|
POST_BUILD
|
||||||
COMMAND ${CMAKE_COMMAND}
|
COMMAND ${CMAKE_COMMAND}
|
||||||
-E copy_directory
|
-E copy_directory
|
||||||
${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/../src/experimental/filament/assets
|
${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/../src/render/filament/assets
|
||||||
${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/assets
|
${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/assets
|
||||||
COMMENT "Copying Filament assets to build directory"
|
COMMENT "Copying Filament assets to build directory"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -0,0 +1,157 @@
|
|||||||
|
# Copyright 2025 DeepMind Technologies Limited
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
cmake_minimum_required(VERSION 3.16)
|
||||||
|
|
||||||
|
set(MUJOCO_FILAMENT_TARGET_NAME mujoco_filament)
|
||||||
|
|
||||||
|
add_library(${MUJOCO_FILAMENT_TARGET_NAME} STATIC)
|
||||||
|
target_compile_definitions(${MUJOCO_FILAMENT_TARGET_NAME} PRIVATE MJ_STATIC)
|
||||||
|
|
||||||
|
target_sources(${MUJOCO_FILAMENT_TARGET_NAME}
|
||||||
|
PUBLIC
|
||||||
|
mjrfilament.h
|
||||||
|
mjrfilament.cc
|
||||||
|
mjrfilament_cpp.h
|
||||||
|
core/builtins.cc
|
||||||
|
core/builtins.h
|
||||||
|
core/color_grading_options.cc
|
||||||
|
core/color_grading_options.h
|
||||||
|
core/filament_context.cc
|
||||||
|
core/filament_context.h
|
||||||
|
core/filament_platform_factory.cc
|
||||||
|
core/filament_platform_factory.h
|
||||||
|
core/imgui_editor.cc
|
||||||
|
core/light.cc
|
||||||
|
core/light.h
|
||||||
|
core/material_manager.cc
|
||||||
|
core/material_manager.h
|
||||||
|
core/mesh.cc
|
||||||
|
core/mesh.h
|
||||||
|
core/object_manager.cc
|
||||||
|
core/object_manager.h
|
||||||
|
core/outliner.cc
|
||||||
|
core/outliner.h
|
||||||
|
core/reflection_manager.cc
|
||||||
|
core/reflection_manager.h
|
||||||
|
core/render_target.cc
|
||||||
|
core/render_target.h
|
||||||
|
core/renderable.cc
|
||||||
|
core/renderable.h
|
||||||
|
core/scene_view.cc
|
||||||
|
core/scene_view.h
|
||||||
|
core/texture.cc
|
||||||
|
core/texture.h
|
||||||
|
support/filament_util.h
|
||||||
|
support/filament_util.cc
|
||||||
|
)
|
||||||
|
|
||||||
|
target_include_directories(${MUJOCO_FILAMENT_TARGET_NAME}
|
||||||
|
PUBLIC
|
||||||
|
${PROJECT_SOURCE_DIR}/include
|
||||||
|
${PROJECT_SOURCE_DIR}/src
|
||||||
|
)
|
||||||
|
|
||||||
|
include(third_party_deps/dear_imgui)
|
||||||
|
include(third_party_deps/filament)
|
||||||
|
target_link_libraries(${MUJOCO_FILAMENT_TARGET_NAME}
|
||||||
|
dear_imgui
|
||||||
|
filament
|
||||||
|
image # provided by filament
|
||||||
|
ktxreader # provided by filament
|
||||||
|
)
|
||||||
|
|
||||||
|
add_library(mujoco::filament ALIAS ${MUJOCO_FILAMENT_TARGET_NAME})
|
||||||
|
|
||||||
|
# The "mujoco::filament" library needs access to some assets (e.g. filament
|
||||||
|
# material shaders) in order to do rendering. As such, you must also include
|
||||||
|
# the assets under MUJOCO_FILAMENT_ASSETS_DIR in your project. As part of
|
||||||
|
# the filament library configuration, you will provide a function that the
|
||||||
|
# library will use to load these assets.
|
||||||
|
set(ASSETS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/assets")
|
||||||
|
set(OUTPUT_ASSETS_DIR "${CMAKE_CURRENT_BINARY_DIR}/assets")
|
||||||
|
file(MAKE_DIRECTORY ${OUTPUT_ASSETS_DIR})
|
||||||
|
file(COPY
|
||||||
|
"${ASSETS_DIR}/ibl.ktx"
|
||||||
|
DESTINATION ${OUTPUT_ASSETS_DIR}
|
||||||
|
)
|
||||||
|
|
||||||
|
set(MATC_EXECUTABLE matc)
|
||||||
|
set(MATERIAL_FILES
|
||||||
|
pbr.mat
|
||||||
|
pbr_transparent.mat
|
||||||
|
pbr_packed.mat
|
||||||
|
pbr_packed_transparent.mat
|
||||||
|
phong_2d_fade.mat
|
||||||
|
phong_2d.mat
|
||||||
|
phong_2d_reflect.mat
|
||||||
|
phong_2d_uv_fade.mat
|
||||||
|
phong_2d_uv.mat
|
||||||
|
phong_2d_uv_reflect.mat
|
||||||
|
phong_color_fade.mat
|
||||||
|
phong_color.mat
|
||||||
|
phong_color_reflect.mat
|
||||||
|
phong_cube_fade.mat
|
||||||
|
phong_cube.mat
|
||||||
|
phong_cube_reflect.mat
|
||||||
|
outline_composite.mat
|
||||||
|
outline_flatten.mat
|
||||||
|
outline_jumpflood.mat
|
||||||
|
unlit_decor.mat
|
||||||
|
unlit_depth.mat
|
||||||
|
unlit_segmentation.mat
|
||||||
|
unlit_ui.mat
|
||||||
|
)
|
||||||
|
|
||||||
|
foreach(MATERIAL_FILE ${MATERIAL_FILES})
|
||||||
|
get_filename_component(MATERIAL_NAME ${MATERIAL_FILE} NAME_WE)
|
||||||
|
set(INPUT_FILE "${ASSETS_DIR}/${MATERIAL_FILE}")
|
||||||
|
set(OUTPUT_FILE "${OUTPUT_ASSETS_DIR}/${MATERIAL_NAME}.filamat")
|
||||||
|
|
||||||
|
if(CMAKE_SYSTEM_NAME STREQUAL "Emscripten")
|
||||||
|
set(PRECOMPILED_FILE "${MUJOCO_NATIVE_BUILD_DIR}/src/render/filament/assets/${MATERIAL_NAME}.filamat")
|
||||||
|
add_custom_command(
|
||||||
|
OUTPUT ${OUTPUT_FILE}
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy
|
||||||
|
${PRECOMPILED_FILE}
|
||||||
|
${OUTPUT_FILE}
|
||||||
|
DEPENDS ${PRECOMPILED_FILE}
|
||||||
|
COMMENT "Copying precompiled material ${MATERIAL_NAME}.filamat"
|
||||||
|
)
|
||||||
|
else()
|
||||||
|
add_custom_command(
|
||||||
|
OUTPUT ${OUTPUT_FILE}
|
||||||
|
COMMAND ${MATC_EXECUTABLE}
|
||||||
|
--platform=all
|
||||||
|
--api=vulkan
|
||||||
|
--api=opengl
|
||||||
|
--variant-filter skinning
|
||||||
|
--optimize-size
|
||||||
|
--output ${OUTPUT_FILE}
|
||||||
|
${INPUT_FILE}
|
||||||
|
DEPENDS ${INPUT_FILE}
|
||||||
|
DEPENDS matc
|
||||||
|
COMMENT "Compiling ${MATERIAL_FILE}"
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
list(APPEND MUJOCO_FILAMENT_ASSET_FILES ${OUTPUT_FILE})
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
list(APPEND MUJOCO_FILAMENT_ASSET_FILES "${OUTPUT_ASSETS_DIR}/ibl.ktx")
|
||||||
|
|
||||||
|
add_custom_target(mujoco_filament_assets DEPENDS ${MUJOCO_FILAMENT_ASSET_FILES})
|
||||||
|
add_dependencies(${MUJOCO_FILAMENT_TARGET_NAME} mujoco_filament_assets)
|
||||||
|
|
||||||
|
set(MUJOCO_FILAMENT_ASSETS_DIR ${OUTPUT_ASSETS_DIR})
|
||||||
+14
-13
@@ -12,7 +12,7 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
#include "experimental/filament/filament/builtins.h"
|
#include "render/filament/core/builtins.h"
|
||||||
|
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
@@ -26,9 +26,9 @@
|
|||||||
#include <math/vec2.h>
|
#include <math/vec2.h>
|
||||||
#include <math/vec3.h>
|
#include <math/vec3.h>
|
||||||
#include <math/vec4.h>
|
#include <math/vec4.h>
|
||||||
#include "experimental/filament/filament_util.h"
|
#include "render/filament/core/mesh.h"
|
||||||
#include "experimental/filament/filament/mesh.h"
|
#include "render/filament/mjrfilament.h"
|
||||||
#include "experimental/filament/render_context_filament.h"
|
#include "render/filament/support/filament_util.h"
|
||||||
|
|
||||||
namespace mujoco {
|
namespace mujoco {
|
||||||
|
|
||||||
@@ -169,7 +169,7 @@ class TriangleBuilder : public BuiltinBuilder {
|
|||||||
positions_.emplace_back(1, 0, 0);
|
positions_.emplace_back(1, 0, 0);
|
||||||
positions_.emplace_back(0, 1, 0);
|
positions_.emplace_back(0, 1, 0);
|
||||||
|
|
||||||
orientations_.resize(positions_.size(), CalculateOrientation({0, 0, 1}));
|
orientations_.resize(positions_.size(), CalculateOrientation({0, 0, 1}));
|
||||||
|
|
||||||
indices_.reserve(3);
|
indices_.reserve(3);
|
||||||
indices_.emplace_back(0);
|
indices_.emplace_back(0);
|
||||||
@@ -187,13 +187,13 @@ class LineBoxBuilder : public BuiltinBuilder {
|
|||||||
|
|
||||||
positions_.reserve(8);
|
positions_.reserve(8);
|
||||||
positions_.emplace_back(-1.0f, -1.0f, -1.0f);
|
positions_.emplace_back(-1.0f, -1.0f, -1.0f);
|
||||||
positions_.emplace_back( 1.0f, -1.0f, -1.0f);
|
positions_.emplace_back(1.0f, -1.0f, -1.0f);
|
||||||
positions_.emplace_back(-1.0f, 1.0f, -1.0f);
|
positions_.emplace_back(-1.0f, 1.0f, -1.0f);
|
||||||
positions_.emplace_back( 1.0f, 1.0f, -1.0f);
|
positions_.emplace_back(1.0f, 1.0f, -1.0f);
|
||||||
positions_.emplace_back(-1.0f, -1.0f, 1.0f);
|
positions_.emplace_back(-1.0f, -1.0f, 1.0f);
|
||||||
positions_.emplace_back( 1.0f, -1.0f, 1.0f);
|
positions_.emplace_back(1.0f, -1.0f, 1.0f);
|
||||||
positions_.emplace_back(-1.0f, 1.0f, 1.0f);
|
positions_.emplace_back(-1.0f, 1.0f, 1.0f);
|
||||||
positions_.emplace_back( 1.0f, 1.0f, 1.0f);
|
positions_.emplace_back(1.0f, 1.0f, 1.0f);
|
||||||
|
|
||||||
orientations_.resize(positions_.size(), {0, 0, 0, 1});
|
orientations_.resize(positions_.size(), {0, 0, 0, 1});
|
||||||
|
|
||||||
@@ -622,7 +622,8 @@ class DomeBuilder : public BuiltinBuilder {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Builtins::Builtins(filament::Engine* engine, int nstack, int nslice, int nquad) {
|
Builtins::Builtins(filament::Engine* engine, int nstack, int nslice,
|
||||||
|
int nquad) {
|
||||||
line_ = BuiltinBuilder::Create<LineBuilder>(engine);
|
line_ = BuiltinBuilder::Create<LineBuilder>(engine);
|
||||||
plane_ = BuiltinBuilder::Create<PlaneBuilder>(engine, nquad);
|
plane_ = BuiltinBuilder::Create<PlaneBuilder>(engine, nquad);
|
||||||
triangle_ = BuiltinBuilder::Create<TriangleBuilder>(engine);
|
triangle_ = BuiltinBuilder::Create<TriangleBuilder>(engine);
|
||||||
@@ -12,13 +12,13 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
#ifndef MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_BUILTINS_H_
|
#ifndef MUJOCO_SRC_RENDER_FILAMENT_CORE_BUILTINS_H_
|
||||||
#define MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_BUILTINS_H_
|
#define MUJOCO_SRC_RENDER_FILAMENT_CORE_BUILTINS_H_
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
#include <filament/Engine.h>
|
#include <filament/Engine.h>
|
||||||
#include "experimental/filament/filament/mesh.h"
|
#include "render/filament/core/mesh.h"
|
||||||
|
|
||||||
namespace mujoco {
|
namespace mujoco {
|
||||||
|
|
||||||
@@ -54,4 +54,4 @@ class Builtins {
|
|||||||
|
|
||||||
} // namespace mujoco
|
} // namespace mujoco
|
||||||
|
|
||||||
#endif // MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_BUILTINS_H_
|
#endif // MUJOCO_SRC_RENDER_FILAMENT_CORE_BUILTINS_H_
|
||||||
+1
-1
@@ -12,7 +12,7 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
#include "experimental/filament/filament/color_grading_options.h"
|
#include "render/filament/core/color_grading_options.h"
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
+3
-3
@@ -12,8 +12,8 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
#ifndef MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_COLOR_GRADING_OPTIONS_H_
|
#ifndef MUJOCO_SRC_RENDER_FILAMENT_CORE_COLOR_GRADING_OPTIONS_H_
|
||||||
#define MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_COLOR_GRADING_OPTIONS_H_
|
#define MUJOCO_SRC_RENDER_FILAMENT_CORE_COLOR_GRADING_OPTIONS_H_
|
||||||
|
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
@@ -78,4 +78,4 @@ struct ColorGradingOptions {
|
|||||||
|
|
||||||
} // namespace mujoco
|
} // namespace mujoco
|
||||||
|
|
||||||
#endif // MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_COLOR_GRADING_OPTIONS_H_
|
#endif // MUJOCO_SRC_RENDER_FILAMENT_CORE_COLOR_GRADING_OPTIONS_H_
|
||||||
+11
-9
@@ -12,7 +12,7 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
#include "experimental/filament/filament/filament_context.h"
|
#include "render/filament/core/filament_context.h"
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
@@ -37,12 +37,12 @@
|
|||||||
#include <utils/FixedCapacityVector.h>
|
#include <utils/FixedCapacityVector.h>
|
||||||
#include <utils/compiler.h>
|
#include <utils/compiler.h>
|
||||||
#include <mujoco/mujoco.h>
|
#include <mujoco/mujoco.h>
|
||||||
#include "experimental/filament/filament/filament_platform_factory.h"
|
#include "render/filament/core/filament_platform_factory.h"
|
||||||
#include "experimental/filament/filament/material_manager.h"
|
#include "render/filament/core/material_manager.h"
|
||||||
#include "experimental/filament/filament/object_manager.h"
|
#include "render/filament/core/object_manager.h"
|
||||||
#include "experimental/filament/filament/render_target.h"
|
#include "render/filament/core/render_target.h"
|
||||||
#include "experimental/filament/filament/scene_view.h"
|
#include "render/filament/core/scene_view.h"
|
||||||
#include "experimental/filament/render_context_filament.h"
|
#include "render/filament/mjrfilament.h"
|
||||||
|
|
||||||
namespace mujoco {
|
namespace mujoco {
|
||||||
|
|
||||||
@@ -96,7 +96,8 @@ mjrfFrameHandle FilamentContext::Render(
|
|||||||
|
|
||||||
material_manager_->BeginFrame();
|
material_manager_->BeginFrame();
|
||||||
|
|
||||||
std::unordered_map<mjrfScene*, std::vector<const mjrfRenderRequest*>> scene_to_requests;
|
std::unordered_map<mjrfScene*, std::vector<const mjrfRenderRequest*>>
|
||||||
|
scene_to_requests;
|
||||||
for (const mjrfRenderRequest& request : requests) {
|
for (const mjrfRenderRequest& request : requests) {
|
||||||
scene_to_requests[request.scene].push_back(&request);
|
scene_to_requests[request.scene].push_back(&request);
|
||||||
}
|
}
|
||||||
@@ -131,7 +132,8 @@ mjrfFrameHandle FilamentContext::Render(
|
|||||||
} else {
|
} else {
|
||||||
if (read_requests.empty()) {
|
if (read_requests.empty()) {
|
||||||
mju_error(
|
mju_error(
|
||||||
"Rendering to a render target without a read request is pointless.");
|
"Rendering to a render target without a read request is "
|
||||||
|
"pointless.");
|
||||||
}
|
}
|
||||||
|
|
||||||
const mjrfReadPixelsRequest& read_request = read_requests[0];
|
const mjrfReadPixelsRequest& read_request = read_requests[0];
|
||||||
+10
-8
@@ -12,21 +12,21 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
#ifndef MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_FILAMENT_CONTEXT_H_
|
#ifndef MUJOCO_SRC_RENDER_FILAMENT_CORE_FILAMENT_CONTEXT_H_
|
||||||
#define MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_FILAMENT_CONTEXT_H_
|
#define MUJOCO_SRC_RENDER_FILAMENT_CORE_FILAMENT_CONTEXT_H_
|
||||||
|
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <span>
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
#include <span>
|
||||||
|
|
||||||
#include <backend/Platform.h>
|
#include <backend/Platform.h>
|
||||||
#include <filament/Engine.h>
|
#include <filament/Engine.h>
|
||||||
#include <filament/Renderer.h>
|
#include <filament/Renderer.h>
|
||||||
#include <filament/SwapChain.h>
|
#include <filament/SwapChain.h>
|
||||||
#include <math/vec4.h>
|
#include <math/vec4.h>
|
||||||
#include "experimental/filament/filament/material_manager.h"
|
#include "render/filament/core/material_manager.h"
|
||||||
#include "experimental/filament/filament/object_manager.h"
|
#include "render/filament/core/object_manager.h"
|
||||||
#include "experimental/filament/render_context_filament.h"
|
#include "render/filament/mjrfilament.h"
|
||||||
|
|
||||||
namespace mujoco {
|
namespace mujoco {
|
||||||
|
|
||||||
@@ -61,7 +61,9 @@ class FilamentContext : public mjrfContext {
|
|||||||
|
|
||||||
ObjectManager* GetObjectManager() const { return object_manager_.get(); }
|
ObjectManager* GetObjectManager() const { return object_manager_.get(); }
|
||||||
|
|
||||||
MaterialManager* GetMaterialManager() const { return material_manager_.get(); }
|
MaterialManager* GetMaterialManager() const {
|
||||||
|
return material_manager_.get();
|
||||||
|
}
|
||||||
|
|
||||||
static FilamentContext* downcast(mjrfContext* context) {
|
static FilamentContext* downcast(mjrfContext* context) {
|
||||||
return static_cast<FilamentContext*>(context);
|
return static_cast<FilamentContext*>(context);
|
||||||
@@ -90,4 +92,4 @@ class FilamentContext : public mjrfContext {
|
|||||||
|
|
||||||
} // namespace mujoco
|
} // namespace mujoco
|
||||||
|
|
||||||
#endif // MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_FILAMENT_CONTEXT_H_
|
#endif // MUJOCO_SRC_RENDER_FILAMENT_CORE_FILAMENT_CONTEXT_H_
|
||||||
+2
-2
@@ -12,14 +12,14 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
#include "experimental/filament/filament/filament_platform_factory.h"
|
#include "render/filament/core/filament_platform_factory.h"
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
#include <backend/Platform.h>
|
#include <backend/Platform.h>
|
||||||
#include <filament/Engine.h>
|
#include <filament/Engine.h>
|
||||||
#include <mujoco/mujoco.h>
|
#include <mujoco/mujoco.h>
|
||||||
#include "experimental/filament/render_context_filament.h"
|
#include "render/filament/mjrfilament.h"
|
||||||
|
|
||||||
namespace mujoco {
|
namespace mujoco {
|
||||||
|
|
||||||
+4
-4
@@ -12,14 +12,14 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
#ifndef MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_FILAMENT_PLATFORM_FACTORY_H_
|
#ifndef MUJOCO_SRC_RENDER_FILAMENT_CORE_FILAMENT_PLATFORM_FACTORY_H_
|
||||||
#define MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_FILAMENT_PLATFORM_FACTORY_H_
|
#define MUJOCO_SRC_RENDER_FILAMENT_CORE_FILAMENT_PLATFORM_FACTORY_H_
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
#include "experimental/filament/render_context_filament.h"
|
|
||||||
#include <backend/Platform.h>
|
#include <backend/Platform.h>
|
||||||
#include <filament/Engine.h>
|
#include <filament/Engine.h>
|
||||||
|
#include "render/filament/mjrfilament.h"
|
||||||
|
|
||||||
namespace mujoco {
|
namespace mujoco {
|
||||||
|
|
||||||
@@ -42,4 +42,4 @@ FilamentPlatformSetup CreateFilamentPlatform(const mjrFilamentConfig& config);
|
|||||||
|
|
||||||
} // namespace mujoco
|
} // namespace mujoco
|
||||||
|
|
||||||
#endif // MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_FILAMENT_PLATFORM_FACTORY_H_
|
#endif // MUJOCO_SRC_RENDER_FILAMENT_CORE_FILAMENT_PLATFORM_FACTORY_H_
|
||||||
+8
-10
@@ -12,7 +12,6 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <any>
|
#include <any>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
@@ -33,9 +32,9 @@
|
|||||||
#include <math/mathfwd.h>
|
#include <math/mathfwd.h>
|
||||||
#include <math/scalar.h>
|
#include <math/scalar.h>
|
||||||
#include <math/vec3.h>
|
#include <math/vec3.h>
|
||||||
#include "experimental/filament/filament/color_grading_options.h"
|
#include "render/filament/core/color_grading_options.h"
|
||||||
#include "experimental/filament/filament/scene_view.h"
|
#include "render/filament/core/scene_view.h"
|
||||||
#include "experimental/filament/render_context_filament.h"
|
#include "render/filament/mjrfilament.h"
|
||||||
|
|
||||||
namespace mujoco {
|
namespace mujoco {
|
||||||
|
|
||||||
@@ -243,8 +242,8 @@ void DrawAmbientOcclusionGui(SceneView* scene_view) {
|
|||||||
opts.power = std::max(opts.power, 0.0f);
|
opts.power = std::max(opts.power, 0.0f);
|
||||||
opts.radius = std::clamp(opts.radius, 0.0f, 10.0f);
|
opts.radius = std::clamp(opts.radius, 0.0f, 10.0f);
|
||||||
opts.bias = std::clamp(opts.bias, 0.0f, 0.001f);
|
opts.bias = std::clamp(opts.bias, 0.0f, 0.001f);
|
||||||
opts.ssct.lightConeRad = std::clamp(opts.ssct.lightConeRad, 0.0f,
|
opts.ssct.lightConeRad =
|
||||||
filament::math::f::PI / 2.0f);
|
std::clamp(opts.ssct.lightConeRad, 0.0f, filament::math::f::PI / 2.0f);
|
||||||
|
|
||||||
view->setAmbientOcclusionOptions(opts);
|
view->setAmbientOcclusionOptions(opts);
|
||||||
}
|
}
|
||||||
@@ -417,10 +416,9 @@ void DrawColorGradingGui(SceneView* scene_view) {
|
|||||||
{.step = 0.01f, .fstep = 0.1f});
|
{.step = 0.01f, .fstep = 0.1f});
|
||||||
changed |= Ui("Contrast", &opts.contrast, {.step = 0.01f, .fstep = 0.1f});
|
changed |= Ui("Contrast", &opts.contrast, {.step = 0.01f, .fstep = 0.1f});
|
||||||
changed |= Ui("Vibrance", &opts.vibrance, {.step = 0.01f, .fstep = 0.1f});
|
changed |= Ui("Vibrance", &opts.vibrance, {.step = 0.01f, .fstep = 0.1f});
|
||||||
changed |= Ui("Saturation", &opts.saturation,
|
changed |= Ui("Saturation", &opts.saturation, {.step = 0.01f, .fstep = 0.1f});
|
||||||
{.step = 0.01f, .fstep = 0.1f});
|
changed |=
|
||||||
changed |= Ui("Temperature", &opts.temperature,
|
Ui("Temperature", &opts.temperature, {.step = 0.01f, .fstep = 0.1f});
|
||||||
{.step = 0.01f, .fstep = 0.1f});
|
|
||||||
changed |= Ui("Tint", &opts.tint, {.step = 0.01f, .fstep = 0.1f});
|
changed |= Ui("Tint", &opts.tint, {.step = 0.01f, .fstep = 0.1f});
|
||||||
changed |= Ui("Out Red", &opts.out_red);
|
changed |= Ui("Out Red", &opts.out_red);
|
||||||
changed |= Ui("Out Green", &opts.out_green);
|
changed |= Ui("Out Green", &opts.out_green);
|
||||||
@@ -12,7 +12,7 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
#include "experimental/filament/filament/light.h"
|
#include "render/filament/core/light.h"
|
||||||
|
|
||||||
#include <numbers>
|
#include <numbers>
|
||||||
|
|
||||||
@@ -25,9 +25,9 @@
|
|||||||
#include <utils/Entity.h>
|
#include <utils/Entity.h>
|
||||||
#include <utils/EntityManager.h>
|
#include <utils/EntityManager.h>
|
||||||
#include <mujoco/mujoco.h>
|
#include <mujoco/mujoco.h>
|
||||||
#include "experimental/filament/filament_util.h"
|
#include "render/filament/core/texture.h"
|
||||||
#include "experimental/filament/filament/texture.h"
|
#include "render/filament/mjrfilament.h"
|
||||||
#include "experimental/filament/render_context_filament.h"
|
#include "render/filament/support/filament_util.h"
|
||||||
|
|
||||||
namespace mujoco {
|
namespace mujoco {
|
||||||
|
|
||||||
@@ -12,15 +12,15 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
#ifndef MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_LIGHT_H_
|
#ifndef MUJOCO_SRC_RENDER_FILAMENT_CORE_LIGHT_H_
|
||||||
#define MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_LIGHT_H_
|
#define MUJOCO_SRC_RENDER_FILAMENT_CORE_LIGHT_H_
|
||||||
|
|
||||||
#include <filament/Engine.h>
|
#include <filament/Engine.h>
|
||||||
#include <filament/Scene.h>
|
#include <filament/Scene.h>
|
||||||
#include <math/vec3.h>
|
#include <math/vec3.h>
|
||||||
#include <utils/Entity.h>
|
#include <utils/Entity.h>
|
||||||
#include <mujoco/mujoco.h>
|
#include <mujoco/mujoco.h>
|
||||||
#include "experimental/filament/render_context_filament.h"
|
#include "render/filament/mjrfilament.h"
|
||||||
|
|
||||||
namespace mujoco {
|
namespace mujoco {
|
||||||
|
|
||||||
@@ -74,4 +74,4 @@ class Light : public mjrfLight {
|
|||||||
|
|
||||||
} // namespace mujoco
|
} // namespace mujoco
|
||||||
|
|
||||||
#endif // MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_LIGHT_H_
|
#endif // MUJOCO_SRC_RENDER_FILAMENT_CORE_LIGHT_H_
|
||||||
+11
-14
@@ -12,7 +12,8 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
#include "experimental/filament/filament/material_manager.h"
|
#include "render/filament/core/material_manager.h"
|
||||||
|
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
@@ -24,11 +25,11 @@
|
|||||||
#include <filament/TextureSampler.h>
|
#include <filament/TextureSampler.h>
|
||||||
#include <math/vec4.h>
|
#include <math/vec4.h>
|
||||||
#include <mujoco/mujoco.h>
|
#include <mujoco/mujoco.h>
|
||||||
#include "experimental/filament/filament_util.h"
|
#include "render/filament/core/mesh.h"
|
||||||
#include "experimental/filament/filament/mesh.h"
|
#include "render/filament/core/object_manager.h"
|
||||||
#include "experimental/filament/filament/object_manager.h"
|
#include "render/filament/core/texture.h"
|
||||||
#include "experimental/filament/filament/texture.h"
|
#include "render/filament/mjrfilament.h"
|
||||||
#include "experimental/filament/render_context_filament.h"
|
#include "render/filament/support/filament_util.h"
|
||||||
|
|
||||||
namespace mujoco {
|
namespace mujoco {
|
||||||
|
|
||||||
@@ -76,9 +77,7 @@ MaterialManager::~MaterialManager() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MaterialManager::BeginFrame() {
|
void MaterialManager::BeginFrame() { used_keys_.clear(); }
|
||||||
used_keys_.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
void MaterialManager::EndFrame() {
|
void MaterialManager::EndFrame() {
|
||||||
if (instances_.size() == used_keys_.size()) {
|
if (instances_.size() == used_keys_.size()) {
|
||||||
@@ -229,8 +228,8 @@ filament::MaterialInstance* MaterialManager::GetInstance(MaterialKey key) {
|
|||||||
return it->second;
|
return it->second;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MaterialManager::UpdateMaterialInstance(filament::MaterialInstance* instance,
|
void MaterialManager::UpdateMaterialInstance(
|
||||||
const mjrfMaterial& material) {
|
filament::MaterialInstance* instance, const mjrfMaterial& material) {
|
||||||
if (material.scissor[2] != 0 && material.scissor[3] != 0) {
|
if (material.scissor[2] != 0 && material.scissor[3] != 0) {
|
||||||
instance->setScissor(material.scissor[0], material.scissor[1],
|
instance->setScissor(material.scissor[0], material.scissor[1],
|
||||||
material.scissor[2], material.scissor[3]);
|
material.scissor[2], material.scissor[3]);
|
||||||
@@ -311,9 +310,7 @@ void MaterialManager::UpdateMaterialInstance(filament::MaterialInstance* instanc
|
|||||||
TrySetTexture("Reflection", material.reflection_texture, mjTEXROLE_USER);
|
TrySetTexture("Reflection", material.reflection_texture, mjTEXROLE_USER);
|
||||||
}
|
}
|
||||||
|
|
||||||
ObjectManager* MaterialManager::GetObjectManager() const {
|
ObjectManager* MaterialManager::GetObjectManager() const { return object_mgr_; }
|
||||||
return object_mgr_;
|
|
||||||
}
|
|
||||||
|
|
||||||
filament::Engine* MaterialManager::GetEngine() const {
|
filament::Engine* MaterialManager::GetEngine() const {
|
||||||
return object_mgr_->GetEngine();
|
return object_mgr_->GetEngine();
|
||||||
+7
-6
@@ -12,18 +12,19 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
#ifndef MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_MATERIAL_MANAGER_H_
|
#ifndef MUJOCO_SRC_RENDER_FILAMENT_CORE_MATERIAL_MANAGER_H_
|
||||||
#define MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_MATERIAL_MANAGER_H_
|
#define MUJOCO_SRC_RENDER_FILAMENT_CORE_MATERIAL_MANAGER_H_
|
||||||
|
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
#include <unordered_set>
|
#include <unordered_set>
|
||||||
|
|
||||||
#include <filament/Engine.h>
|
#include <filament/Engine.h>
|
||||||
#include <filament/MaterialInstance.h>
|
#include <filament/MaterialInstance.h>
|
||||||
#include <mujoco/mujoco.h>
|
#include <mujoco/mujoco.h>
|
||||||
#include "experimental/filament/filament/mesh.h"
|
#include "render/filament/core/mesh.h"
|
||||||
#include "experimental/filament/filament/object_manager.h"
|
#include "render/filament/core/object_manager.h"
|
||||||
#include "experimental/filament/render_context_filament.h"
|
#include "render/filament/mjrfilament.h"
|
||||||
|
|
||||||
namespace mujoco {
|
namespace mujoco {
|
||||||
|
|
||||||
@@ -85,4 +86,4 @@ class MaterialManager {
|
|||||||
};
|
};
|
||||||
} // namespace mujoco
|
} // namespace mujoco
|
||||||
|
|
||||||
#endif // MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_MATERIAL_MANAGER_H_
|
#endif // MUJOCO_SRC_RENDER_FILAMENT_CORE_MATERIAL_MANAGER_H_
|
||||||
@@ -12,7 +12,7 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
#include "experimental/filament/filament/mesh.h"
|
#include "render/filament/core/mesh.h"
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <cfloat>
|
#include <cfloat>
|
||||||
@@ -23,17 +23,17 @@
|
|||||||
#include <mutex>
|
#include <mutex>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
|
#include <backend/BufferDescriptor.h>
|
||||||
#include <filament/Box.h>
|
#include <filament/Box.h>
|
||||||
#include <filament/Engine.h>
|
#include <filament/Engine.h>
|
||||||
#include <filament/IndexBuffer.h>
|
#include <filament/IndexBuffer.h>
|
||||||
#include <filament/VertexBuffer.h>
|
#include <filament/VertexBuffer.h>
|
||||||
#include <backend/BufferDescriptor.h>
|
|
||||||
#include <math/TVecHelpers.h>
|
#include <math/TVecHelpers.h>
|
||||||
#include <math/vec3.h>
|
#include <math/vec3.h>
|
||||||
#include <math/vec4.h>
|
#include <math/vec4.h>
|
||||||
#include <mujoco/mujoco.h>
|
#include <mujoco/mujoco.h>
|
||||||
#include "experimental/filament/filament_util.h"
|
#include "render/filament/mjrfilament.h"
|
||||||
#include "experimental/filament/render_context_filament.h"
|
#include "render/filament/support/filament_util.h"
|
||||||
|
|
||||||
namespace mujoco {
|
namespace mujoco {
|
||||||
|
|
||||||
@@ -111,9 +111,7 @@ Mesh::Mesh(filament::Engine* engine, const mjrfMeshData& data)
|
|||||||
// If the user has provided a release callback, then we need to ensure we
|
// If the user has provided a release callback, then we need to ensure we
|
||||||
// call is when filament is done with the mesh data.
|
// call is when filament is done with the mesh data.
|
||||||
if (data.release) {
|
if (data.release) {
|
||||||
shared_state_->callbacks.push_back([=]() {
|
shared_state_->callbacks.push_back([=]() { data.release(data.user_data); });
|
||||||
data.release(data.user_data);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
BuildVertexBuffer(data);
|
BuildVertexBuffer(data);
|
||||||
@@ -215,7 +213,8 @@ void Mesh::BuildVertexBuffer(const mjrfMeshData& data) {
|
|||||||
}
|
}
|
||||||
vertex_buffer_ = vb_builder.build(*engine_);
|
vertex_buffer_ = vb_builder.build(*engine_);
|
||||||
auto* user_data = new std::shared_ptr<SharedState>(shared_state_);
|
auto* user_data = new std::shared_ptr<SharedState>(shared_state_);
|
||||||
vertex_buffer_->setBufferAt(*engine_, 0, {bytes, nbytes, callback, user_data});
|
vertex_buffer_->setBufferAt(*engine_, 0,
|
||||||
|
{bytes, nbytes, callback, user_data});
|
||||||
} else {
|
} else {
|
||||||
// For a non-interleaved vertex buffer, we assign a separate buffer to each
|
// For a non-interleaved vertex buffer, we assign a separate buffer to each
|
||||||
// attribute.
|
// attribute.
|
||||||
@@ -248,7 +247,8 @@ void Mesh::BuildVertexBuffer(const mjrfMeshData& data) {
|
|||||||
bytes = BuildOrientationsFromNormals(data.nvertices, attrib);
|
bytes = BuildOrientationsFromNormals(data.nvertices, attrib);
|
||||||
}
|
}
|
||||||
auto* user_data = new std::shared_ptr<SharedState>(shared_state_);
|
auto* user_data = new std::shared_ptr<SharedState>(shared_state_);
|
||||||
vertex_buffer_->setBufferAt(*engine_, i, {bytes, nbytes, callback, user_data});
|
vertex_buffer_->setBufferAt(*engine_, i,
|
||||||
|
{bytes, nbytes, callback, user_data});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -258,9 +258,8 @@ void Mesh::BuildIndexBuffer(const mjrfMeshData& data) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const int element_size = data.index_type == mjINDEX_TYPE_U16
|
const int element_size =
|
||||||
? sizeof(uint16_t)
|
data.index_type == mjINDEX_TYPE_U16 ? sizeof(uint16_t) : sizeof(uint32_t);
|
||||||
: sizeof(uint32_t);
|
|
||||||
const int num_bytes = data.nindices * element_size;
|
const int num_bytes = data.nindices * element_size;
|
||||||
|
|
||||||
// If indices == 0 and nindices > 0, then the user is specifying that the
|
// If indices == 0 and nindices > 0, then the user is specifying that the
|
||||||
@@ -269,9 +268,7 @@ void Mesh::BuildIndexBuffer(const mjrfMeshData& data) {
|
|||||||
const void* indices = data.indices;
|
const void* indices = data.indices;
|
||||||
if (indices == nullptr) {
|
if (indices == nullptr) {
|
||||||
std::byte* sequence = new std::byte[num_bytes];
|
std::byte* sequence = new std::byte[num_bytes];
|
||||||
shared_state_->callbacks.push_back([=]() {
|
shared_state_->callbacks.push_back([=]() { delete[] sequence; });
|
||||||
delete[] sequence;
|
|
||||||
});
|
|
||||||
|
|
||||||
if (data.index_type == mjINDEX_TYPE_U16) {
|
if (data.index_type == mjINDEX_TYPE_U16) {
|
||||||
FillSequence<uint16_t>(sequence, num_bytes);
|
FillSequence<uint16_t>(sequence, num_bytes);
|
||||||
@@ -296,9 +293,7 @@ void Mesh::BuildIndexBuffer(const mjrfMeshData& data) {
|
|||||||
float4* Mesh::BuildOrientationsFromNormals(int nvertices,
|
float4* Mesh::BuildOrientationsFromNormals(int nvertices,
|
||||||
const mjrVertexAttribute& normals) {
|
const mjrVertexAttribute& normals) {
|
||||||
float4* orientations = new float4[nvertices];
|
float4* orientations = new float4[nvertices];
|
||||||
shared_state_->callbacks.push_back([=]() {
|
shared_state_->callbacks.push_back([=]() { delete[] orientations; });
|
||||||
delete[] orientations;
|
|
||||||
});
|
|
||||||
const float* normals_ptr = reinterpret_cast<const float*>(normals.bytes);
|
const float* normals_ptr = reinterpret_cast<const float*>(normals.bytes);
|
||||||
for (int i = 0; i < nvertices; ++i) {
|
for (int i = 0; i < nvertices; ++i) {
|
||||||
orientations[i] = CalculateOrientation(ReadFloat3(normals_ptr, i));
|
orientations[i] = CalculateOrientation(ReadFloat3(normals_ptr, i));
|
||||||
@@ -359,11 +354,7 @@ bool Mesh::HasVertexAttribute(mjrVertexAttributeUsage attrib) const {
|
|||||||
return it != attributes_.end();
|
return it != attributes_.end();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Mesh::HasBounds() const {
|
bool Mesh::HasBounds() const { return bounds_.has_value(); }
|
||||||
return bounds_.has_value();
|
|
||||||
}
|
|
||||||
|
|
||||||
filament::Box Mesh::GetBounds() const {
|
filament::Box Mesh::GetBounds() const { return bounds_.value(); }
|
||||||
return bounds_.value();
|
|
||||||
}
|
|
||||||
} // namespace mujoco
|
} // namespace mujoco
|
||||||
@@ -12,8 +12,8 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
#ifndef MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_MESH_H_
|
#ifndef MUJOCO_SRC_RENDER_FILAMENT_CORE_MESH_H_
|
||||||
#define MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_MESH_H_
|
#define MUJOCO_SRC_RENDER_FILAMENT_CORE_MESH_H_
|
||||||
|
|
||||||
#include <array>
|
#include <array>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
@@ -28,7 +28,7 @@
|
|||||||
#include <filament/RenderableManager.h>
|
#include <filament/RenderableManager.h>
|
||||||
#include <filament/VertexBuffer.h>
|
#include <filament/VertexBuffer.h>
|
||||||
#include <math/vec4.h>
|
#include <math/vec4.h>
|
||||||
#include "experimental/filament/render_context_filament.h"
|
#include "render/filament/mjrfilament.h"
|
||||||
|
|
||||||
namespace mujoco {
|
namespace mujoco {
|
||||||
|
|
||||||
@@ -60,9 +60,7 @@ class Mesh : public mjrfMesh {
|
|||||||
// Returns the bounds of the mesh.
|
// Returns the bounds of the mesh.
|
||||||
filament::Box GetBounds() const;
|
filament::Box GetBounds() const;
|
||||||
|
|
||||||
static Mesh* downcast(mjrfMesh* mesh) {
|
static Mesh* downcast(mjrfMesh* mesh) { return static_cast<Mesh*>(mesh); }
|
||||||
return static_cast<Mesh*>(mesh);
|
|
||||||
}
|
|
||||||
static const Mesh* downcast(const mjrfMesh* mesh) {
|
static const Mesh* downcast(const mjrfMesh* mesh) {
|
||||||
return static_cast<const Mesh*>(mesh);
|
return static_cast<const Mesh*>(mesh);
|
||||||
}
|
}
|
||||||
@@ -95,4 +93,4 @@ class Mesh : public mjrfMesh {
|
|||||||
|
|
||||||
} // namespace mujoco
|
} // namespace mujoco
|
||||||
|
|
||||||
#endif // MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_MESH_H_
|
#endif // MUJOCO_SRC_RENDER_FILAMENT_CORE_MESH_H_
|
||||||
+24
-18
@@ -12,7 +12,7 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
#include "experimental/filament/filament/object_manager.h"
|
#include "render/filament/core/object_manager.h"
|
||||||
|
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
@@ -27,7 +27,7 @@
|
|||||||
#include <filament/Texture.h>
|
#include <filament/Texture.h>
|
||||||
#include <math/vec2.h>
|
#include <math/vec2.h>
|
||||||
#include <mujoco/mujoco.h>
|
#include <mujoco/mujoco.h>
|
||||||
#include "experimental/filament/filament/builtins.h"
|
#include "render/filament/core/builtins.h"
|
||||||
#include "user/user_resource.h"
|
#include "user/user_resource.h"
|
||||||
|
|
||||||
namespace mujoco {
|
namespace mujoco {
|
||||||
@@ -40,7 +40,8 @@ std::string ResolveFilamentAssetPath(const std::string& filename) {
|
|||||||
static filament::Material* LoadMaterial(filament::Engine* engine,
|
static filament::Material* LoadMaterial(filament::Engine* engine,
|
||||||
std::string_view filename) {
|
std::string_view filename) {
|
||||||
const std::string path = ResolveFilamentAssetPath(std::string(filename));
|
const std::string path = ResolveFilamentAssetPath(std::string(filename));
|
||||||
mjResource* resource = mju_openResource("", path.c_str(), nullptr, nullptr, 0);
|
mjResource* resource =
|
||||||
|
mju_openResource("", path.c_str(), nullptr, nullptr, 0);
|
||||||
void* payload = nullptr;
|
void* payload = nullptr;
|
||||||
int size = mju_readResource(resource, const_cast<const void**>(&payload));
|
int size = mju_readResource(resource, const_cast<const void**>(&payload));
|
||||||
filament::Material::Builder material_builder;
|
filament::Material::Builder material_builder;
|
||||||
@@ -50,31 +51,39 @@ static filament::Material* LoadMaterial(filament::Engine* engine,
|
|||||||
return material;
|
return material;
|
||||||
};
|
};
|
||||||
|
|
||||||
ObjectManager::ObjectManager(filament::Engine* engine)
|
ObjectManager::ObjectManager(filament::Engine* engine) : engine_(engine) {
|
||||||
: engine_(engine) {
|
|
||||||
materials_[kPbr] = LoadMaterial(engine, "pbr.filamat");
|
materials_[kPbr] = LoadMaterial(engine, "pbr.filamat");
|
||||||
materials_[kPbrPacked] = LoadMaterial(engine, "pbr_packed.filamat");
|
materials_[kPbrPacked] = LoadMaterial(engine, "pbr_packed.filamat");
|
||||||
materials_[kPbrTransparent] = LoadMaterial(engine, "pbr_transparent.filamat");
|
materials_[kPbrTransparent] = LoadMaterial(engine, "pbr_transparent.filamat");
|
||||||
materials_[kPbrPackedTransparent] = LoadMaterial(engine, "pbr_packed_transparent.filamat");
|
materials_[kPbrPackedTransparent] =
|
||||||
|
LoadMaterial(engine, "pbr_packed_transparent.filamat");
|
||||||
materials_[kPhong2d] = LoadMaterial(engine, "phong_2d.filamat");
|
materials_[kPhong2d] = LoadMaterial(engine, "phong_2d.filamat");
|
||||||
materials_[kPhong2dFade] = LoadMaterial(engine, "phong_2d_fade.filamat");
|
materials_[kPhong2dFade] = LoadMaterial(engine, "phong_2d_fade.filamat");
|
||||||
materials_[kPhong2dReflect] = LoadMaterial(engine, "phong_2d_reflect.filamat");
|
materials_[kPhong2dReflect] =
|
||||||
|
LoadMaterial(engine, "phong_2d_reflect.filamat");
|
||||||
materials_[kPhong2dUv] = LoadMaterial(engine, "phong_2d_uv.filamat");
|
materials_[kPhong2dUv] = LoadMaterial(engine, "phong_2d_uv.filamat");
|
||||||
materials_[kPhong2dUvFade] = LoadMaterial(engine, "phong_2d_uv_fade.filamat");
|
materials_[kPhong2dUvFade] = LoadMaterial(engine, "phong_2d_uv_fade.filamat");
|
||||||
materials_[kPhong2dUvReflect] = LoadMaterial(engine, "phong_2d_uv_reflect.filamat");
|
materials_[kPhong2dUvReflect] =
|
||||||
|
LoadMaterial(engine, "phong_2d_uv_reflect.filamat");
|
||||||
materials_[kPhongColor] = LoadMaterial(engine, "phong_color.filamat");
|
materials_[kPhongColor] = LoadMaterial(engine, "phong_color.filamat");
|
||||||
materials_[kPhongColorFade] = LoadMaterial(engine, "phong_color_fade.filamat");
|
materials_[kPhongColorFade] =
|
||||||
materials_[kPhongColorReflect] = LoadMaterial(engine, "phong_color_reflect.filamat");
|
LoadMaterial(engine, "phong_color_fade.filamat");
|
||||||
|
materials_[kPhongColorReflect] =
|
||||||
|
LoadMaterial(engine, "phong_color_reflect.filamat");
|
||||||
materials_[kPhongCube] = LoadMaterial(engine, "phong_cube.filamat");
|
materials_[kPhongCube] = LoadMaterial(engine, "phong_cube.filamat");
|
||||||
materials_[kPhongCubeFade] = LoadMaterial(engine, "phong_cube_fade.filamat");
|
materials_[kPhongCubeFade] = LoadMaterial(engine, "phong_cube_fade.filamat");
|
||||||
materials_[kPhongCubeReflect] = LoadMaterial(engine, "phong_cube_reflect.filamat");
|
materials_[kPhongCubeReflect] =
|
||||||
materials_[kUnlitSegmentation] = LoadMaterial(engine, "unlit_segmentation.filamat");
|
LoadMaterial(engine, "phong_cube_reflect.filamat");
|
||||||
|
materials_[kUnlitSegmentation] =
|
||||||
|
LoadMaterial(engine, "unlit_segmentation.filamat");
|
||||||
materials_[kUnlitDecor] = LoadMaterial(engine, "unlit_decor.filamat");
|
materials_[kUnlitDecor] = LoadMaterial(engine, "unlit_decor.filamat");
|
||||||
materials_[kUnlitDepth] = LoadMaterial(engine, "unlit_depth.filamat");
|
materials_[kUnlitDepth] = LoadMaterial(engine, "unlit_depth.filamat");
|
||||||
materials_[kUnlitUi] = LoadMaterial(engine, "unlit_ui.filamat");
|
materials_[kUnlitUi] = LoadMaterial(engine, "unlit_ui.filamat");
|
||||||
materials_[kOutlineComposite] = LoadMaterial(engine, "outline_composite.filamat");
|
materials_[kOutlineComposite] =
|
||||||
|
LoadMaterial(engine, "outline_composite.filamat");
|
||||||
materials_[kOutlineFlatten] = LoadMaterial(engine, "outline_flatten.filamat");
|
materials_[kOutlineFlatten] = LoadMaterial(engine, "outline_flatten.filamat");
|
||||||
materials_[kOutlineJumpFlood] = LoadMaterial(engine, "outline_jumpflood.filamat");
|
materials_[kOutlineJumpFlood] =
|
||||||
|
LoadMaterial(engine, "outline_jumpflood.filamat");
|
||||||
|
|
||||||
static uint8_t black_rgb[3] = {0, 0, 0};
|
static uint8_t black_rgb[3] = {0, 0, 0};
|
||||||
static uint8_t white_rgb[3] = {255, 255, 255};
|
static uint8_t white_rgb[3] = {255, 255, 255};
|
||||||
@@ -160,10 +169,7 @@ void ObjectManager::CreateQuadBuffers() {
|
|||||||
// large triangle is more efficient than a two-triangle quad because it
|
// large triangle is more efficient than a two-triangle quad because it
|
||||||
// avoids the diagonal edge where pixels might be rasterized twice.)
|
// avoids the diagonal edge where pixels might be rasterized twice.)
|
||||||
static const filament::math::float2 kVertices[3] = {
|
static const filament::math::float2 kVertices[3] = {
|
||||||
{-1.0f, -1.0f},
|
{-1.0f, -1.0f}, {3.0f, -1.0f}, {-1.0f, 3.0f}};
|
||||||
{ 3.0f, -1.0f},
|
|
||||||
{-1.0f, 3.0f}
|
|
||||||
};
|
|
||||||
|
|
||||||
static const uint16_t kIndices[3] = {0, 1, 2};
|
static const uint16_t kIndices[3] = {0, 1, 2};
|
||||||
|
|
||||||
+4
-4
@@ -12,8 +12,8 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
#ifndef MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_OBJECT_MANAGER_H_
|
#ifndef MUJOCO_SRC_RENDER_FILAMENT_CORE_OBJECT_MANAGER_H_
|
||||||
#define MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_OBJECT_MANAGER_H_
|
#define MUJOCO_SRC_RENDER_FILAMENT_CORE_OBJECT_MANAGER_H_
|
||||||
|
|
||||||
#include <array>
|
#include <array>
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
@@ -27,7 +27,7 @@
|
|||||||
#include <filament/Skybox.h>
|
#include <filament/Skybox.h>
|
||||||
#include <filament/Texture.h>
|
#include <filament/Texture.h>
|
||||||
#include <mujoco/mujoco.h>
|
#include <mujoco/mujoco.h>
|
||||||
#include "experimental/filament/filament/builtins.h"
|
#include "render/filament/core/builtins.h"
|
||||||
|
|
||||||
namespace mujoco {
|
namespace mujoco {
|
||||||
|
|
||||||
@@ -104,4 +104,4 @@ class ObjectManager {
|
|||||||
|
|
||||||
} // namespace mujoco
|
} // namespace mujoco
|
||||||
|
|
||||||
#endif // MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_OBJECT_MANAGER_H_
|
#endif // MUJOCO_SRC_RENDER_FILAMENT_CORE_OBJECT_MANAGER_H_
|
||||||
+8
-11
@@ -12,7 +12,7 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
#include "experimental/filament/filament/outliner.h"
|
#include "render/filament/core/outliner.h"
|
||||||
|
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
@@ -20,8 +20,8 @@
|
|||||||
#include <filament/Camera.h>
|
#include <filament/Camera.h>
|
||||||
#include <filament/Material.h>
|
#include <filament/Material.h>
|
||||||
#include <filament/MaterialInstance.h>
|
#include <filament/MaterialInstance.h>
|
||||||
#include <filament/RenderableManager.h>
|
|
||||||
#include <filament/RenderTarget.h>
|
#include <filament/RenderTarget.h>
|
||||||
|
#include <filament/RenderableManager.h>
|
||||||
#include <filament/Scene.h>
|
#include <filament/Scene.h>
|
||||||
#include <filament/TextureSampler.h>
|
#include <filament/TextureSampler.h>
|
||||||
#include <filament/View.h>
|
#include <filament/View.h>
|
||||||
@@ -29,10 +29,10 @@
|
|||||||
#include <math/vec4.h>
|
#include <math/vec4.h>
|
||||||
#include <utils/EntityManager.h>
|
#include <utils/EntityManager.h>
|
||||||
#include <mujoco/mujoco.h>
|
#include <mujoco/mujoco.h>
|
||||||
#include "experimental/filament/filament/object_manager.h"
|
#include "render/filament/core/object_manager.h"
|
||||||
#include "experimental/filament/filament/render_target.h"
|
#include "render/filament/core/render_target.h"
|
||||||
#include "experimental/filament/filament/texture.h"
|
#include "render/filament/core/texture.h"
|
||||||
#include "experimental/filament/render_context_filament.h"
|
#include "render/filament/mjrfilament.h"
|
||||||
|
|
||||||
namespace mujoco {
|
namespace mujoco {
|
||||||
|
|
||||||
@@ -44,9 +44,7 @@ Outliner::Outliner(ObjectManager* object_mgr, uint8_t layer_mask,
|
|||||||
color_(color),
|
color_(color),
|
||||||
thickness_(thickness) {}
|
thickness_(thickness) {}
|
||||||
|
|
||||||
Outliner::~Outliner() {
|
Outliner::~Outliner() { Reset(); }
|
||||||
Reset();
|
|
||||||
}
|
|
||||||
|
|
||||||
void Outliner::Prepare(int width, int height) {
|
void Outliner::Prepare(int width, int height) {
|
||||||
if (width == width_ && height == height_) {
|
if (width == width_ && height == height_) {
|
||||||
@@ -215,8 +213,7 @@ void Outliner::Reset() {
|
|||||||
height_ = 0;
|
height_ = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Outliner::Render(filament::Renderer* renderer,
|
void Outliner::Render(filament::Renderer* renderer, filament::View* view,
|
||||||
filament::View* view,
|
|
||||||
filament::RenderTarget* render_target) {
|
filament::RenderTarget* render_target) {
|
||||||
filament::Viewport viewport = view->getViewport();
|
filament::Viewport viewport = view->getViewport();
|
||||||
Prepare(viewport.width, viewport.height);
|
Prepare(viewport.width, viewport.height);
|
||||||
@@ -12,8 +12,8 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
#ifndef MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_OUTLINER_H_
|
#ifndef MUJOCO_SRC_RENDER_FILAMENT_CORE_OUTLINER_H_
|
||||||
#define MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_OUTLINER_H_
|
#define MUJOCO_SRC_RENDER_FILAMENT_CORE_OUTLINER_H_
|
||||||
|
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
@@ -23,8 +23,8 @@
|
|||||||
#include <filament/View.h>
|
#include <filament/View.h>
|
||||||
#include <math/vec4.h>
|
#include <math/vec4.h>
|
||||||
#include <utils/Entity.h>
|
#include <utils/Entity.h>
|
||||||
#include "experimental/filament/filament/object_manager.h"
|
#include "render/filament/core/object_manager.h"
|
||||||
#include "experimental/filament/filament/render_target.h"
|
#include "render/filament/core/render_target.h"
|
||||||
|
|
||||||
namespace mujoco {
|
namespace mujoco {
|
||||||
|
|
||||||
@@ -84,4 +84,4 @@ class Outliner {
|
|||||||
};
|
};
|
||||||
} // namespace mujoco
|
} // namespace mujoco
|
||||||
|
|
||||||
#endif // MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_OUTLINER_H_
|
#endif // MUJOCO_SRC_RENDER_FILAMENT_CORE_OUTLINER_H_
|
||||||
+8
-12
@@ -12,27 +12,25 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
#include "experimental/filament/filament/reflection_manager.h"
|
#include "render/filament/core/reflection_manager.h"
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
#include <filament/Engine.h>
|
#include <filament/Engine.h>
|
||||||
#include "experimental/filament/filament/render_target.h"
|
#include "render/filament/core/render_target.h"
|
||||||
#include "experimental/filament/render_context_filament.h"
|
#include "render/filament/mjrfilament.h"
|
||||||
|
|
||||||
namespace mujoco {
|
namespace mujoco {
|
||||||
|
|
||||||
ReflectionManager::ReflectionManager(filament::Engine* engine)
|
ReflectionManager::ReflectionManager(filament::Engine* engine)
|
||||||
: engine_(engine) {}
|
: engine_(engine) {}
|
||||||
|
|
||||||
ReflectionManager::~ReflectionManager() {
|
ReflectionManager::~ReflectionManager() {}
|
||||||
}
|
|
||||||
|
|
||||||
void ReflectionManager::ClearRenderables() {
|
void ReflectionManager::ClearRenderables() { renderables_.clear(); }
|
||||||
renderables_.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
mjrfTexture* ReflectionManager::Register(mjrfRenderable* renderable, int width,
|
mjrfTexture* ReflectionManager::Register(mjrfRenderable* renderable, int width,
|
||||||
int height) {
|
int height) {
|
||||||
if (targets_.size() == renderables_.size()) {
|
if (targets_.size() == renderables_.size()) {
|
||||||
mjrfRenderTargetConfig config;
|
mjrfRenderTargetConfig config;
|
||||||
mjrf_defaultRenderTargetConfig(&config);
|
mjrf_defaultRenderTargetConfig(&config);
|
||||||
@@ -46,9 +44,7 @@ mjrfTexture* ReflectionManager::Register(mjrfRenderable* renderable, int width,
|
|||||||
return target->GetColorTexture();
|
return target->GetColorTexture();
|
||||||
}
|
}
|
||||||
|
|
||||||
int ReflectionManager::GetNumRenderables() const {
|
int ReflectionManager::GetNumRenderables() const { return renderables_.size(); }
|
||||||
return renderables_.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
mjrfRenderable* ReflectionManager::GetRenderable(int index) const {
|
mjrfRenderable* ReflectionManager::GetRenderable(int index) const {
|
||||||
return renderables_[index];
|
return renderables_[index];
|
||||||
+5
-5
@@ -12,15 +12,15 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
#ifndef MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_REFLECTION_MANAGER_H_
|
#ifndef MUJOCO_SRC_RENDER_FILAMENT_CORE_REFLECTION_MANAGER_H_
|
||||||
#define MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_REFLECTION_MANAGER_H_
|
#define MUJOCO_SRC_RENDER_FILAMENT_CORE_REFLECTION_MANAGER_H_
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include <filament/Engine.h>
|
#include <filament/Engine.h>
|
||||||
#include "experimental/filament/filament/render_target.h"
|
#include "render/filament/core/render_target.h"
|
||||||
#include "experimental/filament/render_context_filament.h"
|
#include "render/filament/mjrfilament.h"
|
||||||
|
|
||||||
namespace mujoco {
|
namespace mujoco {
|
||||||
|
|
||||||
@@ -58,4 +58,4 @@ class ReflectionManager {
|
|||||||
};
|
};
|
||||||
} // namespace mujoco
|
} // namespace mujoco
|
||||||
|
|
||||||
#endif // MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_REFLECTION_MANAGER_H_
|
#endif // MUJOCO_SRC_RENDER_FILAMENT_CORE_REFLECTION_MANAGER_H_
|
||||||
+11
-15
@@ -12,7 +12,7 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
#include "experimental/filament/filament/render_target.h"
|
#include "render/filament/core/render_target.h"
|
||||||
|
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
@@ -22,12 +22,12 @@
|
|||||||
#include <backend/DriverEnums.h>
|
#include <backend/DriverEnums.h>
|
||||||
#include <backend/PixelBufferDescriptor.h>
|
#include <backend/PixelBufferDescriptor.h>
|
||||||
#include <filament/Engine.h>
|
#include <filament/Engine.h>
|
||||||
#include <filament/Renderer.h>
|
|
||||||
#include <filament/RenderTarget.h>
|
#include <filament/RenderTarget.h>
|
||||||
|
#include <filament/Renderer.h>
|
||||||
#include <filament/Texture.h>
|
#include <filament/Texture.h>
|
||||||
#include <mujoco/mujoco.h>
|
#include <mujoco/mujoco.h>
|
||||||
#include "experimental/filament/filament/texture.h"
|
#include "render/filament/core/texture.h"
|
||||||
#include "experimental/filament/render_context_filament.h"
|
#include "render/filament/mjrfilament.h"
|
||||||
|
|
||||||
namespace mujoco {
|
namespace mujoco {
|
||||||
|
|
||||||
@@ -39,9 +39,7 @@ RenderTarget::RenderTarget(filament::Engine* engine,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RenderTarget::~RenderTarget() noexcept {
|
RenderTarget::~RenderTarget() noexcept { Destroy(); }
|
||||||
Destroy();
|
|
||||||
}
|
|
||||||
|
|
||||||
void RenderTarget::Prepare(int width, int height) {
|
void RenderTarget::Prepare(int width, int height) {
|
||||||
if (width == width_ && height == height_) {
|
if (width == width_ && height == height_) {
|
||||||
@@ -65,7 +63,8 @@ void RenderTarget::Prepare(int width, int height) {
|
|||||||
color_config.format = config_.color_format;
|
color_config.format = config_.color_format;
|
||||||
color_config.color_space = mjCOLORSPACE_LINEAR;
|
color_config.color_space = mjCOLORSPACE_LINEAR;
|
||||||
color_flags.color_attachment = true;
|
color_flags.color_attachment = true;
|
||||||
color_texture_ = std::make_unique<Texture>(engine_, color_config, color_flags);
|
color_texture_ =
|
||||||
|
std::make_unique<Texture>(engine_, color_config, color_flags);
|
||||||
|
|
||||||
mjrfTextureConfig depth_config;
|
mjrfTextureConfig depth_config;
|
||||||
mjrf_defaultTextureConfig(&depth_config);
|
mjrf_defaultTextureConfig(&depth_config);
|
||||||
@@ -76,7 +75,8 @@ void RenderTarget::Prepare(int width, int height) {
|
|||||||
depth_config.format = config_.depth_format;
|
depth_config.format = config_.depth_format;
|
||||||
depth_config.color_space = mjCOLORSPACE_LINEAR;
|
depth_config.color_space = mjCOLORSPACE_LINEAR;
|
||||||
depth_flags.depth_attachment = true;
|
depth_flags.depth_attachment = true;
|
||||||
depth_texture_ = std::make_unique<Texture>(engine_, depth_config, depth_flags);
|
depth_texture_ =
|
||||||
|
std::make_unique<Texture>(engine_, depth_config, depth_flags);
|
||||||
|
|
||||||
filament::RenderTarget::Builder builder;
|
filament::RenderTarget::Builder builder;
|
||||||
builder.texture(filament::RenderTarget::AttachmentPoint::COLOR,
|
builder.texture(filament::RenderTarget::AttachmentPoint::COLOR,
|
||||||
@@ -124,13 +124,9 @@ void RenderTarget::Destroy() {
|
|||||||
depth_texture_.reset();
|
depth_texture_.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
Texture* RenderTarget::GetColorTexture() const {
|
Texture* RenderTarget::GetColorTexture() const { return color_texture_.get(); }
|
||||||
return color_texture_.get();
|
|
||||||
}
|
|
||||||
|
|
||||||
Texture* RenderTarget::GetDepthTexture() const {
|
Texture* RenderTarget::GetDepthTexture() const { return depth_texture_.get(); }
|
||||||
return depth_texture_.get();
|
|
||||||
}
|
|
||||||
|
|
||||||
filament::RenderTarget* RenderTarget::GetFilamentRenderTarget() const {
|
filament::RenderTarget* RenderTarget::GetFilamentRenderTarget() const {
|
||||||
return render_target_;
|
return render_target_;
|
||||||
+5
-5
@@ -12,8 +12,8 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
#ifndef MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_RENDER_TARGET_H_
|
#ifndef MUJOCO_SRC_RENDER_FILAMENT_CORE_RENDER_TARGET_H_
|
||||||
#define MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_RENDER_TARGET_H_
|
#define MUJOCO_SRC_RENDER_FILAMENT_CORE_RENDER_TARGET_H_
|
||||||
|
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
@@ -21,8 +21,8 @@
|
|||||||
|
|
||||||
#include <filament/Engine.h>
|
#include <filament/Engine.h>
|
||||||
#include <filament/Texture.h>
|
#include <filament/Texture.h>
|
||||||
#include "experimental/filament/filament/texture.h"
|
#include "render/filament/core/texture.h"
|
||||||
#include "experimental/filament/render_context_filament.h"
|
#include "render/filament/mjrfilament.h"
|
||||||
|
|
||||||
namespace mujoco {
|
namespace mujoco {
|
||||||
|
|
||||||
@@ -75,4 +75,4 @@ class RenderTarget : public mjrfRenderTarget {
|
|||||||
|
|
||||||
} // namespace mujoco
|
} // namespace mujoco
|
||||||
|
|
||||||
#endif // MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_RENDER_TARGET_H_
|
#endif // MUJOCO_SRC_RENDER_FILAMENT_CORE_RENDER_TARGET_H_
|
||||||
+39
-34
@@ -12,7 +12,7 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
#include "experimental/filament/filament/renderable.h"
|
#include "render/filament/core/renderable.h"
|
||||||
|
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
@@ -35,12 +35,12 @@
|
|||||||
#include <utils/EntityManager.h>
|
#include <utils/EntityManager.h>
|
||||||
#include <mujoco/mujoco.h>
|
#include <mujoco/mujoco.h>
|
||||||
#include "engine/engine_vis_visualize.h"
|
#include "engine/engine_vis_visualize.h"
|
||||||
#include "experimental/filament/filament_util.h"
|
#include "render/filament/core/builtins.h"
|
||||||
#include "experimental/filament/filament/builtins.h"
|
#include "render/filament/core/material_manager.h"
|
||||||
#include "experimental/filament/filament/material_manager.h"
|
#include "render/filament/core/mesh.h"
|
||||||
#include "experimental/filament/filament/mesh.h"
|
#include "render/filament/core/reflection_manager.h"
|
||||||
#include "experimental/filament/filament/reflection_manager.h"
|
#include "render/filament/mjrfilament.h"
|
||||||
#include "experimental/filament/render_context_filament.h"
|
#include "render/filament/support/filament_util.h"
|
||||||
|
|
||||||
namespace mujoco {
|
namespace mujoco {
|
||||||
|
|
||||||
@@ -127,8 +127,8 @@ void Renderable::InitPartEntity(Part& part) {
|
|||||||
filament::IndexBuffer* index_buffer = part.mesh->GetFilamentIndexBuffer();
|
filament::IndexBuffer* index_buffer = part.mesh->GetFilamentIndexBuffer();
|
||||||
|
|
||||||
filament::RenderableManager::Builder builder(1);
|
filament::RenderableManager::Builder builder(1);
|
||||||
builder.geometry(0, part.mesh->GetPrimitiveType(), vertex_buffer, index_buffer,
|
builder.geometry(0, part.mesh->GetPrimitiveType(), vertex_buffer,
|
||||||
part.elem_offset, part.elem_count);
|
index_buffer, part.elem_offset, part.elem_count);
|
||||||
if (part.mesh->HasBounds()) {
|
if (part.mesh->HasBounds()) {
|
||||||
builder.boundingBox(part.mesh->GetBounds());
|
builder.boundingBox(part.mesh->GetBounds());
|
||||||
} else {
|
} else {
|
||||||
@@ -184,9 +184,7 @@ void Renderable::UpdateTransform() {
|
|||||||
transform_ = tm.getTransform(tm.getInstance(parts_[0].entity));
|
transform_ = tm.getTransform(tm.getInstance(parts_[0].entity));
|
||||||
}
|
}
|
||||||
|
|
||||||
const mat4f& Renderable::GetTransform() const {
|
const mat4f& Renderable::GetTransform() const { return transform_; }
|
||||||
return transform_;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Renderable::AppendMesh(const Mesh* mesh) {
|
void Renderable::AppendMesh(const Mesh* mesh) {
|
||||||
Part& part = parts_.emplace_back();
|
Part& part = parts_.emplace_back();
|
||||||
@@ -232,9 +230,7 @@ void Renderable::UpdateMaterial(const mjrfMaterial& material) {
|
|||||||
material_ = material;
|
material_ = material;
|
||||||
}
|
}
|
||||||
|
|
||||||
const mjrfMaterial& Renderable::GetMaterial() const {
|
const mjrfMaterial& Renderable::GetMaterial() const { return material_; }
|
||||||
return material_;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Renderable::Prepare(std::span<const mjrfRenderRequest*> requests,
|
void Renderable::Prepare(std::span<const mjrfRenderRequest*> requests,
|
||||||
ReflectionManager* reflection_mgr) {
|
ReflectionManager* reflection_mgr) {
|
||||||
@@ -383,11 +379,11 @@ void Renderable::BindMaterialInstance(const mjrfRenderRequest& request) {
|
|||||||
draw_queue_.pop_front();
|
draw_queue_.pop_front();
|
||||||
}
|
}
|
||||||
|
|
||||||
MaterialManager::MaterialKey Renderable::SetMaterialInstance(MaterialManager::MaterialKey key) {
|
MaterialManager::MaterialKey Renderable::SetMaterialInstance(
|
||||||
|
MaterialManager::MaterialKey key) {
|
||||||
MaterialManager::MaterialKey prev = curr_state_.material_key;
|
MaterialManager::MaterialKey prev = curr_state_.material_key;
|
||||||
if (key != curr_state_.material_key) {
|
if (key != curr_state_.material_key) {
|
||||||
filament::MaterialInstance* instance =
|
filament::MaterialInstance* instance = material_mgr_->GetInstance(key);
|
||||||
material_mgr_->GetInstance(key);
|
|
||||||
filament::RenderableManager& rm = GetEngine()->getRenderableManager();
|
filament::RenderableManager& rm = GetEngine()->getRenderableManager();
|
||||||
for (Part& part : parts_) {
|
for (Part& part : parts_) {
|
||||||
filament::RenderableManager::Instance ri = rm.getInstance(part.entity);
|
filament::RenderableManager::Instance ri = rm.getInstance(part.entity);
|
||||||
@@ -440,7 +436,8 @@ void Renderable::SetReceiveShadows(bool 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), params_.receive_shadows);
|
rm.setReceiveShadows(rm.getInstance(part.entity),
|
||||||
|
params_.receive_shadows);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -454,12 +451,13 @@ void Renderable::SetWireframe(bool wireframe) {
|
|||||||
|
|
||||||
filament::RenderableManager& rm = GetEngine()->getRenderableManager();
|
filament::RenderableManager& rm = GetEngine()->getRenderableManager();
|
||||||
for (Part& part : parts_) {
|
for (Part& part : parts_) {
|
||||||
filament::VertexBuffer* vertex_buffer = part.mesh->GetFilamentVertexBuffer();
|
filament::VertexBuffer* vertex_buffer =
|
||||||
|
part.mesh->GetFilamentVertexBuffer();
|
||||||
filament::IndexBuffer* index_buffer = part.mesh->GetFilamentIndexBuffer();
|
filament::IndexBuffer* index_buffer = part.mesh->GetFilamentIndexBuffer();
|
||||||
rm.setGeometryAt(rm.getInstance(part.entity), 0,
|
rm.setGeometryAt(
|
||||||
wireframe ? kWireframeType : part.mesh->GetPrimitiveType(),
|
rm.getInstance(part.entity), 0,
|
||||||
vertex_buffer, index_buffer, part.elem_offset,
|
wireframe ? kWireframeType : part.mesh->GetPrimitiveType(),
|
||||||
part.elem_count);
|
vertex_buffer, index_buffer, part.elem_offset, part.elem_count);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -509,7 +507,8 @@ void Renderable::SetGeomMesh(mjtGeom type, int nstack, int nslice, int nquad) {
|
|||||||
bottom *= mat4f::scaling(float3{trs.size.x, trs.size.y, xz_size});
|
bottom *= mat4f::scaling(float3{trs.size.x, trs.size.y, xz_size});
|
||||||
return bottom;
|
return bottom;
|
||||||
} else {
|
} else {
|
||||||
mju_error("Invalid index for capsule geom: %d (expected [0,2])", index);
|
mju_error("Invalid index for capsule geom: %d (expected [0,2])",
|
||||||
|
index);
|
||||||
return trs.ToTransform();
|
return trs.ToTransform();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -538,7 +537,8 @@ void Renderable::SetGeomMesh(mjtGeom type, int nstack, int nslice, int nquad) {
|
|||||||
bottom *= mat4f::scaling(trs.size);
|
bottom *= mat4f::scaling(trs.size);
|
||||||
return bottom;
|
return bottom;
|
||||||
} else {
|
} else {
|
||||||
mju_error("Invalid index for cylinder geom: %d (expected [0,2])", index);
|
mju_error("Invalid index for cylinder geom: %d (expected [0,2])",
|
||||||
|
index);
|
||||||
return trs.ToTransform();
|
return trs.ToTransform();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -564,7 +564,8 @@ void Renderable::SetGeomMesh(mjtGeom type, int nstack, int nslice, int nquad) {
|
|||||||
mat4f top_disk = base;
|
mat4f top_disk = base;
|
||||||
top_disk *= mat4f::translation(float3{0, 0, trs.size.z});
|
top_disk *= mat4f::translation(float3{0, 0, trs.size.z});
|
||||||
top_disk *= mat4f::rotation(std::numbers::pi, float3{1, 0, 0});
|
top_disk *= mat4f::rotation(std::numbers::pi, float3{1, 0, 0});
|
||||||
top_disk *= mat4f::scaling(float3{kArrowHeadSize, kArrowHeadSize, 1.0f});
|
top_disk *=
|
||||||
|
mat4f::scaling(float3{kArrowHeadSize, kArrowHeadSize, 1.0f});
|
||||||
return top_disk * mat4f::scaling(trs.size);
|
return top_disk * mat4f::scaling(trs.size);
|
||||||
} else if (index == 3) {
|
} else if (index == 3) {
|
||||||
mat4f bottom = base;
|
mat4f bottom = base;
|
||||||
@@ -583,9 +584,9 @@ void Renderable::SetGeomMesh(mjtGeom type, int nstack, int nslice, int nquad) {
|
|||||||
AppendMesh(builtins->Disk());
|
AppendMesh(builtins->Disk());
|
||||||
|
|
||||||
get_transform_fn_ = [](int index, const Trs& trs) {
|
get_transform_fn_ = [](int index, const Trs& trs) {
|
||||||
mat4f base = mat4f(trs.rotation, trs.translation);
|
mat4f base = mat4f(trs.rotation, trs.translation);
|
||||||
base *= mat4f::scaling(float3{1, 1, kArrowScale});
|
base *= mat4f::scaling(float3{1, 1, kArrowScale});
|
||||||
base *= mat4f::translation(float3{0, 0, trs.size.z});
|
base *= mat4f::translation(float3{0, 0, trs.size.z});
|
||||||
if (index == 0) {
|
if (index == 0) {
|
||||||
return base * mat4f::scaling(trs.size);
|
return base * mat4f::scaling(trs.size);
|
||||||
} else if (index == 1) {
|
} else if (index == 1) {
|
||||||
@@ -598,7 +599,8 @@ void Renderable::SetGeomMesh(mjtGeom type, int nstack, int nslice, int nquad) {
|
|||||||
bottom *= mat4f::rotation(std::numbers::pi, float3{1, 0, 0});
|
bottom *= mat4f::rotation(std::numbers::pi, float3{1, 0, 0});
|
||||||
return bottom * mat4f::scaling(trs.size);
|
return bottom * mat4f::scaling(trs.size);
|
||||||
} else {
|
} else {
|
||||||
mju_error("Invalid index for arrow1 geom: %d (expected [0,2])", index);
|
mju_error("Invalid index for arrow1 geom: %d (expected [0,2])",
|
||||||
|
index);
|
||||||
return trs.ToTransform();
|
return trs.ToTransform();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -625,20 +627,23 @@ void Renderable::SetGeomMesh(mjtGeom type, int nstack, int nslice, int nquad) {
|
|||||||
mat4f bottom = base;
|
mat4f bottom = base;
|
||||||
bottom *= mat4f::translation(float3{0, 0, -trs.size.z});
|
bottom *= mat4f::translation(float3{0, 0, -trs.size.z});
|
||||||
bottom *= mat4f::rotation(std::numbers::pi, float3{1, 0, 0});
|
bottom *= mat4f::rotation(std::numbers::pi, float3{1, 0, 0});
|
||||||
bottom *= mat4f::scaling(float3{kArrowHeadSize, kArrowHeadSize, 1.0f});
|
bottom *=
|
||||||
|
mat4f::scaling(float3{kArrowHeadSize, kArrowHeadSize, 1.0f});
|
||||||
return bottom * mat4f::scaling(trs.size);
|
return bottom * mat4f::scaling(trs.size);
|
||||||
} else if (index == 3) {
|
} else if (index == 3) {
|
||||||
mat4f top_disk = base;
|
mat4f top_disk = base;
|
||||||
top_disk *= mat4f::translation(float3{0, 0, trs.size.z});
|
top_disk *= mat4f::translation(float3{0, 0, trs.size.z});
|
||||||
top_disk *= mat4f::rotation(std::numbers::pi, float3{1, 0, 0});
|
top_disk *= mat4f::rotation(std::numbers::pi, float3{1, 0, 0});
|
||||||
top_disk *= mat4f::scaling(float3{kArrowHeadSize, kArrowHeadSize, 1.0f});
|
top_disk *=
|
||||||
|
mat4f::scaling(float3{kArrowHeadSize, kArrowHeadSize, 1.0f});
|
||||||
return top_disk * mat4f::scaling(trs.size);
|
return top_disk * mat4f::scaling(trs.size);
|
||||||
} else if (index == 4) {
|
} else if (index == 4) {
|
||||||
mat4f bottom_disk = base;
|
mat4f bottom_disk = base;
|
||||||
bottom_disk *= mat4f::translation(float3{0, 0, -trs.size.z});
|
bottom_disk *= mat4f::translation(float3{0, 0, -trs.size.z});
|
||||||
return bottom_disk * mat4f::scaling(trs.size);
|
return bottom_disk * mat4f::scaling(trs.size);
|
||||||
} else {
|
} else {
|
||||||
mju_error("Invalid index for arrow2 geom: %d (expected [0,4])", index);
|
mju_error("Invalid index for arrow2 geom: %d (expected [0,4])",
|
||||||
|
index);
|
||||||
return trs.ToTransform();
|
return trs.ToTransform();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
+14
-13
@@ -12,8 +12,8 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
#ifndef MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_RENDERABLE_H_
|
#ifndef MUJOCO_SRC_RENDER_FILAMENT_CORE_RENDERABLE_H_
|
||||||
#define MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_RENDERABLE_H_
|
#define MUJOCO_SRC_RENDER_FILAMENT_CORE_RENDERABLE_H_
|
||||||
|
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <deque>
|
#include <deque>
|
||||||
@@ -28,19 +28,19 @@
|
|||||||
#include <math/vec3.h>
|
#include <math/vec3.h>
|
||||||
#include <utils/Entity.h>
|
#include <utils/Entity.h>
|
||||||
#include <mujoco/mujoco.h>
|
#include <mujoco/mujoco.h>
|
||||||
#include "experimental/filament/filament/material_manager.h"
|
#include "render/filament/core/material_manager.h"
|
||||||
#include "experimental/filament/filament/mesh.h"
|
#include "render/filament/core/mesh.h"
|
||||||
#include "experimental/filament/filament/reflection_manager.h"
|
#include "render/filament/core/reflection_manager.h"
|
||||||
#include "experimental/filament/render_context_filament.h"
|
#include "render/filament/mjrfilament.h"
|
||||||
|
|
||||||
namespace mujoco {
|
namespace mujoco {
|
||||||
|
|
||||||
enum LayerMask : uint8_t {
|
enum LayerMask : uint8_t {
|
||||||
kLayerMask_Object = 0x01 << 1,
|
kLayerMask_Object = 0x01 << 1,
|
||||||
kLayerMask_Decor = 0x01 << 2,
|
kLayerMask_Decor = 0x01 << 2,
|
||||||
kLayerMask_Outline = 0x01 << 3,
|
kLayerMask_Outline = 0x01 << 3,
|
||||||
kLayerMask_All = 0xff,
|
kLayerMask_All = 0xff,
|
||||||
kLayerMask_None = 0x00,
|
kLayerMask_None = 0x00,
|
||||||
};
|
};
|
||||||
|
|
||||||
// A Renderable is effectively two things: a mesh and a material.
|
// A Renderable is effectively two things: a mesh and a material.
|
||||||
@@ -114,7 +114,8 @@ class Renderable : public mjrfRenderable {
|
|||||||
// Binds the material instance for the given render request.
|
// Binds the material instance for the given render request.
|
||||||
void BindMaterialInstance(const mjrfRenderRequest& request);
|
void BindMaterialInstance(const mjrfRenderRequest& request);
|
||||||
|
|
||||||
MaterialManager::MaterialKey SetMaterialInstance(MaterialManager::MaterialKey key);
|
MaterialManager::MaterialKey SetMaterialInstance(
|
||||||
|
MaterialManager::MaterialKey key);
|
||||||
|
|
||||||
static Renderable* downcast(mjrfRenderable* renderable) {
|
static Renderable* downcast(mjrfRenderable* renderable) {
|
||||||
return static_cast<Renderable*>(renderable);
|
return static_cast<Renderable*>(renderable);
|
||||||
@@ -141,7 +142,7 @@ class Renderable : public mjrfRenderable {
|
|||||||
filament::math::float3 size{1.0f, 1.0f, 1.0f};
|
filament::math::float3 size{1.0f, 1.0f, 1.0f};
|
||||||
filament::math::mat4f ToTransform() const {
|
filament::math::mat4f ToTransform() const {
|
||||||
return filament::math::mat4f(rotation, translation) *
|
return filament::math::mat4f(rotation, translation) *
|
||||||
filament::math::mat4f::scaling(size);
|
filament::math::mat4f::scaling(size);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -185,4 +186,4 @@ class Renderable : public mjrfRenderable {
|
|||||||
|
|
||||||
} // namespace mujoco
|
} // namespace mujoco
|
||||||
|
|
||||||
#endif // MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_RENDERABLE_H_
|
#endif // MUJOCO_SRC_RENDER_FILAMENT_CORE_RENDERABLE_H_
|
||||||
+32
-32
@@ -12,7 +12,7 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
#include "experimental/filament/filament/scene_view.h"
|
#include "render/filament/core/scene_view.h"
|
||||||
|
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
@@ -24,32 +24,32 @@
|
|||||||
#include <filament/LightManager.h>
|
#include <filament/LightManager.h>
|
||||||
#include <filament/Material.h>
|
#include <filament/Material.h>
|
||||||
#include <filament/Options.h>
|
#include <filament/Options.h>
|
||||||
#include <filament/Renderer.h>
|
|
||||||
#include <filament/RenderableManager.h>
|
|
||||||
#include <filament/RenderTarget.h>
|
#include <filament/RenderTarget.h>
|
||||||
|
#include <filament/RenderableManager.h>
|
||||||
|
#include <filament/Renderer.h>
|
||||||
#include <filament/Skybox.h>
|
#include <filament/Skybox.h>
|
||||||
#include <filament/TransformManager.h>
|
#include <filament/TransformManager.h>
|
||||||
#include <filament/View.h>
|
#include <filament/View.h>
|
||||||
#include <filament/Viewport.h>
|
#include <filament/Viewport.h>
|
||||||
|
#include <math/TVecHelpers.h>
|
||||||
#include <math/mat4.h>
|
#include <math/mat4.h>
|
||||||
#include <math/mathfwd.h>
|
#include <math/mathfwd.h>
|
||||||
#include <math/scalar.h>
|
#include <math/scalar.h>
|
||||||
#include <math/TVecHelpers.h>
|
|
||||||
#include <math/vec3.h>
|
#include <math/vec3.h>
|
||||||
#include <math/vec4.h>
|
#include <math/vec4.h>
|
||||||
#include <utils/EntityManager.h>
|
#include <utils/EntityManager.h>
|
||||||
#include <mujoco/mujoco.h>
|
#include <mujoco/mujoco.h>
|
||||||
#include "experimental/filament/filament/object_manager.h"
|
#include "render/filament/core/color_grading_options.h"
|
||||||
#include "experimental/filament/filament/outliner.h"
|
#include "render/filament/core/light.h"
|
||||||
#include "experimental/filament/filament/reflection_manager.h"
|
#include "render/filament/core/material_manager.h"
|
||||||
#include "experimental/filament/filament_util.h"
|
#include "render/filament/core/object_manager.h"
|
||||||
#include "experimental/filament/filament/color_grading_options.h"
|
#include "render/filament/core/outliner.h"
|
||||||
#include "experimental/filament/filament/light.h"
|
#include "render/filament/core/reflection_manager.h"
|
||||||
#include "experimental/filament/filament/material_manager.h"
|
#include "render/filament/core/render_target.h"
|
||||||
#include "experimental/filament/filament/render_target.h"
|
#include "render/filament/core/renderable.h"
|
||||||
#include "experimental/filament/filament/renderable.h"
|
#include "render/filament/core/texture.h"
|
||||||
#include "experimental/filament/filament/texture.h"
|
#include "render/filament/mjrfilament.h"
|
||||||
#include "experimental/filament/render_context_filament.h"
|
#include "render/filament/support/filament_util.h"
|
||||||
|
|
||||||
namespace mujoco {
|
namespace mujoco {
|
||||||
|
|
||||||
@@ -94,8 +94,8 @@ static void SetupCamera(const mjrCamera& cam,
|
|||||||
: 0.5f * aspect_ratio * (cam.frustum_top - cam.frustum_bottom);
|
: 0.5f * aspect_ratio * (cam.frustum_top - cam.frustum_bottom);
|
||||||
camera->lookAt(cam_pos, cam_at, cam_up);
|
camera->lookAt(cam_pos, cam_at, cam_up);
|
||||||
camera->setProjection(type, cam.frustum_center - halfwidth,
|
camera->setProjection(type, cam.frustum_center - halfwidth,
|
||||||
cam.frustum_center + halfwidth, cam.frustum_bottom,
|
cam.frustum_center + halfwidth, cam.frustum_bottom,
|
||||||
cam.frustum_top, cam.frustum_near, cam.frustum_far);
|
cam.frustum_top, cam.frustum_near, cam.frustum_far);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sets up the `reflection_camera`'s projection matrix so that it is a
|
// Sets up the `reflection_camera`'s projection matrix so that it is a
|
||||||
@@ -120,7 +120,8 @@ static void SetupReflectionCamera(const mat4& surface_xform,
|
|||||||
const float3 plane_normal_camera = view_normal;
|
const float3 plane_normal_camera = view_normal;
|
||||||
const float plane_dist_camera = -dot(plane_normal_camera, view_pos);
|
const float plane_dist_camera = -dot(plane_normal_camera, view_pos);
|
||||||
const float4 oblique_plane(plane_normal_camera, plane_dist_camera);
|
const float4 oblique_plane(plane_normal_camera, plane_dist_camera);
|
||||||
const mat4 oblique = CalculateObliqueProjection(src_projection, oblique_plane);
|
const mat4 oblique =
|
||||||
|
CalculateObliqueProjection(src_projection, oblique_plane);
|
||||||
reflection_camera->setCustomProjection(oblique, near, far);
|
reflection_camera->setCustomProjection(oblique, near, far);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -252,7 +253,8 @@ void SceneView::PrepareToRender(std::span<const mjrfRenderRequest*> requests) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SceneView::Render(filament::Renderer* renderer, const mjrfRenderRequest& request) {
|
void SceneView::Render(filament::Renderer* renderer,
|
||||||
|
const mjrfRenderRequest& request) {
|
||||||
if (request.scene != this) {
|
if (request.scene != this) {
|
||||||
mju_error("Invalid scene for SceneView::Render.");
|
mju_error("Invalid scene for SceneView::Render.");
|
||||||
}
|
}
|
||||||
@@ -348,9 +350,7 @@ void SceneView::SetColorGradingOptions(const ColorGradingOptions& opts) {
|
|||||||
color_grading_options_ = opts;
|
color_grading_options_ = opts;
|
||||||
}
|
}
|
||||||
|
|
||||||
filament::View* SceneView::GetDefaultRenderView() {
|
filament::View* SceneView::GetDefaultRenderView() { return main_view_; }
|
||||||
return main_view_;
|
|
||||||
}
|
|
||||||
|
|
||||||
ColorGradingOptions SceneView::GetColorGradingOptions() const {
|
ColorGradingOptions SceneView::GetColorGradingOptions() const {
|
||||||
return color_grading_options_;
|
return color_grading_options_;
|
||||||
@@ -424,17 +424,17 @@ void SceneView::Configure(const mjModel* model) {
|
|||||||
fog_opts.enabled =
|
fog_opts.enabled =
|
||||||
ReadElement(model, "filament.fog.enabled", fog_opts.enabled);
|
ReadElement(model, "filament.fog.enabled", fog_opts.enabled);
|
||||||
fog_opts.color = ReadElement(model, "filament.fog.color", fog_opts.color);
|
fog_opts.color = ReadElement(model, "filament.fog.color", fog_opts.color);
|
||||||
fog_opts.distance = ReadElement(
|
fog_opts.distance =
|
||||||
model, "filament.fog.distance", fog_opts.distance);
|
ReadElement(model, "filament.fog.distance", fog_opts.distance);
|
||||||
fog_opts.density = ReadElement(
|
fog_opts.density =
|
||||||
model, "filament.fog.density", fog_opts.density);
|
ReadElement(model, "filament.fog.density", fog_opts.density);
|
||||||
fog_opts.cutOffDistance = ReadElement(
|
fog_opts.cutOffDistance = ReadElement(model, "filament.fog.cutOffDistance",
|
||||||
model, "filament.fog.cutOffDistance", fog_opts.cutOffDistance);
|
fog_opts.cutOffDistance);
|
||||||
fog_opts.maximumOpacity = ReadElement(
|
fog_opts.maximumOpacity = ReadElement(model, "filament.fog.maximumOpacity",
|
||||||
model, "filament.fog.maximumOpacity", fog_opts.maximumOpacity);
|
fog_opts.maximumOpacity);
|
||||||
fog_opts.height = ReadElement(model, "filament.fog.height", fog_opts.height);
|
fog_opts.height = ReadElement(model, "filament.fog.height", fog_opts.height);
|
||||||
fog_opts.heightFalloff = ReadElement(
|
fog_opts.heightFalloff =
|
||||||
model, "filament.fog.heightFalloff", fog_opts.heightFalloff);
|
ReadElement(model, "filament.fog.heightFalloff", fog_opts.heightFalloff);
|
||||||
fog_opts.inScatteringStart = ReadElement(
|
fog_opts.inScatteringStart = ReadElement(
|
||||||
model, "filament.fog.inScatteringStart", fog_opts.inScatteringStart);
|
model, "filament.fog.inScatteringStart", fog_opts.inScatteringStart);
|
||||||
fog_opts.inScatteringSize = ReadElement(
|
fog_opts.inScatteringSize = ReadElement(
|
||||||
+12
-12
@@ -12,8 +12,8 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
#ifndef MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_SCENE_VIEW_H_
|
#ifndef MUJOCO_SRC_RENDER_FILAMENT_CORE_SCENE_VIEW_H_
|
||||||
#define MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_SCENE_VIEW_H_
|
#define MUJOCO_SRC_RENDER_FILAMENT_CORE_SCENE_VIEW_H_
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <span>
|
#include <span>
|
||||||
@@ -25,15 +25,15 @@
|
|||||||
#include <filament/Scene.h>
|
#include <filament/Scene.h>
|
||||||
#include <filament/View.h>
|
#include <filament/View.h>
|
||||||
#include <mujoco/mujoco.h>
|
#include <mujoco/mujoco.h>
|
||||||
#include "experimental/filament/filament/color_grading_options.h"
|
#include "render/filament/core/color_grading_options.h"
|
||||||
#include "experimental/filament/filament/light.h"
|
#include "render/filament/core/light.h"
|
||||||
#include "experimental/filament/filament/material_manager.h"
|
#include "render/filament/core/material_manager.h"
|
||||||
#include "experimental/filament/filament/object_manager.h"
|
#include "render/filament/core/object_manager.h"
|
||||||
#include "experimental/filament/filament/outliner.h"
|
#include "render/filament/core/outliner.h"
|
||||||
#include "experimental/filament/filament/renderable.h"
|
#include "render/filament/core/reflection_manager.h"
|
||||||
#include "experimental/filament/filament/reflection_manager.h"
|
#include "render/filament/core/renderable.h"
|
||||||
#include "experimental/filament/filament/texture.h"
|
#include "render/filament/core/texture.h"
|
||||||
#include "experimental/filament/render_context_filament.h"
|
#include "render/filament/mjrfilament.h"
|
||||||
|
|
||||||
namespace mujoco {
|
namespace mujoco {
|
||||||
|
|
||||||
@@ -113,4 +113,4 @@ class SceneView : public mjrfScene {
|
|||||||
};
|
};
|
||||||
} // namespace mujoco
|
} // namespace mujoco
|
||||||
|
|
||||||
#endif // MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_SCENE_VIEW_H_
|
#endif // MUJOCO_SRC_RENDER_FILAMENT_CORE_SCENE_VIEW_H_
|
||||||
@@ -12,7 +12,7 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
#include "experimental/filament/filament/texture.h"
|
#include "render/filament/core/texture.h"
|
||||||
|
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
@@ -24,7 +24,7 @@
|
|||||||
#include <image/Ktx1Bundle.h>
|
#include <image/Ktx1Bundle.h>
|
||||||
#include <ktxreader/Ktx1Reader.h>
|
#include <ktxreader/Ktx1Reader.h>
|
||||||
#include <mujoco/mujoco.h>
|
#include <mujoco/mujoco.h>
|
||||||
#include "experimental/filament/render_context_filament.h"
|
#include "render/filament/mjrfilament.h"
|
||||||
|
|
||||||
namespace mujoco {
|
namespace mujoco {
|
||||||
|
|
||||||
@@ -67,7 +67,8 @@ static int GetNumChannels(const mjrfTextureConfig& config) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static filament::Texture::Format GetTextureFormat(const mjrfTextureConfig& config) {
|
static filament::Texture::Format GetTextureFormat(
|
||||||
|
const mjrfTextureConfig& config) {
|
||||||
switch (config.format) {
|
switch (config.format) {
|
||||||
case mjPIXEL_FORMAT_R8:
|
case mjPIXEL_FORMAT_R8:
|
||||||
return filament::Texture::Format::R;
|
return filament::Texture::Format::R;
|
||||||
@@ -78,7 +79,7 @@ static filament::Texture::Format GetTextureFormat(const mjrfTextureConfig& confi
|
|||||||
default:
|
default:
|
||||||
mju_error("Unsupported format: %d", (int)config.format);
|
mju_error("Unsupported format: %d", (int)config.format);
|
||||||
return filament::Texture::Format::UNUSED;
|
return filament::Texture::Format::UNUSED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static filament::Texture::InternalFormat GetTextureInternalFormat(
|
static filament::Texture::InternalFormat GetTextureInternalFormat(
|
||||||
@@ -204,7 +205,7 @@ void Texture::Upload(const mjrfTextureData& data) {
|
|||||||
if (config_.width == config_.height) {
|
if (config_.width == config_.height) {
|
||||||
uint8_t* copy = new uint8_t[num_bytes];
|
uint8_t* copy = new uint8_t[num_bytes];
|
||||||
auto release_callback = +[](void* buffer, size_t size, void* user) {
|
auto release_callback = +[](void* buffer, size_t size, void* user) {
|
||||||
delete [] reinterpret_cast<uint8_t*>(buffer);
|
delete[] reinterpret_cast<uint8_t*>(buffer);
|
||||||
};
|
};
|
||||||
for (int i = 0; i < kNumFacesPerCube; ++i) {
|
for (int i = 0; i < kNumFacesPerCube; ++i) {
|
||||||
std::memcpy(copy + (i * face_size), data.bytes, face_size);
|
std::memcpy(copy + (i * face_size), data.bytes, face_size);
|
||||||
@@ -12,13 +12,13 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
#ifndef MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_TEXTURE_H_
|
#ifndef MUJOCO_SRC_RENDER_FILAMENT_CORE_TEXTURE_H_
|
||||||
#define MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_TEXTURE_H_
|
#define MUJOCO_SRC_RENDER_FILAMENT_CORE_TEXTURE_H_
|
||||||
|
|
||||||
#include <filament/Engine.h>
|
#include <filament/Engine.h>
|
||||||
#include <filament/Texture.h>
|
#include <filament/Texture.h>
|
||||||
#include <math/vec3.h>
|
#include <math/vec3.h>
|
||||||
#include "experimental/filament/render_context_filament.h"
|
#include "render/filament/mjrfilament.h"
|
||||||
|
|
||||||
// Functions for creating filament textures.
|
// Functions for creating filament textures.
|
||||||
namespace mujoco {
|
namespace mujoco {
|
||||||
@@ -84,4 +84,4 @@ class Texture : public mjrfTexture {
|
|||||||
};
|
};
|
||||||
} // namespace mujoco
|
} // namespace mujoco
|
||||||
|
|
||||||
#endif // MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_TEXTURE_H_
|
#endif // MUJOCO_SRC_RENDER_FILAMENT_CORE_TEXTURE_H_
|
||||||
+16
-17
@@ -12,7 +12,7 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
#include "experimental/filament/render_context_filament.h"
|
#include "render/filament/mjrfilament.h"
|
||||||
|
|
||||||
#include <array>
|
#include <array>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
@@ -22,13 +22,13 @@
|
|||||||
#include <math/vec3.h>
|
#include <math/vec3.h>
|
||||||
#include <mujoco/mjmodel.h>
|
#include <mujoco/mjmodel.h>
|
||||||
#include <mujoco/mujoco.h>
|
#include <mujoco/mujoco.h>
|
||||||
#include "experimental/filament/filament/filament_context.h"
|
#include "render/filament/core/filament_context.h"
|
||||||
#include "experimental/filament/filament/light.h"
|
#include "render/filament/core/light.h"
|
||||||
#include "experimental/filament/filament/mesh.h"
|
#include "render/filament/core/mesh.h"
|
||||||
#include "experimental/filament/filament/render_target.h"
|
#include "render/filament/core/render_target.h"
|
||||||
#include "experimental/filament/filament/renderable.h"
|
#include "render/filament/core/renderable.h"
|
||||||
#include "experimental/filament/filament/scene_view.h"
|
#include "render/filament/core/scene_view.h"
|
||||||
#include "experimental/filament/filament/texture.h"
|
#include "render/filament/core/texture.h"
|
||||||
|
|
||||||
template <int N>
|
template <int N>
|
||||||
static void setf(float (&arr)[N], const std::array<float, N>& values) {
|
static void setf(float (&arr)[N], const std::array<float, N>& values) {
|
||||||
@@ -125,7 +125,7 @@ void mjrf_destroyContext(mjrfContext* ctx) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
mjrfTexture* mjrf_createTexture(mjrfContext* ctx,
|
mjrfTexture* mjrf_createTexture(mjrfContext* ctx,
|
||||||
const mjrfTextureConfig* config) {
|
const mjrfTextureConfig* config) {
|
||||||
return new mujoco::Texture(
|
return new mujoco::Texture(
|
||||||
mujoco::FilamentContext::downcast(ctx)->GetEngine(), *config);
|
mujoco::FilamentContext::downcast(ctx)->GetEngine(), *config);
|
||||||
}
|
}
|
||||||
@@ -161,7 +161,7 @@ void mjrf_destroyLight(mjrfLight* light) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
mjrfRenderable* mjrf_createRenderable(mjrfContext* ctx,
|
mjrfRenderable* mjrf_createRenderable(mjrfContext* ctx,
|
||||||
const mjrfRenderableParams* params) {
|
const mjrfRenderableParams* params) {
|
||||||
return new mujoco::Renderable(
|
return new mujoco::Renderable(
|
||||||
mujoco::FilamentContext::downcast(ctx)->GetEngine(), *params,
|
mujoco::FilamentContext::downcast(ctx)->GetEngine(), *params,
|
||||||
mujoco::FilamentContext::downcast(ctx)->GetMaterialManager());
|
mujoco::FilamentContext::downcast(ctx)->GetMaterialManager());
|
||||||
@@ -171,8 +171,8 @@ void mjrf_destroyRenderable(mjrfRenderable* renderable) {
|
|||||||
delete mujoco::Renderable::downcast(renderable);
|
delete mujoco::Renderable::downcast(renderable);
|
||||||
}
|
}
|
||||||
|
|
||||||
mjrfRenderTarget* mjrf_createRenderTarget(mjrfContext* ctx,
|
mjrfRenderTarget* mjrf_createRenderTarget(
|
||||||
const mjrfRenderTargetConfig* config) {
|
mjrfContext* ctx, const mjrfRenderTargetConfig* config) {
|
||||||
return new mujoco::RenderTarget(
|
return new mujoco::RenderTarget(
|
||||||
mujoco::FilamentContext::downcast(ctx)->GetEngine(), *config);
|
mujoco::FilamentContext::downcast(ctx)->GetEngine(), *config);
|
||||||
}
|
}
|
||||||
@@ -232,8 +232,8 @@ void mjrf_setRenderableMesh(mjrfRenderable* renderable, const mjrfMesh* mesh,
|
|||||||
|
|
||||||
void mjrf_setRenderableGeomMesh(mjrfRenderable* renderable, mjtGeom type,
|
void mjrf_setRenderableGeomMesh(mjrfRenderable* renderable, mjtGeom type,
|
||||||
int nstack, int nslice, int nquad) {
|
int nstack, int nslice, int nquad) {
|
||||||
mujoco::Renderable::downcast(renderable)->SetGeomMesh(type, nstack, nslice,
|
mujoco::Renderable::downcast(renderable)
|
||||||
nquad);
|
->SetGeomMesh(type, nstack, nslice, nquad);
|
||||||
}
|
}
|
||||||
|
|
||||||
void mjrf_setRenderableMaterial(mjrfRenderable* renderable,
|
void mjrf_setRenderableMaterial(mjrfRenderable* renderable,
|
||||||
@@ -253,8 +253,7 @@ void mjrf_setRenderableTransform(mjrfRenderable* renderable,
|
|||||||
const filament::math::mat3f frotation{rotation[0], rotation[3], rotation[6],
|
const filament::math::mat3f frotation{rotation[0], rotation[3], rotation[6],
|
||||||
rotation[1], rotation[4], rotation[7],
|
rotation[1], rotation[4], rotation[7],
|
||||||
rotation[2], rotation[5], rotation[8]};
|
rotation[2], rotation[5], rotation[8]};
|
||||||
mujoco::Renderable::downcast(renderable)
|
mujoco::Renderable::downcast(renderable)->SetTransform(fposition, frotation);
|
||||||
->SetTransform(fposition, frotation);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void mjrf_setRenderableSize(mjrfRenderable* renderable, const float size[3]) {
|
void mjrf_setRenderableSize(mjrfRenderable* renderable, const float size[3]) {
|
||||||
@@ -293,7 +292,7 @@ void mjrf_configureSceneFromModel(mjrfScene* scene, const mjModel* model) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void mjrf_resizeRenderTarget(mjrfRenderTarget* render_target, int width,
|
void mjrf_resizeRenderTarget(mjrfRenderTarget* render_target, int width,
|
||||||
int height) {
|
int height) {
|
||||||
mujoco::RenderTarget::downcast(render_target)->Prepare(width, height);
|
mujoco::RenderTarget::downcast(render_target)->Prepare(width, height);
|
||||||
}
|
}
|
||||||
|
|
||||||
+3
-3
@@ -12,8 +12,8 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
#ifndef MUJOCO_SRC_EXPERIMENTAL_FILAMENT_RENDER_CONTEXT_FILAMENT_H_
|
#ifndef MUJOCO_SRC_RENDER_FILAMENT_MJRFILAMENT_H_
|
||||||
#define MUJOCO_SRC_EXPERIMENTAL_FILAMENT_RENDER_CONTEXT_FILAMENT_H_
|
#define MUJOCO_SRC_RENDER_FILAMENT_MJRFILAMENT_H_
|
||||||
|
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
|
|
||||||
@@ -478,4 +478,4 @@ void mjrf_DEBUG_drawImguiEditor(mjrfScene* scene);
|
|||||||
} // extern "C"
|
} // extern "C"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif // MUJOCO_SRC_EXPERIMENTAL_FILAMENT_RENDER_CONTEXT_FILAMENT_H_
|
#endif // MUJOCO_SRC_RENDER_FILAMENT_MJRFILAMENT_H_
|
||||||
+4
-4
@@ -12,13 +12,13 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
#ifndef MUJOCO_SRC_EXPERIMENTAL_FILAMENT_RENDER_CONTEXT_FILAMENT_CPP_H_
|
#ifndef MUJOCO_SRC_RENDER_FILAMENT_MJRFILAMENT_CPP_H_
|
||||||
#define MUJOCO_SRC_EXPERIMENTAL_FILAMENT_RENDER_CONTEXT_FILAMENT_CPP_H_
|
#define MUJOCO_SRC_RENDER_FILAMENT_MJRFILAMENT_CPP_H_
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
#include "experimental/filament/render_context_filament.h"
|
#include "render/filament/mjrfilament.h"
|
||||||
|
|
||||||
namespace mujoco {
|
namespace mujoco {
|
||||||
|
|
||||||
@@ -71,4 +71,4 @@ std::string ResolveFilamentAssetPath(const std::string& filename);
|
|||||||
|
|
||||||
} // namespace mujoco
|
} // namespace mujoco
|
||||||
|
|
||||||
#endif // MUJOCO_SRC_EXPERIMENTAL_FILAMENT_RENDER_CONTEXT_FILAMENT_CPP_H_
|
#endif // MUJOCO_SRC_RENDER_FILAMENT_MJRFILAMENT_CPP_H_
|
||||||
+9
-11
@@ -12,15 +12,16 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
#include "experimental/filament/filament_util.h"
|
#include "render/filament/support/filament_util.h"
|
||||||
|
|
||||||
#include <limits>
|
#include <limits>
|
||||||
|
|
||||||
|
#include <math/TVecHelpers.h>
|
||||||
#include <math/mat3.h>
|
#include <math/mat3.h>
|
||||||
#include <math/mat4.h>
|
#include <math/mat4.h>
|
||||||
#include <math/quat.h>
|
#include <math/quat.h>
|
||||||
#include <math/vec3.h>
|
#include <math/vec3.h>
|
||||||
#include <math/vec4.h>
|
#include <math/vec4.h>
|
||||||
#include <math/TVecHelpers.h>
|
|
||||||
|
|
||||||
namespace mujoco {
|
namespace mujoco {
|
||||||
|
|
||||||
@@ -86,7 +87,6 @@ mat4 CalculateObliqueProjection(const mat4& projection, const float4& plane) {
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
float4 CalculateOrientation(const float3& normal) {
|
float4 CalculateOrientation(const float3& normal) {
|
||||||
float3 tangent;
|
float3 tangent;
|
||||||
float3 bitangent;
|
float3 bitangent;
|
||||||
@@ -104,19 +104,17 @@ float4 CalculateOrientation(const float3& normal) {
|
|||||||
return float4(orientation.xyz, orientation.w);
|
return float4(orientation.xyz, orientation.w);
|
||||||
}
|
}
|
||||||
|
|
||||||
float3 CalculateNormal(
|
float3 CalculateNormal(const filament::math::float3& p1,
|
||||||
const filament::math::float3& p1,
|
const filament::math::float3& p2,
|
||||||
const filament::math::float3& p2,
|
const filament::math::float3& p3) {
|
||||||
const filament::math::float3& p3) {
|
|
||||||
const float3 v12 = p2 - p1;
|
const float3 v12 = p2 - p1;
|
||||||
const float3 v13 = p3 - p1;
|
const float3 v13 = p3 - p1;
|
||||||
return normalize(cross(v12, v13));
|
return normalize(cross(v12, v13));
|
||||||
}
|
}
|
||||||
|
|
||||||
float4 CalculateOrientation(
|
float4 CalculateOrientation(const filament::math::float3& p1,
|
||||||
const filament::math::float3& p1,
|
const filament::math::float3& p2,
|
||||||
const filament::math::float3& p2,
|
const filament::math::float3& p3) {
|
||||||
const filament::math::float3& p3) {
|
|
||||||
return CalculateOrientation(CalculateNormal(p1, p2, p3));
|
return CalculateOrientation(CalculateNormal(p1, p2, p3));
|
||||||
}
|
}
|
||||||
|
|
||||||
+10
-11
@@ -12,10 +12,11 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
#ifndef MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_UTIL_H_
|
#ifndef MUJOCO_SRC_RENDER_FILAMENT_SUPPORT_FILAMENT_UTIL_H_
|
||||||
#define MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_UTIL_H_
|
#define MUJOCO_SRC_RENDER_FILAMENT_SUPPORT_FILAMENT_UTIL_H_
|
||||||
|
|
||||||
#include <string_view>
|
#include <string_view>
|
||||||
|
|
||||||
#include <math/mat3.h>
|
#include <math/mat3.h>
|
||||||
#include <math/mat4.h>
|
#include <math/mat4.h>
|
||||||
#include <math/vec2.h>
|
#include <math/vec2.h>
|
||||||
@@ -68,20 +69,18 @@ filament::math::mat4 CalculateObliqueProjection(
|
|||||||
const filament::math::float4& plane);
|
const filament::math::float4& plane);
|
||||||
|
|
||||||
// Calculates the normal of a triangle given its three vertices.
|
// Calculates the normal of a triangle given its three vertices.
|
||||||
filament::math::float3 CalculateNormal(
|
filament::math::float3 CalculateNormal(const filament::math::float3& p1,
|
||||||
const filament::math::float3& p1,
|
const filament::math::float3& p2,
|
||||||
const filament::math::float3& p2,
|
const filament::math::float3& p3);
|
||||||
const filament::math::float3& p3);
|
|
||||||
|
|
||||||
// Calculates the orientation of a vertex given just its normal.
|
// Calculates the orientation of a vertex given just its normal.
|
||||||
filament::math::float4 CalculateOrientation(
|
filament::math::float4 CalculateOrientation(
|
||||||
const filament::math::float3& normal);
|
const filament::math::float3& normal);
|
||||||
|
|
||||||
// Calculates the orientation of a triangle given its three vertices.
|
// Calculates the orientation of a triangle given its three vertices.
|
||||||
filament::math::float4 CalculateOrientation(
|
filament::math::float4 CalculateOrientation(const filament::math::float3& p1,
|
||||||
const filament::math::float3& p1,
|
const filament::math::float3& p2,
|
||||||
const filament::math::float3& p2,
|
const filament::math::float3& p3);
|
||||||
const filament::math::float3& p3);
|
|
||||||
|
|
||||||
// Reads a value with the given name from the mjModel's data sections. The
|
// Reads a value with the given name from the mjModel's data sections. The
|
||||||
// default_value is returned if the named element is not found.
|
// default_value is returned if the named element is not found.
|
||||||
@@ -130,4 +129,4 @@ T ReadElement(const mjModel* model, const char* name, T default_value = T()) {
|
|||||||
|
|
||||||
} // namespace mujoco
|
} // namespace mujoco
|
||||||
|
|
||||||
#endif // MUJOCO_SRC_EXPERIMENTAL_FILAMENT_FILAMENT_UTIL_H_
|
#endif // MUJOCO_SRC_RENDER_FILAMENT_SUPPORT_FILAMENT_UTIL_H_
|
||||||
Reference in New Issue
Block a user