Add support mjcf emissive layer materials
Mujoco supports emission as a constant coefficient, and emissive, an rgb texture. This cl supports the rgb emissive texture for usd. PiperOrigin-RevId: 775236677 Change-Id: I0e2ce1d9f68d79b6e9d2c28eecab22b2692f061c
This commit is contained in:
committed by
Copybara-Service
parent
a0614fff1f
commit
78df2ae7fa
@@ -91,6 +91,7 @@ TF_DEFINE_PRIVATE_TOKENS(kTokens,
|
|||||||
((inputsWrapS, "inputs:wrapS"))
|
((inputsWrapS, "inputs:wrapS"))
|
||||||
((inputsWrapT, "inputs:wrapT"))
|
((inputsWrapT, "inputs:wrapT"))
|
||||||
((inputsDiffuseColor, "inputs:diffuseColor"))
|
((inputsDiffuseColor, "inputs:diffuseColor"))
|
||||||
|
((inputsEmissiveColor, "inputs:emissiveColor"))
|
||||||
((outputsRgb, "outputs:rgb"))
|
((outputsRgb, "outputs:rgb"))
|
||||||
((outputsR, "outputs:r"))
|
((outputsR, "outputs:r"))
|
||||||
((outputsG, "outputs:g"))
|
((outputsG, "outputs:g"))
|
||||||
@@ -794,6 +795,26 @@ class ModelWriter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Connect an emissive texture if specified.
|
||||||
|
if (mjTEXROLE_EMISSIVE < textures.size()) {
|
||||||
|
std::string emissive_texture_name = textures[mjTEXROLE_EMISSIVE];
|
||||||
|
mjsTexture *emissive_texture = mjs_asTexture(
|
||||||
|
mjs_findElement(spec_, mjOBJ_TEXTURE, emissive_texture_name.c_str()));
|
||||||
|
if (emissive_texture) {
|
||||||
|
pxr::SdfPath emissive_attr = CreateAttributeSpec(
|
||||||
|
data_, preview_surface_shader_path, kTokens->inputsEmissiveColor,
|
||||||
|
pxr::SdfValueTypeNames->Color3f);
|
||||||
|
const std::vector<pxr::SdfPath> emissive_map_output_attrs =
|
||||||
|
AddTextureShader(material_path, emissive_texture->file->c_str(),
|
||||||
|
pxr::TfToken("emissive"), uvmap_st_output_attr,
|
||||||
|
{kTokens->outputsRgb});
|
||||||
|
if (emissive_map_output_attrs.size() == 1) {
|
||||||
|
AddAttributeConnection(data_, emissive_attr,
|
||||||
|
emissive_map_output_attrs[0]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pxr::SdfPath diffuse_color_attr = CreateAttributeSpec(
|
pxr::SdfPath diffuse_color_attr = CreateAttributeSpec(
|
||||||
data_, preview_surface_shader_path, kTokens->inputsDiffuseColor,
|
data_, preview_surface_shader_path, kTokens->inputsDiffuseColor,
|
||||||
pxr::SdfValueTypeNames->Color3f);
|
pxr::SdfValueTypeNames->Color3f);
|
||||||
|
|||||||
@@ -192,6 +192,16 @@ TEST_F(MjcfSdfFileFormatPluginTest, TestMaterials) {
|
|||||||
stage, "/mesh_test/Materials/material_layered/orm_packed.inputs:file",
|
stage, "/mesh_test/Materials/material_layered/orm_packed.inputs:file",
|
||||||
pxr::SdfAssetPath("textures/orm.png"));
|
pxr::SdfAssetPath("textures/orm.png"));
|
||||||
|
|
||||||
|
EXPECT_PRIM_VALID(stage, "/mesh_test/Materials/material_layered/emissive");
|
||||||
|
ExpectAttributeHasConnection(
|
||||||
|
stage,
|
||||||
|
"/mesh_test/Materials/material_layered/"
|
||||||
|
"PreviewSurface.inputs:emissiveColor",
|
||||||
|
"/mesh_test/Materials/material_layered/emissive.outputs:rgb");
|
||||||
|
ExpectAttributeEqual(
|
||||||
|
stage, "/mesh_test/Materials/material_layered/emissive.inputs:file",
|
||||||
|
pxr::SdfAssetPath("textures/emissive.png"));
|
||||||
|
|
||||||
EXPECT_PRIM_VALID(stage, "/mesh_test/Materials/material_metallic");
|
EXPECT_PRIM_VALID(stage, "/mesh_test/Materials/material_metallic");
|
||||||
EXPECT_PRIM_VALID(stage,
|
EXPECT_PRIM_VALID(stage,
|
||||||
"/mesh_test/Materials/material_metallic/PreviewSurface");
|
"/mesh_test/Materials/material_metallic/PreviewSurface");
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
<texture name="diffuse_tex" file="textures/cube.png" type="2d" />
|
<texture name="diffuse_tex" file="textures/cube.png" type="2d" />
|
||||||
<texture name="normal_tex" file="textures/normal.png" type="2d" />
|
<texture name="normal_tex" file="textures/normal.png" type="2d" />
|
||||||
<texture name="orm_tex" file="textures/orm.png" type="2d" />
|
<texture name="orm_tex" file="textures/orm.png" type="2d" />
|
||||||
|
<texture name="emissive_tex" file="textures/emissive.png" type="2d" />
|
||||||
<material name="material_red" rgba="0.8 0 0 1" />
|
<material name="material_red" rgba="0.8 0 0 1" />
|
||||||
<material name="material_texture" texture="diffuse_tex" />
|
<material name="material_texture" texture="diffuse_tex" />
|
||||||
<material name="material_metallic" rgba="0.8 0 0 1" metallic="0.6"/>
|
<material name="material_metallic" rgba="0.8 0 0 1" metallic="0.6"/>
|
||||||
@@ -10,6 +11,7 @@
|
|||||||
<layer texture="diffuse_tex" role="rgb"/>
|
<layer texture="diffuse_tex" role="rgb"/>
|
||||||
<layer texture="normal_tex" role="normal"/>
|
<layer texture="normal_tex" role="normal"/>
|
||||||
<layer texture="orm_tex" role="orm"/>
|
<layer texture="orm_tex" role="orm"/>
|
||||||
|
<layer texture="emissive_tex" role="emissive"/>
|
||||||
</material>
|
</material>
|
||||||
2d texture="diffuse" normal="normal" />
|
2d texture="diffuse" normal="normal" />
|
||||||
<mesh name="tetrahedron" vertex="0 0 0 1 0 0 0 1 0 0 0 1"/>
|
<mesh name="tetrahedron" vertex="0 0 0 1 0 0 0 1 0 0 0 1"/>
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 6.7 KiB |
Reference in New Issue
Block a user