Add some comments to the material construction code

Grouped similar lines together, since they have become separated.

PiperOrigin-RevId: 775595031
Change-Id: Id75e87e07eb2e6b745698a57ea048daaff34f35c
This commit is contained in:
Google DeepMind
2025-06-25 02:21:51 -07:00
committed by Copybara-Service
parent 9089059517
commit 81d16b7ccc
2 changed files with 33 additions and 18 deletions
@@ -78,7 +78,7 @@ TF_DEFINE_PRIVATE_TOKENS(kTokens,
((light, "Light"))
((meshScope, "MeshSources"))
((materialsScope, "Materials"))
((surface, "PreviewSurface"))
((previewSurface, "PreviewSurface"))
((world, "World"))
((xformOpTransform, "xformOp:transform"))
((xformOpScale, "xformOp:scale"))
@@ -710,30 +710,49 @@ class ModelWriter {
}
void WriteMaterial(mjsMaterial *material, const pxr::SdfPath &parent_path) {
// Create a Material prim.
auto name = GetAvailablePrimName(
*material->name, pxr::UsdShadeTokens->Material, parent_path);
pxr::SdfPath material_path =
CreatePrimSpec(data_, parent_path, name, pxr::UsdShadeTokens->Material);
// Shader "PreviewSurface"
pxr::SdfPath preview_surface_shader_path = CreatePrimSpec(
data_, material_path, kTokens->surface, pxr::UsdShadeTokens->Shader);
// Create a Shader prim "PreviewSurface" under the Material prim.
pxr::SdfPath preview_surface_shader_path =
CreatePrimSpec(data_, material_path, kTokens->previewSurface,
pxr::UsdShadeTokens->Shader);
// Set the Shader'sinfoId attribute to UsdPreviewSurface, a standard surface
// shader.
pxr::SdfPath info_id_attr = CreateAttributeSpec(
data_, preview_surface_shader_path, pxr::UsdShadeTokens->infoId,
pxr::SdfValueTypeNames->Token, pxr::SdfVariabilityUniform);
SetAttributeDefault(data_, info_id_attr,
pxr::UsdImagingTokens->UsdPreviewSurface);
// Connect material's surface output to the preview surface's surface
// output.
pxr::SdfPath surface_output_attr = CreateAttributeSpec(
data_, preview_surface_shader_path, pxr::UsdShadeTokens->outputsSurface,
pxr::SdfValueTypeNames->Token);
pxr::SdfPath material_surface_output_attr = CreateAttributeSpec(
data_, material_path, pxr::UsdShadeTokens->outputsSurface,
pxr::SdfValueTypeNames->Token);
AddAttributeConnection(data_, material_surface_output_attr,
surface_output_attr);
// Connect material's displacement output to the preview surface's
// displacement output.
pxr::SdfPath displacement_output_attr =
CreateAttributeSpec(data_, preview_surface_shader_path,
pxr::UsdShadeTokens->outputsDisplacement,
pxr::SdfValueTypeNames->Token);
pxr::SdfPath material_displacement_output_attr = CreateAttributeSpec(
data_, material_path, pxr::UsdShadeTokens->outputsDisplacement,
pxr::SdfValueTypeNames->Token);
AddAttributeConnection(data_, material_displacement_output_attr,
displacement_output_attr);
// Add an st (uv) Shader, a prim var reader for the UV coordinates.
const pxr::SdfPath &uvmap_st_output_attr =
AddUVTextureShader(material_path, pxr::TfToken("uvmap"));
const mjStringVec &textures = *(material->textures);
@@ -815,6 +834,8 @@ class ModelWriter {
}
}
// Set the value of diffuse color. This can come from a diffuse texture
// or as a value defined in mjsMaterial_.
pxr::SdfPath diffuse_color_attr = CreateAttributeSpec(
data_, preview_surface_shader_path, kTokens->inputsDiffuseColor,
pxr::SdfValueTypeNames->Color3f);
@@ -840,20 +861,6 @@ class ModelWriter {
pxr::GfVec3f(material->rgba[0], material->rgba[1],
material->rgba[2]));
}
pxr::SdfPath material_surface_output_attr = CreateAttributeSpec(
data_, material_path, pxr::UsdShadeTokens->outputsSurface,
pxr::SdfValueTypeNames->Token);
AddAttributeConnection(data_, material_surface_output_attr,
surface_output_attr);
pxr::SdfPath material_displacement_output_attr = CreateAttributeSpec(
data_, material_path, pxr::UsdShadeTokens->outputsDisplacement,
pxr::SdfValueTypeNames->Token);
AddAttributeConnection(data_, material_displacement_output_attr,
displacement_output_attr);
}
void WriteMaterials() {
@@ -143,6 +143,14 @@ TEST_F(MjcfSdfFileFormatPluginTest, TestMaterials) {
stage,
"/mesh_test/Materials/material_red/PreviewSurface.inputs:diffuseColor",
pxr::GfVec3f(0.8, 0, 0));
ExpectAttributeHasConnection(
stage,
"/mesh_test/Materials/material_red.outputs:surface",
"/mesh_test/Materials/material_red/PreviewSurface.outputs:surface");
ExpectAttributeHasConnection(
stage,
"/mesh_test/Materials/material_red.outputs:displacement",
"/mesh_test/Materials/material_red/PreviewSurface.outputs:displacement");
EXPECT_PRIM_VALID(stage, "/mesh_test/Materials/material_texture");
EXPECT_PRIM_VALID(stage,